[PD] how to emulate mouse left-click to canvas?

Christof Ressi christof.ressi at gmx.at
Sat Jul 29 13:20:27 CEST 2017


> the click message takes 5 arguments: x, y, shift, alt, double click.

sorry, it's x, y, shift, ctrl, alt. mixed it up with text_click()

> Gesendet: Samstag, 29. Juli 2017 um 12:30 Uhr
> Von: "Christof Ressi" <christof.ressi at gmx.at>
> An: "Roman Haefeli" <reduzent at gmail.com>
> Cc: Pd-List <pd-list at lists.iem.at>
> Betreff: Re: [PD] how to emulate mouse left-click to canvas?
>
> here's some more details:
> 
> [mouse ...( and the corresponding [mouseup ...( are the mouse events that are sent to a canvas. BTW, you can use [iemguts/receivecanvas] -> [print] to check out all the messages the canvas receives. 
> 
> [mouse ...( needs four arguments: xpos, ypos, button, key modifier. button is 1 for a leftclick and 3 for a rightlick (at least on Windows). key is 0 for no modifier pressed, 1 for SHIFT and 2 for CTRL. 
> so as already explained, a leftclick message would be [mouse <x> <y> 1 0(
> 
> [mouseup ...( needs three arguments: xpos, ypos, button.
> 
> mouse events are processed by the editor in the function canvas_doclick (g_editor.c). it checks which object you've clicked on *) and calls the appropiate callback function in the classes's widget behaviour - which happens to be text_click (g_text.c) - which finally sends a "click" message to the object **). the click message takes 5 arguments: x, y, shift, alt, double click.
> 
> @Roman: you can send [click 0 0 0 0 0( directly to your symbol atom box and it will be ready for input (if the canvas is in focus). this way you don't have to care about the actual position.
> 
> some confusion arises from the fact that the canvas class also registers a 'click' method. but this is *not* the mouse event but the actual click event. the only thing it does is 'vis 1'.
> 
> 
> Christof
> 
> *) there's one thing I've always found a bit odd in Pd: for mouse events the linked list of gobjects is traversed from the beginning (i.e. in the order of their creation), terminating when a click was successful. the consequence is that for overlapping sections of GUI elements, the backmost object gets the 'click' message. try to overlap two bang objects, click on them and you see what I mean.
> 
> **) actually, for gatoms text_click() directly calls gatom_click(), circumventing the messaging system. the 'click' message is nevertheless registered in the gatom class.
> 
> 
> Gesendet: Samstag, 29. Juli 2017 um 02:00 Uhr
> Von: "Dan Wilcox" <danomatika at gmail.com>
> An: "Roman Haefeli" <reduzent at gmail.com>
> Cc: Pd-List <pd-list at lists.iem.at>
> Betreff: Re: [PD] how to emulate mouse left-click to canvas?
> 
> I don't think that does it as g_editor.c looks like the underlying logic for editing a patch (add, remove, move, etc) and doesn't forward the mouse events to the objects themselves.
>  
> 
> On Jul 29, 2017, at 1:04 AM, Roman Haefeli <reduzent at gmail.com[mailto:reduzent at gmail.com]> wrote: 
> Yeah,  I couldn't figure out what this function is useful for and
> stopped digging further. But reading it made me confident that 'click'
> might doesn't do what I want. In the meantime, Ingo mentioned 'mouse'.
> I guess the corresponding code is found in g_editor.c:
> 
> void canvas_mouse(t_canvas *x, t_floatarg xpos, t_floatarg ypos,
>     t_floatarg which, t_floatarg mod)
> {
>     canvas_doclick(x, xpos, ypos, which, mod, 1);
> }
> 
> 
> Roman 
> 
> --------
> Dan Wilcox
> @danomatika[http://twitter.com/danomatika]
> danomatika.com[http://danomatika.com]
> robotcowboy.com[http://robotcowboy.com]
>  _______________________________________________ Pd-list at lists.iem.at mailing list UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list[https://lists.puredata.info/listinfo/pd-list]
> 
> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list
>



More information about the Pd-list mailing list