X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=optional%2Fdali-toolkit%2Finternal%2Fcontrols%2Fbubble-effect%2Fbubble-emitter-impl.cpp;h=787f8426072acdcac515a72fddcd8338897246e2;hb=c1c78b1b64e484e60c510afba57f05c2051f8e5d;hp=cad508012505eb7261295de9a3c0d16595dc4b97;hpb=db3d8658c7848f918d591d2f7be5c7d9434a6307;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/optional/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp b/optional/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp index cad5080..787f842 100644 --- a/optional/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp +++ b/optional/dali-toolkit/internal/controls/bubble-effect/bubble-emitter-impl.cpp @@ -15,16 +15,17 @@ * */ -//CLASS HEADER +// CLASS HEADER #include "bubble-emitter-impl.h" -//EXTERNAL INCLUDES +// EXTERNAL INCLUDES #include +#include +#include -//INTERNAL INCLUDES +// INTERNAL INCLUDES #include - namespace Dali { @@ -41,6 +42,7 @@ BubbleEmitter::BubbleEmitter( const Vector2& movementArea, mMovementArea( movementArea ), mShapeImage( shapeImage ), mTotalNumOfBubble( maximumNumberOfBubble ), + mRenderTaskRunning(false), mBubbleSizeRange( bubbleSizeRange ), mCurrentUniform( 0 ), mDensity( 5 ) @@ -128,7 +130,11 @@ void BubbleEmitter::OnInitialize() // Create a cameraActor for the off screen render task. mCameraActor = CameraActor::New(mMovementArea); mCameraActor.SetParentOrigin(ParentOrigin::CENTER); - Stage::GetCurrent().Add(mCameraActor); + + Stage stage = Stage::GetCurrent(); + + stage.Add(mCameraActor); + stage.ContextRegainedSignal().Connect(this, &BubbleEmitter::OnContextRegained); } Actor BubbleEmitter::GetRootActor() @@ -138,6 +144,9 @@ Actor BubbleEmitter::GetRootActor() void BubbleEmitter::SetBackground( Image bgImage, const Vector3& hsvDelta ) { + mBackgroundImage = bgImage; + mHSVDelta = hsvDelta; + ImageActor sourceActor = ImageActor::New( bgImage ); sourceActor.SetSize( mMovementArea ); sourceActor.SetParentOrigin(ParentOrigin::CENTER); @@ -155,6 +164,7 @@ void BubbleEmitter::SetBackground( Image bgImage, const Vector3& hsvDelta ) task.GetCameraActor().SetInvertYAxis(true); task.SetTargetFrameBuffer( mEffectImage ); task.FinishedSignal().Connect(this, &BubbleEmitter::OnRenderFinished); + mRenderTaskRunning = true; } void BubbleEmitter::SetShapeImage( Image shapeImage ) @@ -203,6 +213,7 @@ void BubbleEmitter::SetBubbleDensity( unsigned int density ) // clear the resources created for the off screen rendering void BubbleEmitter::OnRenderFinished(RenderTask& source) { + mRenderTaskRunning = false; Actor sourceActor = source.GetSourceActor(); if( sourceActor ) { @@ -212,8 +223,20 @@ void BubbleEmitter::OnRenderFinished(RenderTask& source) renderable.RemoveShaderEffect(); } } - Stage::GetCurrent().Remove(sourceActor); - Stage::GetCurrent().GetRenderTaskList().RemoveTask(source); + + Stage stage = Stage::GetCurrent(); + stage.Remove(sourceActor); + stage.GetRenderTaskList().RemoveTask(source); +} + +void BubbleEmitter::OnContextRegained() +{ + // Context was lost, so the framebuffer has been destroyed. Re-create render task + // and trigger re-draw if not already running + if( ! mRenderTaskRunning ) + { + SetBackground( mBackgroundImage, mHSVDelta ); + } } void BubbleEmitter::SetBlendMode( bool enable )