summaryrefslogtreecommitdiff
path: root/libwinnie/src/wm.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libwinnie/src/wm.cc')
-rw-r--r--libwinnie/src/wm.cc97
1 files changed, 85 insertions, 12 deletions
diff --git a/libwinnie/src/wm.cc b/libwinnie/src/wm.cc
index 9faef1a..6ffb61b 100644
--- a/libwinnie/src/wm.cc
+++ b/libwinnie/src/wm.cc
@@ -136,11 +136,12 @@ WindowManager::WindowManager()
bg_color[1] = 106;
bg_color[2] = 106;
- frame_thickness = 8;
- titlebar_thickness = 16;
+ frame_thickness = 6;
+ titlebar_thickness = 18;
- set_focused_frame_color(0, 0, 0);
- set_unfocused_frame_color(200, 200, 200);
+ set_focused_frame_color(64, 64, 64);
+ set_unfocused_frame_color(160, 160, 160);
+ set_bevel_size(2);
mouse_cursor.set_image(mouse_cursor_width, mouse_cursor_height);
unsigned char *pixels = mouse_cursor.get_image();
@@ -325,6 +326,36 @@ void WindowManager::get_unfocused_frame_color(int *r, int *g, int *b) const
*b = frame_ucolor[2];
}
+void WindowManager::set_frame_size(int sz)
+{
+ frame_thickness = sz;
+}
+
+int WindowManager::get_frame_size() const
+{
+ return frame_thickness;
+}
+
+void WindowManager::set_titlebar_size(int sz)
+{
+ titlebar_thickness = sz;
+}
+
+int WindowManager::get_titlebar_size() const
+{
+ return titlebar_thickness;
+}
+
+void WindowManager::set_bevel_size(int sz)
+{
+ bevel_sz = sz;
+}
+
+int WindowManager::get_bevel_size() const
+{
+ return bevel_sz;
+}
+
void WindowManager::set_background_color(int r, int g, int b)
{
bg_color[0] = r;
@@ -410,7 +441,7 @@ void WindowManager::sink_window(Window *win)
void WindowManager::maximize_window(Window *win)
{
win->normal_rect = win->rect;
-
+
Rect rect = get_screen_size();
Window *frame;
@@ -428,6 +459,8 @@ void WindowManager::maximize_window(Window *win)
win->resize(rect.width, rect.height);
win->set_state(Window::STATE_MAXIMIZED);
+
+ invalidate_region(rect);
}
void WindowManager::unmaximize_window(Window *win)
@@ -449,22 +482,62 @@ static void display(Window *win)
//frame display:
Window *child = win->get_children()[0];
int r, g, b;
- Rect abs_rect = win->get_absolute_rect();
+ Rect rect = win->get_absolute_rect();
+
+ int tbar = wm->get_titlebar_size();
+ int frm = wm->get_frame_size();
+
- //TODO 5 not hardcoded
- set_text_position(abs_rect.x + 5, abs_rect.y + 15);
- set_text_color(255, 255, 255);
if(child == wm->get_focused_window()) {
wm->get_focused_frame_color(&r, &g, &b);
- fill_rect(abs_rect, r, g, b);
}
else {
wm->get_unfocused_frame_color(&r, &g, &b);
- fill_rect(win->get_absolute_rect(), r, g, b);
}
+ // draw the four frame sides (top, bottom, left, right)
+ fill_rect(Rect(rect.x, rect.y, rect.width, frm), r, g, b);
+ fill_rect(Rect(rect.x, rect.y + rect.height - frm, rect.width, frm), r, g, b);
+ fill_rect(Rect(rect.x, rect.y + frm, frm, rect.height - 2 * frm), r, g, b);
+ fill_rect(Rect(rect.x + rect.width - frm, rect.y + frm, frm, rect.height - 2 * frm), r, g, b);
+ // draw the titlebar
+ fill_rect(Rect(rect.x + frm, rect.y + frm, rect.width - 2 * frm, tbar), r, g, b);
+
+
+ int val = (r + g + b) / 3;
+ int roffs = val < 128 ? r / 2 : (255 - r) / 2;
+ int goffs = val < 128 ? g / 2 : (255 - g) / 2;
+ int boffs = val < 128 ? b / 2 : (255 - b) / 2;
+
+ // draw bevels
+ int dark_r = r - roffs;
+ int dark_g = g - goffs;
+ int dark_b = b - boffs;
+
+ int lt_r = r + roffs;
+ int lt_g = g + goffs;
+ int lt_b = b + boffs;
+
+
+ set_text_position(rect.x + frm + 2, rect.y + frm + tbar - 5);
+ set_text_color(80, 80, 80);
draw_text(child->get_title());
+ set_text_position(rect.x + frm + 1, rect.y + frm + tbar - 6);
+ set_text_color(255, 255, 255);
+ draw_text(child->get_title());
+
+ int bevel = wm->get_bevel_size();
+ fill_rect(Rect(rect.x, rect.y, bevel, rect.height), lt_r, lt_g, lt_b);
+ fill_rect(Rect(rect.x, rect.y + rect.height - bevel, rect.width, bevel), dark_r, dark_g, dark_b);
+ fill_rect(Rect(rect.x + rect.width - bevel, rect.y, bevel, rect.height), dark_r, dark_g, dark_b);
+ fill_rect(Rect(rect.x, rect.y, rect.width, bevel), lt_r, lt_g, lt_b);
+
+ Rect inner = Rect(rect.x + frm, rect.y + frm + tbar, rect.width - frm * 2, rect.height - frm * 2 - tbar);
+ fill_rect(Rect(inner.x - bevel, inner.y + inner.height, inner.width + 2 * bevel, bevel), lt_r, lt_g, lt_b);
+ fill_rect(Rect(inner.x - bevel, inner.y - bevel, bevel, inner.height + 2 * bevel), dark_r, dark_g, dark_b);
+ fill_rect(Rect(inner.x + inner.width, inner.y - bevel, bevel, inner.height + 2 * bevel), lt_r, lt_g, lt_b);
+ fill_rect(Rect(inner.x - bevel, inner.y - bevel, inner.width + 2 * bevel, bevel), dark_r, dark_g, dark_b);
}
static int prev_x, prev_y;
@@ -474,7 +547,7 @@ static void mouse(Window *win, int bn, bool pressed, int x, int y)
static long last_click = 0;
if(bn == 0) {
- if(pressed) {
+ if(pressed) {
wm->grab_mouse(win);
wm->raise_window(win);
prev_x = x;