[dali_1.0.37] Merge branch 'tizen'
[platform/core/uifw/dali-demo.git] / examples / scroll-view / scroll-view-example.cpp
index fce13f8..6a083be 100644 (file)
@@ -19,7 +19,7 @@
 #include <sstream>
 
 // INTERNAL INCLUDES
-#include "../shared/view.h"
+#include "shared/view.h"
 #include <dali/dali.h>
 #include <dali-toolkit/dali-toolkit.h>
 
@@ -31,21 +31,18 @@ namespace
 const char * const BACKGROUND_IMAGE( DALI_IMAGE_DIR "background-default.png" );
 const char * const TOOLBAR_IMAGE( DALI_IMAGE_DIR "top-bar.png" );
 const char * const APPLICATION_TITLE( "ScrollView" );
-const char * const EFFECT_OUTER_CUBE_IMAGE( DALI_IMAGE_DIR "icon-scroll-view-outer-cube.png" );
 const char * const EFFECT_DEPTH_IMAGE( DALI_IMAGE_DIR "icon-scroll-view-depth.png" );
 const char * const EFFECT_INNER_CUBE_IMAGE( DALI_IMAGE_DIR "icon-scroll-view-inner-cube.png" );
 const char * const EFFECT_CAROUSEL_IMAGE( DALI_IMAGE_DIR "icon-scroll-view-carousel.png" );
-const char * const EFFECT_SPIRAL_IMAGE( DALI_IMAGE_DIR "icon-scroll-view-spiral.png" );
 
 const Vector3 ICON_SIZE(100.0f, 100.0f, 0.0f);
 
 const char* EFFECT_MODE_NAME[] = {
-    "OuterCube",
     "Depth",
     "Cube",
-    "InnerCube",
-    "Carousel",
-    "Spiral",
+    "PageCarousel",
+    "PageCube",
+    "PageSpiral"
 };
 
 const char * const IMAGE_PATHS[] = {
@@ -144,7 +141,7 @@ const Vector3 ANCHOR_3DEFFECT_STYLE1(65.0f, -70.0f, -300.0f); ///< Rotation Anch
 const unsigned int IMAGE_THUMBNAIL_WIDTH  = 256;                            ///< Width of Thumbnail Image in texels
 const unsigned int IMAGE_THUMBNAIL_HEIGHT = 256;                            ///< Height of Thumbnail Image in texels
 
-const float SPIN_DURATION = 5.0f;                                           ///< Times to spin an Image by upon touching, each spin taking a second.
+const float SPIN_DURATION = 1.0f;                                           ///< Times to spin an Image by upon touching, each spin taking a second.
 
 const float EFFECT_SNAP_DURATION(0.66f);                                    ///< Scroll Snap Duration for Effects
 const float EFFECT_FLICK_DURATION(0.5f);                                    ///< Scroll Flick Duration for Effects
@@ -182,6 +179,8 @@ public:
    */
   void OnInit(Application& app)
   {
+    DemoHelper::RequestThemeChange();
+
     Stage stage = Dali::Stage::GetCurrent();
     stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
 
@@ -197,12 +196,11 @@ public:
                                             TOOLBAR_IMAGE,
                                             "" );
 
-    mEffectIcon[ OuterCubeEffect ] = Image::New( EFFECT_OUTER_CUBE_IMAGE );
-    mEffectIcon[ DepthEffect ]     = Image::New( EFFECT_DEPTH_IMAGE );
-    mEffectIcon[ CubeEffect ]      = Image::New( EFFECT_INNER_CUBE_IMAGE );
-    mEffectIcon[ InnerCubeEffect ] = Image::New( EFFECT_INNER_CUBE_IMAGE );
-    mEffectIcon[ CarouselEffect ]  = Image::New( EFFECT_CAROUSEL_IMAGE );
-    mEffectIcon[ SpiralEffect ]    = Image::New( EFFECT_SPIRAL_IMAGE );
+    mEffectIcon[ DepthEffect ]     = ResourceImage::New( EFFECT_DEPTH_IMAGE );
+    mEffectIcon[ CubeEffect ]      = ResourceImage::New( EFFECT_INNER_CUBE_IMAGE );
+    mEffectIcon[ PageCarouselEffect ] = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
+    mEffectIcon[ PageCubeEffect ]     = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
+    mEffectIcon[ PageSpiralEffect ]   = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
 
     // Create a effect change button. (right of toolbar)
     mEffectChangeButton = Toolkit::PushButton::New();
@@ -214,7 +212,7 @@ public:
 
     // Hack to force screen refresh.
     Animation animation = Animation::New(1.0f);
-    animation.AnimateTo(Property(mContentLayer, Actor::POSITION), Vector3::ZERO );
+    animation.AnimateTo(Property(mContentLayer, Actor::Property::POSITION), Vector3::ZERO );
     animation.Play();
   }
 
