From f6e6320c0fce19229bdec06a996433c09b2d8fea Mon Sep 17 00:00:00 2001 From: Richard Underhill Date: Wed, 24 Jun 2015 16:54:44 +0100 Subject: [PATCH] Uses depth within tree to set the depth index of text controls and their renderers. Change-Id: I83ff441be4bfc558f4357b21b9e32149e8ffb025 Signed-off-by: Richard Underhill --- .../internal/controls/text-controls/text-field-impl.cpp | 10 ++++++++-- .../internal/controls/text-controls/text-field-impl.h | 6 ++++++ .../internal/controls/text-controls/text-label-impl.cpp | 10 ++++++++-- .../internal/controls/text-controls/text-label-impl.h | 7 ++++++- .../internal/text/rendering/atlas/text-atlas-renderer.cpp | 14 +++++++++----- .../internal/text/rendering/atlas/text-atlas-renderer.h | 3 ++- .../internal/text/rendering/basic/text-basic-renderer.cpp | 2 +- .../internal/text/rendering/basic/text-basic-renderer.h | 4 +++- dali-toolkit/internal/text/rendering/text-renderer.h | 3 ++- 9 files changed, 45 insertions(+), 14 deletions(-) diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 4eeab41..0480f7e 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -919,7 +919,7 @@ void TextField::OnRelayout( const Vector2& size, RelayoutContainer& container ) Actor renderableActor; if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView() ); + renderableActor = mRenderer->Render( mController->GetView(), mDepth ); } EnableClipping( (Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy), size ); @@ -1093,6 +1093,11 @@ void TextField::KeyboardStatusChanged(bool keyboardShown) } } +void TextField::OnStageConnection( unsigned int depth ) +{ + mDepth = depth; +} + bool TextField::OnTouched( Actor actor, const TouchEvent& event ) { return true; @@ -1101,7 +1106,8 @@ bool TextField::OnTouched( Actor actor, const TouchEvent& event ) TextField::TextField() : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), mRenderingBackend( DEFAULT_RENDERING_BACKEND ), - mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP ) + mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP ), + mDepth( 0 ) { } diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index 437556b..4700530 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -137,6 +137,11 @@ private: // From Control virtual void OnPan( const PanGesture& gesture ); /** + * @copydoc Control::OnStageConnection() + */ + virtual void OnStageConnection( unsigned int depth ); + + /** * @copydoc Dali::CustomActorImpl::OnKeyEvent(const KeyEvent&) */ virtual bool OnKeyEvent(const KeyEvent& event); @@ -215,6 +220,7 @@ private: // Data int mRenderingBackend; int mExceedPolicy; + unsigned int mDepth; }; } // namespace Internal diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp index 095e99f..612ebe7 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -469,7 +469,7 @@ void TextLabel::OnRelayout( const Vector2& size, RelayoutContainer& container ) Actor renderableActor; if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView() ); + renderableActor = mRenderer->Render( mController->GetView(), mDepth ); } if( renderableActor != mRenderableActor ) @@ -494,6 +494,11 @@ void TextLabel::RequestTextRelayout() RelayoutRequest(); } +void TextLabel::OnStageConnection( unsigned int depth ) +{ + mDepth = depth; +} + void TextLabel::TextChanged() { // TextLabel does not provide a signal for this @@ -506,7 +511,8 @@ void TextLabel::MaxLengthReached() TextLabel::TextLabel() : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), - mRenderingBackend( DEFAULT_RENDERING_BACKEND ) + mRenderingBackend( DEFAULT_RENDERING_BACKEND ), + mDepth( 0 ) { } diff --git a/dali-toolkit/internal/controls/text-controls/text-label-impl.h b/dali-toolkit/internal/controls/text-controls/text-label-impl.h index fdb02a9..87ca9f8 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h @@ -93,6 +93,11 @@ private: // From Control virtual float GetHeightForWidth( float width ); /** + * @copydoc Control::OnStageConnection() + */ + virtual void OnStageConnection( unsigned int depth ); + + /** * @copydoc Text::ControlInterface::RequestTextRelayout() */ virtual void RequestTextRelayout(); @@ -130,8 +135,8 @@ private: // Data Text::ControllerPtr mController; Text::RendererPtr mRenderer; Actor mRenderableActor; - int mRenderingBackend; + unsigned int mDepth; }; } // namespace Internal 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 ae12df1..1def1b1 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp @@ -27,7 +27,6 @@ #include #include #include - // INTERNAL INCLUDES #include #include @@ -107,11 +106,13 @@ struct AtlasRenderer::Impl : public ConnectionTracker const Vector4& shadowColor, bool underlineEnabled, const Vector4& underlineColor, - float underlineHeight ) + float underlineHeight, + unsigned int depth ) { AtlasManager::AtlasSlot slot; std::vector< MeshRecord > meshContainer; Vector< Extent > extents; + mDepth = static_cast< int >( depth ); float currentUnderlinePosition = ZERO; float currentUnderlineThickness = underlineHeight; @@ -317,6 +318,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker Material material = mGlyphManager.GetMaterial( meshRecord.mAtlasId ); Dali::Renderer renderer = Dali::Renderer::New( quadGeometry, material ); + renderer.SetDepthIndex( mDepth ); Actor actor = Actor::New(); actor.AddRenderer( renderer ); actor.SetSize( 1.0f, 1.0f ); @@ -608,7 +610,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker Dali::Renderer renderer = Dali::Renderer::New( quadGeometry, material ); // Ensure shadow is behind the text... - renderer.SetDepthIndex( CONTENT_DEPTH_INDEX - 1 ); + renderer.SetDepthIndex( mDepth + CONTENT_DEPTH_INDEX - 1 ); Actor actor = Actor::New(); actor.AddRenderer( renderer ); actor.SetSize( 1.0f, 1.0f ); @@ -682,6 +684,7 @@ struct AtlasRenderer::Impl : public ConnectionTracker std::vector< uint32_t > mFace; ///> Face indices for a quad Property::Map mQuadVertexFormat; Property::Map mQuadIndexFormat; + int mDepth; }; Text::RendererPtr AtlasRenderer::New() @@ -691,7 +694,7 @@ Text::RendererPtr AtlasRenderer::New() return Text::RendererPtr( new AtlasRenderer() ); } -Actor AtlasRenderer::Render( Text::ViewInterface& view ) +Actor AtlasRenderer::Render( Text::ViewInterface& view, unsigned int depth ) { UnparentAndReset( mImpl->mActor ); @@ -719,7 +722,8 @@ Actor AtlasRenderer::Render( Text::ViewInterface& view ) view.GetShadowColor(), view.IsUnderlineEnabled(), view.GetUnderlineColor(), - view.GetUnderlineHeight() ); + view.GetUnderlineHeight(), + depth ); } return mImpl->mActor; diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h index 7bc6177..4107f82 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h @@ -48,9 +48,10 @@ public: * @brief Render the glyphs from a ViewInterface. * * @param[in] view The interface to a view. + * @param[in] depth The depth in the tree of the parent. * @return The Renderable actor used to position the text. */ - virtual Actor Render( ViewInterface& view ); + virtual Actor Render( ViewInterface& view, unsigned int depth ); protected: diff --git a/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.cpp b/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.cpp index 8011823..52548d9 100644 --- a/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.cpp @@ -342,7 +342,7 @@ Text::RendererPtr BasicRenderer::New() return Text::RendererPtr( new BasicRenderer() ); } -Actor BasicRenderer::Render( Text::ViewInterface& view ) +Actor BasicRenderer::Render( Text::ViewInterface& view, unsigned int depth ) { // Remove the previous text UnparentAndReset( mImpl->mActor ); diff --git a/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.h b/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.h index 6a7e1a0..793c277 100644 --- a/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.h +++ b/dali-toolkit/internal/text/rendering/basic/text-basic-renderer.h @@ -51,9 +51,11 @@ public: * @brief Render the glyphs from a ViewInterface. * * @param[in] view The interface to a view. + * @param[in] depth The tree depth of the parent. + * . * @return The Renderable actor used to position the text. */ - virtual Actor Render( ViewInterface& view ); + virtual Actor Render( ViewInterface& view, unsigned int depth ); protected: diff --git a/dali-toolkit/internal/text/rendering/text-renderer.h b/dali-toolkit/internal/text/rendering/text-renderer.h index 1262c90..1b272ea 100644 --- a/dali-toolkit/internal/text/rendering/text-renderer.h +++ b/dali-toolkit/internal/text/rendering/text-renderer.h @@ -52,9 +52,10 @@ public: * @brief Render the glyphs from a ViewInterface. * * @param[in] view The interface to a view. + * @param[in] depth The depth in the tree of the parent. * @return The Renderable actor used to position the text. */ - virtual Actor Render( ViewInterface& view ) = 0; + virtual Actor Render( ViewInterface& view, unsigned int depth ) = 0; protected: -- 2.7.4