1 /+ 2 + Copyright 2022 – 2024 Aya Partridge 3 + Copyright 2018 - 2022 Michael D. Parker 4 + Distributed under the Boost Software License, Version 1.0. 5 + (See accompanying file LICENSE_1_0.txt or copy at 6 + http://www.boost.org/LICENSE_1_0.txt) 7 +/ 8 module sdl.mouse; 9 10 import bindbc.sdl.config; 11 import bindbc.sdl.codegen; 12 13 import sdl.stdinc: SDL_bool; 14 import sdl.surface: SDL_Surface; 15 import sdl.video; 16 17 struct SDL_Cursor; 18 19 alias SDL_SystemCursor = uint; 20 enum: SDL_SystemCursor{ 21 SDL_SYSTEM_CURSOR_ARROW = 0, 22 SDL_SYSTEM_CURSOR_IBEAM = 1, 23 SDL_SYSTEM_CURSOR_WAIT = 2, 24 SDL_SYSTEM_CURSOR_CROSSHAIR = 3, 25 SDL_SYSTEM_CURSOR_WAITARROW = 4, 26 SDL_SYSTEM_CURSOR_SIZENWSE = 5, 27 SDL_SYSTEM_CURSOR_SIZENESW = 6, 28 SDL_SYSTEM_CURSOR_SIZEWE = 7, 29 SDL_SYSTEM_CURSOR_SIZENS = 8, 30 SDL_SYSTEM_CURSOR_SIZEALL = 9, 31 SDL_SYSTEM_CURSOR_NO = 10, 32 SDL_SYSTEM_CURSOR_HAND = 11, 33 SDL_NUM_SYSTEM_CURSORS = 12, 34 } 35 36 static if(sdlSupport >= SDLSupport.v2_0_4){ 37 alias SDL_MouseWheelDirection = uint; 38 enum: SDL_MouseWheelDirection{ 39 SDL_MOUSEWHEEL_NORMAL = 0, 40 SDL_MOUSEWHEEL_FLIPPED = 1, 41 } 42 } 43 44 pragma(inline, true) nothrow @nogc pure @safe{ 45 uint SDL_BUTTON(ubyte x){ return 1 << (x-1); } 46 } 47 deprecated("Please use the non-template version instead"){ 48 enum SDL_BUTTON(ubyte x) = 1 << (x-1); 49 } 50 enum: ubyte{ 51 SDL_BUTTON_LEFT = 1, 52 SDL_BUTTON_MIDDLE = 2, 53 SDL_BUTTON_RIGHT = 3, 54 SDL_BUTTON_X1 = 4, 55 SDL_BUTTON_X2 = 5, 56 SDL_BUTTON_LMASK = SDL_BUTTON(SDL_BUTTON_LEFT), 57 SDL_BUTTON_MMASK = SDL_BUTTON(SDL_BUTTON_MIDDLE), 58 SDL_BUTTON_RMASK = SDL_BUTTON(SDL_BUTTON_RIGHT), 59 SDL_BUTTON_X1MASK = SDL_BUTTON(SDL_BUTTON_X1), 60 SDL_BUTTON_X2MASK = SDL_BUTTON(SDL_BUTTON_X2), 61 } 62 63 mixin(joinFnBinds((){ 64 FnBind[] ret = [ 65 {q{SDL_Window*}, q{SDL_GetMouseFocus}, q{}}, 66 {q{uint}, q{SDL_GetMouseState}, q{int* x, int* y}}, 67 {q{uint}, q{SDL_GetRelativeMouseState}, q{int* x, int* y}}, 68 {q{void}, q{SDL_WarpMouseInWindow}, q{SDL_Window* window, int x, int y}}, 69 {q{int}, q{SDL_SetRelativeMouseMode}, q{SDL_bool enabled}}, 70 {q{SDL_bool}, q{SDL_GetRelativeMouseMode}, q{}}, 71 {q{SDL_Cursor*}, q{SDL_CreateCursor}, q{const(ubyte)* data, const(ubyte)* mask, int w, int h, int hotX, int hotY}}, 72 {q{SDL_Cursor*}, q{SDL_CreateColorCursor}, q{SDL_Surface* surface, int hotX, int hotY}}, 73 {q{SDL_Cursor*}, q{SDL_CreateSystemCursor}, q{SDL_SystemCursor id}}, 74 {q{void}, q{SDL_SetCursor}, q{SDL_Cursor* cursor}}, 75 {q{SDL_Cursor*}, q{SDL_GetCursor}, q{}}, 76 {q{SDL_Cursor*}, q{SDL_GetDefaultCursor}, q{}}, 77 {q{void}, q{SDL_FreeCursor}, q{SDL_Cursor* cursor}}, 78 {q{int}, q{SDL_ShowCursor}, q{int toggle}}, 79 ]; 80 if(sdlSupport >= SDLSupport.v2_0_4){ 81 FnBind[] add = [ 82 {q{int}, q{SDL_CaptureMouse}, q{SDL_bool enabled}}, 83 {q{uint}, q{SDL_GetGlobalMouseState}, q{int* x, int* y}}, 84 {q{void}, q{SDL_WarpMouseGlobal}, q{int x, int y}}, 85 ]; 86 ret ~= add; 87 } 88 return ret; 89 }())); 90 91 alias SDL_CreateColourCursor = SDL_CreateColorCursor;