Scroll delta is only available with Controls that support direction #GDK_SCROLL_SMOOTH.
All other controls check the direction up, down, left and right.
Code: Select all
;-TOP my mk-soft
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#GDK_SCROLL_SMOOTH = 4 ; Since 3.4
Structure GdkEventScrollEx Extends GdkEventScroll
delta_x.d
delta_y.d
is_stop.l
EndStructure
CompilerIf Defined(GdkEvent,#PB_Structure)=#False
Structure GdkEvent
StructureUnion
Type.l
any.GdkEventAny
expose.GdkEventExpose
no_expose.GdkEventNoExpose
visibility.GdkEventVisibility
motion.GdkEventMotion
button.GdkEventButton
scroll.GdkEventScrollEx
key.GdkEventKey
crossing.GdkEventCrossing
focus_change.GdkEventFocus
configure.GdkEventConfigure
property.GdkEventProperty
selection.GdkEventSelection
proximity.GdkEventProximity
client.GdkEventClient
dnd.GdkEventDND
window_state.GdkEventWindowState
setting.GdkEventSetting
EndStructureUnion
EndStructure
CompilerEndIf
; ----
Enumeration #PB_EventType_FirstCustomValue
#PB_EventType_MouseWheelX
#PB_EventType_MouseWheelY
EndEnumeration
ProcedureC _signal_event_cb(*Widget, *Event.GdkEvent, Gadget)
With *Event
Select \Type
Case #GDK_BUTTON_PRESS
Select \button\button
Case 1
;Debug "Left Button Press"
PostEvent(#PB_Event_Gadget, EventWindow(), Gadget, #PB_EventType_LeftButtonDown)
Case 2
;Debug "Right Button Press"
PostEvent(#PB_Event_Gadget, EventWindow(), Gadget, #PB_EventType_MiddleButtonDown)
Case 3
;Debug "Right Button Press"
PostEvent(#PB_Event_Gadget, EventWindow(), Gadget, #PB_EventType_RightButtonDown)
EndSelect
ProcedureReturn #True
Case #GDK_BUTTON_RELEASE
Select \button\button
Case 1
;Debug "Left Button Release"
PostEvent(#PB_Event_Gadget, EventWindow(), Gadget, #PB_EventType_LeftButtonUp)
Case 2
;Debug "Right Button Release"
PostEvent(#PB_Event_Gadget, EventWindow(), Gadget, #PB_EventType_MiddleButtonUp)
Case 3
;Debug "Right Button Release"
PostEvent(#PB_Event_Gadget, EventWindow(), Gadget, #PB_EventType_RightButtonUp)
EndSelect
ProcedureReturn #True
Case #GDK_SCROLL
If \scroll\direction = #GDK_SCROLL_LEFT
PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheelX, -1)
ElseIf \scroll\direction = #GDK_SCROLL_RIGHT
PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheelX, 1)
ElseIf \scroll\direction = #GDK_SCROLL_UP
PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheelY, -1)
ElseIf \scroll\direction = #GDK_SCROLL_DOWN
PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheelY, 1)
ElseIf \scroll\direction = #GDK_SCROLL_SMOOTH
If \scroll\delta_x <> 0.0
PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheelX, \scroll\delta_x)
EndIf
If \scroll\delta_y <> 0.0
PostEvent(#PB_Event_Gadget, GetActiveWindow(), user_data, #PB_EventType_MouseWheelY, \scroll\delta_y)
EndIf
EndIf
ProcedureReturn #True
EndSelect
EndWith
ProcedureReturn #False
EndProcedure
CompilerEndIf
; ********
OpenWindow(0, 0, 0, 420, 420, "Test Mouse Button Down/Up", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget |
#PB_Window_MaximizeGadget | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
;CanvasGadget(0, 0, 0, 420, 420, #PB_Canvas_Container) : CloseGadgetList()
CanvasGadget(0, 0, 0, 420, 420)
signal_event_handler = g_signal_connect_(GadgetID(0), "event", @_signal_event_cb(), 0) ; <= UserData = Gadget Number
Repeat
event = WaitWindowEvent(10)
If event = #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_LeftButtonDown
Debug "Mouse left button down"
Case #PB_EventType_LeftButtonUp
Debug "Mouse left button up"
Case #PB_EventType_MouseWheel
Debug "PB MouseWhell"
Case #PB_EventType_MouseWheelX
Debug "MouseWheelX = " + EventData()
Case #PB_EventType_MouseWheelY
Debug "MouseWheelY = " + EventData()
EndSelect
EndSelect
EndIf
Until event = #PB_Event_CloseWindow