@@ -230,6 +228,7 @@ private:
     Vector2 stageSize = stage.GetSize();
 
     mScrollView = ScrollView::New();
+    mScrollView.SetRelayoutEnabled( false );
     mScrollView.SetAnchorPoint(AnchorPoint::CENTER);
     mScrollView.SetParentOrigin(ParentOrigin::CENTER);
     mContentLayer.Add( mScrollView );
@@ -302,7 +301,8 @@ private:
   Actor CreatePage()
   {
     Actor page = Actor::New();
-    page.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
+    page.SetRelayoutEnabled( true );
+    page.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
     page.SetParentOrigin( ParentOrigin::CENTER );
     page.SetAnchorPoint( AnchorPoint::CENTER );
 
@@ -319,7 +319,7 @@ private:
     {
       for(int column = 0;column<imageColumns;column++)
       {
-        ImageActor image = CreateImage( GetNextImagePath() );
+        ImageActor image = CreateImage( GetNextImagePath(), imageSize.x, imageSize.y );
 
         image.SetParentOrigin( ParentOrigin::CENTER );
         image.SetAnchorPoint( AnchorPoint::CENTER );
@@ -348,14 +348,8 @@ private:
     Stage stage = Stage::GetCurrent();
     Vector2 stageSize = stage.GetSize();
 
-    switch(mEffectMode)
+    switch( mEffectMode )
     {
-      case OuterCubeEffect:
-      {
-        SetupOuterPageCubeEffect();
-        break;
-      }
-
       case DepthEffect:
       {
         mScrollViewEffect = ScrollViewDepthEffect::New();
@@ -366,6 +360,7 @@ private:
         mScrollView.RemoveConstraintsFromChildren();
         break;
       }
+
       case CubeEffect:
       {
         mScrollViewEffect = ScrollViewCubeEffect::New();
@@ -377,21 +372,36 @@ private:
         break;
       }
 
-      case InnerCubeEffect:
+      case PageCarouselEffect:
       {
-        SetupInnerPageCubeEffect();
+        mScrollViewEffect = ScrollViewPageCarouselEffect::New();
+        mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
+        mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
+        mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOut);
+        mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOut);
+        mScrollView.RemoveConstraintsFromChildren();
         break;
       }
 
-      case CarouselEffect:
+      case PageCubeEffect:
       {
-        SetupCarouselPageEffect();
+        mScrollViewEffect = ScrollViewPageCubeEffect::New();
+        mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
+        mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
+        mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOut);
+        mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOut);
+        mScrollView.RemoveConstraintsFromChildren();
         break;
       }
 
-      case SpiralEffect:
+      case PageSpiralEffect:
       {
-        SetupSpiralPageEffect();
+        mScrollViewEffect = ScrollViewPageSpiralEffect::New();
+        mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
+        mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
+        mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOut);
+        mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOut);
+        mScrollView.RemoveConstraintsFromChildren();
         break;
       }
 
@@ -399,9 +409,9 @@ private:
       {
         break;
       }
-    } // end switch
+    }
 
-    if(mScrollViewEffect)
+    if( mScrollViewEffect )
     {
       mScrollView.ApplyEffect(mScrollViewEffect);
     }
@@ -434,100 +444,48 @@ private:
     }
     return new FixedRuler(gridSize);
   }
