From df2e95e1470c73ed44bfa2cfe1c65d68bcb4e5c9 Mon Sep 17 00:00:00 2001 From: Victor Cebollada Date: Mon, 6 Jul 2015 09:46:11 +0100 Subject: [PATCH] Fix for cursor position when there is no text and no place holder text. * When there are no characters, the line height of the default font is used to align the text. Change-Id: I3f7506bac0fe4afd6ccd3fb88e80e449d1e73af7 Signed-off-by: Victor Cebollada --- .../internal/text/text-controller-impl.cpp | 38 ++++++++++++---------- dali-toolkit/internal/text/text-controller-impl.h | 5 +++ dali-toolkit/internal/text/text-controller.cpp | 7 +++- 3 files changed, 32 insertions(+), 18 deletions(-) diff --git a/dali-toolkit/internal/text/text-controller-impl.cpp b/dali-toolkit/internal/text/text-controller-impl.cpp index f743c25..dd6ea63 100644 --- a/dali-toolkit/internal/text/text-controller-impl.cpp +++ b/dali-toolkit/internal/text/text-controller-impl.cpp @@ -441,6 +441,25 @@ void Controller::Impl::GetDefaultFonts( Vector& fonts, Length numberOfC } } +float Controller::Impl::GetDefaultFontLineHeight() +{ + FontId defaultFontId = 0u; + if( NULL == mFontDefaults ) + { + defaultFontId = mFontClient.GetFontId( EMPTY_STRING, + EMPTY_STRING ); + } + else + { + defaultFontId = mFontDefaults->GetFontId( mFontClient ); + } + + Text::FontMetrics fontMetrics; + mFontClient.GetFontMetrics( defaultFontId, fontMetrics ); + + return( fontMetrics.ascender - fontMetrics.descender ); +} + void Controller::Impl::OnCursorKeyEvent( const Event& event ) { if( NULL == mEventData ) @@ -1338,23 +1357,8 @@ void Controller::Impl::GetCursorPosition( CharacterIndex logical, if( isFirstPosition && isLastPosition ) { - // There is zero characters. Get the default font. - - FontId defaultFontId = 0u; - if( NULL == mFontDefaults ) - { - defaultFontId = mFontClient.GetFontId( EMPTY_STRING, - EMPTY_STRING ); - } - else - { - defaultFontId = mFontDefaults->GetFontId( mFontClient ); - } - - Text::FontMetrics fontMetrics; - mFontClient.GetFontMetrics( defaultFontId, fontMetrics ); - - cursorInfo.lineHeight = fontMetrics.ascender - fontMetrics.descender; + // There is zero characters. Get the default font's line height. + cursorInfo.lineHeight = GetDefaultFontLineHeight(); cursorInfo.primaryCursorHeight = cursorInfo.lineHeight; cursorInfo.primaryPosition.x = 1.f; diff --git a/dali-toolkit/internal/text/text-controller-impl.h b/dali-toolkit/internal/text/text-controller-impl.h index 434a1e0..426cc60 100644 --- a/dali-toolkit/internal/text/text-controller-impl.h +++ b/dali-toolkit/internal/text/text-controller-impl.h @@ -330,6 +330,11 @@ struct Controller::Impl */ void GetDefaultFonts( Dali::Vector& fonts, Length numberOfCharacters ); + /** + * @brief Retrieve the line height of the default font. + */ + float GetDefaultFontLineHeight(); + void OnCursorKeyEvent( const Event& event ); void OnTapEvent( const Event& event ); diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 3b9c725..68555b7 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -1016,7 +1016,12 @@ void Controller::CalculateTextAlignment( const Size& size ) // Get the direction of the first character. const CharacterDirection firstParagraphDirection = mImpl->mLogicalModel->GetCharacterDirection( 0u ); - const Size& actualSize = mImpl->mVisualModel->GetActualSize(); + Size actualSize = mImpl->mVisualModel->GetActualSize(); + if( fabsf( actualSize.height ) < Math::MACHINE_EPSILON_1000 ) + { + // Get the line height of the default font. + actualSize.height = mImpl->GetDefaultFontLineHeight(); + } // If the first paragraph is right to left swap ALIGN_BEGIN and ALIGN_END; LayoutEngine::HorizontalAlignment horizontalAlignment = mImpl->mLayoutEngine.GetHorizontalAlignment(); -- 2.7.4