Commit dd1469baad23937c868bf10a787b7dd66e5e3920

Authored by Ferran Sole
1 parent 1353cb13

Modified scroll-view-example to use path based scroll view effects

Change-Id: Iebf13abe6ef65c880afa22c1010d5350a40c1067
examples/scroll-view/scroll-view-example.cpp
1 1 /*
2   - * Copyright (c) 2014 Samsung Electronics Co., Ltd.
  2 + * Copyright (c) 2015 Samsung Electronics Co., Ltd.
3 3 *
4 4 * Licensed under the Apache License, Version 2.0 (the "License");
5 5 * you may not use this file except in compliance with the License.
... ... @@ -42,7 +42,8 @@ const char* EFFECT_MODE_NAME[] = {
42 42 "Cube",
43 43 "PageCarousel",
44 44 "PageCube",
45   - "PageSpiral"
  45 + "PageSpiral",
  46 + "PageWave"
46 47 };
47 48  
48 49 const char * const IMAGE_PATHS[] = {
... ... @@ -201,6 +202,7 @@ public:
201 202 mEffectIcon[ PageCarouselEffect ] = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
202 203 mEffectIcon[ PageCubeEffect ] = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
203 204 mEffectIcon[ PageSpiralEffect ] = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
  205 + mEffectIcon[ PageWaveEffect ] = ResourceImage::New( EFFECT_CAROUSEL_IMAGE );
204 206  
205 207 // Create a effect change button. (right of toolbar)
206 208 mEffectChangeButton = Toolkit::PushButton::New();
... ... @@ -274,11 +276,11 @@ private:
274 276  
275 277 // apply new Effect to ScrollView
276 278 ApplyEffectToScrollView();
277   -
  279 + unsigned int pageCount(0);
278 280 for( std::vector< Actor >::iterator pageIter = mPages.begin(); pageIter != mPages.end(); ++pageIter)
279 281 {
280 282 Actor page = *pageIter;
281   - ApplyEffectToPage( page );
  283 + ApplyEffectToPage( page, pageCount++ );
282 284  
283 285 unsigned int numChildren = (*pageIter).GetChildCount();
284 286 for(unsigned int i=0; i<numChildren; ++i)
... ... @@ -346,6 +348,11 @@ private:
346 348 Stage stage = Stage::GetCurrent();
347 349 Vector2 stageSize = stage.GetSize();
348 350  
  351 + RulerPtr rulerX = CreateRuler(snap ? stageSize.width : 0.0f);
  352 + RulerPtr rulerY = new DefaultRuler;
  353 + rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * PAGE_COLUMNS, !wrap));
  354 + rulerY->Disable();
  355 +
349 356 switch( mEffectMode )
350 357 {
351 358 case DepthEffect:
... ... @@ -371,35 +378,95 @@ private:
371 378 }
372 379  
373 380 case PageCarouselEffect:
374   - {
375   - mScrollViewEffect = ScrollViewPageCarouselEffect::New();
376   - mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
377   - mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
378   - mScrollView.SetScrollSnapAlphaFunction(AlphaFunction::EASE_OUT);
379   - mScrollView.SetScrollFlickAlphaFunction(AlphaFunction::EASE_OUT);
380   - mScrollView.RemoveConstraintsFromChildren();
381   - break;
382   - }
383   -
384 381 case PageCubeEffect:
385   - {
386   - mScrollViewEffect = ScrollViewPageCubeEffect::New();
387   - mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
388   - mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
389   - mScrollView.SetScrollSnapAlphaFunction(AlphaFunction::EASE_OUT);
390   - mScrollView.SetScrollFlickAlphaFunction(AlphaFunction::EASE_OUT);
391   - mScrollView.RemoveConstraintsFromChildren();
392   - break;
393   - }
394   -
395 382 case PageSpiralEffect:
  383 + case PageWaveEffect:
396 384 {
397   - mScrollViewEffect = ScrollViewPageSpiralEffect::New();
  385 + Dali::Path path = Dali::Path::New();
  386 + Dali::Property::Array points;
  387 + points.resize(3);
  388 + Dali::Property::Array controlPoints;
  389 + controlPoints.resize(4);
  390 + Vector3 forward;
  391 + if( mEffectMode == PageCarouselEffect)
  392 + {
  393 +
  394 + points[0] = Vector3( stageSize.x*0.75, 0.0f, -stageSize.x*0.75f);
  395 + points[1] = Vector3( 0.0f, 0.0f, 0.0f );
  396 + points[2] = Vector3( -stageSize.x*0.75f, 0.0f, -stageSize.x*0.75f);
  397 + path.SetProperty( Path::Property::POINTS, points );
  398 +
  399 + controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
  400 + controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
  401 + controlPoints[2] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
  402 + controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
  403 + path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
  404 +
  405 + forward = Vector3::ZERO;
  406 + }
  407 + else if( mEffectMode == PageCubeEffect)
  408 + {
  409 + points[0] = Vector3( stageSize.x*0.5, 0.0f, stageSize.x*0.5f);
  410 + points[1] = Vector3( 0.0f, 0.0f, 0.0f );
  411 + points[2] = Vector3( -stageSize.x*0.5f, 0.0f, stageSize.x*0.5f);
  412 + path.SetProperty( Path::Property::POINTS, points );
  413 +
  414 + controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, stageSize.x*0.3f );
  415 + controlPoints[1] = Vector3( stageSize.x*0.3f, 0.0f, 0.0f );
  416 + controlPoints[2] = Vector3(-stageSize.x*0.3f, 0.0f, 0.0f );
  417 + controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, stageSize.x*0.3f );
  418 + path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
  419 +
  420 + forward = Vector3(-1.0f,0.0f,0.0f);
  421 + }
  422 + else if( mEffectMode == PageSpiralEffect)
  423 + {
  424 + points[0] = Vector3( stageSize.x*0.5, 0.0f, -stageSize.x*0.5f);
  425 + points[1] = Vector3( 0.0f, 0.0f, 0.0f );
  426 + points[2] = Vector3( -stageSize.x*0.5f, 0.0f, -stageSize.x*0.5f);
  427 + path.SetProperty( Path::Property::POINTS, points );
  428 +
  429 + controlPoints[0] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
  430 + controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
  431 + controlPoints[2] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
  432 + controlPoints[3] = Vector3(-stageSize.x*0.5f, 0.0f, 0.0f );
  433 + path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
  434 +
  435 + forward = Vector3(-1.0f,0.0f,0.0f);
  436 + }
  437 + else if( mEffectMode == PageWaveEffect)
  438 + {
  439 + points[0] = Vector3( stageSize.x, 0.0f, -stageSize.x);
  440 + points[1] = Vector3( 0.0f, 0.0f, 0.0f );
  441 + points[2] = Vector3( -stageSize.x, 0.0f, -stageSize.x);
  442 + path.SetProperty( Path::Property::POINTS, points );
  443 +
  444 + controlPoints[0] = Vector3( 0.0f, 0.0f, -stageSize.x );
  445 + controlPoints[1] = Vector3( stageSize.x*0.5f, 0.0f, 0.0f );
  446 + controlPoints[2] = Vector3( -stageSize.x*0.5f, 0.0f, 0.0f);
  447 + controlPoints[3] = Vector3(0.0f, 0.0f,-stageSize.x );
  448 + path.SetProperty( Path::Property::CONTROL_POINTS, controlPoints );
  449 +
  450 + forward = Vector3(-1.0f,0.0f,0.0f);
  451 + }
  452 +
  453 + mScrollViewEffect = ScrollViewPagePathEffect::New(path, forward,Toolkit::ScrollView::Property::SCROLL_FINAL_X, Vector3(stageSize.x,stageSize.y,0.0f),PAGE_COLUMNS);
398 454 mScrollView.SetScrollSnapDuration(EFFECT_SNAP_DURATION);
399 455 mScrollView.SetScrollFlickDuration(EFFECT_FLICK_DURATION);
400 456 mScrollView.SetScrollSnapAlphaFunction(AlphaFunction::EASE_OUT);
401 457 mScrollView.SetScrollFlickAlphaFunction(AlphaFunction::EASE_OUT);
402 458 mScrollView.RemoveConstraintsFromChildren();
  459 +
  460 + rulerX = CreateRuler(snap ? stageSize.width * 0.5f : 0.0f);
  461 + if( wrap )
  462 + {
  463 + rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * 0.5f * PAGE_COLUMNS, !wrap));
  464 + }
  465 + else
  466 + {
  467 + rulerX->SetDomain(RulerDomain(0.0f, stageSize.x*0.5f* (PAGE_COLUMNS+1), !wrap));
  468 + }
  469 +
403 470 break;
404 471 }
405 472  
... ... @@ -409,20 +476,17 @@ private:
409 476 }
410 477 }
411 478  
  479 + unsigned int currentPage = mScrollView.GetCurrentPage();
412 480 if( mScrollViewEffect )
413 481 {
414 482 mScrollView.ApplyEffect(mScrollViewEffect);
415 483 }
416 484  
417 485 mScrollView.SetWrapMode(wrap);
418   -
419   - RulerPtr rulerX = CreateRuler(snap ? stageSize.width : 0.0f);
420   - RulerPtr rulerY = new DefaultRuler;
421   - rulerX->SetDomain(RulerDomain(0.0f, stageSize.x * PAGE_COLUMNS, !wrap));
422   - rulerY->Disable();
423   -
424 486 mScrollView.SetRulerX( rulerX );
425 487 mScrollView.SetRulerY( rulerY );
  488 +
  489 + mScrollView.ScrollTo( currentPage, 0.0f );
426 490 }
427 491  
428 492 /**
... ... @@ -449,7 +513,7 @@ private:
449 513 *
450 514 * @param[in] page The page Actor to apply effect to.
451 515 */
452   - void ApplyEffectToPage(Actor page)
  516 + void ApplyEffectToPage(Actor page, unsigned int pageOrder )
