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,
// 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 ) );
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<LineRun> 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.
{
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;
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