9 extern SDL_Event sdl_event;
21 if(!(mouse = (Mouse*)sh_malloc(sizeof *mouse))) {
32 void set_mouse_bounds(const Rect &rect)
41 void process_mouse_event()
44 MouseMotionFuncType motion_callback = 0;
45 MouseButtonFuncType button_callback = 0;
48 if(!(win = wm->get_grab_window())) {
49 win = wm->get_window_at_pos(mouse->pointer_x, mouse->pointer_y);
51 wm->set_focused_window(win);
54 wm->set_focused_window(0);
58 switch(sdl_event.type) {
60 mouse->pointer_x = sdl_event.motion.x;
61 mouse->pointer_y = sdl_event.motion.y;
62 if(win && (motion_callback = win->get_mouse_motion_callback())) {
63 Rect rect = win->get_absolute_rect();
64 motion_callback(win, mouse->pointer_x - rect.x, mouse->pointer_y - rect.y);
68 case SDL_MOUSEBUTTONUP:
69 case SDL_MOUSEBUTTONDOWN:
70 bn = sdl_event.button.button - SDL_BUTTON_LEFT;
71 if(sdl_event.button.state == SDL_PRESSED) {
72 mouse->bnstate |= 1 << bn;
75 mouse->bnstate &= ~(1 << bn);
77 if(win && (button_callback = win->get_mouse_button_callback())) {
78 Rect rect = win->get_absolute_rect();
79 button_callback(win, bn, sdl_event.button.state, mouse->pointer_x - rect.x, mouse->pointer_y - rect.y);
84 void get_pointer_pos(int *x, int *y)
86 *x = mouse->pointer_x;
87 *y = mouse->pointer_y;
90 int get_button_state()
92 return mouse->bnstate;
95 int get_button(int bn)
97 if(bn < 0 || bn >= 3) {
100 return (mouse->bnstate & (1 << bn)) != 0;