cursor: Support css and wayland cursor-shape cursors
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3668>
This commit is contained in:
parent
4009bfe006
commit
92c6452753
@ -53,43 +53,78 @@ meta_cursor_get_name (MetaCursor cursor)
|
||||
{
|
||||
case META_CURSOR_DEFAULT:
|
||||
return "default";
|
||||
case META_CURSOR_NORTH_RESIZE:
|
||||
return "n-resize";
|
||||
case META_CURSOR_SOUTH_RESIZE:
|
||||
return "s-resize";
|
||||
case META_CURSOR_WEST_RESIZE:
|
||||
return "w-resize";
|
||||
case META_CURSOR_EAST_RESIZE:
|
||||
case META_CURSOR_CONTEXT_MENU:
|
||||
return "context-menu";
|
||||
case META_CURSOR_HELP:
|
||||
return "help";
|
||||
case META_CURSOR_POINTER:
|
||||
return "pointer";
|
||||
case META_CURSOR_PROGRESS:
|
||||
return "progress";
|
||||
case META_CURSOR_WAIT:
|
||||
return "wait";
|
||||
case META_CURSOR_CELL:
|
||||
return "cell";
|
||||
case META_CURSOR_CROSSHAIR:
|
||||
return "crosshair";
|
||||
case META_CURSOR_TEXT:
|
||||
return "text";
|
||||
case META_CURSOR_VERTICAL_TEXT:
|
||||
return "vertical-text";
|
||||
case META_CURSOR_ALIAS:
|
||||
return "alias";
|
||||
case META_CURSOR_COPY:
|
||||
return "copy";
|
||||
case META_CURSOR_MOVE:
|
||||
return "move";
|
||||
case META_CURSOR_NO_DROP:
|
||||
return "no-drop";
|
||||
case META_CURSOR_NOT_ALLOWED:
|
||||
return "not-allowed";
|
||||
case META_CURSOR_GRAB:
|
||||
return "grab";
|
||||
case META_CURSOR_GRABBING:
|
||||
return "grabbing";
|
||||
case META_CURSOR_E_RESIZE:
|
||||
return "e-resize";
|
||||
case META_CURSOR_SE_RESIZE:
|
||||
return "se-resize";
|
||||
case META_CURSOR_SW_RESIZE:
|
||||
return "sw-resize";
|
||||
case META_CURSOR_N_RESIZE:
|
||||
return "n-resize";
|
||||
case META_CURSOR_NE_RESIZE:
|
||||
return "ne-resize";
|
||||
case META_CURSOR_NW_RESIZE:
|
||||
return "nw-resize";
|
||||
case META_CURSOR_MOVE_OR_RESIZE_WINDOW:
|
||||
return "move";
|
||||
case META_CURSOR_BUSY:
|
||||
return "wait";
|
||||
case META_CURSOR_DND_IN_DRAG:
|
||||
return "default";
|
||||
case META_CURSOR_DND_MOVE:
|
||||
return "default";
|
||||
case META_CURSOR_DND_COPY:
|
||||
return "copy";
|
||||
case META_CURSOR_DND_UNSUPPORTED_TARGET:
|
||||
return "no-drop";
|
||||
case META_CURSOR_POINTING_HAND:
|
||||
return "pointer";
|
||||
case META_CURSOR_CROSSHAIR:
|
||||
return "crosshair";
|
||||
case META_CURSOR_IBEAM:
|
||||
return "text";
|
||||
case META_CURSOR_BLANK:
|
||||
case META_CURSOR_S_RESIZE:
|
||||
return "s-resize";
|
||||
case META_CURSOR_SE_RESIZE:
|
||||
return "se-resize";
|
||||
case META_CURSOR_SW_RESIZE:
|
||||
return "sw-resize";
|
||||
case META_CURSOR_W_RESIZE:
|
||||
return "w-resize";
|
||||
case META_CURSOR_EW_RESIZE:
|
||||
return "ew-resize";
|
||||
case META_CURSOR_NS_RESIZE:
|
||||
return "ns-resize";
|
||||
case META_CURSOR_NESW_RESIZE:
|
||||
return "nesw-resize";
|
||||
case META_CURSOR_NWSE_RESIZE:
|
||||
return "nwse-resize";
|
||||
case META_CURSOR_COL_RESIZE:
|
||||
return "col-resize";
|
||||
case META_CURSOR_ROW_RESIZE:
|
||||
return "row-resize";
|
||||
case META_CURSOR_ALL_SCROLL:
|
||||
return "all-scroll";
|
||||
case META_CURSOR_ZOOM_IN:
|
||||
return "zoom-in";
|
||||
case META_CURSOR_ZOOM_OUT:
|
||||
return "zoom-out";
|
||||
case META_CURSOR_DND_ASK:
|
||||
return "dnd-ask";
|
||||
case META_CURSOR_ALL_RESIZE:
|
||||
return "all-resize";
|
||||
case META_CURSOR_INVALID:
|
||||
case META_CURSOR_NONE:
|
||||
case META_CURSOR_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -104,43 +139,78 @@ meta_cursor_get_legacy_name (MetaCursor cursor)
|
||||
{
|
||||
case META_CURSOR_DEFAULT:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_NORTH_RESIZE:
|
||||
return "top_side";
|
||||
case META_CURSOR_SOUTH_RESIZE:
|
||||
return "bottom_side";
|
||||
case META_CURSOR_WEST_RESIZE:
|
||||
return "left_side";
|
||||
case META_CURSOR_EAST_RESIZE:
|
||||
case META_CURSOR_CONTEXT_MENU:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_HELP:
|
||||
return "question_arrow";
|
||||
case META_CURSOR_POINTER:
|
||||
return "hand";
|
||||
case META_CURSOR_PROGRESS:
|
||||
return "left_ptr_watch";
|
||||
case META_CURSOR_WAIT:
|
||||
return "watch";
|
||||
case META_CURSOR_CELL:
|
||||
return "crosshair";
|
||||
case META_CURSOR_CROSSHAIR:
|
||||
return "cross";
|
||||
case META_CURSOR_TEXT:
|
||||
return "xterm";
|
||||
case META_CURSOR_VERTICAL_TEXT:
|
||||
return "xterm";
|
||||
case META_CURSOR_ALIAS:
|
||||
return "dnd-link";
|
||||
case META_CURSOR_COPY:
|
||||
return "dnd-copy";
|
||||
case META_CURSOR_MOVE:
|
||||
return "dnd-move";
|
||||
case META_CURSOR_NO_DROP:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_NOT_ALLOWED:
|
||||
return "crossed_circle";
|
||||
case META_CURSOR_GRAB:
|
||||
return "hand2";
|
||||
case META_CURSOR_GRABBING:
|
||||
return "hand2";
|
||||
case META_CURSOR_E_RESIZE:
|
||||
return "right_side";
|
||||
case META_CURSOR_SE_RESIZE:
|
||||
return "bottom_right_corner";
|
||||
case META_CURSOR_SW_RESIZE:
|
||||
return "bottom_left_corner";
|
||||
case META_CURSOR_N_RESIZE:
|
||||
return "top_side";
|
||||
case META_CURSOR_NE_RESIZE:
|
||||
return "top_right_corner";
|
||||
case META_CURSOR_NW_RESIZE:
|
||||
return "top_left_corner";
|
||||
case META_CURSOR_MOVE_OR_RESIZE_WINDOW:
|
||||
return "fleur";
|
||||
case META_CURSOR_BUSY:
|
||||
return "watch";
|
||||
case META_CURSOR_DND_IN_DRAG:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_DND_MOVE:
|
||||
return "dnd-move";
|
||||
case META_CURSOR_DND_COPY:
|
||||
case META_CURSOR_S_RESIZE:
|
||||
return "bottom_side";
|
||||
case META_CURSOR_SE_RESIZE:
|
||||
return "bottom_right_corner";
|
||||
case META_CURSOR_SW_RESIZE:
|
||||
return "bottom_left_corner";
|
||||
case META_CURSOR_W_RESIZE:
|
||||
return "left_side";
|
||||
case META_CURSOR_EW_RESIZE:
|
||||
return "h_double_arrow";
|
||||
case META_CURSOR_NS_RESIZE:
|
||||
return "v_double_arrow";
|
||||
case META_CURSOR_NESW_RESIZE:
|
||||
return "fd_double_arrow";
|
||||
case META_CURSOR_NWSE_RESIZE:
|
||||
return "bd_double_arrow";
|
||||
case META_CURSOR_COL_RESIZE:
|
||||
return "h_double_arrow";
|
||||
case META_CURSOR_ROW_RESIZE:
|
||||
return "v_double_arrow";
|
||||
case META_CURSOR_ALL_SCROLL:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_ZOOM_IN:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_ZOOM_OUT:
|
||||
return "left_ptr";
|
||||
case META_CURSOR_DND_ASK:
|
||||
return "dnd-copy";
|
||||
case META_CURSOR_DND_UNSUPPORTED_TARGET:
|
||||
return "dnd-none";
|
||||
case META_CURSOR_POINTING_HAND:
|
||||
return "hand2";
|
||||
case META_CURSOR_CROSSHAIR:
|
||||
return "crosshair";
|
||||
case META_CURSOR_IBEAM:
|
||||
return "xterm";
|
||||
case META_CURSOR_BLANK:
|
||||
case META_CURSOR_ALL_RESIZE:
|
||||
return "dnd-move";
|
||||
case META_CURSOR_INVALID:
|
||||
case META_CURSOR_NONE:
|
||||
case META_CURSOR_LAST:
|
||||
break;
|
||||
}
|
||||
|
||||
@ -177,7 +247,7 @@ load_cursor_on_client (MetaCursor cursor,
|
||||
int fallback_size, i;
|
||||
const char *cursor_names[2];
|
||||
|
||||
if (cursor == META_CURSOR_BLANK)
|
||||
if (cursor == META_CURSOR_NONE)
|
||||
return create_blank_cursor_images ();
|
||||
|
||||
cursor_names[0] = meta_cursor_get_name (cursor);
|
||||
@ -347,7 +417,7 @@ load_cursor_from_theme (MetaCursorSprite *sprite)
|
||||
{
|
||||
MetaCursorSpriteXcursor *sprite_xcursor = META_CURSOR_SPRITE_XCURSOR (sprite);
|
||||
|
||||
g_assert (sprite_xcursor->cursor != META_CURSOR_NONE);
|
||||
g_assert (sprite_xcursor->cursor != META_CURSOR_INVALID);
|
||||
|
||||
sprite_xcursor->theme_dirty = FALSE;
|
||||
|
||||
|
@ -73,7 +73,7 @@ create_x_cursor (Display *xdisplay,
|
||||
{
|
||||
Cursor result;
|
||||
|
||||
if (cursor == META_CURSOR_BLANK)
|
||||
if (cursor == META_CURSOR_NONE)
|
||||
return create_blank_cursor (xdisplay);
|
||||
|
||||
result = XcursorLibraryLoadCursor (xdisplay, meta_cursor_get_name (cursor));
|
||||
@ -109,7 +109,7 @@ meta_cursor_renderer_x11_update_cursor (MetaCursorRenderer *renderer,
|
||||
MetaCursor cursor;
|
||||
|
||||
cursor = meta_cursor_sprite_xcursor_get_cursor (sprite_xcursor);
|
||||
if (cursor != META_CURSOR_NONE)
|
||||
if (cursor != META_CURSOR_INVALID)
|
||||
{
|
||||
Cursor xcursor;
|
||||
|
||||
|
@ -309,7 +309,7 @@ meta_cursor_for_grab_op (MetaGrabOp op)
|
||||
break;
|
||||
case META_GRAB_OP_RESIZING_S:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_S:
|
||||
return META_CURSOR_SOUTH_RESIZE;
|
||||
return META_CURSOR_S_RESIZE;
|
||||
break;
|
||||
case META_GRAB_OP_RESIZING_SW:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_SW:
|
||||
@ -317,7 +317,7 @@ meta_cursor_for_grab_op (MetaGrabOp op)
|
||||
break;
|
||||
case META_GRAB_OP_RESIZING_N:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_N:
|
||||
return META_CURSOR_NORTH_RESIZE;
|
||||
return META_CURSOR_N_RESIZE;
|
||||
break;
|
||||
case META_GRAB_OP_RESIZING_NE:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_NE:
|
||||
@ -329,18 +329,18 @@ meta_cursor_for_grab_op (MetaGrabOp op)
|
||||
break;
|
||||
case META_GRAB_OP_RESIZING_W:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_W:
|
||||
return META_CURSOR_WEST_RESIZE;
|
||||
return META_CURSOR_W_RESIZE;
|
||||
break;
|
||||
case META_GRAB_OP_RESIZING_E:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_E:
|
||||
return META_CURSOR_EAST_RESIZE;
|
||||
return META_CURSOR_E_RESIZE;
|
||||
break;
|
||||
case META_GRAB_OP_MOVING:
|
||||
return META_CURSOR_DEFAULT;
|
||||
break;
|
||||
case META_GRAB_OP_KEYBOARD_MOVING:
|
||||
case META_GRAB_OP_KEYBOARD_RESIZING_UNKNOWN:
|
||||
return META_CURSOR_MOVE_OR_RESIZE_WINDOW;
|
||||
return META_CURSOR_MOVE;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -143,7 +143,7 @@ meta_startup_notification_update_cursor (MetaStartupNotification *sn)
|
||||
{
|
||||
meta_topic (META_DEBUG_STARTUP,
|
||||
"Setting busy cursor");
|
||||
cursor = META_CURSOR_BUSY;
|
||||
cursor = META_CURSOR_WAIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -116,49 +116,85 @@ typedef enum
|
||||
|
||||
/**
|
||||
* MetaCursor:
|
||||
* @META_CURSOR_INVALID: No cursor
|
||||
* @META_CURSOR_NONE: No cursor
|
||||
* @META_CURSOR_DEFAULT: Default cursor
|
||||
* @META_CURSOR_NORTH_RESIZE: Resize northern edge cursor
|
||||
* @META_CURSOR_SOUTH_RESIZE: Resize southern edge cursor
|
||||
* @META_CURSOR_WEST_RESIZE: Resize western edge cursor
|
||||
* @META_CURSOR_EAST_RESIZE: Resize eastern edge cursor
|
||||
* @META_CURSOR_SE_RESIZE: Resize south-eastern corner cursor
|
||||
* @META_CURSOR_SW_RESIZE: Resize south-western corner cursor
|
||||
* @META_CURSOR_CONTEXT_MENU: Context menu cursor
|
||||
* @META_CURSOR_HELP: Help cursor
|
||||
* @META_CURSOR_POINTER: Pointer cursor
|
||||
* @META_CURSOR_PROGRESS: Progress cursor
|
||||
* @META_CURSOR_WAIT: Wait cursor
|
||||
* @META_CURSOR_CELL: Cell cursor
|
||||
* @META_CURSOR_CROSSHAIR: Crosshair cursor
|
||||
* @META_CURSOR_TEXT: Text cursor
|
||||
* @META_CURSOR_VERTICAL_TEXT: Vertical text cursor
|
||||
* @META_CURSOR_ALIAS: DnD alias cursor
|
||||
* @META_CURSOR_COPY: DnD copy cursor
|
||||
* @META_CURSOR_MOVE: DnD move cursor
|
||||
* @META_CURSOR_NO_DROP: DnD no drop cursor
|
||||
* @META_CURSOR_NOT_ALLOWED: DnD not allowed cursor
|
||||
* @META_CURSOR_GRAB: DnD grab cursor
|
||||
* @META_CURSOR_GRABBING: DnD grabbing cursor
|
||||
* @META_CURSOR_E_RESIZE: Resize eastern edge cursor
|
||||
* @META_CURSOR_N_RESIZE: Resize northern edge cursor
|
||||
* @META_CURSOR_NE_RESIZE: Resize north-eastern corner cursor
|
||||
* @META_CURSOR_NW_RESIZE: Resize north-western corner cursor
|
||||
* @META_CURSOR_MOVE_OR_RESIZE_WINDOW: Move or resize cursor
|
||||
* @META_CURSOR_BUSY: Busy cursor
|
||||
* @META_CURSOR_DND_IN_DRAG: DND in drag cursor
|
||||
* @META_CURSOR_DND_MOVE: DND move cursor
|
||||
* @META_CURSOR_DND_COPY: DND copy cursor
|
||||
* @META_CURSOR_DND_UNSUPPORTED_TARGET: DND unsupported target
|
||||
* @META_CURSOR_POINTING_HAND: pointing hand
|
||||
* @META_CURSOR_CROSSHAIR: crosshair (action forbidden)
|
||||
* @META_CURSOR_IBEAM: I-beam (text input)
|
||||
* @META_CURSOR_BLANK: Invisible cursor
|
||||
* @META_CURSOR_S_RESIZE: Resize southern edge cursor
|
||||
* @META_CURSOR_SE_RESIZE: Resize south-eastern corner cursor
|
||||
* @META_CURSOR_SW_RESIZE: Resize south-western corner cursor
|
||||
* @META_CURSOR_W_RESIZE: Resize western edge cursor
|
||||
* @META_CURSOR_EW_RESIZE: Resize eastern and western edges cursor
|
||||
* @META_CURSOR_NS_RESIZE: Resize northern and eastern edges cursor
|
||||
* @META_CURSOR_NESW_RESIZE: Resize north-east and south-west corners cursor
|
||||
* @META_CURSOR_NWSE_RESIZE: Resize north-west and south-east corners cursor
|
||||
* @META_CURSOR_COL_RESIZE: Resize column cursor
|
||||
* @META_CURSOR_ROW_RESIZE: Resize row cursor
|
||||
* @META_CURSOR_ALL_SCROLL: Scroll all directions cursor
|
||||
* @META_CURSOR_ZOOM_IN: Zoom in cursor
|
||||
* @META_CURSOR_ZOOM_OUT: Zoom out cursor
|
||||
* @META_CURSOR_DND_ASK: DnD ask cursor
|
||||
* @META_CURSOR_ALL_RESIZE: Resize all directions
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
META_CURSOR_NONE = 0,
|
||||
META_CURSOR_INVALID = 0,
|
||||
META_CURSOR_NONE,
|
||||
META_CURSOR_DEFAULT,
|
||||
META_CURSOR_NORTH_RESIZE,
|
||||
META_CURSOR_SOUTH_RESIZE,
|
||||
META_CURSOR_WEST_RESIZE,
|
||||
META_CURSOR_EAST_RESIZE,
|
||||
META_CURSOR_SE_RESIZE,
|
||||
META_CURSOR_SW_RESIZE,
|
||||
META_CURSOR_CONTEXT_MENU,
|
||||
META_CURSOR_HELP,
|
||||
META_CURSOR_POINTER,
|
||||
META_CURSOR_PROGRESS,
|
||||
META_CURSOR_WAIT,
|
||||
META_CURSOR_CELL,
|
||||
META_CURSOR_CROSSHAIR,
|
||||
META_CURSOR_TEXT,
|
||||
META_CURSOR_VERTICAL_TEXT,
|
||||
META_CURSOR_ALIAS,
|
||||
META_CURSOR_COPY,
|
||||
META_CURSOR_MOVE,
|
||||
META_CURSOR_NO_DROP,
|
||||
META_CURSOR_NOT_ALLOWED,
|
||||
META_CURSOR_GRAB,
|
||||
META_CURSOR_GRABBING,
|
||||
META_CURSOR_E_RESIZE,
|
||||
META_CURSOR_N_RESIZE,
|
||||
META_CURSOR_NE_RESIZE,
|
||||
META_CURSOR_NW_RESIZE,
|
||||
META_CURSOR_MOVE_OR_RESIZE_WINDOW,
|
||||
META_CURSOR_BUSY,
|
||||
META_CURSOR_DND_IN_DRAG,
|
||||
META_CURSOR_DND_MOVE,
|
||||
META_CURSOR_DND_COPY,
|
||||
META_CURSOR_DND_UNSUPPORTED_TARGET,
|
||||
META_CURSOR_POINTING_HAND,
|
||||
META_CURSOR_CROSSHAIR,
|
||||
META_CURSOR_IBEAM,
|
||||
META_CURSOR_BLANK,
|
||||
META_CURSOR_LAST
|
||||
META_CURSOR_S_RESIZE,
|
||||
META_CURSOR_SE_RESIZE,
|
||||
META_CURSOR_SW_RESIZE,
|
||||
META_CURSOR_W_RESIZE,
|
||||
META_CURSOR_EW_RESIZE,
|
||||
META_CURSOR_NS_RESIZE,
|
||||
META_CURSOR_NESW_RESIZE,
|
||||
META_CURSOR_NWSE_RESIZE,
|
||||
META_CURSOR_COL_RESIZE,
|
||||
META_CURSOR_ROW_RESIZE,
|
||||
META_CURSOR_ALL_SCROLL,
|
||||
META_CURSOR_ZOOM_IN,
|
||||
META_CURSOR_ZOOM_OUT,
|
||||
META_CURSOR_DND_ASK, /* not css */
|
||||
META_CURSOR_ALL_RESIZE, /* not css */
|
||||
} MetaCursor;
|
||||
|
||||
/**
|
||||
|
@ -419,7 +419,7 @@ meta_test_native_cursor_scaling (void)
|
||||
};
|
||||
int i;
|
||||
|
||||
cursor = META_CURSOR_MOVE_OR_RESIZE_WINDOW;
|
||||
cursor = META_CURSOR_MOVE;
|
||||
meta_display_set_cursor (display, cursor);
|
||||
virtual_pointer = clutter_seat_create_virtual_device (seat,
|
||||
CLUTTER_POINTER_DEVICE);
|
||||
@ -535,7 +535,7 @@ meta_test_native_cursor_cropping (void)
|
||||
|
||||
test_client_cursor (view,
|
||||
CURSOR_SCALE_METHOD_VIEWPORT_CROPPED,
|
||||
META_CURSOR_MOVE_OR_RESIZE_WINDOW,
|
||||
META_CURSOR_MOVE,
|
||||
MTK_MONITOR_TRANSFORM_NORMAL,
|
||||
ref_test_name, 0,
|
||||
meta_ref_test_determine_ref_test_flag ());
|
||||
@ -629,7 +629,7 @@ meta_test_native_cursor_transform (void)
|
||||
meta_ref_test_determine_ref_test_flag ());
|
||||
test_client_cursor (view,
|
||||
CURSOR_SCALE_METHOD_VIEWPORT_CROPPED,
|
||||
META_CURSOR_MOVE_OR_RESIZE_WINDOW,
|
||||
META_CURSOR_MOVE,
|
||||
test_cases[i].transform,
|
||||
ref_test_name, 2,
|
||||
meta_ref_test_determine_ref_test_flag ());
|
||||
|
Loading…
x
Reference in New Issue
Block a user