From: Eleni Maria Stea Date: Mon, 25 Feb 2013 18:09:12 +0000 (+0200) Subject: using 2 windows, focus works X-Git-Url: https://eleni.mutantstargoat.com/git/?p=winnie;a=commitdiff_plain;h=65eda3d5a8e4ad8d28bda12cace044628c1a69be using 2 windows, focus works todo: 1- raise, 2-fonts --- diff --git a/Makefile b/Makefile index ad3fd6c..a894e52 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ dbg = -g opt = -O0 inc = -Isrc -#backend = SDL +backend = SDL ifeq ($(backend), SDL) def = -DWINNIE_SDL diff --git a/src/main.cc b/src/main.cc index b04d4dc..cb6018d 100644 --- a/src/main.cc +++ b/src/main.cc @@ -28,7 +28,7 @@ int main() win1->set_mouse_motion_callback(motion); Window *win2 = new Window; - win2->set_title("green"); + win2->set_title("yellow"); win2->move(150, 10); win2->resize(200, 300); win2->set_display_callback(display); @@ -48,14 +48,14 @@ static void display(Window *win) { const char *win_title = win->get_title(); const char *t1 = "red"; - const char *t2 = "green"; + const char *t2 = "yellow"; if(!strcmp(win_title, t1)) { - fill_rect(win->get_absolute_rect(), 255, 0, 0); + fill_rect(win->get_absolute_rect(), 247, 68, 50); } if(!strcmp(win_title, t2)) { - fill_rect(win->get_absolute_rect(), 0, 255, 0); + fill_rect(win->get_absolute_rect(), 255, 215, 78); } } diff --git a/src/wm.cc b/src/wm.cc index 33f2879..fd86d1d 100644 --- a/src/wm.cc +++ b/src/wm.cc @@ -80,8 +80,8 @@ WindowManager::WindowManager() frame_thickness = 8; titlebar_thickness = 16; - frame_fcolor[0] = frame_fcolor[1] = frame_fcolor[2] = 142; - frame_ucolor[0] = frame_ucolor[1] = frame_ucolor[2] = 210; + frame_fcolor[0] = frame_fcolor[1] = frame_fcolor[2] = 0; + frame_ucolor[0] = frame_ucolor[1] = frame_ucolor[2] = 255; mouse_cursor.set_image(mouse_cursor_width, mouse_cursor_height); unsigned char *pixels = mouse_cursor.get_image(); @@ -175,11 +175,13 @@ void WindowManager::set_focused_window(Window *win) return; } + Window *parent; if(focused_win) { // invalidate the frame (if any) - Window *parent = focused_win->get_parent(); + parent = focused_win->get_parent(); if(parent && parent != root_win) { parent->invalidate(); + fill_rect(parent->get_absolute_rect(), frame_ucolor[0], frame_ucolor[1], frame_ucolor[2]); } } @@ -190,6 +192,8 @@ void WindowManager::set_focused_window(Window *win) if(win->get_focusable()) { focused_win = win; + parent = focused_win->get_parent(); + fill_rect(parent->get_absolute_rect(), frame_fcolor[0], frame_fcolor[1], frame_fcolor[2]); return; } @@ -197,6 +201,7 @@ void WindowManager::set_focused_window(Window *win) for(int i=0; iget_children_count(); i++) { if(children[0]->get_focusable()) { set_focused_window(children[0]); + fill_rect(win->get_absolute_rect(), frame_fcolor[0], frame_fcolor[1], frame_fcolor[2]); return; } } @@ -229,6 +234,27 @@ Window *WindowManager::get_window_at_pos(int pointer_x, int pointer_y) return 0; } +void WindowManager::set_focused_frame_color(int r, int g, int b) +{ + frame_fcolor[0] = r; + frame_fcolor[1] = g; + frame_fcolor[2] = b; +} + +void WindowManager::get_focused_frame_color(int *r, int *g, int *b) +{ + *r = frame_fcolor[0]; + *g = frame_fcolor[1]; + *b = frame_fcolor[2]; +} + +void WindowManager::set_unfocused_frame_color(int r, int g, int b) +{ + frame_ucolor[0] = r; + frame_ucolor[1] = g; + frame_ucolor[2] = b; +} + Window *WindowManager::get_grab_window() const { return grab_win; @@ -246,7 +272,18 @@ void WindowManager::release_mouse() static void display(Window *win) { - fill_rect(win->get_absolute_rect(), 255, 211, 5); + //frame display: + Window **children = win->get_children(); + for(int i=0; iget_children_count(); i++) { + if(children[0] == wm->get_focused_window()) { + int r, g, b; + wm->get_focused_frame_color(&r, &g, &b); + fill_rect(win->get_absolute_rect(), r, g, b); + return; + } + } + + fill_rect(win->get_absolute_rect(), 74, 175, 198); } static int prev_x, prev_y; diff --git a/src/wm.h b/src/wm.h index 406ef9d..fb60b24 100644 --- a/src/wm.h +++ b/src/wm.h @@ -45,6 +45,11 @@ public: Window *get_window_at_pos(int pointer_x, int pointer_y); + void set_focused_frame_color(int r, int g, int b); + void get_focused_frame_color(int *r, int *g, int *b); + + void set_unfocused_frame_color(int r, int g, int b); + Window *get_grab_window() const; void grab_mouse(Window *win);