The reason i ask for this CanvasGadget events:
If you want to make independent new gadgets, you need this events.
If users do ResizeGadget with my custom gadget, i need to know
about it to redraw the custom gadget.
example:
Code: Select all
; --------------------- MyGadget.pbi
#PB_EventType_Timer = $7A7B7C7D
#PB_EventType_SizeGadget = $8A8B8C8D
Procedure DrawMyGadget(gadget)
If StartDrawing( CanvasOutput(gadget) )
width = GadgetWidth(gadget)
height = GadgetHeight(gadget)
Box(0,0,width,height,$FFFFFF)
For x = 0 To width Step 50
For y = 0 To height Step 25
Box(x+25*flip,y,25,25,RGBA($80,$80,$80,$FF))
flip!1
Next y
Next x
DrawingMode(#PB_2DDrawing_Outlined)
Box(0,0,width,height,0)
StopDrawing()
EndIf
EndProcedure
Procedure MyGadgetEvents(EventGadget,EventType)
Select EventType
Case #PB_EventType_MouseEnter : Debug "The mouse cursor entered the gadget"
Case #PB_EventType_MouseLeave : Debug "The mouse cursor left the gadget"
Case #PB_EventType_MouseMove : Debug "The mouse cursor moved"
Case #PB_EventType_MouseWheel : Debug "The mouse wheel was moved"
Case #PB_EventType_LeftButtonDown : Debug "The left mouse button was pressed"
Case #PB_EventType_LeftButtonUp : Debug "The left mouse button was released"
Case #PB_EventType_LeftClick : Debug "A click With the left mouse button"
Case #PB_EventType_LeftDoubleClick : Debug "A double-click With the left mouse button"
Case #PB_EventType_RightButtonDown : Debug "The right mouse button was pressed"
Case #PB_EventType_RightButtonUp : Debug "The right mouse button was released"
Case #PB_EventType_RightClick : Debug "A click With the right mouse button"
Case #PB_EventType_RightDoubleClick: Debug "A double-click With the right mouse button"
Case #PB_EventType_MiddleButtonDown: Debug "The middle mouse button was pressed"
Case #PB_EventType_MiddleButtonUp : Debug "The middle mouse button was released"
Case #PB_EventType_Focus : Debug "The gadget gained keyboard focus"
Case #PB_EventType_LostFocus : Debug "The gadget lost keyboard focus"
Case #PB_EventType_KeyDown : Debug "A key was pressed"
Case #PB_EventType_KeyUp : Debug "A key was released"
Case #PB_EventType_Input : Debug "Text input was generated"
Case #PB_EventType_Timer : Debug "Timer event"
Case #PB_EventType_SizeGadget : DrawMyGadget(EventGadget)
Debug "Gadget resized"
;Case ##PB_EventType_MoveGadget : Debug "Gadget moved"
;Case #PB_EventType_CloseGadget : Debug "Gadget closed"
EndSelect
EndProcedure
Procedure AddMyGadgetItem(gadget,imageID)
EndProcedure
Procedure ResizeMyGadget(gadget,x,y,w,h)
ResizeGadget(gadget,x,y,w,h)
MyGadgetEvents(gadget,#PB_EventType_SizeGadget)
EndProcedure
Procedure MyGadget(gadget,x,y,width,height)
result = CanvasGadget(gadget,x,y,width,height,#PB_Canvas_Keyboard|#PB_Canvas_DrawFocus)
If gadget=#PB_Any : gadget=result : EndIf
DrawMyGadget(gadget)
ProcedureReturn result
EndProcedure
; --------------------- end MyGadget.pbi
mainWin = OpenWindow(#PB_Any,0,0,800,600,"MyGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
mygadget = MyGadget(#PB_Any,0,600-140,800,140)
AddWindowTimer(mainWin,mygadget,1000)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget()=mygadget
MyGadgetEvents(mygadget,EventType())
EndIf
Case #PB_Event_Timer
If EventTimer()=mygadget
MyGadgetEvents(mygadget,#PB_EventType_Timer)
EndIf
Case #PB_Event_SizeWindow
ResizeMyGadget(mygadget,0,WindowHeight(mainWin)-GadgetHeight(mygadget),WindowWidth(mainWin),140)
EndSelect
ForEver
After adding some more events, the user of the custom control could just write:
Code: Select all
XIncludeFile "MyGadget.pbi"
mainWin = OpenWindow(#PB_Any,0,0,800,600,"MyGadget",#PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
mygadget = MyGadget(#PB_Any,0,600-140,800,140)
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
If EventGadget()=mygadget
MyGadgetEvents(mygadget,EventType())
EndIf
Case #PB_Event_SizeWindow
ResizeGadget(mygadget,0,WindowHeight(mainWin)-GadgetHeight(mygadget),WindowWidth(mainWin),140)
EndSelect
ForEver
So all events could be handled in MyGadgetEvents(). Makes it easier for the user of the custom gadget
and for the developer of the new gadget.
