const unsigned int MAXIMUM_NUMBER_OF_VALUES = 5; ///< Number of values to use for weighted pan calculation.
const Vector2 DEFAULT_MOUSE_WHEEL_SCROLL_DISTANCE_STEP_PROPORTION = Vector2(0.17f, 0.1f); ///< The step of horizontal scroll distance in the proportion of stage size for each mouse wheel event received.
const unsigned long MINIMUM_TIME_BETWEEN_DOWN_AND_UP_FOR_RESET( 150u );
-const float DEFAULT_OVERSHOOT_ANIMATION_DURATION = 0.35f; // time in seconds
-const Vector2 OVERSCROLL_CLAMP(1.0f, 1.0f); // maximum overscroll allowed in pixels when overshoot indicator is being used
const float TOUCH_DOWN_TIMER_INTERVAL = 100.0f;
const float DEFAULT_SCROLL_UPDATE_DISTANCE( 30.0f ); ///< Default distance to travel in pixels for scroll update signal
GetImpl(effect).Attach(self);
}
+Toolkit::ScrollViewEffect ScrollView::ApplyEffect(Toolkit::ScrollView::PageEffect effect)
+{
+ Toolkit::ScrollViewEffect scrollEffect;
+ switch(effect)
+ {
+ case Toolkit::ScrollView::PageEffectNone:
+ {
+ break;
+ }
+ case Toolkit::ScrollView::PageEffectOuterCube:
+ {
+ Toolkit::ScrollViewCustomEffect customEffect;
+ scrollEffect = customEffect = Toolkit::ScrollViewCustomEffect::New();
+ Vector2 pageSize = Stage::GetCurrent().GetSize();
+ // set the page translation to the slide off distance, also add an extra value to space the pages, having a smaller spacing on translationOut will allow the spacing to reduce over time
+ // the page moving onto screen will start 50.0f further out (1.0f * 50.0f) and the spacing will reduce as its position reaches the centre (0.0f * 50.0f)
+ // the page moving off screen will slowly build a spacing from 0.0f to 20.0f
+ // the spacing from each page is added together for the final spacing between the two pages.
+ customEffect.SetPageTranslation(Vector3(pageSize.x, pageSize.y, 0) + Vector3(50.0f, 50.0f, 0.0f), Vector3(pageSize.x, pageSize.y, 0) + Vector3(20.0f, 20.0f, 0.0f));
+ customEffect.SetSwingAngleOut(ANGLE_CUSTOM_CUBE_SWING.x, Vector3(0.0f, -1.0f, 0.0f));
+ customEffect.SetSwingAnchor(AnchorPoint::CENTER, AnchorPoint::CENTER_LEFT);
+ customEffect.SetOpacityThreshold(0.7f);
+ break;
+ }
+ case Toolkit::ScrollView::PageEffectDepth:
+ {
+ Toolkit::ScrollViewCustomEffect customEffect;
+ scrollEffect = customEffect = Toolkit::ScrollViewCustomEffect::New();
+ break;
+ }
+ case Toolkit::ScrollView::PageEffectInnerCube:
+ {
+ Toolkit::ScrollViewCustomEffect customEffect;
+ scrollEffect = customEffect = Toolkit::ScrollViewCustomEffect::New();
+ customEffect.SetPageSpacing(Vector2(30.0f, 30.0f));
+ customEffect.SetAngledOriginPageRotation(ANGLE_CUBE_PAGE_ROTATE);
+ customEffect.SetSwingAngle(ANGLE_CUBE_PAGE_ROTATE.x, Vector3(0,-1,0));
+ customEffect.SetOpacityThreshold(0.5f);
+ break;
+ }
+ case Toolkit::ScrollView::PageEffectCarousel:
+ {
+ Toolkit::ScrollViewCustomEffect customEffect;
+ scrollEffect = customEffect = Toolkit::ScrollViewCustomEffect::New();
+ customEffect.SetPageTranslation(Vector3(0,0,0), Vector3(-30, 0, 0));
+ customEffect.SetPageSpacing(Vector2(60.0f, 60.0f));
+ customEffect.SetAngledOriginPageRotation(-ANGLE_CUBE_PAGE_ROTATE);
+ customEffect.SetOpacityThreshold(0.2f, 0.6f);
+ break;
+ }
+ case Toolkit::ScrollView::PageEffectSpiral:
+ {
+ Toolkit::ScrollViewCustomEffect customEffect;
+ scrollEffect = customEffect = Toolkit::ScrollViewCustomEffect::New();
+
+ Vector2 pageSize = Stage::GetCurrent().GetSize();
+ customEffect.SetSwingAngle(-ANGLE_SPIRAL_SWING_IN.x, Vector3(0.0f, -1.0f, 0.0f), ANGLE_SPIRAL_SWING_OUT.x, Vector3(0.0f, -1.0f, 0.0f));
+ //customEffect.SetSwingAngleAlphaFunctionOut(AlphaFunctions::EaseOut);
+ customEffect.SetSwingAnchor(AnchorPoint::CENTER_RIGHT);
+ customEffect.SetPageTranslation(Vector3(pageSize.x, pageSize.y, 0) + Vector3(100.0f, 100.0f, 0.0f), Vector3(pageSize.x, pageSize.y, -pageSize.y * 2.0f) * 0.33f);
+ //customEffect.SetPageTranslateAlphaFunctionOut(AlphaFunctions::EaseOut);
+ customEffect.SetOpacityThreshold(0.75f, 0.6f);
+ customEffect.SetOpacityAlphaFunctionIn(AlphaFunctions::EaseInOut);
+ break;
+ }
+ default:
+ {
+ DALI_ASSERT_DEBUG(0 && "unknown scroll view effect");
+ }
+ }
+ RemoveConstraintsFromChildren();
+ if(scrollEffect)
+ {
+ ApplyEffect(scrollEffect);
+ }
+ return scrollEffect;
+}
+
void ScrollView::RemoveEffect(Toolkit::ScrollViewEffect effect)
{
Dali::Toolkit::ScrollView self = Dali::Toolkit::ScrollView::DownCast(Self());
void ScrollView::ScrollTo(const Vector3& position, float duration, AlphaFunction alpha,
DirectionBias horizontalBias, DirectionBias verticalBias)
{
- DALI_LOG_SCROLL_STATE("[0x%X] position[%.2f, %.2f] duration[%.2f]", this, position.x, position.y, duration, int(horizontalBias), int(verticalBias));
+ DALI_LOG_SCROLL_STATE("[0x%X] position[%.2f, %.2f] duration[%.2f], bias[%d, %d]", this, position.x, position.y, duration, int(horizontalBias), int(verticalBias));
TransformTo(position, duration, alpha, horizontalBias, verticalBias);
}
}
}
}
- positionSnap += clampDelta;
+
+ if(IsScrollComponentEnabled(Toolkit::Scrollable::OvershootIndicator))
+ {
+ // Scroll to the end of the overshoot only when overshoot is enabled.
+ positionSnap += clampDelta;
+ }
bool animating = AnimateTo(positionSnap, positionDuration,
alphaFunction, false,
}
if( enabled )
{
- mMaxOvershoot = OVERSCROLL_CLAMP;
mOvershootIndicator->AttachToScrollable(*this);
}
else