Added wxBUFFER_VIRTUAL_AREA, wxBUFFER_CLIENT_AREA to buffered DC
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32572 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -7,11 +7,16 @@ wxWidgets 2.5 Change Log - For more verbose changes, see the manual
|
|||||||
|
|
||||||
All:
|
All:
|
||||||
|
|
||||||
|
- wxURI::GetUser and wxURI::HasUser have been renamed to wxURI::GetUserInfo and wxURI::HasUserInfo respectively so that wxURI::GetUser returns the old username that were in the HTTP specification along with wxURI::GetPassword (Note that if you used wxURI::GetUser from 2.5.3 you should rename all instances of it to wxURI::GetUserInfo).
|
||||||
|
- Added
|
||||||
|
|
||||||
|
All (GUI):
|
||||||
|
|
||||||
- Added GetIcon, GetBitmap to wxImageList. wxGenericImageList's original
|
- Added GetIcon, GetBitmap to wxImageList. wxGenericImageList's original
|
||||||
GetBitmap is renamed GetBitmapPtr.
|
GetBitmap is renamed GetBitmapPtr.
|
||||||
- Added XPM data constructor to wxImage.
|
- Added XPM data constructor to wxImage.
|
||||||
- wxURI::GetUser and wxURI::HasUser have been renamed to wxURI::GetUserInfo and wxURI::HasUserInfo respectively so that wxURI::GetUser returns the old username that were in the HTTP specification along with wxURI::GetPassword (Note that if you used wxURI::GetUser from 2.5.3 you should rename all instances of it to wxURI::GetUserInfo).
|
- Added style parameter to wxBufferedDC to allow buffering just
|
||||||
|
the client, or the whole virtual area.
|
||||||
|
|
||||||
wxPalmOS:
|
wxPalmOS:
|
||||||
|
|
||||||
|
@@ -42,9 +42,9 @@ your \texttt{OnPaint()} handler, you should look at
|
|||||||
|
|
||||||
\func{}{wxBufferedDC}{\void}
|
\func{}{wxBufferedDC}{\void}
|
||||||
|
|
||||||
\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}}
|
\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
|
||||||
|
|
||||||
\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}}
|
\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
|
||||||
|
|
||||||
If you use the first, default, constructor, you must call one of the
|
If you use the first, default, constructor, you must call one of the
|
||||||
\helpref{Init}{wxbuffereddcinit} methods later in order to use the object.
|
\helpref{Init}{wxbuffereddcinit} methods later in order to use the object.
|
||||||
@@ -66,12 +66,16 @@ 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
|
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.}
|
should have appropriate size, anything drawn outside of its bounds is clipped.}
|
||||||
|
|
||||||
|
\docparam{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 (in which case PrepareDC is automatically called for the actual window
|
||||||
|
device context).}
|
||||||
|
|
||||||
\membersection{wxBufferedDC::Init}\label{wxbuffereddcinit}
|
\membersection{wxBufferedDC::Init}\label{wxbuffereddcinit}
|
||||||
|
|
||||||
\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}}
|
\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
|
||||||
|
|
||||||
\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}}
|
\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
|
||||||
|
|
||||||
These functions initialize the object created using the default constructor.
|
These functions initialize the object created using the default constructor.
|
||||||
Please see \helpref{constructors documentation}{wxbuffereddcctor} for details.
|
Please see \helpref{constructors documentation}{wxbuffereddcctor} for details.
|
||||||
@@ -113,12 +117,18 @@ already does this internally for the real underlying wxPaintDC.
|
|||||||
|
|
||||||
\membersection{wxBufferedPaintDC::wxBufferedPaintDC}\label{wxbufferedpaintdcctor}
|
\membersection{wxBufferedPaintDC::wxBufferedPaintDC}\label{wxbufferedpaintdcctor}
|
||||||
|
|
||||||
\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{const wxBitmap\& }{buffer = wxNullBitmap}}
|
\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
|
||||||
|
|
||||||
|
\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
|
||||||
|
|
||||||
As with \helpref{wxBufferedDC}{wxbuffereddcctor}, you may either provide the
|
As with \helpref{wxBufferedDC}{wxbuffereddcctor}, you may either provide the
|
||||||
bitmap to be used for buffering or let this object create one internally (in
|
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).
|
the latter case, the size of the client part of the window is used).
|
||||||
|
|
||||||
|
Pass wxBUFFER\_CLIENT\_AREA for the {\it 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 (in which case PrepareDC is automatically called for the actual window
|
||||||
|
device context).
|
||||||
|
|
||||||
\membersection{wxBufferedPaintDC::\destruct{wxBufferedPaintDC}}\label{wxbufferedpaintdcdtor}
|
\membersection{wxBufferedPaintDC::\destruct{wxBufferedPaintDC}}\label{wxbufferedpaintdcdtor}
|
||||||
|
|
||||||
|
@@ -20,18 +20,27 @@
|
|||||||
// Double buffering helper.
|
// Double buffering helper.
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// Assumes the buffer bitmap covers the entire scrolled window,
|
||||||
|
// and prepares the window DC accordingly
|
||||||
|
#define wxBUFFER_VIRTUAL_AREA 0x01
|
||||||
|
|
||||||
|
// Assumes the buffer bitmap only covers the client area;
|
||||||
|
// does not prepare the window DC
|
||||||
|
#define wxBUFFER_CLIENT_AREA 0x02
|
||||||
|
|
||||||
class wxBufferedDC : public wxMemoryDC
|
class wxBufferedDC : public wxMemoryDC
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// Default ctor, must subsequently call Init for two stage construction.
|
// Default ctor, must subsequently call Init for two stage construction.
|
||||||
wxBufferedDC() : m_dc( 0 )
|
wxBufferedDC() : m_dc( 0 ), m_style(0)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
// Construct a wxBufferedDC using a user supplied buffer.
|
// Construct a wxBufferedDC using a user supplied buffer.
|
||||||
wxBufferedDC(wxDC *dc, const wxBitmap &buffer)
|
wxBufferedDC(wxDC *dc, const wxBitmap &buffer, int style = wxBUFFER_CLIENT_AREA)
|
||||||
: m_dc( dc ),
|
: m_dc( dc ),
|
||||||
m_buffer( buffer )
|
m_buffer( buffer ),
|
||||||
|
m_style(style)
|
||||||
{
|
{
|
||||||
UseBuffer();
|
UseBuffer();
|
||||||
}
|
}
|
||||||
@@ -39,9 +48,11 @@ public:
|
|||||||
// Construct a wxBufferedDC with an internal buffer of 'area'
|
// Construct a wxBufferedDC with an internal buffer of 'area'
|
||||||
// (where area is usually something like the size of the window
|
// (where area is usually something like the size of the window
|
||||||
// being buffered)
|
// being buffered)
|
||||||
wxBufferedDC(wxDC *dc, const wxSize &area)
|
wxBufferedDC(wxDC *dc, const wxSize &area, int style = wxBUFFER_CLIENT_AREA)
|
||||||
: m_dc( dc ),
|
: m_dc( dc ),
|
||||||
m_buffer( area.GetWidth(), area.GetHeight() )
|
m_buffer( area.GetWidth(), area.GetHeight() ),
|
||||||
|
m_style(style)
|
||||||
|
|
||||||
{
|
{
|
||||||
UseBuffer();
|
UseBuffer();
|
||||||
}
|
}
|
||||||
@@ -56,18 +67,19 @@ public:
|
|||||||
|
|
||||||
// These reimplement the actions of the ctors for two stage creation, but
|
// These reimplement the actions of the ctors for two stage creation, but
|
||||||
// are not used by the ctors themselves to save a few cpu cycles.
|
// are not used by the ctors themselves to save a few cpu cycles.
|
||||||
void Init(wxDC *dc, const wxBitmap &buffer)
|
void Init(wxDC *dc, const wxBitmap &buffer, int style = wxBUFFER_CLIENT_AREA)
|
||||||
{
|
{
|
||||||
wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
|
wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
|
||||||
_T("wxBufferedDC already initialised") );
|
_T("wxBufferedDC already initialised") );
|
||||||
m_dc = dc;
|
m_dc = dc;
|
||||||
m_buffer = buffer;
|
m_buffer = buffer;
|
||||||
|
m_style = style;
|
||||||
UseBuffer();
|
UseBuffer();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Init(wxDC *dc, const wxSize &area)
|
void Init(wxDC *dc, const wxSize &area, int style = wxBUFFER_CLIENT_AREA)
|
||||||
{
|
{
|
||||||
Init(dc, wxBitmap(area.GetWidth(), area.GetHeight()));
|
Init(dc, wxBitmap(area.GetWidth(), area.GetHeight()), style);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Blits the buffer to the dc, and detaches the dc from the buffer (so it
|
// Blits the buffer to the dc, and detaches the dc from the buffer (so it
|
||||||
@@ -81,8 +93,10 @@ public:
|
|||||||
wxASSERT_MSG( m_dc != 0,
|
wxASSERT_MSG( m_dc != 0,
|
||||||
_T("No underlying DC associated with wxBufferedDC (anymore)") );
|
_T("No underlying DC associated with wxBufferedDC (anymore)") );
|
||||||
|
|
||||||
wxCoord x, y;
|
wxCoord x=0, y=0;
|
||||||
GetDeviceOrigin(& x, & y);
|
|
||||||
|
if (m_style & wxBUFFER_CLIENT_AREA)
|
||||||
|
GetDeviceOrigin(& x, & y);
|
||||||
|
|
||||||
m_dc->Blit( 0, 0,
|
m_dc->Blit( 0, 0,
|
||||||
m_buffer.GetWidth(), m_buffer.GetHeight(), this,
|
m_buffer.GetWidth(), m_buffer.GetHeight(), this,
|
||||||
@@ -90,6 +104,10 @@ public:
|
|||||||
m_dc = NULL;
|
m_dc = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Set and get the style
|
||||||
|
void SetStyle(int style) { m_style = style; }
|
||||||
|
int GetStyle() const { return m_style; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// check that the bitmap is valid and use it
|
// check that the bitmap is valid and use it
|
||||||
void UseBuffer()
|
void UseBuffer()
|
||||||
@@ -109,6 +127,9 @@ private:
|
|||||||
// the buffer (selected in this DC)
|
// the buffer (selected in this DC)
|
||||||
wxBitmap m_buffer;
|
wxBitmap m_buffer;
|
||||||
|
|
||||||
|
// the buffering style
|
||||||
|
int m_style;
|
||||||
|
|
||||||
DECLARE_NO_COPY_CLASS(wxBufferedDC)
|
DECLARE_NO_COPY_CLASS(wxBufferedDC)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -122,14 +143,29 @@ private:
|
|||||||
class wxBufferedPaintDC : public wxBufferedDC
|
class wxBufferedPaintDC : public wxBufferedDC
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
// If no bitmap is supplied by the user, a temporary one wil; be created.
|
// If no bitmap is supplied by the user, a temporary one will be created.
|
||||||
wxBufferedPaintDC(wxWindow *window, const wxBitmap& buffer = wxNullBitmap)
|
wxBufferedPaintDC(wxWindow *window, const wxBitmap& buffer, int style = wxBUFFER_CLIENT_AREA)
|
||||||
: m_paintdc(window)
|
: m_paintdc(window)
|
||||||
{
|
{
|
||||||
|
// If we're buffering the virtual window, scale the paint DC as well
|
||||||
|
if (style & wxBUFFER_VIRTUAL_AREA)
|
||||||
|
window->PrepareDC( m_paintdc );
|
||||||
|
|
||||||
if( buffer != wxNullBitmap )
|
if( buffer != wxNullBitmap )
|
||||||
Init(&m_paintdc, buffer);
|
Init(&m_paintdc, buffer, style);
|
||||||
else
|
else
|
||||||
Init(&m_paintdc, window->GetClientSize());
|
Init(&m_paintdc, window->GetClientSize(), style);
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no bitmap is supplied by the user, a temporary one will be created.
|
||||||
|
wxBufferedPaintDC(wxWindow *window, int style = wxBUFFER_CLIENT_AREA)
|
||||||
|
: m_paintdc(window)
|
||||||
|
{
|
||||||
|
// If we're using the virtual window, scale the paint DC as well
|
||||||
|
if (style & wxBUFFER_VIRTUAL_AREA)
|
||||||
|
window->PrepareDC( m_paintdc );
|
||||||
|
|
||||||
|
Init(&m_paintdc, window->GetClientSize(), style);
|
||||||
}
|
}
|
||||||
|
|
||||||
// default copy ctor ok.
|
// default copy ctor ok.
|
||||||
|
Reference in New Issue
Block a user