From c6d0c84be1f07a71e866d8387acb5948eee67ec2 Mon Sep 17 00:00:00 2001 From: Paul Wisbey Date: Tue, 10 Mar 2015 08:25:42 +0000 Subject: [PATCH] Fixed crash when Visual model positions < glyphs Change-Id: I61398d876cc3614d97487a5c02c0dd51201f3420 --- dali-toolkit/internal/text/text-view.cpp | 9 ++++++++- dali-toolkit/internal/text/visual-model.cpp | 5 +++++ dali-toolkit/internal/text/visual-model.h | 8 ++++++++ 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/dali-toolkit/internal/text/text-view.cpp b/dali-toolkit/internal/text/text-view.cpp index 235f534..d12c697 100644 --- a/dali-toolkit/internal/text/text-view.cpp +++ b/dali-toolkit/internal/text/text-view.cpp @@ -55,7 +55,14 @@ Length View::GetNumberOfGlyphs() const { if( mImpl->mVisualModel ) { - return mImpl->mVisualModel->GetNumberOfGlyphs(); + VisualModel& model = *mImpl->mVisualModel; + + Length glyphCount = model.GetNumberOfGlyphs(); + Length positionCount = model.GetNumberOfGlyphPositions(); + + DALI_ASSERT_DEBUG( positionCount <= glyphCount && "Invalid glyph positions in Model" ); + + return (positionCount < glyphCount) ? positionCount : glyphCount; } return 0; diff --git a/dali-toolkit/internal/text/visual-model.cpp b/dali-toolkit/internal/text/visual-model.cpp index ab183e4..abf4f65 100644 --- a/dali-toolkit/internal/text/visual-model.cpp +++ b/dali-toolkit/internal/text/visual-model.cpp @@ -157,6 +157,11 @@ void VisualModel::SetGlyphPositions( const Vector2* glyphPositions, memcpy( modelPositions.Begin(), glyphPositions, numberOfGlyphs * sizeof( Vector2 ) ); } +Length VisualModel::GetNumberOfGlyphPositions() const +{ + return mImpl->mGlyphPositions.Count(); +} + void VisualModel::GetGlyphPositions( Vector2* glyphPositions, GlyphIndex glyphIndex, Length numberOfGlyphs ) const diff --git a/dali-toolkit/internal/text/visual-model.h b/dali-toolkit/internal/text/visual-model.h index ad2a137..ac3b096 100644 --- a/dali-toolkit/internal/text/visual-model.h +++ b/dali-toolkit/internal/text/visual-model.h @@ -178,6 +178,14 @@ public: Length numberOfGlyphs ); /** + * Retrieves the number of glyph positions set. + * + * @note This may be less than the number of glyphs in the model. + * @return The number of glyphs. + */ + Length GetNumberOfGlyphPositions() const; + + /** * @brief Retrieves the glyph positions. * * @pre The size of the @p positions buffer needs to be big enough to copy the @p numberOfGlyphs positions. -- 2.7.4