-//
-// Copyright (c) 2014 Samsung Electronics Co., Ltd.
-//
-// Licensed under the Flora License, Version 1.0 (the License);
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://floralicense.org/license/
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an AS IS BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-//
-
-//CLASS HEADER
+/*
+ * Copyright (c) 2014 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.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
#include <dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.h>
+// EXTERNAL INCLUDES
+#include <dali/public-api/animation/animation.h>
+#include <dali/public-api/object/type-registry.h>
+#include <dali/public-api/object/type-registry-helper.h>
+
+//INTERNAL INCLUDES
+#include <dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h>
+
namespace Dali
{
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()
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;
{
if( mCurrentPageIndex < mTotalPageCount )
{
- mPanActor = mPageActors[mCurrentPageIndex%NUMBER_OF_CACHED_PAGES];
+ mTurningPageIndex = mCurrentPageIndex;
}
else
{
- mPanActor.Reset();
- }
-}
-
-void PageTurnPortraitView::SetSpineEffect(Actor actor, bool isLeftSide)
-{
- if(isLeftSide)
- {
- actor.RemoveShaderEffect();
- }
- else
- {
- actor.SetShaderEffect( mSpineEffectFront );
+ mTurningPageIndex = -1;
}
}
// There is previous page and an outwards flick is detected
if( mCurrentPageIndex > 0 && gestureSpeed > GESTURE_SPEED_THRESHOLD && offset.x > fabs( offset.y ))
{
- Actor 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<unsigned int>(mCurrentPageIndex-1), false );
+ mTurningPageIndex = mCurrentPageIndex-1;
+ mPageTurnStartedSignal.Emit( handle, static_cast<unsigned int>(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::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 );
}