]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/src/_dc.i
Script updates
[wxWidgets.git] / wxPython / src / _dc.i
index 964766e01429fd35d650a6d3c9b96a52fe4e651f..f786ae7c45d7e327e7c687270c1cb3226af960bc 100644 (file)
@@ -569,18 +569,99 @@ public:
 //---------------------------------------------------------------------------
 %newgroup
 
-enum
+
+%{
+//-=-=-=-=-=-=-=-=-=-=-    
+
+#if 1
+// Use the standard wxBufferedDC
+#include <wx/dcbuffer.h>
+
+#else
+
+//  Or, temporarily put a set of classes here similar to the old buffered DC
+//  classes until the real ones can be fixed to work "correctly" again.
+
+class wxBufferedDC : public wxMemoryDC
 {
-    // this is more efficient and hence default
-    wxBUFFER_DC_OVERWRITE_BG = 0,
+private:
+    wxDC        *m_dc;
+    wxBitmap    m_buffer;
+
+public:
+
+    wxBufferedDC() : m_dc( 0 ) {}
+    
+    wxBufferedDC( wxDC *dc, const wxBitmap &buffer )
+        : m_dc( dc ), m_buffer( buffer )
+    {
+        SelectObject( m_buffer );
+    }
+       
+    wxBufferedDC( wxDC *dc, const wxSize &area )
+        : m_dc( dc ), m_buffer( area.GetWidth(), area.GetHeight() )
+    {
+        SelectObject( m_buffer );
+    }
+
+    ~wxBufferedDC() {
+        if( m_dc != 0 )
+            UnMask();
+    }
+
+
+    void Init( wxDC *dc, const wxBitmap &buffer ) {
+        wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
+                      _T("wxBufferedDC already initialised") );
+        m_dc = dc;
+        m_buffer = buffer;
+        SelectObject( m_buffer );
+    }
+
+    void Init( wxDC *dc, const wxSize &area ) {
+        wxASSERT_MSG( m_dc == 0 && m_buffer == wxNullBitmap,
+                      _T("wxBufferedDC already initialised") );
+        m_dc = dc;
+        m_buffer = wxBitmap( area.GetWidth(), area.GetHeight() );
+        SelectObject( m_buffer );
+    }
 
-    // preserve the old background: more time consuming
-    wxBUFFER_DC_PRESERVE_BG = 1,
+    void UnMask() {
+        wxASSERT_MSG( m_dc != 0, _T("No low level DC associated with buffer (anymore)") );
+        m_dc->Blit( 0, 0, m_buffer.GetWidth(), m_buffer.GetHeight(), this, 0, 0 );
+        m_dc = 0;
+    }
+};
+
+class wxBufferedPaintDC : public wxBufferedDC
+{
+private:
+    wxPaintDC    m_paintdc;
 
-    // flags used by default
-    wxBUFFER_DC_DEFAULT = wxBUFFER_DC_OVERWRITE_BG
+public:
+    wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer = wxNullBitmap )
+        : m_paintdc( window )
+    {
+        window->PrepareDC( m_paintdc );
+
+        if( buffer != wxNullBitmap )
+            Init( &m_paintdc, buffer );
+        else
+            Init( &m_paintdc, window->GetClientSize() );
+    }
+        
+    ~wxBufferedPaintDC() {
+        UnMask();
+    }
 };
 
+#endif
+//-=-=-=-=-=-=-=-=-=-=-    
+%}
+
+
+
 
 class wxBufferedDC : public wxMemoryDC
 {
@@ -596,13 +677,17 @@ 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, int flags = wxBUFFER_DC_DEFAULT );
+    wxBufferedDC( wxDC *dc, const wxSize &area );
 
     
     // TODO: Keep this one too?
-    %pythonAppend wxBufferedDC( wxDC *dc, const wxSize &area, int flags = wxBUFFER_DC_DEFAULT )
+    %pythonAppend wxBufferedDC( wxDC *dc, const wxSize &area )
         "val._dc = args[0] # save a ref so the other dc will not be deleted before self";
-    %name(BufferedDCInternalBuffer) wxBufferedDC( wxDC *dc, const wxSize &area, int flags = wxBUFFER_DC_DEFAULT );
+    %name(BufferedDCInternalBuffer) wxBufferedDC( wxDC *dc, const wxSize &area );
+
+    
+    // The buffer is blit to the real DC when the BufferedDC is destroyed.
+    ~wxBufferedDC();
 
     
     // Blits the buffer to the dc, and detaches the dc from
@@ -614,16 +699,16 @@ public:
 };
 
 
+
+
+// Creates a double buffered wxPaintDC, optionally allowing the
+// user to specify their own buffer to use.
 class wxBufferedPaintDC : public wxBufferedDC
 {
 public:
 
-    %nokwargs wxBufferedPaintDC;
-    
-    wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer );
-
-    // this ctor creates a bitmap of the size of the window for buffering
-    wxBufferedPaintDC(wxWindow *window, int flags = wxBUFFER_DC_DEFAULT);
+    // If no bitmap is supplied by the user, a temporary one will be created.
+    wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer = wxNullBitmap );
 
 };