X-Git-Url: http://git.mutantstargoat.com?p=winnie;a=blobdiff_plain;f=src%2Fwindow.cc;h=ab1e3e73d647671cbabd389f236514a5d79edb3c;hp=59302d4ec309f9e683413a7e5fc62f57092a7b4c;hb=d02747c88b1df856c5531cdc4b7af5b3ac8a0dc3;hpb=65eda3d5a8e4ad8d28bda12cace044628c1a69be diff --git a/src/window.cc b/src/window.cc index 59302d4..ab1e3e7 100644 --- a/src/window.cc +++ b/src/window.cc @@ -1,4 +1,5 @@ #include +#include //TODO #include #include "gfx.h" @@ -90,10 +91,10 @@ void Window::invalidate() wm->invalidate_region(abs_rect); } -void Window::draw(const Rect &dirty_region) +void Window::draw(Rect *dirty_region) { Rect abs_rect = get_absolute_rect(); - Rect intersect = rect_intersection(abs_rect, dirty_region); + Rect intersect = rect_intersection(abs_rect, *dirty_region); if(intersect.width && intersect.height) { if(callbacks.display) { callbacks.display(this); @@ -101,13 +102,15 @@ void Window::draw(const Rect &dirty_region) dirty = false; draw_children(abs_rect); + *dirty_region = rect_union(*dirty_region, abs_rect); } } void Window::draw_children(const Rect &dirty_region) { + Rect drect = dirty_region; for(size_t i=0; idraw(dirty_region); + children[i]->draw(&drect); } }