X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Flayouts%2Flayout-engine.cpp;h=8d9f8f521ab92a4a8c1b426ddced2896109fefab;hp=4182acd28ed83f80919446987a29f77dc3f84588;hb=aeef40d5dd70c7d878c7664986913ef2c6675a03;hpb=9598e692217c5fb541d862a3957b3efd5fd5171d diff --git a/dali-toolkit/internal/text/layouts/layout-engine.cpp b/dali-toolkit/internal/text/layouts/layout-engine.cpp index 4182acd..8d9f8f5 100644 --- a/dali-toolkit/internal/text/layouts/layout-engine.cpp +++ b/dali-toolkit/internal/text/layouts/layout-engine.cpp @@ -25,6 +25,7 @@ // INTERNAL INCLUDES #include +#include #include #include @@ -47,6 +48,7 @@ namespace const float MAX_FLOAT = std::numeric_limits::max(); const bool RTL = true; const float CURSOR_WIDTH = 1.f; +const float LINE_SPACING= 0.f; } //namespace @@ -104,6 +106,7 @@ struct LayoutEngine::Impl mHorizontalAlignment( LayoutEngine::HORIZONTAL_ALIGN_BEGIN ), mVerticalAlignment( LayoutEngine::VERTICAL_ALIGN_TOP ), mCursorWidth( CURSOR_WIDTH ), + mDefaultLineSpacing( LINE_SPACING ), mEllipsisEnabled( false ) { } @@ -464,34 +467,6 @@ struct LayoutEngine::Impl DALI_LOG_INFO( gLogFilter, Debug::Verbose, "<--GetLineLayoutForBox\n" ); } - /** - * @brief Calculates the vertical offset to add to the new laid-out glyphs. - * - * @pre @p lineIndex must be between 0 and the number of lines (both inclusive). - * - * @param[in] lines The previously laid-out lines. - * @param[in] lineIndex Index to the line where the new laid-out lines are inserted. - * - * @return The vertical offset of the lines starting from the beginning to the line @p lineIndex. - */ - float SetParagraphOffset( const Vector& lines, - LineIndex lineIndex ) - { - float offset = 0.f; - - for( Vector::ConstIterator it = lines.Begin(), - endIt = lines.Begin() + lineIndex; - it != endIt; - ++it ) - { - const LineRun& line = *it; - - offset += line.ascender + -line.descender; - } - - return offset; - } - void SetGlyphPositions( const GlyphInfo* const glyphsBuffer, Length numberOfGlyphs, Vector2* glyphPositionsBuffer ) @@ -807,6 +782,7 @@ struct LayoutEngine::Impl { // Need to add a new line with no characters but with height to increase the layoutSize.height LineRun newLine; + Initialize( newLine ); lines.PushBack( newLine ); UpdateTextLayout( layoutParameters, @@ -851,7 +827,7 @@ struct LayoutEngine::Impl Vector newLines; // Estimate the number of lines. - Length linesCapacity = layoutParameters.estimatedNumberOfLines; + Length linesCapacity = std::max( 1u, layoutParameters.estimatedNumberOfLines ); Length numberOfLines = 0u; if( updateCurrentBuffer ) @@ -870,8 +846,8 @@ struct LayoutEngine::Impl linesBuffer = lines.Begin(); } - float penY = SetParagraphOffset( lines, - layoutParameters.startLineIndex ); + float penY = CalculateLineOffset( lines, + layoutParameters.startLineIndex ); for( GlyphIndex index = layoutParameters.startGlyphIndex; index < lastGlyphPlusOne; ) { @@ -1193,10 +1169,26 @@ struct LayoutEngine::Impl } } + void Initialize( LineRun& line ) + { + line.glyphRun.glyphIndex = 0u; + line.glyphRun.numberOfGlyphs = 0u; + line.characterRun.characterIndex = 0u; + line.characterRun.numberOfCharacters = 0u; + line.width = 0.f; + line.ascender = 0.f; + line.descender = 0.f; + line.extraLength = 0.f; + line.alignmentOffset = 0.f; + line.direction = !RTL; + line.ellipsis = false; + } + LayoutEngine::Layout mLayout; LayoutEngine::HorizontalAlignment mHorizontalAlignment; LayoutEngine::VerticalAlignment mVerticalAlignment; float mCursorWidth; + float mDefaultLineSpacing; IntrusivePtr mMetrics; @@ -1226,11 +1218,13 @@ void LayoutEngine::SetLayout( Layout layout ) LayoutEngine::Layout LayoutEngine::GetLayout() const { + DALI_LOG_INFO( gLogFilter, Debug::Verbose, "GetLayout[%d]\n", mImpl->mLayout); return mImpl->mLayout; } void LayoutEngine::SetTextEllipsisEnabled( bool enabled ) { + DALI_LOG_INFO( gLogFilter, Debug::General, "-->LayoutEngine::SetTextEllipsisEnabled[%s]\n", (enabled)?"true":"false" ); mImpl->mEllipsisEnabled = enabled; } @@ -1302,6 +1296,16 @@ void LayoutEngine::Align( const Size& size, lines ); } +void LayoutEngine::SetDefaultLineSpacing( float lineSpacing ) +{ + mImpl->mDefaultLineSpacing = lineSpacing; +} + +float LayoutEngine::GetDefaultLineSpacing() const +{ + return mImpl->mDefaultLineSpacing; +} + } // namespace Text } // namespace Toolkit