From: Paul Wisbey
Date: Tue, 17 Mar 2015 09:09:41 +0000 (+0000)
Subject: Break-up the Relayout method
X-Git-Tag: dali_1.0.38~11^2~52
X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=f1f00d9cc45208a85918e6e9d528c4416945182e
Break-up the Relayout method
Change-Id: I55ed27274e9665ea0a1421d804cc021993be009a
---
diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp
index 79185ba..a203e03 100644
--- a/dali-toolkit/internal/text/text-controller.cpp
+++ b/dali-toolkit/internal/text/text-controller.cpp
@@ -643,6 +643,9 @@ bool Controller::Relayout( const Vector2& size )
mImpl->mControlSize = size;
}
+ // Make sure the model is up-to-date before layouting
+ ReplaceText( mImpl->mOperationsPending );
+
Size layoutSize;
bool updated = DoRelayout( mImpl->mControlSize,
mImpl->mOperationsPending,
@@ -660,12 +663,8 @@ bool Controller::Relayout( const Vector2& size )
return updated;
}
-bool Controller::DoRelayout( const Vector2& size,
- OperationsMask operationsRequired,
- Size& layoutSize )
+void Controller::ReplaceText( OperationsMask operationsRequired )
{
- bool viewUpdated( false );
-
// Calculate the operations to be done.
const OperationsMask operations = static_cast( mImpl->mOperationsPending & operationsRequired );
@@ -762,7 +761,6 @@ bool Controller::DoRelayout( const Vector2& size,
}
}
- Vector bidirectionalInfo;
if( BIDI_INFO & operations )
{
// Some vectors with data needed to get the paragraph's bidirectional info may be void
@@ -810,6 +808,7 @@ bool Controller::DoRelayout( const Vector2& size,
}
}
+ Vector bidirectionalInfo;
bidirectionalInfo.Reserve( numberOfParagraphs );
// Calculates the bidirectional info for the whole paragraph if it contains right to left scripts.
@@ -860,6 +859,16 @@ bool Controller::DoRelayout( const Vector2& size,
charactersPerGlyph.Begin(),
numberOfGlyphs );
}
+}
+
+bool Controller::DoRelayout( const Vector2& size,
+ OperationsMask operationsRequired,
+ Size& layoutSize )
+{
+ bool viewUpdated( false );
+
+ // Calculate the operations to be done.
+ const OperationsMask operations = static_cast( mImpl->mOperationsPending & operationsRequired );
if( LAYOUT & operations )
{
@@ -868,47 +877,37 @@ bool Controller::DoRelayout( const Vector2& size,
// Fill the vectors again.
const Length numberOfCharacters = mImpl->mLogicalModel->GetNumberOfCharacters();
- numberOfGlyphs = mImpl->mVisualModel->GetNumberOfGlyphs();
+ Length numberOfGlyphs = mImpl->mVisualModel->GetNumberOfGlyphs();
- if( 0u == lineBreakInfo.Count() )
- {
- lineBreakInfo.Resize( numberOfCharacters );
- mImpl->mLogicalModel->GetLineBreakInfo( lineBreakInfo.Begin(),
- 0u,
- numberOfCharacters );
- }
+ Vector lineBreakInfo;
+ lineBreakInfo.Resize( numberOfCharacters );
+ mImpl->mLogicalModel->GetLineBreakInfo( lineBreakInfo.Begin(),
+ 0u,
+ numberOfCharacters );
- if( 0u == wordBreakInfo.Count() )
- {
- wordBreakInfo.Resize( numberOfCharacters );
- mImpl->mLogicalModel->GetWordBreakInfo( wordBreakInfo.Begin(),
- 0u,
- numberOfCharacters );
- }
+ Vector wordBreakInfo;
+ wordBreakInfo.Resize( numberOfCharacters );
+ mImpl->mLogicalModel->GetWordBreakInfo( wordBreakInfo.Begin(),
+ 0u,
+ numberOfCharacters );
- if( 0u == glyphs.Count() )
- {
- glyphs.Resize( numberOfGlyphs );
- mImpl->mVisualModel->GetGlyphs( glyphs.Begin(),
- 0u,
- numberOfGlyphs );
- }
+ Vector glyphs;
+ glyphs.Resize( numberOfGlyphs );
+ mImpl->mVisualModel->GetGlyphs( glyphs.Begin(),
+ 0u,
+ numberOfGlyphs );
- if( 0u == glyphsToCharactersMap.Count() )
- {
- glyphsToCharactersMap.Resize( numberOfGlyphs );
- mImpl->mVisualModel->GetGlyphToCharacterMap( glyphsToCharactersMap.Begin(),
+ Vector glyphsToCharactersMap;
+ glyphsToCharactersMap.Resize( numberOfGlyphs );
+ mImpl->mVisualModel->GetGlyphToCharacterMap( glyphsToCharactersMap.Begin(),
+ 0u,
+ numberOfGlyphs );
+
+ Vector charactersPerGlyph;
+ charactersPerGlyph.Resize( numberOfGlyphs );
+ mImpl->mVisualModel->GetCharactersPerGlyphMap( charactersPerGlyph.Begin(),
0u,
numberOfGlyphs );
- }
-
- if( 0u == charactersPerGlyph.Count() )
- {
- charactersPerGlyph.Resize( numberOfGlyphs );
- mImpl->mVisualModel->GetCharactersPerGlyphMap( charactersPerGlyph.Begin(),
- 0u,
- numberOfGlyphs );
- }
// Set the layout parameters.
LayoutParameters layoutParameters( size,
@@ -943,13 +942,11 @@ bool Controller::DoRelayout( const Vector2& size,
{
const Length numberOfBidiParagraphs = mImpl->mLogicalModel->GetNumberOfBidirectionalInfoRuns( 0u, numberOfCharacters );
- if( 0u == bidirectionalInfo.Count() )
- {
- bidirectionalInfo.Resize( numberOfBidiParagraphs );
- mImpl->mLogicalModel->GetBidirectionalInfo( bidirectionalInfo.Begin(),
- 0u,
- numberOfCharacters );
- }
+ Vector bidirectionalInfo;
+ bidirectionalInfo.Resize( numberOfBidiParagraphs );
+ mImpl->mLogicalModel->GetBidirectionalInfo( bidirectionalInfo.Begin(),
+ 0u,
+ numberOfCharacters );
// Check first if there are paragraphs with bidirectional info.
if( 0u != bidirectionalInfo.Count() )
@@ -1051,6 +1048,8 @@ Vector3 Controller::GetNaturalSize()
GET_WORD_BREAKS |
SHAPE_TEXT |
GET_GLYPH_METRICS );
+ // Make sure the model is up-to-date before layouting
+ ReplaceText( onlyOnceOperations );
// Operations that need to be done if the size changes.
const OperationsMask sizeOperations = static_cast( LAYOUT |
@@ -1095,6 +1094,9 @@ float Controller::GetHeightForWidth( float width )
SHAPE_TEXT |
GET_GLYPH_METRICS );
+ // Make sure the model is up-to-date before layouting
+ ReplaceText( onlyOnceOperations );
+
// Operations that need to be done if the size changes.
const OperationsMask sizeOperations = static_cast( LAYOUT |
REORDER );
diff --git a/dali-toolkit/internal/text/text-controller.h b/dali-toolkit/internal/text/text-controller.h
index 640c2b4..ee77ca3 100644
--- a/dali-toolkit/internal/text/text-controller.h
+++ b/dali-toolkit/internal/text/text-controller.h
@@ -207,6 +207,13 @@ public:
bool Relayout( const Vector2& size );
/**
+ * @brief Update the model with new text.
+ *
+ * @param[in] operations The layout operations which need to be done.
+ */
+ void ReplaceText( OperationsMask operations );
+
+ /**
* @brief Lays-out the text.
*
* GetNaturalSize(), GetHeightForWidth() and Relayout() calls this method.