From 00c549366e07db37a58ae6940abbae462d1061ea Mon Sep 17 00:00:00 2001 From: Victor Cebollada Date: Wed, 14 Dec 2016 07:10:22 +0000 Subject: [PATCH] Text - Fix for placement actor. * Aligns the placement actor within the text control according with the alignment properties. Change-Id: I62782283d13195081b56d395eecb854eb30f1df9 Signed-off-by: Victor Cebollada --- .../dali-toolkit-test-utils/toolkit-text-utils.cpp | 4 +++- .../src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp | 4 +++- automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp | 11 +++++++++++ .../internal/controls/text-controls/text-editor-impl.cpp | 7 +++++-- .../internal/controls/text-controls/text-editor-impl.h | 1 + .../internal/controls/text-controls/text-field-impl.cpp | 8 +++++--- .../internal/controls/text-controls/text-field-impl.h | 1 + .../internal/controls/text-controls/text-label-impl.cpp | 7 +++++-- dali-toolkit/internal/text/layouts/layout-engine.cpp | 13 ++++++++++--- dali-toolkit/internal/text/layouts/layout-engine.h | 4 +++- .../internal/text/rendering/atlas/text-atlas-renderer.cpp | 15 ++++++++++----- .../internal/text/rendering/atlas/text-atlas-renderer.h | 10 ++++------ dali-toolkit/internal/text/rendering/text-renderer.h | 5 ++++- .../text/rendering/vector-based/vector-based-renderer.cpp | 8 ++++++-- .../text/rendering/vector-based/vector-based-renderer.h | 10 ++++------ dali-toolkit/internal/text/text-controller-impl.cpp | 6 +++--- dali-toolkit/internal/text/text-controller.cpp | 5 ++++- dali-toolkit/internal/text/text-model.h | 1 + dali-toolkit/internal/text/text-view-interface.h | 2 ++ dali-toolkit/internal/text/text-view.cpp | 3 +++ dali-toolkit/internal/text/text-view.h | 1 + 21 files changed, 89 insertions(+), 37 deletions(-) diff --git a/automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/toolkit-text-utils.cpp b/automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/toolkit-text-utils.cpp index 31d81af..74ac7b5 100644 --- a/automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/toolkit-text-utils.cpp +++ b/automated-tests/src/dali-toolkit-internal/dali-toolkit-test-utils/toolkit-text-utils.cpp @@ -334,11 +334,13 @@ void CreateTextModel( const std::string& text, if( options.align ) { + float alignmentOffset = 0.f; layoutEngine.Align( textArea, 0u, numberOfCharacters, Layout::HORIZONTAL_ALIGN_BEGIN, - lines ); + lines, + alignmentOffset ); } } diff --git a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp index 80c4631..5f08853 100644 --- a/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp +++ b/automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Layout.cpp @@ -482,11 +482,13 @@ bool AlignTest( const AlignData& data ) Layout::Engine engine; engine.SetMetrics( metrics ); + float alignmentOffset = 0.f; engine.Align( data.textArea, data.startIndex, data.numberOfCharacters, data.horizontalAlignment, - visualModel->mLines ); + visualModel->mLines, + alignmentOffset ); // Compare results. if( data.numberOfLines != visualModel->mLines.Count() ) diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp index 6f04d64..aa2ca31 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TextLabel.cpp @@ -450,6 +450,17 @@ int UtcDaliToolkitTextlabelAtlasRenderP(void) tet_result(TET_FAIL); } + try + { + // Render some text with the shared atlas backend + label.SetProperty( TextLabel::Property::RENDERING_BACKEND, Text::RENDERING_VECTOR_BASED ); + application.SendNotification(); + application.Render(); + } + catch( ... ) + { + tet_result(TET_FAIL); + } END_TEST; } diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 51684a4..fec052a 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -1092,7 +1092,9 @@ void TextEditor::RenderText( Text::Controller::UpdateTextType updateTextType ) { if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView(), DepthIndex::TEXT ); + renderableActor = mRenderer->Render( mController->GetView(), + mAlignmentOffset, + DepthIndex::TEXT ); } if( renderableActor != mRenderableActor ) @@ -1106,7 +1108,7 @@ void TextEditor::RenderText( Text::Controller::UpdateTextType updateTextType ) { const Vector2& scrollOffset = mController->GetTextModel()->GetScrollPosition(); - mRenderableActor.SetPosition( scrollOffset.x, scrollOffset.y ); + mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset, scrollOffset.y ); // Make sure the actors are parented correctly with/without clipping Actor self = mStencil ? mStencil : Self(); @@ -1398,6 +1400,7 @@ void TextEditor::OnIdleSignal() TextEditor::TextEditor() : Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ), mIdleCallback( NULL ), + mAlignmentOffset( 0.f ), mRenderingBackend( DEFAULT_RENDERING_BACKEND ), mHasBeenStaged( false ) { diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h index 123d0a4..2be7072 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.h @@ -263,6 +263,7 @@ private: // Data Actor mRenderableActor; CallbackBase* mIdleCallback; + float mAlignmentOffset; int mRenderingBackend; bool mHasBeenStaged:1; }; diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 7341032..44dc851 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -1270,7 +1270,9 @@ void TextField::RenderText( Text::Controller::UpdateTextType updateTextType ) { if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView(), DepthIndex::TEXT ); + renderableActor = mRenderer->Render( mController->GetView(), + mAlignmentOffset, + DepthIndex::TEXT ); } if( renderableActor != mRenderableActor ) @@ -1284,7 +1286,7 @@ void TextField::RenderText( Text::Controller::UpdateTextType updateTextType ) { const Vector2& scrollOffset = mController->GetTextModel()->GetScrollPosition(); - mRenderableActor.SetPosition( scrollOffset.x, scrollOffset.y ); + mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset, scrollOffset.y ); // Make sure the actors are parented correctly with/without clipping Actor self = mStencil ? mStencil : Self(); @@ -1536,7 +1538,6 @@ void TextField::EnableClipping() mStencil.SetParentOrigin( ParentOrigin::CENTER ); // Creates a background visual. Even if the color is transparent it updates the stencil. - // Property::Map backgroundMap; mStencil.SetProperty( Toolkit::Control::Property::BACKGROUND, Property::Map().Add( Toolkit::Visual::Property::TYPE, DevelVisual::COLOR ). Add( ColorVisual::Property::MIX_COLOR, Color::TRANSPARENT ) ); @@ -1597,6 +1598,7 @@ void TextField::OnIdleSignal() TextField::TextField() : Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ), mIdleCallback( NULL ), + mAlignmentOffset( 0.f ), mRenderingBackend( DEFAULT_RENDERING_BACKEND ), mExceedPolicy( Dali::Toolkit::TextField::EXCEED_POLICY_CLIP ), mHasBeenStaged( false ) diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.h b/dali-toolkit/internal/controls/text-controls/text-field-impl.h index a532449..796e57f 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.h +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.h @@ -274,6 +274,7 @@ private: // Data Actor mRenderableActor; CallbackBase* mIdleCallback; + float mAlignmentOffset; int mRenderingBackend; int mExceedPolicy; bool mHasBeenStaged:1; 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 0129388..e4a8b53 100644 --- a/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-label-impl.cpp @@ -726,9 +726,12 @@ void TextLabel::RenderText() Actor self = Self(); Actor renderableActor; + float alignmentOffset = 0.f; if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView(), DepthIndex::TEXT ); + renderableActor = mRenderer->Render( mController->GetView(), + alignmentOffset, + DepthIndex::TEXT ); } if( renderableActor != mRenderableActor ) @@ -738,7 +741,7 @@ void TextLabel::RenderText() if( renderableActor ) { const Vector2& scrollOffset = mController->GetTextModel()->GetScrollPosition(); - renderableActor.SetPosition( scrollOffset.x, scrollOffset.y ); + renderableActor.SetPosition( scrollOffset.x + alignmentOffset, scrollOffset.y ); self.Add( renderableActor ); } diff --git a/dali-toolkit/internal/text/layouts/layout-engine.cpp b/dali-toolkit/internal/text/layouts/layout-engine.cpp index 148ff58..17e9f58 100644 --- a/dali-toolkit/internal/text/layouts/layout-engine.cpp +++ b/dali-toolkit/internal/text/layouts/layout-engine.cpp @@ -1078,10 +1078,12 @@ struct Engine::Impl CharacterIndex startIndex, Length numberOfCharacters, HorizontalAlignment horizontalAlignment, - Vector& lines ) + Vector& lines, + float& alignmentOffset ) { const CharacterIndex lastCharacterPlusOne = startIndex + numberOfCharacters; + alignmentOffset = MAX_FLOAT; // Traverse all lines and align the glyphs. for( Vector::Iterator it = lines.Begin(), endIt = lines.End(); it != endIt; @@ -1106,6 +1108,9 @@ struct Engine::Impl CalculateHorizontalAlignment( size.width, horizontalAlignment, line ); + + // Updates the alignment offset. + alignmentOffset = std::min( alignmentOffset, line.alignmentOffset ); } } @@ -1267,13 +1272,15 @@ void Engine::Align( const Size& size, CharacterIndex startIndex, Length numberOfCharacters, Layout::HorizontalAlignment horizontalAlignment, - Vector& lines ) + Vector& lines, + float& alignmentOffset ) { mImpl->Align( size, startIndex, numberOfCharacters, horizontalAlignment, - lines ); + lines, + alignmentOffset ); } void Engine::SetDefaultLineSpacing( float lineSpacing ) diff --git a/dali-toolkit/internal/text/layouts/layout-engine.h b/dali-toolkit/internal/text/layouts/layout-engine.h index 71768ee..0d1f7d4 100644 --- a/dali-toolkit/internal/text/layouts/layout-engine.h +++ b/dali-toolkit/internal/text/layouts/layout-engine.h @@ -139,12 +139,14 @@ public: * @param[in] numberOfCharacters The number of characters. * @param[in] horizontalAlignment The horizontal alignment. * @param[in,out] lines The laid-out lines. + * @param[out] alignmentOffset The alignment offset. */ void Align( const Size& size, CharacterIndex startIndex, Length numberOfCharacters, Layout::HorizontalAlignment horizontalAlignment, - Vector& lines ); + Vector& lines, + float& alignmentOffset ); /** * @brief Sets the default line spacing. diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp index 5ba07ce..de437fb 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.cpp @@ -168,7 +168,8 @@ struct AtlasRenderer::Impl const Vector4& defaultColor, const Vector4* const colorsBuffer, const ColorIndex* const colorIndicesBuffer, - int depth ) + int depth, + float minLineOffset ) { AtlasManager::AtlasSlot slot; std::vector< MeshRecord > meshContainer; @@ -214,11 +215,11 @@ struct AtlasRenderer::Impl Vector< TextCacheEntry > newTextCache; const GlyphInfo* const glyphsBuffer = glyphs.Begin(); const Vector2* const positionsBuffer = positions.Begin(); + const Vector2 lineOffsetPosition( minLineOffset, 0.f ); for( uint32_t i = 0, glyphSize = glyphs.Size(); i < glyphSize; ++i ) { const GlyphInfo& glyph = *( glyphsBuffer + i ); - const bool underlineGlyph = underlineEnabled || IsGlyphUnderlined( i, underlineRuns ); thereAreUnderlinedGlyphs = thereAreUnderlinedGlyphs || underlineGlyph; @@ -325,7 +326,7 @@ struct AtlasRenderer::Impl } // Move the origin (0,0) of the mesh to the center of the actor - const Vector2 position = *( positionsBuffer + i ) - halfTextSize; + const Vector2 position = *( positionsBuffer + i ) - halfTextSize - lineOffsetPosition; // Generate mesh data for this quad, plugging in our supplied position AtlasManager::Mesh2D newMesh; @@ -735,7 +736,9 @@ Text::RendererPtr AtlasRenderer::New() return Text::RendererPtr( new AtlasRenderer() ); } -Actor AtlasRenderer::Render( Text::ViewInterface& view, int depth ) +Actor AtlasRenderer::Render( Text::ViewInterface& view, + float& alignmentOffset, + int depth ) { DALI_LOG_INFO( gLogFilter, Debug::General, "Text::AtlasRenderer::Render()\n" ); @@ -753,6 +756,7 @@ Actor AtlasRenderer::Render( Text::ViewInterface& view, int depth ) numberOfGlyphs = view.GetGlyphs( glyphs.Begin(), positions.Begin(), + alignmentOffset, 0u, numberOfGlyphs ); @@ -769,7 +773,8 @@ Actor AtlasRenderer::Render( Text::ViewInterface& view, int depth ) defaultColor, colorsBuffer, colorIndicesBuffer, - depth ); + depth, + alignmentOffset ); /* In the case where AddGlyphs does not create a renderable Actor for example when glyphs are all whitespace create a new Actor. */ /* This renderable actor is used to position the text, other "decorations" can rely on there always being an Actor regardless of it is whitespace or regular text. */ diff --git a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h index a6ae4b6..2872395 100644 --- a/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h +++ b/dali-toolkit/internal/text/rendering/atlas/text-atlas-renderer.h @@ -44,13 +44,11 @@ public: static RendererPtr New(); /** - * @brief Render the glyphs from a ViewInterface. - * - * @param[in] view The interface to a view. - * @param[in] depth The depth in the tree of the parent. - * @return The Renderable actor used to position the text. + * @copydoc Renderer::Render() */ - virtual Actor Render( ViewInterface& view, int depth ); + virtual Actor Render( ViewInterface& view, + float& alignmentOffset, + int depth ); protected: diff --git a/dali-toolkit/internal/text/rendering/text-renderer.h b/dali-toolkit/internal/text/rendering/text-renderer.h index cc7c8f4..06781b8 100644 --- a/dali-toolkit/internal/text/rendering/text-renderer.h +++ b/dali-toolkit/internal/text/rendering/text-renderer.h @@ -51,10 +51,13 @@ public: * @brief Render the glyphs from a ViewInterface. * * @param[in] view The interface to a view. + * @param[out] alignmentOffset Offset used to internally align the placement actor. * @param[in] depth The depth in the tree of the parent. * @return The Renderable actor used to position the text. */ - virtual Actor Render( ViewInterface& view, int depth ) = 0; + virtual Actor Render( ViewInterface& view, + float& alignmentOffset, + int depth ) = 0; protected: diff --git a/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.cpp b/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.cpp index b183524..7f15b72 100644 --- a/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.cpp +++ b/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.cpp @@ -181,7 +181,9 @@ Text::RendererPtr VectorBasedRenderer::New() return Text::RendererPtr( new VectorBasedRenderer() ); } -Actor VectorBasedRenderer::Render( Text::ViewInterface& view, int /*depth*/ ) +Actor VectorBasedRenderer::Render( Text::ViewInterface& view, + float& alignmentOffset, + int /*depth*/ ) { UnparentAndReset( mImpl->mActor ); @@ -205,8 +207,10 @@ Actor VectorBasedRenderer::Render( Text::ViewInterface& view, int /*depth*/ ) numberOfGlyphs = view.GetGlyphs( glyphs.Begin(), positions.Begin(), + alignmentOffset, 0u, numberOfGlyphs ); + glyphs.Resize( numberOfGlyphs ); positions.Resize( numberOfGlyphs ); @@ -218,7 +222,7 @@ Actor VectorBasedRenderer::Render( Text::ViewInterface& view, int /*depth*/ ) Vector< unsigned short > indices; const Vector2& controlSize = view.GetControlSize(); - float xOffset = controlSize.width * -0.5f; + float xOffset = -alignmentOffset + controlSize.width * -0.5f; float yOffset = controlSize.height * -0.5f; if( ! mImpl->mAtlas || diff --git a/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.h b/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.h index 0b7a44e..9d95655 100644 --- a/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.h +++ b/dali-toolkit/internal/text/rendering/vector-based/vector-based-renderer.h @@ -44,13 +44,11 @@ public: static RendererPtr New(); /** - * @brief Render the glyphs from a ViewInterface. - * - * @param[in] view The interface to a view. - * @param[in] depth The depth in the tree of the parent. - * @return The Renderable actor used to position the text. + * @copydoc Renderer::Render() */ - virtual Actor Render( ViewInterface& view, int depth ); + virtual Actor Render( ViewInterface& view, + float& alignmentOffset, + int depth ); protected: diff --git a/dali-toolkit/internal/text/text-controller-impl.cpp b/dali-toolkit/internal/text/text-controller-impl.cpp index 85f48ec..3a44c2f 100644 --- a/dali-toolkit/internal/text/text-controller-impl.cpp +++ b/dali-toolkit/internal/text/text-controller-impl.cpp @@ -2668,13 +2668,13 @@ void Controller::Impl::UpdateSelectionHandle( HandleType handleType, void Controller::Impl::ClampHorizontalScroll( const Vector2& layoutSize ) { - // Clamp between -space & 0. + // Clamp between -space & -alignment offset. if( layoutSize.width > mModel->mVisualModel->mControlSize.width ) { - const float space = ( layoutSize.width - mModel->mVisualModel->mControlSize.width ); + const float space = ( layoutSize.width - mModel->mVisualModel->mControlSize.width ) + mModel->mAlignmentOffset; mModel->mScrollPosition.x = ( mModel->mScrollPosition.x < -space ) ? -space : mModel->mScrollPosition.x; - mModel->mScrollPosition.x = ( mModel->mScrollPosition.x > 0.f ) ? 0.f : mModel->mScrollPosition.x; + mModel->mScrollPosition.x = ( mModel->mScrollPosition.x > -mModel->mAlignmentOffset ) ? -mModel->mAlignmentOffset : mModel->mScrollPosition.x; mEventData->mDecoratorUpdated = true; } diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 714a154..58def076 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -2674,11 +2674,14 @@ bool Controller::DoRelayout( const Size& size, // The laid-out lines. Vector& lines = mImpl->mModel->mVisualModel->mLines; + // Need to align with the control's size as the text may contain lines + // starting either with left to right text or right to left. mImpl->mLayoutEngine.Align( size, startIndex, requestedNumberOfCharacters, mImpl->mModel->mHorizontalAlignment, - lines ); + lines, + mImpl->mModel->mAlignmentOffset ); viewUpdated = true; } diff --git a/dali-toolkit/internal/text/text-model.h b/dali-toolkit/internal/text/text-model.h index 765dd31..e0dd85e 100644 --- a/dali-toolkit/internal/text/text-model.h +++ b/dali-toolkit/internal/text/text-model.h @@ -158,6 +158,7 @@ public: Vector2 mScrollPosition; ///< The text is offset by this position when scrolling. Layout::HorizontalAlignment mHorizontalAlignment; ///< The layout's horizontal alignment. Layout::VerticalAlignment mVerticalAlignment; ///< The layout's vertical alignment. + float mAlignmentOffset; ///< The alignment offset. bool mElideEnabled:1; ///< Whether the text's elide is enabled. }; diff --git a/dali-toolkit/internal/text/text-view-interface.h b/dali-toolkit/internal/text/text-view-interface.h index eaa191d..efa88ad 100644 --- a/dali-toolkit/internal/text/text-view-interface.h +++ b/dali-toolkit/internal/text/text-view-interface.h @@ -87,6 +87,7 @@ public: * * @param[out] glyphs Pointer to a buffer where the glyphs are copied. * @param[out] glyphPositions Pointer to a buffer where the glyph's positions are copied. + * @param[out] minLineOffset The minimum line offset. * @param[in] glyphIndex Index to the first glyph. * @param[in] numberOfGlyphs Number of glyphs to be copied. * @@ -94,6 +95,7 @@ public: */ virtual Length GetGlyphs( GlyphInfo* glyphs, Vector2* glyphPositions, + float& minLineOffset, GlyphIndex glyphIndex, Length numberOfGlyphs ) const = 0; diff --git a/dali-toolkit/internal/text/text-view.cpp b/dali-toolkit/internal/text/text-view.cpp index 7333428..88c9b42 100644 --- a/dali-toolkit/internal/text/text-view.cpp +++ b/dali-toolkit/internal/text/text-view.cpp @@ -94,6 +94,7 @@ Length View::GetNumberOfGlyphs() const Length View::GetGlyphs( GlyphInfo* glyphs, Vector2* glyphPositions, + float& minLineOffset, GlyphIndex glyphIndex, Length numberOfGlyphs ) const { @@ -157,6 +158,7 @@ Length View::GetGlyphs( GlyphInfo* glyphs, // Add the alignment offset to the glyph's position. + minLineOffset = line->alignmentOffset; float penY = line->ascender; for( Length index = 0u; index < numberOfLaidOutGlyphs; ++index ) { @@ -174,6 +176,7 @@ Length View::GetGlyphs( GlyphInfo* glyphs, if( lineIndex < numberOfLines ) { line = lineBuffer + lineIndex; + minLineOffset = std::min( minLineOffset, line->alignmentOffset ); lastGlyphIndexOfLine = line->glyphRun.glyphIndex + line->glyphRun.numberOfGlyphs - 1u; diff --git a/dali-toolkit/internal/text/text-view.h b/dali-toolkit/internal/text/text-view.h index 8ec9af1..d494d2b 100644 --- a/dali-toolkit/internal/text/text-view.h +++ b/dali-toolkit/internal/text/text-view.h @@ -75,6 +75,7 @@ public: */ virtual Length GetGlyphs( GlyphInfo* glyphs, Vector2* glyphPositions, + float& minLineOffset, GlyphIndex glyphIndex, Length numberOfGlyphs ) const; -- 2.7.4