Skip to content

Add BackendFlag-based backend redraw gating and cleanup#67

Draft
Copilot wants to merge 10 commits into
mainfrom
copilot/implement-pagination-effect
Draft

Add BackendFlag-based backend redraw gating and cleanup#67
Copilot wants to merge 10 commits into
mainfrom
copilot/implement-pagination-effect

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 26, 2026

Introduce a backend redraw path that updates widgetBackendRedraw without rendering widget contents, and remove widgets from the backend list once they are no longer dirty.

  • Backend redraw state & tracking

    • Added BackendFlag, widgetBackendRedraw, and markWidgetBackendRedraw to centralize backend-only updates.
    • Added isBackendDirty() to Widget and overrides to capture widget-specific dirty criteria (ripples, focus, animations, progress interpolation).
  • Draw gating for backend updates

    • Guarded widget draw paths (and ripple draw) to no-op when BackendFlag is true, preventing visual rendering during backend updates.
  • Backend cleanup pass

    • Added a backend redraw loop in Element.cpp that toggles BackendFlag, calls draw() for backend updates, and removes widgets that are no longer dirty.

Example:

BackendFlag = true;
for (auto it = widgetBackendRedraw.begin(); it != widgetBackendRedraw.end(); ) {
    Widget* w = *it;
    w->draw();
    if (!w->isBackendDirty()) it = widgetBackendRedraw.erase(it);
    else ++it;
}
BackendFlag = false;

Copilot AI changed the title Add pagination demo: multi-page widget showcase using assignOrder Add multi-page pagination demo using assignOrder May 26, 2026
Copilot AI requested a review from FeJS8888 May 26, 2026 08:59
Copilot AI changed the title Add multi-page pagination demo using assignOrder Add BackendFlag-based backend redraw gating and cleanup May 26, 2026
@FeJS8888 FeJS8888 force-pushed the copilot/implement-pagination-effect branch from c82f9e8 to 57b1086 Compare May 27, 2026 12:04
@FeJS8888
Copy link
Copy Markdown
Owner

@copilot 我最初给了个错误的指令,现在我force push了你的最后提交,重新完成,以下为指令:根据我刚刚完善的框架的提交,对所有Widget以及ripple等试图绘制的时候先判断如果BackendFlag为true就不绘制,从而做到只更新widgetBackendRedraw而不绘制其中内容,并且在Element.cpp里面BackendFlag = true;
for(auto w : widgetBackendRedraw){
w->draw();
}
BackendFlag = false;这里进行判断,如果w在更新结束后不再dirty,(注意多个dirty标志),就把他移出。

Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 27, 2026

@copilot 我最初给了个错误的指令,现在我force push了你的最后提交,重新完成,以下为指令:根据我刚刚完善的框架的提交,对所有Widget以及ripple等试图�...

已按要求更新 BackendFlag 绘制判断与后端清理逻辑,提交:0e94ba5。

@FeJS8888
Copy link
Copy Markdown
Owner

@copilot 现在的void Slider::draw(PIMAGE dst,double x,double y){
double left = x - width / 2;
double top = y - height / 2;
// 动态更新缩放比例
if (m_pressed) {
m_scale += (0.8f - m_scale) * 0.2f; // 缓动到 60%
} else {
m_scale += (1.0f - m_scale) * 0.2f; // 回弹
}

// 平滑过渡进度
m_progress += (m_finalprogress - m_progress) * 0.15;
if (fabs(m_progress - m_finalprogress) < 0.005)
    m_progress = m_finalprogress;

// 检查是否有动画正在进行,需要持续重绘
bool isAnimating = (fabs(m_scale - (m_pressed ? 0.8f : 1.0f)) > 0.01) || 
                   (fabs(m_progress - m_finalprogress) > 0.005);

if(this->parent != nullptr){
    if (Panel* p = dynamic_cast<Panel*>(this->parent)) {
        if(isAnimating){
            p->setAlwaysDirty(true);
            p->setDirty();
            this->setDrawing(true);
        } else {
            p->setAlwaysDirty(false);
            this->setDrawing(false);
        }
    }
}setAlwaysDirty不正确,修复

Copy link
Copy Markdown
Contributor Author

Copilot AI commented May 29, 2026

@copilot 现在的void Slider::draw(PIMAGE dst,double x,double y){
double left = x - width / 2;
double top = y - height / 2;
...

已修复 Slider 中 setAlwaysDirty/setDrawing 计数,只在动画状态切换时更新。提交:66faf75。

@FeJS8888
Copy link
Copy Markdown
Owner

FeJS8888 commented Jun 2, 2026

@copilot 现在的 Toggle 在面板中不能正确交互(正如你所创建的 test_test_pagination 所演示),仔细阅读代码,理解逻辑,尝试修复。

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Jun 2, 2026

@copilot 现在的 Toggle 在面板中不能正确交互(正如你所创建的 test_test_pagination 所演示),仔细阅读代码,理解逻辑,尝试修复。

已修复 Toggle 在 Panel/Box 中交互不刷新问题,并补充动画期间的重绘触发。提交:ca42d9c

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants