diff options
Diffstat (limited to 'src/window_gui.h')
-rw-r--r-- | src/window_gui.h | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/src/window_gui.h b/src/window_gui.h index 724d77880..3254ee8c4 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -17,6 +17,7 @@ #include "company_type.h" #include "tile_type.h" #include "widget_type.h" +#include "core/smallvec_type.hpp" /** State of handling an event. */ enum EventState { @@ -221,6 +222,8 @@ protected: void InitializePositionSize(int x, int y, int min_width, int min_height); void FindWindowPlacementAndResize(int def_width, int def_height); + SmallVector<int, 4> scheduled_invalidation_data; ///< Data of scheduled OnInvalidateData() calls. + public: Window(); @@ -438,6 +441,28 @@ public: this->OnInvalidateData(data); } + /** + * Schedule a invalidation call for next redraw. + * Important for asynchronous invalidation from commands. + * @param data The data to invalidate with + */ + void ScheduleInvalidateData(int data = 0) + { + this->SetDirty(); + *this->scheduled_invalidation_data.Append() = data; + } + + /** + * Process all scheduled invalidations. + */ + void ProcessScheduledInvalidations() + { + for (int *data = this->scheduled_invalidation_data.Begin(); this->window_class != WC_INVALID && data != this->scheduled_invalidation_data.End(); data++) { + this->OnInvalidateData(*data); + } + this->scheduled_invalidation_data.Clear(); + } + /*** Event handling ***/ /** |