Page 1 of 1
How to extend/subclass a gadget or window (cross platform)?
Posted: Tue May 29, 2012 10:12 am
by hmasr
I’ve seen some topics for that but for windows only using API calls. I want to add properties and methods to a gadget or window but should be valid for all supported platforms.
Re: How to extend/subclass a gadget or window (cross platfor
Posted: Tue May 29, 2012 8:28 pm
by idle
there isn't any cross platform PB function available to do it.
You would need to resort to API's.
For windows you have the native PB function to subclass the window SetWindowCallBack
and you can use this to do the same on Linux (except its global)
In the your call back you need to cast the event to the event type.
Code: Select all
ProcedureC WinManCallBack(*event.gdkEvent,window)
Protected *bevent.GdkEventButton
If *event\gdktype = #GDK_BUTTON_PRESS
;cast event to button event
*bevent.GdkEventButton = *event
If *bevent\button = 1
;left
elseif *bevent\button = 3
;right
endif
endif
;Pass control back to pb so it can get events
ProcessPureBasicEvents(*event)
Code: Select all
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
Enumeration -1
;GdkEventTypes
#GDK_NOTHING ; = -1
#GDK_DELETE ; = 0
#GDK_DESTROY; = 1
#GDK_EXPOSE ; = 2
#GDK_MOTION_NOTIFY ;= 3
#GDK_BUTTON_PRESS ;= 4
#GDK_2BUTTON_PRESS; = 5
#GDK_3BUTTON_PRESS ;= 6
#GDK_BUTTON_RELEASE; = 7
#GDK_KEY_PRESS ;= 8
#GDK_KEY_RELEASE ;= 9
#GDK_ENTER_NOTIFY; = 10
#GDK_LEAVE_NOTIFY; = 11
#GDK_FOCUS_CHANGE; = 12
#GDK_CONFIGURE ; = 13
#GDK_MAP ;= 14
#GDK_UNMAP ; = 15
#GDK_PROPERTY_NOTIFY ;= 16
#GDK_SELECTION_CLEAR ;= 17
#GDK_SELECTION_REQUEST ;= 18
#GDK_SELECTION_NOTIFY ;= 19
#GDK_PROXIMITY_IN ;= 20
#GDK_PROXIMITY_OUT ;= 21
#GDK_DRAG_ENTER ; = 22
#GDK_DRAG_LEAVE ; = 23
#GDK_DRAG_MOTION ; = 24
#GDK_DRAG_STATUS ; = 25
#GDK_DROP_START ; = 26
#GDK_DROP_FINISHED ; = 27
#GDK_CLIENT_EVENT ;= 28
#GDK_VISIBILITY_NOTIFY ;= 29
#GDK_NO_EXPOSE ;= 30
#GDK_SCROLL ; = 31
#GDK_WINDOW_STATE; = 32
#GDK_SETTING ;= 33
#GDK_OWNER_CHANGE; = 34
#GDK_GRAB_BROKEN ; = 35
#GDK_DAMAGE ; = 36
EndEnumeration
CompilerIf Defined(GdkEvent,#PB_Structure)=#False
Structure GdkEvent
gdktype.l
StructureUnion
any.GdkEventAny
expose.GdkEventExpose
no_expose.GdkEventNoExpose
visibility.GdkEventVisibility
motion.GdkEventMotion
button.GdkEventButton
scroll.GdkEventScroll
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
ImportC "-gdk"
gtk_main_do_event( *event.gdkEvent)
gdk_event_handler_set (*func,*mdata,*notify);
EndImport
Macro SetWindowCallback(EventHandler)
gdk_event_handler_set (EventHandler,0,0);
EndMacro
Macro ProcessPureBasicEvents(event)
gtk_main_do_event(event);
EndMacro
CompilerEndIf