From: Kimmo Hoikka Date: Thu, 1 Oct 2015 18:03:03 +0000 (-0700) Subject: Merge "Implemented custom shader in ImageRenderer and changed Dissolve-effect to... X-Git-Tag: dali_1.1.5~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5734cf75b7a9c52fd823eac303f5c0c75167059a;hp=cde5ef8b9c6de8008865e29f3b1acab8f7cd2bbc;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Merge "Implemented custom shader in ImageRenderer and changed Dissolve-effect to utilise this." into devel/master --- diff --git a/dali-toolkit/internal/text/decorator/text-decorator.cpp b/dali-toolkit/internal/text/decorator/text-decorator.cpp index c94129f..6541b77 100644 --- a/dali-toolkit/internal/text/decorator/text-decorator.cpp +++ b/dali-toolkit/internal/text/decorator/text-decorator.cpp @@ -273,6 +273,7 @@ struct Decorator::Impl : public ConnectionTracker mScrollDistance( SCROLL_DISTANCE ), mTextDepth( 0u ), mActiveCopyPastePopup( false ), + mPopupSetNewPosition( true ), mCursorBlinkStatus( true ), mDelayCursorBlink( false ), mPrimaryCursorVisible( false ), @@ -422,6 +423,7 @@ struct Decorator::Impl : public ConnectionTracker if( mCopyPastePopup.actor ) { mCopyPastePopup.actor.HidePopup(); + mPopupSetNewPosition = true; } } } @@ -459,19 +461,22 @@ struct Decorator::Impl : public ConnectionTracker return; } - if ( mHandle[LEFT_SELECTION_HANDLE].active || mHandle[RIGHT_SELECTION_HANDLE].active ) + if( mPopupSetNewPosition ) { - float minHandleXPosition = std::min ( mHandle[LEFT_SELECTION_HANDLE].position.x, mHandle[RIGHT_SELECTION_HANDLE].position.x ); - float maxHandleXPosition = std::max ( mHandle[LEFT_SELECTION_HANDLE].position.x, mHandle[RIGHT_SELECTION_HANDLE].position.x ); + if ( mHandle[LEFT_SELECTION_HANDLE].active || mHandle[RIGHT_SELECTION_HANDLE].active ) + { + float minHandleXPosition = std::min ( mHandle[LEFT_SELECTION_HANDLE].position.x, mHandle[RIGHT_SELECTION_HANDLE].position.x ); + float maxHandleXPosition = std::max ( mHandle[LEFT_SELECTION_HANDLE].position.x, mHandle[RIGHT_SELECTION_HANDLE].position.x ); - float minHandleYPosition = std::min ( mHandle[LEFT_SELECTION_HANDLE].position.y, mHandle[RIGHT_SELECTION_HANDLE].position.y ); + float minHandleYPosition = std::min ( mHandle[LEFT_SELECTION_HANDLE].position.y, mHandle[RIGHT_SELECTION_HANDLE].position.y ); - mCopyPastePopup.position.x = minHandleXPosition + ( ( maxHandleXPosition - minHandleXPosition ) *0.5f ); - mCopyPastePopup.position.y = minHandleYPosition + mCopyPastePopup.offset; - } - else - { - mCopyPastePopup.position = Vector3( mCursor[PRIMARY_CURSOR].position.x, mCursor[PRIMARY_CURSOR].position.y -100.0f , 0.0f ); //todo 100 to be an offset Property + mCopyPastePopup.position.x = minHandleXPosition + ( ( maxHandleXPosition - minHandleXPosition ) *0.5f ); + mCopyPastePopup.position.y = minHandleYPosition + mCopyPastePopup.offset; + } + else + { + mCopyPastePopup.position = Vector3( mCursor[PRIMARY_CURSOR].position.x, mCursor[PRIMARY_CURSOR].position.y -100.0f , 0.0f ); //todo 100 to be an offset Property + } } Vector3 popupSize = Vector3( mCopyPastePopup.actor.GetRelayoutSize( Dimension::WIDTH ), mCopyPastePopup.actor.GetRelayoutSize( Dimension::HEIGHT ), 0.0f ); @@ -481,6 +486,7 @@ struct Decorator::Impl : public ConnectionTracker SetUpPopupPositionNotifications(); mCopyPastePopup.actor.SetPosition( mCopyPastePopup.position ); + mPopupSetNewPosition = false; } void PopupRelayoutComplete( Actor actor ) @@ -1405,6 +1411,7 @@ struct Decorator::Impl : public ConnectionTracker int mTextDepth; ///< The depth used to render the text. bool mActiveCopyPastePopup : 1; + bool mPopupSetNewPosition : 1; bool mCursorBlinkStatus : 1; ///< Flag to switch between blink on and blink off. bool mDelayCursorBlink : 1; ///< Used to avoid cursor blinking when entering text. bool mPrimaryCursorVisible : 1; ///< Whether the primary cursor is visible. @@ -1677,19 +1684,19 @@ bool Decorator::IsPopupActive() const void Decorator::SetEnabledPopupButtons( TextSelectionPopup::Buttons& enabledButtonsBitMask ) { - mImpl->mEnabledPopupButtons = enabledButtonsBitMask; + mImpl->mEnabledPopupButtons = enabledButtonsBitMask; - if ( !mImpl->mCopyPastePopup.actor ) - { - mImpl->mCopyPastePopup.actor = TextSelectionPopup::New( &mImpl->mTextSelectionPopupCallbackInterface ); + if ( !mImpl->mCopyPastePopup.actor ) + { + mImpl->mCopyPastePopup.actor = TextSelectionPopup::New( &mImpl->mTextSelectionPopupCallbackInterface ); #ifdef DECORATOR_DEBUG - mImpl->mCopyPastePopup.actor.SetName("mCopyPastePopup"); + mImpl->mCopyPastePopup.actor.SetName("mCopyPastePopup"); #endif - mImpl->mCopyPastePopup.actor.SetAnchorPoint( AnchorPoint::CENTER ); - mImpl->mCopyPastePopup.actor.OnRelayoutSignal().Connect( mImpl, &Decorator::Impl::PopupRelayoutComplete ); // Position popup after size negotiation - } + mImpl->mCopyPastePopup.actor.SetAnchorPoint( AnchorPoint::CENTER ); + mImpl->mCopyPastePopup.actor.OnRelayoutSignal().Connect( mImpl, &Decorator::Impl::PopupRelayoutComplete ); // Position popup after size negotiation + } - mImpl->mCopyPastePopup.actor.EnableButtons( mImpl->mEnabledPopupButtons ); + mImpl->mCopyPastePopup.actor.EnableButtons( mImpl->mEnabledPopupButtons ); } TextSelectionPopup::Buttons& Decorator::GetEnabledPopupButtons() diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp index b655772..7c629fd 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp @@ -358,6 +358,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker // Now remove references for the old text RemoveText(); mTextCache.Swap( newTextCache ); + RemoveAllShadowRenderTasks(); if( thereAreUnderlinedGlyphs ) { @@ -759,36 +760,33 @@ struct AtlasRenderer::Impl : public ConnectionTracker subActor.SetSize( actorSize ); subActor.SetColor( shadowColor ); - // Discard redundant render-tasks - RemoveShadowRenderTask(); - // Create a render task to render the effect - mShadowTask = Stage::GetCurrent().GetRenderTaskList().CreateTask(); - mShadowTask.SetTargetFrameBuffer( meshRecord.mBuffer ); - mShadowTask.SetSourceActor( subActor ); - mShadowTask.SetClearEnabled( true ); - mShadowTask.SetClearColor( Vector4::ZERO ); - mShadowTask.SetExclusive( true ); - mShadowTask.SetRefreshRate( RenderTask::REFRESH_ONCE ); - mShadowTask.FinishedSignal().Connect( this, &AtlasRenderer::Impl::RenderComplete ); + RenderTask shadowTask = Stage::GetCurrent().GetRenderTaskList().CreateTask(); + shadowTask.SetTargetFrameBuffer( meshRecord.mBuffer ); + shadowTask.SetSourceActor( subActor ); + shadowTask.SetClearEnabled( true ); + shadowTask.SetClearColor( Vector4::ZERO ); + shadowTask.SetExclusive( true ); + shadowTask.SetRefreshRate( RenderTask::REFRESH_ONCE ); + shadowTask.FinishedSignal().Connect( this, &AtlasRenderer::Impl::RenderComplete ); + mShadowTasks.push_back( shadowTask ); actor.Add( subActor ); return actor; } - void RemoveShadowRenderTask() + void RemoveShadowRenderTask( RenderTask renderTask ) { - if( mShadowTask ) + if( renderTask ) { - mShadowTask.FinishedSignal().Disconnect( this, &AtlasRenderer::Impl::RenderComplete ); + renderTask.FinishedSignal().Disconnect( this, &AtlasRenderer::Impl::RenderComplete ); // Guard to prevent accessing Stage after dali-core destruction if( Stage::IsInstalled() ) { - Stage::GetCurrent().GetRenderTaskList().RemoveTask( mShadowTask ); + Stage::GetCurrent().GetRenderTaskList().RemoveTask( renderTask ); } - - mShadowTask.Reset(); + renderTask.Reset(); } } @@ -805,12 +803,21 @@ struct AtlasRenderer::Impl : public ConnectionTracker } } - RemoveShadowRenderTask(); + RemoveShadowRenderTask( renderTask ); + } + + void RemoveAllShadowRenderTasks() + { + for ( std::vector< RenderTask >::iterator shadowIterator = mShadowTasks.begin(); + shadowIterator != mShadowTasks.end(); ++shadowIterator ) + { + RemoveShadowRenderTask( *shadowIterator ); + } } Actor mActor; ///< The actor parent which renders the text AtlasGlyphManager mGlyphManager; ///< Glyph Manager to handle upload and caching - RenderTask mShadowTask; ///< Used to render shadows + std::vector< RenderTask > mShadowTasks; ///< Used to render shadows TextAbstraction::FontClient mFontClient; ///> The font client used to supply glyph information std::vector< MaxBlockSize > mBlockSizes; ///> Maximum size needed to contain a glyph in a block within a new atlas std::vector< uint32_t > mFace; ///> Face indices for a quad @@ -865,7 +872,7 @@ AtlasRenderer::AtlasRenderer() AtlasRenderer::~AtlasRenderer() { - mImpl->RemoveShadowRenderTask(); + mImpl->RemoveAllShadowRenderTasks(); mImpl->RemoveText(); delete mImpl;