【发布时间】:2013-03-07 22:05:36
【问题描述】:
我正在为各种目标编写一个跨平台的 UI 工具包,其中一些是嵌入式的。其中一些平台支持“保留”渲染模式,其中一些更“即时”,所以我认为对于我的视觉效果我有两棵树 - 伪代码:
abstract class Visual
{
Visual( Widget widget ) { this.widget = widget; }
}
abstract class RetainedVisual : Visual
{
abstract void Setup( Renderer r );
abstract void Teardown( Renderer r );
}
abstract class ImmediateVisual : Visual
{
abstract void Paint( Renderer r );
}
到目前为止一切顺利。但是现在我也有 ContainerVisual 类来编码小部件层次结构:
abstract class ContainerVisual : Visual
{
void AddChild( Visual child ) {}
}
这迫使我拥有一个开始看起来臃肿的ImmediateContainerVisual 和RetainedContainerVisual 类。更好的设计想法?
【问题讨论】:
-
因此出现了“伪代码”这个词,Joachim。最终设计必须可以在 C++ 中实现(因此:没有反射或其他狡猾的东西)。
-
retained 是否意味着缓冲?此外,您还没有说明
RetainedVisual和ImmediateVisual之间的功能差异应该是什么,或者它们有什么共同点(它们共享一个基类,但显然没有虚拟方法或数据)。 -
“保留”意味着您将图形提交到上下文,然后忘记它们(直到发生变化)。所以“设置”将图形一次推送到渲染器中。和“拆解”删除它们。 “立即”意味着您将每帧连续绘制一次图形到渲染器中。你不需要使东西无效,因为它通常都会被重绘。
标签: c++ oop model-view-controller user-interface