X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b9048c56f0aa04b2adbb7813f9698abdda15184..3cebfef17b54f9dacc386f090827b8badb2773d2:/wxPython/src/_dc.i diff --git a/wxPython/src/_dc.i b/wxPython/src/_dc.i index 466b5469a5..e61213b451 100644 --- a/wxPython/src/_dc.i +++ b/wxPython/src/_dc.i @@ -168,7 +168,13 @@ public: wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle = wxODDEVEN_RULE); + // TODO: Figure out a good typemap for this... + // Convert the first 3 args from a sequence of sequences? +// void DrawPolyPolygon(int n, int count[], wxPoint points[], +// wxCoord xoffset = 0, wxCoord yoffset = 0, +// int fillStyle = wxODDEVEN_RULE); + // this version puts both optional bitmap and the text into the given // rectangle and aligns is as specified by alignment parameter; it also // will emphasize the character with the given index if it is != -1 and @@ -272,6 +278,15 @@ public: "Get the width, height, decent and leading of the text using the current or specified font.\n" "Works for single as well as multi-line strings."); + + %extend { + wxArrayInt GetPartialTextExtents(const wxString& text) { + wxArrayInt widths; + self->GetPartialTextExtents(text, widths); + return widths; + } + } + // size and resolution // ------------------- @@ -555,35 +570,147 @@ public: //--------------------------------------------------------------------------- %newgroup + +%{ +//-=-=-=-=-=-=-=-=-=-=- + +#if 1 +// Use the standard wxBufferedDC +#include + +#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 { +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 ); + } + + 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; + public: - %pythonAppend wxBufferedDC( wxDC *dc, const wxBitmap &buffer ) + 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 +{ +public: + %pythonAppend wxBufferedDC "self._dc = args[0] # save a ref so the other dc will not be deleted before self"; - %pythonAppend wxBufferedDC( wxDC *dc, const wxSize &area ) - "val._dc = args[0] # save a ref so the other dc will not be deleted before self"; + %nokwargs wxBufferedDC; + // Construct a wxBufferedDC using a user supplied buffer. wxBufferedDC( wxDC *dc, const wxBitmap &buffer ); - // Construct a wxBufferedDC with an internal buffer of 'area' - // (where area is usually something like the size of the window - // being buffered) + // 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 ); + + + // TODO: Keep this one too? + %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 ); - // Blits the buffer to the dc, and detaches the dc from - // the buffer. Usually called in the dtor or by the dtor - // of derived classes if the BufferedDC must blit before - // the derived class (which may own the dc it's blitting - // to) is destroyed. + + // 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 + // the buffer. Usually called in the dtor or by the dtor + // of derived classes if the BufferedDC must blit before + // the derived class (which may own the dc it's blitting + // to) is destroyed. void UnMask(); }; + + +// Creates a double buffered wxPaintDC, optionally allowing the +// user to specify their own buffer to use. class wxBufferedPaintDC : public wxBufferedDC { public: + + // If no bitmap is supplied by the user, a temporary one will be created. wxBufferedPaintDC( wxWindow *window, const wxBitmap &buffer = wxNullBitmap ); + }; @@ -663,7 +790,7 @@ public: %newgroup -#ifdef __WXMSW__ +#if defined(__WXMSW__) || defined(__WXMAC__) %{ #include @@ -681,8 +808,10 @@ public: int GetWidth(); int GetHeight(); +#ifdef __WXMSW__ const wxString& GetFileName() const; - +#endif + %pythoncode { def __nonzero__(self): return self.Ok() } };