Page 1 of 1
Canvas - Mouse over
Posted: Wed Mar 17, 2021 8:26 pm
by Johanson
How to check if the mouse is over a specific triangle?
Code: Select all
If OpenWindow(0, 0, 0, 400, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Can=CanvasGadget(#PB_Any, 0, 0, 400, 200)
If StartVectorDrawing(CanvasVectorOutput(Can))
MovePathCursor(20, 160)
AddPathLine(100, 20)
AddPathLine(180, 160)
ClosePath()
VectorSourceColor(RGBA(255,0,0, 255))
FillPath()
MovePathCursor(220, 160)
AddPathLine(300, 20)
AddPathLine(380, 160)
ClosePath()
VectorSourceColor(RGBA(0, 0, 255, 255))
FillPath()
StopVectorDrawing()
EndIf
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Canvas - Mouse over
Posted: Wed Mar 17, 2021 8:32 pm
by STARGÅTE
Der einfache Weg wäre über IsInsidePath():
Code: Select all
Procedure Update()
If StartVectorDrawing(CanvasVectorOutput(EventGadget()))
MovePathCursor(20, 160)
AddPathLine(100, 20)
AddPathLine(180, 160)
ClosePath()
If IsInsidePath(GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX), GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY))
VectorSourceColor(RGBA(0, 255, 0, 255))
Else
VectorSourceColor(RGBA(255, 0, 0, 255))
EndIf
FillPath()
MovePathCursor(220, 160)
AddPathLine(300, 20)
AddPathLine(380, 160)
ClosePath()
If IsInsidePath(GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX), GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY))
VectorSourceColor(RGBA(0, 255, 0, 255))
Else
VectorSourceColor(RGBA(0, 0, 255, 255))
EndIf
FillPath()
StopVectorDrawing()
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 400, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Can=CanvasGadget(#PB_Any, 0, 0, 400, 200)
BindGadgetEvent(Can, @Update())
PostEvent(#PB_Event_Gadget, 0, Can, #PB_EventType_Resize)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Re: Canvas - Mouse over
Posted: Wed Mar 17, 2021 9:10 pm
by Johanson
STARGÅTE wrote:Der einfache Weg wäre über IsInsidePath():
Code: Select all
Procedure Update()
If StartVectorDrawing(CanvasVectorOutput(EventGadget()))
MovePathCursor(20, 160)
AddPathLine(100, 20)
AddPathLine(180, 160)
ClosePath()
If IsInsidePath(GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX), GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY))
VectorSourceColor(RGBA(0, 255, 0, 255))
Else
VectorSourceColor(RGBA(255, 0, 0, 255))
EndIf
FillPath()
MovePathCursor(220, 160)
AddPathLine(300, 20)
AddPathLine(380, 160)
ClosePath()
If IsInsidePath(GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseX), GetGadgetAttribute(EventGadget(), #PB_Canvas_MouseY))
VectorSourceColor(RGBA(0, 255, 0, 255))
Else
VectorSourceColor(RGBA(0, 0, 255, 255))
EndIf
FillPath()
StopVectorDrawing()
EndIf
EndProcedure
If OpenWindow(0, 0, 0, 400, 200, "VectorDrawing", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
Can=CanvasGadget(#PB_Any, 0, 0, 400, 200)
BindGadgetEvent(Can, @Update())
PostEvent(#PB_Event_Gadget, 0, Can, #PB_EventType_Resize)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
Thanks a lot
That's exactly it!!!
... Is there a method of changing positions (e.g. olympic rings): move to bottom, move to top?
Re: Canvas - Mouse over
Posted: Wed Mar 17, 2021 9:22 pm
by STARGÅTE
Johanson wrote:... Is there a method of changing positions (e.g. olympic rings): move to bottom, move to top?
What do you mean?
Re: Canvas - Mouse over
Posted: Wed Mar 17, 2021 9:37 pm
by Johanson
STARGÅTE wrote:Johanson wrote:... Is there a method of changing positions (e.g. olympic rings): move to bottom, move to top?
What do you mean?
similar to zIndex in JS
Re: Canvas - Mouse over
Posted: Wed Mar 17, 2021 10:52 pm
by Mijikai
Just change the drawing order and keep track of it.
zIndex is most likely just a depth buffer.