From 70337c87eb5b0d5678117b6ab7e41099b62614e1 Mon Sep 17 00:00:00 2001 From: Xiangyin Ma Date: Tue, 11 Aug 2015 16:24:17 +0100 Subject: [PATCH] PageTurnView cleanup Change-Id: Ib6e198b14699da4d7f3bc8fcc6aa772012028d85 --- .../src/dali-toolkit/utc-Dali-PageTurnView.cpp | 195 ++------ build/tizen/dali-toolkit/Makefile.am | 4 +- dali-toolkit/dali-toolkit.h | 4 + .../controls/page-turn-view/page-factory.cpp | 87 ---- .../controls/page-turn-view/page-factory.h | 123 ------ dali-toolkit/devel-api/file.list | 10 - .../page-turn-view/page-turn-book-spine-effect.h | 71 ++- .../controls/page-turn-view/page-turn-effect.cpp | 95 +--- .../controls/page-turn-view/page-turn-effect.h | 7 +- .../page-turn-landscape-view-impl.cpp | 15 +- .../page-turn-view/page-turn-landscape-view-impl.h | 7 +- .../page-turn-portrait-view-impl.cpp | 29 +- .../page-turn-view/page-turn-portrait-view-impl.h | 11 +- .../page-turn-view/page-turn-view-impl.cpp | 492 ++++++++++----------- .../controls/page-turn-view/page-turn-view-impl.h | 121 ++--- .../controls/page-turn-view/page-factory.h | 60 +++ .../page-turn-view/page-turn-landscape-view.cpp | 2 +- .../page-turn-view/page-turn-landscape-view.h | 2 +- .../page-turn-view/page-turn-portrait-view.cpp | 2 +- .../page-turn-view/page-turn-portrait-view.h | 2 +- .../controls/page-turn-view/page-turn-view.cpp | 47 +- .../controls/page-turn-view/page-turn-view.h | 93 ++-- dali-toolkit/public-api/file.list | 9 + 23 files changed, 524 insertions(+), 964 deletions(-) delete mode 100644 dali-toolkit/devel-api/controls/page-turn-view/page-factory.cpp delete mode 100644 dali-toolkit/devel-api/controls/page-turn-view/page-factory.h create mode 100644 dali-toolkit/public-api/controls/page-turn-view/page-factory.h rename dali-toolkit/{devel-api => public-api}/controls/page-turn-view/page-turn-landscape-view.cpp (95%) rename dali-toolkit/{devel-api => public-api}/controls/page-turn-view/page-turn-landscape-view.h (97%) rename dali-toolkit/{devel-api => public-api}/controls/page-turn-view/page-turn-portrait-view.cpp (95%) rename dali-toolkit/{devel-api => public-api}/controls/page-turn-view/page-turn-portrait-view.h (97%) rename dali-toolkit/{devel-api => public-api}/controls/page-turn-view/page-turn-view.cpp (64%) rename dali-toolkit/{devel-api => public-api}/controls/page-turn-view/page-turn-view.h (70%) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-PageTurnView.cpp b/automated-tests/src/dali-toolkit/utc-Dali-PageTurnView.cpp index 0edd638..fc4b308 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-PageTurnView.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-PageTurnView.cpp @@ -20,12 +20,11 @@ #include #include #include -#include #include -#include -#include -#include -#include +#include +#include +#include +#include @@ -222,8 +221,6 @@ public: actor.SetParentOrigin( ParentOrigin::CENTER ); actor.SetAnchorPoint( AnchorPoint::CENTER ); - SetActorHittability( actor, true ); - mSourceActors[pageId] = actor; } @@ -333,163 +330,52 @@ int UtcDaliPageTurnLandscapeViewNew(void) END_TEST; } -int UtcDaliPageTurnViewSetAndGetSpineShadowParameter(void) +int UtcDaliPageTurnViewSetGetProperty(void) { ToolkitTestApplication application; - tet_infoline(" UtcDaliPageTurnViewSetAndGetSpineShadowParameter "); + tet_infoline(" UtcDaliPageTurnViewSetGetProperty "); TestPageFactory factory(application); PageTurnView landscapeView = PageTurnLandscapeView::New( factory, PAGE_SIZE ); - DALI_TEST_CHECK( landscapeView.GetSpineShadowParameter() != SPINE_SHADOW_PARAMETER); - landscapeView.SetSpineShadowParameter(SPINE_SHADOW_PARAMETER); - DALI_TEST_CHECK( landscapeView.GetSpineShadowParameter() == SPINE_SHADOW_PARAMETER); - END_TEST; -} - -int UtcDaliPageTurnViewGoToPageAndGetCurrentPage(void) -{ - ToolkitTestApplication application; - - tet_infoline(" UtcDaliPageTurnViewGoToPageAndGetCurrentPage "); - - TestPageFactory factory(application); - PageTurnView portraitView = PageTurnPortraitView::New( factory, PAGE_SIZE ); - DALI_TEST_CHECK( portraitView.GetCurrentPage() == 0 ); - - portraitView.GoToPage( 10 ); - DALI_TEST_CHECK( portraitView.GetCurrentPage() == 10 ); - - portraitView.GoToPage( 5 ); - DALI_TEST_CHECK( portraitView.GetCurrentPage() == 5 ); - END_TEST; -} - -int UtcDaliPageTurnViewEnterLeaveEditMode(void) -{ - ToolkitTestApplication application; - - tet_infoline( " UtcDaliPageTurnViewEnterLeaveEditMode " ); - - application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - - TestPageFactory factory(application); - factory.EnableOffscreenRendering( ); - - PageTurnView pageTurnView = PageTurnLandscapeView::New( factory, PAGE_SIZE ); - pageTurnView.SetPositionInheritanceMode( USE_PARENT_POSITION ); - Stage::GetCurrent().Add( pageTurnView ); - - Vector2 size = Stage::GetCurrent().GetSize(); - - pageTurnView.GoToPage(5); - - // Render and notify - application.SendNotification(); - application.Render(RENDER_FRAME_INTERVAL); - - Actor actor = pageTurnView.EnterEditMode(); - // Test that when entering edit mode, current page source actor is returned. - unsigned int pageId; - std::istringstream( actor.GetName() ) >> pageId; - DALI_TEST_CHECK( pageId == 5 ); - - bool signalVerified; - PageTurnView currentView; - unsigned int pageIndex; - bool isTurningForwards; - PageSignalCallback callbackPanStarted( signalVerified, currentView, pageIndex, isTurningForwards ); - pageTurnView.PagePanStartedSignal().Connect( &callbackPanStarted, &PageSignalCallback::PagePanSignalCallback ); - - currentView = pageTurnView; - pageIndex = 5; - DALI_TEST_CHECK( !callbackPanStarted.mSignalVerified ); - - // Test that the control does not receive pan gesture in edit-mode - PerformGestureDiagonalSwipe( application, Vector2(size*0.75f), Vector2(size*0.01f), 10, true, true); - DALI_TEST_CHECK( !callbackPanStarted.mSignalVerified ); - - pageTurnView.LeaveEditMode(); - // Test that the control receives pan gesture after leaving edit-mode - PerformGestureDiagonalSwipe( application, Vector2(size*0.75f), Vector2(size*0.01f), 10, true, true); - DALI_TEST_CHECK( callbackPanStarted.mSignalVerified ); - END_TEST; -} - -int UtcDaliPageTurnViewGetHitActor(void) -{ - ToolkitTestApplication application; - - tet_infoline(" UtcDaliPageTurnViewGetHitActor "); - - application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - - TestPageFactory factory(application); - factory.EnableOffscreenRendering( ); - - PageTurnView pageTurnView = PageTurnPortraitView::New( factory, PAGE_SIZE ); - pageTurnView.SetParentOrigin( ParentOrigin::TOP_LEFT ); - pageTurnView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - Stage::GetCurrent().Add( pageTurnView ); + DALI_TEST_CHECK( landscapeView ); - // Render and notify - application.SendNotification(); - application.Render(RENDER_FRAME_INTERVAL); + Stage::GetCurrent().Add( landscapeView ); - pageTurnView.GoToPage(3); + // Test "page-size" property + DALI_TEST_CHECK( landscapeView.GetPropertyIndex("page-size") == PageTurnView::Property::PAGE_SIZE ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::PAGE_SIZE).Get(), PAGE_SIZE, TEST_LOCATION ); - Vector2 localCoordinate = Vector2(); - Vector2 screenCoordinate = PAGE_SIZE*0.5f+Vector2(7.f,8.f); - Actor hitActor = pageTurnView.GetHitActor( screenCoordinate, localCoordinate ); - DALI_TEST_CHECK( hitActor ); - unsigned int pageId; - std::istringstream( hitActor.GetName() ) >> pageId; - DALI_TEST_CHECK( pageId == 3 ); - DALI_TEST_EQUALS( localCoordinate, IMAGE_SIZE*0.5f+Vector2(7.f,8.f), 0.1f, TEST_LOCATION ); + Vector2 newSize( PAGE_SIZE.x*0.75, PAGE_SIZE.y*0.5f ); + landscapeView.SetProperty( PageTurnView::Property::PAGE_SIZE, newSize ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::PAGE_SIZE).Get(), newSize, TEST_LOCATION ); + Wait( application); + DALI_TEST_EQUALS( Vector2(landscapeView.GetTargetSize()), Vector2(newSize.x*2.f, newSize.y), TEST_LOCATION); - screenCoordinate = PAGE_SIZE*0.5f+IMAGE_SIZE; - hitActor = pageTurnView.GetHitActor( screenCoordinate, localCoordinate ); - DALI_TEST_CHECK( !hitActor ); - END_TEST; -} + landscapeView.SetProperty( PageTurnView::Property::PAGE_SIZE,newSize*1.5f); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::PAGE_SIZE).Get(), newSize*1.5f, TEST_LOCATION ); + Wait( application); + DALI_TEST_EQUALS( Vector2(landscapeView.GetTargetSize()), Vector2(newSize.x*3.f, newSize.y*1.5f), TEST_LOCATION); -int UtcDaliPageTurnViewRefresh(void) -{ - ToolkitTestApplication application; + // Test "current-page-id" property + DALI_TEST_CHECK( landscapeView.GetPropertyIndex("current-page-id") == PageTurnView::Property::CURRENT_PAGE_ID ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), 0, TEST_LOCATION ); - tet_infoline(" UtcDaliPageTurnViewRefresh "); + int pageId = static_cast(TOTAL_PAGE_NUMBER)/3; + landscapeView.SetProperty( PageTurnView::Property::CURRENT_PAGE_ID, pageId ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), pageId, TEST_LOCATION ); - application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); + landscapeView.SetProperty( PageTurnView::Property::CURRENT_PAGE_ID, pageId*2 ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), pageId*2, TEST_LOCATION ); - TestPageFactory factory(application); - factory.EnableOffscreenRendering( ); - PageTurnView pageTurnView = PageTurnPortraitView::New( factory, PAGE_SIZE ); - pageTurnView.SetParentOrigin( ParentOrigin::TOP_LEFT ); - pageTurnView.SetAnchorPoint( AnchorPoint::TOP_LEFT ); - Stage::GetCurrent().Add( pageTurnView ); + // Test "spin-shadow" property + DALI_TEST_CHECK( landscapeView.GetPropertyIndex( "spine-shadow" ) == PageTurnView::Property::SPINE_SHADOW ); + landscapeView.SetProperty( PageTurnView::Property::SPINE_SHADOW, SPINE_SHADOW_PARAMETER ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::SPINE_SHADOW).Get(), SPINE_SHADOW_PARAMETER, TEST_LOCATION ); - // Render and notify - application.SendNotification(); - application.Render(RENDER_FRAME_INTERVAL); - application.Render(RENDER_FRAME_INTERVAL); - application.SendNotification(); + landscapeView.SetProperty( PageTurnView::Property::SPINE_SHADOW, SPINE_SHADOW_PARAMETER*0.75f ); + DALI_TEST_EQUALS( landscapeView.GetProperty(PageTurnView::Property::SPINE_SHADOW).Get(), SPINE_SHADOW_PARAMETER*0.75f, TEST_LOCATION ); - factory.DeletePage( 0 ); - - pageTurnView.RefreshCurrentPage(); - // simply calls the certain off screen render task to refresh - Vector2 localCoordinate = Vector2(); - Vector2 screenCoordinate = PAGE_SIZE*0.5f; - Actor hitActor = pageTurnView.GetHitActor( screenCoordinate, localCoordinate ); - unsigned int pageId; - std::istringstream( hitActor.GetName() ) >> pageId; - DALI_TEST_CHECK( pageId == 0 ); - - pageTurnView.RefreshAll(); - // re-parent all the source actors and refresh - hitActor = pageTurnView.GetHitActor( screenCoordinate, localCoordinate ); - std::istringstream( hitActor.GetName() ) >> pageId; - DALI_TEST_CHECK( pageId == 1 ); END_TEST; } @@ -544,7 +430,7 @@ int UtcDaliPageTurnViewSignals(void) Vector2 start = size * 0.75f; Vector2 direction = -size*0.05f; //-size*0.5f/10.f; - DALI_TEST_CHECK( portraitView.GetCurrentPage() == 0); + DALI_TEST_EQUALS( portraitView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), 0, TEST_LOCATION ); PerformGestureDiagonalSwipe( application, start, direction, 5, true, false); DALI_TEST_CHECK( callbackTurnStarted.mSignalVerified ); DALI_TEST_CHECK( !callbackTurnFinished.mSignalVerified ); @@ -557,14 +443,15 @@ int UtcDaliPageTurnViewSignals(void) Wait(application, 1000); DALI_TEST_CHECK( callbackTurnFinished.mSignalVerified ); - DALI_TEST_CHECK( portraitView.GetCurrentPage() == pageIndex+1); // the page is turn over + // the page is turn over + DALI_TEST_EQUALS( portraitView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), pageIndex+1, TEST_LOCATION ); //---Test 2: pan from position( size*0.5f ) to position( size.width, size.height*0.5f ) to position( size * 0.75f ), page 1 will bent then slid back--- callbackTurnStarted.Reset(); callbackTurnFinished.Reset(); callbackPanStarted.Reset(); callbackPanFinished.Reset(); - portraitView.GoToPage(5); + portraitView.SetProperty( PageTurnView::Property::CURRENT_PAGE_ID, 5 ); pageIndex = 5; isTurningForwards = true; @@ -586,14 +473,14 @@ int UtcDaliPageTurnViewSignals(void) Wait(application, 1000); DALI_TEST_CHECK( callbackTurnFinished.mSignalVerified ); - DALI_TEST_CHECK( portraitView.GetCurrentPage() == pageIndex); // the page is not turned over + DALI_TEST_EQUALS( portraitView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), pageIndex, TEST_LOCATION ); // the page is not turned over // ----Test 3: pan 10 frames from position( size*0.25f ) to position( size.width*0.75f, size.height*0.25f ), the previous page will be turned backwards--- callbackTurnStarted.Reset(); callbackTurnFinished.Reset(); callbackPanStarted.Reset(); callbackPanFinished.Reset(); - portraitView.GoToPage(10); + portraitView.SetProperty( PageTurnView::Property::CURRENT_PAGE_ID, 10); pageIndex = 9; // will turn the previous page back isTurningForwards = false; start = size*0.25f; @@ -612,6 +499,6 @@ int UtcDaliPageTurnViewSignals(void) Wait( application, 1000 ); DALI_TEST_CHECK( callbackTurnFinished.mSignalVerified ); - DALI_TEST_CHECK( portraitView.GetCurrentPage() == 9); + DALI_TEST_EQUALS( portraitView.GetProperty(PageTurnView::Property::CURRENT_PAGE_ID).Get(), 9, TEST_LOCATION ); END_TEST; } diff --git a/build/tizen/dali-toolkit/Makefile.am b/build/tizen/dali-toolkit/Makefile.am index 948b4cf..b5ba49a 100644 --- a/build/tizen/dali-toolkit/Makefile.am +++ b/build/tizen/dali-toolkit/Makefile.am @@ -86,7 +86,6 @@ develapibubbleemitterdir = $(develapicontrolsdir)/bubble-effect develapieffectsviewdir = $(develapicontrolsdir)/effects-view develapimagnifierdir = $(develapicontrolsdir)/magnifier develapipopupdir = $(develapicontrolsdir)/popup -develapipageturnviewdir = $(develapicontrolsdir)/page-turn-view develapisliderdir = $(develapicontrolsdir)/slider develapishadowviewdir = $(develapicontrolsdir)/shadow-view develapisuperblurviewdir = $(develapicontrolsdir)/super-blur-view @@ -105,7 +104,6 @@ develapibuilder_HEADERS = $(devel_api_builder_header_files) develapieffectsview_HEADERS = $(devel_api_effects_view_header_files) develapifocusmanager_HEADERS = $(devel_api_focus_manager_header_files) develapimagnifier_HEADERS = $(devel_api_magnifier_header_files) -develapipageturnview_HEADERS = $(devel_api_page_turn_view_header_files) develapipopup_HEADERS = $(devel_api_popup_header_files) develapiscripting_HEADERS = $(devel_api_scripting_header_files) develapishadowview_HEADERS = $(devel_api_shadow_view_header_files) @@ -127,6 +125,7 @@ publicapidefaultcontrolsdir = $(publicapicontrolsdir)/default-controls publicapigaussianblurviewdir = $(publicapicontrolsdir)/gaussian-blur-view publicapiimageviewdir = $(publicapicontrolsdir)/image-view publicapimodel3dviewdir = $(publicapicontrolsdir)/model3d-view +publicapipageturnviewdir = $(publicapicontrolsdir)/page-turn-view publicapiscrollbardir = $(publicapicontrolsdir)/scroll-bar publicapiscrollabledir = $(publicapicontrolsdir)/scrollable publicapiscrollviewdir = $(publicapicontrolsdir)/scrollable/scroll-view @@ -147,6 +146,7 @@ publicapigaussianblurview_HEADERS = $(public_api_gaussian_blur_view_header_fi publicapiimageview_HEADERS = $(public_api_image_view_header_files) publicapiitemview_HEADERS = $(public_api_item_view_header_files) publicapimodel3dview_HEADERS = $(public_api_model3d_view_header_files) +publicapipageturnview_HEADERS = $(public_api_page_turn_view_header_files) publicapiscrollbar_HEADERS = $(public_api_scroll_bar_header_files) publicapiscrollable_HEADERS = $(public_api_scrollable_header_files) publicapiscrollview_HEADERS = $(public_api_scroll_view_header_files) diff --git a/dali-toolkit/dali-toolkit.h b/dali-toolkit/dali-toolkit.h index 7f40633..19a1993 100644 --- a/dali-toolkit/dali-toolkit.h +++ b/dali-toolkit/dali-toolkit.h @@ -32,6 +32,10 @@ #include #include #include +#include +#include +#include +#include #include #include #include diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-factory.cpp b/dali-toolkit/devel-api/controls/page-turn-view/page-factory.cpp deleted file mode 100644 index 118ff92..0000000 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-factory.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * Copyright (c) 2015 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 - -namespace Dali -{ - -namespace Toolkit -{ - -const std::string PageFactory::ACTOR_HITTABLE( "actor-hittable" ); - -PageFactory::PageFactory( ) -: mNeedOffscreenRendering( false ) -{ -} - -PageFactory::~PageFactory() -{ -} - -void PageFactory::EnableOffscreenRendering( ) -{ - mNeedOffscreenRendering = true; -} - -bool PageFactory::IsOffscreenRenderingNeeded() -{ - return mNeedOffscreenRendering; -} - -void PageFactory::SetActorHittability( Actor actor, bool hittable ) -{ - // Create actor focusable property if not already created. - Property::Index propertyActorHittable = actor.GetPropertyIndex(ACTOR_HITTABLE); - if(propertyActorHittable == Property::INVALID_INDEX && hittable) - { - actor.RegisterProperty(ACTOR_HITTABLE, true); - } - else - { - actor.SetProperty( propertyActorHittable, hittable ); - } -} - -bool PageFactory::GetActorHittability( Actor actor ) -{ - bool hittable = false; - - Property::Index propertyActorHittable = actor.GetPropertyIndex(ACTOR_HITTABLE); - if(propertyActorHittable != Property::INVALID_INDEX) - { - hittable = actor.GetProperty( propertyActorHittable ); - } - - return hittable; -} - -PageFactory::RefreshSignal& PageFactory::PageRefreshSignal() -{ - return mPageRefreshSignal; -} - -void PageFactory::EmitPageRefreshSignal( int pageId ) -{ - mPageRefreshSignal.Emit( pageId ); -} - -} // namespace Toolkit - -} // namespace Dali diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-factory.h b/dali-toolkit/devel-api/controls/page-turn-view/page-factory.h deleted file mode 100644 index c0d09a2..0000000 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-factory.h +++ /dev/null @@ -1,123 +0,0 @@ -#ifndef __DALI_TOOLKIT_PAGE_FACTORY_H__ -#define __DALI_TOOLKIT_PAGE_FACTORY_H__ - -/* - * Copyright (c) 2015 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. - * - */ - -// EXTERNAL INCLUDES -#include - -namespace Dali -{ - -namespace Toolkit -{ - -/** - * PageFactory is an abstract interface for providing image actors to PageTurnView - * Each image actor is identified by a unique ID, and has a linear order from 0 to GetNumberOfPages()-1 - */ -class DALI_IMPORT_API PageFactory -{ -public: - // Property Names - static const std::string ACTOR_HITTABLE; ///< name "actor-hittable", type bool - -public: - - /** - * Constructor - * By default, the off screen rendering is disabled - * Is off screen rendering is required to create the page image, - * call EnableOffscreenRendering() before pass it as parameter to the PageTurnView - */ - PageFactory(); - - /** - * Virtual destructor - */ - virtual ~PageFactory(); - - /** - * Enable the off screen rendering to create the page image from actor tree - */ - void EnableOffscreenRendering( ); - - /** - * Query whether offscreen rendering is needed to create the page image - * @return - */ - bool IsOffscreenRenderingNeeded(); - - /** - * Query the number of pages available from the factory. - * The maximum available page has an ID of GetNumberOfPages()-1. - */ - virtual unsigned int GetNumberOfPages() = 0; - - /** - * Create an actor to represent the page content. - * @param[in] pageId The ID of the page to create. - * @return An actor, or an uninitialized pointer if the ID is out of range. - */ - virtual Actor NewPage( unsigned int pageId ) = 0; - -public: //Signal - /** - * Signal type for notification - */ - typedef Signal< void ( int ) > RefreshSignal; - - /** - * Signal emitted when the Actor tree is ready for rendering into the page image. - * The signal is connected to the page refresh function inside PageTurnView. - */ - RefreshSignal& PageRefreshSignal(); - - /** - * Emit the page ready singal. The PageTurn view will be notified to refresh the given page accordingly. - * @param[in] pageId the index of the page which is ready for refreshing. - */ - void EmitPageRefreshSignal( int pageId ); - -protected: - - /** - * Sets whether an actor should be hittable for the PageTurnView::GetHitActor(). - * It is useful when a sub-tree should be hit instead of the 'leaf' actor in the actor tree. - * By default, actors are not hittable for PageTurnView::GetHitActor() - * @param[in] actor The actor to be set with the hittablity - * @param[in] hittable True to be hittable, false otherwise. - */ - void SetActorHittability( Actor actor, bool hittable ); - - /** - * Query whether an actor is hittable for the PageTurnView::GetHitActor(). - */ - bool GetActorHittability( Actor actor ); - -private: - - bool mNeedOffscreenRendering; - - RefreshSignal mPageRefreshSignal; -}; - -} // namespace Toolkit - -} // namespace Dali -#endif /* __DALI_TOOLKIT_PAGE_FACTORY_H__ */ diff --git a/dali-toolkit/devel-api/file.list b/dali-toolkit/devel-api/file.list index c5187c3..9668fcd 100755 --- a/dali-toolkit/devel-api/file.list +++ b/dali-toolkit/devel-api/file.list @@ -8,10 +8,6 @@ devel_api_src_files = \ $(devel_api_src_dir)/controls/bubble-effect/bubble-emitter.cpp \ $(devel_api_src_dir)/controls/effects-view/effects-view.cpp \ $(devel_api_src_dir)/controls/magnifier/magnifier.cpp \ - $(devel_api_src_dir)/controls/page-turn-view/page-factory.cpp \ - $(devel_api_src_dir)/controls/page-turn-view/page-turn-landscape-view.cpp \ - $(devel_api_src_dir)/controls/page-turn-view/page-turn-portrait-view.cpp \ - $(devel_api_src_dir)/controls/page-turn-view/page-turn-view.cpp \ $(devel_api_src_dir)/controls/popup/confirmation-popup.cpp \ $(devel_api_src_dir)/controls/popup/popup.cpp \ $(devel_api_src_dir)/controls/shadow-view/shadow-view.cpp \ @@ -47,12 +43,6 @@ devel_api_effects_view_header_files = \ devel_api_magnifier_header_files = \ $(devel_api_src_dir)/controls/magnifier/magnifier.h -devel_api_page_turn_view_header_files = \ - $(devel_api_src_dir)/controls/page-turn-view/page-factory.h \ - $(devel_api_src_dir)/controls/page-turn-view/page-turn-landscape-view.h \ - $(devel_api_src_dir)/controls/page-turn-view/page-turn-portrait-view.h \ - $(devel_api_src_dir)/controls/page-turn-view/page-turn-view.h - devel_api_popup_header_files = \ $(devel_api_src_dir)/controls/popup/confirmation-popup.h \ $(devel_api_src_dir)/controls/popup/popup.h diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h index 548f13c..3f6727f 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-book-spine-effect.h @@ -41,8 +41,6 @@ namespace Internal * please set the uniforms with the same values as the PageTurnEffect. * * Animatable/Constrainable uniforms: - * "uShadowWidth" - The width of shadow to be pageSize * shadowWidth. This shadow appears at the edges of the actor - * which is not visible on static pages * "uSpineShadowParameter" - The two parameters are the major&minor radius (in pixels) to form an ellipse shape. The top-left * quarter of this ellipse is used to calculate spine normal for simulating shadow * "uIsBackImageVisible" - Set whether the current page is with its backside visible. Need to pass the parameter as true for @@ -53,58 +51,47 @@ namespace Internal **/ inline ShaderEffect CreatePageTurnBookSpineEffect() { - std::string vertexSource( - "precision mediump float;\n" - "uniform float uShadowWidth;\n" - " void main()\n" - " {\n" - " gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n" - " vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n" - " vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n" - " }"); + std::string vertexSource = DALI_COMPOSE_SHADER( + precision mediump float;\n + void main()\n + {\n + gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n + vTexCoord = aTexCoord;\n + }\n); // the simplified version of the fragment shader of page turn effect - std::string fragmentSource( - "precision mediump float;\n" - "uniform float uIsBackImageVisible;\n" - "uniform float uPageWidth;\n" - "uniform vec2 uSpineShadowParameter;\n" - " void main()\n" - " {\n" - // leave the border for display shadow, not visible( out of the screen ) when the page is static - " if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p )\n" - " {\n" - " gl_FragColor = vec4( 0.0 );\n" - " }\n" - " else \n" - " { \n" + std::string fragmentSource = DALI_COMPOSE_SHADER( + precision mediump float;\n + uniform float uIsBackImageVisible;\n + uniform float uPageWidth;\n + uniform vec2 uSpineShadowParameter;\n + void main()\n + {\n // flip the image horizontally by changing the x component of the texture coordinate - " if( uIsBackImageVisible == 1.0 ) gl_FragColor = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) ) * uColor; \n" - " else gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n" - " \n" + if( uIsBackImageVisible == 1.0 )\n + gl_FragColor = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) ) * uColor; \n + else\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n // display book spine, a stripe of shadowed texture - " float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageWidth; \n" - " if(pixelPos < uSpineShadowParameter.x) \n" - " {\n" - " float x = pixelPos - uSpineShadowParameter.x;\n" - " float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x );\n" - " vec2 spineNormal = normalize(vec2(uSpineShadowParameter.y*x/uSpineShadowParameter.x, y));\n" - " gl_FragColor.rgb *= spineNormal.y; \n" - " }" - " }\n" - " }" ); - - const float DEFAULT_SHADOW_WIDTH(0.15f); + float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageWidth; \n + if(pixelPos < uSpineShadowParameter.x) \n + {\n + float x = pixelPos - uSpineShadowParameter.x;\n + float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x );\n + vec2 spineNormal = normalize(vec2(uSpineShadowParameter.y*x/uSpineShadowParameter.x, y));\n + gl_FragColor.rgb *= spineNormal.y; \n + } + } ); + const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f); ShaderEffect shaderEffect = ShaderEffect::New( vertexSource, fragmentSource ); shaderEffect.SetUniform( "uIsBackImageVisible", -1.f ); - shaderEffect.SetUniform( "uShadowWidth", DEFAULT_SHADOW_WIDTH ); shaderEffect.SetUniform( "uSpineShadowParameter", DEFAULT_SPINE_SHADOW_PARAMETER ); float defaultPageWidth = Dali::Stage::GetCurrent().GetSize().x; - shaderEffect.SetUniform( "uPageWidth", defaultPageWidth/(1.f-DEFAULT_SHADOW_WIDTH) ); + shaderEffect.SetUniform( "uPageWidth", defaultPageWidth ); return shaderEffect; } diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp index 5266caa..3684e70 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.cpp @@ -96,7 +96,7 @@ void Dali::Toolkit::Internal::PageTurnApplyInternalConstraint( ShaderEffect& sha constraint.Apply(); } -ShaderEffect Dali::Toolkit::Internal::CreatePageTurnEffect(bool enableBlending) +ShaderEffect Dali::Toolkit::Internal::CreatePageTurnEffect() { std::string vertexShader = DALI_COMPOSE_SHADER( /* @@ -121,7 +121,6 @@ ShaderEffect Dali::Toolkit::Internal::CreatePageTurnEffect(bool enableBlending) \n uniform vec2 uPageSize;\n uniform float uIsTurningBack;\n - uniform float uShadowWidth;\n varying vec3 vNormal;\n varying vec4 vPosition;\n varying float vEdgeShadow;\n @@ -253,33 +252,10 @@ ShaderEffect Dali::Toolkit::Internal::CreatePageTurnEffect(bool enableBlending) vTexCoord = aTexCoord; vNormal = uNormalMatrix*normal;\n vPosition = uModelView * position;\n - ); - - std::string vertexShaderWithFakedShadow = DALI_COMPOSE_SHADER( - // display shadow, the fake shadow value is calculated according to the height and the distance from page edge - vTexCoord.x = (aTexCoord.x-sTextureRect.s) /( 1.0 - uShadowWidth ) + sTextureRect.s;\n - vTexCoord.y = ( aTexCoord.y-sTextureRect.t-0.5*uShadowWidth*(sTextureRect.q-sTextureRect.t) )/( 1.0 - uShadowWidth ) + sTextureRect.t;\n - float heightCoef = (1.0 + position.z*uIsTurningBack*3.0 / uPageSize.x) * 0.6; - vEdgeShadow = clamp(0.9 - heightCoef, 0.0, 0.9 ); \n - if( vTexCoord.y >= sTextureRect.q || vTexCoord.y <= sTextureRect.t || vTexCoord.x >= sTextureRect.p )\n - {\n - float inversedShadowWidth = (1.0-uShadowWidth) / uShadowWidth ;\n - float alpha1 = (vTexCoord.x-sTextureRect.p) * inversedShadowWidth / (sTextureRect.p - sTextureRect.s);\n - inversedShadowWidth = 2.0 * inversedShadowWidth / (sTextureRect.q - sTextureRect.t); \n - float alpha2 = (vTexCoord.y-sTextureRect.q) * inversedShadowWidth;\n - float alpha3 = (sTextureRect.t-vTexCoord.y) * inversedShadowWidth;\n - float alpha;\n - if(alpha1 > 0.0 && alpha2 > 0.0) alpha = sqrt(alpha2*alpha2+alpha1*alpha1)/sqrt(1.0 + max(alpha1,alpha2)*max(alpha1,alpha2));\n //bottom-right corner - else if(alpha1 > 0.0 && alpha3 > 0.0) alpha = sqrt(alpha3*alpha3+alpha1*alpha1)/sqrt(1.0+max(alpha1,alpha3)*max(alpha1,alpha3));\n //top-right corner - else alpha = max(alpha1,max(alpha2,alpha3)); \n - alpha = 0.9 - alpha*0.9;\n - vEdgeShadow = clamp(alpha - heightCoef, 0.0, 0.9 ); \n }\n ); - std::string vertexShaderEnd("}"); - - std::string fragmentShaderPartOne = DALI_COMPOSE_SHADER( + std::string fragmentShader = DALI_COMPOSE_SHADER( precision mediump float;\n uniform vec2 uPageSize;\n uniform vec2 uSpineShadowParameter;\n @@ -293,64 +269,35 @@ ShaderEffect Dali::Toolkit::Internal::CreatePageTurnEffect(bool enableBlending) vec3 normal = normalize(vNormal);\n vec4 texel;\n float spineShadowCoef = 1.0; \n - ); - - std::string fragmentShaderWithFakedShadow = DALI_COMPOSE_SHADER( - if( vTexCoord.y > sTextureRect.q || vTexCoord.y < sTextureRect.t || vTexCoord.x > sTextureRect.p )\n - texel = vec4(0.0,0.0,0.0,vEdgeShadow); - else \n - ); - - std::string fragmentShaderPartTwo = DALI_COMPOSE_SHADER( - { \n - // display page content - // display back image of the page, flip the texture - if( dot(vPosition.xyz, normal) > 0.0 ) texel = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) );\n - // display front image of the page - else texel = texture2D( sTexture, vTexCoord );\n - // display book spine, a stripe of shadowed texture - float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageSize.x; \n - if(pixelPos < uSpineShadowParameter.x) \n - {\n - float x = pixelPos - uSpineShadowParameter.x;\n - float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x);\n - spineShadowCoef = normalize( vec2( uSpineShadowParameter.y*x/uSpineShadowParameter.x, y ) ).y;\n - }\n - }\n - // calculate the lighting - // set the ambient color as vec3(0.4); - float lightColor = abs( normal.z ) * 0.6 + 0.4;\n - gl_FragColor = vec4( ( spineShadowCoef* lightColor)* texel.rgb , texel.a ) * uColor;\n + // display page content + // display back image of the page, flip the texture + if( dot(vPosition.xyz, normal) > 0.0 ) texel = texture2D( sTexture, vec2( sTextureRect.p+sTextureRect.s-vTexCoord.x, vTexCoord.y ) );\n + // display front image of the page + else texel = texture2D( sTexture, vTexCoord );\n + // display book spine, a stripe of shadowed texture + float pixelPos = (vTexCoord.x-sTextureRect.s)*uPageSize.x; \n + if(pixelPos < uSpineShadowParameter.x) \n + {\n + float x = pixelPos - uSpineShadowParameter.x;\n + float y = sqrt( uSpineShadowParameter.x*uSpineShadowParameter.x - x*x);\n + spineShadowCoef = normalize( vec2( uSpineShadowParameter.y*x/uSpineShadowParameter.x, y ) ).y;\n + }\n + // calculate the lighting + // set the ambient color as vec3(0.4); + float lightColor = abs( normal.z ) * 0.6 + 0.4;\n + gl_FragColor = vec4( ( spineShadowCoef* lightColor)* texel.rgb , texel.a ) * uColor;\n } ); // Create the implementation, temporarily owned on stack, - Dali::ShaderEffect shaderEffectCustom; - std::ostringstream vertexShaderStringStream; - std::ostringstream fragmentShaderStringStream; - if( enableBlending ) - { - vertexShaderStringStream<< vertexShader << vertexShaderWithFakedShadow << vertexShaderEnd; - fragmentShaderStringStream<< fragmentShaderPartOne << fragmentShaderWithFakedShadow << fragmentShaderPartTwo; - shaderEffectCustom = Dali::ShaderEffect::New( vertexShaderStringStream.str(), fragmentShaderStringStream.str(), - ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER | ShaderEffect::HINT_BLENDING) ); - } - else - { - vertexShaderStringStream<< vertexShader << vertexShaderEnd; - fragmentShaderStringStream<< fragmentShaderPartOne << fragmentShaderPartTwo; - shaderEffectCustom = Dali::ShaderEffect::New( vertexShaderStringStream.str(), fragmentShaderStringStream.str(), - ShaderEffect::GeometryHints( ShaderEffect::HINT_GRID | ShaderEffect::HINT_DEPTH_BUFFER ) ); - } + Dali::ShaderEffect shaderEffectCustom = Dali::ShaderEffect::New( vertexShader, fragmentShader,ShaderEffect::HINT_GRID ); - static const float DEFAULT_SHADOW_WIDTH(0.15f); static const Vector2 DEFAULT_SPINE_SHADOW_PARAMETER(50.0f, 20.0f); Vector2 defaultPageSize = Dali::Stage::GetCurrent().GetSize(); Dali::Matrix zeroMatrix(true); shaderEffectCustom.SetUniform( "uCommonParameters", zeroMatrix ); - shaderEffectCustom.SetUniform( "uPageSize", defaultPageSize/(1.f-DEFAULT_SHADOW_WIDTH) ); - shaderEffectCustom.SetUniform( "uShadowWidth", DEFAULT_SHADOW_WIDTH ); + shaderEffectCustom.SetUniform( "uPageSize", defaultPageSize ); shaderEffectCustom.SetUniform( "uSpineShadowParameter", DEFAULT_SPINE_SHADOW_PARAMETER ); shaderEffectCustom.RegisterProperty( "uOriginalCenter", Vector2( defaultPageSize[0], defaultPageSize[1]*0.5f ) ); diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h index 1a21b04..59a4603 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-effect.h @@ -68,7 +68,7 @@ void PageTurnApplyInternalConstraint( ShaderEffect& shaderEffect); * //set initial values * pageTurnEffect.SetUniform("uPageSize", Vector2);\n * pageTurnEffect.SetUniform("uOriginalCenter", Vector2);\n - * pageTurnEffect.SetUniform("uIsTurningBack", bool) SetIsTurningBack();\n + * pageTurnEffect.SetUniform("uIsTurningBack", bool);\n * pageTurnEffect.SetUniform("uCurrentCenter",Vector2);\n * * //Animate it with the current center property\n @@ -79,11 +79,8 @@ void PageTurnApplyInternalConstraint( ShaderEffect& shaderEffect); * animation[mAnimationIndex].Play(); \n * * Animatable/Constrainable uniforms: - * - * @param[in] enableBlending If true, apply HINT_BLENDING when creating the shader object; If false, disable the HINT_BLENDING - * @return A handle to a newly allocated ShaderEffect */ -ShaderEffect CreatePageTurnEffect(bool enableBlending = true); +ShaderEffect CreatePageTurnEffect(); } // namespace Internal diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.cpp index 24d5934..ed47428 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.cpp @@ -71,19 +71,6 @@ void PageTurnLandscapeView::OnPageTurnViewInitialize() mTurningPageLayer.SetParentOrigin( ParentOrigin::CENTER ); } -ImageActor PageTurnLandscapeView::NewPageFromRenderBuffer( int pageIndex ) -{ - int index = pageIndex % NUMBER_OF_CACHED_PAGES; - ImageActor page = ImageActor::New( mRenderedPage[ index ], - ImageActor::PixelArea( mPageSize.width, 0, mPageSize.width, mPageSize.height ) ); - if( pageIndex <= mTotalPageCount-1) - { - int nextIndex = (pageIndex+1) % NUMBER_OF_CACHED_PAGES; - page.Add( ImageActor::New( mRenderedPage[ nextIndex ],ImageActor::PixelArea( 0, 0, mPageSize.width, mPageSize.height ) ) ); - } - return page; -} - void PageTurnLandscapeView::OnAddPage( ImageActor newPage, bool isLeftSide ) { newPage.SetParentOrigin( ParentOrigin::CENTER ); @@ -120,10 +107,12 @@ void PageTurnLandscapeView::SetPanActor( const Vector2& panPosition ) if( panPosition.x > mPageSize.width && mCurrentPageIndex < mTotalPageCount-1 ) { mPanActor = mPageActors[mCurrentPageIndex%NUMBER_OF_CACHED_PAGES]; // right side page + mTurningPageIndex = mCurrentPageIndex; } else if( panPosition.x <= mPageSize.width && mCurrentPageIndex > 0 ) { mPanActor = mPageActors[ (mCurrentPageIndex-1)%NUMBER_OF_CACHED_PAGES ]; // left side page + mTurningPageIndex = mCurrentPageIndex - 1; } else { diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.h index eae7640..2033649 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.h +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-landscape-view-impl.h @@ -19,7 +19,7 @@ */ // INTERNAL INCLUDES -#include +#include #include namespace Dali @@ -61,11 +61,6 @@ protected: // From PageTurnView virtual void OnPageTurnViewInitialize(); /** - * copydoc PageTurnView::NewPAgeFromRenderBuffer - */ - virtual ImageActor NewPageFromRenderBuffer( int pageIndex ); - - /** * @copydoc PageTurnView::OnAddPage */ virtual void OnAddPage( ImageActor newPage, bool isLeftSide ); 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 4d761fe..9fe3a00 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 @@ -83,11 +83,6 @@ void PageTurnPortraitView::OnPageTurnViewInitialize() 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; @@ -98,6 +93,7 @@ void PageTurnPortraitView::SetPanActor( const Vector2& panPosition ) if( mCurrentPageIndex < mTotalPageCount ) { mPanActor = mPageActors[mCurrentPageIndex%NUMBER_OF_CACHED_PAGES]; + mTurningPageIndex = mCurrentPageIndex; } else { @@ -124,7 +120,7 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, 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) + if(actor.GetParent() != Self()) { return; } @@ -132,7 +128,8 @@ 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--; @@ -140,6 +137,8 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, AddPage( mCurrentPageIndex-NUMBER_OF_CACHED_PAGES_EACH_SIDE ); OrganizePageDepth(); + mPageActors[mTurningPageIndex%NUMBER_OF_CACHED_PAGES].SetVisible(true); + // Add the page to tuning page layer and set up PageTurnEffect mShadowView.Add( actor ); actor.SetShaderEffect( mTurnEffect[mIndex] ); @@ -152,7 +151,7 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, // Start an animation to turn the previous page back Animation animation = Animation::New( PAGE_TURN_OVER_ANIMATION_DURATION ); - mAnimationActorPair[animation] = actor; + mAnimationPageIdPair[animation] = mCurrentPageIndex; mAnimationIndexPair[animation] = mIndex; animation.AnimateTo( Property( mTurnEffect[mIndex], "uCurrentCenter" ), @@ -166,13 +165,21 @@ void PageTurnPortraitView::OnPossibleOutwardsFlick( const Vector2& panPosition, { SetCullFace( imageActor, CullBack ); } - animation.FinishedSignal().Connect( this, &PageTurnPortraitView::OnTurnedOver ); + animation.FinishedSignal().Connect( this, &PageTurnPortraitView::TurnedOverBackwards ); + } +} + +void PageTurnPortraitView::OnTurnedOver( ImageActor actor, bool isLeftSide ) +{ + if( isLeftSide ) + { + actor.SetVisible( false ); } } -void PageTurnPortraitView::OnTurnedOver( Animation& animation ) +void PageTurnPortraitView::TurnedOverBackwards( Animation& animation ) { - ImageActor imageActor = ImageActor::DownCast( mAnimationActorPair[ animation ] ); + ImageActor imageActor = mPageActors[mAnimationPageIdPair[animation] % NUMBER_OF_CACHED_PAGES]; if( imageActor ) { SetCullFace( imageActor, CullNone ); diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.h index f64e351..0adb4e5 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.h +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-portrait-view-impl.h @@ -19,7 +19,7 @@ */ // INTERNAL INCLUDES -#include +#include #include namespace Dali @@ -65,11 +65,6 @@ protected: // From PageTurnView virtual void OnPageTurnViewInitialize(); /** - * @copydoc PageTurnView::NewPageFromRenderBuffer - */ - virtual ImageActor NewPageFromRenderBuffer( int pageIndex ); - - /** * @copydoc PageTurnView::SetPanPosition */ virtual Vector2 SetPanPosition( const Vector2& gesturePosition ); @@ -89,12 +84,14 @@ protected: // From PageTurnView */ virtual void OnPossibleOutwardsFlick( const Vector2& panPosition, float gestureSpeed ); + virtual void OnTurnedOver( ImageActor actor, bool isLeftSide ); + private: /** * @copydoc PageTurnView::TurnedOver */ - void OnTurnedOver( Animation& animation ); + void TurnedOverBackwards( Animation& animation ); private: diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp index 5490797..9edfc95 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.cpp @@ -19,6 +19,7 @@ #include // EXTERNAL INCLUDES +#include // for strcmp #include #include #include @@ -35,11 +36,6 @@ using namespace Dali; namespace //Unnamed namespace { -// To register type - -DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PageTurnView, Toolkit::Control, NULL ) -DALI_TYPE_REGISTRATION_END() - // default grid density for page turn effect, 10 pixels by 10 pixels const float DEFAULT_GRID_DENSITY(10.0f); @@ -206,43 +202,6 @@ struct ShadowBlurStrengthConstraint float mThres; }; -bool IsActorHittableFunction( Actor actor, Dali::HitTestAlgorithm::TraverseType type ) -{ - bool hittable = false; - - switch (type) - { - case Dali::HitTestAlgorithm::CHECK_ACTOR: - { - // Check whether the actor is visible and not fully transparent. - Property::Index propertyActorHittable = actor.GetPropertyIndex(Toolkit::PageFactory::ACTOR_HITTABLE); - if( actor.IsSensitive() - && actor.IsVisible() - && actor.GetCurrentWorldColor().a > 0.01f// not FULLY_TRANSPARENT - && ( propertyActorHittable != Property::INVALID_INDEX && - actor.GetProperty( propertyActorHittable ) ) ) - { - hittable = true; - } - break; - } - case Dali::HitTestAlgorithm::DESCEND_ACTOR_TREE: - { - if( actor.IsSensitive() && actor.IsVisible() ) // Actor is visible, if not visible then none of its children are visible. - { - hittable = true; - } - break; - } - default: - { - break; - } - } - - return hittable; -} - } //unnamed namespace namespace Dali @@ -254,6 +213,31 @@ namespace Toolkit namespace Internal { +namespace +{ + +BaseHandle Create() +{ + // empty handle as we cannot create PageTurnView(but type registered for page turn signal) + return BaseHandle(); +} + +// Setup properties, signals and actions using the type-registry. +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::PageTurnView, Toolkit::Control, Create ); + +DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "page-size", VECTOR2, PAGE_SIZE ) +DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "current-page-id", INTEGER, CURRENT_PAGE_ID ) +DALI_PROPERTY_REGISTRATION( Toolkit, PageTurnView, "spine-shadow", VECTOR2, SPINE_SHADOW ) + +DALI_SIGNAL_REGISTRATION( Toolkit, PageTurnView, "page-turn-started", SIGNAL_PAGE_TURN_STARTED ) +DALI_SIGNAL_REGISTRATION( Toolkit, PageTurnView, "page-turn-finished", SIGNAL_PAGE_TURN_FINISHED ) +DALI_SIGNAL_REGISTRATION( Toolkit, PageTurnView, "page-pan-started", SIGNAL_PAGE_PAN_STARTED ) +DALI_SIGNAL_REGISTRATION( Toolkit, PageTurnView, "page-pan-finished", SIGNAL_PAGE_PAN_FINISHED ) + +DALI_TYPE_REGISTRATION_END() + +} + // these several constants are also used in the derived classes const int PageTurnView::MAXIMUM_TURNING_NUM = 4; const int PageTurnView::NUMBER_OF_CACHED_PAGES_EACH_SIDE = MAXIMUM_TURNING_NUM + 1; @@ -265,11 +249,10 @@ PageTurnView::PageTurnView( PageFactory& pageFactory, const Vector2& pageSize ) mPageFactory( pageFactory ), mPageSize( pageSize ), mTotalPageCount( 0 ), - mIsEditMode( false ), - mNeedOffscreenRendering( false ), mPanning( false ), mSpineShadowParameter( DEFAULT_SPINE_SHADOW_PARAMETER ), mCurrentPageIndex( 0 ), + mTurningPageIndex( 0 ), mIndex( 0 ), mPress( false ), mPageUpdated( true ), @@ -312,7 +295,7 @@ void PageTurnView::OnInitialize() // create the page turn effect objects for( int i = 0; i < MAXIMUM_TURNING_NUM; i++ ) { - mTurnEffect[i] = CreatePageTurnEffect( false ); + mTurnEffect[i] = CreatePageTurnEffect(); mTurnEffect[i].SetProperty( ShaderEffect::Property::GRID_DENSITY, Property::Value( DEFAULT_GRID_DENSITY ) ); mTurnEffect[i].SetUniform( "uPageSize", mPageSize ); mTurnEffect[i].SetUniform( "uShadowWidth", 0.f); @@ -325,73 +308,27 @@ void PageTurnView::OnInitialize() mTurningPageLayer = Layer::New(); mTurningPageLayer.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); - // Set control size and the parent origin of turningPageLayer + mTurningPageLayer.SetBehavior(Layer::LAYER_3D); + + // Set control size and the parent origin of page layers OnPageTurnViewInitialize(); - mRootOnScreen = Actor::New(); - mRootOnScreen.SetPositionInheritanceMode( USE_PARENT_POSITION ); - mRootOnScreen.SetSize( mControlSize ); - Self().Add( mRootOnScreen ); - mRootOnScreen.Add(mTurningPageLayer); + Self().Add(mTurningPageLayer); mTotalPageCount = static_cast( mPageFactory.GetNumberOfPages() ); - mNeedOffscreenRendering = mPageFactory.IsOffscreenRenderingNeeded(); - if( mNeedOffscreenRendering ) - { - SetupRenderTasks(); - } - // add pages to the scene, and set depth for the stacked pages for( int i = 0; i < NUMBER_OF_CACHED_PAGES_EACH_SIDE; i++ ) { AddPage( i ); if(mPageActors[i]) { - mPageActors[i].SetSortModifier( -static_cast( i )*STATIC_PAGE_INTERVAL_DISTANCE ); + mPageActors[i].SetZ( -static_cast( i )*STATIC_PAGE_INTERVAL_DISTANCE ); } } + mPageActors[0].SetVisible(true); // enable the pan gesture which is attached to the control EnableGestureDetection(Gesture::Type(Gesture::Pan)); - - mPageFactory.PageRefreshSignal().Connect(this, &PageTurnView::RenderPage); -} - -void PageTurnView::SetupRenderTasks() -{ - mPageSourceActor.resize( NUMBER_OF_CACHED_PAGES ); - mOffscreenTask.resize( NUMBER_OF_CACHED_PAGES ); - mRenderedPage.resize( NUMBER_OF_CACHED_PAGES ); - - mCameraActor = CameraActor::New(mControlSize); - mCameraActor.SetParentOrigin(ParentOrigin::CENTER); - mCameraActor.SetPositionInheritanceMode( DONT_INHERIT_POSITION ); - mCameraActor.SetInheritScale( false ); - Self().Add(mCameraActor); - - RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); - for(int i=0; i0 ) + { + mPageActors[i].GetChildAt(0).SetSize( mPageSize ); + } + } + } + + OnPageTurnViewInitialize(); + + if( mShadowPlane ) + { + mShadowPlane.SetSize( mControlSize ); + } +} + +Vector2 PageTurnView::GetPageSize() +{ + return mPageSize; +} + void PageTurnView::SetSpineShadowParameter( const Vector2& spineShadowParameter ) { mSpineShadowParameter = spineShadowParameter; @@ -475,7 +447,13 @@ Vector2 PageTurnView::GetSpineShadowParameter() void PageTurnView::GoToPage( unsigned int pageId ) { - int pageIdx = static_cast(pageId); + int pageIdx = Clamp( static_cast(pageId), 0, mTotalPageCount-1); + + if( mCurrentPageIndex == pageIdx ) + { + return; + } + // record the new current page index mCurrentPageIndex = pageIdx; @@ -494,6 +472,12 @@ void PageTurnView::GoToPage( unsigned int pageId ) { AddPage( i ); } + + mPageActors[pageId%NUMBER_OF_CACHED_PAGES].SetVisible(true); + if( pageId > 0 ) + { + mPageActors[(pageId-1)%NUMBER_OF_CACHED_PAGES].SetVisible(true); + } // set ordered depth to the stacked pages OrganizePageDepth(); } @@ -504,100 +488,18 @@ unsigned int PageTurnView::GetCurrentPage() return static_cast< unsigned int >( mCurrentPageIndex ); } -Actor PageTurnView::EnterEditMode() -{ - if( mNeedOffscreenRendering ) - { - DALI_ASSERT_ALWAYS( mCurrentPageIndex >= 0 ); - - mIsEditMode = true; - - int index = mCurrentPageIndex % NUMBER_OF_CACHED_PAGES; - mOffscreenTask[index].SetInputEnabled( true ); - mPageSourceActor[index].SetSensitive( true ); - mOffscreenTask[index].SetRefreshRate( RenderTask::REFRESH_ALWAYS ); - - mRootOnScreen.SetSensitive(false); - - return mPageSourceActor[index].GetChildAt( 0 ); - } - else - { - return Actor(); - } -} - -void PageTurnView::LeaveEditMode() -{ - if( mNeedOffscreenRendering ) - { - DALI_ASSERT_ALWAYS( mCurrentPageIndex >= 0 ); - - mIsEditMode = false; - - int index = mCurrentPageIndex % NUMBER_OF_CACHED_PAGES; - mOffscreenTask[index].SetInputEnabled( false ); - mPageSourceActor[index].SetSensitive( false ); - mOffscreenTask[index].SetRefreshRate( RenderTask::REFRESH_ONCE ); - - mRootOnScreen.SetSensitive(true); - } -} - -Actor PageTurnView::GetHitActor( Vector2& screenCoordinates, Vector2& actorCoordinates ) -{ - if( mNeedOffscreenRendering && mCurrentPageIndex < mTotalPageCount) - { - int index = mCurrentPageIndex % NUMBER_OF_CACHED_PAGES; - - Dali::HitTestAlgorithm::Results results; - if( !mOffscreenTask[index].GetInputEnabled() ) - { - mOffscreenTask[index].SetInputEnabled( true ); - mPageSourceActor[index].SetSensitive( true ); - Dali::HitTestAlgorithm::HitTest( mOffscreenTask[index], screenCoordinates, results, IsActorHittableFunction ); - mOffscreenTask[index].SetInputEnabled( false ); - mPageSourceActor[index].SetSensitive( false ); - } - else - { - Dali::HitTestAlgorithm::HitTest( mOffscreenTask[index], screenCoordinates, results, IsActorHittableFunction ); - } - actorCoordinates = results.actorCoordinates; - return results.actor; - } - else - { - return Actor(); - } -} - void PageTurnView::AddPage( int pageIndex ) { if(pageIndex > -1 && pageIndex < mTotalPageCount) // whether the page is available from the page factory { int index = pageIndex % NUMBER_OF_CACHED_PAGES; - ImageActor newPage; - if( mNeedOffscreenRendering ) - { - Actor source = mPageFactory.NewPage( pageIndex ); - if( mPageSourceActor[index].GetChildCount() > 0 ) - { - mPageSourceActor[index].Remove( mPageSourceActor[index].GetChildAt( 0 ) ); - } - mPageSourceActor[index].Add( source ); - mOffscreenTask[index].SetRefreshRate( RenderTask::REFRESH_ONCE ); - newPage = NewPageFromRenderBuffer( pageIndex ); - } - else - { - newPage= ImageActor::DownCast( mPageFactory.NewPage( pageIndex ) ); - DALI_ASSERT_ALWAYS( newPage ); - } + ImageActor newPage= ImageActor::DownCast( mPageFactory.NewPage( pageIndex ) ); + DALI_ASSERT_ALWAYS( newPage ); + newPage.SetAnchorPoint( AnchorPoint::CENTER_LEFT ); newPage.SetParentOrigin( ParentOrigin::CENTER_LEFT ); newPage.SetSize( mPageSize ); - mRootOnScreen.Add( newPage ); + Self().Add( newPage ); mPageActors[index] = newPage; bool isLeftSide = ( pageIndex < mCurrentPageIndex ); @@ -609,9 +511,11 @@ void PageTurnView::AddPage( int pageIndex ) } else { - SetShaderEffect( newPage, mSpineEffectFront); + newPage.SetShaderEffect(mSpineEffectFront); } + newPage.SetVisible( false ); + // For Portrait, nothing to do // For Landscape, set spineEffectBack to the new effect if it is in the left side, and set properties to the back image actor if it exists OnAddPage( newPage, isLeftSide ); @@ -626,59 +530,11 @@ void PageTurnView::RemovePage( int pageIndex ) mPageActors[index].Unparent(); mIsTurnBack.erase( mPageActors[index] ); mPageActors[index].Reset(); - if( mNeedOffscreenRendering ) - { - mPageSourceActor[index].Remove( mPageSourceActor[index].GetChildAt( 0 ) ); - } - } -} - -void PageTurnView::RenderPage( int pageIndex ) -{ - if( pageIndex > std::max(-1, mCurrentPageIndex - NUMBER_OF_CACHED_PAGES_EACH_SIDE -1) - && pageIndex < std::min(mTotalPageCount, mCurrentPageIndex + NUMBER_OF_CACHED_PAGES_EACH_SIDE)) - { - int index = pageIndex % NUMBER_OF_CACHED_PAGES; - mOffscreenTask[index].SetRefreshRate( RenderTask::REFRESH_ONCE ); } } -void PageTurnView::RefreshAll() -{ - mTotalPageCount = static_cast( mPageFactory.GetNumberOfPages() ); - if( mTotalPageCount > 0 ) - { - if(mCurrentPageIndex < mTotalPageCount) - { - GoToPage( mCurrentPageIndex ); - } - else - { - GoToPage( mCurrentPageIndex-- ); - } - } -} - -void PageTurnView::RefreshCurrentPage() -{ - RenderPage( mCurrentPageIndex ); -} - void PageTurnView::OnPan( const PanGesture& gesture ) { - if( mIsEditMode ) - { - // when interrupted by the call of DisplayCurrentPageSourceActor(), - // make sure the panFinished is always called before stopping to responding the gesture - // so the status of the control is updated correctly - if(mPanning) - { - mPanning = false; - PanFinished( SetPanPosition( gesture.position ), gesture.GetSpeed() ); - } - - return; - } // the pan gesture is attached to control itself instead of each page switch( gesture.state ) { @@ -707,7 +563,7 @@ void PageTurnView::OnPan( const PanGesture& gesture ) if( mPageUpdated && animatable ) { SetPanActor( gesture.position ); // determine which page actor is panned - if(mPanActor && mPanActor.GetParent() != mRootOnScreen) // if the page is added to turning layer,it is undergoing an animation currently + if(mPanActor && mPanActor.GetParent() != Self()) // if the page is added to turning layer,it is undergoing an animation currently { mPanActor.Reset(); } @@ -795,7 +651,12 @@ void PageTurnView::PanContinuing( const Vector2& gesturePosition ) mPress = true; mIsAnimating[mIndex] = true; - mPageTurnStartedSignal.Emit( handle, static_cast(mCurrentPageIndex + ( ( mIsTurnBack[mPanActor] ) ? -1 : 0 ) ), !mIsTurnBack[mPanActor] ); + mPageTurnStartedSignal.Emit( handle, static_cast(mTurningPageIndex), !mIsTurnBack[mPanActor] ); + int id = mTurningPageIndex + (mIsTurnBack[mPanActor]? -1 : 1); + if( id >=0 && id < mTotalPageCount ) + { + mPageActors[id%NUMBER_OF_CACHED_PAGES].SetVisible(true); + } mShadowView.RemoveConstraints(); Actor self = Self(); @@ -951,8 +812,8 @@ void PageTurnView::PanFinished( const Vector2& gesturePosition, float gestureSpe animation.AnimateTo( Property(self, mPropertyPanDisplacement[mIndex]), width,AlphaFunction::EASE_OUT_SINE); animation.AnimateTo( Property(self, mPropertyCurrentCenter[mIndex]), - Vector2(-mPageSize.width, 0.5f*mPageSize.height), AlphaFunction::EASE_OUT_SINE); - mAnimationActorPair[animation] = actor; + Vector2(-mPageSize.width*1.1f, 0.5f*mPageSize.height), AlphaFunction::EASE_OUT_SINE); + mAnimationPageIdPair[animation] = mTurningPageIndex; mAnimationIndexPair[animation] = mIndex; animation.Play(); animation.FinishedSignal().Connect( this, &PageTurnView::TurnedOver ); @@ -962,13 +823,13 @@ void PageTurnView::PanFinished( const Vector2& gesturePosition, float gestureSpe Animation animation= Animation::New( PAGE_SLIDE_BACK_ANIMATION_DURATION * (mOriginalCenter.x - mCurrentCenter.x) / mPageSize.width / PAGE_TURN_OVER_THRESHOLD_RATIO ); animation.AnimateTo( Property( mTurnEffect[mIndex], "uCurrentCenter" ), mOriginalCenter, AlphaFunction::LINEAR ); - mAnimationActorPair[animation] = actor; + mAnimationPageIdPair[animation] = mTurningPageIndex; mAnimationIndexPair[animation] = mIndex; animation.Play(); mIsSliding[mIndex] = true; animation.FinishedSignal().Connect( this, &PageTurnView::SliddenBack ); - mPageTurnStartedSignal.Emit( handle, static_cast( mCurrentPageIndex + ( ( mIsTurnBack[mPanActor] ) ? -1 : 0 ) ), mIsTurnBack[mPanActor] ); + mPageTurnStartedSignal.Emit( handle, static_cast(mTurningPageIndex), mIsTurnBack[actor] ); } } else @@ -983,38 +844,54 @@ void PageTurnView::PanFinished( const Vector2& gesturePosition, float gestureSpe void PageTurnView::TurnedOver( Animation& animation ) { - ImageActor actor = mAnimationActorPair[animation]; + int pageId = mAnimationPageIdPair[animation]; + ImageActor actor = mPageActors[pageId % NUMBER_OF_CACHED_PAGES]; mIsTurnBack[actor] = !mIsTurnBack[actor]; actor.RemoveConstraints(); - mRootOnScreen.Add(actor); + Self().Add(actor); int index = mAnimationIndexPair[animation]; mIsAnimating[index] = false; mTurnEffect[index].RemoveConstraints(); mAnimationIndexPair.erase( animation ); - mAnimationActorPair.erase( animation ); + mAnimationPageIdPair.erase( animation ); SetSpineEffect( actor, mIsTurnBack[actor] ); + int id = pageId + (mIsTurnBack[actor]? -1 : 1); + if( id >=0 && id < mTotalPageCount ) + { + mPageActors[id%NUMBER_OF_CACHED_PAGES].SetVisible(false); + } + + OnTurnedOver( actor, mIsTurnBack[actor] ); + // Guard against destruction during signal emission Toolkit::PageTurnView handle( GetOwner() ); - mPageTurnFinishedSignal.Emit( handle, static_cast( mCurrentPageIndex + ( ( mIsTurnBack[actor] ) ? -1 : 0 ) ), mIsTurnBack[actor] ); + mPageTurnFinishedSignal.Emit( handle, static_cast(pageId), mIsTurnBack[actor] ); } void PageTurnView::SliddenBack( Animation& animation ) { - ImageActor actor = mAnimationActorPair[animation]; - mRootOnScreen.Add(actor); + int pageId = mAnimationPageIdPair[animation]; + ImageActor actor = mPageActors[pageId % NUMBER_OF_CACHED_PAGES]; + Self().Add(actor); int index = mAnimationIndexPair[animation]; mIsSliding[index] = false; mIsAnimating[index] = false; mAnimationIndexPair.erase( animation ); - mAnimationActorPair.erase( animation ); + mAnimationPageIdPair.erase( animation ); SetSpineEffect( actor, mIsTurnBack[actor] ); + int id = pageId + (mIsTurnBack[actor]? -1 : 1); + if( id >=0 && id < mTotalPageCount ) + { + mPageActors[id%NUMBER_OF_CACHED_PAGES].SetVisible(false); + } + // Guard against destruction during signal emission Toolkit::PageTurnView handle( GetOwner() ); - mPageTurnFinishedSignal.Emit( handle, static_cast( mCurrentPageIndex + ( ( mIsTurnBack[mPanActor] ) ? -1 : 0 ) ), mIsTurnBack[actor] ); + mPageTurnFinishedSignal.Emit( handle, static_cast(pageId), mIsTurnBack[actor] ); } void PageTurnView::OrganizePageDepth() @@ -1023,11 +900,11 @@ void PageTurnView::OrganizePageDepth() { if(mCurrentPageIndex+i < mTotalPageCount) { - mPageActors[( mCurrentPageIndex+i )%NUMBER_OF_CACHED_PAGES].SetSortModifier( -static_cast( i )*STATIC_PAGE_INTERVAL_DISTANCE ); + mPageActors[( mCurrentPageIndex+i )%NUMBER_OF_CACHED_PAGES].SetZ( -static_cast( i )*STATIC_PAGE_INTERVAL_DISTANCE ); } if( mCurrentPageIndex >= i + 1 ) { - mPageActors[( mCurrentPageIndex-i-1 )%NUMBER_OF_CACHED_PAGES].SetSortModifier( -static_cast( i )*STATIC_PAGE_INTERVAL_DISTANCE ); + mPageActors[( mCurrentPageIndex-i-1 )%NUMBER_OF_CACHED_PAGES].SetZ( -static_cast( i )*STATIC_PAGE_INTERVAL_DISTANCE ); } } } @@ -1057,6 +934,99 @@ Toolkit::PageTurnView::PagePanSignal& PageTurnView::PagePanFinishedSignal() return mPagePanFinishedSignal; } +bool PageTurnView::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) +{ + Dali::BaseHandle handle( object ); + + bool connected( true ); + Toolkit::PageTurnView pageTurnView = Toolkit::PageTurnView::DownCast( handle ); + + if( 0 == strcmp( signalName.c_str(), SIGNAL_PAGE_TURN_STARTED ) ) + { + pageTurnView.PageTurnStartedSignal().Connect( tracker, functor ); + } + else if( 0 == strcmp( signalName.c_str(), SIGNAL_PAGE_TURN_FINISHED ) ) + { + pageTurnView.PageTurnFinishedSignal().Connect( tracker, functor ); + } + else if( 0 == strcmp( signalName.c_str(), SIGNAL_PAGE_PAN_STARTED ) ) + { + pageTurnView.PagePanStartedSignal().Connect( tracker, functor ); + } + else if( 0 == strcmp( signalName.c_str(), SIGNAL_PAGE_PAN_FINISHED ) ) + { + pageTurnView.PagePanFinishedSignal().Connect( tracker, functor ); + } + else + { + // signalName does not match any signal + connected = false; + } + + return connected; +} + +void PageTurnView::SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ) +{ + Toolkit::PageTurnView pageTurnView = Toolkit::PageTurnView::DownCast( Dali::BaseHandle( object ) ); + + if( pageTurnView ) + { + PageTurnView& pageTurnViewImpl( GetImplementation( pageTurnView ) ); + + switch( index ) + { + case Toolkit::PageTurnView::Property::PAGE_SIZE: + { + pageTurnViewImpl.SetPageSize( value.Get() ); + break; + } + case Toolkit::PageTurnView::Property::CURRENT_PAGE_ID: + { + pageTurnViewImpl.GoToPage( value.Get() ); + break; + } + case Toolkit::PageTurnView::Property::SPINE_SHADOW: + { + pageTurnViewImpl.SetSpineShadowParameter( value.Get() ); + break; + } + } + } +} + +Property::Value PageTurnView::GetProperty( BaseObject* object, Property::Index index ) +{ + Property::Value value; + + Toolkit::PageTurnView pageTurnView = Toolkit::PageTurnView::DownCast( Dali::BaseHandle( object ) ); + + if( pageTurnView ) + { + PageTurnView& pageTurnViewImpl( GetImplementation( pageTurnView ) ); + + switch( index ) + { + case Toolkit::PageTurnView::Property::PAGE_SIZE: + { + value = pageTurnViewImpl.GetPageSize(); + break; + } + case Toolkit::PageTurnView::Property::CURRENT_PAGE_ID: + { + value = static_cast( pageTurnViewImpl.GetCurrentPage() ); + break; + } + case Toolkit::PageTurnView::Property::SPINE_SHADOW: + { + value = pageTurnViewImpl.GetSpineShadowParameter(); + break; + } + } + } + return value; +} + } // namespace Internal } // namespace Toolkit diff --git a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.h b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.h index 0bd7e8a..5209f00 100644 --- a/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.h +++ b/dali-toolkit/internal/controls/page-turn-view/page-turn-view-impl.h @@ -27,8 +27,8 @@ // INTERNAL INCLUDES #include -#include -#include +#include +#include #include namespace Dali @@ -58,49 +58,42 @@ protected: public: /** - * @copydoc Toolkit::PageTurnView::SetSpineShadowParameter + * Set the page size + * @param[in] pageSize The size of pages */ - void SetSpineShadowParameter( const Vector2& spineShadowParameter ); - - /** - * @copydoc Toolkit::PageTurnView::GetSpineShadowParameter - */ - Vector2 GetSpineShadowParameter(); - - /** - * @copydoc Toolkit::PageTurnView::GoToPage - */ - void GoToPage( unsigned int pageId ); - - /** - * @copydoc Toolkit::PageTurnView::GetCurrentPage - */ - unsigned int GetCurrentPage(); + void SetPageSize( const Vector2& pageSize ); /** - * @copydoc Toolkit::PageTurnView::EnterEditMode + * Retrieve the page size. + * @return The page size. */ - Actor EnterEditMode(); + Vector2 GetPageSize(); /** - * @copydoc Toolkit::PageTurnView::LeaveEditMode + * Set the spine shadow parameter to the shader effects. + * The two parameters are the major&minor radius (in pixels) to form an ellipse shape. + * The top-left quarter of this ellipse is used to calculate spine normal for simulating shadow. + * @param [in] spineShadowParameter The major&minor ellipse radius for the simulated spine shadow. */ - void LeaveEditMode(); + void SetSpineShadowParameter( const Vector2& spineShadowParameter ); /** - * @copydoc Toolkit::PageTurnView::GetHitActor + * Retrieve the spine shadow parameter of the shader effects. + * @return The spine shadow parameter. */ - Actor GetHitActor( Vector2& screenCoordinates, Vector2& actorCoordinates ); + Vector2 GetSpineShadowParameter(); - /** - * @copydoc Toolkit::PageTurnView::RefreshAll + /* + * Jump to a given page. + * @param[in] pageId The new current page id. */ - void RefreshAll(); + void GoToPage( unsigned int pageId ); /** - * @copydoc Toolkit::PageTurnView::RefreshCurrentPage + * Retrieve the id of the current Page. + * @return The current page id. */ - void RefreshCurrentPage(); + unsigned int GetCurrentPage(); protected: @@ -141,11 +134,6 @@ protected: private: - /** - * Set up the render tasks for rendering the page actor to off-screen image - */ - void SetupRenderTasks(); - /** * Set up the shadow view control to cast shadow */ @@ -177,11 +165,6 @@ private: */ void SliddenBack( Animation& animation ); - /** - * Refresh the given page. - @param[in] the page index. - */ - void RenderPage( int pageIndex ); private: // from Control @@ -215,12 +198,6 @@ private: // implemented differently by PageTurnLandscapeView and PageTurnPortrai virtual void OnPageTurnViewInitialize() = 0; /** - * Create the page actor from off screen buffer - * @param[in] The index of the page to be added - */ - virtual ImageActor NewPageFromRenderBuffer( int pageIndex ) = 0; - - /** * This method is called after the a new page is added to the stage. * Could be re-implemented in subclasses to provide specific behaviour * @param[in] newPage The added page actor @@ -262,7 +239,15 @@ private: // implemented differently by PageTurnLandscapeView and PageTurnPortrai */ virtual void OnPossibleOutwardsFlick( const Vector2& panPosition, float gestureSpeed ) { } -public: //signal + /** + * This method is called when page is turned over + * In portrait view, the page on the left side is not rendered + * @param[in] actor The page actor + * @param[in] isLeftSide Which side the page is turned to + */ + virtual void OnTurnedOver( ImageActor actor, bool isLeftSide ) { } + +public: //signal and property /** * @copydoc Toolkit::PageTurnView::PageTurnStartedSignal() @@ -284,6 +269,35 @@ public: //signal */ Toolkit::PageTurnView::PagePanSignal& PagePanFinishedSignal(); + /** + * Connects a callback function with the object's signals. + * @param[in] object The object providing the signal. + * @param[in] tracker Used to disconnect the signal. + * @param[in] signalName The signal to connect to. + * @param[in] functor A newly allocated FunctorDelegate. + * @return True if the signal was connected. + * @post If a signal was connected, ownership of functor was passed to CallbackBase. Otherwise the caller is responsible for deleting the unused functor. + */ + static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); + + // Properties + + /** + * Called when a property of an object of this type is set. + * @param[in] object The object whose property is set. + * @param[in] index The property index. + * @param[in] value The new property value. + */ + static void SetProperty( BaseObject* object, Property::Index index, const Property::Value& value ); + + /** + * Called to retrieve a property of an object of this type. + * @param[in] object The object whose property is to be retrieved. + * @param[in] index The property index. + * @return The current value of the property. + */ + static Property::Value GetProperty( BaseObject* object, Property::Index index ); + private: //Undefined @@ -294,26 +308,16 @@ private: protected: - Actor mRootOnScreen; - Vector2 mControlSize; ///< The size of the control, it is decided by the page size, the SetSize from application can not change it Layer mTurningPageLayer; ///< The layer for the turning page, to avoid possible depth conflict Toolkit::ShadowView mShadowView; ///< The shadow view control for shadow casting ImageActor mShadowPlane; ///< The plane for the shadow to cast on Actor mPointLight; ///< The point light used for shadow casting - Layer mShadowLayer; ///< The layer to display the shadow PageFactory& mPageFactory; ///< The page factory which provides the page actors Vector2 mPageSize; ///< The page size int mTotalPageCount; ///< The total number of pages provided by the page factory - bool mIsEditMode; ///< The boolean to indicate the current page content is edit-able or not - - bool mNeedOffscreenRendering; ///< The boolean to indicate whether off screen rendering is required for creating page image - std::vector mOffscreenTask; ///< The vector of off screen rendering tasks - std::vector mPageSourceActor; ///< The vector of page source actor - std::vector mRenderedPage; ///< The vector of off screen buffers - CameraActor mCameraActor; ///< The camera actor attached to the off screen tasks bool mPanning; ///< The boolean to indicate whether the pan gesture is continuing std::vector mTurnEffect; ///< The group of PageTurnEffects @@ -325,8 +329,9 @@ protected: std::vector mPageActors; ///< The vector of pages on stage int mCurrentPageIndex; ///< The index of the current page, between 0 ~ mTotalPageCount-1 + int mTurningPageIndex; ///< The index of the turning page std::map mIsTurnBack; ///< The map to keep track the page actor's turning direction - std::map mAnimationActorPair; ///< The map to keep track which page actor is the animation act on + std::map mAnimationPageIdPair; ///< The map to keep track which page actor is the animation act on std::map mAnimationIndexPair; ///< The map to keep track which PageTurnEffect, PanDisplacementProperty, CurrentCenterProperty is used for the animation int mIndex; ///< The index to keep track which PageTurnEffect, PanDisplacementProperty, CurrentCenterProperty is used for the current panning page std::vector mIsAnimating; ///< The boolean vector to keep track which PageTurnEffect, PanDisplacementProperty, CurrentCenterProperty is available for using diff --git a/dali-toolkit/public-api/controls/page-turn-view/page-factory.h b/dali-toolkit/public-api/controls/page-turn-view/page-factory.h new file mode 100644 index 0000000..0c6e18d --- /dev/null +++ b/dali-toolkit/public-api/controls/page-turn-view/page-factory.h @@ -0,0 +1,60 @@ +#ifndef __DALI_TOOLKIT_PAGE_FACTORY_H__ +#define __DALI_TOOLKIT_PAGE_FACTORY_H__ + +/* + * Copyright (c) 2015 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. + * + */ + +// EXTERNAL INCLUDES +#include + +namespace Dali +{ + +namespace Toolkit +{ + +/** + * PageFactory is an abstract interface for providing image actors to PageTurnView + * Each image actor is identified by a unique ID, and has a linear order from 0 to GetNumberOfPages()-1 + */ +class DALI_IMPORT_API PageFactory +{ +public: + + /** + * Virtual destructor + */ + virtual ~PageFactory(){}; + + /** + * Query the number of pages available from the factory. + * The maximum available page has an ID of GetNumberOfPages()-1. + */ + virtual unsigned int GetNumberOfPages() = 0; + + /** + * Create an actor to represent the page content. + * @param[in] pageId The ID of the page to create. + * @return An actor, or an uninitialized pointer if the ID is out of range. + */ + virtual Actor NewPage( unsigned int pageId ) = 0; +}; + +} // namespace Toolkit + +} // namespace Dali +#endif /* __DALI_TOOLKIT_PAGE_FACTORY_H__ */ diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-landscape-view.cpp b/dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.cpp similarity index 95% rename from dali-toolkit/devel-api/controls/page-turn-view/page-turn-landscape-view.cpp rename to dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.cpp index 8a08633..aadbffb 100644 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-landscape-view.cpp +++ b/dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.cpp @@ -16,7 +16,7 @@ */ // CLASS HEADER -#include +#include // INTERNAL INCLUDES #include diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-landscape-view.h b/dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.h similarity index 97% rename from dali-toolkit/devel-api/controls/page-turn-view/page-turn-landscape-view.h rename to dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.h index 7430fcc..37215a1 100644 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-landscape-view.h +++ b/dali-toolkit/public-api/controls/page-turn-view/page-turn-landscape-view.h @@ -19,7 +19,7 @@ */ // INTERNAL INCLUDES -#include +#include namespace Dali { diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-portrait-view.cpp b/dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.cpp similarity index 95% rename from dali-toolkit/devel-api/controls/page-turn-view/page-turn-portrait-view.cpp rename to dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.cpp index 86e484a..bb30f23 100644 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-portrait-view.cpp +++ b/dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.cpp @@ -16,7 +16,7 @@ */ // CLASS HEADER -#include +#include // INTERNAL INCLUDES #include diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-portrait-view.h b/dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.h similarity index 97% rename from dali-toolkit/devel-api/controls/page-turn-view/page-turn-portrait-view.h rename to dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.h index d237e50..5da3a97 100644 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-portrait-view.h +++ b/dali-toolkit/public-api/controls/page-turn-view/page-turn-portrait-view.h @@ -19,7 +19,7 @@ */ // INTERNAL INCLUDES -#include +#include namespace Dali { diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-view.cpp b/dali-toolkit/public-api/controls/page-turn-view/page-turn-view.cpp similarity index 64% rename from dali-toolkit/devel-api/controls/page-turn-view/page-turn-view.cpp rename to dali-toolkit/public-api/controls/page-turn-view/page-turn-view.cpp index c50b265..93c5c9f 100644 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-view.cpp +++ b/dali-toolkit/public-api/controls/page-turn-view/page-turn-view.cpp @@ -16,7 +16,7 @@ */ // CLASS HEADER -#include +#include // INTERNAL INCLUDES #include @@ -67,26 +67,6 @@ PageTurnView::PageTurnView( Dali::Internal::CustomActor* internal ) VerifyCustomActorPointer(internal); } -void PageTurnView::SetSpineShadowParameter( const Vector2& spineShadowParameter ) -{ - Toolkit::GetImplementation( *this ).SetSpineShadowParameter( spineShadowParameter ); -} - -Vector2 PageTurnView::GetSpineShadowParameter() -{ - return Toolkit::GetImplementation( *this ).GetSpineShadowParameter(); -} - -void PageTurnView::GoToPage( unsigned int pageId ) -{ - Toolkit::GetImplementation( *this ).GoToPage(pageId); -} - -unsigned int PageTurnView::GetCurrentPage() -{ - return Toolkit::GetImplementation( *this ).GetCurrentPage(); -} - PageTurnView::PageTurnSignal& PageTurnView::PageTurnStartedSignal() { return Toolkit::GetImplementation( *this ).PageTurnStartedSignal(); @@ -107,31 +87,6 @@ PageTurnView::PagePanSignal& PageTurnView::PagePanFinishedSignal() return Toolkit::GetImplementation( *this ).PagePanFinishedSignal(); } -Actor PageTurnView::EnterEditMode() -{ - return Toolkit::GetImplementation( *this ).EnterEditMode(); -} - -void PageTurnView::LeaveEditMode() -{ - Toolkit::GetImplementation( *this ).LeaveEditMode(); -} - -Actor PageTurnView::GetHitActor( Vector2& screenCoordinates, Vector2& actorCoordinates ) -{ - return Toolkit::GetImplementation( *this ).GetHitActor( screenCoordinates, actorCoordinates ); -} - -void PageTurnView::RefreshAll() -{ - Toolkit::GetImplementation( *this ).RefreshAll(); -} - -void PageTurnView::RefreshCurrentPage() -{ - Toolkit::GetImplementation( *this ).RefreshCurrentPage(); -} - } // namespace Toolkit } // namespace Dali diff --git a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-view.h b/dali-toolkit/public-api/controls/page-turn-view/page-turn-view.h similarity index 70% rename from dali-toolkit/devel-api/controls/page-turn-view/page-turn-view.h rename to dali-toolkit/public-api/controls/page-turn-view/page-turn-view.h index 6b4ee7e..d65d5ec 100644 --- a/dali-toolkit/devel-api/controls/page-turn-view/page-turn-view.h +++ b/dali-toolkit/public-api/controls/page-turn-view/page-turn-view.h @@ -51,12 +51,44 @@ class PageTurnView; * 3) Pan with no animation: PagePanStarted -> PagePanFinished * Pan with no animation will occur when the user touches the page in an area that does not start the * page turning. + * + * Signals + * | %Signal Name | Method | + * |--------------------|-------------------------------| + * | page-turn-started | @ref PageTurnStartedSignal() | + * | page-turn-finished | @ref PageTurnFinishedSignal() | + * | page-pan-started | @ref PagePanStartedSignal() | + * | page-pan-finished | @ref PagePanFinishedSignal() | */ class DALI_IMPORT_API PageTurnView : public Control { public: /** + * @brief The start and end property ranges for this control. + */ + enum PropertyRange + { + PROPERTY_START_INDEX = Control::CONTROL_PROPERTY_END_INDEX + 1, + PROPERTY_END_INDEX = PROPERTY_START_INDEX + 1000 ///< Reserve property indices + }; + + struct Property + { + enum + { + PAGE_SIZE = PROPERTY_START_INDEX, ///< name "page-size", type Vector2 + CURRENT_PAGE_ID, ///< name "current-page-id", type Integer + + /** + * The two values are the major&minor radius (in pixels) to form an ellipse shape. + * The top-left quarter of this ellipse is used to calculate spine normal for simulating shadow. + */ + SPINE_SHADOW, ///< name "spine-shadow", type Vector2 + }; + }; + + /** * Creates an empty PageTurnView handle. Only derived versions can be instantiated. * Calling member function with an uninitialized handle is not allowed. */ @@ -89,67 +121,6 @@ public: */ static PageTurnView DownCast( BaseHandle handle ); - /** - * Set the spine shadow parameter to the shader effects - * The two parameters are the major&minor radius (in pixels) to form an ellipse shape - * The top-left quarter of this ellipse is used to calculate spine normal for simulating shadow - * @param [in] spineShadowParameter The major&minor ellipse radius for the simulated spine shadow - */ - void SetSpineShadowParameter( const Vector2& spineShadowParameter ); - - /** - * Retrieve the spine shadow parameter of the shader effects - * @return The major&minor ellipse radius for the simulated spine shadow - */ - Vector2 GetSpineShadowParameter(); - - /* - * Go to a specific page - * @param[in] pageId The new current page index - */ - void GoToPage( unsigned int pageId ); - - /** - * Retrieve the index of the current Page - * @return The index of the current page - */ - unsigned int GetCurrentPage(); - - /** - * Enter edit mode - * Case 1, the page factory passes image actor into the view as page content, do nothing. - * Case 2, the page factory passes an actor tree into the view as page content, - * the actor tree will receive the touch event in edit mode, and set the refresh rate of the off screen render task to always - * @return an empty actor in case 1; the actor tree root of the current page - */ - Actor EnterEditMode(); - - /** - * Leave edit mode - * Case 1, the page factory passes image actor into the view as page content, do nothing. - * Case 2, the page factory passes an actor tree into the view as page content, - * the page actor will receive all the touch event, and set the refresh rage of the off screen render task to once. - */ - void LeaveEditMode(); - - /** - * Return the actor get hit in the actor tree of the current page by given the touch position on the PageTurnView - * @param[in] screenCoordinates The hit position of the PageTurnView - * @param[out] actorCoordinates The local hit position of the hitted actor - * @return the hitted actor - */ - Actor GetHitActor( Vector2& screenCoordinates, Vector2& actorCoordinates ); - - /** - * Refresh all the cached pages by calling the render task to refresh. - */ - void RefreshAll(); - - /** - * Refresh current page by calling the render task to refresh - */ - void RefreshCurrentPage(); - public: //Signal // Page Turned signal, with page index and boolean turning direction (true = forward, false = backward) diff --git a/dali-toolkit/public-api/file.list b/dali-toolkit/public-api/file.list index 1b1194c..73d06a4 100755 --- a/dali-toolkit/public-api/file.list +++ b/dali-toolkit/public-api/file.list @@ -11,6 +11,9 @@ public_api_src_files = \ $(public_api_src_dir)/controls/default-controls/solid-color-actor.cpp \ $(public_api_src_dir)/controls/image-view/image-view.cpp \ $(public_api_src_dir)/controls/model3d-view/model3d-view.cpp \ + $(public_api_src_dir)/controls/page-turn-view/page-turn-landscape-view.cpp \ + $(public_api_src_dir)/controls/page-turn-view/page-turn-portrait-view.cpp \ + $(public_api_src_dir)/controls/page-turn-view/page-turn-view.cpp \ $(public_api_src_dir)/controls/scroll-bar/scroll-bar.cpp \ $(public_api_src_dir)/controls/scrollable/item-view/default-item-layout.cpp \ $(public_api_src_dir)/controls/scrollable/item-view/item-layout.cpp \ @@ -60,6 +63,12 @@ public_api_gaussian_blur_view_header_files = \ public_api_image_view_header_files = \ $(public_api_src_dir)/controls/image-view/image-view.h +public_api_page_turn_view_header_files = \ + $(public_api_src_dir)/controls/page-turn-view/page-factory.h \ + $(public_api_src_dir)/controls/page-turn-view/page-turn-landscape-view.h \ + $(public_api_src_dir)/controls/page-turn-view/page-turn-portrait-view.h \ + $(public_api_src_dir)/controls/page-turn-view/page-turn-view.h + public_api_item_view_header_files = \ $(public_api_src_dir)/controls/scrollable/item-view/default-item-layout.h \ $(public_api_src_dir)/controls/scrollable/item-view/item-factory.h \ -- 2.7.4