Uses depth within tree to set the depth index of text controls and their renderers. 42/42242/2
authorRichard Underhill <r.underhill@partner.samsung.com>
Wed, 24 Jun 2015 15:54:44 +0000 (16:54 +0100)
committerFrancisco Santos <f1.santos@samsung.com>
Wed, 24 Jun 2015 16:08:25 +0000 (17:08 +0100)
Change-Id: I83ff441be4bfc558f4357b21b9e32149e8ffb025
Signed-off-by: Richard Underhill <r.underhill@partner.samsung.com>
dali-toolkit/internal/controls/text-controls/text-field-impl.cpp
dali-toolkit/internal/controls/text-controls/text-field-impl.h
dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp
dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h
dali-toolkit/internal/text/rendering/basic/text-basic-renderer.cpp
dali-toolkit/internal/text/rendering/basic/text-basic-renderer.h
dali-toolkit/internal/text/rendering/text-renderer.h

index 4eeab41..0480f7e 100644 (file)
@@ -919,7 +919,7 @@ void TextField::OnRelayout( const Vector2& size, RelayoutContainer& container )
     Actor renderableActor;
     if( mRenderer )
     {
     Actor renderableActor;
     if( mRenderer )
     {
-      renderableActor = mRenderer->Render( mController->GetView() );
+      renderableActor = mRenderer->Render( mController->GetView(), mDepth );
     }
 
     EnableClipping( (Dali::Toolkit::TextField::EXCEED_POLICY_CLIP == mExceedPolicy), size );
     }
 
     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;
 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 ),
 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 )
 {
 }
 
 {
 }
 
index 437556b..4700530 100644 (file)
@@ -137,6 +137,11 @@ private: // From Control
   virtual void OnPan( const PanGesture& gesture );
 
   /**
   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);
    * @copydoc Dali::CustomActorImpl::OnKeyEvent(const KeyEvent&)
    */
   virtual bool OnKeyEvent(const KeyEvent& event);
@@ -215,6 +220,7 @@ private: // Data
 
   int mRenderingBackend;
   int mExceedPolicy;
 
   int mRenderingBackend;
   int mExceedPolicy;
+  unsigned int mDepth;
 };
 
 } // namespace Internal
 };
 
 } // namespace Internal
index 095e99f..612ebe7 100644 (file)
@@ -469,7 +469,7 @@ void TextLabel::OnRelayout( const Vector2& size, RelayoutContainer& container )
     Actor renderableActor;
     if( mRenderer )
     {
     Actor renderableActor;
     if( mRenderer )
     {
-      renderableActor = mRenderer->Render( mController->GetView() );
+      renderableActor = mRenderer->Render( mController->GetView(), mDepth );
     }
 
     if( renderableActor != mRenderableActor )
     }
 
     if( renderableActor != mRenderableActor )
@@ -494,6 +494,11 @@ void TextLabel::RequestTextRelayout()
   RelayoutRequest();
 }
 
   RelayoutRequest();
 }
 
+void TextLabel::OnStageConnection( unsigned int depth )
+{
+  mDepth = depth;
+}
+
 void TextLabel::TextChanged()
 {
   // TextLabel does not provide a signal for this
 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 ) ),
 
 TextLabel::TextLabel()
 : Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ),
-  mRenderingBackend( DEFAULT_RENDERING_BACKEND )
+  mRenderingBackend( DEFAULT_RENDERING_BACKEND ),
+  mDepth( 0 )
 {
 }
 
 {
 }
 
index fdb02a9..87ca9f8 100644 (file)
@@ -93,6 +93,11 @@ private: // From Control
   virtual float GetHeightForWidth( float width );
 
   /**
   virtual float GetHeightForWidth( float width );
 
   /**
+   * @copydoc Control::OnStageConnection()
+   */
+  virtual void OnStageConnection( unsigned int depth );
+
+  /**
    * @copydoc Text::ControlInterface::RequestTextRelayout()
    */
   virtual void RequestTextRelayout();
    * @copydoc Text::ControlInterface::RequestTextRelayout()
    */
   virtual void RequestTextRelayout();
@@ -130,8 +135,8 @@ private: // Data
   Text::ControllerPtr mController;
   Text::RendererPtr mRenderer;
   Actor mRenderableActor;
   Text::ControllerPtr mController;
   Text::RendererPtr mRenderer;
   Actor mRenderableActor;
-
   int mRenderingBackend;
   int mRenderingBackend;
+  unsigned int mDepth;
 };
 
 } // namespace Internal
 };
 
 } // namespace Internal
index ae12df1..1def1b1 100644 (file)
@@ -27,7 +27,6 @@
 #include <dali/devel-api/rendering/shader.h>
 #include <dali/devel-api/text-abstraction/font-client.h>
 #include <dali/integration-api/debug.h>
 #include <dali/devel-api/rendering/shader.h>
 #include <dali/devel-api/text-abstraction/font-client.h>
 #include <dali/integration-api/debug.h>
-
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-depth-index-ranges.h>
 #include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h>
 // INTERNAL INCLUDES
 #include <dali-toolkit/public-api/controls/control-depth-index-ranges.h>
 #include <dali-toolkit/internal/text/rendering/atlas/atlas-glyph-manager.h>
@@ -107,11 +106,13 @@ struct AtlasRenderer::Impl : public ConnectionTracker
                   const Vector4& shadowColor,
                   bool underlineEnabled,
                   const Vector4& underlineColor,
                   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;
   {
     AtlasManager::AtlasSlot slot;
     std::vector< MeshRecord > meshContainer;
     Vector< Extent > extents;
+    mDepth = static_cast< int >( depth );
 
     float currentUnderlinePosition = ZERO;
     float currentUnderlineThickness = underlineHeight;
 
     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 );
 
     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 );
     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...
     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 );
     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;
   std::vector< uint32_t > mFace;                      ///> Face indices for a quad
   Property::Map mQuadVertexFormat;
   Property::Map mQuadIndexFormat;
+  int mDepth;
 };
 
 Text::RendererPtr AtlasRenderer::New()
 };
 
 Text::RendererPtr AtlasRenderer::New()
@@ -691,7 +694,7 @@ Text::RendererPtr AtlasRenderer::New()
   return Text::RendererPtr( new AtlasRenderer() );
 }
 
   return Text::RendererPtr( new AtlasRenderer() );
 }
 
-Actor AtlasRenderer::Render( Text::ViewInterface& view )
+Actor AtlasRenderer::Render( Text::ViewInterface& view, unsigned int depth )
 {
   UnparentAndReset( mImpl->mActor );
 
 {
   UnparentAndReset( mImpl->mActor );
 
@@ -719,7 +722,8 @@ Actor AtlasRenderer::Render( Text::ViewInterface& view )
                       view.GetShadowColor(),
                       view.IsUnderlineEnabled(),
                       view.GetUnderlineColor(),
                       view.GetShadowColor(),
                       view.IsUnderlineEnabled(),
                       view.GetUnderlineColor(),
-                      view.GetUnderlineHeight() );
+                      view.GetUnderlineHeight(),
+                      depth );
   }
 
   return mImpl->mActor;
   }
 
   return mImpl->mActor;
index 7bc6177..4107f82 100644 (file)
@@ -48,9 +48,10 @@ public:
    * @brief Render the glyphs from a ViewInterface.
    *
    * @param[in] view The interface to a view.
    * @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.
    */
    * @return The Renderable actor used to position the text.
    */
-  virtual Actor Render( ViewInterface& view );
+  virtual Actor Render( ViewInterface& view, unsigned int depth );
 
 protected:
 
 
 protected:
 
index 8011823..52548d9 100644 (file)
@@ -342,7 +342,7 @@ Text::RendererPtr BasicRenderer::New()
   return Text::RendererPtr( new BasicRenderer() );
 }
 
   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 );
 {
   // Remove the previous text
   UnparentAndReset( mImpl->mActor );
index 6a7e1a0..793c277 100644 (file)
@@ -51,9 +51,11 @@ public:
    * @brief Render the glyphs from a ViewInterface.
    *
    * @param[in] view The interface to a view.
    * @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.
    */
    * @return The Renderable actor used to position the text.
    */
-  virtual Actor Render( ViewInterface& view );
+  virtual Actor Render( ViewInterface& view, unsigned int depth );
 
 protected:
 
 
 protected:
 
index 1262c90..1b272ea 100644 (file)
@@ -52,9 +52,10 @@ public:
    * @brief Render the glyphs from a ViewInterface.
    *
    * @param[in] view The interface to a view.
    * @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.
    */
    * @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:
 
 
 protected: