8 extern SDL_Event sdl_event;
20 if(!(mouse = (Mouse*)malloc(sizeof *mouse))) {
31 void set_mouse_bounds(const Rect &rect)
40 void process_mouse_event()
43 MouseMotionFuncType motion_callback = 0;
44 MouseButtonFuncType button_callback = 0;
47 if(!(win = wm->get_grab_window())) {
48 win = wm->get_window_at_pos(mouse->pointer_x, mouse->pointer_y);
50 wm->set_focused_window(win);
53 wm->set_focused_window(0);
57 switch(sdl_event.type) {
59 mouse->pointer_x = sdl_event.motion.x;
60 mouse->pointer_y = sdl_event.motion.y;
61 if(win && (motion_callback = win->get_mouse_motion_callback())) {
62 Rect rect = win->get_absolute_rect();
63 motion_callback(win, mouse->pointer_x - rect.x, mouse->pointer_y - rect.y);
67 case SDL_MOUSEBUTTONUP:
68 case SDL_MOUSEBUTTONDOWN:
69 bn = sdl_event.button.button - SDL_BUTTON_LEFT;
70 if(sdl_event.button.state == SDL_PRESSED) {
71 mouse->bnstate |= 1 << bn;
74 mouse->bnstate &= ~(1 << bn);
76 if(win && (button_callback = win->get_mouse_button_callback())) {
77 Rect rect = win->get_absolute_rect();
78 button_callback(win, bn, sdl_event.button.state, mouse->pointer_x - rect.x, mouse->pointer_y - rect.y);
83 void get_pointer_pos(int *x, int *y)
85 *x = mouse->pointer_x;
86 *y = mouse->pointer_y;
89 int get_button_state()
91 return mouse->bnstate;
94 int get_button(int bn)
96 if(bn < 0 || bn >= 3) {
99 return (mouse->bnstate & (1 << bn)) != 0;