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=094de094d8ebdf2f19ecac2c802fe3a32ad993cb;hp=6e2ffc7974181b0de97399e33629665584d1b998;hb=HEAD;hpb=030e7c680a6eb0e8d87bfdb8ec359a0267ef7db2 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 6e2ffc7..094de09 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 @@ -20,23 +20,21 @@ // EXTERNAL INCLUDES #include -#include #include +#include + +//INTERNAL INCLUDES +#include namespace Dali { - namespace Toolkit { - namespace Internal { - namespace { -using namespace Dali; - -DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PageTurnPortraitView, 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 @@ -45,25 +43,24 @@ 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); -} +} // namespace -PageTurnPortraitView::PageTurnPortraitView( PageFactory& pageFactory, const Vector2& pageSize ) -: PageTurnView( pageFactory, pageSize ) +PageTurnPortraitView::PageTurnPortraitView(PageFactory& pageFactory, const Vector2& viewPageSize) +: PageTurnView(pageFactory, viewPageSize) { - } PageTurnPortraitView::~PageTurnPortraitView() { } -Toolkit::PageTurnPortraitView PageTurnPortraitView::New( PageFactory& pageFactory, const Vector2& pageSize ) +Toolkit::PageTurnPortraitView PageTurnPortraitView::New(PageFactory& pageFactory, const Vector2& viewPageSize) { // Create the implementation, temporarily owned on stack - IntrusivePtr< PageTurnPortraitView > internalPageTurnView = new PageTurnPortraitView( pageFactory, pageSize ); + IntrusivePtr internalPageTurnView = new PageTurnPortraitView(pageFactory, viewPageSize); // Pass ownership to CustomActor - Dali::Toolkit::PageTurnPortraitView pageTurnView( *internalPageTurnView ); + Dali::Toolkit::PageTurnPortraitView pageTurnView(*internalPageTurnView); // Second-phase init of the implementation // This can only be done after the CustomActor connection has been made... @@ -74,97 +71,94 @@ Toolkit::PageTurnPortraitView PageTurnPortraitView::New( PageFactory& pageFactor void PageTurnPortraitView::OnPageTurnViewInitialize() { - mControlSize = mPageSize; - Self().SetSize( mPageSize ); - mTurningPageLayer.SetParentOrigin( ParentOrigin::CENTER_LEFT ); -} + mTurnEffectShader.RegisterProperty(PROPERTY_TEXTURE_WIDTH, 1.f); + mSpineEffectShader.RegisterProperty(PROPERTY_TEXTURE_WIDTH, 1.f); -ImageActor PageTurnPortraitView::NewPageFromRenderBuffer( int pageIndex ) -{ - return ImageActor::New(mRenderedPage[pageIndex % NUMBER_OF_CACHED_PAGES]); + mControlSize = mPageSize; + Self().SetProperty(Actor::Property::SIZE, mPageSize); + mTurningPageLayer.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT); } -Vector2 PageTurnPortraitView::SetPanPosition( const Vector2& gesturePosition ) +Vector2 PageTurnPortraitView::SetPanPosition(const Vector2& gesturePosition) { return gesturePosition; } -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) +void PageTurnPortraitView::SetPanActor(const Vector2& panPosition) { - if(isLeftSide) + if(mCurrentPageIndex < mTotalPageCount) { - actor.RemoveShaderEffect(); + mTurningPageIndex = mCurrentPageIndex; } else { - actor.SetShaderEffect( mSpineEffectFront ); + mTurningPageIndex = -1; } } -void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, float gestureSpeed ) +void PageTurnPortraitView::OnPossibleOutwardsFlick(const Vector2& panPosition, float gestureSpeed) { Vector2 offset = panPosition - mPressDownPosition; // There is previous page and an outwards flick is detected - if( mCurrentPageIndex > 0 && gestureSpeed > GESTURE_SPEED_THRESHOLD && offset.x > fabs( offset.y )) + 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; } // 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 ); + Toolkit::PageTurnView handle(GetOwner()); + 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 ); + RemovePage(mCurrentPageIndex + NUMBER_OF_CACHED_PAGES_EACH_SIDE); + AddPage(mCurrentPageIndex - NUMBER_OF_CACHED_PAGES_EACH_SIDE); OrganizePageDepth(); + mPageUpdated = true; + + actor.SetProperty(Actor::Property::VISIBLE, 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 ); - 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 )); + mShadowView.Add(actor); + mPages[actorIndex].UseEffect(mTurnEffectShader); + mAnimatingCount++; + Vector2 originalCenter(mPageSize.width * 1.5f, 0.5f * mPageSize.height); + 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; - - animation.AnimateTo( Property( mTurnEffect[mIndex], mTurnEffect[mIndex].PageTurnEffect::GetCurrentCenterPropertyName() ), - originalCenter, - 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 animation = Animation::New(PAGE_TURN_OVER_ANIMATION_DURATION); + mAnimationPageIdPair[animation] = mCurrentPageIndex; + + animation.AnimateTo(Property(actor, mPages[actorIndex].propertyCurrentCenter), + originalCenter, + 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.SetProperty(Actor::Property::VISIBLE, false); } } -void PageTurnPortraitView::OnTurnedOver( Animation& animation ) +void PageTurnPortraitView::TurnedOverBackwards(Animation& animation) { - ImageActor::DownCast(mAnimationActorPair[animation]).SetCullFace( CullNone ); - TurnedOver( animation ); + TurnedOver(animation); } } // namespace Internal