/* Public domain */ #ifndef _AGAR_GUI_MOUSE_H_ #define _AGAR_GUI_MOUSE_H_ #include #include typedef enum ag_mouse_button { AG_MOUSE_NONE = 0x00, AG_MOUSE_LEFT = 0x01, AG_MOUSE_MIDDLE = 0x02, AG_MOUSE_RIGHT = 0x03, AG_MOUSE_WHEELUP = 0x04, AG_MOUSE_WHEELDOWN = 0x05, AG_MOUSE_X1 = 0x06, AG_MOUSE_X2 = 0x07, AG_MOUSE_ANY = 0xff } AG_MouseButton; typedef enum ag_mouse_button_action { AG_BUTTON_PRESSED, AG_BUTTON_RELEASED } AG_MouseButtonAction; #define AG_MOUSE_BUTTON(b) (1<<((b)-1)) #define AG_MOUSE_LMASK AG_MOUSE_BUTTON(1) #define AG_MOUSE_MMASK AG_MOUSE_BUTTON(2) #define AG_MOUSE_RMASK AG_MOUSE_BUTTON(3) struct ag_window; typedef struct ag_mouse { struct ag_input_device _inherit; Uint nButtons; /* Button count (0 = unknown) */ AG_MouseButton btnState; /* Last button state */ int x, y; /* Last cursor position */ int xRel, yRel; /* Last relative motion */ } AG_Mouse; #define AG_MOUSE_ISA(o) (((AGOBJECT(o)->cid & 0xffff0000) >> 16) == 0x0601) __BEGIN_DECLS extern AG_ObjectClass agMouseClass; AG_Mouse *_Nullable AG_MouseNew(void *_Nonnull, const char *_Nonnull); void AG_MouseCursorUpdate(struct ag_window *_Nonnull, int,int); void AG_ProcessMouseMotion(struct ag_window *_Nonnull, int,int, int,int); void AG_ProcessMouseButtonUp(struct ag_window *_Nonnull, int,int, AG_MouseButton); void AG_ProcessMouseButtonDown(struct ag_window *_Nonnull, int,int, AG_MouseButton); __END_DECLS #include #endif /* _AGAR_GUI_MOUSE_H_ */