7 static WindowManager wminst;
9 WindowManager::WindowManager()
14 throw std::runtime_error("Trying to create a second instance of WindowManager!\n");
24 void WindowManager::invalidate_region(const Rect &rect)
26 dirty_rects.push_back(rect);
29 void WindowManager::process_windows()
31 if(dirty_rects.empty()) {
35 std::list<Rect>::iterator drit = dirty_rects.begin();
37 while(drit != dirty_rects.end()) {
38 uni = rect_union(uni, *drit++);
42 fill_rect(uni, bg_color[0], bg_color[1], bg_color[2]);
44 std::list<Window*>::iterator it = windows.begin();
45 while(it != windows.end()) {
46 Rect intersect = rect_intersection((*it)->rect, uni);
47 if(intersect.width && intersect.height) {
54 void WindowManager::add_window(Window *win)
60 windows.push_back(win);
63 void WindowManager::set_focused_window(Window *win)
68 const Window *WindowManager::get_focused_window() const
73 Window *WindowManager::get_focused_window()
78 Window *WindowManager::get_window_at_pos(int pointer_x, int pointer_y)
80 Window *win = new Window;
81 std::list<Window*>::reverse_iterator rit = windows.rbegin();
82 while(rit != windows.rend()) {
83 if((*rit)->contains_ptr(pointer_x, pointer_y)) {