From: Robin Dunn Date: Sat, 21 Feb 2004 19:09:59 +0000 (+0000) Subject: Restored old wxBufferedDC functionality until it can be decided how to X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/7775e41fd7da98d2b3af5b545d66b1efe10a4069?ds=inline Restored old wxBufferedDC functionality until it can be decided how to correct the current issues without making things worse. Updated docs. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@25904 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/docs/latex/wx/bufferdc.tex b/docs/latex/wx/bufferdc.tex index cdc936b27f..5bf6fcf486 100644 --- a/docs/latex/wx/bufferdc.tex +++ b/docs/latex/wx/bufferdc.tex @@ -12,8 +12,8 @@ \section{\class{wxBufferedDC}}\label{wxbuffereddc} This simple class provides a simple way to avoid flicker: when drawing on it, -everything is in fact drawn on an in-memory buffer (a -\helpref{wxBitmap}{wxbitmap}) and copied to the screen only once, when this +everything is in fact first drawn on an in-memory buffer (a +\helpref{wxBitmap}{wxbitmap}) and then copied to the screen only once, when this object is destroyed. It can be used in the same way as any other device context. wxBufferedDC itself @@ -42,7 +42,7 @@ your \texttt{OnPaint()} handler, you should look at \func{}{wxBufferedDC}{\void} -\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{flags}} +\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}} \func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}} @@ -55,16 +55,12 @@ must not be called after using them. \wxheading{Parameters} \docparam{dc}{The underlying DC: everything drawn to this object will be -flushed to this DC when this object is destroyed.} +flushed to this DC when this object is destroyed. You may pass NULL +in order to just initialize the buffer, and not flush it.} \docparam{area}{The size of the bitmap to be used for buffering (this bitmap is created internally when it is not given explicitely).} -\docparam{flags}{Can currently only include the flag -\texttt{wxBUFFER\_DC\_PRESERVE\_BG} which means that the existing background -of \arg{dc} must be copied to this object before doing anything else, otherwise -the background is overwritten (which is more efficient).} - \docparam{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 @@ -73,7 +69,7 @@ should have appropriate size, anything drawn outside of its bounds is clipped.} \membersection{wxBufferedDC::Init}\label{wxbuffereddcinit} -\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{flags}} +\func{void}{Init}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}} \func{void}{Init}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}} @@ -87,7 +83,7 @@ Please see \helpref{constructors documentation}{wxbuffereddcctor} for details. \membersection{wxBufferedDC::\destruct{wxBufferedDC}}\label{wxbuffereddcdtor} Copies everything drawn on the DC so far to the underlying DC associated with -this object. +this object, if any. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -95,7 +91,7 @@ this object. \section{\class{wxBufferedPaintDC}}\label{wxbufferedpaintdc} This is a subclass of \helpref{wxBufferedDC}{wxbuffereddc} which can be used -inside \texttt{OnPaint()} handler. Just create an object of this class instead +inside of an \texttt{OnPaint()} event handler. Just create an object of this class instead of \helpref{wxPaintDC}{wxpaintdc} 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 \helpref{wxScrolledWindow}{wxscrolledwindow}, you probably @@ -117,9 +113,7 @@ already does this internally for the real underlying wxPaintDC. \membersection{wxBufferedPaintDC::wxBufferedPaintDC}\label{wxbufferedpaintdcctor} -\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{int }{flags}} - -\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{const wxBitmap\& }{buffer}} +\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{const wxBitmap\& }{buffer = wxNullBitmap}} As with \helpref{wxBufferedDC}{wxbuffereddcctor}, you may either provide the bitmap to be used for buffering or let this object create one internally (in @@ -129,6 +123,6 @@ the latter case, the size of the client part of the window is used). \membersection{wxBufferedPaintDC::\destruct{wxBufferedPaintDC}}\label{wxbufferedpaintdcdtor} Copies everything drawn on the DC so far to the window associated with this -object. +object, using a \helpref{wxPaintDC}{wxpaintdc}. diff --git a/include/wx/dcbuffer.h b/include/wx/dcbuffer.h index 0de48cdc10..1b5d728020 100644 --- a/include/wx/dcbuffer.h +++ b/include/wx/dcbuffer.h @@ -81,9 +81,9 @@ public: wxASSERT_MSG( m_dc != 0, _T("No underlying DC associated with wxBufferedDC (anymore)") ); - m_dc->Blit( m_dc->DeviceToLogicalX(0), m_dc->DeviceToLogicalY(0), + m_dc->Blit( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight(), this, - DeviceToLogicalX(0), DeviceToLogicalY(0) ); + 0, 0 ); m_dc = NULL; } @@ -123,6 +123,8 @@ public: wxBufferedPaintDC(wxWindow *window, const wxBitmap& buffer = wxNullBitmap) : m_paintdc(window) { + window->PrepareDC( m_paintdc ); + if( buffer != wxNullBitmap ) Init(&m_paintdc, buffer); else