X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-view.cpp;h=4bee1c284acfe9598edfd87103881035146d1f5e;hb=5b3cf0e6742934674bdf62bbe15af00e39eae566;hp=47a2028f1f8c075d6f32de60bcb93426baaf8618;hpb=b52e6007b9352062d4d974ada89e01223c1284a1;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/text-view.cpp b/dali-toolkit/internal/text/text-view.cpp index 47a2028..4bee1c2 100644 --- a/dali-toolkit/internal/text/text-view.cpp +++ b/dali-toolkit/internal/text/text-view.cpp @@ -55,6 +55,33 @@ void View::SetVisualModel( VisualModelPtr visualModel ) mImpl->mVisualModel = visualModel; } +const Vector2& View::GetControlSize() const +{ + if ( mImpl->mVisualModel ) + { + return mImpl->mVisualModel->mControlSize; + } + + return Vector2::ZERO; +} + +Length View::GetNumberOfGlyphs() const +{ + if( mImpl->mVisualModel ) + { + const VisualModel& model = *mImpl->mVisualModel; + + const Length glyphCount = model.mGlyphs.Count(); + const Length positionCount = model.mGlyphPositions.Count(); + + DALI_ASSERT_DEBUG( positionCount <= glyphCount && "Invalid glyph positions in Model" ); + + return (positionCount < glyphCount) ? positionCount : glyphCount; + } + + return 0; +} + Length View::GetGlyphs( GlyphInfo* glyphs, Vector2* glyphPositions, GlyphIndex glyphIndex, @@ -67,7 +94,7 @@ Length View::GetGlyphs( GlyphInfo* glyphs, // If ellipsis is enabled, the number of glyphs the layout engine has laid out may be less than 'numberOfGlyphs'. // Check the last laid out line to know if the layout engine elided some text. - const Length numberOfLines = mImpl->mVisualModel->GetNumberOfLines(); + const Length numberOfLines = mImpl->mVisualModel->mLines.Count(); if( numberOfLines > 0u ) { const LineRun& lastLine = *( mImpl->mVisualModel->mLines.Begin() + ( numberOfLines - 1u ) ); @@ -92,6 +119,48 @@ Length View::GetGlyphs( GlyphInfo* glyphs, glyphIndex, numberOfLaidOutGlyphs ); + // Get the lines for the given range of glyphs. + // The lines contain the alignment offset which needs to be added to the glyph's position. + LineIndex firstLine = 0u; + Length numberOfLines = 0u; + mImpl->mVisualModel->GetNumberOfLines( glyphIndex, + numberOfLaidOutGlyphs, + firstLine, + numberOfLines ); + + Vector lines; + lines.Resize( numberOfLines ); + LineRun* lineBuffer = lines.Begin(); + + mImpl->mVisualModel->GetLinesOfGlyphRange( lineBuffer, + glyphIndex, + numberOfLaidOutGlyphs ); + + // Get the first line for the given glyph range. + LineIndex lineIndex = firstLine; + LineRun* line = lineBuffer + lineIndex; + + // Index of the last glyph of the line. + GlyphIndex lastGlyphIndexOfLine = line->glyphIndex + line->numberOfGlyphs - 1u; + + // Add the alignment offset to the glyph's position. + for( Length index = 0u; index < numberOfLaidOutGlyphs; ++index ) + { + ( *( glyphPositions + index ) ).x += line->alignmentOffset; + + if( lastGlyphIndexOfLine == index ) + { + // Get the next line. + ++lineIndex; + + if( lineIndex < numberOfLines ) + { + line = lineBuffer + lineIndex; + lastGlyphIndexOfLine = line->glyphIndex + line->numberOfGlyphs - 1u; + } + } + } + if( 1u == numberOfLaidOutGlyphs ) { // not a point try to do ellipsis with only one laid out character. @@ -151,7 +220,7 @@ Length View::GetGlyphs( GlyphInfo* glyphs, { GlyphInfo& glyphInfo = *( glyphs + index ); Vector2& position = *( glyphPositions + index ); - position.x -= glyphInfo.xBearing; + position.x -= ( 0.f > glyphInfo.xBearing ) ? glyphInfo.xBearing : 0.f; // Replace the glyph by the ellipsis glyph. glyphInfo = ellipsisGlyph; @@ -196,80 +265,58 @@ Length View::GetGlyphs( GlyphInfo* glyphs, const Vector4& View::GetTextColor() const { - if ( mImpl->mVisualModel ) + if( mImpl->mVisualModel ) { - VisualModel& model = *mImpl->mVisualModel; - return model.GetTextColor(); + return mImpl->mVisualModel->GetTextColor(); } return Vector4::ZERO; } const Vector2& View::GetShadowOffset() const { - if ( mImpl->mVisualModel ) + if( mImpl->mVisualModel ) { - VisualModel& model = *mImpl->mVisualModel; - return model.GetShadowOffset(); + return mImpl->mVisualModel->GetShadowOffset(); } return Vector2::ZERO; } const Vector4& View::GetShadowColor() const { - if ( mImpl->mVisualModel ) + if( mImpl->mVisualModel ) { - VisualModel& model = *mImpl->mVisualModel; - return model.GetShadowColor(); + return mImpl->mVisualModel->GetShadowColor(); } return Vector4::ZERO; } const Vector4& View::GetUnderlineColor() const { - if ( mImpl->mVisualModel ) + if( mImpl->mVisualModel ) { - VisualModel& model = *mImpl->mVisualModel; - return model.GetUnderlineColor(); + return mImpl->mVisualModel->GetUnderlineColor(); } return Vector4::ZERO; } bool View::IsUnderlineEnabled() const { - if ( mImpl->mVisualModel ) + if( mImpl->mVisualModel ) { - VisualModel& model = *mImpl->mVisualModel; - return model.IsUnderlineEnabled(); + return mImpl->mVisualModel->IsUnderlineEnabled(); } return false; } float View::GetUnderlineHeight() const { - if ( mImpl->mVisualModel ) + if( mImpl->mVisualModel ) { - VisualModel& model = *mImpl->mVisualModel; - return model.GetUnderlineHeight(); + return mImpl->mVisualModel->GetUnderlineHeight(); } return 0.0f; } -Length View::GetNumberOfGlyphs() const -{ - if( mImpl->mVisualModel ) - { - 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; -} } // namespace Text