Support the full set of standard CSS cursors

This commit is contained in:
Cameron Cawley
2026-05-11 19:19:07 +01:00
committed by Sam Lantinga
parent 4884dbbe56
commit e50faf4e6a
11 changed files with 391 additions and 90 deletions

View File

@@ -170,26 +170,40 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
// Cursor types
// private static final int SDL_SYSTEM_CURSOR_NONE = -1;
private static final int SDL_SYSTEM_CURSOR_ARROW = 0;
private static final int SDL_SYSTEM_CURSOR_IBEAM = 1;
private static final int SDL_SYSTEM_CURSOR_DEFAULT = 0;
private static final int SDL_SYSTEM_CURSOR_TEXT = 1;
private static final int SDL_SYSTEM_CURSOR_WAIT = 2;
private static final int SDL_SYSTEM_CURSOR_CROSSHAIR = 3;
private static final int SDL_SYSTEM_CURSOR_WAITARROW = 4;
private static final int SDL_SYSTEM_CURSOR_SIZENWSE = 5;
private static final int SDL_SYSTEM_CURSOR_SIZENESW = 6;
private static final int SDL_SYSTEM_CURSOR_SIZEWE = 7;
private static final int SDL_SYSTEM_CURSOR_SIZENS = 8;
private static final int SDL_SYSTEM_CURSOR_SIZEALL = 9;
private static final int SDL_SYSTEM_CURSOR_NO = 10;
private static final int SDL_SYSTEM_CURSOR_HAND = 11;
private static final int SDL_SYSTEM_CURSOR_WINDOW_TOPLEFT = 12;
private static final int SDL_SYSTEM_CURSOR_WINDOW_TOP = 13;
private static final int SDL_SYSTEM_CURSOR_WINDOW_TOPRIGHT = 14;
private static final int SDL_SYSTEM_CURSOR_WINDOW_RIGHT = 15;
private static final int SDL_SYSTEM_CURSOR_WINDOW_BOTTOMRIGHT = 16;
private static final int SDL_SYSTEM_CURSOR_WINDOW_BOTTOM = 17;
private static final int SDL_SYSTEM_CURSOR_WINDOW_BOTTOMLEFT = 18;
private static final int SDL_SYSTEM_CURSOR_WINDOW_LEFT = 19;
private static final int SDL_SYSTEM_CURSOR_PROGRESS = 4;
private static final int SDL_SYSTEM_CURSOR_NWSE_RESIZE = 5;
private static final int SDL_SYSTEM_CURSOR_NESW_RESIZE = 6;
private static final int SDL_SYSTEM_CURSOR_EW_RESIZE = 7;
private static final int SDL_SYSTEM_CURSOR_NS_RESIZE = 8;
private static final int SDL_SYSTEM_CURSOR_MOVE = 9;
private static final int SDL_SYSTEM_CURSOR_NOT_ALLOWED = 10;
private static final int SDL_SYSTEM_CURSOR_POINTER = 11;
private static final int SDL_SYSTEM_CURSOR_NW_RESIZE = 12;
private static final int SDL_SYSTEM_CURSOR_N_RESIZE = 13;
private static final int SDL_SYSTEM_CURSOR_NE_RESIZE = 14;
private static final int SDL_SYSTEM_CURSOR_E_RESIZE = 15;
private static final int SDL_SYSTEM_CURSOR_SE_RESIZE = 16;
private static final int SDL_SYSTEM_CURSOR_S_RESIZE = 17;
private static final int SDL_SYSTEM_CURSOR_SW_RESIZE = 18;
private static final int SDL_SYSTEM_CURSOR_W_RESIZE = 19;
private static final int SDL_SYSTEM_CURSOR_CONTEXT_MENU = 20;
private static final int SDL_SYSTEM_CURSOR_HELP = 21;
private static final int SDL_SYSTEM_CURSOR_CELL = 22;
private static final int SDL_SYSTEM_CURSOR_VERTICAL_TEXT = 23;
private static final int SDL_SYSTEM_CURSOR_ALIAS = 24;
private static final int SDL_SYSTEM_CURSOR_COPY = 25;
private static final int SDL_SYSTEM_CURSOR_NO_DROP = 26;
private static final int SDL_SYSTEM_CURSOR_GRAB = 27;
private static final int SDL_SYSTEM_CURSOR_GRABBING = 28;
private static final int SDL_SYSTEM_CURSOR_COL_RESIZE = 29;
private static final int SDL_SYSTEM_CURSOR_ROW_RESIZE = 30;
private static final int SDL_SYSTEM_CURSOR_ALL_SCROLL = 31;
private static final int SDL_SYSTEM_CURSOR_ZOOM_IN = 32;
private static final int SDL_SYSTEM_CURSOR_ZOOM_OUT = 33;
protected static final int SDL_ORIENTATION_UNKNOWN = 0;
protected static final int SDL_ORIENTATION_LANDSCAPE = 1;
@@ -1862,10 +1876,10 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
public static boolean setSystemCursor(int cursorID) {
int cursor_type = 0; //PointerIcon.TYPE_NULL;
switch (cursorID) {
case SDL_SYSTEM_CURSOR_ARROW:
case SDL_SYSTEM_CURSOR_DEFAULT:
cursor_type = 1000; //PointerIcon.TYPE_ARROW;
break;
case SDL_SYSTEM_CURSOR_IBEAM:
case SDL_SYSTEM_CURSOR_TEXT:
cursor_type = 1008; //PointerIcon.TYPE_TEXT;
break;
case SDL_SYSTEM_CURSOR_WAIT:
@@ -1874,54 +1888,96 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
case SDL_SYSTEM_CURSOR_CROSSHAIR:
cursor_type = 1007; //PointerIcon.TYPE_CROSSHAIR;
break;
case SDL_SYSTEM_CURSOR_WAITARROW:
case SDL_SYSTEM_CURSOR_PROGRESS:
cursor_type = 1004; //PointerIcon.TYPE_WAIT;
break;
case SDL_SYSTEM_CURSOR_SIZENWSE:
case SDL_SYSTEM_CURSOR_NWSE_RESIZE:
cursor_type = 1017; //PointerIcon.TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_SIZENESW:
case SDL_SYSTEM_CURSOR_NESW_RESIZE:
cursor_type = 1016; //PointerIcon.TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_SIZEWE:
case SDL_SYSTEM_CURSOR_EW_RESIZE:
cursor_type = 1014; //PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_SIZENS:
case SDL_SYSTEM_CURSOR_NS_RESIZE:
cursor_type = 1015; //PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_SIZEALL:
case SDL_SYSTEM_CURSOR_MOVE:
cursor_type = 1020; //PointerIcon.TYPE_GRAB;
break;
case SDL_SYSTEM_CURSOR_NO:
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
cursor_type = 1012; //PointerIcon.TYPE_NO_DROP;
break;
case SDL_SYSTEM_CURSOR_HAND:
case SDL_SYSTEM_CURSOR_POINTER:
cursor_type = 1002; //PointerIcon.TYPE_HAND;
break;
case SDL_SYSTEM_CURSOR_WINDOW_TOPLEFT:
case SDL_SYSTEM_CURSOR_NW_RESIZE:
cursor_type = 1017; //PointerIcon.TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_TOP:
case SDL_SYSTEM_CURSOR_N_RESIZE:
cursor_type = 1015; //PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_TOPRIGHT:
case SDL_SYSTEM_CURSOR_NE_RESIZE:
cursor_type = 1016; //PointerIcon.TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_RIGHT:
case SDL_SYSTEM_CURSOR_E_RESIZE:
cursor_type = 1014; //PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_BOTTOMRIGHT:
case SDL_SYSTEM_CURSOR_SE_RESIZE:
cursor_type = 1017; //PointerIcon.TYPE_TOP_LEFT_DIAGONAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_BOTTOM:
case SDL_SYSTEM_CURSOR_S_RESIZE:
cursor_type = 1015; //PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_BOTTOMLEFT:
case SDL_SYSTEM_CURSOR_SW_RESIZE:
cursor_type = 1016; //PointerIcon.TYPE_TOP_RIGHT_DIAGONAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_WINDOW_LEFT:
case SDL_SYSTEM_CURSOR_W_RESIZE:
cursor_type = 1014; //PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
cursor_type = 1001; //PointerIcon.TYPE_CONTEXT_MENU;
break;
case SDL_SYSTEM_CURSOR_HELP:
cursor_type = 1003; //PointerIcon.TYPE_HELP;
break;
case SDL_SYSTEM_CURSOR_CELL:
cursor_type = 1006; //PointerIcon.TYPE_CELL;
break;
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
cursor_type = 1009; //PointerIcon.TYPE_VERTICAL_TEXT;
break;
case SDL_SYSTEM_CURSOR_ALIAS:
cursor_type = 1010; //PointerIcon.TYPE_ALIAS;
break;
case SDL_SYSTEM_CURSOR_COPY:
cursor_type = 1011; //PointerIcon.TYPE_COPY;
break;
case SDL_SYSTEM_CURSOR_NO_DROP:
cursor_type = 1012; //PointerIcon.TYPE_NO_DROP;
break;
case SDL_SYSTEM_CURSOR_GRAB:
cursor_type = 1020; //PointerIcon.TYPE_GRAB;
break;
case SDL_SYSTEM_CURSOR_GRABBING:
cursor_type = 1021; //PointerIcon.TYPE_GRABBING;
break;
case SDL_SYSTEM_CURSOR_COL_RESIZE:
cursor_type = 1014; //PointerIcon.TYPE_HORIZONTAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
cursor_type = 1015; //PointerIcon.TYPE_VERTICAL_DOUBLE_ARROW;
break;
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
cursor_type = 1013; //PointerIcon.TYPE_ALL_SCROLL;
break;
case SDL_SYSTEM_CURSOR_ZOOM_IN:
cursor_type = 1018; //PointerIcon.TYPE_ZOOM_IN;
break;
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
cursor_type = 1019; //PointerIcon.TYPE_ZOOM_OUT;
break;
}
if (Build.VERSION.SDK_INT >= 24 /* Android 7.0 (N) */) {
try {

View File

@@ -116,6 +116,20 @@ typedef enum SDL_SystemCursor
SDL_SYSTEM_CURSOR_S_RESIZE, /**< Window resize bottom. May be NS_RESIZE. */
SDL_SYSTEM_CURSOR_SW_RESIZE, /**< Window resize bottom-left. May be NESW_RESIZE. */
SDL_SYSTEM_CURSOR_W_RESIZE, /**< Window resize left. May be EW_RESIZE. */
SDL_SYSTEM_CURSOR_CONTEXT_MENU, /**< A context menu is available for the object under the cursor. */
SDL_SYSTEM_CURSOR_HELP, /**< Help is available for the object under the cursor. */
SDL_SYSTEM_CURSOR_CELL, /**< A set of cells may be selected. */
SDL_SYSTEM_CURSOR_VERTICAL_TEXT,/**< Text selection. May be TEXT */
SDL_SYSTEM_CURSOR_ALIAS, /**< A shortcut is to be created. */
SDL_SYSTEM_CURSOR_COPY, /**< Something is to be copied. */
SDL_SYSTEM_CURSOR_NO_DROP, /**< The dragged item cannot be dropped at this location. May be NOT_ALLOWED. */
SDL_SYSTEM_CURSOR_GRAB, /**< The object under the cursor can be grabbed */
SDL_SYSTEM_CURSOR_GRABBING, /**< An object is currently being grabbed. */
SDL_SYSTEM_CURSOR_COL_RESIZE, /**< Column resize. May be EW_RESIZE. */
SDL_SYSTEM_CURSOR_ROW_RESIZE, /**< Row resize. May be NS_RESIZE. */
SDL_SYSTEM_CURSOR_ALL_SCROLL, /**< Four pointed arrow pointing north, south, east, and west. */
SDL_SYSTEM_CURSOR_ZOOM_IN, /**< Zoom in. */
SDL_SYSTEM_CURSOR_ZOOM_OUT, /**< Zoom out. */
SDL_SYSTEM_CURSOR_COUNT
} SDL_SystemCursor;

View File

@@ -6463,7 +6463,10 @@ const char *SDL_GetCSSCursorName(SDL_SystemCursor id, const char **fallback_name
return "ns-resize";
case SDL_SYSTEM_CURSOR_MOVE:
return "all-scroll";
if (fallback_name) {
*fallback_name = "all-scroll";
}
return "move";
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
return "not-allowed";
@@ -6495,6 +6498,51 @@ const char *SDL_GetCSSCursorName(SDL_SystemCursor id, const char **fallback_name
case SDL_SYSTEM_CURSOR_W_RESIZE:
return "w-resize";
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
return "context-menu";
case SDL_SYSTEM_CURSOR_HELP:
return "help";
case SDL_SYSTEM_CURSOR_CELL:
return "cell";
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
return "vertical-text";
case SDL_SYSTEM_CURSOR_ALIAS:
return "alias";
case SDL_SYSTEM_CURSOR_COPY:
return "copy";
case SDL_SYSTEM_CURSOR_NO_DROP:
return "no-drop";
case SDL_SYSTEM_CURSOR_GRAB:
return "grab";
case SDL_SYSTEM_CURSOR_GRABBING:
return "grabbing";
case SDL_SYSTEM_CURSOR_COL_RESIZE:
return "col-resize";
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
return "row-resize";
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
if (fallback_name) {
*fallback_name = "move";
}
return "all-scroll";
case SDL_SYSTEM_CURSOR_ZOOM_IN:
return "zoom-in";
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
return "zoom-out";
default:
return "default";
}

View File

@@ -200,9 +200,11 @@ static SDL_Cursor *Cocoa_CreateSystemCursor(SDL_SystemCursor id)
nscursor = LoadHiddenSystemCursor(@"resizenorthsouth", @selector(resizeUpDownCursor));
break;
case SDL_SYSTEM_CURSOR_MOVE:
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
nscursor = LoadHiddenSystemCursor(@"move", @selector(closedHandCursor));
break;
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
case SDL_SYSTEM_CURSOR_NO_DROP:
nscursor = [NSCursor operationNotAllowedCursor];
break;
case SDL_SYSTEM_CURSOR_POINTER:
@@ -232,6 +234,42 @@ static SDL_Cursor *Cocoa_CreateSystemCursor(SDL_SystemCursor id)
case SDL_SYSTEM_CURSOR_W_RESIZE:
nscursor = LoadHiddenSystemCursor(@"resizeeastwest", @selector(resizeLeftRightCursor));
break;
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
nscursor = [NSCursor contextualMenuCursor];
break;
case SDL_SYSTEM_CURSOR_HELP:
nscursor = LoadHiddenSystemCursor(@"help", @selector(helpCursor));
break;
case SDL_SYSTEM_CURSOR_CELL:
nscursor = LoadHiddenSystemCursor(@"cell", @selector(cellCursor));
break;
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
nscursor = [NSCursor IBeamCursorForVerticalLayout];
break;
case SDL_SYSTEM_CURSOR_ALIAS:
nscursor = [NSCursor dragLinkCursor];
break;
case SDL_SYSTEM_CURSOR_COPY:
nscursor = [NSCursor dragCopyCursor];
break;
case SDL_SYSTEM_CURSOR_GRAB:
nscursor = [NSCursor openHandCursor];
break;
case SDL_SYSTEM_CURSOR_GRABBING:
nscursor = [NSCursor closedHandCursor];
break;
case SDL_SYSTEM_CURSOR_COL_RESIZE:
nscursor = [NSCursor resizeLeftRightCursor];
break;
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
nscursor = [NSCursor resizeUpDownCursor];
break;
case SDL_SYSTEM_CURSOR_ZOOM_IN:
nscursor = LoadHiddenSystemCursor(@"zoomin", @selector(zoomInCursor));
break;
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
nscursor = LoadHiddenSystemCursor(@"zoomout", @selector(zoomOutCursor));
break;
default:
SDL_assert(!"Unknown system cursor");
return NULL;

View File

@@ -173,6 +173,20 @@ static SDL_Cursor * HAIKU_CreateSystemCursor(SDL_SystemCursor id)
CURSORCASE(S_RESIZE, RESIZE_NORTH_SOUTH);
CURSORCASE(SW_RESIZE, RESIZE_NORTH_EAST_SOUTH_WEST);
CURSORCASE(W_RESIZE, RESIZE_EAST_WEST);
CURSORCASE(CONTEXT_MENU, CONTEXT_MENU);
CURSORCASE(HELP, HELP);
CURSORCASE(CELL, CROSS_HAIR);
CURSORCASE(VERTICAL_TEXT, I_BEAM_HORIZONTAL);
CURSORCASE(ALIAS, CREATE_LINK);
CURSORCASE(COPY, COPY);
CURSORCASE(NO_DROP, NOT_ALLOWED);
CURSORCASE(GRAB, GRAB);
CURSORCASE(GRABBING, GRABBING);
CURSORCASE(COL_RESIZE, RESIZE_EAST_WEST);
CURSORCASE(ROW_RESIZE, RESIZE_NORTH_SOUTH);
CURSORCASE(ALL_SCROLL, MOVE);
CURSORCASE(ZOOM_IN, ZOOM_IN);
CURSORCASE(ZOOM_OUT, ZOOM_OUT);
#undef CURSORCASE
default:
SDL_assert(0);

View File

@@ -36,15 +36,19 @@ static int SDLToScreenCursorShape(SDL_SystemCursor id)
{
case SDL_SYSTEM_CURSOR_DEFAULT:
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
case SDL_SYSTEM_CURSOR_NO_DROP:
shape = SCREEN_CURSOR_SHAPE_ARROW;
break;
case SDL_SYSTEM_CURSOR_TEXT:
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
shape = SCREEN_CURSOR_SHAPE_IBEAM;
break;
case SDL_SYSTEM_CURSOR_WAIT:
case SDL_SYSTEM_CURSOR_PROGRESS:
shape = SCREEN_CURSOR_SHAPE_WAIT;
break;
case SDL_SYSTEM_CURSOR_CROSSHAIR:
case SDL_SYSTEM_CURSOR_CELL:
shape = SCREEN_CURSOR_SHAPE_CROSS;
break;
case SDL_SYSTEM_CURSOR_NWSE_RESIZE:
@@ -52,11 +56,40 @@ static int SDLToScreenCursorShape(SDL_SystemCursor id)
case SDL_SYSTEM_CURSOR_EW_RESIZE:
case SDL_SYSTEM_CURSOR_NS_RESIZE:
case SDL_SYSTEM_CURSOR_MOVE:
case SDL_SYSTEM_CURSOR_NW_RESIZE:
case SDL_SYSTEM_CURSOR_N_RESIZE:
case SDL_SYSTEM_CURSOR_NE_RESIZE:
case SDL_SYSTEM_CURSOR_E_RESIZE:
case SDL_SYSTEM_CURSOR_SE_RESIZE:
case SDL_SYSTEM_CURSOR_S_RESIZE:
case SDL_SYSTEM_CURSOR_SW_RESIZE:
case SDL_SYSTEM_CURSOR_W_RESIZE:
case SDL_SYSTEM_CURSOR_COL_RESIZE:
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
shape = SCREEN_CURSOR_SHAPE_MOVE;
break;
case SDL_SYSTEM_CURSOR_POINTER:
case SDL_SYSTEM_CURSOR_HELP:
case SDL_SYSTEM_CURSOR_ALIAS:
case SDL_SYSTEM_CURSOR_COPY:
shape = SCREEN_CURSOR_SHAPE_HAND;
break;
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
shape = SCREEN_CURSOR_SHAPE_MENU;
break;
case SDL_SYSTEM_CURSOR_GRAB:
shape = SCREEN_CURSOR_SHAPE_GRAB;
break;
case SDL_SYSTEM_CURSOR_GRABBING:
shape = SCREEN_CURSOR_SHAPE_GRABBING;
break;
case SDL_SYSTEM_CURSOR_ZOOM_IN:
shape = SCREEN_CURSOR_SHAPE_ZOOM_IN;
break;
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
shape = SCREEN_CURSOR_SHAPE_ZOOM_OUT;
break;
default:
break;
}

View File

@@ -989,7 +989,7 @@ static enum wp_cursor_shape_device_v1_shape Wayland_GetSystemCursorShape(SDL_Sys
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NS_RESIZE;
break;
case SDL_SYSTEM_CURSOR_MOVE:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_SCROLL;
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_MOVE;
break;
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NOT_ALLOWED;
@@ -1021,6 +1021,48 @@ static enum wp_cursor_shape_device_v1_shape Wayland_GetSystemCursorShape(SDL_Sys
case SDL_SYSTEM_CURSOR_W_RESIZE:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_W_RESIZE;
break;
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CONTEXT_MENU;
break;
case SDL_SYSTEM_CURSOR_HELP:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_HELP;
break;
case SDL_SYSTEM_CURSOR_CELL:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CELL;
break;
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_VERTICAL_TEXT;
break;
case SDL_SYSTEM_CURSOR_ALIAS:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALIAS;
break;
case SDL_SYSTEM_CURSOR_COPY:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_COPY;
break;
case SDL_SYSTEM_CURSOR_NO_DROP:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NO_DROP;
break;
case SDL_SYSTEM_CURSOR_GRAB:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_GRAB;
break;
case SDL_SYSTEM_CURSOR_GRABBING:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_GRABBING;
break;
case SDL_SYSTEM_CURSOR_COL_RESIZE:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_COL_RESIZE;
break;
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ROW_RESIZE;
break;
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_SCROLL;
break;
case SDL_SYSTEM_CURSOR_ZOOM_IN:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ZOOM_IN;
break;
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ZOOM_OUT;
break;
default:
SDL_assert(0); // Should never be here...
shape = WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DEFAULT;

View File

@@ -490,62 +490,62 @@ static SDL_Cursor *WIN_CreateSystemCursor(SDL_SystemCursor id)
name = IDC_ARROW;
break;
case SDL_SYSTEM_CURSOR_TEXT:
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
name = IDC_IBEAM;
break;
case SDL_SYSTEM_CURSOR_WAIT:
name = IDC_WAIT;
break;
case SDL_SYSTEM_CURSOR_CROSSHAIR:
case SDL_SYSTEM_CURSOR_CELL:
name = IDC_CROSS;
break;
case SDL_SYSTEM_CURSOR_PROGRESS:
name = IDC_APPSTARTING;
break;
case SDL_SYSTEM_CURSOR_NWSE_RESIZE:
name = IDC_SIZENWSE;
break;
case SDL_SYSTEM_CURSOR_NESW_RESIZE:
name = IDC_SIZENESW;
break;
case SDL_SYSTEM_CURSOR_EW_RESIZE:
name = IDC_SIZEWE;
break;
case SDL_SYSTEM_CURSOR_NS_RESIZE:
name = IDC_SIZENS;
break;
case SDL_SYSTEM_CURSOR_MOVE:
name = IDC_SIZEALL;
break;
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
name = IDC_NO;
break;
case SDL_SYSTEM_CURSOR_POINTER:
name = IDC_HAND;
break;
case SDL_SYSTEM_CURSOR_NW_RESIZE:
name = IDC_SIZENWSE;
break;
case SDL_SYSTEM_CURSOR_N_RESIZE:
name = IDC_SIZENS;
break;
case SDL_SYSTEM_CURSOR_NE_RESIZE:
name = IDC_SIZENESW;
break;
case SDL_SYSTEM_CURSOR_E_RESIZE:
name = IDC_SIZEWE;
break;
case SDL_SYSTEM_CURSOR_SE_RESIZE:
name = IDC_SIZENWSE;
break;
case SDL_SYSTEM_CURSOR_S_RESIZE:
name = IDC_SIZENS;
break;
case SDL_SYSTEM_CURSOR_NESW_RESIZE:
case SDL_SYSTEM_CURSOR_NE_RESIZE:
case SDL_SYSTEM_CURSOR_SW_RESIZE:
name = IDC_SIZENESW;
break;
case SDL_SYSTEM_CURSOR_EW_RESIZE:
case SDL_SYSTEM_CURSOR_E_RESIZE:
case SDL_SYSTEM_CURSOR_W_RESIZE:
case SDL_SYSTEM_CURSOR_COL_RESIZE:
name = IDC_SIZEWE;
break;
case SDL_SYSTEM_CURSOR_NS_RESIZE:
case SDL_SYSTEM_CURSOR_N_RESIZE:
case SDL_SYSTEM_CURSOR_S_RESIZE:
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
name = IDC_SIZENS;
break;
case SDL_SYSTEM_CURSOR_MOVE:
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
name = IDC_SIZEALL;
break;
case SDL_SYSTEM_CURSOR_NOT_ALLOWED:
case SDL_SYSTEM_CURSOR_NO_DROP:
name = IDC_NO;
break;
case SDL_SYSTEM_CURSOR_POINTER:
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
case SDL_SYSTEM_CURSOR_ALIAS:
case SDL_SYSTEM_CURSOR_COPY:
case SDL_SYSTEM_CURSOR_GRAB:
case SDL_SYSTEM_CURSOR_GRABBING:
case SDL_SYSTEM_CURSOR_ZOOM_IN:
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
name = IDC_HAND;
break;
case SDL_SYSTEM_CURSOR_HELP:
name = IDC_HELP;
break;
}
return WIN_CreateCursorAndData(LoadCursor(NULL, name));
}

View File

@@ -298,6 +298,20 @@ static unsigned int GetLegacySystemCursorShape(SDL_SystemCursor id)
case SDL_SYSTEM_CURSOR_S_RESIZE: return XC_bottom_side;
case SDL_SYSTEM_CURSOR_SW_RESIZE: return XC_bottom_left_corner;
case SDL_SYSTEM_CURSOR_W_RESIZE: return XC_left_side;
case SDL_SYSTEM_CURSOR_CONTEXT_MENU: return XC_hand2;
case SDL_SYSTEM_CURSOR_HELP: return XC_question_arrow;
case SDL_SYSTEM_CURSOR_CELL: return XC_cross;
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT: return XC_xterm;
case SDL_SYSTEM_CURSOR_ALIAS: return XC_hand2;
case SDL_SYSTEM_CURSOR_COPY: return XC_hand2;
case SDL_SYSTEM_CURSOR_NO_DROP: return XC_pirate;
case SDL_SYSTEM_CURSOR_GRAB: return XC_hand2;
case SDL_SYSTEM_CURSOR_GRABBING: return XC_hand2;
case SDL_SYSTEM_CURSOR_COL_RESIZE: return XC_sb_h_double_arrow;
case SDL_SYSTEM_CURSOR_ROW_RESIZE: return XC_sb_v_double_arrow;
case SDL_SYSTEM_CURSOR_ALL_SCROLL: return XC_fleur;
case SDL_SYSTEM_CURSOR_ZOOM_IN: return XC_hand2;
case SDL_SYSTEM_CURSOR_ZOOM_OUT: return XC_hand2;
case SDL_SYSTEM_CURSOR_COUNT: break; // so the compiler might notice if an enum value is missing here.
}

View File

@@ -397,6 +397,34 @@ static const char *get_active_cursor_name()
return "Window resize bottom-left";
case SDL_SYSTEM_CURSOR_W_RESIZE:
return "Window resize left";
case SDL_SYSTEM_CURSOR_CONTEXT_MENU:
return "Context menu";
case SDL_SYSTEM_CURSOR_HELP:
return "Help";
case SDL_SYSTEM_CURSOR_CELL:
return "Cell";
case SDL_SYSTEM_CURSOR_VERTICAL_TEXT:
return "Vertical text";
case SDL_SYSTEM_CURSOR_ALIAS:
return "Alias";
case SDL_SYSTEM_CURSOR_COPY:
return "Copy";
case SDL_SYSTEM_CURSOR_NO_DROP:
return "No drop";
case SDL_SYSTEM_CURSOR_GRAB:
return "Grab";
case SDL_SYSTEM_CURSOR_GRABBING:
return "Grabbing";
case SDL_SYSTEM_CURSOR_COL_RESIZE:
return "Column resize";
case SDL_SYSTEM_CURSOR_ROW_RESIZE:
return "Row resize";
case SDL_SYSTEM_CURSOR_ALL_SCROLL:
return "All scroll: Four pointed arrow pointing north, south, east, and west";
case SDL_SYSTEM_CURSOR_ZOOM_IN:
return "Zoom in";
case SDL_SYSTEM_CURSOR_ZOOM_OUT:
return "Zoom out";
default:
return "UNKNOWN CURSOR TYPE, FIX THIS PROGRAM.";
}

View File

@@ -22,26 +22,40 @@ static SDLTest_CommonState *state;
static int done;
static const char *cursorNames[] = {
"arrow",
"ibeam",
"default",
"text",
"wait",
"crosshair",
"waitarrow",
"sizeNWSE",
"sizeNESW",
"sizeWE",
"sizeNS",
"sizeALL",
"NO",
"hand",
"window top left",
"window top",
"window top right",
"window right",
"window bottom right",
"window bottom",
"window bottom left",
"window left"
"progress",
"NWSE resize",
"NESW resize",
"EW resize",
"NS resize",
"move",
"not allowed",
"pointer",
"NW resize",
"N resize",
"NE resize",
"E resize",
"SE resize",
"S resize",
"SW resize",
"W resize",
"context menu",
"help",
"cell",
"vertical text",
"alias",
"copy",
"no drop",
"grab",
"grabbing",
"column resize",
"row resize",
"all scroll",
"zoom in",
"zoom out"
};
SDL_COMPILE_TIME_ASSERT(cursorNames, SDL_arraysize(cursorNames) == SDL_SYSTEM_CURSOR_COUNT);