453 517 {
454 518 page.RemoveConstraints();
455 519 page.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS );
... ... @@ -457,23 +521,12 @@ private:
457 521 switch( mEffectMode )
458 522 {
459 523 case PageCarouselEffect:
460   - {
461   - ScrollViewPageCarouselEffect effect = ScrollViewPageCarouselEffect::DownCast( mScrollViewEffect );
462   - effect.ApplyToPage( page );
463   - break;
464   - }
465   -
466 524 case PageCubeEffect:
467   - {
468   - ScrollViewPageCubeEffect effect = ScrollViewPageCubeEffect::DownCast( mScrollViewEffect );
469   - effect.ApplyToPage( page, ANGLE_SWING_3DEFFECT );
470   - break;
471   - }
472   -
473 525 case PageSpiralEffect:
  526 + case PageWaveEffect:
474 527 {
475   - ScrollViewPageSpiralEffect effect = ScrollViewPageSpiralEffect::DownCast( mScrollViewEffect );
476   - effect.ApplyToPage( page, ANGLE_SWING_3DEFFECT );
  528 + ScrollViewPagePathEffect effect = ScrollViewPagePathEffect::DownCast( mScrollViewEffect );
  529 + effect.ApplyToPage( page, pageOrder );
477 530 break;
478 531 }
479 532  
... ... @@ -678,6 +731,7 @@ private:
678 731 PageCarouselEffect, ///< Page carousel effect
679 732 PageCubeEffect, ///< Page cube effect
680 733 PageSpiralEffect, ///< Page spiral effect
  734 + PageWaveEffect, ///< Page wave effect
681 735  
682 736 Total
683 737 };
... ...