RollerWidget/Implementation

From Apertis
Jump to: navigation, search

Contents

Introduction

1. Scrolling

A subclass of MxKineticScrollView will be delivered. It will contain new API for enabling the optional features and for tuning thresholds. For the global scrollbar, will be probably delivered in a separate class because the generic scroll view shouldn't be interacting outside its bounds.

1.1. Basic kinetic scrolling

Should be already implemented in Mx, need to verify.

1.2. Overshoot effect

Should be already implemented in Mx, need to verify.

1.3. Global scrollbar

Just make the scrollbar listen for adjustment changes. It can be displayed when adjustments change, and hidden once the adjustments have remained unchanged for X seconds.

1.4. Blur effect

Apply a vertical blur shader to the whole roller. The implementation of the shader could be based on http://www.gamerendering.com/2008/10/11/gaussian-blur-filter-shader/

1.5. Stopping and reaccelerating

Mx already has a configurable threshold for drags: "drag-threshold" in MxSettings. Need to implement tap and hold as a way to stop the animation, currently any press will stop the scrolling. Need to implement reacceleration by ways of a flick gesture, see AcceleratingFlickMaximumTime and AcceleratingFlickSpeedupFactor in http://doc.troll.no/master-snapshot/qscrollerproperties.html

1.6. Forwarding of horizontal slides

MxKineticScrollView will be extended to have a "scrolling-policy" property that if set to vertical only (which is the case for this roller widget) will let the events composing an horizontal slide to pass through to its child.

2. Roller container

We'll deliver MmdRoller, a ClutterContainer implementation with some added API for setting a background actor, enabling optional features, placing an actor in the footer and changing the width with an animation.

About 2.4, actors are responsible for their own rendering, so we'll deliver an example actor with the features specified: MmdSampleGlowActor.

2.1. Fixed-height list layout

Implement ClutterActor::get_preferred_width, ClutterActor::get_preferred_height, ClutterActor::allocate, ClutterActor::paint and all the virtual functions in ClutterContainer. We'll attain high scalability by not needing to iterate over all the elements in order to position and paint them.

2.2. Roll over

  • Set adjustment to MAX_INT.
  • In ClutterActor::allocate, place the last element before the first one.
  • Also in ClutterActor::allocate, rebase the adjustments when they get out from the real bounding area.

2.3. Focus management

  • Implement MxFocusable
  • Use CLUTTER_EASE_OUT_ELASTIC for the lock-in animation
  • Implement focus-on-click by implementing ClutterActor::button_release_event
  • Contained actors should also implement MxFocusable

2.4. Focus rendering

  • Glowing will be implemented with a modified blurring shader
  • Dimming of the unfocusing actors will be implemented by applying a semi-transparent grey mask on top of the items

2.5. Resize transition

  • Just use the animation API to progressively change the width property

2.6. Footer

  • Reserve part of the allocation box for a footer, its height set by a property (for animating)
  • Just take this into account in ClutterActor::allocate

2.7. ClutterModel support

  • Create actors as needed via a MxItemFactory and set the model columns as properties of those actors
  • Actors with widgets that can change values in the model will need a reference to the it
  • Actors need to be created on an idle callback because reparenting them would cause an allocation

2.8. Background elements

  • Allow setting an actor that will be placed below the items

2.9. Modification of item height

  • Store in the roller which items are allocated the base height, and which are expanded

2.10. Coupling support

  • add a signal for others to notice when the roller has finished the lock-in animation
  • add a method for moving the focus to a specific element
  • add a method for retrieving an element based on its adjustment position

2.11. Flow layout

  • this will be added to the Clutter::allocate implementation

2.12. Variable-height layout

  • each item needs to be queried for their dimensions in order to perform the allocation

3. Model

We'll deliver a ClutterModel subclass (MmdModel) that also provides:

  • a property "waiting-for-data" which can be monitored by the view by listening for "notify::waiting-for-data". This will be used to display an idle animation

4. Thumbnail view

4.1. Height distortion

  • we'll have a vertex shader that will project each vertex onto a roller-like surface
  • we'll need an additional pixel shader that will project the surface according to that same function
  • we'll have to make sure to use pickling for finding which actor is to be focused

5. Transitions

5.1. Cover roll to/from detailed view

5.2. Detailed view to/from fullscreen view

5.3. Thumb list to/from detailed view

5.4. List to/from detailed view

5.5. Flip transition

5.6. Sort entries in the list view

6. Idle animation

7. Album roller in detailed view of media player

8. Expander widget

Personal tools
Namespaces

Variants
Actions
Navigation
Tools