// 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); } }