Class Cursor

All Implemented Interfaces:
Proxy

@Generated("org.javagi.JavaGI") public class Cursor extends GObject

Used to create and destroy cursors.

Cursors are immutable objects, so once you created them, there is no way to modify them later. You should create a new cursor when you want to change something about it.

Cursors by themselves are not very interesting: they must be bound to a window for users to see them. This is done with Surface.setCursor(Cursor) or Surface.setDeviceCursor(Device, Cursor). Applications will typically use higher-level GTK functions such as gtk_widget_set_cursor() instead.

Cursors are not bound to a given Display, so they can be shared. However, the appearance of cursors may vary when used on different platforms.

Named and texture cursors

There are multiple ways to create cursors. The platform's own cursors can be created with fromName(String, Cursor). That function lists the commonly available names that are shared with the CSS specification. Other names may be available, depending on the platform in use. On some platforms, what images are used for named cursors may be influenced by the cursor theme.

Another option to create a cursor is to use fromTexture(Texture, int, int, Cursor) and provide an image to use for the cursor.

To ease work with unsupported cursors, a fallback cursor can be provided. If a Surface cannot use a cursor because of the reasons mentioned above, it will try the fallback cursor. Fallback cursors can themselves have fallback cursors again, so it is possible to provide a chain of progressively easier to support cursors. If none of the provided cursors can be supported, the default cursor will be the ultimate fallback.

  • Constructor Details

    • Cursor

      public Cursor(MemorySegment address)
      Create a Cursor instance for the provided memory address.
      Parameters:
      address - the memory address of the native object
    • Cursor

      public Cursor()
      Create a new Cursor.
  • Method Details

    • getType

      public static @Nullable Type getType()
      Get the GType of the Cursor class.
      Returns:
      the GType
    • getMemoryLayout

      public static MemoryLayout getMemoryLayout()
      The memory layout of the native struct.
      Returns:
      the memory layout
    • asParent

      protected Cursor asParent()
      Return this instance as if it were its parent type. Comparable to the Java super keyword, but ensures the parent typeclass is also used in native code.
      Overrides:
      asParent in class GObject
      Returns:
      the instance as if it were its parent type
    • fromCallback

      public static @Nullable Cursor fromCallback(@Nullable CursorGetTextureCallback callback, @Nullable Cursor fallback)

      Creates a new callback-based cursor object.

      Cursors of this kind produce textures for the cursor image on demand, when the callback is called.

      Parameters:
      callback - the GdkCursorGetTextureCallback
      fallback - the GdkCursor to fall back to when this one cannot be supported
      Returns:
      a new GdkCursor
      Since:
      4.16
    • fromName

      public static @Nullable Cursor fromName(String name, @Nullable Cursor fallback)

      Creates a new cursor by looking up name in the current cursor theme.

      A recommended set of cursor names that will work across different platforms can be found in the CSS specification:

      "none" No cursor
      "default" The default cursor
      "help" Help is available
      "pointer" Indicates a link or interactive element
      "context-menu" A context menu is available
      "progress" Progress indicator
      "wait" Busy cursor
      "cell" Cell(s) may be selected
      "crosshair" Simple crosshair
      "text" Text may be selected
      "vertical-text" Vertical text may be selected
      "alias" DND: Something will be linked
      "copy" DND: Something will be copied
      "move" DND: Something will be moved
      "dnd-ask" DND: User can choose action to be carried out
      "no-drop" DND: Can't drop here
      "not-allowed" DND: Action will not be carried out
      "grab" DND: Something can be grabbed
      "grabbing" DND: Something is being grabbed
      "n-resize" Resizing: Move north border
      "e-resize" Resizing: Move east border
      "s-resize" Resizing: Move south border
      "w-resize" Resizing: Move west border
      "ne-resize" Resizing: Move north-east corner
      "nw-resize" Resizing: Move north-west corner
      "sw-resize" Resizing: Move south-west corner
      "se-resize" Resizing: Move south-east corner
      "col-resize" Resizing: Move an item or border horizontally
      "row-resize" Resizing: Move an item or border vertically
      "ew-resize" Moving: Something can be moved horizontally
      "ns-resize" Moving: Something can be moved vertically
      "nesw-resize" Moving: Something can be moved diagonally, north-east to south-west
      "nwse-resize" Moving: something can be moved diagonally, north-west to south-east
      "all-resize" Moving: Something can be moved in any direction
      "all-scroll" Can scroll in any direction
      "zoom-in" Zoom in
      "zoom-out" Zoom out
      Parameters:
      name - the name of the cursor
      fallback - null or the GdkCursor to fall back to when this one cannot be supported
      Returns:
      a new GdkCursor, or null if there is no cursor with the given name
    • fromTexture

      public static Cursor fromTexture(Texture texture, int hotspotX, int hotspotY, @Nullable Cursor fallback)
      Creates a new cursor from a GdkTexture.
      Parameters:
      texture - the texture providing the pixel data
      hotspotX - the horizontal offset of the “hotspot” of the cursor
      hotspotY - the vertical offset of the “hotspot” of the cursor
      fallback - the GdkCursor to fall back to when this one cannot be supported
      Returns:
      a new GdkCursor
    • getFallback

      public @Nullable Cursor getFallback()

      Returns the fallback for this cursor.

      The fallback will be used if this cursor is not available on a given GdkDisplay. For named cursors, this can happen when using nonstandard names or when using an incomplete cursor theme. For textured cursors, this can happen when the texture is too large or when the GdkDisplay it is used on does not support textured cursors.

      Returns:
      the fallback of the cursor or null to use the default cursor as fallback
    • getHotspotX

      public int getHotspotX()

      Returns the horizontal offset of the hotspot.

      The hotspot indicates the pixel that will be directly above the cursor.

      Note that named cursors may have a nonzero hotspot, but this function will only return the hotspot position for cursors created with fromTexture(Texture, int, int, Cursor).

      Returns:
      the horizontal offset of the hotspot or 0 for named cursors
    • getHotspotY

      public int getHotspotY()

      Returns the vertical offset of the hotspot.

      The hotspot indicates the pixel that will be directly above the cursor.

      Note that named cursors may have a nonzero hotspot, but this function will only return the hotspot position for cursors created with fromTexture(Texture, int, int, Cursor).

      Returns:
      the vertical offset of the hotspot or 0 for named cursors
    • getName

      public @Nullable String getName()

      Returns the name of the cursor.

      If the cursor is not a named cursor, null will be returned.

      Returns:
      the name of the cursor or null if it is not a named cursor
    • getTexture

      public @Nullable Texture getTexture()

      Returns the texture for the cursor.

      If the cursor is a named cursor, null will be returned.

      Returns:
      the texture for cursor or null if it is a named cursor
    • builder

      public static Cursor.Builder<? extends Cursor.Builder> builder()
      A Cursor.Builder object constructs a Cursor with the specified properties. Use the various set...() methods to set properties, and finish construction with Cursor.Builder.build().
      Returns:
      the builder object