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 EFFECT_CAROUSEL_IMAGE_SELECTED( DALI_IMAGE_DIR "icon-scroll-view-carousel-selected.png" );
const Vector3 ICON_SIZE(100.0f, 100.0f, 0.0f);
const char* EFFECT_MODE_NAME[] = {
- "Depth",
- "Cube",
"PageCarousel",
"PageCube",
"PageSpiral",
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 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
: 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);
*/
void OnInit(Application& app)
{
- DemoHelper::RequestThemeChange();
-
Stage stage = Dali::Stage::GetCurrent();
stage.KeyEventSignal().Connect(this, &ExampleController::OnKeyEvent);
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 );
- mEffectIcon[ PageWaveEffect ] = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
+ mEffectIcon[ PageCarouselEffect ] = EFFECT_CAROUSEL_IMAGE;
+ mEffectIconSelected[ PageCarouselEffect ] = EFFECT_CAROUSEL_IMAGE_SELECTED;
+ mEffectIcon[ PageCubeEffect ] = EFFECT_CAROUSEL_IMAGE;
+ mEffectIconSelected[ PageCubeEffect ] = EFFECT_CAROUSEL_IMAGE_SELECTED;
+ mEffectIcon[ PageSpiralEffect ] = EFFECT_CAROUSEL_IMAGE;
+ mEffectIconSelected[ PageSpiralEffect ] = EFFECT_CAROUSEL_IMAGE_SELECTED;
+ mEffectIcon[ PageWaveEffect ] = EFFECT_CAROUSEL_IMAGE;
+ mEffectIconSelected[ PageWaveEffect ] = EFFECT_CAROUSEL_IMAGE_SELECTED;
// Create a effect change button. (right of toolbar)
mEffectChangeButton = Toolkit::PushButton::New();
ss << APPLICATION_TITLE << ": " << EFFECT_MODE_NAME[mEffectMode];
SetTitle(ss.str());
- mEffectChangeButton.SetBackgroundImage( mEffectIcon[ mEffectMode ] );
+ mEffectChangeButton.SetUnselectedImage( mEffectIcon[ mEffectMode ] );
+ mEffectChangeButton.SetSelectedImage( mEffectIconSelected[ mEffectMode ] );
// remove old Effect if exists.
if(mScrollViewEffect)
{
Actor page = *pageIter;
ApplyEffectToPage( page, pageCount++ );
-
- unsigned int numChildren = (*pageIter).GetChildCount();
- for(unsigned int i=0; i<numChildren; ++i)
- {
- Actor image = (*pageIter).GetChildAt(i);
-
- // Remove old effect's manual constraints.
- image.RemoveConstraints();
-
- // Apply new effect's manual constraints.
- ApplyEffectToActor( image, page );
- }
}
}
{
for(int column = 0;column<imageColumns;column++)
{
- ImageActor image = CreateImage( GetNextImagePath(), imageSize.x, imageSize.y );
+ ImageView image = CreateImage( GetNextImagePath(), imageSize.x, imageSize.y );
image.SetParentOrigin( ParentOrigin::CENTER );
image.SetAnchorPoint( AnchorPoint::CENTER );
*/
void ApplyEffectToScrollView()
{
- bool wrap(true);
bool snap(true);
Stage stage = Stage::GetCurrent();
RulerPtr rulerX = CreateRuler(snap ? stageSize.width : 0.0f);
RulerPtr rulerY = new DefaultRuler;
- rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * PAGE_COLUMNS, !wrap));
+ rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * PAGE_COLUMNS, false));
rulerY->Disable();
- switch( mEffectMode )
+ 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)
{
- case DepthEffect:
- {
- mScrollViewEffect = ScrollViewDepthEffect::New();
- mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
- mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
- mScrollView.SetScrollSnapAlphaFunction(AlphaFunction::EASE_OUT);
- mScrollView.SetScrollFlickAlphaFunction(AlphaFunction::EASE_OUT);
- mScrollView.RemoveConstraintsFromChildren();
- break;
- }
- case CubeEffect:
- {
- mScrollViewEffect = ScrollViewCubeEffect::New();
- mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
- mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
- mScrollView.SetScrollSnapAlphaFunction(AlphaFunction::EASE_OUT_BACK);
- mScrollView.SetScrollFlickAlphaFunction(AlphaFunction::EASE_OUT_BACK);
- mScrollView.RemoveConstraintsFromChildren();
- break;
- }
+ points[0] = Vector3( stageSize.x*0.75, 0.0f, -stageSize.x*0.75f);
+ points[1] = Vector3( 0.0f, 0.0f, 0.0f );
+ points[2] = Vector3( -stageSize.x*0.75f, 0.0f, -stageSize.x*0.75f);
+ path.SetProperty( Path::Property::POINTS, points );
- case PageCarouselEffect:
- case PageCubeEffect:
- case PageSpiralEffect:
- case PageWaveEffect:
- {
- 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( stageSize.x*0.75, 0.0f, -stageSize.x*0.75f);
- points[1] = Vector3( 0.0f, 0.0f, 0.0f );
- points[2] = Vector3( -stageSize.x*0.75f, 0.0f, -stageSize.x*0.75f);
- path.SetProperty( Path::Property::POINTS, points );
-
- controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[2] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
- path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
-
- forward = Vector3::ZERO;
- }
- else if( mEffectMode == PageCubeEffect)
- {
- points[0] = Vector3( stageSize.x*0.5, 0.0f, stageSize.x*0.5f);
- points[1] = Vector3( 0.0f, 0.0f, 0.0f );
- points[2] = Vector3( -stageSize.x*0.5f, 0.0f, stageSize.x*0.5f);
- path.SetProperty( Path::Property::POINTS, points );
-
- controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, stageSize.x*0.3f );
- controlPoints[1] = Vector3( stageSize.x*0.3f, 0.0f, 0.0f );
- controlPoints[2] = Vector3(-stageSize.x*0.3f, 0.0f, 0.0f );
- controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, stageSize.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( stageSize.x*0.5, 0.0f, -stageSize.x*0.5f);
- points[1] = Vector3( 0.0f, 0.0f, 0.0f );
- points[2] = Vector3( -stageSize.x*0.5f, 0.0f, -stageSize.x*0.5f);
- path.SetProperty( Path::Property::POINTS, points );
-
- controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[2] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[3] = Vector3(-stageSize.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( stageSize.x, 0.0f, -stageSize.x);
- points[1] = Vector3( 0.0f, 0.0f, 0.0f );
- points[2] = Vector3( -stageSize.x, 0.0f, -stageSize.x);
- path.SetProperty( Path::Property::POINTS, points );
-
- controlPoints[0] = Vector3( 0.0f, 0.0f, -stageSize.x );
- controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
- controlPoints[2] = Vector3( -stageSize.x*0.5f, 0.0f, 0.0f);
- controlPoints[3] = Vector3(0.0f, 0.0f,-stageSize.x );
- path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
-
- forward = Vector3(-1.0f,0.0f,0.0f);
- }
-
- mScrollViewEffect = ScrollViewPagePathEffect::New(path, forward,Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(stageSize.x,stageSize.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();
-
- rulerX = CreateRuler(snap ? stageSize.width * 0.5f : 0.0f);
- if( wrap )
- {
- rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * 0.5f * PAGE_COLUMNS, !wrap));
- }
- else
- {
- rulerX->SetDomain(RulerDomain(0.0f, stageSize.x*0.5f* (PAGE_COLUMNS+1), !wrap));
- }
-
- break;
- }
+ controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[2] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
+ path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
- default:
- {
- break;
- }
+ forward = Vector3::ZERO;
+ }
+ else if( mEffectMode == PageCubeEffect)
+ {
+ points[0] = Vector3( stageSize.x*0.5, 0.0f, stageSize.x*0.5f);
+ points[1] = Vector3( 0.0f, 0.0f, 0.0f );
+ points[2] = Vector3( -stageSize.x*0.5f, 0.0f, stageSize.x*0.5f);
+ path.SetProperty( Path::Property::POINTS, points );
+
+ controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, stageSize.x*0.3f );
+ controlPoints[1] = Vector3( stageSize.x*0.3f, 0.0f, 0.0f );
+ controlPoints[2] = Vector3(-stageSize.x*0.3f, 0.0f, 0.0f );
+ controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, stageSize.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( stageSize.x*0.5, 0.0f, -stageSize.x*0.5f);
+ points[1] = Vector3( 0.0f, 0.0f, 0.0f );
+ points[2] = Vector3( -stageSize.x*0.5f, 0.0f, -stageSize.x*0.5f);
+ path.SetProperty( Path::Property::POINTS, points );
+
+ controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[2] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[3] = Vector3(-stageSize.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( stageSize.x, 0.0f, -stageSize.x);
+ points[1] = Vector3( 0.0f, 0.0f, 0.0f );
+ points[2] = Vector3( -stageSize.x, 0.0f, -stageSize.x);
+ path.SetProperty( Path::Property::POINTS, points );
+
+ controlPoints[0] = Vector3( 0.0f, 0.0f, -stageSize.x );
+ controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
+ controlPoints[2] = Vector3( -stageSize.x*0.5f, 0.0f, 0.0f);
+ controlPoints[3] = Vector3(0.0f, 0.0f,-stageSize.x );
+ path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
+
+ forward = Vector3(-1.0f,0.0f,0.0f);
+ }
+
+ mScrollViewEffect = ScrollViewPagePathEffect::New(path, forward,Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(stageSize.x,stageSize.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();
+
+ rulerX = CreateRuler(snap ? stageSize.width * 0.5f : 0.0f);
+ rulerX->SetDomain( RulerDomain( 0.0f, stageSize.x * 0.5f * PAGE_COLUMNS, false ) );
unsigned int currentPage = mScrollView.GetCurrentPage();
if( mScrollViewEffect )
mScrollView.ApplyEffect(mScrollViewEffect);
}
- mScrollView.SetWrapMode(wrap);
+ mScrollView.SetWrapMode( true );
mScrollView.SetRulerX( rulerX );
mScrollView.SetRulerY( rulerY );
page.RemoveConstraints();
page.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
- switch( mEffectMode )
- {
- case PageCarouselEffect:
- case PageCubeEffect:
- case PageSpiralEffect:
- case PageWaveEffect:
- {
- ScrollViewPagePathEffect effect = ScrollViewPagePathEffect::DownCast( mScrollViewEffect );
- effect.ApplyToPage( page, pageOrder );
- break;
- }
-
- default:
- {
- break;
- }
- }
+ ScrollViewPagePathEffect effect = ScrollViewPagePathEffect::DownCast( mScrollViewEffect );
+ effect.ApplyToPage( page, pageOrder );
}
/**
- * [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 )
- {
- switch( mEffectMode )
- {
- case DepthEffect:
- {
- ApplyDepthEffectToActor( child );
- break;
- }
-
- 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()));
- }
-
- /**
* Creates an Image (Helper)
*
* @param[in] filename the path of the image.
* @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, unsigned int width = IMAGE_THUMBNAIL_WIDTH, unsigned int height = IMAGE_THUMBNAIL_HEIGHT )
{
Image img = ResourceImage::New(filename, ImageDimensions( width, height ), Dali::FittingMode::SCALE_TO_FILL, Dali::SamplingMode::BOX_THEN_LINEAR );
- ImageActor actor = ImageActor::New(img);
+ ImageView actor = ImageView::New(img);
actor.SetName( filename );
actor.SetParentOrigin(ParentOrigin::CENTER);
actor.SetAnchorPoint(AnchorPoint::CENTER);
*/
enum EffectMode
{
- DepthEffect, ///< Depth Effect
- CubeEffect, ///< Cube effect
PageCarouselEffect, ///< Page carousel effect
PageCubeEffect, ///< Page cube effect
PageSpiralEffect, ///< Page spiral effect
EffectMode mEffectMode; ///< Current Effect mode
- Image mEffectIcon[Total]; ///< Icons for the effect 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)
{
- Application app = Application::New(&argc, &argv);
+ Application app = Application::New(&argc, &argv, DALI_DEMO_THEME_PATH);
ExampleController test(app);
app.MainLoop();
return 0;