- lineBreakInfo.Resize( numberOfCharacters );
- TextAbstraction::Segmentation::Get().GetLineBreakPositions( text.Begin(),
- numberOfCharacters,
- lineBreakInfo.Begin() );
+ lineBreakInfo.Resize(totalNumberOfCharacters);
+
+ // Whether the current buffer is being updated or is set from scratch.
+ const bool updateCurrentBuffer = numberOfCharacters < totalNumberOfCharacters;
+
+ LineBreakInfo* lineBreakInfoBuffer = NULL;
+ Vector<LineBreakInfo> newLineBreakInfo;
+
+ if(updateCurrentBuffer)
+ {
+ newLineBreakInfo.Resize(numberOfCharacters);
+ lineBreakInfoBuffer = newLineBreakInfo.Begin();
+ }
+ else
+ {
+ lineBreakInfoBuffer = lineBreakInfo.Begin();
+ }
+
+ // Retrieve the line break info.
+ TextAbstraction::Segmentation::Get().GetLineBreakPositions(text.Begin() + startIndex,
+ numberOfCharacters,
+ lineBreakInfoBuffer);
+
+ // If the line break info is updated, it needs to be inserted in the model.
+ if(updateCurrentBuffer)
+ {
+ lineBreakInfo.Insert(lineBreakInfo.Begin() + startIndex,
+ newLineBreakInfo.Begin(),
+ newLineBreakInfo.End());
+ lineBreakInfo.Resize(totalNumberOfCharacters);
+ }
+