Set/change mouse cursor (multi-OS)
Posted: Thu Mar 24, 2016 3:23 pm
I couldn't find a multi-OS SetCursor but the pieces of the puzzle were all there and just needed to be put together, so thankyou to everybody who contributed, especially Shardik and Oma. For OSX there's also more interesting mouse cursor options in this thread.
Currently just has CURSOR_ARROW and CURSOR_BUSY, easy to add more though - if you can find matching trios!
Example usage: SetCursor(hWnd, CURSOR_BUSY)
On OSX hWnd is ignored
SetCursor.pbi
SetCursorDemo.pb
Cursor constants:
Currently just has CURSOR_ARROW and CURSOR_BUSY, easy to add more though - if you can find matching trios!
Example usage: SetCursor(hWnd, CURSOR_BUSY)
On OSX hWnd is ignored
SetCursor.pbi
Code: Select all
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
Macro CURSOR_ARROW : #IDC_ARROW : EndMacro
Macro CURSOR_BUSY : #IDC_WAIT : EndMacro
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS
Macro CURSOR_ARROW : #kThemeArrowCursor : EndMacro
Macro CURSOR_BUSY : #kThemeWatchCursor : EndMacro
ImportC ""
SetThemeCursor(CursorType.L)
EndImport
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
Global *Cursor.GdkCursor
Macro CURSOR_ARROW : #GDK_ARROW : EndMacro
Macro CURSOR_BUSY : #GDK_WATCH : EndMacro
ImportC ""
gtk_widget_get_window(*widget.GtkWidget)
EndImport
CompilerEndIf
Procedure SetCursor(hWnd, CursorId)
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
SetClassLong_(hWnd, #GCL_HCURSOR, LoadCursor_(0, CursorId))
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS
SetThemeCursor(CursorId)
CompilerElseIf #PB_Compiler_OS = #PB_OS_Linux
*Cursor= gdk_cursor_new_(CursorID)
If *Cursor
gdk_window_set_cursor_(gtk_widget_get_window(WindowID(Window)), *Cursor)
EndIf
CompilerEndIf
EndProcedure
Code: Select all
IncludeFile("SetCursor.pbi")
hWnd=OpenWindow(0, 0,0, 400,200, "Change Mouse Cursor", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ButtonGadget(0, 10, 10, 40, 24, "Arrow")
ButtonGadget(1, 10, 40, 40, 24, "Busy")
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case 0
SetCursor(hWnd, CURSOR_ARROW)
Case 1
SetCursor(hWnd, CURSOR_BUSY)
EndSelect
EndSelect
ForEver
Cursor constants:
Code: Select all
;--- WINDOWS
; #IDC_ARROW=32512
; #IDC_APPSTARTING=32650
; #IDC_HAND=32649
; #IDC_HELP=32651
; #IDC_IBEAM=32513
; #IDC_CROSS=32515
; #IDC_NO=32648
; #IDC_SIZE=32640
; #IDC_SIZEALL=32646
; #IDC_SIZENESW=32643
; #IDC_SIZENS=32645
; #IDC_SIZENWSE=32642
; #IDC_SIZEWE=32644
; #IDC_UPARROW=32516
; #IDC_WAIT=32514
;--- OSX
; #kThemeArrowCursor = 0
; #kThemeCopyArrowCursor = 1
; #kThemeAliasArrowCursor = 2
; #kThemeContextualMenuArrowCursor = 3
; #kThemeIBeamCursor = 4
; #kThemeCrossCursor = 5
; #kThemePlusCursor = 6
; #kThemeWatchCursor = 7
; #kThemeClosedHandCursor = 8
; #kThemeOpenHandCursor = 9
; #kThemePointingHandCursor = 10
; #kThemeCountingUpHandCursor = 11
; #kThemeCountingDownHandCursor = 12
; #kThemeCountingUpAndDownHandCursor = 13
; #kThemeSpinningCursor = 14
; #kThemeResizeLeftCursor = 15
; #kThemeResizeRightCursor = 16
; #kThemeResizeLeftRightCursor = 17
; #kThemeNotAllowedCursor = 18
;--- LINUX:
; GDK_X_CURSOR = 0,
; GDK_ARROW = 2,
; GDK_BASED_ARROW_DOWN = 4,
; GDK_BASED_ARROW_UP = 6,
; GDK_BOAT = 8,
; GDK_BOGOSITY = 10,
; GDK_BOTTOM_LEFT_CORNER = 12,
; GDK_BOTTOM_RIGHT_CORNER = 14,
; GDK_BOTTOM_SIDE = 16,
; GDK_BOTTOM_TEE = 18,
; GDK_BOX_SPIRAL = 20,
; GDK_CENTER_PTR = 22,
; GDK_CIRCLE = 24,
; GDK_CLOCK = 26,
; GDK_COFFEE_MUG = 28,
; GDK_CROSS = 30,
; GDK_CROSS_REVERSE = 32,
; GDK_CROSSHAIR = 34,
; GDK_DIAMOND_CROSS = 36,
; GDK_DOT = 38,
; GDK_DOTBOX = 40,
; GDK_DOUBLE_ARROW = 42,
; GDK_DRAFT_LARGE = 44,
; GDK_DRAFT_SMALL = 46,
; GDK_DRAPED_BOX = 48,
; GDK_EXCHANGE = 50,
; GDK_FLEUR = 52,
; GDK_GOBBLER = 54,
; GDK_GUMBY = 56,
; GDK_HAND1 = 58,
; GDK_HAND2 = 60,
; GDK_HEART = 62,
; GDK_ICON = 64,
; GDK_IRON_CROSS = 66,
; GDK_LEFT_PTR = 68,
; GDK_LEFT_SIDE = 70,
; GDK_LEFT_TEE = 72,
; GDK_LEFTBUTTON = 74,
; GDK_LL_ANGLE = 76,
; GDK_LR_ANGLE = 78,
; GDK_MAN = 80,
; GDK_MIDDLEBUTTON = 82,
; GDK_MOUSE = 84,
; GDK_PENCIL = 86,
; GDK_PIRATE = 88,
; GDK_PLUS = 90,
; GDK_QUESTION_ARROW = 92,
; GDK_RIGHT_PTR = 94,
; GDK_RIGHT_SIDE = 96,
; GDK_RIGHT_TEE = 98,
; GDK_RIGHTBUTTON = 100,
; GDK_RTL_LOGO = 102,
; GDK_SAILBOAT = 104,
; GDK_SB_DOWN_ARROW = 106,
; GDK_SB_H_DOUBLE_ARROW = 108,
; GDK_SB_LEFT_ARROW = 110,
; GDK_SB_RIGHT_ARROW = 112,
; GDK_SB_UP_ARROW = 114,
; GDK_SB_V_DOUBLE_ARROW = 116,
; GDK_SHUTTLE = 118,
; GDK_SIZING = 120,
; GDK_SPIDER = 122,
; GDK_SPRAYCAN = 124,
; GDK_STAR = 126,
; GDK_TARGET = 128,
; GDK_TCROSS = 130,
; GDK_TOP_LEFT_ARROW = 132,
; GDK_TOP_LEFT_CORNER = 134,
; GDK_TOP_RIGHT_CORNER = 136,
; GDK_TOP_SIDE = 138,
; GDK_TOP_TEE = 140,
; GDK_TREK = 142,
; GDK_UL_ANGLE = 144,
; GDK_UMBRELLA = 146,
; GDK_UR_ANGLE = 148,
; GDK_WATCH = 150,
; GDK_XTERM = 152
; GDK_BLANK_CURSOR = -2
; GDK_CURSOR_IS_PIXMAP = -1