Finally I have some time to answer your questions.
Sorry it took so long.
What kind of applications did you guys create?
The first thing we created was an application that was part of a media space. It let people in different locations share documents through drag-and-drop. Then followed two implementations of pong-alike games, the second of which is now part of a study for my bachelor thesis. Furthermore there exist a number of simple test applications for mouse emulation (only single-touch though), primitive painting, and weird midi sound making. :D
What did you use to create your application interfaces? JOGL or something similar?
The media space application and the tests are using AWT/Swing, the games are made using the wonderful Slick (which uses LWJGL - and thus JOGL, I think).
Do you guys have predefined gestures to do things like single and double clicks? What other kinds of gestures does your software recognize?
The gesture recognition built into the framework is rather the basic infrastructure than a set of predefined gestures. You can define the gesture set at runtime, so it is possible to change the kinds of gestures without the need to restart the programme.
Gestures are defined by a decision tree. Each single-touch event (i.e., blob/path) is going through the tree from the top. The leaves of the tree are the output nodes, that is, the nodes that create multi-touch events.
“Multi-touch event” and “gesture” are somehow synonyms here; you could say that the outcome of a gesture is a multi-touch event that is of the type of the recognised gesture. These events are then sent to the application which performs the according actions. Multi-touch events are not necessarily generated for each frame, but it depends on the gesture. For example, one could implement a group select gesture which lets the user draw a circle around some objects to select them. The according event would only be fired after the user has completed the circle, but not in between.
We have an example implementation of the basic gestures (press, release, move/scale/rotate), however it depends an the application whether/to what extend they can be used. Also, they need quite some rework. :D
Concerning double click gestures, I think it would be possible to implement that relatively easily - the details might get nasty though. But that’s true for the whole gesture recognition thing… at first it seems quite straightforward, but one gets confronted with the fiddly details pretty soon. Some of these details are: What happens when the object under a blob changes between two frames? How do you prevent gestures from being incompatible with one another (or rather, too compatible/very similar)? What do you do when a gesture is performed, but another blob enters the scenery that alters the context?
My basic approach for parts of these problems is that blobs on the same object belong to one multi-touch event, and any changes in the number of blobs on an object require a full re-evaluation from the beginning.
Well, I think I’m getting lost in the details now, while at the same time I’m not sure which information is relevant and which isn’t.
So, maybe it’s better for you to just keep asking instead of me talking weird.