+ // Calculate the size of the visual that can fit the text
+ Size layoutSize = mController->GetTextModel()->GetLayoutSize();
+ layoutSize.x = contentSize.x;
+
+ const Vector2& shadowOffset = mController->GetTextModel()->GetShadowOffset();
+ if ( shadowOffset.y > Math::MACHINE_EPSILON_1 )
+ {
+ layoutSize.y += shadowOffset.y;
+ }
+
+ float outlineWidth = mController->GetTextModel()->GetOutlineWidth();
+ layoutSize.y += outlineWidth * 2.0f;
+ layoutSize.y = std::min( layoutSize.y, contentSize.y );
+
+ // Calculate the offset for vertical alignment only, as the layout engine will do the horizontal alignment.
+ Vector2 alignmentOffset;
+ alignmentOffset.x = 0.0f;
+ alignmentOffset.y = ( contentSize.y - layoutSize.y ) * VERTICAL_ALIGNMENT_TABLE[mController->GetVerticalAlignment()];
+