Opened at 2021-03-25T16:23:07Z
Last modified at 2023-09-11T23:58:52Z
#1218 accepted todo
Prototype: dragging a clip
| Reported by: | Ichthyostega | Owned by: | Ichthyostega |
|---|---|---|---|
| Priority: | grave | Milestone: | 0integration |
| Component: | lumieraGui | Keywords: | gui architecture design |
| Sub Tickets: | Parent Tickets: | #978, #1013, #1070, #1110, #1217, #1267 |
Description (last modified by )
In 2017, I made an more or less failed attempt at building the foundation for this as a generic framework into the command handling. The stakes were too high and the context not clear enough at that time. So this shall now be the second attempt, and this time working bottom-up. The basic framework for Timeline Display and Layout Management is roughly in place by now, and so the goal is to enable dragging a clip for repositioning it within the timeline. However, this must not be implemented ad hoc within a "clip widget". Rather, we need a way of hooking up the clip into a more or less generic "drag gesture controller", with the prospect of enabling any comparable widget to be made draggable with minimum effort later on.
The understanding currently is that
- some widget gets hooked up into the trigger point
- when the triggering event happens, a gesture context is established, using centralised storage within the dragging gesture controller
- thus the gesture controller is responsible for observing and updating state while the gesture is underway
- and finally, the gesture is translated into a command sentence, involving a subject, a predication (the command) and parameters extracted from the gesture
Change history (7)
comment:1 by , at 2021-03-25T16:26:24Z
| blocking: | 1217, 1013, 1070, 978 → 978, 1013, 1070, 1217 |
|---|---|
| Description: | modified (diff) |
comment:2 by , at 2021-03-25T16:27:10Z
| Owner: | set to |
|---|---|
| Status: | new → accepted |
comment:4 by , at 2021-05-16T21:59:34Z
| Description: | modified (diff) |
|---|
Meanwhile I have that framework roughly in place.
A simple dummy clip can now be dragged within our timeline display.
In the context of gestures, I have defined an interface Subject -- to be implemented by the subject of that gesture, in our case the Clip. This interface allows to expose some widget for wiring event handlers, and it allows to build an one-time observer subclass, allocated into a buffer within the gesture controller. Which means, this is used just during the formation of one single gesture, and the allocation can be shared between all (possibly thousands) draggable entities within the timeline.
The state transition logic for detecting and activating the dragging gesture is hard-wired in this first draft. But obviously this should be some kind of finite-state-machine. So a future goal is to have a mixin / base class for gesture controllers, which offers the building blocks for such a state machine. Not sure yet, if I am willing to build such a thing right now, or if it is more prudent to wait for the next gestures to be implemented...
comment:5 by , at 2023-01-25T00:09:40Z
| blocking: | 978, 1013, 1070, 1217 → 978, 1013, 1070, 1217, 1267 |
|---|
comment:6 by , at 2023-09-11T23:58:52Z
| blocking: | 978, 1013, 1070, 1217, 1267 → 978, 1013, 1070, 1110, 1217, 1267 |
|---|
comment:7 by , at 2025-12-25T00:00:00Z
| blocking: | 978, 1013, 1070, 1110, 1217, 1267 |
|---|---|
| Parent Tickets: | → 978, 1013, 1070, 1110, 1217, 1267 |
Migration MasterTickets ⟼ Subtickets-plugin

In e2292e0/Lumiera: