TextLabel property fixes 40/36340/4
authorPaul Wisbey <p.wisbey@samsung.com>
Thu, 5 Mar 2015 09:39:37 +0000 (09:39 +0000)
committerPaul Wisbey <p.wisbey@samsung.com>
Thu, 5 Mar 2015 11:11:37 +0000 (11:11 +0000)
Change-Id: Iaadf7aa6c8dbb3560e790efe0018329b963224d9

dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
dali-toolkit/internal/controls/text-controls/text-label-impl.h
dali-toolkit/internal/text/text-controller.cpp
dali-toolkit/internal/text/text-controller.h

index 9e20046..2bdacc4 100644 (file)
@@ -98,6 +98,7 @@ void TextLabel::SetProperty( BaseObject* object, Property::Index index, const Pr
         {
           impl.mRenderingBackend = static_cast< unsigned int >( backend );
           impl.mRenderer.Reset();
+          impl.RequestTextRelayout();
         }
         break;
       }
@@ -115,6 +116,7 @@ void TextLabel::SetProperty( BaseObject* object, Property::Index index, const Pr
         {
           LayoutEngine::Layout layout = value.Get< bool >() ? LayoutEngine::MULTI_LINE_BOX : LayoutEngine::SINGLE_LINE_BOX;
           impl.mController->GetLayoutEngine().SetLayout( layout );
+          impl.RequestTextRelayout();
         }
         break;
       }
@@ -141,6 +143,13 @@ Property::Value TextLabel::GetProperty( BaseObject* object, Property::Index inde
 
       case Toolkit::TextLabel::PROPERTY_TEXT:
       {
+        if( impl.mController )
+        {
+          std::string text;
+          impl.mController->GetText( text );
+          value = text;
+        }
+
         DALI_LOG_WARNING( "UTF-8 text representation was discarded\n" );
         break;
       }
@@ -149,7 +158,7 @@ Property::Value TextLabel::GetProperty( BaseObject* object, Property::Index inde
       {
         if( impl.mController )
         {
-          value = impl.mController->GetLayoutEngine().GetLayout();
+          value = static_cast<bool>( LayoutEngine::MULTI_LINE_BOX == impl.mController->GetLayoutEngine().GetLayout() );
         }
         break;
       }
@@ -176,21 +185,30 @@ float TextLabel::GetHeightForWidth( float width )
 
 void TextLabel::OnRelayout( const Vector2& size, ActorSizeContainer& container )
 {
-  if( mController->Relayout( size ) )
+  if( mController->Relayout( size ) ||
+      !mRenderer )
   {
     if( !mRenderer )
     {
       mRenderer = Backend::Get().NewRenderer( mRenderingBackend );
     }
 
+    RenderableActor renderableActor;
     if( mRenderer )
     {
-      Actor renderableActor = mRenderer->Render( mController->GetView() );
+      renderableActor = mRenderer->Render( mController->GetView() );
+    }
+
+    if( renderableActor != mRenderableActor )
+    {
+      UnparentAndReset( mRenderableActor );
 
       if( renderableActor )
       {
         Self().Add( renderableActor );
       }
+
+      mRenderableActor = renderableActor;
     }
   }
 }
index b0c2232..5c62137 100644 (file)
@@ -119,6 +119,7 @@ private: // Data
 
   Text::ControllerPtr mController;
   Text::RendererPtr mRenderer;
+  RenderableActor mRenderableActor;
 
   unsigned int mRenderingBackend;
 };
index 2b90bc3..f12ba5b 100644 (file)
@@ -307,6 +307,18 @@ void Controller::SetText( const std::string& text )
   }
 }
 
+void Controller::GetText( std::string& text )
+{
+  if( !mImpl->mNewText.empty() )
+  {
+    text = mImpl->mNewText;
+  }
+  else
+  {
+    // TODO - Convert from UTF-32
+  }
+}
+
 void Controller::EnableTextInput( DecoratorPtr decorator )
 {
   if( !mImpl->mTextInput )
@@ -480,6 +492,9 @@ bool Controller::DoRelayout( const Vector2& size, OperationsMask operations )
 
 Vector3 Controller::GetNaturalSize()
 {
+  // TODO - Finish implementing
+  return Vector3::ZERO;
+
   // Operations that can be done only once until the text changes.
   const OperationsMask onlyOnceOperations = static_cast<OperationsMask>( CONVERT_TO_UTF32 |
                                                                          GET_SCRIPTS      |
index f5ae6ba..8857203 100644 (file)
@@ -97,6 +97,13 @@ public:
   void SetText( const std::string& text );
 
   /**
+   * @brief Retrieve any text previously set.
+   *
+   * @return A string of UTF-8 characters.
+   */
+  void GetText( std::string& text );
+
+  /**
    * @brief Called to enable text input.
    *
    * @note Only selectable or editable controls should calls this.