From: Victor Cebollada Date: Mon, 6 Jul 2015 08:46:11 +0000 (+0100) Subject: Fix for cursor position when there is no text and no place holder text. X-Git-Tag: dali_1.0.48~12^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=commitdiff_plain;h=df2e95e1470c73ed44bfa2cfe1c65d68bcb4e5c9 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 --- 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();