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:
parent
fb113b165e
commit
265a3864bb
@ -7,11 +7,16 @@ wxWidgets 2.5 Change Log - For more verbose changes, see the manual
|
||||
|
||||
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
|
||||
GetBitmap is renamed GetBitmapPtr.
|
||||
- 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:
|
||||
|
||||
|
@ -42,9 +42,9 @@ your \texttt{OnPaint()} handler, you should look at
|
||||
|
||||
\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
|
||||
\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
|
||||
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}
|
||||
|
||||
\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.
|
||||
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}
|
||||
|
||||
\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
|
||||
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 {\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}
|
||||
|
||||
|
@ -20,18 +20,27 @@
|
||||
// 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
|
||||
{
|
||||
public:
|
||||
// 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.
|
||||
wxBufferedDC(wxDC *dc, const wxBitmap &buffer)
|
||||
wxBufferedDC(wxDC *dc, const wxBitmap &buffer, int style = wxBUFFER_CLIENT_AREA)
|
||||
: m_dc( dc ),
|
||||
m_buffer( buffer )
|
||||
m_buffer( buffer ),
|
||||
m_style(style)
|
||||
{
|
||||
UseBuffer();
|
||||
}
|
||||
@ -39,9 +48,11 @@ public:
|
||||
// Construct a wxBufferedDC with an internal buffer of 'area'
|
||||
// (where area is usually something like the size of the window
|
||||
// being buffered)
|
||||
wxBufferedDC(wxDC *dc, const wxSize &area)
|
||||
wxBufferedDC(wxDC *dc, const wxSize &area, int style = wxBUFFER_CLIENT_AREA)
|
||||
: m_dc( dc ),
|
||||
m_buffer( area.GetWidth(), area.GetHeight() )
|
||||
m_buffer( area.GetWidth(), area.GetHeight() ),
|
||||
m_style(style)
|
||||
|
||||
{
|
||||
UseBuffer();
|
||||
}
|
||||
@ -56,18 +67,19 @@ public:
|
||||
|
||||
// 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.
|
||||
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,
|
||||
_T("wxBufferedDC already initialised") );
|
||||
m_dc = dc;
|
||||
m_buffer = buffer;
|
||||
m_style = style;
|
||||
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
|
||||
@ -81,8 +93,10 @@ public:
|
||||
wxASSERT_MSG( m_dc != 0,
|
||||
_T("No underlying DC associated with wxBufferedDC (anymore)") );
|
||||
|
||||
wxCoord x, y;
|
||||
GetDeviceOrigin(& x, & y);
|
||||
wxCoord x=0, y=0;
|
||||
|
||||
if (m_style & wxBUFFER_CLIENT_AREA)
|
||||
GetDeviceOrigin(& x, & y);
|
||||
|
||||
m_dc->Blit( 0, 0,
|
||||
m_buffer.GetWidth(), m_buffer.GetHeight(), this,
|
||||
@ -90,6 +104,10 @@ public:
|
||||
m_dc = NULL;
|
||||
}
|
||||
|
||||
// Set and get the style
|
||||
void SetStyle(int style) { m_style = style; }
|
||||
int GetStyle() const { return m_style; }
|
||||
|
||||
private:
|
||||
// check that the bitmap is valid and use it
|
||||
void UseBuffer()
|
||||
@ -109,6 +127,9 @@ private:
|
||||
// the buffer (selected in this DC)
|
||||
wxBitmap m_buffer;
|
||||
|
||||
// the buffering style
|
||||
int m_style;
|
||||
|
||||
DECLARE_NO_COPY_CLASS(wxBufferedDC)
|
||||
};
|
||||
|
||||
@ -122,14 +143,29 @@ private:
|
||||
class wxBufferedPaintDC : public wxBufferedDC
|
||||
{
|
||||
public:
|
||||
// If no bitmap is supplied by the user, a temporary one wil; be created.
|
||||
wxBufferedPaintDC(wxWindow *window, const wxBitmap& buffer = wxNullBitmap)
|
||||
// If no bitmap is supplied by the user, a temporary one will be created.
|
||||
wxBufferedPaintDC(wxWindow *window, const wxBitmap& buffer, int style = wxBUFFER_CLIENT_AREA)
|
||||
: 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 )
|
||||
Init(&m_paintdc, buffer);
|
||||
Init(&m_paintdc, buffer, style);
|
||||
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.
|
||||
|
Loading…
Reference in New Issue
Block a user