# IGDI-
Delphi friendly interface based GDI+ library.

The free open source library allows quick and easy implementations of complex GDI+ applications, in a natural Delphi-friendly code.

For example, to make this:

![IGDI+ Demo](http://www.mitov.com/IGDIPlusDemo.jpg)

... you write code like this:

```delphi
procedure TForm1.FormPaint(Sender: TObject);
begin
  var AGraphics := TIGPGraphics.Create( Canvas );
  AGraphics.SmoothingMode := TIGPSmoothingMode.AntiAlias;
  AGraphics.TextRenderingHint := TIGPTextRenderingHint.AntiAlias;

  var ALeftTopCorner := TPointF.Create( 20, 20 );
  var AFont := TIGPFont.Create( 'Microsoft Sans Serif', 40, [ fsBold ] );
  var ARect := AGraphics.GetStringBoundingBoxF( 'Welcome to IGDI+', AFont, ALeftTopCorner );
  var ARect1 := ARect.Inflate( 10, 10 );

  // Draw a fancy rounded rectangle.
  AGraphics.DrawRoundRectangleF(
              TIGPPen.Create( TIGPLinearGradientBrush.Create( ARect1.Inflate( 2, 2 ), aclRed, aclBlue, TIGPLinearGradientMode.Vertical ), 4 ),
              TIGPPathGradientBrush.Create(
                  TIGPGraphicsPath.Create().AddRoundRectangleF( ARect1, TIGPSizeF.Create( 20, 20 ) )
                   )
                .SetInterpolationColorArrays( [ aclGreen, aclCyan, aclYellow ], [ 0, 0.3, 1 ] )
                .SetCenterPointF( TPointF.Create( 250, 50 ))
                .SetFocusScales( 0.87, 0.2 ),
              ARect1, TIGPSizeF.Create( 20, 20 ) );

  // Draw a text with semitransparent shadow.
  AGraphics.DrawStringF( 'Welcome to IGDI+',
                        AFont,
                        TPointF.Create( 23, 23 ),
                        TIGPSolidBrush.Create( MakeARGBColor( 50, aclBlack )) )

           .DrawStringF( 'Welcome to IGDI+',
                        AFont,
                        ALeftTopCorner,
                        TIGPLinearGradientBrush.Create( ARect, aclRed, aclBlue, TIGPLinearGradientMode.ForwardDiagonal ));


  // Draw a closed curve.
  AGraphics.DrawClosedCurveF( TIGPPen.Create( aclRed, 3 ), TIGPSolidBrush.Create( aclBlue ),
              [
                TPointF.Create( 60,  160 ),
                TPointF.Create( 150, 180 ),
                TPointF.Create( 200, 140 ),
                TPointF.Create( 180, 220 ),
                TPointF.Create( 120, 200 ),
                TPointF.Create( 80,  260 )
              ] );

  // Draw a semitransparent star.
  var APath := TIGPGraphicsPath.Create();
  APath.AddLinesF(
    [
      TPointF.Create( 75, 0 ),
      TPointF.Create( 100, 50 ),
      TPointF.Create( 150, 50 ),
      TPointF.Create( 112, 75 ),
      TPointF.Create( 150, 150 ),
      TPointF.Create( 75, 100 ),
      TPointF.Create( 0, 150 ),
      TPointF.Create( 37, 75 ),
      TPointF.Create( 0, 50 ),
      TPointF.Create( 50, 50 )
    ] );

  AGraphics.TranslateTransform( 420, 30 )
           .FillPath(
              TIGPPathGradientBrush.Create( APath )
                .SetCenterColor( MakeColor( 200, 255, 0, 0))
                .SetSurroundColors(
                  [
                    MakeColor(80, 0, 0, 0),
                    MakeColor(80, 0, 255, 0),
                    MakeColor(80, 0, 0, 255),
                    MakeColor(80, 255, 255, 255),
                    MakeColor(80, 0, 0, 0),
                    MakeColor(80, 0, 255, 0),
                    MakeColor(80, 0, 0, 255),
                    MakeColor(80, 255, 255, 255),
                    MakeColor(80, 0, 0, 0),
                    MakeColor(80, 0, 255, 0)
                  ] ),

              APath );

  // Draw rotated ellipse.
  AGraphics.ResetTransform()
           .TranslateTransform( 300, 160 )
           .RotateTransform( 30 )
           .DrawEllipseF(
              TIGPPen.Create( aclRed, 3 ),
              TIGPLinearGradientBrush.Create( TPointF.Create( 0, 0 ), TPointF.Create( 20, 20 ), aclYellow, aclGreen )
              .SetWrapMode( TIGPWrapMode.TileFlipX ),
              0, 0, 200, 80 );

end;
```
