wxWidgets/interface/wx/dcgraph.h
Vadim Zeitlin cc41ddf62a Document wxGCDC::SetGraphicsContext() difference from ctor
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.
2019-07-07 03:18:18 +02:00

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);
};