Mega Code Archive

 
Categories / C# / 2D Graphics
 

Tall in the Center

using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms;     class FontMenuForm: Form {      protected string strText = "Tall in the Center";      protected Font font = new Font("Times New Roman", 24);          public static void Main()      {           Application.Run(new FontMenuForm());      }      public FontMenuForm()      {           ResizeRedraw = true;      }      protected void DoPage(Graphics grfx, Color clr, int cx, int cy)      {           GraphicsPath path = new GraphicsPath();           float fFontSize = PointsToPageUnits(grfx, font);               path.AddString(strText, font.FontFamily, (int) font.Style,                          fFontSize, new PointF(0, 0), new StringFormat());               RectangleF rectf = path.GetBounds();               path.Transform(new Matrix(1, 0, 0, 1,                                      -(rectf.Left + rectf.Right) / 2,                                     -(rectf.Top + rectf.Bottom) / 2));           rectf = path.GetBounds();           PointF[] aptf = path.PathPoints;               for (int i = 0; i < aptf.Length; i++)                aptf[i].Y *= 2 * (rectf.Width - Math.Abs(aptf[i].X)) /                                                                   rectf.Width;            path = new GraphicsPath(aptf, path.PathTypes);               grfx.TranslateTransform(cx / 2, cy / 2);           grfx.FillPath(new SolidBrush(clr), path);                                                   }      public float GetAscent(Graphics grfx, Font font)      {           return font.GetHeight(grfx) *                      font.FontFamily.GetCellAscent(font.Style) /                          font.FontFamily.GetLineSpacing(font.Style);      }      public float GetDescent(Graphics grfx, Font font)      {           return font.GetHeight(grfx) *                      font.FontFamily.GetCellDescent(font.Style) /                          font.FontFamily.GetLineSpacing(font.Style);      }      public float PointsToPageUnits(Graphics grfx, Font font)      {           float fFontSize;               if (grfx.PageUnit == GraphicsUnit.Display)                fFontSize = 100 * font.SizeInPoints / 72;           else                fFontSize = grfx.DpiX * font.SizeInPoints / 72;               return fFontSize;      } }