Beispiel #1
0
        //  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));
        }
Beispiel #2
0
        //  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));
        }