Page 1 of 1

EventType() #PB_EventType_SizeGadget for CanvasGadget()

Posted: Sun Oct 16, 2011 2:45 pm
by Danilo
EventType() #PB_EventType_SizeGadget for CanvasGadget()
to redraw custom gadgets after this resize event.

Maybe also:
#PB_EventType_CloseGadget for freeing data.
#PB_EventType_MoveGadget after moving the gadget to display new content.
#PB_EventType_Timer for timers that are only for my custom CanvasGadget.

Re: EventType() #PB_EventType_SizeGadget for CanvasGadget()

Posted: Sun Oct 16, 2011 2:50 pm
by Polo
I'd love the timer event :)

Re: EventType() #PB_EventType_SizeGadget for CanvasGadget()

Posted: Sun Oct 16, 2011 5:31 pm
by Danilo
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. :)

Re: EventType() #PB_EventType_SizeGadget for CanvasGadget()

Posted: Thu Feb 23, 2012 1:33 pm
by STARGĂ…TE
Danilo wrote:EventType() #PB_EventType_SizeGadget for CanvasGadget()
to redraw custom gadgets after this resize event.

Maybe also:
#PB_EventType_CloseGadget for freeing data.
#PB_EventType_MoveGadget after moving the gadget to display new content.
#PB_EventType_Timer for timers that are only for my custom CanvasGadget.
I would like to see for CanvasGadget:

Code: Select all

#PB_EventType_DisableGadget ; after DisableGadget(#Gadget, #True)
#PB_EventType_EnableGadget ; after DisableGadget(#Gadget, #False)