/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 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.
#include <dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h>
#include <dali-toolkit/internal/visuals/visual-factory-cache.h>
#include <dali-toolkit/internal/visuals/visual-string-constants.h>
+#include <dali-toolkit/internal/controls/control/control-data-impl.h>
using namespace Dali;
// default grid density for page turn effect, 20 pixels by 20 pixels
const float DEFAULT_GRID_DENSITY(20.0f);
-// to bent the page, the minimal horizontal pan start position is pageSize.x * MINIMUM_START_POSITION_RATIO
+// to bent the page, the minimal horizontal pan start position is viewPageSize.x * MINIMUM_START_POSITION_RATIO
const float MINIMUM_START_POSITION_RATIO(0.6f);
-// the maximum vertical displacement of pan gesture, if exceed, will reduce it: pageSize.y * MAXIMUM_VERTICAL_MOVEMENT_RATIO
+// the maximum vertical displacement of pan gesture, if exceed, will reduce it: viewPageSize.y * MAXIMUM_VERTICAL_MOVEMENT_RATIO
const float MAXIMUM_VERTICAL_MOVEMENT_RATIO(0.15f);
-// when the x component of pan position reaches pageSize.x * PAGE_TURN_OVER_THRESHOLD_RATIO, page starts to turn over
+// when the x component of pan position reaches viewPageSize.x * PAGE_TURN_OVER_THRESHOLD_RATIO, page starts to turn over
const float PAGE_TURN_OVER_THRESHOLD_RATIO(0.5f);
// duration of animation, shorter for faster speed
// Setup properties, signals and actions using the type-registry.
DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PageTurnView, Toolkit::Control, Create );
-DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "pageSize", VECTOR2, PAGE_SIZE )
+DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "viewPageSize", VECTOR2, VIEW_PAGE_SIZE )
DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "currentPageId", INTEGER, CURRENT_PAGE_ID )
DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "spineShadow", VECTOR2, SPINE_SHADOW )
: isTurnBack( false )
{
actor = Actor::New();
- actor.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
- actor.SetParentOrigin( ParentOrigin::CENTER_LEFT );
- actor.SetVisible( false );
+ actor.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT );
+ actor.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER_LEFT );
+ actor.SetProperty( Actor::Property::VISIBLE, false );
propertyPanDisplacement = actor.RegisterProperty( PROPERTY_PAN_DISPLACEMENT, 0.f );
propertyPanCenter = actor.RegisterProperty(PROPERTY_PAN_CENTER, Vector2::ZERO);
actor.SetProperty( propertyCurrentCenter, value );
}
-PageTurnView::PageTurnView( PageFactory& pageFactory, const Vector2& pageSize )
+PageTurnView::PageTurnView( PageFactory& pageFactory, const Vector2& viewPageSize )
: Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ),
mPageFactory( &pageFactory ),
- mPageSize( pageSize ),
+ mPageSize( viewPageSize ),
mSpineShadowParameter( DEFAULT_SPINE_SHADOW_PARAMETER ),
mDistanceUpCorner( 0.f ),
mDistanceBottomCorner( 0.f ),
for( int i = 0; i < NUMBER_OF_CACHED_PAGES; i++ )
{
mPages.push_back( Page() );
- mPages[i].actor.SetSize( mPageSize );
+ mPages[i].actor.SetProperty( Actor::Property::SIZE, mPageSize );
Self().Add( mPages[i].actor );
}
// create the layer for turning pages
mTurningPageLayer = Layer::New();
- mTurningPageLayer.SetAnchorPoint( AnchorPoint::CENTER_LEFT );
- mTurningPageLayer.SetBehavior(Layer::LAYER_3D);
+ mTurningPageLayer.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::CENTER_LEFT );
+ mTurningPageLayer.SetProperty( Layer::Property::BEHAVIOR, Layer::LAYER_3D );
mTurningPageLayer.Raise();
// Set control size and the parent origin of page layers
for( int i = 0; i < NUMBER_OF_CACHED_PAGES_EACH_SIDE; i++ )
{
AddPage( i );
- mPages[i].actor.SetZ( -static_cast<float>( i )*STATIC_PAGE_INTERVAL_DISTANCE );
+ mPages[i].actor.SetProperty( Actor::Property::POSITION_Z, -static_cast<float>( i )*STATIC_PAGE_INTERVAL_DISTANCE );
}
- mPages[0].actor.SetVisible(true);
+ mPages[0].actor.SetProperty( Actor::Property::VISIBLE,true);
// enable the pan gesture which is attached to the control
- EnableGestureDetection(Gesture::Type(Gesture::Pan));
+ EnableGestureDetection(GestureType::Value(GestureType::PAN));
+
+ DevelControl::SetAccessibilityConstructor( Self(), []( Dali::Actor actor ) {
+ return std::unique_ptr< Dali::Accessibility::Accessible >(
+ new Control::Impl::AccessibleImpl( actor, Dali::Accessibility::Role::PAGE_TAB_LIST ) );
+ } );
}
Shader PageTurnView::CreateShader( const Property::Map& shaderMap )
void PageTurnView::SetupShadowView()
{
mShadowView = Toolkit::ShadowView::New( 0.25f, 0.25f );
- Vector3 origin = mTurningPageLayer.GetCurrentParentOrigin();
- mShadowView.SetParentOrigin( origin );
- mShadowView.SetAnchorPoint( origin );
+ Vector3 origin = mTurningPageLayer.GetCurrentProperty< Vector3 >( Actor::Property::PARENT_ORIGIN );
+ mShadowView.SetProperty( Actor::Property::PARENT_ORIGIN, origin );
+ mShadowView.SetProperty( Actor::Property::ANCHOR_POINT, origin );
mShadowView.SetPointLightFieldOfView( Math::PI / 2.0f);
mShadowView.SetShadowColor(DEFAULT_SHADOW_COLOR);
mShadowPlaneBackground = Actor::New();
- mShadowPlaneBackground.SetParentOrigin( ParentOrigin::CENTER );
- mShadowPlaneBackground.SetSize( mControlSize );
+ mShadowPlaneBackground.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER );
+ mShadowPlaneBackground.SetProperty( Actor::Property::SIZE, mControlSize );
Self().Add( mShadowPlaneBackground );
mShadowView.SetShadowPlaneBackground( mShadowPlaneBackground );
mPointLight = Actor::New();
- mPointLight.SetAnchorPoint( origin );
- mPointLight.SetParentOrigin( origin );
- mPointLight.SetPosition( 0.f, 0.f, mPageSize.width*POINT_LIGHT_HEIGHT_RATIO );
+ mPointLight.SetProperty( Actor::Property::ANCHOR_POINT, origin );
+ mPointLight.SetProperty( Actor::Property::PARENT_ORIGIN, origin );
+ mPointLight.SetProperty( Actor::Property::POSITION, Vector3( 0.f, 0.f, mPageSize.width*POINT_LIGHT_HEIGHT_RATIO ));
Self().Add( mPointLight );
mShadowView.SetPointLight( mPointLight );
mShadowView.Activate();
}
-void PageTurnView::OnStageConnection( int depth )
+void PageTurnView::OnSceneConnection( int depth )
{
SetupShadowView();
- Control::OnStageConnection( depth );
+ Control::OnSceneConnection( depth );
}
-void PageTurnView::OnStageDisconnection()
+void PageTurnView::OnSceneDisconnection()
{
if(mShadowView)
{
// make sure the status of the control is updated correctly when the pan gesture is interrupted
StopTurning();
- Control::OnStageDisconnection();
+ Control::OnSceneDisconnection();
}
-void PageTurnView::SetPageSize( const Vector2& pageSize )
+void PageTurnView::SetPageSize( const Vector2& viewPageSize )
{
- mPageSize = pageSize;
+ mPageSize = viewPageSize;
if( mPointLight )
{
- mPointLight.SetPosition( 0.f, 0.f, mPageSize.width*POINT_LIGHT_HEIGHT_RATIO );
+ mPointLight.SetProperty( Actor::Property::POSITION, Vector3( 0.f, 0.f, mPageSize.width*POINT_LIGHT_HEIGHT_RATIO ));
}
for( size_t i=0; i<mPages.size(); i++ )
{
- mPages[i].actor.SetSize( mPageSize );
+ mPages[i].actor.SetProperty( Actor::Property::SIZE, mPageSize );
}
OnPageTurnViewInitialize();
if( mShadowPlaneBackground )
{
- mShadowPlaneBackground.SetSize( mControlSize );
+ mShadowPlaneBackground.SetProperty( Actor::Property::SIZE, mControlSize );
}
}
AddPage( i );
}
- mPages[pageId%NUMBER_OF_CACHED_PAGES].actor.SetVisible(true);
+ mPages[pageId%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::VISIBLE,true);
if( pageId > 0 )
{
- mPages[(pageId-1)%NUMBER_OF_CACHED_PAGES].actor.SetVisible(true);
+ mPages[(pageId-1)%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::VISIBLE,true);
}
// set ordered depth to the stacked pages
OrganizePageDepth();
}
float degree = isLeftSide ? 180.f :0.f;
- mPages[index].actor.SetOrientation( Degree( degree ), Vector3::YAXIS );
- mPages[index].actor.SetVisible( false );
+ mPages[index].actor.SetProperty( Actor::Property::ORIENTATION, Quaternion( Degree( degree ), Vector3::YAXIS ) );
+ mPages[index].actor.SetProperty( Actor::Property::VISIBLE, false );
mPages[index].UseEffect( mSpineEffectShader, mGeometry );
mPages[index].SetTexture( newPage );
if( pageIndex > -1 && pageIndex < mTotalPageCount)
{
int index = pageIndex % NUMBER_OF_CACHED_PAGES;
- mPages[index].actor.SetVisible(false);
+ mPages[index].actor.SetProperty( Actor::Property::VISIBLE,false);
}
}
void PageTurnView::OnPan( const PanGesture& gesture )
{
// the pan gesture is attached to control itself instead of each page
- switch( gesture.state )
+ switch( gesture.GetState() )
{
- case Gesture::Started:
+ case GestureState::STARTED:
{
// check whether the undergoing turning page number already reaches the maximum allowed
if( mPageUpdated && mAnimatingCount< MAXIMUM_TURNING_NUM && mSlidingCount < 1 )
{
- SetPanActor( gesture.position ); // determine which page actor is panned
+ const Vector2& position = gesture.GetPosition();
+ SetPanActor( position ); // determine which page actor is panned
if( mTurningPageIndex != -1 && mPages[mTurningPageIndex % NUMBER_OF_CACHED_PAGES].actor.GetParent() != Self()) // if the page is added to turning layer,it is undergoing an animation currently
{
mTurningPageIndex = -1;
}
- PanStarted( SetPanPosition( gesture.position ) ); // pass in the pan position in the local page coordinate
+ PanStarted( SetPanPosition( position ) ); // pass in the pan position in the local page coordinate
}
else
{
}
break;
}
- case Gesture::Continuing:
+ case GestureState::CONTINUING:
{
- PanContinuing( SetPanPosition( gesture.position ) ); // pass in the pan position in the local page coordinate
+ PanContinuing( SetPanPosition( gesture.GetPosition() ) ); // pass in the pan position in the local page coordinate
break;
}
- case Gesture::Finished:
- case Gesture::Cancelled:
+ case GestureState::FINISHED:
+ case GestureState::CANCELLED:
{
- PanFinished( SetPanPosition( gesture.position ), gesture.GetSpeed() );
+ PanFinished( SetPanPosition( gesture.GetPosition() ), gesture.GetSpeed() );
break;
}
- case Gesture::Clear:
- case Gesture::Possible:
+ case GestureState::CLEAR:
+ case GestureState::POSSIBLE:
default:
{
break;
int id = mTurningPageIndex + (mPages[mIndex].isTurnBack ? -1 : 1);
if( id >=0 && id < mTotalPageCount )
{
- mPages[id%NUMBER_OF_CACHED_PAGES].actor.SetVisible(true);
+ mPages[id%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::VISIBLE,true);
}
mShadowView.RemoveConstraints();
mAnimationPageIdPair.erase( animation );
float degree = mPages[index].isTurnBack ? 180.f : 0.f;
- mPages[index].actor.SetOrientation( Degree(degree), Vector3::YAXIS );
+ mPages[index].actor.SetProperty( Actor::Property::ORIENTATION, Quaternion( Degree(degree), Vector3::YAXIS ) );
mPages[index].UseEffect( mSpineEffectShader );
int id = pageId + (mPages[index].isTurnBack ? -1 : 1);
if( id >=0 && id < mTotalPageCount )
{
- mPages[id%NUMBER_OF_CACHED_PAGES].actor.SetVisible(false);
+ mPages[id%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::VISIBLE,false);
}
OnTurnedOver( mPages[index].actor, mPages[index].isTurnBack );
int id = pageId + (mPages[index].isTurnBack ? -1 : 1);
if( id >=0 && id < mTotalPageCount )
{
- mPages[id%NUMBER_OF_CACHED_PAGES].actor.SetVisible(false);
+ mPages[id%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::VISIBLE,false);
}
// Guard against destruction during signal emission
{
if(mCurrentPageIndex+i < mTotalPageCount)
{
- mPages[( mCurrentPageIndex+i )%NUMBER_OF_CACHED_PAGES].actor.SetZ( -static_cast<float>( i )*STATIC_PAGE_INTERVAL_DISTANCE );
+ mPages[( mCurrentPageIndex+i )%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::POSITION_Z, -static_cast<float>( i )*STATIC_PAGE_INTERVAL_DISTANCE );
}
if( mCurrentPageIndex >= i + 1 )
{
- mPages[( mCurrentPageIndex-i-1 )%NUMBER_OF_CACHED_PAGES].actor.SetZ( -static_cast<float>( i )*STATIC_PAGE_INTERVAL_DISTANCE );
+ mPages[( mCurrentPageIndex-i-1 )%NUMBER_OF_CACHED_PAGES].actor.SetProperty( Actor::Property::POSITION_Z, -static_cast<float>( i )*STATIC_PAGE_INTERVAL_DISTANCE );
}
}
}
mPages[ index ].actor.RemoveConstraints();
mPages[ index ].UseEffect( mSpineEffectShader );
float degree = mTurningPageIndex==mCurrentPageIndex ? 0.f :180.f;
- mPages[index].actor.SetOrientation( Degree(degree), Vector3::YAXIS );
+ mPages[index].actor.SetProperty( Actor::Property::ORIENTATION, Quaternion( Degree(degree), Vector3::YAXIS ) );
mPageUpdated = true;
}
switch( index )
{
- case Toolkit::PageTurnView::Property::PAGE_SIZE:
+ case Toolkit::PageTurnView::Property::VIEW_PAGE_SIZE:
{
pageTurnViewImpl.SetPageSize( value.Get<Vector2>() );
break;
switch( index )
{
- case Toolkit::PageTurnView::Property::PAGE_SIZE:
+ case Toolkit::PageTurnView::Property::VIEW_PAGE_SIZE:
{
value = pageTurnViewImpl.GetPageSize();
break;