2008-03-08 08:52:38 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// Name: graphics.h
|
2008-03-10 11:24:38 -04:00
|
|
|
// Purpose: interface of wxGraphicsPath
|
2008-03-08 08:52:38 -05:00
|
|
|
// Author: wxWidgets team
|
|
|
|
// RCS-ID: $Id$
|
|
|
|
// Licence: wxWindows license
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
/**
|
|
|
|
@class wxGraphicsPath
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
A wxGraphicsPath is a native representation of an geometric path. The contents
|
2008-03-08 09:43:31 -05:00
|
|
|
are specific an private to the respective renderer. Instances are ref counted and can
|
2008-03-08 08:52:38 -05:00
|
|
|
therefore be assigned as usual. The only way to get a valid instance is via a
|
|
|
|
CreatePath call on the graphics context or the renderer instance.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGraphicsPath : public wxGraphicsObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
//@{
|
|
|
|
/**
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void AddArc(wxDouble x, wxDouble y, wxDouble r,
|
|
|
|
wxDouble startAngle,
|
|
|
|
wxDouble endAngle, bool clockwise);
|
2008-03-08 09:43:31 -05:00
|
|
|
void AddArc(const wxPoint2DDouble& c, wxDouble r,
|
|
|
|
wxDouble startAngle,
|
|
|
|
wxDouble endAngle,
|
|
|
|
bool clockwise);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Appends a an arc to two tangents connecting (current) to (x1,y1) and (x1,y1) to
|
|
|
|
(x2,y2), also a straight line from (current) to (x1,y1).
|
|
|
|
*/
|
|
|
|
void AddArcToPoint(wxDouble x1, wxDouble y1, wxDouble x2,
|
|
|
|
wxDouble y2,
|
|
|
|
wxDouble r);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Appends a circle around (x,y) with radius r as a new closed subpath.
|
|
|
|
*/
|
|
|
|
void AddCircle(wxDouble x, wxDouble y, wxDouble r);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void AddCurveToPoint(wxDouble cx1, wxDouble cy1, wxDouble cx2,
|
|
|
|
wxDouble cy2,
|
|
|
|
wxDouble x,
|
|
|
|
wxDouble y);
|
2008-03-08 09:43:31 -05:00
|
|
|
void AddCurveToPoint(const wxPoint2DDouble& c1,
|
|
|
|
const wxPoint2DDouble& c2,
|
|
|
|
const wxPoint2DDouble& e);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Appends an ellipse fitting into the passed in rectangle.
|
|
|
|
*/
|
|
|
|
void AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void AddLineToPoint(wxDouble x, wxDouble y);
|
2008-03-08 09:43:31 -05:00
|
|
|
void AddLineToPoint(const wxPoint2DDouble& p);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Adds another path.
|
|
|
|
*/
|
|
|
|
void AddPath(const wxGraphicsPath& path);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Adds a quadratic Bezier curve from the current point, using a control point and
|
|
|
|
an end point.
|
|
|
|
*/
|
|
|
|
void AddQuadCurveToPoint(wxDouble cx, wxDouble cy, wxDouble x,
|
|
|
|
wxDouble y);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Appends a rectangle as a new closed subpath.
|
|
|
|
*/
|
|
|
|
void AddRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Appends a rounded rectangle as a new closed subpath.
|
|
|
|
*/
|
|
|
|
void AddRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
|
|
|
|
wxDouble h,
|
|
|
|
wxDouble radius);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Closes the current sub-path.
|
|
|
|
*/
|
|
|
|
void CloseSubpath();
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Returns @true if the point is within the path.
|
|
|
|
*/
|
|
|
|
bool Contains(const wxPoint2DDouble& c,
|
2008-03-09 12:24:26 -04:00
|
|
|
int fillStyle = wxODDEVEN_RULE) const;
|
|
|
|
const bool Contains(wxDouble x, wxDouble y,
|
|
|
|
int fillStyle = wxODDEVEN_RULE) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Gets the bounding box enclosing all points (possibly including control points).
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
wxRect2DDouble GetBox() const;
|
|
|
|
const void GetBox(wxDouble* x, wxDouble* y, wxDouble* w,
|
|
|
|
wxDouble* h) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Gets the last point of the current path, (0,0) if not yet set.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
void GetCurrentPoint(wxDouble* x, wxDouble* y) const;
|
|
|
|
const wxPoint2DDouble GetCurrentPoint() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the native path (CGPathRef for Core Graphics, Path pointer for GDIPlus
|
|
|
|
and a cairo_path_t pointer for cairo).
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
void* GetNativePath() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Begins a new subpath at (x,y)
|
|
|
|
*/
|
|
|
|
void MoveToPoint(wxDouble x, wxDouble y);
|
2008-03-08 09:43:31 -05:00
|
|
|
void MoveToPoint(const wxPoint2DDouble& p);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Transforms each point of this path by the matrix.
|
|
|
|
*/
|
|
|
|
void Transform(const wxGraphicsMatrix& matrix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Gives back the native path returned by GetNativePath() because there might be
|
2008-03-08 09:43:31 -05:00
|
|
|
some deallocations necessary (eg on cairo the native path returned by
|
2008-03-08 08:52:38 -05:00
|
|
|
GetNativePath is newly allocated each time).
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
void UnGetNativePath(void* p) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsObject
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
This class is the superclass of native graphics objects like pens etc. It
|
|
|
|
allows reference counting. Not instantiated by user code.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
@see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
class wxGraphicsObject : public wxObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
|
|
|
Returns the renderer that was used to create this instance, or @NULL if it has
|
|
|
|
not been initialized yet
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
wxGraphicsRenderer* GetRenderer() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Is this object valid (@false) or still empty (@true)?
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
bool IsNull() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsContext
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
A wxGraphicsContext instance is the object that is drawn upon. It is created by
|
2008-04-28 16:39:57 -04:00
|
|
|
a renderer using wxGraphicsRenderer::CreateContext(). This can be either directly
|
|
|
|
using a renderer instance, or indirectly using the static convenience Create()
|
|
|
|
functions of wxGraphicsContext that always delegate the task to the default renderer.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-04-25 09:32:23 -04:00
|
|
|
@code
|
|
|
|
void MyCanvas::OnPaint(wxPaintEvent &event)
|
|
|
|
{
|
|
|
|
// Create paint DC
|
|
|
|
wxPaintDC dc(this);
|
|
|
|
|
|
|
|
// Create graphics context from it
|
2008-04-29 06:12:41 -04:00
|
|
|
wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
|
2008-04-25 09:32:23 -04:00
|
|
|
|
2008-04-25 14:50:27 -04:00
|
|
|
if (gc)
|
|
|
|
{
|
2008-04-28 16:39:57 -04:00
|
|
|
// make a path that contains a circle and some lines
|
2008-04-25 14:50:27 -04:00
|
|
|
gc->SetPen( *wxRED_PEN );
|
|
|
|
wxGraphicsPath path = gc->CreatePath();
|
|
|
|
path.AddCircle( 50.0, 50.0, 50.0 );
|
|
|
|
path.MoveToPoint(0.0, 50.0);
|
|
|
|
path.AddLineToPoint(100.0, 50.0);
|
|
|
|
path.MoveToPoint(50.0, 0.0);
|
|
|
|
path.AddLineToPoint(50.0, 100.0 );
|
|
|
|
path.CloseSubpath();
|
|
|
|
path.AddRectangle(25.0, 25.0, 50.0, 50.0);
|
2008-04-25 09:32:23 -04:00
|
|
|
|
2008-04-29 06:12:41 -04:00
|
|
|
gc->StrokePath(path);
|
2008-04-25 14:50:27 -04:00
|
|
|
|
2008-04-29 06:12:41 -04:00
|
|
|
delete gc;
|
2008-04-25 14:50:27 -04:00
|
|
|
}
|
|
|
|
}
|
2008-04-25 09:32:23 -04:00
|
|
|
@endcode
|
|
|
|
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
@see wxGraphicsRenderer:: CreateContext
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
class wxGraphicsContext : public wxGraphicsObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
2008-04-28 16:39:57 -04:00
|
|
|
Creates a wxGraphicsContext from a wxWindow.
|
|
|
|
|
|
|
|
@see wxGraphicsRenderer::CreateContext()
|
|
|
|
*/
|
|
|
|
static wxGraphicsContext* Create( wxWindow* window ) ;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a wxWindowDC
|
|
|
|
|
|
|
|
@see wxGraphicsRenderer::CreateContext()
|
|
|
|
*/
|
|
|
|
static wxGraphicsContext* Create( const wxWindowDC& dc) ;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a wxMemoryDC
|
|
|
|
|
|
|
|
@see wxGraphicsRenderer::CreateContext()
|
|
|
|
*/
|
|
|
|
static wxGraphicsContext * Create( const wxMemoryDC& dc) ;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a wxPrinterDC
|
|
|
|
|
|
|
|
@see wxGraphicsRenderer::CreateContext()
|
|
|
|
*/
|
|
|
|
static wxGraphicsContext * Create( const wxPrinterDC& dc) ;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Clips drawings to the region
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void Clip(const wxRegion& region);
|
2008-04-28 16:39:57 -04:00
|
|
|
|
|
|
|
/**
|
|
|
|
Clips drawings to the rectangle.
|
|
|
|
*/
|
2008-03-08 09:43:31 -05:00
|
|
|
void Clip(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Concatenates the passed in transform with the current transform of this context
|
|
|
|
*/
|
|
|
|
void ConcatTransform(const wxGraphicsMatrix& matrix);
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native brush from a wxBrush.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
wxGraphicsBrush CreateBrush(const wxBrush& brush) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native graphics font from a wxFont and a text colour.
|
|
|
|
*/
|
|
|
|
wxGraphicsFont CreateFont(const wxFont& font,
|
2008-03-09 12:24:26 -04:00
|
|
|
const wxColour& col = wxBLACK) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a native context. This native context must be
|
2008-03-08 09:43:31 -05:00
|
|
|
eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a
|
2008-03-08 08:52:38 -05:00
|
|
|
cairo_t pointer for cairo.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-08 09:43:31 -05:00
|
|
|
Creates a wxGraphicsContext from a native window.
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-09 08:33:59 -04:00
|
|
|
@see wxGraphicsRenderer:: CreateContextFromNativeContext
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
wxGraphicsContext* CreateFromNative(void* context);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
2008-03-09 08:33:59 -04:00
|
|
|
@see wxGraphicsRenderer:: CreateContextFromNativeWindow
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
wxGraphicsContext* CreateFromNativeWindow(void* window);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native brush, having a linear gradient, starting at (x1,y1) with
|
|
|
|
color c1 to (x2,y2) with color c2
|
|
|
|
*/
|
|
|
|
wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
|
2008-03-08 09:43:31 -05:00
|
|
|
wxDouble y1,
|
|
|
|
wxDouble x2,
|
|
|
|
wxDouble y2,
|
|
|
|
const wxColouramp;c1,
|
2008-03-09 12:24:26 -04:00
|
|
|
const wxColouramp;c2) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native affine transformation matrix from the passed in values. The
|
|
|
|
defaults result in an identity matrix.
|
|
|
|
*/
|
|
|
|
wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
|
|
|
|
wxDouble c = 0.0,
|
|
|
|
wxDouble d = 1.0,
|
|
|
|
wxDouble tx = 0.0,
|
2008-03-09 12:24:26 -04:00
|
|
|
wxDouble ty = 0.0) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native graphics path which is initially empty.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
wxGraphicsPath CreatePath() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native pen from a wxPen.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
wxGraphicsPen CreatePen(const wxPen& pen) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native brush, having a radial gradient originating at (xo,yc) with
|
|
|
|
color oColour and ends on a circle around (xc,yc) with radius r and color cColour
|
|
|
|
*/
|
|
|
|
wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo,
|
2008-03-08 09:43:31 -05:00
|
|
|
wxDouble yo,
|
|
|
|
wxDouble xc,
|
|
|
|
wxDouble yc,
|
|
|
|
wxDouble radius,
|
|
|
|
const wxColour& oColor,
|
2008-03-09 12:24:26 -04:00
|
|
|
const wxColour& cColor) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Draws the bitmap. In case of a mono bitmap, this is treated as a mask and the
|
|
|
|
current brushed is used for filling.
|
|
|
|
*/
|
|
|
|
void DrawBitmap(const wxBitmap& bmp, wxDouble x, wxDouble y,
|
|
|
|
wxDouble w, wxDouble h);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Draws an ellipse.
|
|
|
|
*/
|
|
|
|
void DrawEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Draws the icon.
|
|
|
|
*/
|
|
|
|
void DrawIcon(const wxIcon& icon, wxDouble x, wxDouble y,
|
|
|
|
wxDouble w, wxDouble h);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Draws a polygon.
|
|
|
|
*/
|
|
|
|
void DrawLines(size_t n, const wxPoint2DDouble* points,
|
|
|
|
int fillStyle = wxODDEVEN_RULE);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Draws the path by first filling and then stroking.
|
|
|
|
*/
|
|
|
|
void DrawPath(const wxGraphicsPath& path,
|
|
|
|
int fillStyle = wxODDEVEN_RULE);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Draws a rectangle.
|
|
|
|
*/
|
|
|
|
void DrawRectangle(wxDouble x, wxDouble y, wxDouble w,
|
|
|
|
wxDouble h);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Draws a rounded rectangle.
|
|
|
|
*/
|
|
|
|
void DrawRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
|
|
|
|
wxDouble h,
|
|
|
|
wxDouble radius);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Draws a text at the defined position, at the given angle.
|
|
|
|
*/
|
|
|
|
void DrawText(const wxString& str, wxDouble x, wxDouble y,
|
|
|
|
wxDouble angle);
|
2008-03-08 09:43:31 -05:00
|
|
|
void DrawText(const wxString& str, wxDouble x, wxDouble y);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Fills the path with the current brush.
|
|
|
|
*/
|
|
|
|
void FillPath(const wxGraphicsPath& path,
|
|
|
|
int fillStyle = wxODDEVEN_RULE);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the native context (CGContextRef for Core Graphics, Graphics pointer
|
|
|
|
for GDIPlus and cairo_t pointer for cairo).
|
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
void* GetNativeContext();
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
2008-03-09 08:33:59 -04:00
|
|
|
Fills the @a widths array with the widths from the beginning of
|
|
|
|
@a text to the corresponding character of @e text.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void GetPartialTextExtents(const wxString& text,
|
2008-03-09 12:24:26 -04:00
|
|
|
wxArrayDouble& widths) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Gets the dimensions of the string using the currently selected font.
|
|
|
|
@e string is the text string to measure, @e w and @e h are
|
2008-03-09 08:33:59 -04:00
|
|
|
the total width and height respectively, @a descent is the
|
2008-03-08 08:52:38 -05:00
|
|
|
dimension from the baseline of the font to the bottom of the
|
2008-03-09 08:33:59 -04:00
|
|
|
descender, and @a externalLeading is any extra vertical space added
|
2008-03-08 08:52:38 -05:00
|
|
|
to the font by the font designer (usually is zero).
|
|
|
|
*/
|
|
|
|
void GetTextExtent(const wxString& text, wxDouble* width,
|
|
|
|
wxDouble* height,
|
|
|
|
wxDouble* descent,
|
2008-03-09 12:24:26 -04:00
|
|
|
wxDouble* externalLeading) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Gets the current transformation matrix of this context.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
wxGraphicsMatrix GetTransform() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Resets the clipping to original shape.
|
|
|
|
*/
|
|
|
|
void ResetClip();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Rotates the current transformation matrix (radians),
|
|
|
|
*/
|
|
|
|
void Rotate(wxDouble angle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Scales the current transformation matrix.
|
|
|
|
*/
|
|
|
|
void Scale(wxDouble xScale, wxDouble yScale);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Sets the brush for filling paths.
|
|
|
|
*/
|
|
|
|
void SetBrush(const wxBrush& brush);
|
2008-03-08 09:43:31 -05:00
|
|
|
void SetBrush(const wxGraphicsBrush& brush);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Sets the font for drawing text.
|
|
|
|
*/
|
|
|
|
void SetFont(const wxFont& font, const wxColour& colour);
|
2008-03-08 09:43:31 -05:00
|
|
|
void SetFont(const wxGraphicsFont& font);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Sets the pen used for stroking.
|
|
|
|
*/
|
|
|
|
void SetPen(const wxGraphicsPen& pen);
|
2008-03-08 09:43:31 -05:00
|
|
|
void SetPen(const wxPen& pen);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the current transformation matrix of this context
|
|
|
|
*/
|
|
|
|
void SetTransform(const wxGraphicsMatrix& matrix);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Strokes a single line.
|
|
|
|
*/
|
|
|
|
void StrokeLine(wxDouble x1, wxDouble y1, wxDouble x2,
|
|
|
|
wxDouble y2);
|
|
|
|
|
|
|
|
//@{
|
|
|
|
/**
|
|
|
|
Stroke disconnected lines from begin to end points, fastest method available
|
|
|
|
for this purpose.
|
|
|
|
*/
|
|
|
|
void StrokeLines(size_t n, const wxPoint2DDouble* beginPoints,
|
|
|
|
const wxPoint2DDouble* endPoints);
|
2008-03-08 09:43:31 -05:00
|
|
|
void StrokeLines(size_t n, const wxPoint2DDouble* points);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Strokes along a path with the current pen.
|
|
|
|
*/
|
|
|
|
void StrokePath(const wxGraphicsPath& path);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Translates the current transformation matrix.
|
|
|
|
*/
|
|
|
|
void Translate(wxDouble dx, wxDouble dy);
|
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsRenderer
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
A wxGraphicsRenderer is the instance corresponding to the rendering engine
|
2008-04-29 06:12:41 -04:00
|
|
|
used. There may be multiple instances on a system, if there are different
|
|
|
|
rendering engines present, but there is always only one instance per engine.
|
|
|
|
This instance is pointed back to by all objects created by it (wxGraphicsContext,
|
|
|
|
wxGraphicsPath etc) and can be retrieved through their wxGraphicsObject::GetRenderer()
|
|
|
|
method. Therefore you can create an additional instance of a path etc. by calling
|
|
|
|
wxGraphicsObject::GetRenderer() and then using the appropriate CreateXXX function
|
|
|
|
of that renderer.
|
|
|
|
|
|
|
|
@code
|
|
|
|
wxGraphicsPath *path = // from somewhere
|
|
|
|
wxGraphicsBrush *brush = path->GetRenderer()->CreateBrush( *wxBLACK_BRUSH );
|
|
|
|
@endcode
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGraphicsRenderer : public wxObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/**
|
2008-04-29 06:12:41 -04:00
|
|
|
Creates a wxGraphicsContext from a wxWindow.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-04-29 06:12:41 -04:00
|
|
|
virtual wxGraphicsContext* CreateContext(wxWindow* window) = 0;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a wxWindowDC
|
|
|
|
*/
|
|
|
|
virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) = 0 ;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a wxMemoryDC
|
|
|
|
*/
|
|
|
|
virtual wxGraphicsContext * CreateContext( const wxMemoryDC& dc) = 0 ;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a wxPrinterDC
|
|
|
|
*/
|
|
|
|
virtual wxGraphicsContext * CreateContext( const wxPrinterDC& dc) = 0 ;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
2008-04-29 06:12:41 -04:00
|
|
|
Creates a native brush from a wxBrush.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-04-29 06:12:41 -04:00
|
|
|
wxGraphicsBrush CreateBrush(const wxBrush& brush);
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a native context. This native context must be
|
2008-04-29 06:12:41 -04:00
|
|
|
eg a CGContextRef for Core Graphics, a Graphics pointer for GDIPlus or a cairo_t
|
|
|
|
pointer for cairo.
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
wxGraphicsContext* CreateContextFromNativeContext(void* context);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a wxGraphicsContext from a native window.
|
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
wxGraphicsContext* CreateContextFromNativeWindow(void* window);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native graphics font from a wxFont and a text colour.
|
|
|
|
*/
|
|
|
|
wxGraphicsFont CreateFont(const wxFont& font,
|
|
|
|
const wxColour& col = wxBLACK);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native brush, having a linear gradient, starting at (x1,y1) with
|
|
|
|
color c1 to (x2,y2) with color c2
|
|
|
|
*/
|
|
|
|
wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
|
2008-03-08 09:43:31 -05:00
|
|
|
wxDouble y1,
|
|
|
|
wxDouble x2,
|
|
|
|
wxDouble y2,
|
|
|
|
const wxColouramp;c1,
|
|
|
|
const wxColouramp;c2);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native affine transformation matrix from the passed in values. The
|
|
|
|
defaults result in an identity matrix.
|
|
|
|
*/
|
|
|
|
wxGraphicsMatrix CreateMatrix(wxDouble a = 1.0, wxDouble b = 0.0,
|
|
|
|
wxDouble c = 0.0,
|
|
|
|
wxDouble d = 1.0,
|
|
|
|
wxDouble tx = 0.0,
|
|
|
|
wxDouble ty = 0.0);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native graphics path which is initially empty.
|
|
|
|
*/
|
|
|
|
wxGraphicsPath CreatePath();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native pen from a wxPen.
|
|
|
|
*/
|
|
|
|
wxGraphicsPen CreatePen(const wxPen& pen);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Creates a native brush, having a radial gradient originating at (xo,yc) with
|
|
|
|
color oColour and ends on a circle around (xc,yc) with radius r and color cColour
|
|
|
|
*/
|
|
|
|
wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo,
|
2008-03-08 09:43:31 -05:00
|
|
|
wxDouble yo,
|
|
|
|
wxDouble xc,
|
|
|
|
wxDouble yc,
|
|
|
|
wxDouble radius,
|
|
|
|
const wxColour& oColour,
|
|
|
|
const wxColour& cColour);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the default renderer on this platform. On OS X this is the Core
|
|
|
|
Graphics (a.k.a. Quartz 2D) renderer, on MSW the GDIPlus renderer, and on GTK we currently default to the cairo renderer.
|
|
|
|
*/
|
2008-04-29 06:12:41 -04:00
|
|
|
static wxGraphicsRenderer* GetDefaultRenderer();
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsBrush
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGraphicsBrush : public wxGraphicsObject
|
|
|
|
{
|
|
|
|
public:
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsFont
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGraphicsFont : public wxGraphicsObject
|
|
|
|
{
|
|
|
|
public:
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsPen
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGraphicsPen : public wxGraphicsObject
|
|
|
|
{
|
|
|
|
public:
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
2008-03-10 11:24:38 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
/**
|
|
|
|
@class wxGraphicsMatrix
|
|
|
|
@wxheader{graphics.h}
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
A wxGraphicsMatrix is a native representation of an affine matrix. The contents
|
|
|
|
are specific and private to the respective renderer. Instances are ref counted and can therefore be assigned as usual. The only way to get a valid instance is via a CreateMatrix call on the graphics context or the renderer instance.
|
2008-03-08 09:43:31 -05:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
@library{wxcore}
|
|
|
|
@category{FIXME}
|
|
|
|
*/
|
|
|
|
class wxGraphicsMatrix : public wxGraphicsObject
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
//@{
|
|
|
|
/**
|
2008-03-20 09:45:17 -04:00
|
|
|
|
2008-03-08 08:52:38 -05:00
|
|
|
*/
|
|
|
|
void Concat(const wxGraphicsMatrix* t);
|
2008-03-08 09:43:31 -05:00
|
|
|
void Concat(const wxGraphicsMatrix& t);
|
2008-03-08 08:52:38 -05:00
|
|
|
//@}
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the component values of the matrix via the argument pointers.
|
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
void Get(wxDouble* a = NULL, wxDouble* b = NULL, wxDouble* c = NULL,
|
|
|
|
wxDouble* d = NULL, wxDouble* tx = NULL,
|
2008-03-09 12:24:26 -04:00
|
|
|
wxDouble* ty = NULL) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Returns the native representation of the matrix. For CoreGraphics this is a
|
|
|
|
CFAffineMatrix pointer. For GDIPlus a Matrix Pointer and for Cairo a cairo_matrix_t pointer.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
void* GetNativeMatrix() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Inverts the matrix.
|
|
|
|
*/
|
|
|
|
void Invert();
|
|
|
|
|
|
|
|
/**
|
|
|
|
Returns @true if the elements of the transformation matrix are equal.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
bool IsEqual(const wxGraphicsMatrix& t) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Return @true if this is the identity matrix.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
bool IsIdentity() const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Rotates this matrix (radians).
|
|
|
|
*/
|
|
|
|
void Rotate(wxDouble angle);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Scales this matrix.
|
|
|
|
*/
|
|
|
|
void Scale(wxDouble xScale, wxDouble yScale);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Sets the matrix to the respective values (default values are the identity
|
|
|
|
matrix)
|
|
|
|
*/
|
2008-03-09 08:33:59 -04:00
|
|
|
void Set(wxDouble a = 1.0, wxDouble b = 0.0, wxDouble c = 0.0,
|
|
|
|
wxDouble d = 1.0, wxDouble tx = 0.0,
|
|
|
|
wxDouble ty = 0.0);
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Applies this matrix to a distance (ie. performs all transforms except
|
|
|
|
translations)
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
void TransformDistance(wxDouble* dx, wxDouble* dy) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Applies this matrix to a point.
|
|
|
|
*/
|
2008-03-09 12:24:26 -04:00
|
|
|
void TransformPoint(wxDouble* x, wxDouble* y) const;
|
2008-03-08 08:52:38 -05:00
|
|
|
|
|
|
|
/**
|
|
|
|
Translates this matrix.
|
|
|
|
*/
|
|
|
|
void Translate(wxDouble dx, wxDouble dy);
|
|
|
|
};
|
2008-03-10 11:24:38 -04:00
|
|
|
|