X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=examples%2Fscroll-view%2Fscroll-view-example.cpp;h=c1374b1d9d196a33c33b6f498751b3cb7e1c8c08;hb=HEAD;hp=30d0a9070a75643c24ddfbc454348994d2ecb29a;hpb=74177c1264be054639ac4bcd2a462e97129be516;p=platform%2Fcore%2Fuifw%2Fdali-demo.git diff --git a/examples/scroll-view/scroll-view-example.cpp b/examples/scroll-view/scroll-view-example.cpp index 30d0a90..c1374b1 100644 --- a/examples/scroll-view/scroll-view-example.cpp +++ b/examples/scroll-view/scroll-view-example.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,95 +19,97 @@ #include // INTERNAL INCLUDES -#include "shared/view.h" -#include #include +#include +#include "shared/view.h" using namespace Dali; using namespace Dali::Toolkit; 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_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 BACKGROUND_IMAGE(DEMO_IMAGE_DIR "background-default.png"); +const char* const TOOLBAR_IMAGE(DEMO_IMAGE_DIR "top-bar.png"); +const char* const APPLICATION_TITLE("ScrollView"); +const char* const EFFECT_CAROUSEL_IMAGE(DEMO_IMAGE_DIR "icon-scroll-view-carousel.png"); +const char* const EFFECT_CAROUSEL_IMAGE_SELECTED(DEMO_IMAGE_DIR "icon-scroll-view-carousel-selected.png"); +const char* const EFFECT_CUBE_IMAGE(DEMO_IMAGE_DIR "icon-scroll-view-inner-cube.png"); +const char* const EFFECT_CUBE_IMAGE_SELECTED(DEMO_IMAGE_DIR "icon-scroll-view-inner-cube-selected.png"); +const char* const EFFECT_SPIRAL_IMAGE(DEMO_IMAGE_DIR "icon-scroll-view-spiral.png"); +const char* const EFFECT_SPIRAL_IMAGE_SELECTED(DEMO_IMAGE_DIR "icon-scroll-view-spiral-selected.png"); +const char* const EFFECT_WAVE_IMAGE(DEMO_IMAGE_DIR "icon-effect-wave.png"); +const char* const EFFECT_WAVE_IMAGE_SELECTED(DEMO_IMAGE_DIR "icon-effect-wave-selected.png"); const Vector3 ICON_SIZE(100.0f, 100.0f, 0.0f); const char* EFFECT_MODE_NAME[] = { - "Depth", - "Cube", - "PageCarousel", - "PageCube", - "PageSpiral" -}; - -const char * const IMAGE_PATHS[] = { - DALI_IMAGE_DIR "gallery-medium-1.jpg", - DALI_IMAGE_DIR "gallery-medium-2.jpg", - DALI_IMAGE_DIR "gallery-medium-3.jpg", - DALI_IMAGE_DIR "gallery-medium-4.jpg", - DALI_IMAGE_DIR "gallery-medium-5.jpg", - DALI_IMAGE_DIR "gallery-medium-6.jpg", - DALI_IMAGE_DIR "gallery-medium-7.jpg", - DALI_IMAGE_DIR "gallery-medium-8.jpg", - DALI_IMAGE_DIR "gallery-medium-9.jpg", - DALI_IMAGE_DIR "gallery-medium-10.jpg", - DALI_IMAGE_DIR "gallery-medium-11.jpg", - DALI_IMAGE_DIR "gallery-medium-12.jpg", - DALI_IMAGE_DIR "gallery-medium-13.jpg", - DALI_IMAGE_DIR "gallery-medium-14.jpg", - DALI_IMAGE_DIR "gallery-medium-15.jpg", - DALI_IMAGE_DIR "gallery-medium-16.jpg", - DALI_IMAGE_DIR "gallery-medium-17.jpg", - DALI_IMAGE_DIR "gallery-medium-18.jpg", - DALI_IMAGE_DIR "gallery-medium-19.jpg", - DALI_IMAGE_DIR "gallery-medium-20.jpg", - DALI_IMAGE_DIR "gallery-medium-21.jpg", - DALI_IMAGE_DIR "gallery-medium-22.jpg", - DALI_IMAGE_DIR "gallery-medium-23.jpg", - DALI_IMAGE_DIR "gallery-medium-24.jpg", - DALI_IMAGE_DIR "gallery-medium-25.jpg", - DALI_IMAGE_DIR "gallery-medium-26.jpg", - DALI_IMAGE_DIR "gallery-medium-27.jpg", - DALI_IMAGE_DIR "gallery-medium-28.jpg", - DALI_IMAGE_DIR "gallery-medium-29.jpg", - DALI_IMAGE_DIR "gallery-medium-30.jpg", - DALI_IMAGE_DIR "gallery-medium-31.jpg", - DALI_IMAGE_DIR "gallery-medium-32.jpg", - DALI_IMAGE_DIR "gallery-medium-33.jpg", - DALI_IMAGE_DIR "gallery-medium-34.jpg", - DALI_IMAGE_DIR "gallery-medium-35.jpg", - DALI_IMAGE_DIR "gallery-medium-36.jpg", - DALI_IMAGE_DIR "gallery-medium-37.jpg", - DALI_IMAGE_DIR "gallery-medium-38.jpg", - DALI_IMAGE_DIR "gallery-medium-39.jpg", - DALI_IMAGE_DIR "gallery-medium-40.jpg", - DALI_IMAGE_DIR "gallery-medium-41.jpg", - DALI_IMAGE_DIR "gallery-medium-42.jpg", - DALI_IMAGE_DIR "gallery-medium-43.jpg", - DALI_IMAGE_DIR "gallery-medium-44.jpg", - DALI_IMAGE_DIR "gallery-medium-45.jpg", - DALI_IMAGE_DIR "gallery-medium-46.jpg", - DALI_IMAGE_DIR "gallery-medium-47.jpg", - DALI_IMAGE_DIR "gallery-medium-48.jpg", - DALI_IMAGE_DIR "gallery-medium-49.jpg", - DALI_IMAGE_DIR "gallery-medium-50.jpg", - DALI_IMAGE_DIR "gallery-medium-51.jpg", - DALI_IMAGE_DIR "gallery-medium-52.jpg", - DALI_IMAGE_DIR "gallery-medium-53.jpg", - - NULL -}; - -const char * const GetNextImagePath() + "PageCarousel", + "PageCube", + "PageSpiral", + "PageWave"}; + +const char* const IMAGE_PATHS[] = { + DEMO_IMAGE_DIR "gallery-medium-1.jpg", + DEMO_IMAGE_DIR "gallery-medium-2.jpg", + DEMO_IMAGE_DIR "gallery-medium-3.jpg", + DEMO_IMAGE_DIR "gallery-medium-4.jpg", + DEMO_IMAGE_DIR "gallery-medium-5.jpg", + DEMO_IMAGE_DIR "gallery-medium-6.jpg", + DEMO_IMAGE_DIR "gallery-medium-7.jpg", + DEMO_IMAGE_DIR "gallery-medium-8.jpg", + DEMO_IMAGE_DIR "gallery-medium-9.jpg", + DEMO_IMAGE_DIR "gallery-medium-10.jpg", + DEMO_IMAGE_DIR "gallery-medium-11.jpg", + DEMO_IMAGE_DIR "gallery-medium-12.jpg", + DEMO_IMAGE_DIR "gallery-medium-13.jpg", + DEMO_IMAGE_DIR "gallery-medium-14.jpg", + DEMO_IMAGE_DIR "gallery-medium-15.jpg", + DEMO_IMAGE_DIR "gallery-medium-16.jpg", + DEMO_IMAGE_DIR "gallery-medium-17.jpg", + DEMO_IMAGE_DIR "gallery-medium-18.jpg", + DEMO_IMAGE_DIR "gallery-medium-19.jpg", + DEMO_IMAGE_DIR "gallery-medium-20.jpg", + DEMO_IMAGE_DIR "gallery-medium-21.jpg", + DEMO_IMAGE_DIR "gallery-medium-22.jpg", + DEMO_IMAGE_DIR "gallery-medium-23.jpg", + DEMO_IMAGE_DIR "gallery-medium-24.jpg", + DEMO_IMAGE_DIR "gallery-medium-25.jpg", + DEMO_IMAGE_DIR "gallery-medium-26.jpg", + DEMO_IMAGE_DIR "gallery-medium-27.jpg", + DEMO_IMAGE_DIR "gallery-medium-28.jpg", + DEMO_IMAGE_DIR "gallery-medium-29.jpg", + DEMO_IMAGE_DIR "gallery-medium-30.jpg", + DEMO_IMAGE_DIR "gallery-medium-31.jpg", + DEMO_IMAGE_DIR "gallery-medium-32.jpg", + DEMO_IMAGE_DIR "gallery-medium-33.jpg", + DEMO_IMAGE_DIR "gallery-medium-34.jpg", + DEMO_IMAGE_DIR "gallery-medium-35.jpg", + DEMO_IMAGE_DIR "gallery-medium-36.jpg", + DEMO_IMAGE_DIR "gallery-medium-37.jpg", + DEMO_IMAGE_DIR "gallery-medium-38.jpg", + DEMO_IMAGE_DIR "gallery-medium-39.jpg", + DEMO_IMAGE_DIR "gallery-medium-40.jpg", + DEMO_IMAGE_DIR "gallery-medium-41.jpg", + DEMO_IMAGE_DIR "gallery-medium-42.jpg", + DEMO_IMAGE_DIR "gallery-medium-43.jpg", + DEMO_IMAGE_DIR "gallery-medium-44.jpg", + DEMO_IMAGE_DIR "gallery-medium-45.jpg", + DEMO_IMAGE_DIR "gallery-medium-46.jpg", + DEMO_IMAGE_DIR "gallery-medium-47.jpg", + DEMO_IMAGE_DIR "gallery-medium-48.jpg", + DEMO_IMAGE_DIR "gallery-medium-49.jpg", + DEMO_IMAGE_DIR "gallery-medium-50.jpg", + DEMO_IMAGE_DIR "gallery-medium-51.jpg", + DEMO_IMAGE_DIR "gallery-medium-52.jpg", + DEMO_IMAGE_DIR "gallery-medium-53.jpg", + + NULL}; + +const char* GetNextImagePath() { - static const char * const * imagePtr = &IMAGE_PATHS[0]; + static const char* const* imagePtr = &IMAGE_PATHS[0]; - if ( *(++imagePtr) == NULL ) + if(*(++imagePtr) == NULL) { imagePtr = &IMAGE_PATHS[0]; } @@ -115,36 +117,17 @@ const char * const GetNextImagePath() return *imagePtr; } -const int PAGE_COLUMNS = 10; ///< Number of Pages going across (columns) -const int PAGE_ROWS = 1; ///< Number of Pages going down (rows) -const int IMAGE_ROWS = 5; ///< Number of Images going down (rows) with a Page - -// 3D Effect constants -const Vector3 ANGLE_CUBE_PAGE_ROTATE(Math::PI * 0.2f, Math::PI * 0.2f, 0.0f); ///< Cube page rotates as if it has ten sides with the camera positioned inside -const Vector2 ANGLE_CUSTOM_CUBE_SWING(-Math::PI * 0.45f, -Math::PI * 0.45f); ///< outer cube pages swing 90 degrees as they pan offscreen -const Vector2 ANGLE_SPIRAL_SWING_IN(Math::PI * 0.45f, Math::PI * 0.45f); -const Vector2 ANGLE_SPIRAL_SWING_OUT(Math::PI * 0.3f, Math::PI * 0.3f); - -// Depth Effect constants -const Vector2 POSITION_EXTENT_DEPTH_EFFECT(0.5f, 2.5f); ///< Extent of X & Y position to alter function exponent. -const Vector2 OFFSET_EXTENT_DEPTH_EFFECT(1.0f, 1.0f); ///< Function exponent offset constant. -const float POSITION_SCALE_DEPTH_EFFECT(1.5f); ///< Position scaling. -const float SCALE_EXTENT_DEPTH_EFFECT(0.5f); ///< Maximum scale factor when Actors scrolled one page away (50% size) - -// 3D Effect constants -const Vector2 ANGLE_SWING_3DEFFECT(Math::PI_2 * 0.75, Math::PI_2 * 0.75f); ///< Angle Swing in radians -const Vector2 POSITION_SWING_3DEFFECT(0.25f, 0.25f); ///< Position Swing relative to stage size. -const Vector3 ANCHOR_3DEFFECT_STYLE0(-105.0f, 30.0f, -240.0f); ///< Rotation Anchor position for 3D Effect (Style 0) -const Vector3 ANCHOR_3DEFFECT_STYLE1(65.0f, -70.0f, -300.0f); ///< Rotation Anchor position for 3D Effect (Style 1) +const int PAGE_COLUMNS = 10; ///< Number of Pages going across (columns) +const int PAGE_ROWS = 1; ///< Number of Pages going down (rows) +const int IMAGE_ROWS = 5; ///< Number of Images going down (rows) with a Page +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 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 = 1.0f; ///< Times to spin an Image by upon touching, each spin taking a second. -const float SPIN_DURATION = 5.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 +const float EFFECT_SNAP_DURATION(0.66f); ///< Scroll Snap Duration for Effects +const float EFFECT_FLICK_DURATION(0.5f); ///< Scroll Flick Duration for Effects } // unnamed namespace @@ -154,16 +137,15 @@ const float EFFECT_FLICK_DURATION(0.5f); ///< class ExampleController : public ConnectionTracker { public: - /** * Constructor * @param application class, stored as reference */ - ExampleController( Application& application ) - : mApplication( application ), + ExampleController(Application& application) + : mApplication(application), mView(), mScrolling(false), - mEffectMode(CubeEffect) + mEffectMode(PageCarouselEffect) { // Connect to the Application's Init and orientation changed signal mApplication.InitSignal().Connect(this, &ExampleController::OnInit); @@ -179,74 +161,70 @@ public: */ void OnInit(Application& app) { - DemoHelper::RequestThemeChange(); - - Stage stage = Dali::Stage::GetCurrent(); - stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); - - // Hide the indicator bar - mApplication.GetWindow().ShowIndicator(Dali::Window::INVISIBLE); + Window window = app.GetWindow(); + window.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent); // Creates a default view with a default tool bar. - // The view is added to the stage. - mContentLayer = DemoHelper::CreateView( app, - mView, - mToolBar, - BACKGROUND_IMAGE, - TOOLBAR_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 ); + // The view is added to the window. + mContentLayer = DemoHelper::CreateView(app, + mView, + mToolBar, + BACKGROUND_IMAGE, + TOOLBAR_IMAGE, + ""); + + mEffectIcon[PageCarouselEffect] = EFFECT_CAROUSEL_IMAGE; + mEffectIconSelected[PageCarouselEffect] = EFFECT_CAROUSEL_IMAGE_SELECTED; + mEffectIcon[PageCubeEffect] = EFFECT_CUBE_IMAGE; + mEffectIconSelected[PageCubeEffect] = EFFECT_CUBE_IMAGE_SELECTED; + mEffectIcon[PageSpiralEffect] = EFFECT_SPIRAL_IMAGE; + mEffectIconSelected[PageSpiralEffect] = EFFECT_SPIRAL_IMAGE_SELECTED; + mEffectIcon[PageWaveEffect] = EFFECT_WAVE_IMAGE; + mEffectIconSelected[PageWaveEffect] = EFFECT_WAVE_IMAGE_SELECTED; // Create a effect change button. (right of toolbar) mEffectChangeButton = Toolkit::PushButton::New(); - mEffectChangeButton.ClickedSignal().Connect( this, &ExampleController::OnEffectTouched ); - mToolBar.AddControl( mEffectChangeButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HorizontalRight, DemoHelper::DEFAULT_MODE_SWITCH_PADDING ); + mEffectChangeButton.ClickedSignal().Connect(this, &ExampleController::OnEffectTouched); + mToolBar.AddControl(mEffectChangeButton, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarButtonPercentage, Toolkit::Alignment::HORIZONTAL_RIGHT, DemoHelper::DEFAULT_MODE_SWITCH_PADDING); // Create the content layer. AddContentLayer(); // Hack to force screen refresh. Animation animation = Animation::New(1.0f); - animation.AnimateTo(Property(mContentLayer, Actor::Property::POSITION), Vector3::ZERO ); + animation.AnimateTo(Property(mContentLayer, Actor::Property::POSITION), Vector3::ZERO); animation.Play(); } private: - /** * Adds content to the ContentLayer. This is everything we see * excluding the toolbar at the top. */ void AddContentLayer() { - Stage stage = Stage::GetCurrent(); - Vector2 stageSize = stage.GetSize(); + Window window = mApplication.GetWindow(); + Vector2 windowSize = window.GetSize(); mScrollView = ScrollView::New(); - mScrollView.SetRelayoutEnabled( false ); - mScrollView.SetAnchorPoint(AnchorPoint::CENTER); - mScrollView.SetParentOrigin(ParentOrigin::CENTER); - mContentLayer.Add( mScrollView ); - mScrollView.SetSize( stageSize ); - mScrollView.SetAxisAutoLock( true ); - mScrollView.SetAxisAutoLockGradient( 1.0f ); - - mScrollView.ScrollStartedSignal().Connect( this, &ExampleController::OnScrollStarted ); - mScrollView.ScrollCompletedSignal().Connect( this, &ExampleController::OnScrollCompleted ); - - for(int row = 0;row::iterator pageIter = mPages.begin(); pageIter != mPages.end(); ++pageIter) { Actor page = *pageIter; - ApplyEffectToPage( page ); - - unsigned int numChildren = (*pageIter).GetChildCount(); - for(unsigned int i=0; iSetDomain(RulerDomain(0.0f, windowSize.x * PAGE_COLUMNS, false)); + rulerY->Disable(); - case PageCubeEffect: - { - mScrollViewEffect = ScrollViewPageCubeEffect::New(); - mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION); - mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION); - mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOut); - mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOut); - mScrollView.RemoveConstraintsFromChildren(); - break; - } + Dali::Path path = Dali::Path::New(); + Dali::Property::Array points; + points.Resize(3); + Dali::Property::Array controlPoints; + controlPoints.Resize(4); + Vector3 forward; + if(mEffectMode == PageCarouselEffect) + { + points[0] = Vector3(windowSize.x * 0.75, 0.0f, -windowSize.x * 0.75f); + points[1] = Vector3(0.0f, 0.0f, 0.0f); + points[2] = Vector3(-windowSize.x * 0.75f, 0.0f, -windowSize.x * 0.75f); + path.SetProperty(Path::Property::POINTS, points); + + controlPoints[0] = Vector3(windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[1] = Vector3(windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[2] = Vector3(-windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[3] = Vector3(-windowSize.x * 0.5f, 0.0f, 0.0f); + path.SetProperty(Path::Property::CONTROL_POINTS, controlPoints); + + forward = Vector3::ZERO; + } + else if(mEffectMode == PageCubeEffect) + { + points[0] = Vector3(windowSize.x * 0.5, 0.0f, windowSize.x * 0.5f); + points[1] = Vector3(0.0f, 0.0f, 0.0f); + points[2] = Vector3(-windowSize.x * 0.5f, 0.0f, windowSize.x * 0.5f); + path.SetProperty(Path::Property::POINTS, points); + + controlPoints[0] = Vector3(windowSize.x * 0.5f, 0.0f, windowSize.x * 0.3f); + controlPoints[1] = Vector3(windowSize.x * 0.3f, 0.0f, 0.0f); + controlPoints[2] = Vector3(-windowSize.x * 0.3f, 0.0f, 0.0f); + controlPoints[3] = Vector3(-windowSize.x * 0.5f, 0.0f, windowSize.x * 0.3f); + path.SetProperty(Path::Property::CONTROL_POINTS, controlPoints); + + forward = Vector3(-1.0f, 0.0f, 0.0f); + } + else if(mEffectMode == PageSpiralEffect) + { + points[0] = Vector3(windowSize.x * 0.5, 0.0f, -windowSize.x * 0.5f); + points[1] = Vector3(0.0f, 0.0f, 0.0f); + points[2] = Vector3(-windowSize.x * 0.5f, 0.0f, -windowSize.x * 0.5f); + path.SetProperty(Path::Property::POINTS, points); + + controlPoints[0] = Vector3(windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[1] = Vector3(windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[2] = Vector3(-windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[3] = Vector3(-windowSize.x * 0.5f, 0.0f, 0.0f); + path.SetProperty(Path::Property::CONTROL_POINTS, controlPoints); + + forward = Vector3(-1.0f, 0.0f, 0.0f); + } + else if(mEffectMode == PageWaveEffect) + { + points[0] = Vector3(windowSize.x, 0.0f, -windowSize.x); + points[1] = Vector3(0.0f, 0.0f, 0.0f); + points[2] = Vector3(-windowSize.x, 0.0f, -windowSize.x); + path.SetProperty(Path::Property::POINTS, points); + + controlPoints[0] = Vector3(0.0f, 0.0f, -windowSize.x); + controlPoints[1] = Vector3(windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[2] = Vector3(-windowSize.x * 0.5f, 0.0f, 0.0f); + controlPoints[3] = Vector3(0.0f, 0.0f, -windowSize.x); + path.SetProperty(Path::Property::CONTROL_POINTS, controlPoints); + + forward = Vector3(-1.0f, 0.0f, 0.0f); + } - case PageSpiralEffect: - { - mScrollViewEffect = ScrollViewPageSpiralEffect::New(); - mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION); - mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION); - mScrollView.SetScrollSnapAlphaFunction(AlphaFunctions::EaseOut); - mScrollView.SetScrollFlickAlphaFunction(AlphaFunctions::EaseOut); - mScrollView.RemoveConstraintsFromChildren(); - break; - } + mScrollViewEffect = ScrollViewPagePathEffect::New(path, forward, Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(windowSize.x, windowSize.y, 0.0f), PAGE_COLUMNS); + mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION); + mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION); + mScrollView.SetScrollSnapAlphaFunction(AlphaFunction::EASE_OUT); + mScrollView.SetScrollFlickAlphaFunction(AlphaFunction::EASE_OUT); + mScrollView.RemoveConstraintsFromChildren(); - default: - { - break; - } - } + rulerX = CreateRuler(snap ? windowSize.width * 0.5f : 0.0f); + rulerX->SetDomain(RulerDomain(0.0f, windowSize.x * 0.5f * PAGE_COLUMNS, false)); - if( mScrollViewEffect ) + unsigned int currentPage = mScrollView.GetCurrentPage(); + if(mScrollViewEffect) { mScrollView.ApplyEffect(mScrollViewEffect); } - mScrollView.SetWrapMode(wrap); + mScrollView.SetWrapMode(true); + mScrollView.SetRulerX(rulerX); + mScrollView.SetRulerY(rulerY); - RulerPtr rulerX = CreateRuler(snap ? stageSize.width : 0.0f); - RulerPtr rulerY = new DefaultRuler; - rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * PAGE_COLUMNS, !wrap)); - rulerY->Disable(); - - mScrollView.SetRulerX( rulerX ); - mScrollView.SetRulerY( rulerY ); + mScrollView.ScrollTo(currentPage, 0.0f); } /** @@ -440,7 +421,7 @@ private: { if(gridSize <= Math::MACHINE_EPSILON_0) { - return new DefaultRuler(); + return new DefaultRuler(); } return new FixedRuler(gridSize); } @@ -451,108 +432,13 @@ private: * * @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] - * Applies effect to child which resides in page (which in turn resides in scrollview) - * - * @note Page is typically the Parent of child, although in - * some scenarios Page is simply a container which has a child as - * a descendent. - * - * @param[in] child The child actor to apply effect to - * @param[in] page The page which this child is inside - */ - void ApplyEffectToActor( Actor child, Actor page ) + void ApplyEffectToPage(Actor page, unsigned int pageOrder) { - switch( mEffectMode ) - { - case DepthEffect: - { - ApplyDepthEffectToActor( child ); - break; - } + page.RemoveConstraints(); + page.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS); - case CubeEffect: - { - ApplyCubeEffectToActor( child ); - break; - } - - default: - { - break; - } - } - } - - /** - * Applies depth effect to the child which resides in page (which in turn resides in scrollview) - * - * @param[in] child The child actor to apply depth effect to - */ - void ApplyDepthEffectToActor( Actor child ) - { - ScrollViewDepthEffect depthEffect = ScrollViewDepthEffect::DownCast(mScrollViewEffect); - depthEffect.ApplyToActor( child, - POSITION_EXTENT_DEPTH_EFFECT, - OFFSET_EXTENT_DEPTH_EFFECT, - POSITION_SCALE_DEPTH_EFFECT, - SCALE_EXTENT_DEPTH_EFFECT ); - } - - void ApplyCubeEffectToActor( Actor child ) - { - Vector3 anchor; - if(rand()&1) - { - anchor = ANCHOR_3DEFFECT_STYLE0; - } - else - { - anchor = ANCHOR_3DEFFECT_STYLE1; - } - - ScrollViewCubeEffect cubeEffect = ScrollViewCubeEffect::DownCast(mScrollViewEffect); - cubeEffect.ApplyToActor( child, - anchor, - ANGLE_SWING_3DEFFECT, - POSITION_SWING_3DEFFECT * Vector2(Stage::GetCurrent().GetSize())); + ScrollViewPagePathEffect effect = ScrollViewPagePathEffect::DownCast(mScrollViewEffect); + effect.ApplyToPage(page, pageOrder); } /** @@ -562,21 +448,23 @@ private: * @param[in] width the width of the image in texels * @param[in] height the height of the image in texels. */ - ImageActor CreateImage( const std::string& filename, unsigned int width = IMAGE_THUMBNAIL_WIDTH, unsigned int height = IMAGE_THUMBNAIL_HEIGHT ) + ImageView CreateImage(const std::string& filename, int width = IMAGE_THUMBNAIL_WIDTH, int height = IMAGE_THUMBNAIL_HEIGHT) { - ImageAttributes attributes; - - attributes.SetSize(width, height); - 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); - - actor.TouchedSignal().Connect( this, &ExampleController::OnTouchImage ); + ImageView actor = ImageView::New(); + Property::Map map; + map[Visual::Property::TYPE] = Visual::IMAGE; + map[ImageVisual::Property::URL] = filename; + map[ImageVisual::Property::DESIRED_WIDTH] = width; + map[ImageVisual::Property::DESIRED_HEIGHT] = height; + map[ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL; + map[ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR; + actor.SetProperty(ImageView::Property::IMAGE, map); + + actor.SetProperty(Dali::Actor::Property::NAME, filename); + actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER); + actor.SetProperty(Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER); + + actor.TouchedSignal().Connect(this, &ExampleController::OnTouchImage); return actor; } @@ -585,7 +473,7 @@ private: * note this state (mScrolling = true) * @param[in] position Current Scroll Position */ - void OnScrollStarted( const Vector3& position ) + void OnScrollStarted(const Vector2& position) { mScrolling = true; } @@ -595,7 +483,7 @@ private: * note this state (mScrolling = false) * @param[in] position Current Scroll Position */ - void OnScrollCompleted( const Vector3& position ) + void OnScrollCompleted(const Vector2& position) { mScrolling = false; } @@ -604,18 +492,17 @@ private: * Upon Touching an image (Release), make it spin * (provided we're not scrolling). * @param[in] actor The actor touched - * @param[in] event The TouchEvent. + * @param[in] event The touch information. */ - bool OnTouchImage( Actor actor, const TouchEvent& event ) + bool OnTouchImage(Actor actor, const TouchEvent& event) { - if( (event.points.size() > 0) && (!mScrolling) ) + if((event.GetPointCount() > 0) && (!mScrolling)) { - TouchPoint point = event.points[0]; - if(point.state == TouchPoint::Up) + if(event.GetState(0) == PointState::UP) { // 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), AlphaFunction::EASE_OUT); animation.Play(); } } @@ -642,12 +529,12 @@ private: { if(!mTitleActor) { - mTitleActor = DemoHelper::CreateToolBarLabel( "" ); + mTitleActor = DemoHelper::CreateToolBarLabel(""); // Add title to the tool bar. - mToolBar.AddControl( mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Alignment::HorizontalCenter ); + mToolBar.AddControl(mTitleActor, DemoHelper::DEFAULT_VIEW_STYLE.mToolBarTitlePercentage, Alignment::HORIZONTAL_CENTER); } - mTitleActor.SetProperty( Toolkit::TextLabel::Property::TEXT, title ); + mTitleActor.SetProperty(Toolkit::TextLabel::Property::TEXT, title); } /** @@ -655,9 +542,9 @@ private: */ void OnKeyEvent(const KeyEvent& event) { - if(event.state == KeyEvent::Down) + if(event.GetState() == KeyEvent::DOWN) { - if( IsKey( event, Dali::DALI_KEY_ESCAPE) || IsKey( event, Dali::DALI_KEY_BACK) ) + if(IsKey(event, Dali::DALI_KEY_ESCAPE) || IsKey(event, Dali::DALI_KEY_BACK)) { mApplication.Quit(); } @@ -665,40 +552,39 @@ private: } private: - - Application& mApplication; ///< Application instance - Toolkit::View mView; ///< The View instance. - Toolkit::ToolBar mToolBar; ///< The View's Toolbar. - 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) - ScrollViewEffect mScrollViewEffect; ///< ScrollView Effect instance. - ActorContainer mPages; ///< Keeps track of all the pages for applying effects. + Application& mApplication; ///< Application instance + Toolkit::Control mView; ///< The View instance. + Toolkit::ToolBar mToolBar; ///< The View's Toolbar. + 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) + ScrollViewEffect mScrollViewEffect; ///< ScrollView Effect instance. + std::vector mPages; ///< Keeps track of all the pages for applying effects. /** * Enumeration of different effects this scrollview can operate under. */ enum EffectMode { - DepthEffect, ///< Depth Effect - CubeEffect, ///< Cube effect - PageCarouselEffect, ///< Page carousel effect - PageCubeEffect, ///< Page cube effect - PageSpiralEffect, ///< Page spiral effect + PageCarouselEffect, ///< Page carousel effect + PageCubeEffect, ///< Page cube effect + PageSpiralEffect, ///< Page spiral effect + PageWaveEffect, ///< Page wave effect Total }; - EffectMode mEffectMode; ///< Current Effect mode + EffectMode mEffectMode; ///< Current Effect mode - Image mEffectIcon[Total]; ///< Icons for the effect button - Toolkit::PushButton mEffectChangeButton; ///< Effect Change Button + std::string mEffectIcon[Total]; ///< Icons for the effect button + std::string mEffectIconSelected[Total]; ///< Icons for the effect button when its selected + Toolkit::PushButton mEffectChangeButton; ///< Effect Change Button }; -int main(int argc, char **argv) +int DALI_EXPORT_API main(int argc, char** argv) { - Application app = Application::New(&argc, &argv); + Application app = Application::New(&argc, &argv, DEMO_THEME_PATH); ExampleController test(app); app.MainLoop(); return 0;