/*
- * Copyright (c) 2015 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2017 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
return Vector2::ZERO;
}
+const Vector2& View::GetLayoutSize() const
+{
+ if ( mImpl->mVisualModel )
+ {
+ return mImpl->mVisualModel->GetLayoutSize();
+ }
+
+ return Vector2::ZERO;
+}
+
Length View::GetNumberOfGlyphs() const
{
if( mImpl->mVisualModel )
Length View::GetGlyphs( GlyphInfo* glyphs,
Vector2* glyphPositions,
+ float& minLineOffset,
GlyphIndex glyphIndex,
Length numberOfGlyphs ) const
{
GlyphIndex lastGlyphIndexOfLine = line->glyphRun.glyphIndex + line->glyphRun.numberOfGlyphs - 1u;
// Add the alignment offset to the glyph's position.
+
+ minLineOffset = line->alignmentOffset;
+ float penY = line->ascender;
for( Length index = 0u; index < numberOfLaidOutGlyphs; ++index )
{
- ( *( glyphPositions + index ) ).x += line->alignmentOffset;
+ Vector2& position = *( glyphPositions + index );
+ position.x += line->alignmentOffset;
+ position.y += penY;
if( lastGlyphIndexOfLine == index )
{
+ penY += -line->descender;
+
// Get the next line.
++lineIndex;
if( lineIndex < numberOfLines )
{
line = lineBuffer + lineIndex;
+ minLineOffset = std::min( minLineOffset, line->alignmentOffset );
+
lastGlyphIndexOfLine = line->glyphRun.glyphIndex + line->glyphRun.numberOfGlyphs - 1u;
+
+ penY += line->ascender;
}
}
}
if( lastLine.ellipsis )
{
+ if( ( 1u == numberOfLines ) &&
+ ( lastLine.ascender - lastLine.descender > mImpl->mVisualModel->mControlSize.height ) )
+ {
+ // Get the first glyph which is going to be replaced and the ellipsis glyph.
+ GlyphInfo& glyphInfo = *glyphs;
+ const GlyphInfo& ellipsisGlyph = mImpl->mFontClient.GetEllipsisGlyph( mImpl->mFontClient.GetPointSize( glyphInfo.fontId ) );
+
+ // Change the 'x' and 'y' position of the ellipsis glyph.
+ Vector2& position = *glyphPositions;
+ position.x = ellipsisGlyph.xBearing;
+ position.y = mImpl->mVisualModel->mControlSize.height - ellipsisGlyph.yBearing;
+
+ // Replace the glyph by the ellipsis glyph.
+ glyphInfo = ellipsisGlyph;
+
+ return 1u;
+ }
+
// firstPenX, penY and firstPenSet are used to position the ellipsis glyph if needed.
float firstPenX = 0.f; // Used if rtl text is elided.
float penY = 0.f;
return numberOfLaidOutGlyphs;
}
+const Vector4* const View::GetColors() const
+{
+ if( mImpl->mVisualModel )
+ {
+ return mImpl->mVisualModel->mColors.Begin();
+ }
+
+ return NULL;
+}
+
+const ColorIndex* const View::GetColorIndices() const
+{
+ if( mImpl->mVisualModel )
+ {
+ return mImpl->mVisualModel->mColorIndices.Begin();
+ }
+
+ return NULL;
+}
+
const Vector4& View::GetTextColor() const
{
if( mImpl->mVisualModel )
{
if( mImpl->mVisualModel )
{
- return mImpl->mVisualModel->mUnderlineRuns.Count();
+ return mImpl->mVisualModel->GetNumberOfUnderlineRuns();
}
return 0u;
}
}
+const Vector4& View::GetOutlineColor() const
+{
+ if( mImpl->mVisualModel )
+ {
+ return mImpl->mVisualModel->GetOutlineColor();
+ }
+ return Vector4::ZERO;
+}
+
+unsigned int View::GetOutlineWidth() const
+{
+ if( mImpl->mVisualModel )
+ {
+ return mImpl->mVisualModel->GetOutlineWidth();
+ }
+ return 0u;
+}
+
} // namespace Text
} // namespace Toolkit