cc41ddf62a
Document the discrepancy between constructing wxGCDC from wxGraphicsContext directly or default-constructing it and calling SetGraphicsContext() later. Current behaviour is somewhat inconsistent, but useful, because it allows to draw on wxGraphicsContext using wxDC API using any kind of pen and brush, even those not supported by this API, while remaining backwards-compatible (i.e. we can't change SetGraphicsContext() to not re-apply font, pen and brush, as this would break any existing code relying on this happening), so it seems like the best alternative.
113 lines
3.9 KiB
Objective-C
113 lines
3.9 KiB
Objective-C
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: dcgraph.h
|
|
// Purpose: interface of wxGCDC
|
|
// Author: wxWidgets team
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
/**
|
|
@class wxGCDC
|
|
|
|
wxGCDC is a device context that draws on a wxGraphicsContext.
|
|
|
|
wxGCDC does its best to implement wxDC API, but the following features are
|
|
not (fully) implemented because wxGraphicsContext doesn't support them:
|
|
|
|
- GetPixel() method is not implemented and always returns @false because
|
|
modern graphics layers don't support retrieving the contents of the drawn
|
|
pixels.
|
|
|
|
- FloodFill() method is not, and can't be, implemented, as its
|
|
functionality relies on reading the pixels from wxGraphicsContext too.
|
|
|
|
- SetLogicalFunction() method only works with @c wxCOPY, @c wxOR,
|
|
@c wxNO_OP, @c wxCLEAR and @c wxXOR functions, attempts to use any other
|
|
function (including @c wxINVERT) don't do anything.
|
|
|
|
- Similarly, ::wxRasterOperationMode parameter of Blit() and StretchBlit()
|
|
can only be one of the supported logical functions listed above, using
|
|
any other function will result in an assertion failure and not drawing
|
|
anything.
|
|
|
|
- For Direct2D-based wxGraphicsContext, only true-type fonts can be used
|
|
in the font-related functions.
|
|
|
|
@library{wxcore}
|
|
@category{dc}
|
|
|
|
@see wxDC, wxGraphicsContext
|
|
*/
|
|
|
|
class wxGCDC: public wxDC
|
|
{
|
|
public:
|
|
/**
|
|
Constructs a wxGCDC from a wxWindowDC.
|
|
*/
|
|
wxGCDC( const wxWindowDC& windowDC );
|
|
|
|
/**
|
|
Constructs a wxGCDC from a wxMemoryDC.
|
|
*/
|
|
wxGCDC( const wxMemoryDC& memoryDC );
|
|
|
|
/**
|
|
Constructs a wxGCDC from a wxPrinterDC.
|
|
*/
|
|
wxGCDC( const wxPrinterDC& printerDC );
|
|
|
|
/**
|
|
Construct a wxGCDC from an existing graphics context.
|
|
|
|
Note that this object takes ownership of @a context and will delete it
|
|
when it is destroyed or when SetGraphicsContext() is called with a
|
|
different context object.
|
|
|
|
Also notice that @a context will continue using the same font, pen and
|
|
brush as before until SetFont(), SetPen() or SetBrush() is explicitly
|
|
called to change them. This means that the code can use this
|
|
wxDC-derived object to work using pens and brushes with alpha component,
|
|
for example (which normally isn't supported by wxDC API), but it also
|
|
means that the return values of GetFont(), GetPen() and GetBrush() won't
|
|
really correspond to the actually used objects because they simply can't
|
|
represent them anyhow. If you wish to avoid such discrepancy, you need
|
|
to call the setter methods to bring wxDC and wxGraphicsContext font, pen
|
|
and brush in sync with each other.
|
|
*/
|
|
wxGCDC(wxGraphicsContext* context);
|
|
|
|
/**
|
|
Constructs a wxGCDC from a wxEnhMetaFileDC.
|
|
|
|
This constructor is only available in wxMSW port and when @c
|
|
wxUSE_ENH_METAFILE build option is enabled, i.e. when wxEnhMetaFileDC
|
|
class itself is available.
|
|
|
|
@since 2.9.3
|
|
*/
|
|
wxGCDC( const wxEnhMetaFileDC& emfDC );
|
|
|
|
wxGCDC();
|
|
virtual ~wxGCDC();
|
|
|
|
/**
|
|
Retrieves associated wxGraphicsContext
|
|
*/
|
|
wxGraphicsContext* GetGraphicsContext() const;
|
|
|
|
/**
|
|
Set the graphics context to be used for this wxGCDC.
|
|
|
|
Note that this object takes ownership of @a context and will delete it when
|
|
it is destroyed or when SetGraphicsContext() is called again.
|
|
|
|
Also, unlike the constructor taking wxGraphicsContext, this method will
|
|
reapply the current font, pen and brush, so that this object continues
|
|
to use them, if they had been changed before (which is never the case
|
|
when constructing wxGCDC directly from wxGraphicsContext).
|
|
*/
|
|
void SetGraphicsContext(wxGraphicsContext* context);
|
|
|
|
};
|
|
|