| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: graphics.h
- // Purpose: interface of various wxGraphics* classes
- // Author: wxWidgets team
- // Licence: wxWindows licence
- /////////////////////////////////////////////////////////////////////////////
- /**
- @class wxGraphicsPath
- A wxGraphicsPath is a native representation of a geometric path. The
- contents are specific and private to the respective renderer. Instances are
- reference counted and can therefore be assigned as usual. The only way to
- get a valid instance is by using wxGraphicsContext::CreatePath() or
- wxGraphicsRenderer::CreatePath().
- @library{wxcore}
- @category{gdi}
- */
- class wxGraphicsPath : public wxGraphicsObject
- {
- public:
- /**
- Adds an arc of a circle.
- The circle is defined by the coordinates of its centre (@a x, @a y) or
- @a c and its radius @a r. The arc goes from the starting angle @a
- startAngle to @a endAngle either clockwise or counter-clockwise
- depending on the value of @a clockwise argument.
- The angles are measured in radians but, contrary to the usual
- mathematical convention, are always @e clockwise from the horizontal
- axis.
- */
- //@{
- virtual void AddArc(wxDouble x, wxDouble y, wxDouble r,
- wxDouble startAngle, wxDouble endAngle,
- bool clockwise);
- void AddArc(const wxPoint2DDouble& c, wxDouble r,
- wxDouble startAngle, wxDouble endAngle, bool clockwise);
- //@}
- /**
- Appends a an arc to two tangents connecting (current) to (@a x1,@a y1)
- and (@a x1,@a y1) to (@a x2,@a y2), also a straight line from (current)
- to (@a x1,@a y1).
- */
- virtual void AddArcToPoint(wxDouble x1, wxDouble y1, wxDouble x2,
- wxDouble y2, wxDouble r);
- /**
- Appends a circle around (@a x,@a y) with radius @a r as a new closed
- subpath.
- */
- virtual void AddCircle(wxDouble x, wxDouble y, wxDouble r);
- /**
- Adds a cubic bezier curve from the current point, using two control
- points and an end point.
- */
- virtual void AddCurveToPoint(wxDouble cx1, wxDouble cy1,
- wxDouble cx2, wxDouble cy2,
- wxDouble x, wxDouble y);
- /**
- Adds a cubic bezier curve from the current point, using two control
- points and an end point.
- */
- void AddCurveToPoint(const wxPoint2DDouble& c1,
- const wxPoint2DDouble& c2,
- const wxPoint2DDouble& e);
- /**
- Appends an ellipse fitting into the passed in rectangle.
- */
- virtual void AddEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
- /**
- Adds a straight line from the current point to (@a x,@a y).
- */
- virtual void AddLineToPoint(wxDouble x, wxDouble y);
- /**
- Adds a straight line from the current point to @a p.
- */
- void AddLineToPoint(const wxPoint2DDouble& p);
- /**
- Adds another path.
- */
- virtual void AddPath(const wxGraphicsPath& path);
- /**
- Adds a quadratic bezier curve from the current point, using a control
- point and an end point.
- */
- virtual void AddQuadCurveToPoint(wxDouble cx, wxDouble cy,
- wxDouble x, wxDouble y);
- /**
- Appends a rectangle as a new closed subpath.
- */
- virtual void AddRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
- /**
- Appends a rounded rectangle as a new closed subpath.
- */
- virtual void AddRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
- wxDouble h, wxDouble radius);
- /**
- Closes the current sub-path.
- */
- virtual void CloseSubpath();
- /**
- @return @true if the point is within the path.
- */
- bool Contains(const wxPoint2DDouble& c,
- wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
- /**
- @return @true if the point is within the path.
- */
- virtual bool Contains(wxDouble x, wxDouble y,
- wxPolygonFillMode fillStyle = wxODDEVEN_RULE) const;
- /**
- Gets the bounding box enclosing all points (possibly including control
- points).
- */
- wxRect2DDouble GetBox() const;
- /**
- Gets the bounding box enclosing all points (possibly including control
- points).
- */
- virtual void GetBox(wxDouble* x, wxDouble* y,
- wxDouble* w, wxDouble* h) const;
- /**
- Gets the last point of the current path, (0,0) if not yet set.
- */
- virtual void GetCurrentPoint(wxDouble* x, wxDouble* y) const;
- /**
- Gets the last point of the current path, (0,0) if not yet set.
- */
- wxPoint2DDouble GetCurrentPoint() const;
- /**
- Returns the native path (CGPathRef for Core Graphics, Path pointer for
- GDIPlus and a cairo_path_t pointer for cairo).
- */
- virtual void* GetNativePath() const;
- /**
- Begins a new subpath at (@a x,@a y).
- */
- virtual void MoveToPoint(wxDouble x, wxDouble y);
- /**
- Begins a new subpath at @a p.
- */
- void MoveToPoint(const wxPoint2DDouble& p);
- /**
- Transforms each point of this path by the matrix.
- */
- virtual void Transform(const wxGraphicsMatrix& matrix);
- /**
- Gives back the native path returned by GetNativePath() because there
- might be some deallocations necessary (e.g. on cairo the native path
- returned by GetNativePath() is newly allocated each time).
- */
- virtual void UnGetNativePath(void* p) const;
- };
- /**
- @class wxGraphicsObject
- This class is the superclass of native graphics objects like pens etc. It
- allows reference counting. Not instantiated by user code.
- @library{wxcore}
- @category{gdi}
- @see wxGraphicsBrush, wxGraphicsPen, wxGraphicsMatrix, wxGraphicsPath
- */
- class wxGraphicsObject : public wxObject
- {
- public:
- /**
- Returns the renderer that was used to create this instance, or @NULL
- if it has not been initialized yet.
- */
- wxGraphicsRenderer* GetRenderer() const;
- /**
- @return @false if this object is valid, otherwise returns @true.
- */
- bool IsNull() const;
- };
- /**
- Anti-aliasing modes used by wxGraphicsContext::SetAntialiasMode().
- */
- enum wxAntialiasMode
- {
- /** No anti-aliasing */
- wxANTIALIAS_NONE,
- /** The default anti-aliasing */
- wxANTIALIAS_DEFAULT,
- };
- /**
- Interpolation quality used by wxGraphicsContext::SetInterpolationQuality().
- */
- enum wxInterpolationQuality
- {
- /** default interpolation, based on type of context, in general medium quality */
- wxINTERPOLATION_DEFAULT,
- /** no interpolation */
- wxINTERPOLATION_NONE,
- /** fast interpolation, suited for interactivity */
- wxINTERPOLATION_FAST,
- /** better quality */
- wxINTERPOLATION_GOOD,
- /** best quality, not suited for interactivity */
- wxINTERPOLATION_BEST
- };
- /**
- Compositing is done using Porter-Duff compositions
- (see http://keithp.com/~keithp/porterduff/p253-porter.pdf) with
- wxGraphicsContext::SetCompositionMode().
- The description give a short equation on how the values of a resulting
- pixel are calculated.
- @e R = Result, @e S = Source, @e D = Destination, colors premultiplied with alpha
- @e Ra, @e Sa, @e Da their alpha components
- */
- enum wxCompositionMode
- {
- /**
- Indicates invalid or unsupported composition mode.
- This value can't be passed to wxGraphicsContext::SetCompositionMode().
- @since 2.9.2
- */
- wxCOMPOSITION_INVALID = -1,
- wxCOMPOSITION_CLEAR, /**< @e R = 0 */
- wxCOMPOSITION_SOURCE, /**< @e R = S */
- wxCOMPOSITION_OVER, /**< @e R = @e S + @e D*(1 - @e Sa) */
- wxCOMPOSITION_IN, /**< @e R = @e S*@e Da */
- wxCOMPOSITION_OUT, /**< @e R = @e S*(1 - @e Da) */
- wxCOMPOSITION_ATOP, /**< @e R = @e S*@e Da + @e D*(1 - @e Sa) */
- wxCOMPOSITION_DEST, /**< @e R = @e D, essentially a noop */
- wxCOMPOSITION_DEST_OVER, /**< @e R = @e S*(1 - @e Da) + @e D */
- wxCOMPOSITION_DEST_IN, /**< @e R = @e D*@e Sa */
- wxCOMPOSITION_DEST_OUT, /**< @e R = @e D*(1 - @e Sa) */
- wxCOMPOSITION_DEST_ATOP, /**< @e R = @e S*(1 - @e Da) + @e D*@e Sa */
- wxCOMPOSITION_XOR, /**< @e R = @e S*(1 - @e Da) + @e D*(1 - @e Sa) */
- wxCOMPOSITION_ADD /**< @e R = @e S + @e D */
- };
- /**
- Represents a bitmap.
- The objects of this class are not created directly but only via
- wxGraphicsContext or wxGraphicsRenderer CreateBitmap(),
- CreateBitmapFromImage() or CreateSubBitmap() methods. They can subsequently
- be used with wxGraphicsContext::DrawBitmap(). The only other operation is
- testing for the bitmap validity which can be performed using IsNull()
- method inherited from the base class.
- */
- class wxGraphicsBitmap : public wxGraphicsObject
- {
- public:
- /**
- Default constructor creates an invalid bitmap.
- */
- wxGraphicsBitmap() {}
- /**
- Return the contents of this bitmap as wxImage.
- Using this method is more efficient than converting wxGraphicsBitmap to
- wxBitmap first and then to wxImage and can be useful if, for example,
- you want to save wxGraphicsBitmap as a disk file in a format not
- directly supported by wxBitmap.
- Invalid image is returned if the bitmap is invalid.
- @since 2.9.3
- */
- wxImage ConvertToImage() const;
- /**
- Return the pointer to the native bitmap data. (CGImageRef for Core Graphics,
- cairo_surface_t for Cairo, Bitmap* for GDI+.)
- @since 2.9.4
- */
- void* GetNativeBitmap() const;
- };
- /**
- @class wxGraphicsContext
- A wxGraphicsContext instance is the object that is drawn upon. It is
- created by 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.
- @code
- void MyCanvas::OnPaint(wxPaintEvent &event)
- {
- // Create paint DC
- wxPaintDC dc(this);
- // Create graphics context from it
- wxGraphicsContext *gc = wxGraphicsContext::Create( dc );
- if (gc)
- {
- // make a path that contains a circle and some lines
- 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);
- gc->StrokePath(path);
- delete gc;
- }
- }
- @endcode
- @library{wxcore}
- @category{gdi,dc}
- @see wxGraphicsRenderer::CreateContext(), wxGCDC, wxDC
- */
- class wxGraphicsContext : public wxGraphicsObject
- {
- public:
- /**
- 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& windowDC);
- /**
- Creates a wxGraphicsContext from a wxMemoryDC
- @see wxGraphicsRenderer::CreateContext()
- */
- static wxGraphicsContext* Create(const wxMemoryDC& memoryDC);
- /**
- Creates a wxGraphicsContext from a wxPrinterDC. Under GTK+, this will
- only work when using the GtkPrint printing backend which is available
- since GTK+ 2.10.
- @see wxGraphicsRenderer::CreateContext(), @ref overview_unixprinting
- */
- static wxGraphicsContext* Create(const wxPrinterDC& printerDC);
- /**
- Creates a wxGraphicsContext from a wxEnhMetaFileDC.
- This function, as wxEnhMetaFileDC class itself, is only available only
- under MSW.
- @see wxGraphicsRenderer::CreateContext()
- */
- static wxGraphicsContext* Create(const wxEnhMetaFileDC& metaFileDC);
- /**
- Creates a wxGraphicsContext associated with a wxImage.
- The image specifies the size of the context as well as whether alpha is
- supported (if wxImage::HasAlpha()) or not and the initial contents of
- the context. The @a image object must have a life time greater than
- that of the new context as the context copies its contents back to the
- image when it is destroyed.
- @since 2.9.3
- */
- static wxGraphicsContext* Create(wxImage& image);
- /**
- Create a lightweight context that can be used only for measuring text.
- */
- static wxGraphicsContext* Create();
- /**
- Clips drawings to the specified region.
- */
- virtual void Clip(const wxRegion& region) = 0;
- /**
- Clips drawings to the specified rectangle.
- */
- virtual void Clip(wxDouble x, wxDouble y, wxDouble w, wxDouble h) = 0;
- /**
- Concatenates the passed in transform with the current transform of this
- context.
- */
- virtual void ConcatTransform(const wxGraphicsMatrix& matrix) = 0;
- /**
- Creates wxGraphicsBitmap from an existing wxBitmap.
- Returns an invalid wxNullGraphicsBitmap on failure.
- */
- virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
- /**
- Creates wxGraphicsBitmap from an existing wxImage.
- This method is more efficient than converting wxImage to wxBitmap first
- and then calling CreateBitmap() but otherwise has the same effect.
- Returns an invalid wxNullGraphicsBitmap on failure.
- @since 2.9.3
- */
- virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image);
- /**
- Extracts a sub-bitmap from an existing bitmap.
- Currently this function is implemented in the native MSW and OS X
- versions but not when using Cairo.
- */
- virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap,
- wxDouble x, wxDouble y,
- wxDouble w, wxDouble h) = 0;
- /**
- Creates a native brush from a wxBrush.
- */
- virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) const;
- /**
- Creates a native graphics font from a wxFont and a text colour.
- */
- virtual wxGraphicsFont CreateFont(const wxFont& font,
- const wxColour& col = *wxBLACK) const;
- /**
- Creates a font object with the specified attributes.
- The use of overload taking wxFont is preferred, see
- wxGraphicsRenderer::CreateFont() for more details.
- @since 2.9.3
- */
- virtual wxGraphicsFont CreateFont(double sizeInPixels,
- const wxString& facename,
- int flags = wxFONTFLAG_DEFAULT,
- const wxColour& col = *wxBLACK) const;
- /**
- Creates a wxGraphicsContext from a native context. This native context
- must be a CGContextRef for Core Graphics, a Graphics pointer for
- GDIPlus, or a cairo_t pointer for cairo.
- @see wxGraphicsRenderer::CreateContextFromNativeContext()
- */
- static wxGraphicsContext* CreateFromNative(void* context);
- /**
- Creates a wxGraphicsContext from a native window.
- @see wxGraphicsRenderer::CreateContextFromNativeWindow()
- */
- static wxGraphicsContext* CreateFromNativeWindow(void* window);
- /**
- Creates a native brush with a linear gradient.
- The brush starts at (@a x1, @a y1) and ends at (@a x2, @a y2). Either
- just the start and end gradient colours (@a c1 and @a c2) or full set
- of gradient @a stops can be specified.
- The version taking wxGraphicsGradientStops is new in wxWidgets 2.9.1.
- */
- //@{
- wxGraphicsBrush
- CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
- wxDouble x2, wxDouble y2,
- const wxColour& c1, const wxColour& c2) const;
- wxGraphicsBrush
- CreateLinearGradientBrush(wxDouble x1, wxDouble y1,
- wxDouble x2, wxDouble y2,
- const wxGraphicsGradientStops& stops) const;
- //@}
- /**
- Creates a native affine transformation matrix from the passed in
- values. The default parameters result in an identity matrix.
- */
- virtual 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) const;
- /**
- Creates a native affine transformation matrix from the passed
- generic one.
- @since 2.9.4
- */
- wxGraphicsMatrix CreateMatrix(const wxAffineMatrix2DBase& mat) const;
- /**
- Creates a native graphics path which is initially empty.
- */
- wxGraphicsPath CreatePath() const;
- /**
- Creates a native pen from a wxPen.
- */
- virtual wxGraphicsPen CreatePen(const wxPen& pen) const;
- /**
- Creates a native brush with a radial gradient.
- The brush originates at (@a xo, @a yc) and ends on a circle around
- (@a xc, @a yc) with the given @a radius.
- The gradient may be specified either by its start and end colours @a
- oColor and @a cColor or by a full set of gradient @a stops.
- The version taking wxGraphicsGradientStops is new in wxWidgets 2.9.1.
- */
- //@{
- virtual wxGraphicsBrush
- CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
- wxDouble xc, wxDouble yc,
- wxDouble radius,
- const wxColour& oColor,
- const wxColour& cColor) const;
- virtual wxGraphicsBrush
- CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
- wxDouble xc, wxDouble yc,
- wxDouble radius,
- const wxGraphicsGradientStops& stops) = 0;
- //@}
- /**
- Draws the bitmap. In case of a mono bitmap, this is treated as a mask
- and the current brushed is used for filling.
- */
- //@{
- virtual void DrawBitmap(const wxGraphicsBitmap& bmp,
- wxDouble x, wxDouble y,
- wxDouble w, wxDouble h ) = 0;
- virtual void DrawBitmap(const wxBitmap& bmp,
- wxDouble x, wxDouble y,
- wxDouble w, wxDouble h) = 0;
- //@}
- /**
- Draws an ellipse.
- */
- virtual void DrawEllipse(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
- /**
- Draws the icon.
- */
- virtual void DrawIcon(const wxIcon& icon, wxDouble x, wxDouble y,
- wxDouble w, wxDouble h) = 0;
- /**
- Draws a polygon.
- */
- virtual void DrawLines(size_t n, const wxPoint2DDouble* points,
- wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
- /**
- Draws the path by first filling and then stroking.
- */
- virtual void DrawPath(const wxGraphicsPath& path,
- wxPolygonFillMode fillStyle = wxODDEVEN_RULE);
- /**
- Draws a rectangle.
- */
- virtual void DrawRectangle(wxDouble x, wxDouble y, wxDouble w, wxDouble h);
- /**
- Draws a rounded rectangle.
- */
- virtual void DrawRoundedRectangle(wxDouble x, wxDouble y, wxDouble w,
- wxDouble h, wxDouble radius);
- /**
- Draws text at the defined position.
- */
- void DrawText(const wxString& str, wxDouble x, wxDouble y);
- /**
- Draws text at the defined position.
- @param str
- The text to draw.
- @param x
- The x coordinate position to draw the text at.
- @param y
- The y coordinate position to draw the text at.
- @param angle
- The angle relative to the (default) horizontal direction to draw
- the string.
- */
- void DrawText(const wxString& str, wxDouble x, wxDouble y, wxDouble angle);
- /**
- Draws text at the defined position.
- @param str
- The text to draw.
- @param x
- The x coordinate position to draw the text at.
- @param y
- The y coordinate position to draw the text at.
- @param backgroundBrush
- Brush to fill the text with.
- */
- void DrawText(const wxString& str, wxDouble x, wxDouble y,
- const wxGraphicsBrush& backgroundBrush);
- /**
- Draws text at the defined position.
- @param str
- The text to draw.
- @param x
- The x coordinate position to draw the text at.
- @param y
- The y coordinate position to draw the text at.
- @param angle
- The angle relative to the (default) horizontal direction to draw
- the string.
- @param backgroundBrush
- Brush to fill the text with.
- */
- void DrawText(const wxString& str, wxDouble x, wxDouble y,
- wxDouble angle, const wxGraphicsBrush& backgroundBrush);
- /**
- Fills the path with the current brush.
- */
- virtual void FillPath(const wxGraphicsPath& path,
- wxPolygonFillMode fillStyle = wxODDEVEN_RULE) = 0;
- /**
- Returns the native context (CGContextRef for Core Graphics, Graphics
- pointer for GDIPlus and cairo_t pointer for cairo).
- */
- virtual void* GetNativeContext() = 0;
- /**
- Fills the @a widths array with the widths from the beginning of
- @a text to the corresponding character of @a text.
- */
- virtual void GetPartialTextExtents(const wxString& text,
- wxArrayDouble& widths) const = 0;
- /**
- Gets the dimensions of the string using the currently selected font.
- @param text
- The text string to measure.
- @param width
- Variable to store the total calculated width of the text.
- @param height
- Variable to store the total calculated height of the text.
- @param descent
- Variable to store the dimension from the baseline of the font to
- the bottom of the descender.
- @param externalLeading
- Any extra vertical space added to the font by the font designer
- (usually is zero).
- */
- virtual void GetTextExtent(const wxString& text, wxDouble* width,
- wxDouble* height, wxDouble* descent,
- wxDouble* externalLeading) const = 0;
- /**
- Gets the current transformation matrix of this context.
- */
- virtual wxGraphicsMatrix GetTransform() const = 0;
- /**
- Resets the clipping to original shape.
- */
- virtual void ResetClip() = 0;
- /**
- Rotates the current transformation matrix (in radians).
- */
- virtual void Rotate(wxDouble angle) = 0;
- /**
- Scales the current transformation matrix.
- */
- virtual void Scale(wxDouble xScale, wxDouble yScale) = 0;
- /**
- Sets the brush for filling paths.
- */
- void SetBrush(const wxBrush& brush);
- /**
- Sets the brush for filling paths.
- */
- virtual void SetBrush(const wxGraphicsBrush& brush);
- /**
- Sets the font for drawing text.
- */
- void SetFont(const wxFont& font, const wxColour& colour);
- /**
- Sets the font for drawing text.
- */
- virtual void SetFont(const wxGraphicsFont& font);
- /**
- Sets the pen used for stroking.
- */
- void SetPen(const wxPen& pen);
- /**
- Sets the pen used for stroking.
- */
- virtual void SetPen(const wxGraphicsPen& pen);
- /**
- Sets the current transformation matrix of this context
- */
- virtual void SetTransform(const wxGraphicsMatrix& matrix) = 0;
- /**
- Strokes a single line.
- */
- virtual void StrokeLine(wxDouble x1, wxDouble y1, wxDouble x2, wxDouble y2);
- /**
- Stroke disconnected lines from begin to end points, fastest method
- available for this purpose.
- */
- virtual void StrokeLines(size_t n, const wxPoint2DDouble* beginPoints,
- const wxPoint2DDouble* endPoints);
- /**
- Stroke lines connecting all the points.
- Unlike the other overload of this function, this method draws a single
- polyline and not a number of disconnected lines.
- */
- virtual void StrokeLines(size_t n, const wxPoint2DDouble* points);
- /**
- Strokes along a path with the current pen.
- */
- virtual void StrokePath(const wxGraphicsPath& path) = 0;
- /**
- Translates the current transformation matrix.
- */
- virtual void Translate(wxDouble dx, wxDouble dy) = 0;
- /**
- Redirects all rendering is done into a fully transparent temporary context
- */
- virtual void BeginLayer(wxDouble opacity) = 0;
- /**
- Composites back the drawings into the context with the opacity given at
- the BeginLayer call
- */
- virtual void EndLayer() = 0;
- /**
- Sets the antialiasing mode, returns true if it supported
- */
- virtual bool SetAntialiasMode(wxAntialiasMode antialias) = 0;
- /**
- Returns the current shape antialiasing mode
- */
- virtual wxAntialiasMode GetAntialiasMode() const ;
- /**
- Sets the interpolation quality, returns true if it is supported.
- Not implemented in Cairo backend currently.
- Notice that in wxWidgets 3.0 the default interpolation quality for
- GDI+-based implementation is ::wxINTERPOLATION_GOOD and @e not
- ::wxINTERPOLATION_DEFAULT (unlike under OS X with CoreGraphics-based
- implementation). This will be changed in wxWidgets 3.1 and later
- version, call this method explicitly instead of relying on the default
- value to ensure consistent behaviour across different platforms and
- versions.
- */
- virtual bool SetInterpolationQuality(wxInterpolationQuality interpolation) = 0;
- /**
- Returns the current interpolation quality.
- */
- virtual wxInterpolationQuality GetInterpolationQuality() const;
- /**
- Sets the compositing operator, returns true if it supported
- */
- virtual bool SetCompositionMode(wxCompositionMode op) = 0;
- /**
- Returns the current compositing operator
- */
- virtual wxCompositionMode GetCompositionMode() const;
- /**
- Push the current state of the context's transformation matrix on a
- stack.
- @see wxGraphicsContext::PopState
- */
- virtual void PushState() = 0;
- /**
- Pops a stored state from the stack and sets the current transformation
- matrix to that state.
- @see wxGraphicsContext::PopState
- */
- virtual void PopState() = 0;
- virtual bool ShouldOffset() const;
- virtual void EnableOffset(bool enable = true);
- void DisableOffset();
- bool OffsetEnabled();
- /**
- Begin a new document (relevant only for printing / pdf etc.)
- If there is a progress dialog, message will be shown.
- */
- virtual bool StartDoc( const wxString& message );
- /**
- Done with that document (relevant only for printing / pdf etc.)
- */
- virtual void EndDoc();
- /**
- Opens a new page (relevant only for printing / pdf etc.) with the given
- size in points. (If both are null the default page size will be used.)
- */
- virtual void StartPage( wxDouble width = 0, wxDouble height = 0 );
- /**
- Ends the current page (relevant only for printing / pdf etc.)
- */
- virtual void EndPage();
- /**
- Make sure that the current content of this context is immediately visible.
- */
- virtual void Flush();
- /**
- Returns the size of the graphics context in device coordinates.
- */
- void GetSize(wxDouble* width, wxDouble* height) const;
-
- /**
- Returns the resolution of the graphics context in device points per inch.
- */
- virtual void GetDPI( wxDouble* dpiX, wxDouble* dpiY);
- };
- /**
- Represents a single gradient stop in a collection of gradient stops as
- represented by wxGraphicsGradientStops.
- @library{wxcore}
- @category{gdi}
- @since 2.9.1
- */
- class wxGraphicsGradientStop
- {
- public:
- /**
- Creates a stop with the given colour and position.
- @param col The colour of this stop. Note that the alpha component of
- the colour is honoured thus allowing the background colours to
- partially show through the gradient.
- @param pos The stop position, must be in [0, 1] range with 0 being the
- beginning and 1 the end of the gradient.
- */
- wxGraphicsGradientStop(wxColour col = wxTransparentColour, float pos = 0.);
- /// Return the stop colour.
- const wxColour& GetColour() const;
- /**
- Change the stop colour.
- @param col The new colour.
- */
- void SetColour(const wxColour& col);
- /// Return the stop position.
- float GetPosition() const;
- /**
- Change the stop position.
- @param pos The new position, must always be in [0, 1] range.
- */
- void SetPosition(float pos);
- };
- /**
- Represents a collection of wxGraphicGradientStop values for use with
- CreateLinearGradientBrush and CreateRadialGradientBrush.
- The stops are maintained in order of position. If two or more stops are
- added with the same position then the one(s) added later come later.
- This can be useful for producing discontinuities in the colour gradient.
- Notice that this class is write-once, you can't modify the stops once they
- had been added.
- @library{wxcore}
- @category{gdi}
- @since 2.9.1
- */
- class wxGraphicsGradientStops
- {
- public:
- /**
- Initializes the gradient stops with the given boundary colours.
- Creates a wxGraphicsGradientStops instance with start colour given
- by @a startCol and end colour given by @a endCol.
- */
- wxGraphicsGradientStops(wxColour startCol = wxTransparentColour,
- wxColour endCol = wxTransparentColour);
- /**
- Add a new stop.
- */
- //@{
- void Add(const wxGraphicsGradientStop& stop);
- void Add(wxColour col, float pos);
- //@}
- /**
- Returns the stop at the given index.
- @param n The index, must be in [0, GetCount()) range.
- */
- wxGraphicsGradientStop Item(unsigned n) const;
- /**
- Returns the number of stops.
- */
- size_t GetCount() const;
- /**
- Set the start colour to @a col
- */
- void SetStartColour(wxColour col);
- /**
- Returns the start colour.
- */
- wxColour GetStartColour() const;
- /**
- Set the end colour to @a col
- */
- void SetEndColour(wxColour col);
- /**
- Returns the end colour.
- */
- wxColour GetEndColour() const;
- };
- /**
- @class wxGraphicsRenderer
- A wxGraphicsRenderer is the instance corresponding to the rendering engine
- 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
- @library{wxcore}
- @category{gdi}
- */
- class wxGraphicsRenderer : public wxObject
- {
- public:
- /**
- Creates wxGraphicsBitmap from an existing wxBitmap.
- Returns an invalid wxNullGraphicsBitmap on failure.
- */
- virtual wxGraphicsBitmap CreateBitmap( const wxBitmap &bitmap ) = 0;
- /**
- Creates wxGraphicsBitmap from an existing wxImage.
- This method is more efficient than converting wxImage to wxBitmap first
- and then calling CreateBitmap() but otherwise has the same effect.
- Returns an invalid wxNullGraphicsBitmap on failure.
- @since 2.9.3
- */
- virtual wxGraphicsBitmap CreateBitmapFromImage(const wxImage& image) = 0;
- /**
- Creates a wxImage from a wxGraphicsBitmap.
- This method is used by the more convenient wxGraphicsBitmap::ConvertToImage.
- */
- virtual wxImage CreateImageFromBitmap(const wxGraphicsBitmap& bmp) = 0;
- /**
- Creates wxGraphicsBitmap from a native bitmap handle.
- @a bitmap meaning is platform-dependent. Currently it's a GDI+ @c
- Bitmap pointer under MSW, @c CGImage pointer under OS X or a @c
- cairo_surface_t pointer when using Cairo under any platform.
- Notice that this method takes ownership of @a bitmap, i.e. it will be
- destroyed when the returned wxGraphicsBitmap is.
- */
- virtual wxGraphicsBitmap CreateBitmapFromNativeBitmap( void* bitmap ) = 0;
- /**
- Creates a wxGraphicsContext from a wxWindow.
- */
- virtual wxGraphicsContext* CreateContext(wxWindow* window) = 0;
- /**
- Creates a wxGraphicsContext from a wxWindowDC
- */
- virtual wxGraphicsContext* CreateContext(const wxWindowDC& windowDC) = 0 ;
- /**
- Creates a wxGraphicsContext from a wxMemoryDC
- */
- virtual wxGraphicsContext* CreateContext(const wxMemoryDC& memoryDC) = 0 ;
- /**
- Creates a wxGraphicsContext from a wxPrinterDC
- */
- virtual wxGraphicsContext* CreateContext(const wxPrinterDC& printerDC) = 0 ;
- /**
- Creates a wxGraphicsContext from a wxEnhMetaFileDC.
- This function, as wxEnhMetaFileDC class itself, is only available only
- under MSW.
- */
- virtual wxGraphicsContext* CreateContext(const wxEnhMetaFileDC& metaFileDC) = 0;
- /**
- Creates a wxGraphicsContext associated with a wxImage.
- This function is used by wxContext::CreateFromImage() and is not
- normally called directly.
- @since 2.9.3
- */
- wxGraphicsContext* CreateContextFromImage(wxImage& image);
- /**
- Creates a native brush from a wxBrush.
- */
- virtual wxGraphicsBrush CreateBrush(const wxBrush& brush) = 0;
- /**
- Creates a wxGraphicsContext from a native context. This native context
- must be a CGContextRef for Core Graphics, a Graphics pointer for
- GDIPlus, or a cairo_t pointer for cairo.
- */
- virtual wxGraphicsContext* CreateContextFromNativeContext(void* context) = 0;
- /**
- Creates a wxGraphicsContext from a native window.
- */
- virtual wxGraphicsContext* CreateContextFromNativeWindow(void* window) = 0;
- /**
- Creates a wxGraphicsContext that can be used for measuring texts only.
- No drawing commands are allowed.
- */
- virtual wxGraphicsContext * CreateMeasuringContext() = 0;
- /**
- Creates a native graphics font from a wxFont and a text colour.
- */
- virtual wxGraphicsFont CreateFont(const wxFont& font,
- const wxColour& col = *wxBLACK) = 0;
- /**
- Creates a graphics font with the given characteristics.
- If possible, the CreateFont() overload taking wxFont should be used
- instead. The main advantage of this overload is that it can be used
- without X server connection under Unix when using Cairo.
- @param sizeInPixels
- Height of the font in user space units, i.e. normally pixels.
- Notice that this is different from the overload taking wxFont as
- wxFont size is specified in points.
- @param facename
- The name of the font. The same font name might not be available
- under all platforms so the font name can also be empty to use the
- default platform font.
- @param flags
- Combination of wxFontFlag enum elements. Currently only
- @c wxFONTFLAG_ITALIC and @c wxFONTFLAG_BOLD are supported. By
- default the normal font version is used.
- @param col
- The font colour, black by default.
- @since 2.9.3
- */
- virtual wxGraphicsFont CreateFont(double sizeInPixels,
- const wxString& facename,
- int flags = wxFONTFLAG_DEFAULT,
- const wxColour& col = *wxBLACK) = 0;
- /**
- Creates a native brush with a linear gradient.
- Stops support is new since wxWidgets 2.9.1, previously only the start
- and end colours could be specified.
- */
- virtual wxGraphicsBrush CreateLinearGradientBrush(wxDouble x1,
- wxDouble y1,
- wxDouble x2,
- wxDouble y2,
- const wxGraphicsGradientStops& stops) = 0;
- /**
- Creates a native affine transformation matrix from the passed in
- values. The defaults result in an identity matrix.
- */
- virtual 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) = 0;
- /**
- Creates a native graphics path which is initially empty.
- */
- virtual wxGraphicsPath CreatePath() = 0;
- /**
- Creates a native pen from a wxPen.
- */
- virtual wxGraphicsPen CreatePen(const wxPen& pen) = 0;
- /**
- Creates a native brush with a radial gradient.
- Stops support is new since wxWidgets 2.9.1, previously only the start
- and end colours could be specified.
- */
- virtual wxGraphicsBrush CreateRadialGradientBrush(wxDouble xo, wxDouble yo,
- wxDouble xc, wxDouble yc,
- wxDouble radius,
- const wxGraphicsGradientStops& stops) = 0;
- /**
- Extracts a sub-bitmap from an existing bitmap.
- Currently this function is implemented in the native MSW and OS X
- versions but not when using Cairo.
- */
- virtual wxGraphicsBitmap CreateSubBitmap(const wxGraphicsBitmap& bitmap,
- wxDouble x, wxDouble y,
- wxDouble w, wxDouble h) = 0;
- /**
- 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.
- */
- static wxGraphicsRenderer* GetDefaultRenderer();
- static wxGraphicsRenderer* GetCairoRenderer();
- };
- /**
- @class wxGraphicsBrush
- A wxGraphicsBrush is a native representation of a brush. 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 wxGraphicsContext::CreateBrush() or
- wxGraphicsRenderer::CreateBrush().
- @library{wxcore}
- @category{gdi}
- */
- class wxGraphicsBrush : public wxGraphicsObject
- {
- public:
- };
- /**
- @class wxGraphicsFont
- A wxGraphicsFont is a native representation of a font. 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 wxGraphicsContext::CreateFont() or
- wxGraphicsRenderer::CreateFont().
- @library{wxcore}
- @category{gdi}
- */
- class wxGraphicsFont : public wxGraphicsObject
- {
- public:
- };
- /**
- @class wxGraphicsPen
- A wxGraphicsPen is a native representation of a pen. 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 wxGraphicsContext::CreatePen() or
- wxGraphicsRenderer::CreatePen().
- @library{wxcore}
- @category{gdi}
- */
- class wxGraphicsPen : public wxGraphicsObject
- {
- public:
- };
- /**
- @class wxGraphicsMatrix
- 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 wxGraphicsContext::CreateMatrix() or
- wxGraphicsRenderer::CreateMatrix().
- @library{wxcore}
- @category{gdi}
- */
- class wxGraphicsMatrix : public wxGraphicsObject
- {
- public:
- /**
- Concatenates the matrix passed with the current matrix.
- */
- virtual void Concat(const wxGraphicsMatrix* t);
- /**
- Concatenates the matrix passed with the current matrix.
- */
- void Concat(const wxGraphicsMatrix& t);
- /**
- Returns the component values of the matrix via the argument pointers.
- */
- virtual void Get(wxDouble* a = NULL, wxDouble* b = NULL,
- wxDouble* c = NULL, wxDouble* d = NULL,
- wxDouble* tx = NULL, wxDouble* ty = NULL) const;
- /**
- 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.
- */
- virtual void* GetNativeMatrix() const;
- /**
- Inverts the matrix.
- */
- virtual void Invert();
- /**
- Returns @true if the elements of the transformation matrix are equal.
- */
- virtual bool IsEqual(const wxGraphicsMatrix* t) const;
- /**
- Returns @true if the elements of the transformation matrix are equal.
- */
- bool IsEqual(const wxGraphicsMatrix& t) const;
- /**
- Return @true if this is the identity matrix.
- */
- virtual bool IsIdentity() const;
- /**
- Rotates this matrix clockwise (in radians).
- @param angle
- Rotation angle in radians, clockwise.
- */
- virtual void Rotate(wxDouble angle);
- /**
- Scales this matrix.
- */
- virtual void Scale(wxDouble xScale, wxDouble yScale);
- /**
- Sets the matrix to the respective values (default values are the
- identity matrix).
- */
- virtual 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);
- /**
- Applies this matrix to a distance (ie. performs all transforms except
- translations).
- */
- virtual void TransformDistance(wxDouble* dx, wxDouble* dy) const;
- /**
- Applies this matrix to a point.
- */
- virtual void TransformPoint(wxDouble* x, wxDouble* y) const;
- /**
- Translates this matrix.
- */
- virtual void Translate(wxDouble dx, wxDouble dy);
- };
- const wxGraphicsPen wxNullGraphicsPen;
- const wxGraphicsBrush wxNullGraphicsBrush;
- const wxGraphicsFont wxNullGraphicsFont;
- const wxGraphicsBitmap wxNullGraphicsBitmap;
- const wxGraphicsMatrix wxNullGraphicsMatrix;
- const wxGraphicsPath wxNullGraphicsPath;
|