6 #include "mouse_cursor.h"
9 static WindowManager wminst;
11 WindowManager::WindowManager()
16 throw std::runtime_error("Trying to create a second instance of WindowManager!\n");
25 mouse_cursor.set_image(mouse_cursor_width, mouse_cursor_height);
26 unsigned char *pixels = mouse_cursor.get_image();
28 for(int i=0; i<mouse_cursor_height; i++) {
29 for(int j=0; j<mouse_cursor_width; j++) {
30 int val = mouse_cursor_bw[i * mouse_cursor_width + j];
39 void WindowManager::invalidate_region(const Rect &rect)
41 dirty_rects.push_back(rect);
44 void WindowManager::process_windows()
46 if(dirty_rects.empty()) {
50 std::list<Rect>::iterator drit = dirty_rects.begin();
52 while(drit != dirty_rects.end()) {
53 uni = rect_union(uni, *drit++);
57 fill_rect(uni, bg_color[0], bg_color[1], bg_color[2]);
59 std::list<Window*>::iterator it = windows.begin();
60 while(it != windows.end()) {
61 Rect intersect = rect_intersection((*it)->rect, uni);
62 if(intersect.width && intersect.height) {
70 get_pointer_pos(&mouse_x, &mouse_y);
72 blit_key(mouse_cursor.get_image(), mouse_cursor.get_rect(),
73 get_framebuffer(), get_screen_size(), mouse_x, mouse_y,
76 Rect mouse_rect = {mouse_x, mouse_y, mouse_cursor.get_width(), mouse_cursor.get_height()};
77 invalidate_region(mouse_rect);
80 void WindowManager::add_window(Window *win)
86 windows.push_back(win);
89 void WindowManager::set_focused_window(Window *win)
94 const Window *WindowManager::get_focused_window() const
99 Window *WindowManager::get_focused_window()
104 Window *WindowManager::get_window_at_pos(int pointer_x, int pointer_y)
107 std::list<Window*>::reverse_iterator rit = windows.rbegin();
108 while(rit != windows.rend()) {
109 if((*rit)->contains_point(pointer_x, pointer_y)) {