コード例 #1
0
        // Render some text with the given font inside the given rectangle. Either center or left flush.
        // If the rectange doesn't intersect the clip rectangle, do nothing. Render a single line of text
        private void RenderSingleLineText(IRenderer renderer, int fontNumber, StringAlignment alignment, string s, float left, float top, float right, float bottom, RectangleF clipRect)
        {
            if (s == null || s == "")
                return;

            RectangleF rect = new RectangleF(left, top, right - left, bottom - top);
            if (!rect.IntersectsWith(clipRect))
                return;

            // Measure to make sure that the text fits.
            float width = renderer.MeasureSingleLineText(fonts[fontNumber], s, rect, alignment);

            if (width <= rect.Width) {
                // Text fits OK.
                renderer.DrawSingleLineText(fonts[fontNumber], s, rect, alignment);
            }
            else {
                // Text is too big with normal font. Scale it down.
                float scaleFactor = (rect.Width / width) * 0.95F;  // scale factor so that it fits.
                object scaledFont = renderer.CreateFont(fontDescs[fontNumber].Name, fontDescs[fontNumber].EmHeight * scaleFactor, fontDescs[fontNumber].Bold, fontDescs[fontNumber].Italic, fontAlignments[fontNumber]);
                renderer.DrawSingleLineText(scaledFont, s, rect, alignment);
                DisposeObject(scaledFont);
            }
        }