I don't see a way to do mouse over for image gadgets or any gadgets. I've looked in bindevent and I looked for other gadgets with mouse-over to maybe use in some hack, and inline JS has nothing but DOM structure to work with.. Using canvas which has flexible input requires widgets and handling to be coded.
In PB you did this with API hacks or coordinate monitoring, but bindevent doesn't get called on coordinate change.
No way to do mouseovers
Re: No way to do mouseovers
Here is an example of one way. Although I'm sure that there may be more.
Please note that some of the features aren't working as expected. Possibly bugs? ... Hope this helps
Code: Select all
EnableExplicit
Structure struct_MouseOverGadget
id_Gadget.i
x.i
y.i
width.i
height.i
id_ImageOff.i
id_ImageOn.i
mouseOver.i
EndStructure
Global MouseOverGadget.struct_MouseOverGadget
MouseOverGadget\id_Gadget = 10
MouseOverGadget\id_ImageOff = 0
MouseOverGadget\id_ImageOn = 1
MouseOverGadget\x = 20
MouseOverGadget\y = 20
MouseOverGadget\width = 30
MouseOverGadget\height = 30
MouseOverGadget\mouseOver = 0
Structure struct_Mouse
x.i
y.i
buttonStatus.i
EndStructure
Global Mouse.struct_Mouse
CreateImage(MouseOverGadget\id_ImageOff,MouseOverGadget\width,MouseOverGadget\height) ; CREATE THE IMAGE FOR OFF - BLUE SQUARE
If IsImage(MouseOverGadget\id_ImageOff)
StartDrawing(ImageOutput(MouseOverGadget\id_ImageOff))
Box(0,0,40,40,RGB(0,0,255))
StopDrawing()
EndIf
CreateImage(MouseOverGadget\id_ImageOn,MouseOverGadget\width,MouseOverGadget\height) ; CREATE THE IMAGE FOR ON - YELLOW SQUARE
If IsImage(MouseOverGadget\id_ImageOn)
StartDrawing(ImageOutput(MouseOverGadget\id_ImageOn))
Box(0,0,40,40,RGB(255,255,0))
StopDrawing()
EndIf
Procedure _CanvasGadget() ; CHECK FOR CANVAS GADGET EVENTS IN THIS PROCEDURE
If EventType() = #PB_EventType_MouseMove
Mouse\x = GetGadgetAttribute(1,#PB_Canvas_MouseX)
Mouse\y = GetGadgetAttribute(1,#PB_Canvas_MouseY) ; **BUG?** - RETURNS A FLOAT VALUE FOR SOME REASON
Debug Str(Mouse\x) + " " + Str(Mouse\y)
EndIf
; CHECK MOUSE POSITION TO SEE IF OVER THE AREA
If Mouse\x > MouseOverGadget\x And Mouse\x < MouseOverGadget\x + MouseOverGadget\width And Mouse\y > MouseOverGadget\y And Mouse\y < MouseOverGadget\y + MouseOverGadget\height
If MouseOverGadget\mouseOver = 0
MouseOverGadget\mouseOver = 1
SetGadgetState(MouseOverGadget\id_Gadget,ImageID(MouseOverGadget\id_ImageOn)) ; SET IMAGE TO ON (YELLOW SQUARE)
SetGadgetAttribute(1,#PB_Canvas_Cursor,#PB_Cursor_Hand) ; **BUG?** CURRENTLY NOT WORKING
EndIf
Else ; NOT OVER THE AREA
If MouseOverGadget\mouseOver = 1
MouseOverGadget\mouseOver = 0
SetGadgetState(MouseOverGadget\id_Gadget,ImageID(MouseOverGadget\id_ImageOff)) ; SET IMAGE TO OFF (BLUE SQUARE)
SetGadgetAttribute(1,#PB_Canvas_Cursor,#PB_Cursor_Default) ; **BUG?** CURRENTLY NOT WORKING
EndIf
EndIf
EndProcedure
If OpenWindow(1,0,0,640,480,"",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;CanvasGadget(1,0,0,640,480) ; **BUG?** - UNCOMMENT THIS LINE TO SEE THAT _CanvasGadget() ROUTINE DOESN'T FIRE WHEN MOUSE OVER THE SPECIFIED AREA
ImageGadget(MouseOverGadget\id_Gadget,MouseOverGadget\x,MouseOverGadget\y,MouseOverGadget\width,MouseOverGadget\height,ImageID(MouseOverGadget\id_ImageOff))
CanvasGadget(1,0,0,640,480) ; DECLARE CanvasGadget() AS THE LAST GADGET(SEE LINE ABOVE WHEN DECLARED EARLIER)
EndIf
BindGadgetEvent(1,@_CanvasGadget()) ; MUST BE DECLARED AFTER THE CANVAS GADGET IS CREATED