#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 Ichthyostega)

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 Ichthyostega, at 2021-03-25T16:26:24Z

blocking: 1217, 1013, 1070, 978978, 1013, 1070, 1217
Description: modified (diff)

comment:2 by Ichthyostega, at 2021-03-25T16:27:10Z

Owner: set to Ichthyostega
Status: newaccepted

comment:3 by Ichthyostega <prg@…>, at 2021-03-26T00:22:13Z

In e2292e0/Lumiera:

Clip-Drag: start prototypical implementation of a gesture controller (see #1218)

My planning thus far seems solid enough to start fleshing out one concrete gesture handling,
which can serve as a blueprint for a generic scheme to be worked out later.
Moreover, the implementation is limited to mouse interaction for the time being,
while the goal remains to treat "gestures" in a way to span several
Interaction-Schemes eventually (mouse, key sequence, pen...).

comment:4 by Ichthyostega, 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 Ichthyostega, at 2023-01-25T00:09:40Z

blocking: 978, 1013, 1070, 1217978, 1013, 1070, 1217, 1267

comment:6 by Ichthyostega, at 2023-09-11T23:58:52Z

blocking: 978, 1013, 1070, 1217, 1267978, 1013, 1070, 1110, 1217, 1267

comment:7 by Undercover Agent, 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

Note: See TracTickets for help on using tickets.