That's a similar concept to Cocoa's NSTrackingArea. It's basically a rectangle in a view that you attach which then receives mouse enter, leave, move, down, up, & drag events. You can update the position and size whenever.
https://developer.apple.com/documentation/appkit/nstrackingarea?language=objc <https://developer.apple.com/documentation/appkit/nstrackingarea?language=objc> I could imagine something similar in Pd, say a [mousearea] object. Also, updating [cnv] with similar functionality would be useful. [mousearea] could be used for arbitrary areas for control interaction and drawing of other objects while [cnv] could be used to create simple graphical regions for things like piano keys. I know there have been different approaches in this area, so it might be helpful to take a look (DesireData, PurrData, etc). I think this would complement a general, canvas wide set of [mouse] objects. I started by following the existing approach and split functionality into [mouse], [mouseup], and [mousemotion]. Another approach would be to use a single [mouse] object with a status symbol in addition to x & y. > On Mar 17, 2019, at 12:15 PM, Chris McCormick <[email protected]> wrote: > > Hi Dan, > > Thanks so much for looking at this. > > What I really want as an end-user is to be able to know "has this particular > rectangle received mouse-down, mouse-motion, or mouse-up?" > > I think this would bring huge flexibility in allowing people to build complex > user interfaces at the patch level. Things like ribbon controllers max/min > selectors, click-and-hold buttons etc. > > Cheers, > > Chris. > > On 16/3/19 10:01 am, Dan Wilcox wrote: >> Howdy all, >> I played around a bit with forwarding canvas mouse click events to a [mouse] >> object. This works fine using a bind to a global "#mouse" symbol, however >> this means all objects receive events from all canvases. >> How can I change this to be local canvas only, as in only [mouse] objects >> within the canvas receive the events? I was thinking to generate a symbol >> with the canvas id ala how [openpanel] and [savepanel] work: >> sprintf(buf, "d%lx", (t_int)x); >> x->x_s = gensym(buf); >> x->x_canvas = canvas_getcurrent(); >> pd_bind(&x->x_obj.ob_pd, x->x_s) >> However, this means the canvas mouse function would need to generate the >> equivalent symbol each time the event is called in order to check if >> anything is bound to it. This seems wasteful. I suppose I could add a cached >> symbol somewhere, maybe to the g_canvas instance struct, however I'd like >> avoid that. >> -------- >> Dan Wilcox -------- Dan Wilcox @danomatika <http://twitter.com/danomatika> danomatika.com <http://danomatika.com/> robotcowboy.com <http://robotcowboy.com/>
_______________________________________________ Pd-dev mailing list [email protected] https://lists.puredata.info/listinfo/pd-dev
