//------------------------------------------------------------- // // Copyright © Microsoft Corporation. All Rights Reserved. // //------------------------------------------------------------- // @owner=alexgor, deliant //================================================================= // File: GdiGraphics.cs // // Namespace: DataVisualization.Charting // // Classes: GdiGraphics // // Purpose: GdiGraphics class is chart GDI+ rendering engine. It // implements IChartRenderingEngine interface by mapping // its methods to the drawing methods of GDI+. This // rendering engine do not support animation. // // Reviwed: AG - Jul 15, 2003 // AG - Microsoft 14, 2007 // //=================================================================== #region Used namespaces using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Text; using System.Drawing.Imaging; using System.ComponentModel; using System.Collections; using System.Diagnostics.CodeAnalysis; #if Microsoft_CONTROL using System.Windows.Forms.DataVisualization.Charting.Utilities; using System.Windows.Forms.DataVisualization.Charting.Borders3D; #else //using System.Web.UI.DataVisualization.Charting.Utilities; //using System.Web.UI.DataVisualization.Charting.Borders3D; #endif #endregion #if Microsoft_CONTROL namespace System.Windows.Forms.DataVisualization.Charting #else namespace System.Web.UI.DataVisualization.Charting #endif { /// /// GdiGraphics class is chart GDI+ rendering engine. /// [SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Gdi")] internal class GdiGraphics : IChartRenderingEngine { #region Constructors /// /// Default constructor /// public GdiGraphics() { } #endregion // Constructor #region Drawing Methods /// /// Draws a line connecting two PointF structures. /// /// Pen object that determines the color, width, and style of the line. /// PointF structure that represents the first point to connect. /// PointF structure that represents the second point to connect. public void DrawLine( Pen pen, PointF pt1, PointF pt2 ) { _graphics.DrawLine( pen, pt1, pt2 ); } /// /// Draws a line connecting the two points specified by coordinate pairs. /// /// Pen object that determines the color, width, and style of the line. /// x-coordinate of the first point. /// y-coordinate of the first point. /// x-coordinate of the second point. /// y-coordinate of the second point. public void DrawLine( Pen pen, float x1, float y1, float x2, float y2 ) { _graphics.DrawLine( pen, x1, y1, x2, y2 ); } /// /// Draws the specified portion of the specified Image object at the specified location and with the specified size. /// /// Image object to draw. /// Rectangle structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. /// x-coordinate of the upper-left corner of the portion of the source image to draw. /// y-coordinate of the upper-left corner of the portion of the source image to draw. /// Width of the portion of the source image to draw. /// Height of the portion of the source image to draw. /// Member of the GraphicsUnit enumeration that specifies the units of measure used to determine the source rectangle. /// ImageAttributes object that specifies recoloring and gamma information for the image object. public void DrawImage( System.Drawing.Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr ) { _graphics.DrawImage( image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttr ); } /// /// Draws an ellipse defined by a bounding rectangle specified by /// a pair of coordinates: a height, and a width. /// /// Pen object that determines the color, width, and style of the ellipse. /// x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. /// y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse. /// Width of the bounding rectangle that defines the ellipse. /// Height of the bounding rectangle that defines the ellipse. public void DrawEllipse( Pen pen, float x, float y, float width, float height ) { _graphics.DrawEllipse( pen, x, y, width, height ); } /// /// Draws a cardinal spline through a specified array of PointF structures /// using a specified tension. The drawing begins offset from /// the beginning of the array. /// /// Pen object that determines the color, width, and height of the curve. /// Array of PointF structures that define the spline. /// Offset from the first element in the array of the points parameter to the starting point in the curve. /// Number of segments after the starting point to include in the curve. /// Value greater than or equal to 0.0F that specifies the tension of the curve. public void DrawCurve( Pen pen, PointF[] points, int offset, int numberOfSegments, float tension ) { _graphics.DrawCurve( pen, points, offset, numberOfSegments, tension ); } /// /// Draws a rectangle specified by a coordinate pair: a width, and a height. /// /// Pen object that determines the color, width, and style of the rectangle. /// x-coordinate of the upper-left corner of the rectangle to draw. /// y-coordinate of the upper-left corner of the rectangle to draw. /// Width of the rectangle to draw. /// Height of the rectangle to draw. public void DrawRectangle( Pen pen, int x, int y, int width, int height ) { _graphics.DrawRectangle( pen, x, y, width, height ); } /// /// Draws a polygon defined by an array of PointF structures. /// /// Pen object that determines the color, width, and style of the polygon. /// Array of PointF structures that represent the vertices of the polygon. public void DrawPolygon( Pen pen, PointF[] points ) { _graphics.DrawPolygon( pen, points ); } /// /// Draws the specified text string in the specified rectangle with the specified Brush and Font objects using the formatting properties of the specified StringFormat object. /// /// String to draw. /// Font object that defines the text format of the string. /// Brush object that determines the color and texture of the drawn text. /// RectangleF structure that specifies the location of the drawn text. /// StringFormat object that specifies formatting properties, such as line spacing and alignment, that are applied to the drawn text. public void DrawString( string s, Font font, Brush brush, RectangleF layoutRectangle, StringFormat format ) { _graphics.DrawString( s, font, brush, layoutRectangle, format ); } /// /// Draws the specified text string at the specified location with the specified Brush and Font objects using the formatting properties of the specified StringFormat object. /// /// String to draw. /// Font object that defines the text format of the string. /// Brush object that determines the color and texture of the drawn text. /// PointF structure that specifies the upper-left corner of the drawn text. /// StringFormat object that specifies formatting properties, such as line spacing and alignment, that are applied to the drawn text. public void DrawString( string s, Font font, Brush brush, PointF point, StringFormat format ) { _graphics.DrawString( s, font, brush, point, format ); } /// /// Draws the specified portion of the specified Image object at the specified location and with the specified size. /// /// Image object to draw. /// Rectangle structure that specifies the location and size of the drawn image. The image is scaled to fit the rectangle. /// x-coordinate of the upper-left corner of the portion of the source image to draw. /// y-coordinate of the upper-left corner of the portion of the source image to draw. /// Width of the portion of the source image to draw. /// Height of the portion of the source image to draw. /// Member of the GraphicsUnit enumeration that specifies the units of measure used to determine the source rectangle. /// ImageAttributes object that specifies recoloring and gamma information for the image object. public void DrawImage( System.Drawing.Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs ) { _graphics.DrawImage( image, destRect, srcX, srcY, srcWidth, srcHeight, srcUnit, imageAttrs ); } /// /// Draws a rectangle specified by a coordinate pair: a width, and a height. /// /// A Pen object that determines the color, width, and style of the rectangle. /// The x-coordinate of the upper-left corner of the rectangle to draw. /// The y-coordinate of the upper-left corner of the rectangle to draw. /// The width of the rectangle to draw. /// The height of the rectangle to draw. public void DrawRectangle( Pen pen, float x, float y, float width, float height ) { _graphics.DrawRectangle( pen, x, y, width, height ); } /// /// Draws a GraphicsPath object. /// /// Pen object that determines the color, width, and style of the path. /// GraphicsPath object to draw. public void DrawPath( Pen pen, GraphicsPath path ) { _graphics.DrawPath( pen, path ); } /// /// Draws a pie shape defined by an ellipse specified by a coordinate pair: a width, a height and two radial lines. /// /// Pen object that determines the color, width, and style of the pie shape. /// x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie shape comes. /// y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie shape comes. /// Width of the bounding rectangle that defines the ellipse from which the pie shape comes. /// Height of the bounding rectangle that defines the ellipse from which the pie shape comes. /// Angle measured in degrees clockwise from the x-axis to the first side of the pie shape. /// Angle measured in degrees clockwise from the startAngle parameter to the second side of the pie shape. public void DrawPie( Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle ) { _graphics.DrawPie( pen, x, y, width, height, startAngle, sweepAngle ); } /// /// Draws an arc representing a portion of an ellipse specified by a pair of coordinates: a width, and a height. /// /// Pen object that determines the color, width, and style of the arc. /// x-coordinate of the upper-left corner of the rectangle that defines the ellipse. /// y-coordinate of the upper-left corner of the rectangle that defines the ellipse. /// Width of the rectangle that defines the ellipse. /// Height of the rectangle that defines the ellipse. /// Angle in degrees measured clockwise from the x-axis to the starting point of the arc. /// Angle in degrees measured clockwise from the startAngle parameter to ending point of the arc. public void DrawArc( Pen pen, float x, float y, float width, float height, float startAngle, float sweepAngle ) { _graphics.DrawArc( pen, x, y, width, height, startAngle, sweepAngle ); } /// /// Draws the specified Image object at the specified location and with the specified size. /// /// Image object to draw. /// RectangleF structure that specifies the location and size of the drawn image. public void DrawImage( System.Drawing.Image image, RectangleF rect ) { _graphics.DrawImage( image, rect ); } /// /// Draws an ellipse defined by a bounding RectangleF. /// /// Pen object that determines the color, width, and style of the ellipse. /// RectangleF structure that defines the boundaries of the ellipse. public void DrawEllipse( Pen pen, RectangleF rect ) { _graphics.DrawEllipse( pen, rect ); } /// /// Draws a series of line segments that connect an array of PointF structures. /// /// Pen object that determines the color, width, and style of the line segments. /// Array of PointF structures that represent the points to connect. public void DrawLines( Pen pen, PointF[] points ) { _graphics.DrawLines( pen, points ); } #endregion // Drawing Methods #region Filling Methods /// /// Fills the interior of an ellipse defined by a bounding rectangle /// specified by a RectangleF structure. /// /// Brush object that determines the characteristics of the fill. /// RectangleF structure that represents the bounding rectangle that defines the ellipse. public void FillEllipse( Brush brush, RectangleF rect ) { _graphics.FillEllipse( brush, rect ); } /// /// Fills the interior of a GraphicsPath object. /// /// Brush object that determines the characteristics of the fill. /// GraphicsPath object that represents the path to fill. public void FillPath( Brush brush, GraphicsPath path ) { _graphics.FillPath( brush, path ); } /// /// Fills the interior of a Region object. /// /// Brush object that determines the characteristics of the fill. /// Region object that represents the area to fill. public void FillRegion( Brush brush, Region region ) { _graphics.FillRegion( brush, region ); } /// /// Fills the interior of a rectangle specified by a RectangleF structure. /// /// Brush object that determines the characteristics of the fill. /// RectangleF structure that represents the rectangle to fill. public void FillRectangle( Brush brush, RectangleF rect ) { _graphics.FillRectangle( brush, rect ); } /// /// Fills the interior of a rectangle specified by a pair of coordinates, a width, and a height. /// /// Brush object that determines the characteristics of the fill. /// x-coordinate of the upper-left corner of the rectangle to fill. /// y-coordinate of the upper-left corner of the rectangle to fill. /// Width of the rectangle to fill. /// Height of the rectangle to fill. public void FillRectangle( Brush brush, float x, float y, float width, float height ) { _graphics.FillRectangle( brush, x, y, width, height ); } /// /// Fills the interior of a polygon defined by an array of points specified by PointF structures . /// /// Brush object that determines the characteristics of the fill. /// Array of PointF structures that represent the vertices of the polygon to fill. public void FillPolygon( Brush brush, PointF[] points ) { _graphics.FillPolygon( brush, points ); } /// /// Fills the interior of a pie section defined by an ellipse /// specified by a pair of coordinates, a width, and a height /// and two radial lines. /// /// Brush object that determines the characteristics of the fill. /// x-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes. /// y-coordinate of the upper-left corner of the bounding rectangle that defines the ellipse from which the pie section comes. /// Width of the bounding rectangle that defines the ellipse from which the pie section comes. /// Height of the bounding rectangle that defines the ellipse from which the pie section comes. /// Angle in degrees measured clockwise from the x-axis to the first side of the pie section. /// Angle in degrees measured clockwise from the startAngle parameter to the second side of the pie section. public void FillPie( Brush brush, float x, float y, float width, float height, float startAngle, float sweepAngle ) { _graphics.FillPie( brush, x, y, width, height, startAngle, sweepAngle ); } #endregion // Filling Methods #region Other Methods /// /// Measures the specified string when drawn with the specified /// Font object and formatted with the specified StringFormat object. /// /// String to measure. /// Font object defines the text format of the string. /// SizeF structure that specifies the maximum layout area for the text. /// StringFormat object that represents formatting information, such as line spacing, for the string. /// This method returns a SizeF structure that represents the size, in pixels, of the string specified in the text parameter as drawn with the font parameter and the stringFormat parameter. public SizeF MeasureString( string text, Font font, SizeF layoutArea, StringFormat stringFormat ) { return _graphics.MeasureString( text, font, layoutArea, stringFormat ); } /// /// Measures the specified string when drawn with the specified /// Font object and formatted with the specified StringFormat object. /// /// String to measure. /// Font object defines the text format of the string. /// This method returns a SizeF structure that represents the size, in pixels, of the string specified in the text parameter as drawn with the font parameter and the stringFormat parameter. public SizeF MeasureString( string text, Font font ) { return _graphics.MeasureString( text, font ); } /// /// Saves the current state of this Graphics object and identifies the saved state with a GraphicsState object. /// /// This method returns a GraphicsState object that represents the saved state of this Graphics object. public GraphicsState Save() { return _graphics.Save(); } /// /// Restores the state of this Graphics object to the state represented by a GraphicsState object. /// /// GraphicsState object that represents the state to which to restore this Graphics object. public void Restore( GraphicsState gstate ) { _graphics.Restore( gstate ); } /// /// Resets the clip region of this Graphics object to an infinite region. /// public void ResetClip() { _graphics.ResetClip(); } /// /// Sets the clipping region of this Graphics object to the rectangle specified by a RectangleF structure. /// /// RectangleF structure that represents the new clip region. public void SetClip( RectangleF rect ) { _graphics.SetClip( rect ); } /// /// Sets the clipping region of this Graphics object to the result of the /// specified operation combining the current clip region and the /// specified GraphicsPath object. /// /// GraphicsPath object to combine. /// Member of the CombineMode enumeration that specifies the combining operation to use. public void SetClip( GraphicsPath path, CombineMode combineMode ) { _graphics.SetClip( path, combineMode ); } /// /// Prepends the specified translation to the transformation matrix of this Graphics object. /// /// x component of the translation. /// y component of the translation. public void TranslateTransform( float dx, float dy ) { _graphics.TranslateTransform( dx, dy ); } /// /// This method starts Selection mode /// /// The location of the referenced object, expressed as a URI reference. /// Title which could be used for tooltips. public void BeginSelection( string hRef, string title ) { // Not supported for GDI+ } /// /// This method stops Selection mode /// public void EndSelection( ) { // Not supported for GDI+ } #endregion // Other Methods #region Properties /// /// Gets or sets the world transformation for this Graphics object. /// public Matrix Transform { get { return _graphics.Transform; } set { _graphics.Transform = value; } } /// /// Gets or sets the rendering quality for this Graphics object. /// public SmoothingMode SmoothingMode { get { return _graphics.SmoothingMode; } set { _graphics.SmoothingMode = value; } } /// /// Gets or sets the rendering mode for text associated with this Graphics object. /// public TextRenderingHint TextRenderingHint { get { return _graphics.TextRenderingHint; } set { _graphics.TextRenderingHint = value; } } /// /// Gets or sets a Region object that limits the drawing region of this Graphics object. /// public Region Clip { get { return _graphics.Clip; } set { _graphics.Clip = value; } } /// /// Gets a value indicating whether the clipping region of this Graphics object is empty. /// public bool IsClipEmpty { get { return _graphics.IsClipEmpty; } } /// /// Reference to the Graphics object /// public Graphics Graphics { get { return _graphics; } set { _graphics = value; } } #endregion // Properties #region Fields /// /// Graphics object /// Graphics _graphics = null; #endregion // Fields } }