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.