I had a look at your wrapper code. It is extremely well-organized and
readable, btw.
On the one hand, you're giving users/devs a much improved API with which to create and maintain GUI externals. I've been porting Pd to a different toolkit (and completely away from tcl/tk), so I am intimately familiar with the many, many reasons you don't want to use or add to the existing widgetbehavior callbacks.
Thanks !
On the other, your improved API ends in Tk canvas subcommands, and thus inherits all the limitations and bugs of Tk canvas. For simple/limited GUI widgets it's possible to workaround these problems-- in most cases the external developer can hide the problems completely from the end user. But for complex things like a drawing surface those bugs and limitations are exposed fairly directly to the end user.
I'm totally agree with you about the fact that TK has annoying limitations but I didn't notice any real bug and we can't avoid Tk if we want to be compatible with pd-vanilla (for the moment the only other solution seems to make another distribution like l2ork*). When I call "egraphics_line(g, 0, 0, 10, 10)" for example TK draws a line from 0, 0 to 10, 10 and it works for every other shapes. I think that GUIs like hoa.map or hoa.3d.scope~ are quite complicated and I didn't encounter any big difficulty during the implementation (perhaps because I convert almost every shape to a bezier curve...).
pointer from tk so this is useless.
Practically speaking, what is Pierre's alternative? What tradeoffs for user and developer are there in choosing a GUI alternative?
For devs, I'll try to explain quickly what the CICM Wrapper does for graphics and interactions.
and draws inside this "fake" window (that allows to clip the shapes within the boundaries of the box and to bind the object to all the interactions).
saved until you invalidate it (to avoid to recompute every time).
converted to a bezier curve (that allows to apply matrix transformations for example).
instruction when they should be drawn. So if you want to change the Tk graphic API, you don't have to change the whole interface but only the "translation" function (and some other small stuffs like popup).
In fact, there're a lot of stuffs in the Wrapper but I think that the code is well documented : http://cicm.github.io/CicmWrapper/. And for user, you should explore Cream and look at c.help.gui.pd subpatch in the help files :)
Cheers