+class Node;
+
+struct DirtyRect
+{
+ DirtyRect(Node* node, Render::Renderer* renderer, int32_t frame, Rect<int>& rect)
+ : node(node),
+ renderer(renderer),
+ frame(frame),
+ rect(rect),
+ visited(true)
+ {
+ }
+
+ DirtyRect() = default;
+
+ bool operator<(const DirtyRect& rhs) const
+ {
+ if(node == rhs.node)
+ {
+ if(renderer == rhs.renderer)
+ {
+ return frame > rhs.frame; // Most recent rects come first
+ }
+ else
+ {
+ return renderer < rhs.renderer;
+ }
+ }
+ else
+ {
+ return node < rhs.node;
+ }
+ }
+
+ Node* node{nullptr};
+ Render::Renderer* renderer{nullptr};
+ int32_t frame{0};
+ Rect<int32_t> rect{};
+ bool visited{true};
+};