Change how dirty screen, window and viewport areas are tracked for later redrawing
Track dirty viewport areas seperately form general screen redraws. Maintain a dirty block grid per viewport, with a smaller block size. Use even smaller block size in viewport map mode. Use a rectangle array for general screen redraws instead of a block grid. Add a dirty bit to windows and widgets, to simplify the common case of repainting a whole window or widget, without catching neighbouring windows or viewports.
This commit is contained in:
@@ -1781,6 +1781,17 @@ public:
|
||||
this->acs->Draw(w);
|
||||
this->inf->Draw(w);
|
||||
}
|
||||
|
||||
void FillDirtyWidgets(std::vector<NWidgetBase *> &dirty_widgets) override
|
||||
{
|
||||
if (this->base_flags & WBF_DIRTY) {
|
||||
dirty_widgets.push_back(this);
|
||||
} else {
|
||||
if (this->editable) this->avs->FillDirtyWidgets(dirty_widgets);
|
||||
this->acs->FillDirtyWidgets(dirty_widgets);
|
||||
this->inf->FillDirtyWidgets(dirty_widgets);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
const uint NWidgetNewGRFDisplay::INTER_LIST_SPACING = WD_RESIZEBOX_WIDTH + 1;
|
||||
|
Reference in New Issue
Block a user