X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fwm.cc;h=b661234302cea8781325a987bc90eda6b5dfccaf;hb=5449bf8fbca1d2cfbefa0386df7109afb2a5aa34;hp=c0fab3c7d5e2b409edc2e92fdb55de77451d37b7;hpb=f71618aebfa6b8754dd056689a6c5821b755972c;p=winnie diff --git a/src/wm.cc b/src/wm.cc index c0fab3c..b661234 100644 --- a/src/wm.cc +++ b/src/wm.cc @@ -2,6 +2,8 @@ #include "gfx.h" #include "wm.h" #include "window.h" +#include "mouse.h" +#include "mouse_cursor.h" WindowManager *wm; static WindowManager wminst; @@ -14,9 +16,24 @@ WindowManager::WindowManager() throw std::runtime_error("Trying to create a second instance of WindowManager!\n"); } + focused_win = 0; + bg_color[0] = 210; bg_color[1] = 106; bg_color[2] = 106; + + mouse_cursor.set_image(mouse_cursor_width, mouse_cursor_height); + unsigned char *pixels = mouse_cursor.get_image(); + + for(int i=0; idraw(); } + it++; } + + // draw mouse cursor + int mouse_x, mouse_y; + get_pointer_pos(&mouse_x, &mouse_y); + + blit_key(mouse_cursor.get_image(), mouse_cursor.get_rect(), + get_framebuffer(), get_screen_size(), mouse_x, mouse_y, + 0, 0, 0); + + Rect mouse_rect = {mouse_x, mouse_y, mouse_cursor.get_width(), mouse_cursor.get_height()}; + invalidate_region(mouse_rect); } void WindowManager::add_window(Window *win) { + if(windows.empty()) { + focused_win = win; + } + windows.push_back(win); } + +void WindowManager::set_focused_window(Window *win) +{ + focused_win = win; +} + +const Window *WindowManager::get_focused_window() const +{ + return focused_win; +} + +Window *WindowManager::get_focused_window() +{ + return focused_win; +} + +Window *WindowManager::get_window_at_pos(int pointer_x, int pointer_y) +{ + Window *win = 0; + std::list::reverse_iterator rit = windows.rbegin(); + while(rit != windows.rend()) { + if((*rit)->contains_point(pointer_x, pointer_y)) { + win = *rit; + break; + } + rit++; + } + + return win; +}