Beispiel #1
0
        /// <summary>
        /// When size is null size is set to the dimensions of str
        /// </summary>
        public static void DrawStringAligned(this SpriteBatch spriteBatch,
                                             SpriteFont font,
                                             string str,
                                             Vector2 position,
                                             Color color,
                                             TextAlign align,
                                             TextGravity gravity = TextGravity.Top,
                                             Vector2?bounds      = null,
                                             float layerDepth    = 0
                                             )
        {
            if (str == null)
            {
                return;
            }

            var totalSize   = font.MeasureString(str);
            var totalOffset = new Vector2(GetAlignOffset((bounds ?? totalSize).X, align), 0);

            var lines = str.Split('\n');

            for (int i = 0; i < lines.Length; i++)
            {
                (float width, _) = font.MeasureString(lines[i]);

                var offsetX = -GetAlignOffset(width, align);
                var offsetY = GetGravityOffset((bounds ?? Vector2.Zero).Y, gravity) - GetGravityOffset(totalSize.Y, gravity);

                var lineOffset = new Vector2(offsetX, font.LineSpacing * i + offsetY);

                spriteBatch.DrawString(font, lines[i], position + lineOffset + totalOffset, color, 0, Vector2.Zero, 1, SpriteEffects.None, layerDepth);
            }
        }
Beispiel #2
0
 #pragma warning disable hidde_complaining_about_duplicate_method
 private static float GetGravityOffset(float height, TextGravity gravity)
 {
     return(gravity switch
     {
         TextGravity.Center => height / 2,
         TextGravity.Top => 0,
         TextGravity.Bottom => height,
         _ => throw new InvalidOperationException($"No implementation for \"{gravity}\""),
     });
Beispiel #3
0
 public TransparentEntry()
 {
     TextGravityAlignment = TextGravity.START_TOP;
 }