X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftransition-effects%2Fcube-transition-effect-impl.cpp;h=2872ffa0e9101e01f7fc62335c7acb2c988234f3;hp=42c121d80e7bf539f1d63524378dbcceb36064a4;hb=834ddf7832598a57fc18c282371554a1ed8f0a78;hpb=57869973578f6a0b0f836d396c7232ddb8302c6b 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 42c121d..2872ffa 100644 --- a/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp +++ b/dali-toolkit/internal/transition-effects/cube-transition-effect-impl.cpp @@ -20,7 +20,9 @@ // EXTERNAL INCLUDES #include -#include +#include +#include +#include #include namespace Dali @@ -32,6 +34,18 @@ namespace Toolkit namespace Internal { +namespace +{ + +// Setup properties, signals and actions using the type-registry. +DALI_TYPE_REGISTRATION_BEGIN( Toolkit::CubeTransitionEffect, Dali::BaseHandle, NULL ); + +DALI_SIGNAL_REGISTRATION( CubeTransitionEffect, "transition-completed", SIGNAL_TRANSITION_COMPLETED ) + +DALI_TYPE_REGISTRATION_END() + +} + 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 ); @@ -76,7 +90,7 @@ void CubeTransitionEffect::Initialize() (-mViewAreaSize.height + mTileSize.height) * 0.5f, -mTileSize.width * 0.5f ); - Image placeHolder = BitmapImage::WHITE(); + Image placeHolder = BufferImage::WHITE(); for( unsigned int y = 0; y < mNumRows; y++ ) { float positionY = y * mTileSize.height + basePosition.y; @@ -105,6 +119,7 @@ void CubeTransitionEffect::Initialize() mEmptyImage.SetSize(Stage::GetCurrent().GetSize()); mEmptyImage.SetParentOrigin( ParentOrigin::CENTER ); mEmptyImage.SetAnchorPoint( AnchorPoint::CENTER ); + mEmptyImage.SetRelayoutEnabled( false ); mFullImageCreator = FullAreaImageCreator::New(); mEmptyImage.SetShaderEffect( mFullImageCreator ); Stage::GetCurrent().Add(mEmptyImage); @@ -127,6 +142,7 @@ ImageActor CubeTransitionEffect::CreateTile( Image image, const Vector4& color ) ImageActor tile = ImageActor::New( image ); tile.SetParentOrigin( ParentOrigin::CENTER ); tile.SetAnchorPoint( AnchorPoint::CENTER ); + tile.SetRelayoutEnabled( false ); tile.SetSize( mTileSize ); tile.SetColorMode( Dali::USE_OWN_COLOR ); tile.SetColor( color ); @@ -179,19 +195,21 @@ void CubeTransitionEffect::SetTargetImage( ImageActor imageActor ) void CubeTransitionEffect::SetImage( ImageActor imageActor ) { mCurrentImage = imageActor; - mIsImageLoading = true; 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( image.GetLoadingState() == ResourceLoadingSucceeded ) + if( resourceImage && resourceImage.GetLoadingState() != ResourceLoadingSucceeded ) { - OnImageLoaded( image ); + mIsImageLoading = true; + resourceImage.LoadingFinishedSignal().Connect( this, &CubeTransitionEffect::OnImageLoaded ); } else { - image.LoadingFinishedSignal().Connect( this, &CubeTransitionEffect::OnImageLoaded ); + mIsImageLoading = false; + PrepareTiles( image ); } } @@ -299,12 +317,21 @@ void CubeTransitionEffect::StopTransition() } } -void CubeTransitionEffect::OnImageLoaded(Image image) +void CubeTransitionEffect::OnImageLoaded(ResourceImage image) +{ + mIsImageLoading = false; + PrepareTiles( image ); +} + +/** + * Set sub-image to each tile. + * @param[in] image The image content of the imageActor for transition + */ +void CubeTransitionEffect::PrepareTiles( Image image ) { // Fit the image to view area, while keeping the aspect; FitKeepAspectRatio(imageSize, viewAreaSize) - ImageAttributes attributes( image.GetAttributes() ); - float scale = std::min( mViewAreaSize.width / attributes.GetWidth(), mViewAreaSize.height / attributes.GetHeight() ); - Vector2 imageSize(attributes.GetWidth()*scale, attributes.GetHeight()*scale); + float scale = std::min( mViewAreaSize.width / image.GetWidth(), mViewAreaSize.height / image.GetHeight() ); + Vector2 imageSize(image.GetWidth()*scale, image.GetHeight()*scale); mFullImageCreator.SetEffectImage(image); mFullImageCreator.SetRegionSize(mViewAreaSize, imageSize); @@ -325,9 +352,9 @@ void CubeTransitionEffect::OnImageLoaded(Image image) mTiles[mContainerIndex][idx].SetPixelArea( pixelArea ); } } - mIsImageLoading = false; } + void CubeTransitionEffect::OnTransitionFinished(Animation& source) { mRoot.SetVisible(false); @@ -345,6 +372,26 @@ Toolkit::CubeTransitionEffect::TransitionCompletedSignalType& CubeTransitionEffe return mTransitionCompletedSignal; } +bool CubeTransitionEffect::DoConnectSignal( BaseObject* object, ConnectionTrackerInterface* tracker, const std::string& signalName, FunctorDelegate* functor ) +{ + Dali::BaseHandle handle( object ); + + bool connected( true ); + Toolkit::CubeTransitionEffect cubeTransitionEffect = Toolkit::CubeTransitionEffect::DownCast( handle ); + + if( 0 == strcmp( signalName.c_str(), SIGNAL_TRANSITION_COMPLETED ) ) + { + cubeTransitionEffect.TransitionCompletedSignal().Connect( tracker, functor ); + } + else + { + // signalName does not match any signal + connected = false; + } + + return connected; +} + } // namespace Internal } // namespace Toolkit