-
-  void SetupInnerPageCubeEffect()
-  {
-    ScrollViewCustomEffect customEffect;
-    mScrollViewEffect = customEffect = ScrollViewCustomEffect::New();
-    mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
-    mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
-    mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOutBack);
-    mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOutBack);
-    mScrollView.RemoveConstraintsFromChildren();
-
-    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.7f);
-  }
-
-  void SetupOuterPageCubeEffect()
-  {
-    ScrollViewCustomEffect customEffect;
-    mScrollViewEffect = customEffect = ScrollViewCustomEffect::New();
-    mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
-    mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
-    mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOut);
-    mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOut);
-    mScrollView.RemoveConstraintsFromChildren();
-
-    Vector2 pageSize = Stage::GetCurrent().GetSize();
-    customEffect.SetPageTranslation(Vector3(pageSize.x, pageSize.y, 0));
-    customEffect.SetSwingAngleOut(ANGLE_CUSTOM_CUBE_SWING.x, Vector3(0.0f, -1.0f, 0.0f));
-    customEffect.SetSwingAnchor(AnchorPoint::CENTER, AnchorPoint::CENTER_LEFT);
-    customEffect.SetOpacityThreshold(0.5f);
-  }
-
-  void SetupCarouselPageEffect()
-  {
-    ScrollViewCustomEffect customEffect;
-    mScrollViewEffect = customEffect = ScrollViewCustomEffect::New();
-    mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
-    mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
-    mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOutBack);
-    mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOutBack);
-    mScrollView.RemoveConstraintsFromChildren();
-
-    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);
-  }
-
-  void SetupSpiralPageEffect()
-  {
-    ScrollViewCustomEffect customEffect;
-    mScrollViewEffect = customEffect = ScrollViewCustomEffect::New();
-    mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
-    mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
-    mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOutBack);
-    mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOutBack);
-    mScrollView.RemoveConstraintsFromChildren();
-
-    Vector2 pageSize = Stage::GetCurrent().GetSize();
-    customEffect.SetPageTranslation(Vector3(pageSize.x, pageSize.y, 0.0f));
-    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.SetSwingAnchor(AnchorPoint::CENTER_RIGHT);
-    customEffect.SetPageTranslation(Vector3(pageSize.x, pageSize.y, 0), Vector3(pageSize.x, pageSize.y, 0) * 0.5f);
-    customEffect.SetOpacityThreshold(0.66f);
-  }
-
+  // end switch
   /**
-   * [Page]
-   * Applies effect to the pages within scroll view.
-   *
-   * @param[in] page The page Actor to apply effect to.
-   */
-  void ApplyEffectToPage(Actor page)
-  {
-    page.RemoveConstraints();
-    page.ApplyConstraint( Constraint::New<Vector3>( Actor::SIZE, ParentSource( Actor::SIZE ), EqualToConstraint() ) );
-
-    if( ( mEffectMode == InnerCubeEffect ) ||
-        ( mEffectMode == OuterCubeEffect ) ||
-        ( mEffectMode == SpiralEffect )    ||
-        ( mEffectMode == CarouselEffect) )
-    {
-      ApplyCustomEffectToPage(page);
-    }
-  }
-
-  void ApplyCustomEffectToPage(Actor page)
-  {
-    ScrollViewCustomEffect customEffect = ScrollViewCustomEffect::DownCast(mScrollViewEffect);
-    Vector2 vStageSize(Stage::GetCurrent().GetSize());
-    customEffect.ApplyToPage(page, Vector3(vStageSize.x, vStageSize.y, 1.0f));
-  }
+    * [Page]
+    * Applies effect to the pages within scroll view.
+    *
+    * @param[in] page The page Actor to apply effect to.
+    */
+   void ApplyEffectToPage(Actor page)
+   {
+     page.RemoveConstraints();
+     page.SetRelayoutEnabled( true );
+     page.SetResizePolicy( FILL_TO_PARENT, ALL_DIMENSIONS );
+
+     switch( mEffectMode )
+     {
+       case PageCarouselEffect:
+       {
+         ScrollViewPageCarouselEffect effect = ScrollViewPageCarouselEffect::DownCast( mScrollViewEffect );
+         effect.ApplyToPage( page );
+         break;
+       }
+
+       case PageCubeEffect:
+       {
+         ScrollViewPageCubeEffect effect = ScrollViewPageCubeEffect::DownCast( mScrollViewEffect );
+         effect.ApplyToPage( page, ANGLE_SWING_3DEFFECT );
+         break;
+       }
+
+       case PageSpiralEffect:
+       {
+         ScrollViewPageSpiralEffect effect = ScrollViewPageSpiralEffect::DownCast( mScrollViewEffect );
+         effect.ApplyToPage( page, ANGLE_SWING_3DEFFECT );
+         break;
+       }
+
+       default:
+       {
+         break;
+       }
+     }
+   }
 
   /**
    * [Actor]
@@ -542,13 +500,24 @@ private:
    */
   void ApplyEffectToActor( Actor child, Actor page )
   {
-    if( mEffectMode == DepthEffect )
+    switch( mEffectMode )
     {
-      ApplyDepthEffectToActor( child );
-    }
-    else if(mEffectMode == CubeEffect )
-    {
-      ApplyCubeEffectToActor( child );
+      case DepthEffect:
+      {
+        ApplyDepthEffectToActor( child );
+        break;
+      }
+
+      case CubeEffect:
+      {
+        ApplyCubeEffectToActor( child );
+        break;
+      }
+
+      default:
+      {
+        break;
+      }
     }
   }
 
