Snapshot before repaint phase 2

This commit is contained in:
Codex
2026-04-07 21:37:49 +08:00
parent b07a4ec370
commit 77a8fe568a
10 changed files with 395 additions and 131 deletions
+8
View File
@@ -32,6 +32,8 @@
#include <functional>
#include "CoreTypes.h"
class Window;
class Control
{
protected:
@@ -39,6 +41,7 @@ protected:
int localx, x, localy, y; // 左上角坐标
int localWidth, width, localHeight, height; // 控件尺寸
Control* parent = nullptr; // 父控件
Window* hostWindow = nullptr; // 宿主窗口(顶层由 Window 注入,子控件可沿 parent 回溯)
bool dirty = true; // 是否重绘
bool show = true; // 是否显示
bool eventVisualChanged = false; // 最近一次 handleEvent 是否真的引发了视觉变化
@@ -82,6 +85,7 @@ protected:
virtual void requestRepaint(Control* parent);
//根控件/无父时触发重绘
virtual void onRequestRepaintAsRoot();
bool shouldDeferManagedRepaint() const;
protected:
//保存背景快照
virtual void saveBackground(int x, int y, int w, int h);
@@ -121,6 +125,10 @@ public:
virtual void setIsVisible(bool show);
//设置父容器指针
void setParent(Control* parent) { this->parent = parent; }
//设置宿主窗口(通常仅由顶层 Window/对话框注入)
virtual void setHostWindow(Window* host) { this->hostWindow = host; }
Window* getHostWindow() const;
RECT getBoundsRect() const;
//设置是否重绘
virtual void setDirty(bool dirty) { this->dirty = dirty; }
//检查控件是否可见