Multi-touch GUI support in modern Cinder

Hey 'embers,

I develop a multi-touch supported application and thought I’d poke the brain trust re. a question I’ve yet to definitively answer, as well as share my own knowledge on the matter.

My question is, what’s the best C++ based GUI library that supports multi-touch to use with libCinder?

Disclaimer upfront - a lot of this knowledge dump has years of moss on it, so take it with a grain of salt.

Initially, my application used the TUIO protocol only to find that seemingly no longer working / being supported in more modern Windows (8 or 10 I believe) making me switch to just plugging in my multi-touch device directly via USB and using HID. On top of that, I’ve built my own gesture recognition and GUI rendering, but supporting it is becoming tedious and I would much rather switch to a battle-hardened alternative.

Over the past weekend I upgraded to vs2022 and Cinder 0.9.3dev which adds Dear IMGUI. My excitement was lessened a bit when some googling revealed that dear Imgui does not officially support multi-touch.

Further googling led to this list of useful guis: C++ UI Libraries • memdump

So far, the only GUI’s I’ve confirmed to integrate multi-touch support are as follows:

  • Qt - My experience with this library is while super battle-hardened and supporting multi-touch, I worry about latency. My application ideally needs as low latency GUI behavior as possible. Also, Qt is basically a full application framework - I’ve no experience in only using its gui functionality and as to how easily that’d fit into Cinder.

  • NoesisGUI - Looks promising until you notice that until your application is ‘ready to ship’ you are only granted on-going trial licenses. I’m tempted to look closer though, without any promising alternatives.

And that’s it - so far. 2 C++ libraries. Very keen to hear if anyone knows of more that natively support multi-touch. Another fallback solution I’ve considered is perhaps building some in-between layer, between cinder and dear imgui to detect pinch/zoom/other gestures. But this would be hacky, and some multi-touch functionality would probably remain permanently out of reach, like interacting with two widgets simultaneously.

Eager for any and all thoughts. Thanks in advance,

Gazoo

1 Like

Hey,

I developed a few multitouch applications over the years using Cinder.
Most of them where done using GitHub - Potion/Cinder-poScene: Potion's SceneGraph CinderBlock.
Compared to QT & Noesis it’s probably very light in features but on the upside it’s really easy to understand and is build specifically for cinder. Doesn’t seem to be very active in development but that’s not a big issue because most features are in there and the codebase is not so big so you could easily fix stuff.

Greets.
Kris

ps: what does embers mean?

Hey lab101,

Appreciate the suggestion. My existing GUI is built on top of some wonderful work by @paul.houx. Looking at the block you mention it looks pretty close to what I have currently and I’ve found that for the type of application I’m keen to offload more things, such as:

  • Widgets
  • Gui tools / designer
  • Optimized rendering

For other readers, if your GUI needs are simple, I’d strongly consider @lab101 's suggestion. I’ve learned so much building my own GUI on top of a scene-graph, but just the thought of now wanting the rendering to occur in a more optimized fashion (as opposed to immediate mode) along with a stylized look for all my widgets and better icon support etc. it’s no small amount of work.

Again - much appreciate the suggestion!

Gazoo

p.s. ‘embers’ is silly word-play for ‘members’, because it’s the Cinder forum. :stuck_out_tongue:

1 Like