diff --git a/Robust.Client/Graphics/Clyde/Windowing/Glfw.Cursors.cs b/Robust.Client/Graphics/Clyde/Windowing/Glfw.Cursors.cs index fb99347b3..75ec1c1f7 100644 --- a/Robust.Client/Graphics/Clyde/Windowing/Glfw.Cursors.cs +++ b/Robust.Client/Graphics/Clyde/Windowing/Glfw.Cursors.cs @@ -128,6 +128,19 @@ namespace Robust.Client.Graphics.Clyde AddStandardCursor(StandardCursorShape.Hand, CursorShape.Hand); AddStandardCursor(StandardCursorShape.HResize, CursorShape.HResize); AddStandardCursor(StandardCursorShape.VResize, CursorShape.VResize); + AddStandardCursor(StandardCursorShape.Progress, CursorShape.Arrow); + AddStandardCursor(StandardCursorShape.NWSEResize, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.NESWResize, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.Move, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.NotAllowed, CursorShape.Arrow); + AddStandardCursor(StandardCursorShape.NWResize, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.NResize, CursorShape.VResize); + AddStandardCursor(StandardCursorShape.NEResize, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.EResize, CursorShape.HResize); + AddStandardCursor(StandardCursorShape.SEResize, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.SResize, CursorShape.VResize); + AddStandardCursor(StandardCursorShape.SWResize, CursorShape.Crosshair); + AddStandardCursor(StandardCursorShape.WResize, CursorShape.HResize); } private sealed class CursorImpl : ICursor diff --git a/Robust.Client/Graphics/Clyde/Windowing/Sdl3.Cursor.cs b/Robust.Client/Graphics/Clyde/Windowing/Sdl3.Cursor.cs index ff2d1d9d4..71b609495 100644 --- a/Robust.Client/Graphics/Clyde/Windowing/Sdl3.Cursor.cs +++ b/Robust.Client/Graphics/Clyde/Windowing/Sdl3.Cursor.cs @@ -94,6 +94,19 @@ internal partial class Clyde Add(StandardCursorShape.Hand, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_POINTER); Add(StandardCursorShape.HResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_EW_RESIZE); Add(StandardCursorShape.VResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_NS_RESIZE); + Add(StandardCursorShape.Progress, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_PROGRESS); + Add(StandardCursorShape.NWSEResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_NWSE_RESIZE); + Add(StandardCursorShape.NESWResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_NESW_RESIZE); + Add(StandardCursorShape.Move, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_MOVE); + Add(StandardCursorShape.NotAllowed, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_NOT_ALLOWED); + Add(StandardCursorShape.NWResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_NW_RESIZE); + Add(StandardCursorShape.NResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_N_RESIZE); + Add(StandardCursorShape.NEResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_NE_RESIZE); + Add(StandardCursorShape.EResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_E_RESIZE); + Add(StandardCursorShape.SEResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_SE_RESIZE); + Add(StandardCursorShape.SResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_S_RESIZE); + Add(StandardCursorShape.SWResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_SW_RESIZE); + Add(StandardCursorShape.WResize, SDL.SDL_SystemCursor.SDL_SYSTEM_CURSOR_W_RESIZE); void Add(StandardCursorShape shape, SDL.SDL_SystemCursor sysCursor) { diff --git a/Robust.Client/Graphics/StandardCursorShape.cs b/Robust.Client/Graphics/StandardCursorShape.cs index e8e176a6b..254c9dc3b 100644 --- a/Robust.Client/Graphics/StandardCursorShape.cs +++ b/Robust.Client/Graphics/StandardCursorShape.cs @@ -15,6 +15,11 @@ namespace Robust.Client.Graphics /// IBeam, + /// + /// Alias for . + /// + Text = IBeam, + /// /// The crosshair shape. Used when dragging and dropping. /// @@ -25,16 +30,135 @@ namespace Robust.Client.Graphics /// Hand, + /// + /// Alias for + /// + Pointer = Hand, + /// /// The horizontal resize shape. Used when mousing over something that can be horizontally resized. /// HResize, + /// + /// Alias for + /// + EWResize = HResize, + /// /// The vertical resize shape. Used when mousing over something that can be vertically resized. /// VResize, + /// + /// Alias for . + /// + NSResize = VResize, + + /// + /// Program is busy doing something. + /// + /// + /// This cursor is not always available and may be substituted. + /// + Progress, + + /// + /// Diagonal resize shape for northwest-southeast resizing. + /// + /// + /// This cursor is not always available and may be substituted. + /// + NWSEResize, + + /// + /// Diagonal resize shape for northeast-southwest resizing. + /// + /// + /// This cursor is not always available and may be substituted. + /// + NESWResize, + + /// + /// 4-way arrow move icon. + /// + /// + /// This cursor is not always available and may be substituted. + /// + Move, + + /// + /// An action is not allowed. + /// + /// + /// This cursor is not always available and may be substituted. + /// + NotAllowed, + + /// + /// One-directional resize to the northwest. + /// + /// + /// This cursor is not always available and may be substituted. + /// + NWResize, + + /// + /// One-directional resize to the north. + /// + /// + /// This cursor is not always available and may be substituted. + /// + NResize, + + /// + /// One-directional resize to the northeast. + /// + /// + /// This cursor is not always available and may be substituted. + /// + NEResize, + + /// + /// One-directional resize to the east. + /// + /// + /// This cursor is not always available and may be substituted. + /// + EResize, + + /// + /// One-directional resize to the southeast. + /// + /// + /// This cursor is not always available and may be substituted. + /// + SEResize, + + /// + /// One-directional resize to the south. + /// + /// + /// This cursor is not always available and may be substituted. + /// + SResize, + + /// + /// One-directional resize to the southwest. + /// + /// + /// This cursor is not always available and may be substituted. + /// + SWResize, + + /// + /// One-directional resize to the west. + /// + /// + /// This cursor is not always available and may be substituted. + /// + WResize, + /// /// Not a real value /// diff --git a/Robust.Client/UserInterface/Control.Cursor.cs b/Robust.Client/UserInterface/Control.Cursor.cs index 17a5ce3c9..40da22a2c 100644 --- a/Robust.Client/UserInterface/Control.Cursor.cs +++ b/Robust.Client/UserInterface/Control.Cursor.cs @@ -11,14 +11,124 @@ namespace Robust.Client.UserInterface /// /// Default common cursor shapes available in the UI. /// + /// public enum CursorShape: byte { + /// + /// Corresponds to + /// Arrow, + + /// + /// Corresponds to + /// IBeam, + + /// + /// Corresponds to + /// + Text = IBeam, + + /// + /// Corresponds to + /// Crosshair, + + /// + /// Corresponds to + /// Hand, + + /// + /// Corresponds to + /// + Pointer = Hand, + + /// + /// Corresponds to + /// HResize, + + /// + /// Corresponds to + /// + EWResize = HResize, + + /// + /// Corresponds to + /// VResize, + + /// + /// Corresponds to + /// + NSResize = VResize, + + /// + /// Corresponds to + /// + Progress, + + /// + /// Corresponds to + /// + NWSEResize, + + /// + /// Corresponds to + /// + NESWResize, + + /// + /// Corresponds to + /// + Move, + + /// + /// Corresponds to + /// + NotAllowed, + + /// + /// Corresponds to + /// + NWResize, + + /// + /// Corresponds to + /// + NResize, + + /// + /// Corresponds to + /// + NEResize, + + /// + /// Corresponds to + /// + EResize, + + /// + /// Corresponds to + /// + SEResize, + + /// + /// Corresponds to + /// + SResize, + + /// + /// Corresponds to + /// + SWResize, + + /// + /// Corresponds to + /// + WResize, + /// /// Special cursor shape indicating that is set and being used. /// diff --git a/Robust.Client/UserInterface/UserInterfaceManager.Input.cs b/Robust.Client/UserInterface/UserInterfaceManager.Input.cs index 9fc7a3ee6..6907ed196 100644 --- a/Robust.Client/UserInterface/UserInterfaceManager.Input.cs +++ b/Robust.Client/UserInterface/UserInterfaceManager.Input.cs @@ -202,7 +202,14 @@ internal partial class UserInterfaceManager return; } - var shape = cursorTarget.DefaultCursorShape switch + var shape = MapCursorShape(cursorTarget.DefaultCursorShape); + + _clyde.SetCursor(_clyde.GetStandardCursor(shape)); + } + + private static StandardCursorShape MapCursorShape(Control.CursorShape shape) + { + return shape switch { Control.CursorShape.Arrow => StandardCursorShape.Arrow, Control.CursorShape.IBeam => StandardCursorShape.IBeam, @@ -210,10 +217,21 @@ internal partial class UserInterfaceManager Control.CursorShape.Crosshair => StandardCursorShape.Crosshair, Control.CursorShape.VResize => StandardCursorShape.VResize, Control.CursorShape.HResize => StandardCursorShape.HResize, + Control.CursorShape.Progress => StandardCursorShape.Progress, + Control.CursorShape.NWSEResize => StandardCursorShape.NWSEResize, + Control.CursorShape.NESWResize => StandardCursorShape.NESWResize, + Control.CursorShape.Move => StandardCursorShape.Move, + Control.CursorShape.NotAllowed => StandardCursorShape.NotAllowed, + Control.CursorShape.NWResize => StandardCursorShape.NWResize, + Control.CursorShape.NResize => StandardCursorShape.NResize, + Control.CursorShape.NEResize => StandardCursorShape.NEResize, + Control.CursorShape.EResize => StandardCursorShape.EResize, + Control.CursorShape.SEResize => StandardCursorShape.SEResize, + Control.CursorShape.SResize => StandardCursorShape.SResize, + Control.CursorShape.SWResize => StandardCursorShape.SWResize, + Control.CursorShape.WResize => StandardCursorShape.WResize, _ => StandardCursorShape.Arrow }; - - _clyde.SetCursor(_clyde.GetStandardCursor(shape)); } public void MouseWheel(MouseWheelEventArgs args)