X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fwm.cc;h=a77f026bc8a2909dec2893167a25d7e2885c1c4a;hb=ecb25bb23fcd6f98fb049297483e312c84fd7b5b;hp=89b709f94766e1edecc9465cbb0094f0096a3a04;hpb=6dc42c0e7292d6d94de640ddd7de3ee5c808e9c2;p=winnie diff --git a/src/wm.cc b/src/wm.cc index 89b709f..a77f026 100644 --- a/src/wm.cc +++ b/src/wm.cc @@ -12,7 +12,7 @@ WindowManager *wm; static WindowManager wminst; static void display(Window *win); -static void mouse(Window *win, int bn, bool pressed); +static void mouse(Window *win, int bn, bool pressed, int x, int y); static void motion(Window *win, int x, int y); void WindowManager::create_frame(Window *win) @@ -23,18 +23,18 @@ void WindowManager::create_frame(Window *win) frame->set_display_callback(display); frame->set_mouse_button_callback(mouse); frame->set_mouse_motion_callback(motion); - - frame->add_child(win); frame->set_focusable(false); + frame->add_child(win); windows.push_back(frame); Rect win_rect = win->get_rect(); - frame->move(win_rect.x - frame_thickness, + frame->move(win_rect.x - frame_thickness, win_rect.y - frame_thickness - titlebar_thickness); - frame->resize(win_rect.width + frame_thickness * 2, + frame->resize(win_rect.width + frame_thickness * 2, win_rect.height + frame_thickness * 2 + titlebar_thickness); + win->move(frame_thickness, frame_thickness + titlebar_thickness); parent->add_child(frame); } @@ -116,6 +116,8 @@ void WindowManager::process_windows() } dirty_rects.clear(); + wait_vsync(); + fill_rect(uni, bg_color[0], bg_color[1], bg_color[2]); root_win->draw_children(uni); @@ -225,18 +227,17 @@ Window *WindowManager::get_window_at_pos(int pointer_x, int pointer_y) static void display(Window *win) { - fill_rect(win->get_rect(), 255, 211, 5); + fill_rect(win->get_absolute_rect(), 255, 211, 5); } -static int prev_x = -1, prev_y; +static int prev_x, prev_y; -static void mouse(Window *win, int bn, bool pressed) +static void mouse(Window *win, int bn, bool pressed, int x, int y) { if(bn == 0) { if(pressed) { - get_pointer_pos(&prev_x, &prev_y); - } else { - prev_x = -1; + prev_x = x; + prev_y = y; } } } @@ -244,11 +245,11 @@ static void mouse(Window *win, int bn, bool pressed) static void motion(Window *win, int x, int y) { int left_bn = get_button(0); - if(left_bn && prev_x != -1) { + if(left_bn) { int dx = x - prev_x; int dy = y - prev_y; - prev_x = x; - prev_y = y; + prev_x = x - dx; + prev_y = y - dy; Rect rect = win->get_rect(); win->move(rect.x + dx, rect.y + dy);