title: Flip the GraphicsPath that draws the text/string
body: <p>I have this method in my Text Class and I can't seem to flip the whole text.<br>
  I am using a Matrix to transform the <code>GraphicsPath</code> which is used to draw the string.</p>
  
  <p>Here's the code since I used @Jimi's answer:</p>
  
  <pre><code>    public LayerClass DrawString(LayerClass.Type _text, string text, RectangleF rect, Font _fontStyle, Brush brush, float angle, PaintEventArgs e)
      {
          using (StringFormat string_format = new StringFormat())
          {
              SizeF stringSize = e.Graphics.MeasureString(text, _fontStyle);
              rect.Location = new PointF(Shape.center.X - (rect.Width / 2), Shape.center.Y - (rect.Height / 2));
              GraphicsContainer gc = e.Graphics.BeginContainer();
              e.Graphics.SmoothingMode = SmoothingMode.AntiAlias;
              e.Graphics.CompositingQuality = CompositingQuality.HighQuality;
              //e.Graphics.DrawRectangle(Pens.Red, Rectangle.Round(rect));
  
              RectangleF r = new RectangleF(rect.Location, rect.Size);
              GraphicsPath path = new GraphicsPath();
              if (text == "" || text == " ")
                  path.Dispose(); //Disposes the path to prevent OutOfMemoryExcetption
              else
              {
                  path.AddString(text, _fontStyle.FontFamily, Convert.ToInt32(_fontStyle.Style), _fontStyle.Height, new Point(0,0), string_format);
                  RectangleF text_rectf = path.GetBounds();
                  PointF[] target_pts = {
                              new PointF(r.Left, r.Top),
                              new PointF(r.Right, r.Top),
                              new PointF(r.Left, r.Bottom)};
                  //e.Graphics.DrawRectangle(Pens.Red, Rectangle.Round(r));
                  using (Matrix m = new Matrix(text_rectf, target_pts)) 
                  using (Matrix rotate = new Matrix())
                  using (Matrix FlipXMatrix = new Matrix(-1, 0, 0, 1, 0, 0)) 
                  using (Matrix FlipYMatrix = new Matrix(1, 0, 0, -1, 0, 0))
                  using (Matrix TransformMatrix = new Matrix())
                  {
                      TransformMatrix.Multiply(m);
                      m.RotateAt(angle, new PointF(0 + (stringSize.Width / 2), +(r.Height * 2)));
                      rotate.RotateAt(angle, new PointF(r.X, r.Y));
                      TransformMatrix.Multiply(rotate);
                      if (flipped)
                      {
                          TransformMatrix.Multiply(FlipXMatrix);
                      }
                      path.Transform(TransformMatrix);
  
                      if (flipY)
                      {
                          TransformMatrix.Multiply(FlipYMatrix);
                          path.Transform(TransformMatrix);
                      }
  
                      //Checks if the user wants the text filled or outlined
                      if (!isOutlined)
                          e.Graphics.FillPath(Brushes.Red, path);
                      else
                          e.Graphics.DrawPath(Pens.Red, path);
                  } 
              }
          e.Graphics.EndContainer(gc);
          }
          this._Text = text;
          this._TextRect = rect;
          this.brush = brush;
          this._Angle = angle;
          return new LayerClass(_text, this, text, rect);
      }
  </code></pre>
  
  <blockquote>
    <p>Now the problem is, it goes out the center of the picturebox.</p>
  </blockquote>