+Length ViewModel::GetNumberOfUnderlineRuns() const
+{
+ return mModel->GetNumberOfUnderlineRuns();
+}
+
+void ViewModel::GetUnderlineRuns(UnderlinedGlyphRun* underlineRuns, UnderlineRunIndex index, Length numberOfRuns) const
+{
+ mModel->GetUnderlineRuns(underlineRuns, index, numberOfRuns);
+}
+
+const Vector4& ViewModel::GetOutlineColor() const
+{
+ return mModel->GetOutlineColor();
+}
+
+uint16_t ViewModel::GetOutlineWidth() const
+{
+ return mModel->GetOutlineWidth();
+}
+
+const Vector4& ViewModel::GetBackgroundColor() const
+{
+ return mModel->GetBackgroundColor();
+}
+
+bool ViewModel::IsBackgroundEnabled() const
+{
+ return mModel->IsBackgroundEnabled();
+}
+
+bool ViewModel::IsMarkupProcessorEnabled() const
+{
+ return mModel->IsMarkupProcessorEnabled();
+}
+
+const GlyphInfo* ViewModel::GetHyphens() const
+{
+ return mModel->GetHyphens();
+}
+
+const Length* ViewModel::GetHyphenIndices() const
+{
+ return mModel->GetHyphenIndices();
+}
+
+Length ViewModel::GetHyphensCount() const
+{
+ return mModel->GetHyphensCount();
+}
+
+const float ViewModel::GetCharacterSpacing() const
+{
+ return mModel->GetCharacterSpacing();
+}
+
+const Character* ViewModel::GetTextBuffer() const
+{
+ return mModel->GetTextBuffer();
+}
+
+const Vector<CharacterIndex>& ViewModel::GetGlyphsToCharacters() const
+{
+ return mModel->GetGlyphsToCharacters();
+}
+
+void ViewModel::ElideGlyphs()
+{
+ mIsTextElided = false;
+ mStartIndexOfElidedGlyphs = mFirstMiddleIndexOfElidedGlyphs = mSecondMiddleIndexOfElidedGlyphs = 0;
+ mEndIndexOfElidedGlyphs = mModel->GetNumberOfGlyphs() - 1u;
+
+ auto ellipsisPosition = GetEllipsisPosition();
+ auto characterSpacing = GetCharacterSpacing();
+ const Character* textBuffer = GetTextBuffer();
+ const Vector<CharacterIndex>& glyphToCharacterMap = GetGlyphsToCharacters();
+ const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin();
+ float calculatedAdvance = 0.f;
+
+ if(IsTextElideEnabled())