// Draws string (string builder) at specified position // normalizedPosition -> X and Y are within interval <0..1> // scale -> scale for original texture, it's not in pixel/texels, but multiply of original size. E.g. 1 means unchanged size, 2 means double size. Scale is uniform, preserves aspect ratio. // RETURN: Method returns rectangle where was string drawn in normalized coordinates public static MyRectangle2D DrawStringCentered(MyGuiFont font, StringBuilder sb, Vector2 normalizedCoord, float scale, Color color, MyGuiDrawAlignEnum drawAlign) { Vector2 screenCoord = GetScreenCoordinateFromNormalizedCoordinate(normalizedCoord); // Fix the scale for screen resolution float fixedScale = scale * m_safeScreenScale; // IMPORTANT: We don't draw shadows under text here because shadows are already contained in font texture! int lineCount = 0; foreach (var line in sb.Split('\n')) { line.TrimTrailingWhitespace(); var lineSizeInPixelsScaled = font.MeasureString(line, fixedScale); var lineCoord = GetAlignedCoordinate(screenCoord + new Vector2(0, lineCount * font.LineHeight * fixedScale), lineSizeInPixelsScaled, drawAlign); font.DrawString(lineCoord, color, line, fixedScale); lineCount++; } // IMPORTANT: MeasureString is weird method, because for example it returns height 56 pixels, but DrawString actualy draws 33 pixels tall characters // And SpriteFont.LineSpacing gives me 53 pixels... so am quite sure MeasureString returns height of line and not of characters, but then why is it less than LineSpacing??? Vector2 sizeInPixelsScaled = font.MeasureString(sb, fixedScale); screenCoord = GetAlignedCoordinate(screenCoord, sizeInPixelsScaled, drawAlign); return new MyRectangle2D(GetNormalizedCoordinateFromScreenCoordinate(screenCoord), GetNormalizedSizeFromScreenSize(sizeInPixelsScaled)); }
// Draws string (string builder) at specified position // normalizedPosition -> X and Y are within interval <0..1> // scale -> scale for original texture, it's not in pixel/texels, but multiply of original size. E.g. 1 means unchanged size, 2 means double size. Scale is uniform, preserves aspect ratio. // RETURN: Method returns rectangle where was string drawn in normalized coordinates public static MyRectangle2D DrawString(MyGuiFont font, StringBuilder sb, Vector2 normalizedCoord, float scale, Color color, MyGuiDrawAlignEnum drawAlign, bool fullscreen = false) { Vector2 screenCoord = GetScreenCoordinateFromNormalizedCoordinate(normalizedCoord, fullscreen); // Fix the scale for screen resolution float fixedScale = scale * m_safeScreenScale; // IMPORTANT: MeasureString is weird method, because for example it returns height 56 pixels, but DrawString actualy draws 33 pixels tall characters // And SpriteFont.LineSpacing gives me 53 pixels... so am quite sure MeasureString returns height of line and not of characters, but then why is it less than LineSpacing??? Vector2 sizeInPixelsScaled = font.MeasureString(sb, fixedScale); screenCoord = GetAlignedCoordinate(screenCoord, sizeInPixelsScaled, drawAlign); // IMPORTANT: We don't draw shadows under text here because shadows are already contained in font texture! //MinerWars.AppCode.App.MyMinerGame.GraphicsDeviceManager.GraphicsDevice. //font.DrawString(screenCoord, /*color*/ Color.White, sb, fixedScale); font.DrawString(screenCoord, color, sb, fixedScale); return new MyRectangle2D(GetNormalizedCoordinateFromScreenCoordinate(screenCoord), GetNormalizedSizeFromScreenSize(sizeInPixelsScaled)); }