We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
例えば、drawText のシグネチャは次のようになっている。
void drawText(const StringRef& text, const Color& color, Font* font);
これを、次のようにしたい。
void setTextColor(const Color& color); void setFont(Font* font); void drawText(const StringRef& text);
drawText を UIElement のカスタム実装で使おうとしたときに、既定の設定を使うためには color と font は finalStyle() から取り出す必要がある。
この処理のため定型的なコードが増えてしまい煩わしい。
ステートレス方式はいわゆる数学的に単純であるが、パラメータが多くなるためほとんどのケースでは冗長なコードが増え、メンテナンスが難しくなる。
ステートフル方式はパラメータが少なく簡単に使えるが、プログラマが現在の状態を正しく認識することが難しく、不具合が発生しやすくなる。
ステートフル方式の問題の軽減策として、ステートの Reset と Push/Pop による復元をサポートする。
実際のところステートは Font や Color だけではなく、RenderTarget や BlendState など多岐にわたる。
もし完全ステートレスを目指すなら DX12 や Vulkan の Pipeline 相当のデータ構造が必要になるが、パフォーマンスを徹底的に追求するならまだしも、 フレームワークというものが目指すものである「制約を設けて開発速度を上げる」からは逆の考えになってきそうなので思い直した方がよさそう。
The text was updated successfully, but these errors were encountered:
#117 Style, TextLayout
84de834
No branches or pull requests
Proposal
例えば、drawText のシグネチャは次のようになっている。
これを、次のようにしたい。
Motivation
drawText を UIElement のカスタム実装で使おうとしたときに、既定の設定を使うためには color と font は finalStyle() から取り出す必要がある。
この処理のため定型的なコードが増えてしまい煩わしい。
Implementation
ステートレス VS ステートフル
ステートレス方式はいわゆる数学的に単純であるが、パラメータが多くなるためほとんどのケースでは冗長なコードが増え、メンテナンスが難しくなる。
ステートフル方式はパラメータが少なく簡単に使えるが、プログラマが現在の状態を正しく認識することが難しく、不具合が発生しやすくなる。
ステートリセットと Push/Pop
ステートフル方式の問題の軽減策として、ステートの Reset と Push/Pop による復元をサポートする。
Note
実際のところステートは Font や Color だけではなく、RenderTarget や BlendState など多岐にわたる。
もし完全ステートレスを目指すなら DX12 や Vulkan の Pipeline 相当のデータ構造が必要になるが、パフォーマンスを徹底的に追求するならまだしも、
フレームワークというものが目指すものである「制約を設けて開発速度を上げる」からは逆の考えになってきそうなので思い直した方がよさそう。
The text was updated successfully, but these errors were encountered: