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);
{
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);
}
}
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();
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]);
}
}
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;
}
for(int i=0; i<win->get_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;
}
}
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;
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; i<win->get_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;
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);