From c6b64a162088c12ef1b69aa40234e6d4dd772763 Mon Sep 17 00:00:00 2001
From: Paul Wisbey
Date: Thu, 5 Mar 2015 09:39:37 +0000
Subject: [PATCH] TextLabel property fixes
Change-Id: Iaadf7aa6c8dbb3560e790efe0018329b963224d9
---
.../controls/text-controls/text-label-impl.cpp | 24 +++++++++++++++++++---
.../controls/text-controls/text-label-impl.h | 1 +
dali-toolkit/internal/text/text-controller.cpp | 15 ++++++++++++++
dali-toolkit/internal/text/text-controller.h | 7 +++++++
4 files changed, 44 insertions(+), 3 deletions(-)
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 9e20046..2bdacc4 100644
--- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
+++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp
@@ -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( 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;
}
}
}
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 b0c2232..5c62137 100644
--- a/dali-toolkit/internal/controls/text-controls/text-label-impl.h
+++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.h
@@ -119,6 +119,7 @@ private: // Data
Text::ControllerPtr mController;
Text::RendererPtr mRenderer;
+ RenderableActor mRenderableActor;
unsigned int mRenderingBackend;
};
diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp
index 2b90bc3..f12ba5b 100644
--- a/dali-toolkit/internal/text/text-controller.cpp
+++ b/dali-toolkit/internal/text/text-controller.cpp
@@ -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( CONVERT_TO_UTF32 |
GET_SCRIPTS |
diff --git a/dali-toolkit/internal/text/text-controller.h b/dali-toolkit/internal/text/text-controller.h
index f5ae6ba..8857203 100644
--- a/dali-toolkit/internal/text/text-controller.h
+++ b/dali-toolkit/internal/text/text-controller.h
@@ -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.
--
2.7.4