From 9796a8ebd019c5db48010146c500128185194c7c Mon Sep 17 00:00:00 2001 From: Ichthyostega Date: Thu, 15 Apr 2021 18:46:49 +0200 Subject: [PATCH] Clip-Drag: requirements analysis in wider scope ...because this is a prototype, but should fit in with a future frameworks to handle complex interactions and gestures. And no, we can not afford to rely on a UI toolkit for such a core concern It is impossible that a framework like e.g. GTK will allow us to support a custom made hardware controller and integrate it seamlessly into getsture handling, thereby following a design philosophy that is in accordance with our fundamental decisions. --- src/stage/interact/interaction-state.hpp | 7 + wiki/thinkPad.ichthyo.mm | 335 ++++++++++++++++++++++- 2 files changed, 328 insertions(+), 14 deletions(-) diff --git a/src/stage/interact/interaction-state.hpp b/src/stage/interact/interaction-state.hpp index 4b7cccd21..299db28a9 100644 --- a/src/stage/interact/interaction-state.hpp +++ b/src/stage/interact/interaction-state.hpp @@ -30,6 +30,13 @@ ** @todo as of 11/2015 this is complete WIP-WIP-WIP ** @todo and as of 3/2021 this is at least just WIP-WIP ** + ** @todo *Future Plan*: in the general case, detecting and handling of complex + ** UI interactions and gestures translates itself into a state machine, + ** maybe even a hierarchical compound of state machines, where the + ** subordinate state machines will detect and handle elementary gestures. + ** The role of InteractionState will then be to provide the building blocks + ** and interfaces for assembling such complex state tracking engines. + ** ** @see ////TODO_test usage example ** */ diff --git a/wiki/thinkPad.ichthyo.mm b/wiki/thinkPad.ichthyo.mm index cbc12cc74..7feec1de1 100644 --- a/wiki/thinkPad.ichthyo.mm +++ b/wiki/thinkPad.ichthyo.mm @@ -6,7 +6,20 @@ - + + + + + + + + + + + + + + @@ -32665,6 +32678,19 @@ + + + + + + +

+ Hierarchische Gesten-Controller +

+ +
+ +
@@ -32737,8 +32763,7 @@  * can also cause #GdkEventGrabBroken events.

- - +
@@ -32760,6 +32785,19 @@ + + + + + + +

+ es ist total an das Framework gebunden +

+ +
+ +
@@ -32770,6 +32808,43 @@ + + + + + + + + + + +
+
+ + + + + + + + + + + + + + + + + + +

+ ...anstatt bloß die Ausführung entsprechender Commands zurückzuweisen +

+ +
+ +
@@ -35959,7 +36034,7 @@

- +
@@ -36179,9 +36254,13 @@ - - + + + + + + @@ -36190,6 +36269,198 @@ + + + + + + +

+ Stand 2021: +

+

+ läuft ehr auf ein Framework hinaus,
denn auf eine zentrale Einrichtung +

+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + +
    +
  • + weil es einer generischen Lösung im Weg steht +
  • +
  • + weil die partikuläre Ebene tief in das UI-Toolkit verwoben ist +
  • +
+ +
+ +
+ + + +
+
+ + + + + + + + + + +

+ Spaltung in Pragmatismus und Vision +

+ +
+
+
+ + + + + + + + + + + + + + + + + +

+ Auf theoretischer Ebene handel es sich um eine (nicht notwendigerweise deterministische) State-Machine. Allerdings ist diese sehr breit, und daher nicht sinnvoll direkt zu konstruieren. Wohingegen eine Tabellen-Implementierung aus Regeln dynamisch populiert werden kann +

+ +
+
+ + + +
+ + + + + + + + +

+ GTK macht das auch in der Tat genau so +

+ +
+
+ + + + + + + + + + +

+ Also eine generische Implementierung einer Gesten-Erkennung (z.B. dragging), welche dann durch Parametrisierung eingebunden wird +

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
  • + also entweder auf den top-Level +
  • +
  • + oder auf die Blätter hinunter
    +
  • +
  • + oder in Hilfskomponenten +
  • +
+ +
+
+ + + + + + + + + @@ -37562,7 +37833,7 @@
- + @@ -37586,6 +37857,10 @@ + + + +
@@ -37697,6 +37972,10 @@ + + + +
@@ -39317,9 +39596,32 @@ - + + + + + + + + + +

+ ...wir versuchen gar nicht erst, »etwas Bestehendes zu nutzen« ― sondern wir machen unser eigenes Ding. +

+ +
+ + + + + + + + + + @@ -55146,14 +55448,14 @@ jedoch indirekt dann auch für darauf aufbauende Events, z.B. GTK-Events, weil eben nur noch das zum grabbed window gehörige Widgets diese Events überhaupt sieht

- - +
+ @@ -55165,6 +55467,13 @@ + + + + + + + @@ -56173,8 +56482,7 @@ Coroutinen sind nicht per se asynchron

- - +
@@ -56190,8 +56498,7 @@ welche dann jedoch stets aus einer Coroutine heraus per co_await aktiviert werden. Beispiel: ein lock-free mutex

- - +