@@ -598,9 +567,11 @@ private:
     ImageAttributes attributes;
 
     attributes.SetSize(width, height);
-    attributes.SetScalingMode(ImageAttributes::ShrinkToFit);
-    Image img = Image::New(filename, attributes);
+    attributes.SetScalingMode(ImageAttributes::ScaleToFill);
+    attributes.SetFilterMode( ImageAttributes::BoxThenLinear );
+    Image img = ResourceImage::New(filename, attributes);
     ImageActor actor = ImageActor::New(img);
+    actor.SetRelayoutEnabled( false );
     actor.SetName( filename );
     actor.SetParentOrigin(ParentOrigin::CENTER);
     actor.SetAnchorPoint(AnchorPoint::CENTER);
@@ -644,7 +615,7 @@ private:
       {
         // Spin the Image a few times.
         Animation animation = Animation::New(SPIN_DURATION);
-        animation.RotateBy( actor, Degree(360.0f * SPIN_DURATION), Vector3::XAXIS, AlphaFunctions::EaseOut);
+        animation.AnimateBy( Property( actor, Actor::Property::ORIENTATION ), Quaternion( Radian( Degree(360.0f * SPIN_DURATION) ), Vector3::XAXIS ), AlphaFunctions::EaseOut );
         animation.Play();
       }
     }
@@ -671,15 +642,12 @@ private:
   {
     if(!mTitleActor)
     {
-      mTitleActor = TextView::New();
+      mTitleActor = DemoHelper::CreateToolBarLabel( "" );
       // Add title to the tool bar.
       mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Alignment::HorizontalCenter );
     }
 
-    Font font = Font::New();
-    mTitleActor.SetText( title );
-    mTitleActor.SetSize( font.MeasureText( title ) );
-    mTitleActor.SetStyleToCurrentText(DemoHelper::GetDefaultTextStyle());
+    mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, title );
   }
 
   /**
@@ -701,7 +669,7 @@ private:
   Application& mApplication;                            ///< Application instance
   Toolkit::View mView;                                  ///< The View instance.
   Toolkit::ToolBar mToolBar;                            ///< The View's Toolbar.
-  TextView mTitleActor;                                 ///< The Toolbar's Title.
+  TextLabel mTitleActor;                                ///< The Toolbar's Title.
   Layer mContentLayer;                                  ///< The content layer (contains game actors)
   ScrollView mScrollView;                               ///< ScrollView UI Component
   bool mScrolling;                                      ///< ScrollView scrolling state (true = scrolling, false = stationary)
@@ -713,14 +681,13 @@ private:
    */
   enum EffectMode
   {
-    OuterCubeEffect,                                    ///< Outer Cube Effect
     DepthEffect,                                        ///< Depth Effect
     CubeEffect,                                         ///< Cube effect
-    InnerCubeEffect,                                    ///< Page Cube Effect
-    CarouselEffect,                                     ///< Page Carousel Effect
-    SpiralEffect,                                       ///< Page Spiral Effect
+    PageCarouselEffect,                                 ///< Page carousel effect
+    PageCubeEffect,                                     ///< Page cube effect
+    PageSpiralEffect,                                   ///< Page spiral effect
 
-    Total,
+    Total
   };
 
   EffectMode mEffectMode;                               ///< Current Effect mode