]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxBUFFER_VIRTUAL_AREA, wxBUFFER_CLIENT_AREA to buffered DC
authorJulian Smart <julian@anthemion.co.uk>
Thu, 3 Mar 2005 06:56:15 +0000 (06:56 +0000)
committerJulian Smart <julian@anthemion.co.uk>
Thu, 3 Mar 2005 06:56:15 +0000 (06:56 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@32572 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

docs/changes.txt
docs/latex/wx/bufferdc.tex
include/wx/dcbuffer.h

index 261d4441eae4e67fce317b3b006f9dd2a1750327..17d1350f089f208dddc60bef720dd566cdb7a95a 100644 (file)
@@ -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:
 
index 3a3af78022e1d5674c1c0974d3ce00ea59d7c90b..0e903887ec742313e04809c8e5a6b10bac242ecc 100644 (file)
@@ -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}
 
index 6cd63b8d60ee4cbc774510289649d10cb50f97f5..e7ccff4f55ba1f1a261ae28b3fd7a4dbe4adbdaa 100644 (file)
 // 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.