X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Fpage-turn-view%2Fpage-turn-portrait-view-impl.cpp;h=84e98545cd79457a54618074d5d45ad6f5c66f89;hp=8b9d22f66f0fb27b8de1869bf029e487086c82af;hb=3355135c32ee6deee76790d2685fe5308ba96db4;hpb=c8ffcb9f46ded14981915479af62d85970798db5 diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.cpp index 8b9d22f..84e9854 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.cpp @@ -21,6 +21,10 @@ // EXTERNAL INCLUDES #include #include +#include + +//INTERNAL INCLUDES +#include namespace Dali { @@ -33,20 +37,20 @@ namespace Internal namespace { -using namespace Dali; -TypeRegistration mType( typeid(Toolkit::PageTurnPortraitView), typeid(Toolkit::PageTurnView), NULL ); +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PageTurnPortraitView, Toolkit::PageTurnView, NULL ) +DALI_TYPE_REGISTRATION_END() // the panning speed threshold, no matter how far is the pan displacement, pan fast to left/right quickly (speed > 0.3) will turn over/back the page const float GESTURE_SPEED_THRESHOLD(0.3f); // the animation duration of turning the previous page back when an outwards flick is detected const float PAGE_TURN_OVER_ANIMATION_DURATION(0.5f); + } PageTurnPortraitView::PageTurnPortraitView( PageFactory& pageFactory, const Vector2& pageSize ) : PageTurnView( pageFactory, pageSize ) { - } PageTurnPortraitView::~PageTurnPortraitView() @@ -70,16 +74,14 @@ Toolkit::PageTurnPortraitView PageTurnPortraitView::New( PageFactory& pageFactor void PageTurnPortraitView::OnPageTurnViewInitialize() { + mTurnEffectShader.RegisterProperty(PROPERTY_TEXTURE_WIDTH, 1.f ); + mSpineEffectShader.RegisterProperty(PROPERTY_TEXTURE_WIDTH, 1.f ); + mControlSize = mPageSize; Self().SetSize( mPageSize ); mTurningPageLayer.SetParentOrigin( ParentOrigin::CENTER_LEFT ); } -ImageActor PageTurnPortraitView::NewPageFromRenderBuffer( int pageIndex ) -{ - return ImageActor::New(mRenderedPage[pageIndex % NUMBER_OF_CACHED_PAGES]); -} - Vector2 PageTurnPortraitView::SetPanPosition( const Vector2& gesturePosition ) { return gesturePosition; @@ -89,23 +91,11 @@ void PageTurnPortraitView::SetPanActor( const Vector2& panPosition ) { if( mCurrentPageIndex < mTotalPageCount ) { - mPanActor = mPageActors[mCurrentPageIndex%NUMBER_OF_CACHED_PAGES]; - } - else - { - mPanActor.Reset(); - } -} - -void PageTurnPortraitView::SetSpineEffect(ImageActor actor, bool isLeftSide) -{ - if(isLeftSide) - { - actor.RemoveShaderEffect(); + mTurningPageIndex = mCurrentPageIndex; } else { - actor.SetShaderEffect( mSpineEffectFront ); + mTurningPageIndex = -1; } } @@ -115,8 +105,9 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, // There is previous page and an outwards flick is detected if( mCurrentPageIndex > 0 && gestureSpeed > GESTURE_SPEED_THRESHOLD && offset.x > fabs( offset.y )) { - ImageActor actor = mPageActors[ (mCurrentPageIndex-1) % NUMBER_OF_CACHED_PAGES ]; - if(actor.GetParent() != mRootOnScreen) + int actorIndex = (mCurrentPageIndex-1) % NUMBER_OF_CACHED_PAGES; + Actor actor = mPages[ actorIndex ].actor; + if(actor.GetParent() != Self()) { return; } @@ -124,42 +115,51 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, // Guard against destruction during signal emission //Emit signal, to notify that page[mCurrentPageIndex-1] is turning backwards Toolkit::PageTurnView handle( GetOwner() ); - mPageTurnStartedSignal.Emit( handle, static_cast(mCurrentPageIndex-1), false ); + mTurningPageIndex = mCurrentPageIndex-1; + mPageTurnStartedSignal.Emit( handle, static_cast(mTurningPageIndex), false ); //update pages mCurrentPageIndex--; RemovePage( mCurrentPageIndex+NUMBER_OF_CACHED_PAGES_EACH_SIDE ); AddPage( mCurrentPageIndex-NUMBER_OF_CACHED_PAGES_EACH_SIDE ); OrganizePageDepth(); + mPageUpdated = true; + + actor.SetVisible(true); // Add the page to tuning page layer and set up PageTurnEffect mShadowView.Add( actor ); - actor.SetShaderEffect( mTurnEffect[mIndex] ); - GetImpl( mTurnEffect[mIndex] ).ApplyInternalConstraint(); - mIsAnimating[mIndex] = true; - mTurnEffect[mIndex].SetIsTurningBack( true ); + mPages[actorIndex].UseEffect( mTurnEffectShader ); + mAnimatingCount++; Vector2 originalCenter( mPageSize.width*1.5f, 0.5f*mPageSize.height ); - mTurnEffect[mIndex].SetOriginalCenter( originalCenter ); - mTurnEffect[mIndex].SetCurrentCenter( Vector2( mPageSize.width*0.5f, mPageSize.height*0.5f )); + mPages[actorIndex].SetOriginalCenter( originalCenter ); + mPages[actorIndex].SetCurrentCenter( Vector2( mPageSize.width*0.5f, mPageSize.height*0.5f ) ); + PageTurnApplyInternalConstraint(actor, mPageSize.height); // Start an animation to turn the previous page back Animation animation = Animation::New( PAGE_TURN_OVER_ANIMATION_DURATION ); - mAnimationActorPair[animation] = actor; - mAnimationIndexPair[animation] = mIndex; + mAnimationPageIdPair[animation] = mCurrentPageIndex; - animation.AnimateTo( Property( mTurnEffect[mIndex], mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName() ), + animation.AnimateTo( Property( actor, mPages[actorIndex].propertyCurrentCenter ), originalCenter, - AlphaFunctions::EaseOut, PAGE_TURN_OVER_ANIMATION_DURATION*0.75f ); - animation.AnimateBy( Property( actor, Actor::Property::Rotation ), AngleAxis( Degree( 180.0f ), Vector3::YAXIS ) ,AlphaFunctions::EaseOut ); + AlphaFunction::EASE_OUT, TimePeriod(PAGE_TURN_OVER_ANIMATION_DURATION*0.75f) ); + animation.AnimateBy( Property( actor, Actor::Property::ORIENTATION ), AngleAxis( Degree( 180.0f ), Vector3::YAXIS ) ,AlphaFunction::EASE_OUT ); animation.Play(); - ImageActor::DownCast(actor).SetCullFace( CullBack ); - animation.FinishedSignal().Connect( this, &PageTurnPortraitView::OnTurnedOver ); + + animation.FinishedSignal().Connect( this, &PageTurnPortraitView::TurnedOverBackwards ); + } +} + +void PageTurnPortraitView::OnTurnedOver( Actor actor, bool isLeftSide ) +{ + if( isLeftSide ) + { + actor.SetVisible( false ); } } -void PageTurnPortraitView::OnTurnedOver( Animation& animation ) +void PageTurnPortraitView::TurnedOverBackwards( Animation& animation ) { - ImageActor::DownCast(mAnimationActorPair[animation]).SetCullFace( CullNone ); TurnedOver( animation ); }