Moved all interface headers into a 'wx' subdirectory for proper use of Doxygen path settings.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@54385 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
180
interface/wx/dcbuffer.h
Normal file
180
interface/wx/dcbuffer.h
Normal file
@@ -0,0 +1,180 @@
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// Name: dcbuffer.h
|
||||
// Purpose: interface of wxBufferedDC
|
||||
// Author: wxWidgets team
|
||||
// RCS-ID: $Id$
|
||||
// Licence: wxWindows license
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/**
|
||||
@class wxBufferedDC
|
||||
@wxheader{dcbuffer.h}
|
||||
|
||||
This class provides a simple way to avoid flicker: when drawing on it,
|
||||
everything is in fact first drawn on an in-memory buffer (a wxBitmap) and
|
||||
then copied to the screen, using the associated wxDC, only once, when this
|
||||
object is destroyed. wxBufferedDC itself is typically associated with
|
||||
wxClientDC, if you want to use it in your @c EVT_PAINT handler, you should
|
||||
look at wxBufferedPaintDC instead.
|
||||
|
||||
When used like this, a valid @e DC must be specified in the constructor
|
||||
while the @e buffer bitmap doesn't have to be explicitly provided, by
|
||||
default this class will allocate the bitmap of required size itself.
|
||||
However using a dedicated bitmap can speed up the redrawing process by
|
||||
eliminating the repeated creation and destruction of a possibly big bitmap.
|
||||
Otherwise, wxBufferedDC can be used in the same way as any other device
|
||||
context.
|
||||
|
||||
There is another possible use for wxBufferedDC is to use it to maintain a
|
||||
backing store for the window contents. In this case, the associated @e DC
|
||||
may be @NULL but a valid backing store bitmap should be specified.
|
||||
|
||||
Finally, please note that GTK+ 2.0 as well as OS X provide double buffering
|
||||
themselves natively. You can either use wxWindow::IsDoubleBuffered() to
|
||||
determine whether you need to use buffering or not, or use
|
||||
wxAutoBufferedPaintDC to avoid needless double buffering on the systems
|
||||
which already do it automatically.
|
||||
|
||||
@library{wxcore}
|
||||
@category{dc}
|
||||
|
||||
@see wxDC, wxMemoryDC, wxBufferedPaintDC, wxAutoBufferedPaintDC
|
||||
*/
|
||||
class wxBufferedDC : public wxMemoryDC
|
||||
{
|
||||
public:
|
||||
/**
|
||||
Default constructor. You must call one of the Init() methods later in
|
||||
order to use the device context.
|
||||
*/
|
||||
wxBufferedDC();
|
||||
|
||||
//@{
|
||||
/**
|
||||
Creates a buffer for the provided @dc. Init() must not be called when
|
||||
using this constructor.
|
||||
|
||||
@param dc
|
||||
The underlying DC: everything drawn to this object will be flushed
|
||||
to this DC when this object is destroyed. You may pass @NULL in
|
||||
order to just initialize the buffer, and not flush it.
|
||||
@param area
|
||||
The size of the bitmap to be used for buffering (this bitmap is
|
||||
created internally when it is not given explicitly).
|
||||
@param buffer
|
||||
Explicitly provided bitmap to be used for buffering: this is the
|
||||
most efficient solution as the bitmap doesn't have to be recreated
|
||||
each time but it also requires more memory as the bitmap is never
|
||||
freed. The bitmap should have appropriate size, anything drawn
|
||||
outside of its bounds is clipped.
|
||||
@param style
|
||||
wxBUFFER_CLIENT_AREA to indicate that just the client area of the
|
||||
window is buffered, or wxBUFFER_VIRTUAL_AREA to indicate that the
|
||||
buffer bitmap covers the virtual area.
|
||||
*/
|
||||
wxBufferedDC(wxDC* dc, const wxSize& area,
|
||||
int style = wxBUFFER_CLIENT_AREA);
|
||||
wxBufferedDC(wxDC* dc, wxBitmap& buffer,
|
||||
int style = wxBUFFER_CLIENT_AREA);
|
||||
//@}
|
||||
|
||||
/**
|
||||
Copies everything drawn on the DC so far to the underlying DC
|
||||
associated with this object, if any.
|
||||
*/
|
||||
~wxBufferedDC();
|
||||
|
||||
//@{
|
||||
/**
|
||||
Initializes the object created using the default constructor. Please
|
||||
see the constructors for parameter details.
|
||||
*/
|
||||
void Init(wxDC* dc, const wxSize& area,
|
||||
int style = wxBUFFER_CLIENT_AREA);
|
||||
void Init(wxDC* dc, wxBitmap& buffer,
|
||||
int style = wxBUFFER_CLIENT_AREA);
|
||||
//@}
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@class wxAutoBufferedPaintDC
|
||||
@wxheader{dcbuffer.h}
|
||||
|
||||
This wxDC derivative can be used inside of an @c EVT_PAINT() event handler
|
||||
to achieve double-buffered drawing. Just use this class instead of
|
||||
wxPaintDC and make sure wxWindow::SetBackgroundStyle() is called with
|
||||
wxBG_STYLE_CUSTOM somewhere in the class initialization code, and that's
|
||||
all you have to do to (mostly) avoid flicker.
|
||||
|
||||
The difference between wxBufferedPaintDC and this class is that this class
|
||||
won't double-buffer on platforms which have native double-buffering
|
||||
already, avoiding any unneccessary buffering to avoid flicker.
|
||||
|
||||
wxAutoBufferedPaintDC is simply a typedef of wxPaintDC on platforms that
|
||||
have native double-buffering, otherwise, it is a typedef of
|
||||
wxBufferedPaintDC.
|
||||
|
||||
@library{wxbase}
|
||||
@category{dc}
|
||||
|
||||
@see wxDC, wxBufferedPaintDC, wxPaintDC
|
||||
*/
|
||||
class wxAutoBufferedPaintDC : public wxBufferedPaintDC
|
||||
{
|
||||
public:
|
||||
/**
|
||||
Constructor. Pass a pointer to the window on which you wish to paint.
|
||||
*/
|
||||
wxAutoBufferedPaintDC(wxWindow* window);
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
@class wxBufferedPaintDC
|
||||
@wxheader{dcbuffer.h}
|
||||
|
||||
This is a subclass of wxBufferedDC which can be used inside of an
|
||||
@c EVT_PAINT() event handler to achieve double-buffered drawing. Just use
|
||||
this class instead of wxPaintDC and make sure
|
||||
wxWindow::SetBackgroundStyle() is called with wxBG_STYLE_CUSTOM somewhere
|
||||
in the class initialization code, and that's all you have to do to (mostly)
|
||||
avoid flicker. The only thing to watch out for is that if you are using
|
||||
this class together with wxScrolled, you probably do @b not want to call
|
||||
wxScrolled::PrepareDC() on it as it already does this internally for the
|
||||
real underlying wxPaintDC.
|
||||
|
||||
@library{wxcore}
|
||||
@category{dc}
|
||||
|
||||
@see wxDC, wxBufferedDC, wxAutoBufferedPaintDC, wxPaintDC
|
||||
*/
|
||||
class wxBufferedPaintDC : public wxBufferedDC
|
||||
{
|
||||
public:
|
||||
//@{
|
||||
/**
|
||||
As with wxBufferedDC, you may either provide the bitmap to be used for
|
||||
buffering or let this object create one internally (in the latter case,
|
||||
the size of the client part of the window is used).
|
||||
|
||||
Pass wxBUFFER_CLIENT_AREA for the @a style parameter to indicate that
|
||||
just the client area of the window is buffered, or
|
||||
wxBUFFER_VIRTUAL_AREA to indicate that the buffer bitmap covers the
|
||||
virtual area.
|
||||
*/
|
||||
wxBufferedPaintDC(wxWindow* window, wxBitmap& buffer,
|
||||
int style = wxBUFFER_CLIENT_AREA);
|
||||
wxBufferedPaintDC(wxWindow* window,
|
||||
int style = wxBUFFER_CLIENT_AREA);
|
||||
//@}
|
||||
|
||||
/**
|
||||
Copies everything drawn on the DC so far to the window associated with
|
||||
this object, using a wxPaintDC.
|
||||
*/
|
||||
~wxBufferedPaintDC();
|
||||
};
|
||||
|
Reference in New Issue
Block a user