@@ -830,14 +830,25 @@ typedef RGFW_ENUM(u8, RGFW_mouseIcons) {
830830 RGFW_mouseNormal = 0,
831831 RGFW_mouseArrow,
832832 RGFW_mouseIbeam,
833+ RGFW_mouseText = RGFW_mouseIbeam,
833834 RGFW_mouseCrosshair,
834835 RGFW_mousePointingHand,
835836 RGFW_mouseResizeEW,
836837 RGFW_mouseResizeNS,
837838 RGFW_mouseResizeNWSE,
838839 RGFW_mouseResizeNESW,
840+ RGFW_mouseResizeNW,
841+ RGFW_mouseResizeN,
842+ RGFW_mouseResizeNE,
843+ RGFW_mouseResizeE,
844+ RGFW_mouseResizeSE,
845+ RGFW_mouseResizeS,
846+ RGFW_mouseResizeSW,
847+ RGFW_mouseResizeW,
839848 RGFW_mouseResizeAll,
840849 RGFW_mouseNotAllowed,
850+ RGFW_mouseWait,
851+ RGFW_mouseProgress,
841852 RGFW_mouseIconCount,
842853 RGFW_mouseIconFinal = 16 /* padding for alignment */
843854};
@@ -5764,7 +5775,7 @@ void RGFW_XHandleEvent(void) {
57645775 event.type = RGFW_mouseButtonPressed;
57655776 }
57665777
5767- switch(E.xbutton.button) {
5778+ switch (E.xbutton.button) {
57685779 case Button1: event.button.value = RGFW_mouseLeft; break;
57695780 case Button2: event.button.value = RGFW_mouseMiddle; break;
57705781 case Button3: event.button.value = RGFW_mouseRight; break;
@@ -6576,14 +6587,33 @@ RGFW_bool RGFW_FUNC(RGFW_window_setMouseDefault) (RGFW_window* win) {
65766587RGFW_bool RGFW_FUNC(RGFW_window_setMouseStandard) (RGFW_window* win, u8 mouse) {
65776588 RGFW_ASSERT(win != NULL);
65786589
6579- static const u8 mouseIconSrc[16] = { XC_arrow, XC_left_ptr, XC_xterm, XC_crosshair, XC_hand2, XC_sb_h_double_arrow, XC_sb_v_double_arrow, XC_bottom_left_corner, XC_bottom_right_corner, XC_fleur, XC_X_cursor};
6580-
6581- if (mouse > (sizeof(mouseIconSrc) / sizeof(u8)))
6582- return RGFW_FALSE;
6583-
6584- mouse = mouseIconSrc[mouse];
6585-
6586- Cursor cursor = XCreateFontCursor(_RGFW->display, mouse);
6590+ u32 mouseIcon = 0;
6591+
6592+ switch (mouse) {
6593+ case RGFW_mouseNormal: mouseIcon = XC_left_ptr; break;
6594+ case RGFW_mouseIbeam: mouseIcon = XC_xterm; break;
6595+ case RGFW_mouseWait: mouseIcon = XC_watch; break;
6596+ case RGFW_mouseCrosshair: mouseIcon = XC_tcross; break;
6597+ case RGFW_mouseProgress: mouseIcon = XC_watch; break;
6598+ case RGFW_mouseResizeNWSE: mouseIcon = XC_top_left_corner; break;
6599+ case RGFW_mouseResizeNESW: mouseIcon = XC_top_right_corner; break;
6600+ case RGFW_mouseResizeEW: mouseIcon = XC_sb_h_double_arrow; break;
6601+ case RGFW_mouseResizeNS: mouseIcon = XC_sb_v_double_arrow; break;
6602+ case RGFW_mouseResizeNW: mouseIcon = XC_top_left_corner; break;
6603+ case RGFW_mouseResizeN: mouseIcon = XC_top_side; break;
6604+ case RGFW_mouseResizeNE: mouseIcon = XC_top_right_corner; break;
6605+ case RGFW_mouseResizeE: mouseIcon = XC_right_side; break;
6606+ case RGFW_mouseResizeSE: mouseIcon = XC_bottom_right_corner; break;
6607+ case RGFW_mouseResizeS: mouseIcon = XC_bottom_side; break;
6608+ case RGFW_mouseResizeSW: mouseIcon = XC_bottom_left_corner; break;
6609+ case RGFW_mouseResizeW: mouseIcon = XC_left_side; break;
6610+ case RGFW_mouseResizeAll: mouseIcon = XC_fleur; break;
6611+ case RGFW_mouseNotAllowed: mouseIcon = XC_pirate; break;
6612+ case RGFW_mousePointingHand: mouseIcon = XC_hand2; break;
6613+ default: return RGFW_FALSE;
6614+ }
6615+
6616+ Cursor cursor = XCreateFontCursor(_RGFW->display, mouseIcon);
65876617 XDefineCursor(_RGFW->display, win->src.window, (Cursor) cursor);
65886618 XFreeCursor(_RGFW->display, (Cursor) cursor);
65896619 return RGFW_TRUE;
@@ -8758,13 +8788,36 @@ RGFW_bool RGFW_FUNC(RGFW_window_setMouseDefault)(RGFW_window* win) {
87588788
87598789RGFW_bool RGFW_FUNC(RGFW_window_setMouseStandard)(RGFW_window* win, u8 mouse) {
87608790 RGFW_ASSERT(win != NULL);
8761- static const char* iconStrings[16] = { "arrow", "left_ptr", "xterm", "crosshair", "hand2", "sb_h_double_arrow", "sb_v_double_arrow", "bottom_left_corner", "bottom_right_corner", "fleur", "forbidden" };
87628791
8763- win->src.using_custom_cursor = RGFW_FALSE;
8792+ char* cursorName = NULL;
8793+ switch (mouse) {
8794+ case RGFW_mouseNormal: cursorName = (char*)"left_ptr"; break;
8795+ case RGFW_mouseArrow: cursorName = (char*)"left_ptr"; break;
8796+ case RGFW_mouseIbeam: cursorName = (char*)"xterm"; break;
8797+ case RGFW_mouseCrosshair: cursorName = (char*)"crosshair"; break;
8798+ case RGFW_mousePointingHand: cursorName = (char*)"hand2"; break;
8799+ case RGFW_mouseResizeEW: cursorName = (char*)"sb_h_double_arrow"; break;
8800+ case RGFW_mouseResizeNS: cursorName = (char*)"sb_v_double_arrow"; break;
8801+ case RGFW_mouseResizeNWSE: cursorName = (char*)"top_left_corner"; break; /* or fd_double_arrow */
8802+ case RGFW_mouseResizeNESW: cursorName = (char*)"top_right_corner"; break; /* or bd_double_arrow */
8803+ case RGFW_mouseResizeNW: cursorName = (char*)"top_left_corner"; break;
8804+ case RGFW_mouseResizeN: cursorName = (char*)"top_side"; break;
8805+ case RGFW_mouseResizeNE: cursorName = (char*)"top_right_corner"; break;
8806+ case RGFW_mouseResizeE: cursorName = (char*)"right_side"; break;
8807+ case RGFW_mouseResizeSE: cursorName = (char*)"bottom_right_corner"; break;
8808+ case RGFW_mouseResizeS: cursorName = (char*)"bottom_side"; break;
8809+ case RGFW_mouseResizeSW: cursorName = (char*)"bottom_left_corner"; break;
8810+ case RGFW_mouseResizeW: cursorName = (char*)"left_side"; break;
8811+ case RGFW_mouseResizeAll: cursorName = (char*)"fleur"; break;
8812+ case RGFW_mouseNotAllowed: cursorName = (char*)"not-allowed"; break;
8813+ case RGFW_mouseWait: cursorName = (char*)"watch"; break;
8814+ case RGFW_mouseProgress: cursorName = (char*)"watch"; break;
8815+ default: return RGFW_FALSE;
8816+ }
87648817
8765- if (mouse > RGFW_mouseIconCount - 1) return RGFW_FALSE;
8818+ win->src.using_custom_cursor = RGFW_FALSE;
87668819
8767- struct wl_cursor* wlcursor = wl_cursor_theme_get_cursor(_RGFW->wl_cursor_theme, iconStrings[mouse] );
8820+ struct wl_cursor* wlcursor = wl_cursor_theme_get_cursor(_RGFW->wl_cursor_theme, cursorName );
87688821 struct wl_cursor_image* cursor_image = wlcursor->images[0];
87698822 struct wl_buffer* cursor_buffer = wl_cursor_image_get_buffer(cursor_image);
87708823 wl_pointer_set_cursor(_RGFW->wl_pointer, _RGFW->mouse_enter_serial, _RGFW->cursor_surface, (i32)cursor_image->hotspot_x, (i32)cursor_image->hotspot_y);
@@ -10265,11 +10318,34 @@ RGFW_bool RGFW_window_setMouseDefault(RGFW_window* win) {
1026510318RGFW_bool RGFW_window_setMouseStandard(RGFW_window* win, u8 mouse) {
1026610319 RGFW_ASSERT(win != NULL);
1026710320
10268- static const u32 mouseIconSrc[16] = {OCR_NORMAL, OCR_NORMAL, OCR_IBEAM, OCR_CROSS, OCR_HAND, OCR_SIZEWE, OCR_SIZENS, OCR_SIZENWSE, OCR_SIZENESW, OCR_SIZEALL, OCR_NO};
10269- if (mouse > (sizeof(mouseIconSrc) / sizeof(u32)))
10270- return RGFW_FALSE;
10321+ u32 mouseIcon = 0;
10322+
10323+ switch (mouse) {
10324+ case RGFW_mouseNormal: mouseIcon = OCR_NORMAL; break;
10325+ case RGFW_mouseArrow: mouseIcon = OCR_NORMAL; break;
10326+ case RGFW_mouseIbeam: mouseIcon = OCR_IBEAM; break;
10327+ case RGFW_mouseWait: mouseIcon = OCR_WAIT; break;
10328+ case RGFW_mouseCrosshair: mouseIcon = OCR_CROSS; break;
10329+ case RGFW_mouseProgress: mouseIcon = OCR_APPSTARTING; break;
10330+ case RGFW_mouseResizeNWSE: mouseIcon = OCR_SIZENWSE; break;
10331+ case RGFW_mouseResizeNESW: mouseIcon = OCR_SIZENESW; break;
10332+ case RGFW_mouseResizeEW: mouseIcon = OCR_SIZEWE; break;
10333+ case RGFW_mouseResizeNS: mouseIcon = OCR_SIZENS; break;
10334+ case RGFW_mouseResizeAll: mouseIcon = OCR_SIZEALL; break;
10335+ case RGFW_mouseNotAllowed: mouseIcon = OCR_NO; break;
10336+ case RGFW_mousePointingHand: mouseIcon = OCR_HAND; break;
10337+ case RGFW_mouseResizeNW: mouseIcon = OCR_SIZENWSE; break;
10338+ case RGFW_mouseResizeN: mouseIcon = OCR_SIZENS; break;
10339+ case RGFW_mouseResizeNE: mouseIcon = OCR_SIZENESW; break;
10340+ case RGFW_mouseResizeE: mouseIcon = OCR_SIZEWE; break;
10341+ case RGFW_mouseResizeSE: mouseIcon = OCR_SIZENWSE; break;
10342+ case RGFW_mouseResizeS: mouseIcon = OCR_SIZENS; break;
10343+ case RGFW_mouseResizeSW: mouseIcon = OCR_SIZENESW; break;
10344+ case RGFW_mouseResizeW: mouseIcon = OCR_SIZEWE; break;
10345+ default: return RGFW_FALSE;
10346+ }
1027110347
10272- char* icon = MAKEINTRESOURCEA(mouseIconSrc[mouse] );
10348+ char* icon = MAKEINTRESOURCEA(mouseIcon );
1027310349
1027410350 SetClassLongPtrA(win->src.window, GCLP_HCURSOR, (LPARAM) LoadCursorA(NULL, icon));
1027510351 SetCursor(LoadCursorA(NULL, icon));
@@ -12334,13 +12410,35 @@ void RGFW_window_showMouse(RGFW_window* win, RGFW_bool show) {
1233412410 else CGDisplayHideCursor(kCGDirectMainDisplay);
1233512411}
1233612412
12337- RGFW_bool RGFW_window_setMouseStandard(RGFW_window* win, u8 stdMouses) {
12338- static const char* mouseIconSrc[16] = {"arrowCursor", "arrowCursor", "IBeamCursor", "crosshairCursor", "pointingHandCursor", "resizeLeftRightCursor", "resizeUpDownCursor", "_windowResizeNorthWestSouthEastCursor", "_windowResizeNorthEastSouthWestCursor", "closedHandCursor", "operationNotAllowedCursor"};
12339- if (stdMouses > ((sizeof(mouseIconSrc)) / (sizeof(char*))))
12340- return RGFW_FALSE;
12413+ RGFW_bool RGFW_window_setMouseStandard(RGFW_window* win, u8 stdMouse) {
12414+ const char* cursorSelectorStr;
12415+ switch (stdMouse) {
12416+ case RGFW_mouseNormal: cursorSelectorStr = "arrowCursor"; break;
12417+ case RGFW_mouseArrow: cursorSelectorStr = "arrowCursor"; break;
12418+ case RGFW_mouseIbeam: cursorSelectorStr = "IBeamCursor"; break;
12419+ case RGFW_mouseCrosshair: cursorSelectorStr = "crosshairCursor"; break;
12420+ case RGFW_mousePointingHand: cursorSelectorStr = "pointingHandCursor"; break;
12421+ case RGFW_mouseResizeEW: cursorSelectorStr = "resizeLeftRightCursor"; break;
12422+ case RGFW_mouseResizeE: cursorSelectorStr = "resizeLeftRightCursor"; break;
12423+ case RGFW_mouseResizeW: cursorSelectorStr = "resizeLeftRightCursor"; break;
12424+ case RGFW_mouseResizeNS: cursorSelectorStr = "resizeUpDownCursor"; break;
12425+ case RGFW_mouseResizeN: cursorSelectorStr = "resizeUpDownCursor"; break;
12426+ case RGFW_mouseResizeS: cursorSelectorStr = "resizeUpDownCursor"; break;
12427+ case RGFW_mouseResizeNWSE: cursorSelectorStr = "_windowResizeNorthWestSouthEastCursor"; break;
12428+ case RGFW_mouseResizeNW: cursorSelectorStr = "_windowResizeNorthWestSouthEastCursor"; break;
12429+ case RGFW_mouseResizeSE: cursorSelectorStr = "_windowResizeNorthWestSouthEastCursor"; break;
12430+ case RGFW_mouseResizeNESW: cursorSelectorStr = "_windowResizeNorthEastSouthWestCursor"; break;
12431+ case RGFW_mouseResizeNE: cursorSelectorStr = "_windowResizeNorthEastSouthWestCursor"; break;
12432+ case RGFW_mouseResizeSW: cursorSelectorStr = "_windowResizeNorthEastSouthWestCursor"; break;
12433+ case RGFW_mouseResizeAll: cursorSelectorStr = "openHandCursor"; break;
12434+ case RGFW_mouseNotAllowed: cursorSelectorStr = "operationNotAllowedCursor"; break;
12435+ case RGFW_mouseWait: cursorSelectorStr = "arrowCursor"; break;
12436+ case RGFW_mouseProgress: cursorSelectorStr = "arrowCursor"; break;
12437+ default:
12438+ return RGFW_FALSE;
12439+ }
1234112440
12342- const char* mouseStr = mouseIconSrc[stdMouses];
12343- id mouse = NSCursor_arrowStr(mouseStr);
12441+ id mouse = NSCursor_arrowStr(cursorSelectorStr);
1234412442
1234512443 if (mouse == NULL)
1234612444 return RGFW_FALSE;
@@ -13334,8 +13432,8 @@ u8 RGFW_rgfwToKeyChar(u32 rgfw_keycode) {
1333413432}
1333513433
1333613434void RGFW_pollEvents(void) {
13337- emscripten_sleep(0);
1333813435 RGFW_resetPrevState();
13436+ emscripten_sleep(0);
1333913437}
1334013438
1334113439void RGFW_window_resize(RGFW_window* win, i32 w, i32 h) {
@@ -13352,14 +13450,35 @@ void RGFW_window_setMouse(RGFW_window* win, RGFW_mouse* mouse) { RGFW_UNUSED(win
1335213450void RGFW_freeMouse(RGFW_mouse* mouse) { RGFW_UNUSED(mouse); }
1335313451
1335413452RGFW_bool RGFW_window_setMouseStandard(RGFW_window* win, u8 mouse) {
13355- static const char cursors[16][16] = {
13356- "default", "default", "text", "crosshair",
13357- "pointer", "ew-resize", "ns-resize", "nwse-resize", "nesw-resize",
13358- "move", "not-allowed"
13359- };
13360-
1336113453 RGFW_UNUSED(win);
13362- EM_ASM( { document.getElementById("canvas").style.cursor = UTF8ToString($0); }, cursors[mouse]);
13454+ char* cursorName = NULL;
13455+
13456+ switch (mouse) {
13457+ case RGFW_mouseNormal: cursorName = (char*)"default"; break;
13458+ case RGFW_mouseArrow: cursorName = (char*)"default"; break;
13459+ case RGFW_mouseIbeam: cursorName = (char*)"text"; break;
13460+ case RGFW_mouseCrosshair: cursorName = (char*)"crosshair"; break;
13461+ case RGFW_mousePointingHand: cursorName = (char*)"pointer"; break;
13462+ case RGFW_mouseResizeEW: cursorName = (char*)"ew-resize"; break;
13463+ case RGFW_mouseResizeNS: cursorName = (char*)"ns-resize"; break;
13464+ case RGFW_mouseResizeNWSE: cursorName = (char*)"nwse-resize"; break;
13465+ case RGFW_mouseResizeNESW: cursorName = (char*)"nesw-resize"; break;
13466+ case RGFW_mouseResizeNW: cursorName = (char*)"nw-resize"; break;
13467+ case RGFW_mouseResizeN: cursorName = (char*)"n-resize"; break;
13468+ case RGFW_mouseResizeNE: cursorName = (char*)"ne-resize"; break;
13469+ case RGFW_mouseResizeE: cursorName = (char*)"e-resize"; break;
13470+ case RGFW_mouseResizeSE: cursorName = (char*)"se-resize"; break;
13471+ case RGFW_mouseResizeS: cursorName = (char*)"s-resize"; break;
13472+ case RGFW_mouseResizeSW: cursorName = (char*)"sw-resize"; break;
13473+ case RGFW_mouseResizeW: cursorName = (char*)"w-resize"; break;
13474+ case RGFW_mouseResizeAll: cursorName = (char*)"move"; break;
13475+ case RGFW_mouseNotAllowed: cursorName = (char*)"not-allowed"; break;
13476+ case RGFW_mouseWait: cursorName = (char*)"wait"; break;
13477+ case RGFW_mouseProgress: cursorName = (char*)"progress"; break;
13478+ default: return RGFW_FALSE;
13479+ }
13480+
13481+ EM_ASM( { document.getElementById("canvas").style.cursor = UTF8ToString($0); }, cursorName);
1336313482 return RGFW_TRUE;
1336413483}
1336513484
0 commit comments