<html><body><div style="color:#000; background-color:#fff; font-family:HelveticaNeue, Helvetica Neue, Helvetica, Arial, Lucida Grande, sans-serif;font-size:16px"><div id="yui_3_16_0_1_1419393162819_5931">Hi list,</div><div id="yui_3_16_0_1_1419393162819_5932" dir="ltr">I've been investigating other guis as possible replacements for tcl/tk gui.  A few reasons:</div><div id="yui_3_16_0_1_1419393162819_6817" dir="ltr">* tk is slow to redraw<br></div><div id="yui_3_16_0_1_1419393162819_6816" dir="ltr">* no anti-aliasing except on OSX</div><div id="yui_3_16_0_1_1419393162819_8810" dir="ltr">* poor support for theming</div><div id="yui_3_16_0_1_1419393162819_9154" dir="ltr">* poor support for standard image formats</div><div id="yui_3_16_0_1_1419393162819_8812" dir="ltr">* binary alpha channel</div><div id="yui_3_16_0_1_1419393162819_8813" dir="ltr">* limited control of font properties on canvas<br></div>* lack of proper canvas zooming<div id="yui_3_16_0_1_1419393162819_10583" dir="ltr">* non-standard file save/open dialogs</div><div style="" class="" id="yui_3_16_0_1_1419393162819_9495" dir="ltr">* lack of common gui-toolkit tools like tooltips and rich text<br style="" class=""></div><div id="yui_3_16_0_1_1419393162819_10584" style="" class="" dir="ltr">* too much bit-rot in third-party libraries to work around all the above</div><div id="yui_3_16_0_1_1419393162819_11442" style="" class="" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_11443" style="" class="" dir="ltr">But as it turns out, it's fairly difficult to find a decent replacement for tk canvas:</div><div id="yui_3_16_0_1_1419393162819_11444" style="" class="" dir="ltr">* Gtk is a moving target and has reportedly poor documentation and poor community attitudes when trying to use it with OSX and Windows</div><div id="yui_3_16_0_1_1419393162819_11445" style="" class="" dir="ltr">* Qt's "Qt Quick/QML" approach doesn't include Bezier curves or even lines as fundamental items (and they won't benefit from Qt's graphics acceleration if you add them manually).  Probably related-- it seems to be geared mainly toward mobile apps.  Desktop components seem to have been tacked on as an afterthought.<br></div><div id="yui_3_16_0_1_1419393162819_13287" style="" class="" dir="ltr">* Qt's QGraphicsView _seems_ to be deprecated in favor of QML.  (Nobody has ever stated that it is deprecated, but it certainly doesn't seem to be getting the same advertising and development effort as QML.)  But it looks to have everything needed for a Pd canvas.<br></div><div id="yui_3_16_0_1_1419393162819_19815" style="" class="" dir="ltr">* Nearly every other toolkit has cross-platform issues that make it a pain to use with one or more OSes</div><div id="yui_3_16_0_1_1419393162819_19816" style="" class="" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_19817" style="" class="" dir="ltr">There's also this:<br></div><div id="yui_3_16_0_1_1419393162819_5936" dir="ltr"><a id="yui_3_16_0_1_1419393162819_5935" href="https://github.com/rogerwang/node-webkit">https://github.com/rogerwang/node-webkit</a></div><div id="yui_3_16_0_1_1419393162819_5954" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_32444" dir="ltr">with a nice short introduction here:<br></div><div id="yui_3_16_0_1_1419393162819_32412" dir="ltr"><a id="yui_3_16_0_1_1419393162819_32411" href="http://yedingding.com/2014/08/01/node-webkit-intro-en.html">What you should know before starting node-webkit| Do Great Things - 叶玎玎</a></div><div id="yui_3_16_0_1_1419393162819_32438" dir="ltr"><br></div><div dir="ltr" id="yui_3_16_0_1_1419393162819_5982">So node-webkit would essentially replace tcl/tk with HTML5 (or any subset of it), plus a javascript API for handling menubars, native file dialogs and other application-level details.  Additionally it could leverage any HTML5 graphics framework, of which there are many.  (Also, if a patch author wanted to write some insanely complex visualization, they could use any HTML5 framework and easily communicate with Pd.)<br></div><div id="yui_3_16_0_1_1419393162819_32408" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_31095" dir="ltr">Of course the _big_ problem is that node-webkit itself currently weighs in at 99M for linux amd64 (37M zipped).  There doesn't seem to be a Debian package for it (and I'm not sure if there could be, given how it wraps around the Chromium browser).</div><div id="yui_3_16_0_1_1419393162819_39768" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_39769" dir="ltr">Anyway, the only viable choices I see so far are:</div><div id="yui_3_16_0_1_1419393162819_43263" dir="ltr">* Qt (through QGraphicsView or QML for tk canvas replacement)</div><div id="yui_3_16_0_1_1419393162819_43262" dir="ltr">* node-webkit</div><div id="yui_3_16_0_1_1419393162819_43259" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_43260" dir="ltr">Personally, I have very little interest in designing a new GUI <--> Pd communication mechanism, and even less interest in coding in c++.  So if left to my own devices, I'll probably just try opening an additional socket in Pd to connect to node-webkit and communicate with it similar to how tcl/tk does, using javascript instead of tcl commands.  I would start with with Pd -> node-webkit, then adding GUI event-handling later.  That way I can keep the tcl/tk GUI and node-webkit one side-by-side as I go.<br></div><div id="yui_3_16_0_1_1419393162819_39770" dir="ltr"><br></div><div id="yui_3_16_0_1_1419393162819_45128" dir="ltr">Of course if someone with the knowledge and energy to do this the "right way" has any suggestions, I'm all ears.  I have the inkling that if I could employ a full-time dev to do my bidding then Qt Quick would the "right way" to go-- it's in Debian, is cross-platform, well-documented, and it certainly has enough features for Pd's canvas editing.  But I don't know how to retrofit a c program like Pd with Qt, nor how to replace Pd's current string-based communication with whatever one is supposed to use to do that.<br></div><div id="yui_3_16_0_1_1419393162819_45130" dir="ltr"><br></div><div dir="ltr">-Jonathan<br></div></div></body></html>