DALi Version 1.0.26
[platform/core/uifw/dali-toolkit.git] / base / dali-toolkit / internal / controls / scrollable / scroll-view / scroll-view-impl.cpp
index 7522766..0d60503 100644 (file)
@@ -727,6 +727,84 @@ void ScrollView::ApplyEffect(Toolkit::ScrollViewEffect effect)
   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());