Design Docs Simple Timeline Slider

From PiTiViWiKi

Image:Source navigation widget.png

Contents

The Issue

Currently we are using HScale widgets for seeking sources. There are some usability issues with this that need to be addressed.

  • No provision for controlling the granularity of adjustment
  • width of cursor is dependent on current theme, and in most cases is too fat for accurate sighting
  • no way to display editing points within the widget itself, thus requiring external trimming

In short, we need a custom widget oriented towards source navigation.

Proposed Features

  1. Zooming scale
    • several levels of zoom, down to one frame or up to the entire clip
  2. Automatic scrolling
    • user can override by holding down hotkey (cursor changes to hand, to indicate that dragging will scroll)
    • When slider moves out of region, region scrolls to keep up)
    • When user drags slider past edge of scale, the slider keeps eeking, and the scale scrolls to catch up
  3. Directly Show Edit Ponts
    • the scale itself should show the start/stop edit points of the clip in an obvious manner
  4. Jog/Shuttle Seeking
    • some provision for doing this with mouse and keyboard (specialized widget, modifier keys, toggle buttons, mouse scroll wheel)
    • users with USB input devices (Jog/Shuttle wheels, joysticks, etc) should be able to use those with PiTiVi as well
  5. Your suggestion here

Use Cases

Simple Seek

User simply wants see what the clip looks like at some arbitrary point in the timeline

  • User clicks on timeline
  • Cursor moves, and pipeline seeks to cursor location

Changing Zoom Level

The user has opened a new clip and wants to find an arbitrary point within the clip. At this point, the scale is completely zoomed out.

  • User drags the slider until they find the approximate editing point.
  • User zooms in by clicking the zoom button a few times, until the scale increments are appropriate
  • After the first zoom, the scale centers on the slider. The scale remains centered on the slider until the user drags it off center.
  • User drags the slider back and forth a few times until they locate the desired point in the clip.
  • User makes some editing decision
  • User zooms out again, to locate another portion of the clip
  • After the first zoom out, the scale re-centers on the slider.

Frame-Accurate Seek

User wants to find a specific frame (say the exact moment when a clapstick closes, or the exact frame at which a two objects collide).

  • User moves to lower zoom level to find approximate editing point
  • User increases zoom to frame level
  • While zooming, the editing region stays centered around cursor
  • User drags slider back and forth until they locate the desired frame
  • While dragging, the cursor snaps to the frame boundaries of the clip.

Jog/Shuttle Seek

User wants to move from one scene to an arbitrary place in another scene. This could happen when the user is editing a long clip, or when navigating through the timeline itself.

  • user engages Jog/Shuttle mode by clicking outer ring of slider
  • a popup gtk.HScale() widget appears, like for a volume control. this scale tracks mouse movement, the user doesn't need to hold the button down.
  • user moves the mouse right, and playback begins at a slow pace
  • user continues to move the mouse to the right, playback speed increases
  • seek speed reaches turbo mode
  • playback position approaches the desired frame
  • user exits jog mode by clicking mouse button
  • playback stops

Manual Seek

User is at an arbitrary position in a large clip and wants to find a specific frame that occurs at a considerable distance away in the same clip. Because accuracy is desired, the user would like to avoid having to change the zoom level.

  • user locates approximate editing position either with Jog/Shuttle mode or by clicking and dragging
  • after exiting Jog/Shuttle mode, user enters manual mode by clicking inner wheel of jog/shuttle widget
  • mouse cursor disappears, to indicate that the user's actions will not be constrained by the screen boundaries
  • indeterminate progress bar pops up, to indicate that user has entered manual mode
  • user moves mouse until desired frame is reached
  • while seeking, timeline slider snaps to frame boundaries, and popup scroll indicator moves
  • if slider moves beyond visible region of scale, the scale is scrolled to keep the slider in view
  • user exits manual mode by clicking mouse button
  • if start or end of clip is reached, slider should not move despite continuing user input.

Jog/Shuttle seek with hotkeys

  • User should be able to configure keys to act as shortcuts for entering jog/shuttle mode.
  • User should be able to exit these modes by hitting another hot key. User should be able to switch directly between Jog/Shuttle and manual mode.

Jog/Shuttle seek with external input device

  • User should be able to configure joysticks and specialized jog/shuttle wheels to work with PiTiVi
  • When the user moves one these controls, the UI takes the appropriate action, but does not enter special input modes

Design Considerations

  • Maybe there should be discrete zoom levels chosen from a menu, rather than simplistic increase/decrease controls
  • Other applications might benefit from a source navigation widget, perhaps it could be added to an external library
  • Perhaps the Jog/Shuttle ring is too literal, and too archaic. Maybe a simple set of jog/shuttle mode toggles, or hot keys would be better
  • maybe there's an even better way to do this that i haven't thought of yet
  • how will jog/shuttle work in gstreamer? Can we control playback speed easily? Or will we need to implement this as a series of discrete seek events?