From 3f3cb4f8020f60d4d5dc672ddc426cb73126f80d Mon Sep 17 00:00:00 2001 From: Chu Hoang Date: Mon, 19 Oct 2015 09:54:52 +0100 Subject: [PATCH] Reimplemented CubeTransitionEffect to use renderers and removed usage of ImageActor. Change-Id: If242a45c76a21046feea94af5ce3bac2290b3c2c --- .../dali-toolkit/utc-Dali-CubeTransitionEffect.cpp | 693 ++++++++++++--------- .../cube-transition-cross-effect.cpp | 14 +- .../cube-transition-cross-effect.h | 17 +- .../transition-effects/cube-transition-effect.cpp | 29 +- .../transition-effects/cube-transition-effect.h | 61 +- .../cube-transition-fold-effect.cpp | 14 +- .../cube-transition-fold-effect.h | 17 +- .../cube-transition-wave-effect.cpp | 14 +- .../cube-transition-wave-effect.h | 15 +- .../cube-transition-cross-effect-impl.cpp | 136 ++-- .../cube-transition-cross-effect-impl.h | 48 +- .../cube-transition-effect-impl.cpp | 519 +++++++++------ .../cube-transition-effect-impl.h | 203 ++---- .../cube-transition-fold-effect-impl.cpp | 126 ++-- .../cube-transition-fold-effect-impl.h | 33 +- .../cube-transition-wave-effect-impl.cpp | 88 ++- .../cube-transition-wave-effect-impl.h | 30 +- 17 files changed, 1100 insertions(+), 957 deletions(-) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-CubeTransitionEffect.cpp b/automated-tests/src/dali-toolkit/utc-Dali-CubeTransitionEffect.cpp index 6e99611..e759409 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-CubeTransitionEffect.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-CubeTransitionEffect.cpp @@ -23,6 +23,7 @@ #include #include #include +#include @@ -41,9 +42,12 @@ const Vector2 PAN_POSITION1( VIEW_AREA_SIZE.x * 0.75f, VIEW_AREA_SIZE.y * 0.25f const Vector2 PAN_DISPLACEMENT1( -5.f, 5.f ); const Vector2 PAN_POSITION2( VIEW_AREA_SIZE.x * 0.25f, VIEW_AREA_SIZE.y * 0.75f ); const Vector2 PAN_DISPLACEMENT2( 5.f, 5.f ); +const Vector4 FULL_BRIGHTNESS(1.f,1.f,1.f,1.f); +const Vector4 HALF_BRIGHTNESS(0.5f, 0.5f, 0.5f, 1.f); const int RENDER_FRAME_INTERVAL = 16; static const float FLT_EPISILON = 0.0001f; -const float OFFSCREEN_RENDER_DURATION = 0.05f; +static const float EPISILON = 0.05f; +const float TRANSITION_BEFORE_END_DURATION = TRANSITION_DURATION - 0.05f; static bool gObjectCreatedCallBackCalled; static void TestCallback(BaseHandle handle) @@ -73,18 +77,18 @@ void Wait(ToolkitTestApplication& application, float durationToPass) class TransitionCompletedCallback : public Dali::ConnectionTracker { public: - TransitionCompletedCallback( bool& signalReceived, CubeTransitionEffect& effect, ImageActor& imageActor ) + TransitionCompletedCallback( bool& signalReceived, CubeTransitionEffect& effect, Image& image ) : mSignalVerified( signalReceived ), mCurrentEffect( effect ), - mActorTransitTo( imageActor ) + mActorTransitTo( image ) { } - void Callback( CubeTransitionEffect effect, ImageActor imageActor ) + void Callback( CubeTransitionEffect effect, Image image ) { tet_infoline( "Verifying TransitionCompletedSignal" ); - if( mCurrentEffect == effect && mActorTransitTo == imageActor ) + if( mCurrentEffect == effect && mActorTransitTo == image ) { mSignalVerified = true; } @@ -97,7 +101,7 @@ public: bool& mSignalVerified; CubeTransitionEffect& mCurrentEffect; - ImageActor& mActorTransitTo; + Image& mActorTransitTo; }; } // namespace @@ -123,7 +127,8 @@ int UtcDaliCubeTransitionWaveEffectNew(void) DALI_TEST_CHECK( !waveEffect ); - waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); DALI_TEST_CHECK( waveEffect ); @@ -136,7 +141,8 @@ int UtcDaliCubeTransitionWaveEffectNew(void) gObjectCreatedCallBackCalled = false; registry.ObjectCreatedSignal().Connect( &TestCallback ); { - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); } DALI_TEST_CHECK( gObjectCreatedCallBackCalled ); END_TEST; @@ -151,7 +157,8 @@ int UtcDaliCubeTransitionCrossEffectNew(void) DALI_TEST_CHECK( !crossEffect ); - crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); DALI_TEST_CHECK( crossEffect ); @@ -164,7 +171,8 @@ int UtcDaliCubeTransitionCrossEffectNew(void) gObjectCreatedCallBackCalled = false; registry.ObjectCreatedSignal().Connect( &TestCallback ); { - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); } DALI_TEST_CHECK( gObjectCreatedCallBackCalled ); END_TEST; @@ -179,7 +187,8 @@ int UtcDaliCubeTransitionFoldEffectNew(void) DALI_TEST_CHECK( !foldEffect ); - foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); DALI_TEST_CHECK( foldEffect ); @@ -192,7 +201,8 @@ int UtcDaliCubeTransitionFoldEffectNew(void) gObjectCreatedCallBackCalled = false; registry.ObjectCreatedSignal().Connect( &TestCallback ); { - CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); } DALI_TEST_CHECK( gObjectCreatedCallBackCalled ); END_TEST; @@ -203,15 +213,18 @@ int UtcDaliCubeTransitionEffectSetGetTransitionDuration(void) ToolkitTestApplication application; tet_infoline(" UtcDaliCubeTransitionEffectSetGetTransitionDuration "); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); waveEffect.SetTransitionDuration( TRANSITION_DURATION ); + waveEffect.SetSize( VIEW_AREA_SIZE ); DALI_TEST_EQUALS( TRANSITION_DURATION, waveEffect.GetTransitionDuration(), TEST_LOCATION ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); crossEffect.SetTransitionDuration( TRANSITION_DURATION ); + crossEffect.SetSize( VIEW_AREA_SIZE ); DALI_TEST_EQUALS( TRANSITION_DURATION, crossEffect.GetTransitionDuration(), TEST_LOCATION ); - CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); foldEffect.SetTransitionDuration( TRANSITION_DURATION ); DALI_TEST_EQUALS( TRANSITION_DURATION, foldEffect.GetTransitionDuration(), TEST_LOCATION ); END_TEST; @@ -222,11 +235,13 @@ int UtcDaliCubeTransitionEffectSetGetCubeDisplacement(void) ToolkitTestApplication application; tet_infoline(" UtcDaliCubeTransitionEffectSetGetTransitionDuration "); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS); + waveEffect.SetSize( VIEW_AREA_SIZE ); waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); DALI_TEST_EQUALS( CUBE_DISPLACEMENT, waveEffect.GetCubeDisplacement(), TEST_LOCATION ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); DALI_TEST_EQUALS( CUBE_DISPLACEMENT, crossEffect.GetCubeDisplacement(), TEST_LOCATION ); @@ -242,70 +257,89 @@ int UtcDaliCubeTransitionEffectGetRoot(void) unsigned int totalNum = NUM_ROWS*NUM_COLUMNS; - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); - Actor rootActor = waveEffect.GetRoot(); + Image image = BufferImage::New( 40, 40 ) ; + + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); + Stage::GetCurrent().Add( waveEffect ); + waveEffect.SetCurrentImage( image ); + waveEffect.SetTargetImage( image ); + + application.SendNotification(); + application.Render(); + + waveEffect.StartTransition(); + + Wait( application, TRANSITION_DURATION * 0.5f ); // check that we have a total of NUM_ROWS*NUM_COLUMNS cubes; - DALI_TEST_CHECK( totalNum == rootActor.GetChildCount() ); + Actor boxesRoot = waveEffect.GetChildAt(0); + DALI_TEST_CHECK( totalNum == boxesRoot.GetChildCount() ); // check that every cube has two children - DALI_TEST_CHECK( 2 == rootActor.GetChildAt(0).GetChildCount() ); - DALI_TEST_CHECK( 2 == rootActor.GetChildAt(totalNum/2).GetChildCount() ); - DALI_TEST_CHECK( 2 == rootActor.GetChildAt(totalNum-1).GetChildCount() ); + DALI_TEST_CHECK( 2 == boxesRoot.GetChildAt(0).GetChildCount() ); + DALI_TEST_CHECK( 2 == boxesRoot.GetChildAt(totalNum/2).GetChildCount() ); + DALI_TEST_CHECK( 2 == boxesRoot.GetChildAt(totalNum-1).GetChildCount() ); END_TEST; } -int UtcDaliCubeTransitionEffectIsTransiting(void) +int UtcDaliCubeTransitionEffectIsTransitioning(void) { ToolkitTestApplication application; tet_infoline(" UtcDaliCubeTransitionEffectIsTransiting "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30); + Image image = BufferImage::New( 40, 40 ) ; - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); - Actor rootActor = waveEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); + Stage::GetCurrent().Add( waveEffect ); waveEffect.SetTransitionDuration( TRANSITION_DURATION ); waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - DALI_TEST_CHECK( !waveEffect.IsTransiting() ); + DALI_TEST_CHECK( !waveEffect.IsTransitioning() ); - waveEffect.SetCurrentImage(imageActor); - waveEffect.SetTargetImage(imageActor); + waveEffect.SetCurrentImage( image ); + waveEffect.SetTargetImage( image ); //transition is started waveEffect.StartTransition(); - DALI_TEST_CHECK( waveEffect.IsTransiting() ); + DALI_TEST_CHECK( waveEffect.IsTransitioning() ); //transition is finished Wait( application, TRANSITION_DURATION ); - DALI_TEST_CHECK( !waveEffect.IsTransiting() ); + DALI_TEST_CHECK( !waveEffect.IsTransitioning() ); + + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); + Stage::GetCurrent().Add( crossEffect ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); crossEffect.SetTransitionDuration( TRANSITION_DURATION ); crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - DALI_TEST_CHECK( !crossEffect.IsTransiting() ); + DALI_TEST_CHECK( !crossEffect.IsTransitioning() ); - crossEffect.SetCurrentImage(imageActor); - crossEffect.SetTargetImage(imageActor); + crossEffect.SetCurrentImage( image ); + crossEffect.SetTargetImage( image ); //transition is started crossEffect.StartTransition(false); - DALI_TEST_CHECK( crossEffect.IsTransiting() ); + DALI_TEST_CHECK( crossEffect.IsTransitioning() ); //transition is finished Wait( application, TRANSITION_DURATION ); - DALI_TEST_CHECK( !crossEffect.IsTransiting() ); + DALI_TEST_CHECK( !crossEffect.IsTransitioning() ); + + CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); + Stage::GetCurrent().Add( foldEffect ); - CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); foldEffect.SetTransitionDuration( TRANSITION_DURATION ); - DALI_TEST_CHECK( !foldEffect.IsTransiting() ); + DALI_TEST_CHECK( !foldEffect.IsTransitioning() ); - foldEffect.SetCurrentImage( imageActor ); - foldEffect.SetTargetImage( imageActor ); + foldEffect.SetCurrentImage( image ); + foldEffect.SetTargetImage( image ); //transition is started foldEffect.StartTransition(true); - DALI_TEST_CHECK(foldEffect.IsTransiting() ); + DALI_TEST_CHECK(foldEffect.IsTransitioning() ); //transition is finished Wait( application, TRANSITION_DURATION ); - DALI_TEST_CHECK( !foldEffect.IsTransiting() ); + DALI_TEST_CHECK( !foldEffect.IsTransitioning() ); END_TEST; } @@ -317,23 +351,35 @@ int UtcDaliCubeTransitionEffectSetCurrentImage(void) tet_infoline(" UtcDaliCubeTransitionEffectSetCurrentImage "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40) ; + Image image = BufferImage::New( 40, 40 ) ; - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); - waveEffect.SetCurrentImage( imageActor ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); + waveEffect.SetCurrentImage( image ); + + Stage::GetCurrent().Add( waveEffect ); + + application.SendNotification(); + application.Render(); + + waveEffect.StartTransition(); // the current image content is set to the tiles facing the camera - ImageActor tile = ImageActor::DownCast( (waveEffect.GetRoot().GetChildAt(0).GetChildAt(0))); + Actor currentTile = waveEffect.GetChildAt(0).GetChildAt(0).GetChildAt(0); + Actor targetTile = waveEffect.GetChildAt(0).GetChildAt(0).GetChildAt(1); //check the pixel area set to the cube - ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS); - ImageActor::PixelArea pixelArea = tile.GetPixelArea(); - DALI_TEST_CHECK ( pixelAreaDef == pixelArea ); - - //check the size of the off screen rendered image - Wait( application, OFFSCREEN_RENDER_DURATION ); - DALI_TEST_EQUALS( tile.GetImage().GetWidth(), VIEW_AREA_SIZE.x, TEST_LOCATION ); - DALI_TEST_EQUALS( tile.GetImage().GetHeight(), VIEW_AREA_SIZE.y, TEST_LOCATION ); + Vector4 pixelAreaDef( 0.f, 0.f, 1.f / NUM_COLUMNS, 1.f / NUM_ROWS); + + Property::Index textureRectIndex = currentTile.GetPropertyIndex( "uTextureRect" ); + DALI_TEST_CHECK( textureRectIndex != Property::INVALID_INDEX ); + Property::Value textureRectValue = currentTile.GetProperty( textureRectIndex ); + DALI_TEST_CHECK( textureRectValue.GetType() == Property::VECTOR4 ); + Vector4 pixelArea; + DALI_TEST_CHECK( textureRectValue.Get( pixelArea ) ); + + DALI_TEST_EQUALS( pixelAreaDef, pixelArea, FLT_EPISILON, TEST_LOCATION ); + END_TEST; } @@ -344,27 +390,37 @@ int UtcDaliCubeTransitionEffectSetTargetImage(void) tet_infoline(" UtcDaliCubeTransitionEffectSetTargetImage "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30); + Image image = BufferImage::New( 30, 30 ); + + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); + Stage::GetCurrent().Add( waveEffect ); + + waveEffect.SetCurrentImage( image ); + waveEffect.SetTargetImage( image ); + + Stage::GetCurrent().Add( waveEffect ); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); - Actor rootActor = waveEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + application.SendNotification(); + application.Render(); - waveEffect.SetCurrentImage( imageActor ); - waveEffect.SetTargetImage( imageActor ); + waveEffect.StartTransition(); // the target image content is set to the tiles currently invisible to the camera - ImageActor tile = ImageActor::DownCast( (rootActor.GetChildAt(0).GetChildAt(1))); + Actor tile = waveEffect.GetChildAt(0).GetChildAt(0).GetChildAt(1); //check the pixel area set to the cube - ImageActor::PixelArea pixelAreaDef( 0, 0, VIEW_AREA_SIZE.x / NUM_COLUMNS, VIEW_AREA_SIZE.y / NUM_ROWS); - ImageActor::PixelArea pixelArea = tile.GetPixelArea(); - DALI_TEST_CHECK ( pixelAreaDef == pixelArea ); - - //check the size of the off screen rendered image - Wait( application, OFFSCREEN_RENDER_DURATION ); - DALI_TEST_EQUALS( tile.GetImage().GetWidth(), VIEW_AREA_SIZE.x, TEST_LOCATION ); - DALI_TEST_EQUALS( tile.GetImage().GetHeight(), VIEW_AREA_SIZE.y, TEST_LOCATION ); + Vector4 pixelAreaDef( 0.f, 0.f, 1.f / NUM_COLUMNS, 1.f / NUM_ROWS); + + Property::Index textureRectIndex = tile.GetPropertyIndex( "uTextureRect" ); + DALI_TEST_CHECK( textureRectIndex != -1 ); + Property::Value textureRectValue = tile.GetProperty( textureRectIndex ); + DALI_TEST_CHECK( textureRectValue.GetType() == Property::VECTOR4 ); + Vector4 pixelArea; + DALI_TEST_CHECK( textureRectValue.Get( pixelArea ) ); + + DALI_TEST_EQUALS( pixelAreaDef, pixelArea, FLT_EPISILON, TEST_LOCATION ); + END_TEST; } @@ -374,48 +430,50 @@ int UtcDaliCubeTransitionWaveEffectStartTransition(void) tet_infoline(" UtcDaliCubeTransitionWaveEffectStartTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor imageActor = ImageActor::New(ResourceImage::New("Image.jpg")); + Image image = ResourceImage::New( "Image.jpg" ); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); waveEffect.SetTransitionDuration( TRANSITION_DURATION ); waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - Actor rootActor = waveEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); - Actor cube = rootActor.GetChildAt(0); + waveEffect.SetCurrentImage( image ); - waveEffect.SetCurrentImage( imageActor ); + Stage::GetCurrent().Add( waveEffect ); - Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f); - Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f); + application.SendNotification(); + application.Render(); - //check the cube rotation value and color values after different transitions - waveEffect.SetTargetImage( imageActor ); - waveEffect.StartTransition(true); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + waveEffect.StartTransition( true ); + + Actor cube = waveEffect.GetChildAt(0).GetChildAt(0); + + //check the cube rotation value and color values just before the end of different transitions + waveEffect.SetTargetImage( image ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - waveEffect.SetTargetImage( imageActor ); + waveEffect.SetTargetImage( image ); waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - waveEffect.SetTargetImage( imageActor ); + waveEffect.SetTargetImage( image ); waveEffect.StartTransition(false); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - waveEffect.SetTargetImage( imageActor ); + waveEffect.SetTargetImage( image ); waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); END_TEST; } @@ -425,54 +483,57 @@ int UtcDaliCubeTransitionCrossEffectStartTransition(void) tet_infoline(" UtcDaliCubeTransitionCrossEffectStartTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor imageActor = ImageActor::New(ResourceImage::New("Image.jpg")); + Image image = ResourceImage::New( "Image.jpg" ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); crossEffect.SetTransitionDuration( TRANSITION_DURATION ); crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - Actor rootActor = crossEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); - crossEffect.SetCurrentImage( imageActor ); - Actor cube0 = rootActor.GetChildAt(0); - Actor cube1 = rootActor.GetChildAt(1); + crossEffect.SetCurrentImage( image ); + crossEffect.SetTargetImage( image ); - Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f); - Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f); + Stage::GetCurrent().Add( crossEffect ); + + application.SendNotification(); + application.Render(); - //check the cube rotation values and color values after different transitions - crossEffect.SetTargetImage( imageActor ); crossEffect.StartTransition(true); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + Actor cube0 = crossEffect.GetChildAt(0).GetChildAt(0); + Actor cube1 = crossEffect.GetChildAt(0).GetChildAt(1); + + //check the cube rotation value and color values just before the end of different transitions + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::XAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - crossEffect.SetTargetImage( imageActor ); + + crossEffect.SetTargetImage( image ); crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_180, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::XAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - crossEffect.SetTargetImage( imageActor ); + crossEffect.SetTargetImage( image ); crossEffect.StartTransition(false); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::XAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - crossEffect.SetTargetImage( imageActor ); + crossEffect.SetTargetImage( image ); crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::XAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); END_TEST; } @@ -482,52 +543,55 @@ int UtcDaliCubeTransitionFoldEffectStartTransition(void) tet_infoline(" UtcDaliCubeTransitionFoldEffectStartTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor imageActor = CreateSolidColorImageActor(application, Color::BLUE,30,30); + Image image = BufferImage::New( 30, 30 ); - CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); foldEffect.SetTransitionDuration( TRANSITION_DURATION ); - Actor rootActor = foldEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); - foldEffect.SetCurrentImage( imageActor ); - Actor cube0 = rootActor.GetChildAt(0); - Actor cube1 = rootActor.GetChildAt(1); + foldEffect.SetCurrentImage( image ); + foldEffect.SetTargetImage( image ); + + Stage::GetCurrent().Add( foldEffect ); - Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f); - Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f); + application.SendNotification(); + application.Render(); - //check the cube rotation values and color values after different transitions - foldEffect.SetTargetImage( imageActor ); foldEffect.StartTransition(true); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - foldEffect.SetTargetImage( imageActor ); + Actor cube0 = foldEffect.GetChildAt(0).GetChildAt(0); + Actor cube1 = foldEffect.GetChildAt(0).GetChildAt(1); + + //check the cube rotation value and color values just before the end of different transitions + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); + + foldEffect.SetTargetImage( image ); foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - foldEffect.SetTargetImage( imageActor ); + foldEffect.SetTargetImage( image ); foldEffect.StartTransition(false); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(),fullBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(),FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); - foldEffect.SetTargetImage( imageActor ); + foldEffect.SetTargetImage( image ); foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); - Wait( application, TRANSITION_DURATION ); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + Wait( application, TRANSITION_BEFORE_END_DURATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), HALF_BRIGHTNESS, EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), FULL_BRIGHTNESS, EPISILON, TEST_LOCATION ); END_TEST; } @@ -537,84 +601,84 @@ int UtcDaliCubeTransitionEffectSignalTransitionCompleted(void) tet_infoline(" UtcDaliCubeTransitionEffectSignalTransitionCompleted "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30); - ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20); - ImageActor thirdImageActor = CreateSolidColorImageActor(application, Color::BLUE,40,40); + Image firstImage = BufferImage::New( 30, 30 ); + Image secondImage = BufferImage::New( 20, 20 ); + Image thirdImage = BufferImage::New( 40, 40 ); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); waveEffect.SetTransitionDuration( TRANSITION_DURATION ); waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - Actor rootActor = waveEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + Stage::GetCurrent().Add( waveEffect ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); crossEffect.SetTransitionDuration( TRANSITION_DURATION ); crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - rootActor = crossEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + Stage::GetCurrent().Add( crossEffect ); - CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect foldEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); foldEffect.SetTransitionDuration( TRANSITION_DURATION ); - rootActor = foldEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + Stage::GetCurrent().Add( foldEffect ); bool signalVerified = false; CubeTransitionEffect currentEffect; - ImageActor actorTransitTo; + Image actorTransitTo; TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo); waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback ); crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback ); foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback ); - //check that the wave effect is used to transit to secondImageActor + //check that the wave effect is used to transit to secondImage currentEffect = waveEffect; - actorTransitTo = secondImageActor; - waveEffect.SetCurrentImage( firstImageActor ); - waveEffect.SetTargetImage( secondImageActor ); + actorTransitTo = secondImage; + waveEffect.SetCurrentImage( firstImage ); + waveEffect.SetTargetImage( secondImage ); waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); Wait( application, TRANSITION_DURATION ); DALI_TEST_CHECK(callback.mSignalVerified); callback.Reset(); - //check that the wave effect is used to transit to thirdImageActor - actorTransitTo = thirdImageActor; - waveEffect.SetTargetImage( thirdImageActor ); + //check that the wave effect is used to transit to thirdImage + actorTransitTo = thirdImage; + waveEffect.SetTargetImage( thirdImage ); waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); Wait( application, TRANSITION_DURATION ); DALI_TEST_CHECK(callback.mSignalVerified); callback.Reset(); - //check that the cross effect is used to transit to secondImageActor + //check that the cross effect is used to transit to secondImage currentEffect = crossEffect; - actorTransitTo = secondImageActor; - crossEffect.SetCurrentImage( thirdImageActor ); - crossEffect.SetTargetImage( secondImageActor ); + actorTransitTo = secondImage; + crossEffect.SetCurrentImage( thirdImage ); + crossEffect.SetTargetImage( secondImage ); crossEffect.StartTransition(true); Wait( application, TRANSITION_DURATION ); DALI_TEST_CHECK(callback.mSignalVerified); callback.Reset(); - //check that the cross effect is used to transit to firstImageActor - actorTransitTo = firstImageActor; - crossEffect.SetTargetImage( firstImageActor ); + //check that the cross effect is used to transit to firstImage + actorTransitTo = firstImage; + crossEffect.SetTargetImage( firstImage ); crossEffect.StartTransition(false); Wait( application, TRANSITION_DURATION ); DALI_TEST_CHECK(callback.mSignalVerified); callback.Reset(); - //check that the fold effect is used to transit to secondImageActor + //check that the fold effect is used to transit to secondImage currentEffect = foldEffect; - actorTransitTo = secondImageActor; - foldEffect.SetCurrentImage( firstImageActor ); - foldEffect.SetTargetImage( secondImageActor ); + actorTransitTo = secondImage; + foldEffect.SetCurrentImage( firstImage ); + foldEffect.SetTargetImage( secondImage ); foldEffect.StartTransition(); Wait( application, TRANSITION_DURATION ); DALI_TEST_CHECK( callback.mSignalVerified ); callback.Reset(); - //check that the fold effect is used to transit to thirdImageActor - actorTransitTo = thirdImageActor; - foldEffect.SetTargetImage( thirdImageActor ); + //check that the fold effect is used to transit to thirdImage + actorTransitTo = thirdImage; + foldEffect.SetTargetImage( thirdImage ); foldEffect.StartTransition( false ); Wait( application, TRANSITION_DURATION ); DALI_TEST_CHECK( callback.mSignalVerified ); @@ -627,38 +691,38 @@ int UtcDaliCubeTransitionEffectPauseResumeTransition(void) tet_infoline(" UtcDaliCubeTransitionEffectPauseResumeTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30); - ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20); + Image firstImage = BufferImage::New( 30, 30 ); + Image secondImage = BufferImage::New( 20, 20 ); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); waveEffect.SetTransitionDuration( TRANSITION_DURATION ); waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - Actor rootActor = waveEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + Stage::GetCurrent().Add( waveEffect ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); crossEffect.SetTransitionDuration( TRANSITION_DURATION ); crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - rootActor = crossEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + Stage::GetCurrent().Add( crossEffect ); - CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); foldEffect.SetTransitionDuration( TRANSITION_DURATION ); - rootActor = crossEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); + Stage::GetCurrent().Add( foldEffect ); bool signalVerified = false; CubeTransitionEffect currentEffect; - ImageActor actorTransitTo; + Image actorTransitTo; TransitionCompletedCallback callback(signalVerified, currentEffect, actorTransitTo); waveEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback ); crossEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback ); foldEffect.TransitionCompletedSignal().Connect( &callback, &TransitionCompletedCallback::Callback ); currentEffect = waveEffect; - actorTransitTo = secondImageActor; - waveEffect.SetCurrentImage( firstImageActor ); - waveEffect.SetTargetImage( secondImageActor ); + actorTransitTo = secondImage; + waveEffect.SetCurrentImage( firstImage ); + waveEffect.SetTargetImage( secondImage ); // start transition; transit for 0.5*duration; pause for 0.5*duration; // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration; // only until now the transition finished signal can be received @@ -680,9 +744,9 @@ int UtcDaliCubeTransitionEffectPauseResumeTransition(void) callback.Reset(); currentEffect = crossEffect; - actorTransitTo = firstImageActor; - crossEffect.SetCurrentImage( secondImageActor ); - crossEffect.SetTargetImage( firstImageActor ); + actorTransitTo = firstImage; + crossEffect.SetCurrentImage( secondImage ); + crossEffect.SetTargetImage( firstImage ); // start transition; transit for 0.25*duration; pause for 0.2*duration; // resume for 0.5*duration; pause for 0.2*duration; resume for another 0.25*duration; // only until now the transition finished signal can be received @@ -704,9 +768,9 @@ int UtcDaliCubeTransitionEffectPauseResumeTransition(void) callback.Reset(); currentEffect = foldEffect; - actorTransitTo = secondImageActor; - foldEffect.SetCurrentImage( firstImageActor ); - foldEffect.SetTargetImage( secondImageActor ); + actorTransitTo = secondImage; + foldEffect.SetCurrentImage( firstImage ); + foldEffect.SetTargetImage( secondImage ); // start transition; transit for 0.5*duration; pause for 0.5*duration; // resume for 0.25*duration; pause for 0.25*duration; resume for another 0.25*duration; // only until now the transition finished signal can be received @@ -734,60 +798,63 @@ int UtcDaliCubeTransitionWaveEffectStopTransition(void) tet_infoline(" UtcDaliCubeTransitionWaveEffectStopTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30); - ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20); + Image firstImage = BufferImage::New( 30, 30 ); + Image secondImage = BufferImage::New( 20, 20 ); - CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect waveEffect = CubeTransitionWaveEffect::New( NUM_ROWS, NUM_COLUMNS ); + waveEffect.SetSize( VIEW_AREA_SIZE ); waveEffect.SetTransitionDuration( TRANSITION_DURATION ); waveEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - Actor rootActor = waveEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); - Actor cube = rootActor.GetChildAt(0); - waveEffect.SetCurrentImage( firstImageActor ); + waveEffect.SetCurrentImage( firstImage ); + waveEffect.SetTargetImage( secondImage ); - Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f); - Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f); + Stage::GetCurrent().Add( waveEffect ); + + application.SendNotification(); + application.Render(); - //check the cube rotation value and color values after stopping different transitions in the middle - waveEffect.SetTargetImage( secondImageActor ); waveEffect.StartTransition(true); + + Actor cube = waveEffect.GetChildAt(0).GetChildAt(0); + + //check the cube rotation value and color values reset after stopping different transitions in the middle Wait( application, TRANSITION_DURATION*0.2f ); waveEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - waveEffect.SetTargetImage( firstImageActor ); + waveEffect.SetTargetImage( firstImage ); waveEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); Wait( application, TRANSITION_DURATION*0.4f ); waveEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - waveEffect.SetTargetImage( secondImageActor ); + waveEffect.SetTargetImage( secondImage ); waveEffect.StartTransition(false); Wait( application, TRANSITION_DURATION*0.6f ); waveEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - waveEffect.SetTargetImage( firstImageActor ); + waveEffect.SetTargetImage( firstImage ); waveEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); Wait( application, TRANSITION_DURATION*0.8f ); waveEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); END_TEST; } @@ -797,57 +864,59 @@ int UtcDaliCubeTransitionCrossEffectStopTransition(void) tet_infoline(" UtcDaliCubeTransitionCrossEffectStopTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30); - ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20); + Image firstImage = BufferImage::New( 30, 30 ); + Image secondImage = BufferImage::New( 20, 20 ); - CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect crossEffect = CubeTransitionCrossEffect::New( NUM_ROWS, NUM_COLUMNS ); + crossEffect.SetSize( VIEW_AREA_SIZE ); crossEffect.SetTransitionDuration( TRANSITION_DURATION ); crossEffect.SetCubeDisplacement( CUBE_DISPLACEMENT ); - Actor rootActor = crossEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); - crossEffect.SetCurrentImage( firstImageActor ); - Actor cube0 = rootActor.GetChildAt(0); - Actor cube1 = rootActor.GetChildAt(1); + crossEffect.SetCurrentImage( firstImage ); + crossEffect.SetTargetImage( secondImage ); - Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f); - Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f); + Stage::GetCurrent().Add( crossEffect ); + + application.SendNotification(); + application.Render(); - //check the cube rotation values and color values after stop the different transitions in the middle - crossEffect.SetTargetImage( secondImageActor ); crossEffect.StartTransition(true); + + Actor cube0 = crossEffect.GetChildAt(0).GetChildAt(0); + Actor cube1 = crossEffect.GetChildAt(0).GetChildAt(1); + + //check the cube rotation values and color values reset after stop the different transitions in the middle Wait( application, TRANSITION_DURATION*0.2f ); crossEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - crossEffect.SetTargetImage( firstImageActor ); + crossEffect.SetTargetImage( firstImage ); crossEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); Wait( application, TRANSITION_DURATION*0.4f ); crossEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_180, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - crossEffect.SetTargetImage( secondImageActor ); + crossEffect.SetTargetImage( secondImage ); crossEffect.StartTransition(false); Wait( application, TRANSITION_DURATION*0.6f ); crossEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::ZERO), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - crossEffect.SetTargetImage( firstImageActor ); + crossEffect.SetTargetImage( firstImage ); crossEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); Wait( application, TRANSITION_DURATION*0.8f ); crossEffect.StopTransition(); @@ -855,8 +924,8 @@ int UtcDaliCubeTransitionCrossEffectStopTransition(void) application.Render(RENDER_FRAME_INTERVAL); DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); END_TEST; } @@ -866,55 +935,59 @@ int UtcDaliCubeTransitionFoldEffectStopTransition(void) tet_infoline(" UtcDaliCubeTransitionFoldEffectStopTransition "); application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE ); - ImageActor firstImageActor = CreateSolidColorImageActor(application, Color::RED,30,30); - ImageActor secondImageActor = CreateSolidColorImageActor(application, Color::GREEN,20,20); + Image firstImage = BufferImage::New( 30, 30 ); + Image secondImage = BufferImage::New( 20, 20 ); - CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS, VIEW_AREA_SIZE ); + CubeTransitionEffect foldEffect = CubeTransitionFoldEffect::New( NUM_ROWS, NUM_COLUMNS ); + foldEffect.SetSize( VIEW_AREA_SIZE ); foldEffect.SetTransitionDuration( TRANSITION_DURATION ); - Actor rootActor = foldEffect.GetRoot(); - Stage::GetCurrent().Add( rootActor ); - foldEffect.SetCurrentImage( firstImageActor ); - Actor cube0 = rootActor.GetChildAt(0); - Actor cube1 = rootActor.GetChildAt(1); + foldEffect.SetCurrentImage( firstImage ); + foldEffect.SetTargetImage( secondImage ); - Vector4 fullBrightness = Vector4(1.f,1.f,1.f,1.f); - Vector4 halfBrightness = Vector4(0.5f, 0.5f, 0.5f, 1.f); + Stage::GetCurrent().Add( foldEffect ); + + application.SendNotification(); + application.Render(); - //check the cube rotation values and color values after stop the different transitions in the middle - foldEffect.SetTargetImage( secondImageActor ); foldEffect.StartTransition(true); + + Actor cube0 = foldEffect.GetChildAt(0).GetChildAt(0); + Actor cube1 = foldEffect.GetChildAt(0).GetChildAt(1); + + //check the cube rotation values and color values after stop the different transitions in the middle Wait( application, TRANSITION_DURATION*0.2f ); foldEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - foldEffect.SetTargetImage( firstImageActor ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + + foldEffect.SetTargetImage( firstImage ); foldEffect.StartTransition(PAN_POSITION1, PAN_DISPLACEMENT1); Wait( application, TRANSITION_DURATION*0.4f ); foldEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_180, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - foldEffect.SetTargetImage( secondImageActor ); + foldEffect.SetTargetImage( secondImage ); foldEffect.StartTransition(false); Wait( application, TRANSITION_DURATION*0.6f ); foldEffect.StopTransition(); application.SendNotification(); application.Render(RENDER_FRAME_INTERVAL); - DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( -Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_90, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::XAXIS), FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); - foldEffect.SetTargetImage( firstImageActor ); + foldEffect.SetTargetImage( firstImage ); foldEffect.StartTransition(PAN_POSITION2, PAN_DISPLACEMENT2); Wait( application, TRANSITION_DURATION*0.8f ); foldEffect.StopTransition(); @@ -922,7 +995,7 @@ int UtcDaliCubeTransitionFoldEffectStopTransition(void) application.Render(RENDER_FRAME_INTERVAL); DALI_TEST_EQUALS( cube1.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); DALI_TEST_EQUALS( cube0.GetCurrentOrientation(), Quaternion( Dali::ANGLE_0, Vector3::YAXIS), FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), fullBrightness, FLT_EPISILON, TEST_LOCATION ); - DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), halfBrightness, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(0).GetCurrentColor(), FULL_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); + DALI_TEST_EQUALS( cube0.GetChildAt(1).GetCurrentColor(), HALF_BRIGHTNESS, FLT_EPISILON, TEST_LOCATION ); END_TEST; } diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.cpp b/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.cpp index 9af4758..a989b72 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.cpp +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.cpp @@ -27,14 +27,20 @@ namespace Dali namespace Toolkit { -CubeTransitionCrossEffect::CubeTransitionCrossEffect(Internal::CubeTransitionCrossEffect* impl) -: CubeTransitionEffect(impl) +CubeTransitionCrossEffect::CubeTransitionCrossEffect( Internal::CubeTransitionCrossEffect& implementation ) +: CubeTransitionEffect( implementation ) { } -CubeTransitionCrossEffect CubeTransitionCrossEffect::New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize) +CubeTransitionCrossEffect::CubeTransitionCrossEffect( Dali::Internal::CustomActor* internal ) +: CubeTransitionEffect( internal ) { - return Internal::CubeTransitionCrossEffect::New( numRows, numColumns, viewAreaSize ); + VerifyCustomActorPointer< Internal::CubeTransitionCrossEffect >( internal ); +} + +CubeTransitionCrossEffect CubeTransitionCrossEffect::New( unsigned int numRows, unsigned int numColumns ) +{ + return Internal::CubeTransitionCrossEffect::New( numRows, numColumns ); } } // namespace Toolkit diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.h b/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.h index 9d318e9..11bcc2e 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.h +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-cross-effect.h @@ -37,7 +37,7 @@ namespace Internal DALI_INTERNAL /** * SubClass of CubeTransitionEffect - * Rotate the neighboring cubes in perpendicular directions to transite from one image to another + * Rotate the neighboring cubes in perpendicular directions to transition from one image to another */ class DALI_IMPORT_API CubeTransitionCrossEffect : public CubeTransitionEffect { @@ -48,19 +48,24 @@ public: * Create an initialized CubeTransitionCrossEffect * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect * @return The initialized CubeTransitionCrossEffect object */ - static CubeTransitionCrossEffect New( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + static CubeTransitionCrossEffect New( unsigned int numRows, unsigned int numColumns ); public: // Not intended for developer use /** - * This constructor is used by Dali New() methods. - * @param [in] impl A pointer to a newly allocated Dali resource + * Creates a handle using the Toolkit::Internal implementation. + * @param[in] implementation The Control implementation. */ - explicit DALI_INTERNAL CubeTransitionCrossEffect( Internal::CubeTransitionCrossEffect* impl ); + DALI_INTERNAL CubeTransitionCrossEffect( Internal::CubeTransitionCrossEffect& implementation ); + + /** + * Allows the creation of this Control from an Internal::CustomActor pointer. + * @param[in] internal A pointer to the internal CustomActor. + */ + DALI_INTERNAL CubeTransitionCrossEffect( Dali::Internal::CustomActor* internal ); }; // class CubeTransitionCrossEffect diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-effect.cpp b/dali-toolkit/devel-api/transition-effects/cube-transition-effect.cpp index 6ba444e..de78244 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-effect.cpp +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-effect.cpp @@ -35,14 +35,20 @@ CubeTransitionEffect::~CubeTransitionEffect() { } -CubeTransitionEffect::CubeTransitionEffect(Internal::CubeTransitionEffect* impl) -: BaseHandle(impl) +CubeTransitionEffect::CubeTransitionEffect( Internal::CubeTransitionEffect& implementation ) +: Control( implementation ) { } +CubeTransitionEffect::CubeTransitionEffect( Dali::Internal::CustomActor* internal ) +: Control( internal ) +{ + VerifyCustomActorPointer(internal); +} + CubeTransitionEffect CubeTransitionEffect::DownCast( BaseHandle handle ) { - return CubeTransitionEffect( dynamic_cast< Dali::Toolkit::Internal::CubeTransitionEffect* >( handle.GetObjectPtr() ) ); + return Control::DownCast( handle ); } void CubeTransitionEffect::SetTransitionDuration( float duration ) @@ -65,24 +71,19 @@ float CubeTransitionEffect::GetCubeDisplacement() const return GetImpl(*this).GetCubeDisplacement(); } -Actor CubeTransitionEffect::GetRoot() -{ - return GetImpl(*this).GetRoot(); -} - -bool CubeTransitionEffect::IsTransiting() +bool CubeTransitionEffect::IsTransitioning() { - return GetImpl(*this).IsTransiting(); + return GetImpl(*this).IsTransitioning(); } -void CubeTransitionEffect::SetCurrentImage(ImageActor imageActor) +void CubeTransitionEffect::SetCurrentImage( Image image ) { - GetImpl(*this).SetCurrentImage( imageActor ); + GetImpl(*this).SetCurrentImage( image ); } -void CubeTransitionEffect::SetTargetImage(ImageActor imageActor) +void CubeTransitionEffect::SetTargetImage( Image image ) { - GetImpl(*this).SetTargetImage( imageActor ); + GetImpl(*this).SetTargetImage( image ); } void CubeTransitionEffect::StartTransition( bool toNextImage ) diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-effect.h b/dali-toolkit/devel-api/transition-effects/cube-transition-effect.h index 5afab34..7b915a6 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-effect.h +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-effect.h @@ -18,9 +18,8 @@ * */ -// EXTERNAL INCLUDES -#include -#include +// INTERNAL INCLUDES +#include namespace Dali { @@ -39,7 +38,7 @@ class CubeTransitionEffect; } // namespace Internal /** - * CubeTransitionEffect is a base class of custom transition effect on Image actors + * CubeTransitionEffect is a base class of custom transition effect on Images * The two images are partitioned into tiles and serves as two perpendicular faces of cubes * By rotating these cubes to transit from one image to another * @@ -49,7 +48,7 @@ class CubeTransitionEffect; * * //create a new CubeTransitionEffect * //use the New funtion of subclass ( CubeTransitionWaveEffect or CubeTransitionCrossEffect ) - * CubeTransitionEffect cubeEffect = CubeTransitionWaveEffect::New(numRows, numColumns, viewAreaSize); + * CubeTransitionEffect cubeEffect = CubeTransitionWaveEffect::New(numRows, numColumns); * * //set the duration of transition animation * cubeEffect.SetTransitionDuration( animationDuration ); @@ -58,14 +57,14 @@ class CubeTransitionEffect; * cubeEffect.SetCubeDisplacement( cubeDisplacement ); * * // Add to stage - * stage.Add( cubeEffect.GetRoot() ); + * stage.Add( cubeEffect ); * * // Set the current image, - * // only need to set at beginning or when the current image was transited to with no effect or other effect - * cubeEffect.SetCurrentImage( firstImageActor ); + * // only need to set at beginning or when the current image was transitioned to with no effect or other effect + * cubeEffect.SetCurrentImage( firstImage ); * * // Set target image, paired with startTransition. These two steps would be repeated as needed - * cubeEffect.SetTargetimage( secondImageActor ); + * cubeEffect.SetTargetimage( secondImage ); * // Activate the effect * // no param / param ture: default horizontally left panGesture * // or param false: default horizontally right panGesture @@ -79,7 +78,7 @@ class CubeTransitionEffect; * |----------------------|----------------------------------| * | transition-completed | @ref TransitionCompletedSignal() | */ -class DALI_IMPORT_API CubeTransitionEffect : public BaseHandle +class DALI_IMPORT_API CubeTransitionEffect : public Control { public: @@ -124,40 +123,34 @@ public: void SetCubeDisplacement( float displacement ); /** - * Getet the displacement of bouncing animation during cube's rotation + * Get the displacement of bouncing animation during cube's rotation * @return displacement The displacement of bouncing animation */ float GetCubeDisplacement() const; /** - * Return the transition effect root actor, should then be added to stage - * @return The transition effect root actor - */ - Actor GetRoot(); - - /** * Return the transition status * @return True if the transition is under processing; false if finished */ - bool IsTransiting(); + bool IsTransitioning(); /** - * Set the current image to transite from - * if using this same effect continuely, only need to set once - * @param[in] imageActor The current imageActor + * Set the current image to transition from + * if using this same effect continually, only need to set once + * @param[in] image The current image */ - void SetCurrentImage(ImageActor imageActor); + void SetCurrentImage(Image image); /** * Set the target image to transit to - * @param[in] imageActor The new imageActor showing on stage + * @param[in] image The new Image showing on stage */ - void SetTargetImage(ImageActor imageActor); + void SetTargetImage(Image image); /** * Activate the transition animation with horizontally left/right panGesture * @pre target image is set - * @param[in] toNextImage Horizontally left panGesture if ture, horizontally right if false + * @param[in] toNextImage Horizontally left panGesture if true, horizontally right if false */ void StartTransition( bool toNextImage = true ); @@ -183,7 +176,7 @@ public: /** * Inactivate the transition animation if it is running. - * Also set the rotation and position of cubes, colors of tile to the same as the final state when the animation if finished completely + * Also set the rotation and position of cubes, colors of tile to the same as the start state when the animation if finished completely * It does nothing if the animation is not running. */ void StopTransition(); @@ -191,7 +184,7 @@ public: public: //Signal //Transition animation completed signal - typedef Signal< void ( CubeTransitionEffect, ImageActor ) > TransitionCompletedSignalType; + typedef Signal< void ( CubeTransitionEffect, Image ) > TransitionCompletedSignalType; /** * Signal emitted when the transition has completed animation @@ -205,7 +198,19 @@ public: //Signal public: // Not intended for developer use - explicit DALI_INTERNAL CubeTransitionEffect( Internal::CubeTransitionEffect* impl ); + /** + * @brief Creates a handle using the Toolkit::Internal implementation. + * + * @param[in] implementation The Control implementation. + */ + DALI_INTERNAL CubeTransitionEffect( Internal::CubeTransitionEffect& implementation ); + + /** + * @brief Allows the creation of this Control from an Internal::CustomActor pointer. + * + * @param[in] internal A pointer to the internal CustomActor. + */ + DALI_INTERNAL CubeTransitionEffect( Dali::Internal::CustomActor* internal ); }; //class CubeTransitionEffect diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.cpp b/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.cpp index 633d01b..7d47057 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.cpp +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.cpp @@ -27,14 +27,20 @@ namespace Dali namespace Toolkit { -CubeTransitionFoldEffect::CubeTransitionFoldEffect(Internal::CubeTransitionFoldEffect* impl) -: CubeTransitionEffect(impl) +CubeTransitionFoldEffect::CubeTransitionFoldEffect( Internal::CubeTransitionFoldEffect& implementation ) +: CubeTransitionEffect( implementation ) { } -CubeTransitionFoldEffect CubeTransitionFoldEffect::New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize) +CubeTransitionFoldEffect::CubeTransitionFoldEffect( Dali::Internal::CustomActor* internal ) +: CubeTransitionEffect( internal ) { - return Internal::CubeTransitionFoldEffect::New( numRows, numColumns, viewAreaSize ); + VerifyCustomActorPointer< Internal::CubeTransitionFoldEffect >( internal ); +} + +CubeTransitionFoldEffect CubeTransitionFoldEffect::New(unsigned int numRows, unsigned int numColumns ) +{ + return Internal::CubeTransitionFoldEffect::New( numRows, numColumns ); } } // namespace Toolkit diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.h b/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.h index 789a30e..0543d27 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.h +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-fold-effect.h @@ -37,7 +37,7 @@ namespace Internal DALI_INTERNAL /** * SubClass of CubeTransitionEffect - * Rotate the neighboring cubes in opposite directions to transite from one image to another + * Rotate the neighboring cubes in opposite directions to transition from one image to another */ class DALI_IMPORT_API CubeTransitionFoldEffect : public CubeTransitionEffect { @@ -48,19 +48,24 @@ public: * Create an initialized CubeTransitionFoldEffect * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect * @return The initialized CubeTransitionFoldEffect object */ - static CubeTransitionFoldEffect New( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + static CubeTransitionFoldEffect New( unsigned int numRows, unsigned int numColumns ); public: // Not intended for developer use /** - * This constructor is used by Dali New() methods. - * @param [in] impl A pointer to a newly allocated Dali resource + * Creates a handle using the Toolkit::Internal implementation. + * @param[in] implementation The Control implementation. */ - explicit DALI_INTERNAL CubeTransitionFoldEffect( Internal::CubeTransitionFoldEffect* impl ); + DALI_INTERNAL CubeTransitionFoldEffect( Internal::CubeTransitionFoldEffect& implementation ); + + /** + * Allows the creation of this Control from an Internal::CustomActor pointer. + * @param[in] internal A pointer to the internal CustomActor. + */ + DALI_INTERNAL CubeTransitionFoldEffect( Dali::Internal::CustomActor* internal ); }; // class CubeTransitionFoldEffect diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.cpp b/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.cpp index 33d292c..66315ad 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.cpp +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.cpp @@ -27,14 +27,20 @@ namespace Dali namespace Toolkit { -CubeTransitionWaveEffect::CubeTransitionWaveEffect(Internal::CubeTransitionWaveEffect* impl) -: CubeTransitionEffect(impl) +CubeTransitionWaveEffect::CubeTransitionWaveEffect( Internal::CubeTransitionWaveEffect& implementation ) +: CubeTransitionEffect( implementation ) { } -CubeTransitionWaveEffect CubeTransitionWaveEffect::New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize) +CubeTransitionWaveEffect::CubeTransitionWaveEffect( Dali::Internal::CustomActor* internal ) +: CubeTransitionEffect( internal ) { - return Internal::CubeTransitionWaveEffect::New( numRows, numColumns, viewAreaSize ); + VerifyCustomActorPointer< Internal::CubeTransitionWaveEffect >( internal ); +} + +CubeTransitionWaveEffect CubeTransitionWaveEffect::New(unsigned int numRows, unsigned int numColumns ) +{ + return Internal::CubeTransitionWaveEffect::New( numRows, numColumns ); } } // namespace Toolkit diff --git a/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.h b/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.h index a3b1dc1..b8a5c4f 100644 --- a/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.h +++ b/dali-toolkit/devel-api/transition-effects/cube-transition-wave-effect.h @@ -48,19 +48,24 @@ public: * Create an initialized CubeTransitionWaveEffect * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect * @return The initialized CubeTransitionWaveEffect object */ - static CubeTransitionWaveEffect New( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + static CubeTransitionWaveEffect New( unsigned int numRows, unsigned int numColumns ); public: // Not intended for developer use /** - * This constructor is used by Dali New() methods. - * @param[in] impl A pointer to a newly allocated Dali resource + * Creates a handle using the Toolkit::Internal implementation. + * @param[in] implementation The Control implementation. */ - explicit DALI_INTERNAL CubeTransitionWaveEffect( Internal::CubeTransitionWaveEffect* impl ); + DALI_INTERNAL CubeTransitionWaveEffect( Internal::CubeTransitionWaveEffect& implementation ); + + /** + * Allows the creation of this Control from an Internal::CustomActor pointer. + * @param[in] internal A pointer to the internal CustomActor. + */ + DALI_INTERNAL CubeTransitionWaveEffect( Dali::Internal::CustomActor* internal ); }; // class CubeTransitionWaveEffect diff --git a/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.cpp b/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.cpp index 6196d91..10ffbff 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.cpp +++ b/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.cpp @@ -27,19 +27,19 @@ namespace Toolkit namespace Internal { -CubeTransitionCrossEffect::CubeTransitionCrossEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ) -: CubeTransitionEffect( numRows, numColumns, viewAreaSize), - mDisplacementRatio( 1.f ) +CubeTransitionCrossEffect::CubeTransitionCrossEffect( unsigned int numRows, unsigned int numColumns ) +: CubeTransitionEffect( numRows, numColumns ), + mDisplacementSpreadFactor( 0.008f ) { } -Toolkit::CubeTransitionCrossEffect CubeTransitionCrossEffect::New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize) +Toolkit::CubeTransitionCrossEffect CubeTransitionCrossEffect::New(unsigned int numRows, unsigned int numColumns ) { // Create the implementation - CubeTransitionCrossEffect* internalCubeTransEffect = new CubeTransitionCrossEffect( numRows, numColumns, viewAreaSize ); + IntrusivePtr< CubeTransitionCrossEffect > internalCubeTransEffect = new CubeTransitionCrossEffect( numRows, numColumns ); // Pass ownership to CustomActor handle - Toolkit::CubeTransitionCrossEffect cubeTransEffect( internalCubeTransEffect ); + Toolkit::CubeTransitionCrossEffect cubeTransEffect( *internalCubeTransEffect ); //Initialization internalCubeTransEffect->Initialize(); @@ -49,89 +49,107 @@ Toolkit::CubeTransitionCrossEffect CubeTransitionCrossEffect::New(unsigned int n void CubeTransitionCrossEffect::OnInitialize() { - float offsetX = -mTileSize.width*0.5f; - float offsetY = -mTileSize.height*0.5f; unsigned int idx; - for( unsigned int y = 0; y < mNumRows; y++ ) + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns; - for( unsigned int x = y%2; x < mNumColumns; x=x+2) + for( unsigned int x = y % 2; x < mColumns; x += 2 ) { - mBoxes[idx+x].SetZ( offsetY ); - mTiles[0][idx+x].SetZ( -offsetY ); - mTiles[1][idx+x].SetY( offsetY ); + idx = y * mColumns + x; + SetTargetTop( idx ); } - for( unsigned int x = (y+1)%2; x < mNumColumns; x=x+2) + for( unsigned int x = ( y + 1 ) % 2; x < mColumns; x += 2 ) { - mTiles[0][idx+x].SetZ( -offsetX ); - mTiles[1][idx+x].SetX( offsetX ); + idx = y * mColumns + x; + SetTargetRight( idx ); } } } void CubeTransitionCrossEffect::OnStartTransition( Vector2 panPosition, Vector2 panDisplacement ) { - float angle = mRotateIndex * Math::PI_2 ; - Vector3 translation0 = mTiles[mContainerIndex][ 0 ].GetCurrentPosition()*(-2.f); - Vector3 translation1 = mTiles[mContainerIndex][ mNumColumns ].GetCurrentPosition()*(-2.f); - + float angle = Math::PI_2; unsigned int idx; - mDisplacementRatio = 1.f + mCubeDisplacement / (mTileSize.width + mTileSize.height); - for( unsigned int y = 0; y < mNumRows; y++ ) + if( panDisplacement.x < 0 ) { - for( unsigned int x = y%2; x < mNumColumns; x=x+2) // rotate vertically + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns + x; - SetupAnimation( idx, -angle, Vector3::XAXIS, translation0 ); + for( unsigned int x = y % 2; x < mColumns; x += 2 ) + { + idx = y * mColumns + x; + SetTargetTop( idx ); + } + for( unsigned int x = ( y + 1 ) % 2; x < mColumns; x += 2 ) + { + idx = y * mColumns + x; + SetTargetRight( idx ); + } } - for( unsigned int x = (y+1)%2; x < mNumColumns; x=x+2) // rotate horizontally + } + else + { + angle = -angle; + + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns + x; - SetupAnimation( idx, angle, Vector3::YAXIS, translation1 ); + for( unsigned int x = y % 2; x < mColumns; x += 2 ) + { + idx = y * mColumns + x; + SetTargetBottom( idx ); + } + for( unsigned int x = ( y + 1 ) % 2; x < mColumns; x += 2 ) + { + idx = y * mColumns + x; + SetTargetLeft( idx ); + } } } - mAnimation.Play(); - mIsAnimating = true; -} + const Vector2& size = Self().GetCurrentSize().GetVectorXY(); + Vector2 halfSize = size * 0.5f; + //the centre to "explode" the tiles outwards from + Vector3 centre( halfSize.x, halfSize.y, -1.0f / mDisplacementSpreadFactor ); -void CubeTransitionCrossEffect::OnStopTransition() -{ - float angle = mRotateIndex * Math::PI_2 ; - unsigned int idx; - for( unsigned int y = 0; y < mNumRows; y++ ) + for( unsigned int y = 0; y < mRows; y++ ) { - for( unsigned int x = y%2; x < mNumColumns; x=x+2) + for( unsigned int x = y%2; x < mColumns; x=x+2) // rotate vertically { - idx = y*mNumColumns + x; - mBoxes[idx].SetOrientation( Radian(angle), Vector3::XAXIS ); + idx = y*mColumns + x; + SetupAnimation( idx, x, y, -angle, Vector3::XAXIS, centre ); } - for( unsigned int x = (y+1)%2; x < mNumColumns; x=x+2) + for( unsigned int x = (y+1)%2; x < mColumns; x=x+2) // rotate horizontally { - idx = y*mNumColumns + x; - mBoxes[idx].SetOrientation( Radian(-angle), Vector3::YAXIS ); + idx = y*mColumns + x; + SetupAnimation( idx, x, y, angle, Vector3::YAXIS, centre ); } } + + mAnimation.Play(); + mIsAnimating = true; } -void CubeTransitionCrossEffect::SetupAnimation(unsigned int actorIndex, float angle, - const Vector3 axis, Vector3 resetTranslation) +void CubeTransitionCrossEffect::SetupAnimation( unsigned int actorIndex, unsigned int x, unsigned int y, float angle, const Vector3 axis, const Vector3& displacementCentre ) { - if ( mFirstTransition && (!mIsToNextImage) ) // for the first transition and it is going to previous image - { - mTiles[mContainerIndex][actorIndex].SetOrientation( Radian( angle), axis ); - } - else if( !mChangeTurningDirection ) // reset rotation, translation and color - { - mTiles[mContainerIndex][actorIndex].TranslateBy( resetTranslation ); - mTiles[mContainerIndex][actorIndex].SetOrientation( Radian( angle), axis ); - } - mAnimation.AnimateTo( Property( mBoxes[actorIndex], Actor::Property::ORIENTATION ), Quaternion( Radian( -angle ), axis ), AlphaFunction::EASE_IN_OUT_SINE ); - Vector3 position(mBoxes[actorIndex].GetCurrentPosition()); - mAnimation.AnimateTo( Property( mBoxes[actorIndex], Actor::Property::POSITION ), position * mDisplacementRatio + Vector3( 0.f, 0.f, mCubeDisplacement ), AlphaFunction::BOUNCE ); - mAnimation.AnimateTo( Property( mTiles[mContainerIndex^1][actorIndex], Actor::Property::COLOR ), HALF_BRIGHTNESS, AlphaFunction::EASE_OUT ); - mAnimation.AnimateTo( Property( mTiles[mContainerIndex][actorIndex], Actor::Property::COLOR ), FULL_BRIGHTNESS, AlphaFunction::EASE_IN ); + const Vector2& size = Self().GetCurrentSize().GetVectorXY(); + Vector2 halfSize = size * 0.5f; + + //the position of the centre of the front face tile + Vector3 position( halfSize.x * (2.0f * x + 1.0f) / mColumns, halfSize.y * (2.0f * y + 1.0f ) / mRows, 0.0f ); + + Vector3 direction = position - displacementCentre; + float length = direction.Length(); + direction.Normalize(); + + float deltaLength = mCubeDisplacement / direction.z; //the length along the direction vector such that the projected direction onto the z axis is equal to mCubeDisplacement + + Vector3 newPosition = ( direction * (length + deltaLength ) ) + displacementCentre; + Vector3 newLocalPosition = newPosition - position; + + mAnimation.AnimateTo( Property( mBoxes[ actorIndex ], Actor::Property::ORIENTATION ), Quaternion( Radian( -angle ), axis ), AlphaFunction::EASE_IN_OUT_SINE ); + mAnimation.AnimateTo( Property( mBoxes[ actorIndex ], Actor::Property::POSITION ), newLocalPosition, AlphaFunction::BOUNCE ); + + mAnimation.AnimateTo( Property( mCurrentTiles[ actorIndex ], Actor::Property::COLOR ), HALF_BRIGHTNESS, AlphaFunction::EASE_OUT ); + mAnimation.AnimateTo( Property( mTargetTiles[ actorIndex ], Actor::Property::COLOR ), FULL_BRIGHTNESS, AlphaFunction::EASE_IN ); } } // namespace Internal diff --git a/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.h b/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.h index d1416e4..8f6fda9 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.h +++ b/dali-toolkit/internal/transition-effects/cube-transition-cross-effect-impl.h @@ -45,7 +45,7 @@ public: /** * @copydoc Toolkit::CubeTransitionCrossEffect::New */ - static Toolkit::CubeTransitionCrossEffect New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize); + static Toolkit::CubeTransitionCrossEffect New( unsigned int numRows, unsigned int numColumns ); protected: @@ -59,34 +59,36 @@ protected: */ virtual void OnStartTransition( Vector2 panPosition, Vector2 panDisplacement ); - /** - * @copydoc Toolkit::Internal::CubeTransitionEffect::OnStopTransition - */ - virtual void OnStopTransition(); - private: /** - * Construct a new CubeTransitionCrossEffect object + * @brief Construct a new CubeTransitionCrossEffect object + * * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect */ - CubeTransitionCrossEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + CubeTransitionCrossEffect( unsigned int numRows, unsigned int numColumns ); /** - * Set up animation to an Actor + * @brief Set up animation to an Actor + * This will also displace the cubes in the z direction by mCubeDisplacement and spread them apart on the xy plane + * given by the closeness of displacementCentre to the XY plane at 0. + * * @param[in] actorIndex The index of the cube in the cube array * @param[in] angle The angle of the rotation animation - * @param[in] axis The axis of the rotation animation - * @param[in] resetTranslation The translation used to reset the actor position before animation + * @param[in] the centre to "explode" the tiles outwards from */ - - void SetupAnimation( unsigned int actorIndex, float angle, const Vector3 axis, Vector3 resetTranslation ); + void SetupAnimation( unsigned int actorIndex, unsigned int x, unsigned int y, float angle, const Vector3 axis, const Vector3& displacementCentre ); private: - float mDisplacementRatio; + /** + * The factor that determines how spread apart from each other the cubes will go + * when they are displaced during the transition animation. + * The larger the value the more the spread apart the cubes will be. + * it should be in the range (0.0, +infinity) + */ + float mDisplacementSpreadFactor; }; //class CubeTransitionCrossEffect @@ -94,22 +96,22 @@ private: // Helpers for public-api forwarding methods -inline Internal::CubeTransitionCrossEffect& GetImpl(Dali::Toolkit::CubeTransitionCrossEffect& obj) +inline Internal::CubeTransitionCrossEffect& GetImpl( Dali::Toolkit::CubeTransitionCrossEffect& obj ) { - DALI_ASSERT_ALWAYS(obj); + DALI_ASSERT_ALWAYS( obj ); - Dali::BaseObject& handle = obj.GetBaseObject(); + Dali::RefObject& handle = obj.GetImplementation(); - return static_cast(handle); + return static_cast< Internal::CubeTransitionCrossEffect& >( handle ); } -inline const Internal::CubeTransitionCrossEffect& GetImpl(const Dali::Toolkit::CubeTransitionCrossEffect& obj) +inline const Internal::CubeTransitionCrossEffect& GetImpl( const Dali::Toolkit::CubeTransitionCrossEffect& obj ) { - DALI_ASSERT_ALWAYS(obj); + DALI_ASSERT_ALWAYS( obj ); - const Dali::BaseObject& handle = obj.GetBaseObject(); + const Dali::RefObject& handle = obj.GetImplementation(); - return static_cast(handle); + return static_cast< const Internal::CubeTransitionCrossEffect& >( handle ); } } // namespace Toolkit diff --git a/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp b/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp index 444a3fd..f633607 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp +++ b/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp @@ -20,11 +20,10 @@ // EXTERNAL INCLUDES #include // for strcmp -#include -#include #include #include -#include +#include +#include namespace Dali { @@ -45,26 +44,86 @@ DALI_SIGNAL_REGISTRATION( Toolkit, CubeTransitionEffect, "transition-completed", DALI_TYPE_REGISTRATION_END() +const char* VERTEX_SHADER = DALI_COMPOSE_SHADER( + attribute mediump vec2 aPosition;\n + varying mediump vec2 vTexCoord;\n + uniform mediump mat4 uMvpMatrix;\n + uniform mediump vec3 uSize;\n + uniform mediump vec4 uTextureRect;\n + \n + void main()\n + {\n + mediump vec4 vertexPosition = vec4(aPosition, 0.0, 1.0);\n + vertexPosition.xyz *= uSize;\n + vertexPosition = uMvpMatrix * vertexPosition;\n + \n + vTexCoord = aPosition + vec2(0.5);\n + vTexCoord = mix(uTextureRect.xy, uTextureRect.zw, vTexCoord);\n + + gl_Position = vertexPosition;\n + }\n +); + +const char* FRAGMENT_SHADER = DALI_COMPOSE_SHADER( + varying mediump vec2 vTexCoord;\n + uniform sampler2D sTexture;\n + uniform lowp vec4 uColor;\n + uniform lowp vec4 uSamplerRect; + \n + void main()\n + {\n + gl_FragColor = texture2D( sTexture, vTexCoord ) * uColor;\n + }\n +); + +Actor CreateTile( const Vector4& samplerRect ) +{ + Actor tile = Actor::New(); + tile.SetAnchorPoint( AnchorPoint::CENTER ); + tile.RegisterProperty( "uTextureRect", samplerRect ); + return tile; +} + + +Geometry CreateQuadGeometry() +{ + const float halfWidth = 0.5f; + const float halfHeight = 0.5f; + struct QuadVertex { Vector2 position;}; + QuadVertex quadVertexData[4] = + { + { Vector2(-halfWidth, -halfHeight) }, + { Vector2( halfWidth, -halfHeight) }, + { Vector2(-halfWidth, halfHeight) }, + { Vector2( halfWidth, halfHeight) } + }; + + Property::Map quadVertexFormat; + quadVertexFormat["aPosition"] = Property::VECTOR2; + PropertyBuffer quadVertices = PropertyBuffer::New( quadVertexFormat, 4 ); + quadVertices.SetData(quadVertexData); + + // Create the geometry object + Geometry geometry = Geometry::New(); + geometry.AddVertexBuffer( quadVertices ); + geometry.SetGeometryType( Geometry::TRIANGLE_STRIP ); + + return geometry; +} + } const Vector4 CubeTransitionEffect::FULL_BRIGHTNESS( 1.0f, 1.0f, 1.0f, 1.0f ); const Vector4 CubeTransitionEffect::HALF_BRIGHTNESS( 0.5f, 0.5f, 0.5f, 1.0f ); -CubeTransitionEffect::CubeTransitionEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ) -: mNumRows( numRows ), - mNumColumns( numColumns ), - mViewAreaSize( viewAreaSize ), - mRotateIndex( 0 ), - mContainerIndex( 0 ), - mChangeTurningDirection( false ), - mIsToNextImage( true ), - mIsImageLoading( false ), - mAnimationDuration( 1.f ), +CubeTransitionEffect::CubeTransitionEffect( unsigned int rows, unsigned int columns ) +: Control( ControlBehaviour( 0 ) ), + mRows( rows ), + mColumns( columns ), mIsAnimating( false ), mIsPaused( false ), - mCubeDisplacement( 0.f ), - mFirstTransition( true ), - mBufferIndex( 0 ) + mAnimationDuration( 1.f ), + mCubeDisplacement( 0.f ) { } @@ -72,81 +131,181 @@ CubeTransitionEffect::~CubeTransitionEffect() { } -void CubeTransitionEffect::Initialize() +void CubeTransitionEffect::SetTargetRight( unsigned int idx ) +{ + mBoxType[ idx ] = RIGHT; + + mBoxes[ idx ].SetProperty(Actor::Property::PARENT_ORIGIN_Z, 1.0f - mTileSize.x * 0.5f ); + + mTargetTiles[ idx ].SetParentOrigin( Vector3( 1.f, 0.5f, 0.5f) ); + mTargetTiles[ idx ].SetOrientation( Degree( 90.f ), Vector3::YAXIS ); +} + +void CubeTransitionEffect::SetTargetLeft( unsigned int idx ) { - //create root actor for the cube transition effect, only visible during the transition - mRoot = Actor::New(); - mRoot.SetParentOrigin( ParentOrigin::CENTER ); - mRoot.SetAnchorPoint( AnchorPoint::CENTER ); - mRoot.SetVisible(false); - - // create two groups of tiles, - // and one group of actors (cubes) serving as parents of every two tiles (one from each image). - unsigned int totalNum = mNumColumns* mNumRows; - mBoxes.resize( totalNum ); - mTiles[0].resize( totalNum ); - mTiles[1].resize( totalNum ); - mTileSize = Vector2( mViewAreaSize.width / mNumColumns, mViewAreaSize.height / mNumRows ); - const Vector3 basePosition( (-mViewAreaSize.width + mTileSize.width) * 0.5f, - (-mViewAreaSize.height + mTileSize.height) * 0.5f, - -mTileSize.width * 0.5f ); - - Image placeHolder = BufferImage::WHITE(); - for( unsigned int y = 0; y < mNumRows; y++ ) + mBoxType[ idx ] = LEFT; + + mBoxes[ idx ].SetProperty(Actor::Property::PARENT_ORIGIN_Z, 1.0f - mTileSize.x * 0.5f ); + + mTargetTiles[ idx ].SetParentOrigin( Vector3( 0.f, 0.5f, 0.5f) ); + mTargetTiles[ idx ].SetOrientation( Degree( -90.f ), Vector3::YAXIS ); +} + +void CubeTransitionEffect::SetTargetBottom( unsigned int idx ) +{ + mBoxType[ idx ] = BOTTOM; + + mBoxes[ idx ].SetProperty(Actor::Property::PARENT_ORIGIN_Z, 1.0f - mTileSize.y * 0.5f ); + + mTargetTiles[ idx ].SetParentOrigin( Vector3( 0.5f, 0.f, 0.5f) ); + mTargetTiles[ idx ].SetOrientation( Degree( 90.f ), Vector3::XAXIS ); +} + +void CubeTransitionEffect::SetTargetTop( unsigned int idx ) +{ + mBoxType[ idx ] = TOP; + + mBoxes[ idx ].SetProperty(Actor::Property::PARENT_ORIGIN_Z, 1.0f - mTileSize.y * 0.5f ); + + mTargetTiles[ idx ].SetParentOrigin( Vector3( 0.5f, 1.f, 0.5f) ); + mTargetTiles[ idx ].SetOrientation( Degree( -90.f ), Vector3::XAXIS ); +} + +void CubeTransitionEffect::OnRelayout( const Vector2& size, RelayoutContainer& container ) +{ + mTileSize = Vector2( size.x / mColumns, size.y / mRows ); + + mBoxRoot.SetProperty( Actor::Property::SIZE_WIDTH, size.x ); + mBoxRoot.SetProperty( Actor::Property::SIZE_HEIGHT, size.y ); + mBoxRoot.SetProperty( Actor::Property::SIZE_DEPTH, 1.0f ); + + for( size_t i = 0; i < mBoxes.size(); ++i ) { - float positionY = y * mTileSize.height + basePosition.y; - for( unsigned int x = 0; x < mNumColumns; x++) + mBoxes[ i ].SetProperty( Actor::Property::SIZE_WIDTH, mTileSize.x ); + mBoxes[ i ].SetProperty( Actor::Property::SIZE_HEIGHT, mTileSize.y ); + + switch( mBoxType[i] ) { - unsigned int idx = y*mNumColumns + x; - Actor actor( Actor::New() ); - mBoxes[idx] = actor; - actor.SetParentOrigin( ParentOrigin::CENTER ); - actor.SetAnchorPoint( AnchorPoint::CENTER ); - actor.SetPosition( x * mTileSize.width + basePosition.x, - positionY, - basePosition.z ); - mRoot.Add( actor ); - - mTiles[ 0 ][idx] = CreateTile( placeHolder, FULL_BRIGHTNESS ); - actor.Add( mTiles[ 0 ][idx] ); - - mTiles[ 1 ][idx] = CreateTile( placeHolder, HALF_BRIGHTNESS ); - actor.Add( mTiles[ 1 ][idx] ); + case LEFT: + case RIGHT: + { + mBoxes[ i ].SetProperty( Actor::Property::PARENT_ORIGIN_Z, 1.0f - mTileSize.x * 0.5f ); + mBoxes[ i ].SetProperty( Actor::Property::SIZE_DEPTH, mTileSize.x ); + break; + } + case BOTTOM: + case TOP: + { + mBoxes[ i ].SetProperty( Actor::Property::PARENT_ORIGIN_Z, 1.0f - mTileSize.y * 0.5f ); + mBoxes[ i ].SetProperty( Actor::Property::SIZE_DEPTH, mTileSize.y ); + break; + } } } - // helper actor to create a off-screen image using shader effect - mEmptyImage = ImageActor::New( placeHolder ); - mEmptyImage.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); - mEmptyImage.SetParentOrigin( ParentOrigin::CENTER ); - mEmptyImage.SetAnchorPoint( AnchorPoint::CENTER ); - mFullImageCreator = FullAreaImageCreator::New(); - mEmptyImage.SetShaderEffect( mFullImageCreator ); - Stage::GetCurrent().Add(mEmptyImage); - - // set up off-screen render task - RenderTaskList taskList = Stage::GetCurrent().GetRenderTaskList(); - mOffScreenTask = taskList.CreateTask(); - mOffScreenTask.SetSourceActor(mEmptyImage); - mOffScreenTask.SetExclusive(true); - mOffScreenBuffer[0] = FrameBufferImage::New(mViewAreaSize.x, mViewAreaSize.y); - mOffScreenBuffer[1] = FrameBufferImage::New(mViewAreaSize.x, mViewAreaSize.y); - mOffScreenTask.SetTargetFrameBuffer(mOffScreenBuffer[mBufferIndex]); - mOffScreenTask.SetRefreshRate(RenderTask::REFRESH_ONCE); + for( ActorArray::iterator it = mCurrentTiles.begin(); it != mCurrentTiles.end(); ++it ) + { + it->SetProperty( Actor::Property::SIZE_WIDTH, mTileSize.x ); + it->SetProperty( Actor::Property::SIZE_HEIGHT, mTileSize.y ); + } + for( ActorArray::iterator it = mTargetTiles.begin(); it != mTargetTiles.end(); ++it ) + { + it->SetProperty( Actor::Property::SIZE_WIDTH, mTileSize.x ); + it->SetProperty( Actor::Property::SIZE_HEIGHT, mTileSize.y ); + } +} + +void CubeTransitionEffect::Initialize() +{ + Self().RegisterProperty( "uTextureRect", Vector4( 0.0f, 0.0f, 1.0f, 1.0f ) ); + + mBoxType.Resize(mColumns * mRows); + + //create the box parents + mBoxRoot = Actor::New(); + mBoxRoot.SetParentOrigin( ParentOrigin::CENTER ); + mBoxRoot.SetAnchorPoint( AnchorPoint::CENTER ); + + mCurrentTiles.clear(); + mTargetTiles.clear(); + + mCurrentTiles.reserve( mColumns * mRows ); + mTargetTiles.reserve( mColumns * mRows ); + + Vector2 gridSizeInv( 1.0f / mColumns, 1.0f / mRows ); + Vector3 offset( 0.5f * gridSizeInv.x, 0.5f * gridSizeInv.y, 0.0f ); + + Vector3 anchor; + for( unsigned int y = 0; y < mRows; ++y, anchor.y += 1.0f / mRows ) + { + anchor.x = 0.0f; + for( unsigned int x = 0; x RemoveRenderer( mCurrentRenderer ); + } + mCurrentRenderer.Reset(); + } + + if( mTargetRenderer ) + { + for( ActorArray::iterator it = mTargetTiles.begin(); it != mTargetTiles.end(); ++it ) + { + it->RemoveRenderer( mTargetRenderer ); + } + mTargetRenderer.Reset(); + } } void CubeTransitionEffect::SetTransitionDuration( float duration ) @@ -169,92 +328,101 @@ float CubeTransitionEffect::GetCubeDisplacement() const return mCubeDisplacement; } -Actor CubeTransitionEffect::GetRoot() +bool CubeTransitionEffect::IsTransitioning() { - return mRoot; + return mIsAnimating; } -bool CubeTransitionEffect::IsTransiting() +void CubeTransitionEffect::SetCurrentImage( Image image ) { - return mIsImageLoading || mIsAnimating; -} + mCurrentImage = image; -void CubeTransitionEffect::SetCurrentImage( ImageActor imageActor ) -{ - mContainerIndex = std::abs(mRotateIndex) % 2; - SetImage( imageActor ); -} + if( mCurrentRenderer ) + { + Material material = mCurrentRenderer.GetMaterial(); -void CubeTransitionEffect::SetTargetImage( ImageActor imageActor ) -{ - mContainerIndex = std::abs( mRotateIndex+1 ) % 2; - SetImage( imageActor ); + int index = material.GetTextureIndex("sTexture" ); + if( index != -1 ) + { + material.SetTextureImage( index, mCurrentImage ); + } + else + { + material.AddTexture( mCurrentImage, "sTexture" ); + } + } } -void CubeTransitionEffect::SetImage( ImageActor imageActor ) +void CubeTransitionEffect::SetTargetImage( Image image ) { - mCurrentImage = imageActor; + mTargetImage = image; - Image image = imageActor.GetImage(); - ResourceImage resourceImage = ResourceImage::DownCast( image ); - mBufferIndex = mBufferIndex^1; - - //must make sure the image is already loaded before using its attributes - if( resourceImage && resourceImage.GetLoadingState() != ResourceLoadingSucceeded ) + if( mTargetRenderer ) { - mIsImageLoading = true; - resourceImage.LoadingFinishedSignal().Connect( this, &CubeTransitionEffect::OnImageLoaded ); - } - else - { - mIsImageLoading = false; - PrepareTiles( image ); + Material material = mTargetRenderer.GetMaterial(); + material.AddTexture( mTargetImage, "sTexture" ); } } void CubeTransitionEffect::StartTransition( bool toNextImage ) { + Vector3 size = Self().GetCurrentSize(); if( toNextImage ) { - StartTransition( Vector2( mViewAreaSize.width, mViewAreaSize.height*0.5f ), Vector2( -10.f, 0.f ) ); + StartTransition( Vector2(size.x* 0.5f, size.y*0.5f), Vector2( -10.f, 0.f ) ); } else { - StartTransition( Vector2( 0, mViewAreaSize.height*0.5f ), Vector2( 10.f, 0.f )); + StartTransition( Vector2(size.x* 0.5f, size.y*0.5f), Vector2( 10.f, 0.f )); } } void CubeTransitionEffect::StartTransition( Vector2 panPosition, Vector2 panDisplacement ) { - mRoot.SetVisible( true ); - mCurrentImage.SetVisible( false ); - bool toNextImage = ( panDisplacement.x < 0 ) ? true : false; - if( mIsToNextImage != toNextImage ) + if( !mCurrentRenderer ) { - mChangeTurningDirection = true; + DALI_LOG_ERROR( "Trying to transition a cube transition without an image set" ); + return; } - else + + //create the target renderer + Material material = Material::New( mCurrentRenderer.GetMaterial().GetShader() ); + if( mTargetImage ) { - mChangeTurningDirection = false; + material.AddTexture( mTargetImage, "sTexture" ); } - mIsToNextImage = toNextImage; + Geometry geometry = mCurrentRenderer.GetGeometry(); + mTargetRenderer = Renderer::New( geometry, material ); - if( mIsToNextImage ) + mTargetRenderer.SetDepthIndex( mCurrentRenderer.GetDepthIndex() ); + + for( size_t i = 0; i < mBoxes.size(); ++i ) { - mRotateIndex += 1.f; + mBoxes[ i ].SetProperty( Actor::Property::ORIENTATION, Quaternion( Radian( 0.0f ), Vector3::XAXIS ) ); } - else + + for( ActorArray::iterator it = mCurrentTiles.begin(); it != mCurrentTiles.end(); ++it ) + { + it->SetParentOrigin( Vector3( 0.5f, 0.5f, 1.0f) ); + it->SetProperty( Actor::Property::ORIENTATION, Quaternion( Radian( 0.0f ), Vector3::XAXIS ) ); + it->AddRenderer( mCurrentRenderer ); + } + for( ActorArray::iterator it = mTargetTiles.begin(); it != mTargetTiles.end(); ++it ) { - mRotateIndex -= 1.f; + it->AddRenderer( mTargetRenderer ); } + Self().RemoveRenderer( mCurrentRenderer ); + Self().Add( mBoxRoot ); + if(mAnimation) { mAnimation.Clear(); mAnimation.Reset(); } + mAnimation = Animation::New( mAnimationDuration ); - mAnimation.FinishedSignal().Connect(this, &CubeTransitionEffect::OnTransitionFinished); + mAnimation.FinishedSignal().Connect( this, &CubeTransitionEffect::OnTransitionFinished ); OnStartTransition( panPosition, panDisplacement ); } @@ -279,90 +447,61 @@ void CubeTransitionEffect::ResumeTransition() void CubeTransitionEffect::StopTransition() { - if( mIsAnimating ) - { - mAnimation.Clear(); - mAnimation.Reset(); - mIsPaused = false; - - //reset the position of the cubes - //reset the color of the tiles - //all these status should be the same as the final state when the transition animation is finished completely - const Vector3 basePosition( (-mViewAreaSize.width + mTileSize.width) * 0.5f, - (-mViewAreaSize.height + mTileSize.height) * 0.5f, - -mTileSize.width * 0.5f ); - unsigned int anotherIndex = mContainerIndex^1; - for( unsigned int y = 0; y < mNumRows; y++ ) - { - float positionY = y * mTileSize.height + basePosition.y; - for( unsigned int x = 0; x < mNumColumns; x++) - { - unsigned int idx = y*mNumColumns + x; - mBoxes[idx].SetPosition( x * mTileSize.width + basePosition.x, - positionY, - basePosition.z ); - mTiles[mContainerIndex][idx].SetColor( FULL_BRIGHTNESS ); - mTiles[anotherIndex][idx].SetColor( HALF_BRIGHTNESS); - } - } - - // reset the rotation of the cubes, which is different process for different derived classes - OnStopTransition(); - - mRoot.SetVisible(false); - mCurrentImage.SetVisible(true); - mIsAnimating = false; - mFirstTransition = false; - } -} - -void CubeTransitionEffect::OnImageLoaded(ResourceImage image) -{ - mIsImageLoading = false; - PrepareTiles( image ); + ResetToInitialState(); } -/** - * Set sub-image to each tile. - * @param[in] image The image content of the imageActor for transition - */ -void CubeTransitionEffect::PrepareTiles( Image image ) +void CubeTransitionEffect::ResetToInitialState() { - // Fit the image to view area, while keeping the aspect; FitKeepAspectRatio(imageSize, viewAreaSize) - float scale = std::min( mViewAreaSize.width / image.GetWidth(), mViewAreaSize.height / image.GetHeight() ); - Vector2 imageSize(image.GetWidth()*scale, image.GetHeight()*scale); + mAnimation.Clear(); + mAnimation.Reset(); + mIsAnimating = false; - mFullImageCreator.SetEffectImage(image); - mFullImageCreator.SetRegionSize(mViewAreaSize, imageSize); + Self().Remove( mBoxRoot ); - mOffScreenTask.SetTargetFrameBuffer(mOffScreenBuffer[mBufferIndex]); - mOffScreenTask.SetRefreshRate(RenderTask::REFRESH_ONCE); + for( size_t i = 0; i < mBoxes.size(); ++i ) + { + mBoxes[ i ].SetProperty( Actor::Property::ORIENTATION, Quaternion( Radian( 0.0f ), Vector3::XAXIS ) ); + } - ImageActor::PixelArea pixelArea( 0, 0, mViewAreaSize.x / mNumColumns, mViewAreaSize.y / mNumRows); + for( ActorArray::iterator it = mCurrentTiles.begin(); it != mCurrentTiles.end(); ++it ) + { + it->SetParentOrigin( Vector3( 0.5f, 0.5f, 1.0f) ); + it->SetProperty( Actor::Property::ORIENTATION, Quaternion( Radian( 0.0f ), Vector3::XAXIS ) ); + it->SetProperty( Actor::Property::COLOR, FULL_BRIGHTNESS ); + } + if( mCurrentRenderer ) + { + for( ActorArray::iterator it = mCurrentTiles.begin(); it != mCurrentTiles.end(); ++it ) + { + it->RemoveRenderer( mCurrentRenderer ); + } + Self().AddRenderer( mCurrentRenderer ); + } - for( unsigned int y = 0; y < mNumRows; y++ ) + for( ActorArray::iterator it = mTargetTiles.begin(); it != mTargetTiles.end(); ++it ) + { + it->SetProperty( Actor::Property::COLOR, HALF_BRIGHTNESS ); + } + if( mTargetRenderer ) { - pixelArea.y = y * pixelArea.height; - for( unsigned int x = 0; x < mNumColumns; x++) + for( ActorArray::iterator it = mTargetTiles.begin(); it != mTargetTiles.end(); ++it ) { - pixelArea.x = x * pixelArea.width; - unsigned int idx = y*mNumColumns + x; - mTiles[mContainerIndex][idx].SetImage( mOffScreenBuffer[mBufferIndex]); - mTiles[mContainerIndex][idx].SetPixelArea( pixelArea ); + it->RemoveRenderer( mTargetRenderer ); } } } - void CubeTransitionEffect::OnTransitionFinished(Animation& source) { - mRoot.SetVisible(false); - mCurrentImage.SetVisible(true); - mIsAnimating = false; - mFirstTransition = false; + + std::swap( mCurrentTiles, mTargetTiles ); + std::swap( mCurrentRenderer, mTargetRenderer ); + std::swap( mCurrentImage, mTargetImage ); + + ResetToInitialState(); //Emit signal - Toolkit::CubeTransitionEffect handle( this ); + Toolkit::CubeTransitionEffect handle( GetOwner() ); mTransitionCompletedSignal.Emit( handle, mCurrentImage ); } diff --git a/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.h b/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.h index 5642749..25d1e1c 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.h +++ b/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.h @@ -20,15 +20,11 @@ // EXTERNAL INCLUDES #include - -#include -#include -#include -#include -#include +#include // INTERNAL INCLUDES #include +#include namespace Dali { @@ -42,93 +38,9 @@ namespace Internal { /** - * Create a image with size of viewAreaSize - * with the effect image as its center part and (0,0,0,1) at other parts - */ -class FullAreaImageCreator : public ShaderEffect -{ - -public: - - /** - * Create an uninitialized FullAreaImageCreator - * this can be initialized with FullAreaImageCreator::New() - */ - FullAreaImageCreator(){} - - /** - * @brief Destructor - * - * This is non-virtual since derived Handle types must not contain data or virtual methods. - */ - ~FullAreaImageCreator(){} - - /** - * Create an initialized FullAreaImageCreator. - * @return A handle to a newly allocated Dali resource. - */ - static FullAreaImageCreator New() - { - std::string vertexShader( - "uniform mediump vec4 uRegion; \n" - "void main() \n" - "{\n" - " gl_Position = uProjection * uModelView * vec4(aPosition, 1.0);\n" - " vTexCoord.s = (aTexCoord.s - uRegion.s) / uRegion.p;" - " vTexCoord.t = ( 1.0 - aTexCoord.t - uRegion.t) / uRegion.q;" - "}\n" - ); - - std::string fragmentShader( - "uniform mediump vec4 uRegion; \n" - "void main() \n" - "{\n" - " if( vTexCoord.s > 0.0 && vTexCoord.s < 1.0 && vTexCoord.t > 0.0 && vTexCoord.t < 1.0) \n" - " { \n" - " gl_FragColor = texture2D( sEffect, vTexCoord ) * uColor ; \n" - " } \n" - " else \n" - " { \n" - " gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); \n" - " } \n" - "}\n" - ); - - ShaderEffect shaderEffectCustom = ShaderEffect::New(vertexShader, fragmentShader); - FullAreaImageCreator handle( shaderEffectCustom ); - - return handle; - } - - /** - * Set up the position and size of the effect texture - * @param[in] viewArea the size of full-area image to create - * @param[in] size the size of effect texture - */ - void SetRegionSize( const Vector2& viewArea, const Vector2& size ) - { - Vector2 sizeRatio( std::min(1.f, size.x / viewArea.x), std::min(1.f, size.y / viewArea.y) ); - Vector4 region( (1.f-sizeRatio.x)*0.5f, - (1.f-sizeRatio.y)*0.5f, - sizeRatio.x, - sizeRatio.y ); - SetUniform( "uRegion", region ); - } - -private: - - FullAreaImageCreator( ShaderEffect handle ) - : ShaderEffect( handle ) - {} - -}; - - - -/** * CubeTransitionEffect implementation class */ -class CubeTransitionEffect : public Dali::BaseObject, public ConnectionTracker +class CubeTransitionEffect : public Control { public: @@ -159,24 +71,19 @@ public: float GetCubeDisplacement() const; /** - * @copydoc Toolkit::CubeTransitionEffect::GetRoot - */ - Actor GetRoot(); - - /** - * @copydoc Toolkit::CubeTransitionEffect::IsTransiting + * @copydoc Toolkit::CubeTransitionEffect::IsTransitioning */ - bool IsTransiting(); + bool IsTransitioning(); /** * @copydoc Toolkit::CubeTransitionEffect::SetFirstImage */ - void SetCurrentImage(ImageActor imageActor); + void SetCurrentImage( Image image ); /** * @copydoc Toolkit::CubeTransitionEffect::SetTargetImage */ - void SetTargetImage(ImageActor imageActor); + void SetTargetImage( Image image ); /** * @copydoc Toolkit::CubeTransitionEffect::StartTransition(bool) @@ -222,15 +129,25 @@ public: //Signal static bool DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ); protected: + /** + * @copydoc CustomActorImpl::OnStageConnection() + */ + virtual void OnStageConnection( int depth ); + + /** + * @copydoc CustomActorImpl::OnStageDisconnection() + */ + virtual void OnStageDisconnection(); + +protected: /** * Construct a new CubeTransitionEffect object * Called in the constructor of subclasses * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect */ - CubeTransitionEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + CubeTransitionEffect( unsigned int numRows, unsigned int numColumns ); /** * Initialization steps: creating a layer, two groups of tiles, @@ -238,36 +155,14 @@ protected: */ void Initialize(); -private: - /** - * Create an image actor to serve as a face of the cube - * @param[in] image The image to display. - * @param[in] color The color to set to the actor - * @return The tile actor created - */ - ImageActor CreateTile( Image image, const Vector4& color ); - - /** - * Set Image content to tiles - * As only when the image ready, can we get correct image attributes - * so inside this function, the process needs to be passed to callBack of image resource loading succeed. - * @param[in] imageActor The imageActor whose image content will be set to the tiles - */ - void SetImage(ImageActor imageActor); - - /** - * Callback function of image resource loading succeed - * Set image and pixelArea to tiles - * @param[in] image The image content of the imageActor for transition - */ - void OnImageLoaded(ResourceImage image); +protected: + void SetTargetLeft( unsigned int idx ); + void SetTargetRight( unsigned int idx ); + void SetTargetTop( unsigned int idx ); + void SetTargetBottom( unsigned int idx ); - /** - * Set sub-image to each tile. - * @param[in] image The image content of the imageActor for transition - */ - void PrepareTiles( Image image ); +private: /** * Callback function of transition animation finished @@ -297,40 +192,40 @@ private: */ virtual void OnStopTransition() {} + virtual void OnRelayout( const Vector2& size, RelayoutContainer& container ); + + void ResetToInitialState(); + protected: + typedef std::vector< Actor > ActorArray; + enum FACE { TOP, BOTTOM, LEFT, RIGHT }; - unsigned int mNumRows; - unsigned int mNumColumns; - Size mViewAreaSize; - std::vector< Actor > mBoxes; - std::vector< ImageActor > mTiles[2]; - int mRotateIndex; - Size mTileSize; - Actor mRoot; + ActorArray mBoxes; + Vector< FACE > mBoxType; + ActorArray mCurrentTiles; + ActorArray mTargetTiles; - ImageActor mCurrentImage; - unsigned int mContainerIndex; //have the value 0 or 1, refer to mTiles[0] or mTiles[1] + Actor mBoxRoot; - bool mChangeTurningDirection; - bool mIsToNextImage; //if true, cubes rotate counter-clockwise; else clockwise - bool mIsImageLoading; + unsigned int mRows; + unsigned int mColumns; - float mAnimationDuration; + Renderer mCurrentRenderer; + Renderer mTargetRenderer; + + Image mCurrentImage; + Image mTargetImage; Animation mAnimation; + + Vector2 mTileSize; + bool mIsAnimating; bool mIsPaused; + float mAnimationDuration; float mCubeDisplacement; - bool mFirstTransition; - - RenderTask mOffScreenTask; - FrameBufferImage mOffScreenBuffer[2]; - ImageActor mEmptyImage; - FullAreaImageCreator mFullImageCreator; - unsigned int mBufferIndex; - static const Vector4 FULL_BRIGHTNESS; static const Vector4 HALF_BRIGHTNESS; @@ -348,7 +243,7 @@ inline Internal::CubeTransitionEffect& GetImpl(Dali::Toolkit::CubeTransitionEffe { DALI_ASSERT_ALWAYS(obj); - Dali::BaseObject& handle = obj.GetBaseObject(); + Dali::RefObject& handle = obj.GetImplementation(); return static_cast(handle); } @@ -357,7 +252,7 @@ inline const Internal::CubeTransitionEffect& GetImpl(const Dali::Toolkit::CubeTr { DALI_ASSERT_ALWAYS(obj); - const Dali::BaseObject& handle = obj.GetBaseObject(); + const Dali::RefObject& handle = obj.GetImplementation(); return static_cast(handle); } diff --git a/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.cpp b/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.cpp index 6989478..8cd84be 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.cpp +++ b/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.cpp @@ -26,20 +26,18 @@ namespace Toolkit namespace Internal { -const float CubeTransitionFoldEffect::mDisplacementRatio = 1.4142f; //sqrt(2) - -CubeTransitionFoldEffect::CubeTransitionFoldEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ) -: CubeTransitionEffect( numRows, numColumns, viewAreaSize) +CubeTransitionFoldEffect::CubeTransitionFoldEffect( unsigned int numRows, unsigned int numColumns ) +: CubeTransitionEffect( numRows, numColumns ) { } -Toolkit::CubeTransitionFoldEffect CubeTransitionFoldEffect::New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize) +Toolkit::CubeTransitionFoldEffect CubeTransitionFoldEffect::New(unsigned int numRows, unsigned int numColumns ) { // Create the implementation - CubeTransitionFoldEffect* internalCubeTransEffect = new CubeTransitionFoldEffect( numRows, numColumns, viewAreaSize ); + IntrusivePtr< CubeTransitionFoldEffect > internalCubeTransEffect = new CubeTransitionFoldEffect( numRows, numColumns ); // Pass ownership to CustomActor handle - Toolkit::CubeTransitionFoldEffect cubeTransEffect( internalCubeTransEffect ); + Toolkit::CubeTransitionFoldEffect cubeTransEffect( *internalCubeTransEffect ); //Initialization internalCubeTransEffect->Initialize(); @@ -49,87 +47,97 @@ Toolkit::CubeTransitionFoldEffect CubeTransitionFoldEffect::New(unsigned int num void CubeTransitionFoldEffect::OnInitialize() { - float offset = mTileSize.width*0.5f; unsigned int idx; - for( unsigned int y = 0; y < mNumRows; y++ ) + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns; - for( unsigned int x = y%2; x < mNumColumns; x=x+2) + idx = y*mColumns; + for( unsigned int x = y%2; x < mColumns; x=x+2) { - mTiles[0][idx+x].SetZ( offset ); - mTiles[1][idx+x].SetX( offset ); + SetTargetLeft( idx + x ); } - for( unsigned int x = (y+1)%2; x < mNumColumns; x=x+2) + for( unsigned int x = (y+1)%2; x < mColumns; x=x+2) { - mTiles[0][idx+x].SetZ( offset ); - mTiles[1][idx+x].SetX( -offset ); + SetTargetRight( idx + x ); } } } void CubeTransitionFoldEffect::OnStartTransition( Vector2 panPosition, Vector2 panDisplacement ) { - float angle = mRotateIndex * Math::PI_2 ; - Vector3 translation0 = mTiles[mContainerIndex][ 0 ].GetCurrentPosition()*(-2.f); - Vector3 translation1 = mTiles[mContainerIndex][ mNumColumns ].GetCurrentPosition()*(-2.f); + float angle = Math::PI_2; unsigned int idx; - - for( unsigned int y = 0; y < mNumRows; y++ ) + if( panDisplacement.x < 0 ) { - for( unsigned int x = y%2; x < mNumColumns; x=x+2) + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns + x; - SetupAnimation( idx, -angle, translation0 ); + idx = y*mColumns; + for( unsigned int x = y%2; x < mColumns; x=x+2) + { + SetTargetLeft( idx + x ); + } + for( unsigned int x = (y+1)%2; x < mColumns; x=x+2) + { + SetTargetRight( idx + x ); + } } - for( unsigned int x = (y+1)%2; x < mNumColumns; x=x+2) + } + else + { + angle = -angle; + + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns + x; - SetupAnimation( idx, angle, translation1 ); + idx = y*mColumns; + for( unsigned int x = y%2; x < mColumns; x=x+2) + { + SetTargetRight( idx + x ); + } + for( unsigned int x = (y+1)%2; x < mColumns; x=x+2) + { + SetTargetLeft( idx + x ); + } } } - mAnimation.Play(); - mIsAnimating = true; -} - -void CubeTransitionFoldEffect::OnStopTransition() -{ - float angle = mRotateIndex * Math::PI_2 ; - unsigned int idx; - for( unsigned int y = 0; y < mNumRows; y++ ) + for( unsigned int y = 0; y < mRows; y++ ) { - idx = y*mNumColumns; - for( unsigned int x = y%2; x < mNumColumns; x=x+2) + idx = y*mColumns; + for( unsigned int x = y%2; x < mColumns; x=x+2) { - mBoxes[idx+x].SetOrientation( Radian(angle), Vector3::YAXIS ); + SetupAnimation( idx + x, x, angle ); } - for( unsigned int x = (y+1)%2; x < mNumColumns; x=x+2) + for( unsigned int x = (y+1)%2; x < mColumns; x=x+2) { - mBoxes[idx+x].SetOrientation( Radian(-angle), Vector3::YAXIS ); + SetupAnimation( idx + x, x, -angle ); } } + + mAnimation.Play(); + mIsAnimating = true; } -void CubeTransitionFoldEffect::SetupAnimation(unsigned int actorIndex, float angle, Vector3 resetTranslation) +void CubeTransitionFoldEffect::SetupAnimation( unsigned int actorIndex, unsigned int x, float angle ) { - Actor currentCube = mBoxes[actorIndex]; - ImageActor sideTile = mTiles[mContainerIndex][actorIndex]; - ImageActor frontTile = mTiles[mContainerIndex^1][actorIndex]; - if ( mFirstTransition && (!mIsToNextImage) ) // for the first transition, it is going to previous image - { - sideTile.SetOrientation( Radian( angle), Vector3::YAXIS ); - } - else if( !mChangeTurningDirection ) // reset rotation, translation and color - { - sideTile.TranslateBy( resetTranslation ); - sideTile.SetOrientation( Radian( angle), Vector3::YAXIS ); - } - mAnimation.AnimateTo( Property( currentCube, Actor::Property::ORIENTATION ), Quaternion( Radian( -angle ), Vector3::YAXIS ), AlphaFunction::LINEAR ); - Vector3 position(currentCube.GetCurrentPosition()); - mAnimation.AnimateTo( Property( currentCube, Actor::Property::POSITION ), Vector3( position.x*mDisplacementRatio, position.y, position.z ), AlphaFunction::BOUNCE ); - mAnimation.AnimateTo( Property( frontTile, Actor::Property::COLOR ), HALF_BRIGHTNESS, AlphaFunction::EASE_OUT ); - mAnimation.AnimateTo( Property( sideTile, Actor::Property::COLOR ), FULL_BRIGHTNESS, AlphaFunction::EASE_IN ); + //rotate and translate the cube such that the edges remain in constant contact + //calculate the maximum distance the cube has to move when it the box has rotated 45 degrees + //ie distance from of centre of square to a vertex is given by: + // distance = width / sqrt(2) + //therefore the delta distance the cube should move is given by: + // delta_distance = ( width / 2 ) - distance + //re-arranging we get: + // delta_distance = ( width / 2 ) * ( sqrt(2) - 1 ) + //accumulating over the length of the row we get: + // delta_distance_at_x = x * delta_distance; + + float delta = (float)x * mTileSize.x * ( 1.4142f - 1.0f ); + + Vector3 position( mBoxes[ actorIndex ].GetCurrentPosition() ); + mAnimation.AnimateTo( Property( mBoxes[ actorIndex ], Actor::Property::ORIENTATION ), Quaternion( Radian( angle ), Vector3::YAXIS ), AlphaFunction::LINEAR ); + mAnimation.AnimateTo( Property( mBoxes[ actorIndex ], Actor::Property::POSITION_X ), position.x + delta, AlphaFunction::BOUNCE ); + + mAnimation.AnimateTo( Property( mCurrentTiles[ actorIndex ], Actor::Property::COLOR ), HALF_BRIGHTNESS, AlphaFunction::EASE_OUT ); + mAnimation.AnimateTo( Property( mTargetTiles[ actorIndex ], Actor::Property::COLOR ), FULL_BRIGHTNESS, AlphaFunction::EASE_IN ); } } // namespace Internal diff --git a/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.h b/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.h index 0afee71..336557f 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.h +++ b/dali-toolkit/internal/transition-effects/cube-transition-fold-effect-impl.h @@ -45,7 +45,7 @@ public: /** * @copydoc Toolkit::CubeTransitionFoldEffect::New */ - static Toolkit::CubeTransitionFoldEffect New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize); + static Toolkit::CubeTransitionFoldEffect New( unsigned int numRows, unsigned int numColumns ); protected: @@ -59,32 +59,21 @@ protected: */ virtual void OnStartTransition( Vector2 panPosition, Vector2 panDisplacement ); - /** - * @copydoc Toolkit::Internal::CubeTransitionEffect::OnStopTransition - */ - virtual void OnStopTransition(); private: /** * Construct a new CubeTransitionFoldEffect object * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect */ - CubeTransitionFoldEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + CubeTransitionFoldEffect( unsigned int numRows, unsigned int numColumns ); /** * Set up animation to an Actor * @param[in] actorIndex The index of the cube in the cube array * @param[in] angle The angle of the rotation animation - * @param[in] resetTranslation The translation used to reset the actor position before animation */ - - void SetupAnimation( unsigned int actorIndex, float angle, Vector3 resetTranslation ); - -private: - - static const float mDisplacementRatio; + void SetupAnimation( unsigned int actorIndex, unsigned int x, float angle ); }; //class CubeTransitionFoldEffect @@ -92,22 +81,22 @@ private: // Helpers for public-api forwarding methods -inline Internal::CubeTransitionFoldEffect& GetImpl(Dali::Toolkit::CubeTransitionFoldEffect& obj) +inline Internal::CubeTransitionFoldEffect& GetImpl( Dali::Toolkit::CubeTransitionFoldEffect& obj ) { - DALI_ASSERT_ALWAYS(obj); + DALI_ASSERT_ALWAYS( obj ); - Dali::BaseObject& handle = obj.GetBaseObject(); + Dali::RefObject& handle = obj.GetImplementation(); - return static_cast(handle); + return static_cast< Internal::CubeTransitionFoldEffect& >( handle ); } -inline const Internal::CubeTransitionFoldEffect& GetImpl(const Dali::Toolkit::CubeTransitionFoldEffect& obj) +inline const Internal::CubeTransitionFoldEffect& GetImpl( const Dali::Toolkit::CubeTransitionFoldEffect& obj ) { - DALI_ASSERT_ALWAYS(obj); + DALI_ASSERT_ALWAYS( obj ); - const Dali::BaseObject& handle = obj.GetBaseObject(); + const Dali::RefObject& handle = obj.GetImplementation(); - return static_cast(handle); + return static_cast< const Internal::CubeTransitionFoldEffect& >( handle ); } } // namespace Toolkit diff --git a/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.cpp b/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.cpp index 818e670..d4ce91d 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.cpp +++ b/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.cpp @@ -27,21 +27,21 @@ namespace Toolkit namespace Internal { -CubeTransitionWaveEffect::CubeTransitionWaveEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ) -: CubeTransitionEffect( numRows, numColumns, viewAreaSize), +CubeTransitionWaveEffect::CubeTransitionWaveEffect( unsigned int numRows, unsigned int numColumns ) +: CubeTransitionEffect( numRows, numColumns ), mSaddleAA( 1.f ), mSaddleBB( 1.f ), mSaddleB( 1.f ) { } -Toolkit::CubeTransitionWaveEffect CubeTransitionWaveEffect::New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize) +Toolkit::CubeTransitionWaveEffect CubeTransitionWaveEffect::New(unsigned int numRows, unsigned int numColumns ) { // Create the implementation - CubeTransitionWaveEffect* internalCubeTransEffect = new CubeTransitionWaveEffect( numRows, numColumns, viewAreaSize ); + IntrusivePtr< CubeTransitionWaveEffect > internalCubeTransEffect = new CubeTransitionWaveEffect( numRows, numColumns ); // Pass ownership to CustomActor handle - Toolkit::CubeTransitionWaveEffect cubeTransEffect( internalCubeTransEffect ); + Toolkit::CubeTransitionWaveEffect cubeTransEffect( *internalCubeTransEffect ); //Initialization internalCubeTransEffect->Initialize(); @@ -51,59 +51,54 @@ Toolkit::CubeTransitionWaveEffect CubeTransitionWaveEffect::New(unsigned int num void CubeTransitionWaveEffect::OnInitialize() { - float offset = -mTileSize.width * 0.5f; - unsigned int totalNum = mNumColumns* mNumRows; - for( unsigned int idx = 0; idx < totalNum; idx++ ) + for( unsigned int idx = 0; idx < mTargetTiles.size(); idx++ ) { - mTiles[ 0 ][idx].SetZ( -offset ); - mTiles[ 1 ][idx].SetX( offset ); + SetTargetRight( idx ); } } void CubeTransitionWaveEffect::OnStartTransition( Vector2 panPosition, Vector2 panDisplacement ) { - float direc = mIsToNextImage ? 1.f : -1.f; - CalculateSaddleSurfaceParameters( panPosition, panDisplacement*direc ); + bool forward = panDisplacement.x < 0.0; + CalculateSaddleSurfaceParameters( panPosition, forward ? panDisplacement : -panDisplacement ); - float angle = mRotateIndex * 90.0f ; - Vector3 translation = mTiles[mContainerIndex][ 0 ].GetCurrentPosition()*(-2.f); + float angle = Math::PI_2; unsigned int idx; - unsigned int totalNum = mNumColumns* mNumRows; - if( mFirstTransition && (!mIsToNextImage) ) // the first transition is transiting to previous image + if( forward ) { - for( unsigned int idx = 0; idx < totalNum; idx++ ) + for( idx = 0; idx < mTargetTiles.size(); idx++ ) { - mTiles[mContainerIndex][idx].SetOrientation( Degree( angle), Vector3::YAXIS ); + SetTargetRight( idx ); } } - else if(!mChangeTurningDirection) // reset rotation, translation + else { - for( unsigned int idx = 0; idx < totalNum; idx++ ) + angle = -angle; + for( idx = 0; idx < mTargetTiles.size(); idx++ ) { - mTiles[mContainerIndex][idx].TranslateBy( translation ); - mTiles[mContainerIndex][idx].SetOrientation( Degree( angle), Vector3::YAXIS ); + SetTargetLeft( idx ); } } float thirdAnimationDuration = mAnimationDuration / 3.f; - unsigned int anotherIndex = mContainerIndex^1; - for( unsigned int y = 0; y < mNumRows; y++ ) + for( unsigned int y = 0; y < mRows; y++ ) { - for( unsigned int x = 0; x < mNumColumns; x++) + idx = y * mColumns; + for( unsigned int x = 0; x < mColumns; x++, idx++) { - idx = y*mNumColumns + x; // the delay value is within 0.f ~ 2.f*thirdAnimationDuration - float delay = thirdAnimationDuration * CalculateDelay(x*mTileSize.width,y*mTileSize.height); + float delay = thirdAnimationDuration * CalculateDelay( x * mTileSize.width, y * mTileSize.height, forward ); - mAnimation.AnimateTo( Property( mBoxes[idx], Actor::Property::ORIENTATION ), Quaternion( Radian( Degree( -angle ) ), Vector3::YAXIS ), + mAnimation.AnimateTo( Property( mBoxes[ idx ], Actor::Property::ORIENTATION ), Quaternion( Radian( -angle ), Vector3::YAXIS ), AlphaFunction::EASE_OUT_SINE, TimePeriod( delay, thirdAnimationDuration ) ); mAnimation.AnimateBy( Property( mBoxes[idx], Actor::Property::POSITION ), Vector3( 0.f, 0.f, -mCubeDisplacement ), AlphaFunction::BOUNCE, TimePeriod( delay, thirdAnimationDuration ) ); - mAnimation.AnimateTo( Property( mTiles[anotherIndex][idx], Actor::Property::COLOR ), HALF_BRIGHTNESS, + + mAnimation.AnimateTo( Property( mCurrentTiles[ idx ], Actor::Property::COLOR ), HALF_BRIGHTNESS, AlphaFunction::EASE_OUT, TimePeriod( delay, thirdAnimationDuration ) ); - mAnimation.AnimateTo( Property( mTiles[mContainerIndex][idx], Actor::Property::COLOR ), FULL_BRIGHTNESS, + mAnimation.AnimateTo( Property( mTargetTiles[ idx ], Actor::Property::COLOR ), FULL_BRIGHTNESS, AlphaFunction::EASE_IN, TimePeriod( delay, thirdAnimationDuration ) ); } } @@ -112,18 +107,9 @@ void CubeTransitionWaveEffect::OnStartTransition( Vector2 panPosition, Vector2 p mIsAnimating = true; } -void CubeTransitionWaveEffect::OnStopTransition() -{ - float angle = - mRotateIndex * 90.0f ; - unsigned int totalNum = mNumRows * mNumColumns; - for( unsigned int idx = 0; idx < totalNum; idx++ ) - { - mBoxes[idx].SetOrientation( Degree( angle ), Vector3::YAXIS ); - } -} - void CubeTransitionWaveEffect::CalculateSaddleSurfaceParameters( Vector2 position, Vector2 displacement ) { + const Vector2& size = Self().GetCurrentSize().GetVectorXY(); // the line passes through 'position' and has the direction of 'displacement' float coefA, coefB, coefC; //line equation: Ax+By+C=0; coefA = displacement.y; @@ -139,31 +125,31 @@ void CubeTransitionWaveEffect::CalculateSaddleSurfaceParameters( Vector2 positi //distance from (0,0) to the line float distanceTopLeft = fabsf(coefC) * inversedSqrtAABB; //distance from (viewAreaSize.x, viewAreaSize.y) to the line - float distanceBottomRight = fabsf(coefA*mViewAreaSize.x+coefB*mViewAreaSize.y+coefC) * inversedSqrtAABB; + float distanceBottomRight = fabsf(coefA*size.x+coefB*size.y+coefC) * inversedSqrtAABB; saddleA = std::max( distanceTopLeft, distanceBottomRight ); //foot of a perpendicular: (viewAreaSize.x,0) to the line - float footX1 = ( coefB*coefB*mViewAreaSize.x - coefA*coefC) * inversedAABB; - float footY1 = (-coefA*coefB*mViewAreaSize.x - coefB*coefC) * inversedAABB; + float footX1 = ( coefB*coefB*size.x - coefA*coefC) * inversedAABB; + float footY1 = (-coefA*coefB*size.x - coefB*coefC) * inversedAABB; //foot of a perpendicular: (0,viewAreaSize.y) to the line - float footX2 = (-coefA*coefB*mViewAreaSize.y - coefA*coefC) * inversedAABB; - float footY2 = ( coefA*coefA*mViewAreaSize.y - coefB*coefC) * inversedAABB; + float footX2 = (-coefA*coefB*size.y - coefA*coefC) * inversedAABB; + float footY2 = ( coefA*coefA*size.y - coefB*coefC) * inversedAABB; mSaddleBB = (footX1-footX2)*(footX1-footX2) + (footY1-footY2)*(footY1-footY2); mTranslation = Vector2(-footX2,-footY2); } else { //distance from(viewAreaSize.x,0) to the line - float distanceTopRight = fabsf(coefA*mViewAreaSize.x+coefC) * inversedSqrtAABB; + float distanceTopRight = fabsf(coefA*size.x+coefC) * inversedSqrtAABB; //distance from(0,viewAreaSize.y) to the line - float distanceBottomLeft = fabsf(coefB*mViewAreaSize.y+coefC) * inversedSqrtAABB; + float distanceBottomLeft = fabsf(coefB*size.y+coefC) * inversedSqrtAABB; saddleA = std::max( distanceTopRight, distanceBottomLeft ); //foot of a perpendicular: (0,0) to the line float footX3 = (-coefA*coefC) * inversedAABB; float footY3 = (-coefB*coefC) * inversedAABB; //foot of a perpendicular: (viewAreaSize.x,viewAreaSize.y) to the line - float footX4 = ( coefB*coefB*mViewAreaSize.x - coefA*coefB*mViewAreaSize.y - coefA*coefC) * inversedAABB; - float footY4 = (-coefA*coefB*mViewAreaSize.x + coefA*coefA*mViewAreaSize.y - coefB*coefC) * inversedAABB; + float footX4 = ( coefB*coefB*size.x - coefA*coefB*size.y - coefA*coefC) * inversedAABB; + float footY4 = (-coefA*coefB*size.x + coefA*coefA*size.y - coefB*coefC) * inversedAABB; mSaddleBB = (footX3-footX4)*(footX3-footX4) + (footY3-footY4)*(footY3-footY4); mTranslation = Vector2(-footX3, -footY3); } @@ -184,13 +170,13 @@ void CubeTransitionWaveEffect::CalculateSaddleSurfaceParameters( Vector2 positi mRotation.Normalize(); } -float CubeTransitionWaveEffect::CalculateDelay(float x, float y) +float CubeTransitionWaveEffect::CalculateDelay( float x, float y, bool forward ) { float tx = x + mTranslation.x; float ty = y + mTranslation.y; float valueX = mRotation.x * tx - mRotation.y * ty; float valueY = mRotation.y * tx + mRotation.x * ty; - if(!mIsToNextImage) // to previous image + if( !forward ) // to previous image { valueX = mSaddleB - valueX; } diff --git a/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.h b/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.h index baa0a14..d53ccc4 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.h +++ b/dali-toolkit/internal/transition-effects/cube-transition-wave-effect-impl.h @@ -45,7 +45,7 @@ public: /** * @copydoc Toolkit::CubeTransitionWaveEffect::New */ - static Toolkit::CubeTransitionWaveEffect New(unsigned int numRows, unsigned int numColumns, Size viewAreaSize); + static Toolkit::CubeTransitionWaveEffect New(unsigned int numRows, unsigned int numColumns ); protected: @@ -59,20 +59,14 @@ protected: */ virtual void OnStartTransition( Vector2 panPosition, Vector2 panDisplacement ); - /** - * @copydoc Toolkit::Internal::CubeTransitionEffect::OnStopTransition - */ - virtual void OnStopTransition(); - private: /** * Construct a new CubeTransitionWaveEffect object * @param[in] numRows How many rows of cubes * @param[in] numColumns How many columns of cubes - * @param[in] viewAreaSize The size of view area for this transition effect */ - CubeTransitionWaveEffect( unsigned int numRows, unsigned int numColumns, Size viewAreaSize ); + CubeTransitionWaveEffect( unsigned int numRows, unsigned int numColumns ); /** * The Saddle surface (Hyperbolic paraboloid)function is used to calculate the delay of rotating animation for each cube @@ -81,7 +75,7 @@ private: * @param[in] position The press down position of panGesture * @param[in] displacement The displacement vector of panGesture */ - void CalculateSaddleSurfaceParameters( Vector2 position, Vector2 displacement ); + void CalculateSaddleSurfaceParameters( Vector2 position, Vector2 displacement); /** * Calculate the delay of the animation for each cube @@ -89,7 +83,7 @@ private: * @param[in] y The Y coordinate of the cube * @return The delay time of the animation */ - float CalculateDelay(float x, float y); + float CalculateDelay( float x, float y, bool forward ); private: @@ -108,22 +102,22 @@ private: // Helpers for public-api forwarding methods -inline Internal::CubeTransitionWaveEffect& GetImpl(Dali::Toolkit::CubeTransitionWaveEffect& obj) +inline Internal::CubeTransitionWaveEffect& GetImpl( Dali::Toolkit::CubeTransitionWaveEffect& obj ) { - DALI_ASSERT_ALWAYS(obj); + DALI_ASSERT_ALWAYS( obj ); - Dali::BaseObject& handle = obj.GetBaseObject(); + Dali::RefObject& handle = obj.GetImplementation(); - return static_cast(handle); + return static_cast< Internal::CubeTransitionWaveEffect& >( handle ); } -inline const Internal::CubeTransitionWaveEffect& GetImpl(const Dali::Toolkit::CubeTransitionWaveEffect& obj) +inline const Internal::CubeTransitionWaveEffect& GetImpl( const Dali::Toolkit::CubeTransitionWaveEffect& obj ) { - DALI_ASSERT_ALWAYS(obj); + DALI_ASSERT_ALWAYS( obj ); - const Dali::BaseObject& handle = obj.GetBaseObject(); + const Dali::RefObject& handle = obj.GetImplementation(); - return static_cast(handle); + return static_cast< const Internal::CubeTransitionWaveEffect& >( handle ); } } // namespace Toolkit -- 2.7.4