]> git.saurik.com Git - wxWidgets.git/commitdiff
Added wxMemoryDC::SelectObjectAsSource() and make SelectObject() unshare
authorVadim Zeitlin <vadim@wxwidgets.org>
Mon, 30 Oct 2006 19:41:46 +0000 (19:41 +0000)
committerVadim Zeitlin <vadim@wxwidgets.org>
Mon, 30 Oct 2006 19:41:46 +0000 (19:41 +0000)
the bitmap to ensure that no other bitmaps are modified; also remove some code
duplication by introducing wxMemoryDCBase (patch 1580745)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42755 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

28 files changed:
docs/latex/wx/bufferdc.tex
docs/latex/wx/memorydc.tex
include/wx/cocoa/dcmemory.h
include/wx/dcmemory.h
include/wx/dfb/dcmemory.h
include/wx/gtk/dcmemory.h
include/wx/gtk1/dcmemory.h
include/wx/mac/carbon/dcmemory.h
include/wx/mgl/dcmemory.h
include/wx/motif/dcmemory.h
include/wx/msw/dcmemory.h
include/wx/os2/dcmemory.h
include/wx/palmos/dcmemory.h
include/wx/x11/dcmemory.h
src/common/effects.cpp
src/dfb/dcmemory.cpp
src/generic/splash.cpp
src/gtk/dcmemory.cpp
src/gtk1/dcmemory.cpp
src/mac/carbon/dcmemory.cpp
src/mgl/dcmemory.cpp
src/motif/dcmemory.cpp
src/msw/dc.cpp
src/msw/dcmemory.cpp
src/msw/dcprint.cpp
src/os2/dcmemory.cpp
src/palmos/dcmemory.cpp
src/x11/dcmemory.cpp

index 903c40d6b4d91964176a758b80b30e228e55b4a1..19d4970eea22a3be2a554278cbbf5ec685916a5b 100644 (file)
@@ -62,7 +62,7 @@ buffering on the systems which already do it automatically.
 
 \func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxSize\& }{area}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
-\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
+\func{}{wxBufferedDC}{\param{wxDC *}{dc}, \param{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.
@@ -93,7 +93,7 @@ device context).}
 
 \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}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
+\func{void}{Init}{\param{wxDC *}{dc}, \param{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.
@@ -143,7 +143,7 @@ already does this internally for the real underlying wxPaintDC.
 
 \membersection{wxBufferedPaintDC::wxBufferedPaintDC}\label{wxbufferedpaintdcctor}
 
-\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{const wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
+\func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{wxBitmap\& }{buffer}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
 \func{}{wxBufferedPaintDC}{\param{wxWindow *}{window}, \param{int }{style = wxBUFFER\_CLIENT\_AREA}}
 
index eadaa1d9919b73acc45b94e2414f81b0e1b93df9..d2fddb79d168281a3429bb2a14e371cb9fe2213f 100644 (file)
@@ -41,26 +41,55 @@ can be reselected into another memory DC.
 
 \membersection{wxMemoryDC::wxMemoryDC}\label{wxmemorydcctor}
 
-\func{}{wxMemoryDC}{\param{const wxBitmap\& }{bitmap = wxNullBitmap}}
+\func{}{wxMemoryDC}{\void}
 
 Constructs a new memory device context.
 
-Use the {\it Ok} member to test whether the constructor was successful
-in creating a usable device context. If you don't pass a valid bitmap
-to the constructor, don't forget to select a bitmap into the DC before
-drawing on it.
+Use the \helpref{IsOk}{wxdcisok} member to test whether the constructor was successful
+in creating a usable device context.
+Don't forget to select a bitmap into the DC before drawing on it.
+
+\func{}{wxMemoryDC}{\param{wxBitmap\& }{bitmap}}
+
+Constructs a new memory device context and calls \helpref{SelectObject}{wxmemorydcselectobject}
+with the given bitmap.
+Use the \helpref{IsOk}{wxdcisok} member to test whether the constructor was successful
+in creating a usable device context.
+
 
 \membersection{wxMemoryDC::SelectObject}\label{wxmemorydcselectobject}
 
-\func{void}{SelectObject}{\param{const wxBitmap\& }{bitmap}}
+\func{void}{SelectObject}{\param{wxBitmap\& }{bitmap}}
+
+Works exactly like \helpref{SelectObjectAsSource}{wxmemorydcselectobjectassource} but
+this is the function you should use when you select a bitmap because you want to modify
+it, e.g. drawing on this DC.
+
+Be careful to use this function and not \helpref{SelectObjectAsSource}{wxmemorydcselectobjectassource}
+when you want to modify the bitmap you are selecting otherwise you may incurr in some
+problems related to wxBitmap being a reference counted object
+(see \helpref{reference counting overview}{trefcount}).
+
+\wxheading{See also}
+
+\helpref{wxDC::DrawBitmap}{wxdcdrawbitmap}
+
+
+
+\membersection{wxMemoryDC::SelectObjectAsSource}\label{wxmemorydcselectobjectassource}
+
+\func{void}{SelectObjectAsSource}{\param{const wxBitmap\& }{bitmap}}
 
 Selects the given bitmap into the device context, to use as the memory
 bitmap. Selecting the bitmap into a memory DC allows you to draw into
-the DC (and therefore the bitmap) and also to use {\bf Blit} to copy
+the DC (and therefore the bitmap) and also to use \helpref{wxDC::Blit}{wxdcblit} to copy
 the bitmap to a window. For this purpose, you may find \helpref{wxDC::DrawIcon}{wxdcdrawicon}\rtfsp
 easier to use instead.
 
-If the argument is wxNullBitmap (or some other uninitialised wxBitmap) the current bitmap is selected out of the device
-context, and the original bitmap restored, allowing the current bitmap to
+If the argument is wxNullBitmap (or some other uninitialised wxBitmap) the current bitmap is
+selected out of the device context, and the original bitmap restored, allowing the current bitmap to
 be destroyed safely.
 
+\wxheading{See also}
+
+\helpref{wxMemoryDC::SelectObject}{wxmemorydcselectobject}
index e5126c689618ce84bef7cd151752b40e4170897b..f71534cfcb2de23b861b5999dc306b947f884c00 100644 (file)
 
 #include "wx/dc.h"
 
-class WXDLLEXPORT wxMemoryDC: public wxDC
+class WXDLLEXPORT wxMemoryDC: public wxDC, public wxMemoryDCBase
 {
     DECLARE_DYNAMIC_CLASS(wxMemoryDC)
+
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC( wxDC *dc ); // Create compatible DC
     virtual ~wxMemoryDC(void);
-    virtual void SelectObject(const wxBitmap& bitmap);
+
     virtual void DoGetSize(int *width, int *height) const;
+    virtual void DoSelect(const wxBitmap& bitmap);
+
 protected:
     wxBitmap m_selectedBitmap;
     WX_NSImage m_cocoaNSImage;
@@ -34,6 +38,9 @@ protected:
     virtual bool CocoaDoBlitOnFocusedDC(wxCoord xdest, wxCoord ydest,
         wxCoord width, wxCoord height, wxCoord xsrc, wxCoord ysrc,
         int logicalFunc, bool useMask, wxCoord xsrcMask, wxCoord ysrcMask);
+
+private:
+    void Init();
 };
 
 #endif
index d1cf8efde93f3d949071e3e683828667fa6fffaa..55e6724e95946b413e3922f9e1c8916678dc88f7 100644 (file)
 
 #include "wx/defs.h"
 
+// NOTE: different native implementations of wxMemoryDC will derive from
+//       different wxDC classes (wxPaintDC, wxWindowDC, etc), so that
+//       we cannot derive wxMemoryDCBase from wxDC and then use it as the
+//       only base class for native impl of wxMemoryDC...
+class wxMemoryDCBase
+{
+public:
+    wxMemoryDCBase() { }
+
+    // avoid warnings about having virtual functions but non virtual dtor
+    virtual ~wxMemoryDCBase() { }
+
+    // select the given bitmap to draw on it
+    void SelectObject(wxBitmap& bmp)
+    {
+        // make sure that the given wxBitmap is not sharing its data with other
+        // wxBitmap instances as its contents will be modified by any drawing
+        // operation done on this DC
+        if (bmp.IsOk())
+            bmp.UnShare();
+
+        DoSelect(bmp);
+    }
+
+    // select the given bitmap for read-only
+    virtual void SelectObjectAsSource(const wxBitmap& bmp)
+    {
+        DoSelect(bmp);
+    }
+
+    virtual void DoSelect(const wxBitmap& bmp) = 0;
+};
+
 #if defined(__WXPALMOS__)
 #include "wx/palmos/dcmemory.h"
 #elif defined(__WXMSW__)
index 86ce650a72be3e07e83c961c1e3c598012dfd0f5..d5b1a72d9b7a1a865f74f55a69bef8fcea23e342 100644 (file)
 #include "wx/dc.h"
 #include "wx/bitmap.h"
 
-class WXDLLIMPEXP_CORE wxMemoryDC : public wxDC
+class WXDLLIMPEXP_CORE wxMemoryDC : public wxDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC(wxDC *dc); // create compatible DC
 
-    virtual void SelectObject(const wxBitmap& bitmap);
-
     // implementation from now on:
 
     wxBitmap GetSelectedObject() const { return m_bmp; }
 
+protected:
+    virtual void DoSelect(const wxBitmap& bitmap);
+
 private:
+    void Init();
+
     wxBitmap m_bmp;
 
     DECLARE_DYNAMIC_CLASS(wxMemoryDC)
index a8d6434ad39e65e083357b39d0ec0f2f7205bf18..4afeaf4bceff8b154a7ce7b8244108cd3dbf74eb 100644 (file)
@@ -23,13 +23,13 @@ class WXDLLIMPEXP_CORE wxMemoryDC;
 // wxMemoryDC
 //-----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC
+class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() : wxWindowDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) : wxWindowDC() { Init(); SelectObject(bitmap); }
     wxMemoryDC( wxDC *dc ); // Create compatible DC
     virtual ~wxMemoryDC();
-    virtual void SelectObject( const wxBitmap& bitmap );
 
     // these get reimplemented for mono-bitmaps to behave
     // more like their Win32 couterparts. They now interpret
@@ -47,6 +47,10 @@ public:
 
 protected:
     void DoGetSize( int *width, int *height ) const;
+    virtual void DoSelect(const wxBitmap& bitmap);
+
+private:
+    void Init();
     virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const 
     { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmap(*subrect); }
 
index ba5b573e5fde8d32cbde7e5641ee78fd0d8b75fc..691d75777691d84244bf943b8c9df51acf14b611 100644 (file)
@@ -23,13 +23,13 @@ class WXDLLIMPEXP_CORE wxMemoryDC;
 // wxMemoryDC
 //-----------------------------------------------------------------------------
 
-class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC
+class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC( wxDC *dc ); // Create compatible DC
     virtual ~wxMemoryDC();
-    virtual void SelectObject( const wxBitmap& bitmap );
     void DoGetSize( int *width, int *height ) const;
 
     // these get reimplemented for mono-bitmaps to behave
@@ -45,7 +45,12 @@ public:
     // implementation
     wxBitmap  m_selected;
 
+protected:
+    virtual void DoSelect(const wxBitmap& bitmap);
+
 private:
+    void Init();
+
     DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 };
 
index 58a26fee28292f9bd947039c8ec32ae2a1af510d..d2eb3d4acc3527d585dd444a0b339da2cca5c60a 100644 (file)
 
 #include "wx/dcclient.h"
 
-class WXDLLEXPORT wxMemoryDC: public wxPaintDC
+class WXDLLEXPORT wxMemoryDC: public wxPaintDC, public wxMemoryDCBase
 {
   DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 
-  public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+public:
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC( wxDC *dc ); // Create compatible DC
     virtual ~wxMemoryDC(void);
-    virtual void SelectObject( const wxBitmap& bitmap );
+
     const wxBitmap& GetSelectedBitmap() const { return m_selected; }
     wxBitmap    GetSelectedBitmap() { return m_selected; }
 
@@ -32,8 +33,11 @@ protected:
     virtual void DoGetSize( int *width, int *height ) const;
     virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const 
     { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmap(*subrect); }
+    virtual void DoSelect(const wxBitmap& bitmap);
+
+private:
+    void Init();
 
-  private:
     wxBitmap  m_selected;
 };
 
index 8bda585ff4ab37b2fcc3a7b765eb8535597db485..39804f20f119018863af0b84b582aad3c2fed5bb 100644 (file)
@@ -23,13 +23,13 @@ class WXDLLEXPORT wxMemoryDC;
 // wxMemoryDC
 //-----------------------------------------------------------------------------
 
-class WXDLLEXPORT wxMemoryDC : public wxDC
+class WXDLLEXPORT wxMemoryDC : public wxDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC(wxDC *dc); // Create compatible DC
     virtual ~wxMemoryDC();
-    virtual void SelectObject(const wxBitmap& bitmap);
 
     // these get reimplemented for mono-bitmaps to behave
     // more like their Win32 couterparts. They now interpret
@@ -45,7 +45,12 @@ public:
     
     wxBitmap GetSelectedObject() const { return m_selected; }
 
+protected:
+    virtual void DoSelect(const wxBitmap& bitmap);
+
 private:
+    void Init();
+
     DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 };
 
index 0d453f55058b1457f9a302dc852d628d42965418..6cce52c26bfa0601f763e75417e8f9a96c46fb80 100644 (file)
 
 #include "wx/dcclient.h"
 
-class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC
+class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC, public wxMemoryDCBase
 {
     DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC( wxDC *dc ); // Create compatible DC
     virtual ~wxMemoryDC();
 
-    virtual void SelectObject( const wxBitmap& bitmap );
-
     void DoGetSize( int *width, int *height ) const;
 
     wxBitmap& GetBitmap() const { return (wxBitmap&) m_bitmap; }
 
+protected:
+    virtual void DoSelect(const wxBitmap& bitmap);
+
 private:
     friend class wxPaintDC;
 
+    void Init();
+
     wxBitmap  m_bitmap;
 };
 
index 1e138b2e329f7f0cfdaccf813f2a038bf7ff2202..20f2005856939a734573a929f9079141eac79625 100644 (file)
 
 #include "wx/dcclient.h"
 
-class WXDLLEXPORT wxMemoryDC : public wxDC
+class WXDLLEXPORT wxMemoryDC : public wxDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { CreateCompatible(NULL); Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { CreateCompatible(NULL); Init(); SelectObject(bitmap); }
     wxMemoryDC(wxDC *dc); // Create compatible DC
 
-    virtual void SelectObject(const wxBitmap& bitmap);
 
 protected:
     // override some base class virtuals
     virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
     virtual void DoGetSize(int* width, int* height) const;
+    virtual void DoSelect(const wxBitmap& bitmap);
 
     // create DC compatible with the given one or screen if dc == NULL
     bool CreateCompatible(wxDC *dc);
index 33001f619e7cf9fc6e5d0ba08a65f440d252a644..07927df52c99eb43cce26017beef2904ff6f3a08 100644 (file)
 
 #include "wx/dcclient.h"
 
-class WXDLLEXPORT wxMemoryDC: public wxDC
+class WXDLLEXPORT wxMemoryDC: public wxDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { CreateCompatible(NULL); Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { CreateCompatible(NULL); Init(); SelectObject(bitmap); }
     wxMemoryDC(wxDC* pDC); // Create compatible DC
 
-    virtual void SelectObject(const wxBitmap& rBitmap);
 protected:
     // override some base class virtuals
     virtual void DoGetSize( int* pWidth
                            ,int* pHeight
                           ) const;
+    virtual void DoSelect(const wxBitmap& bitmap);
+
     // create DC compatible with the given one or screen if dc == NULL
     bool CreateCompatible(wxDC* pDC);
 
index 56d6c305f497b95a618c02df4b67704138b2b695..580ea68bbc4cdbea4dce0ebea4d33b3e6584144f 100644 (file)
 
 #include "wx/dcclient.h"
 
-class WXDLLEXPORT wxMemoryDC : public wxDC
+class WXDLLEXPORT wxMemoryDC : public wxDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC(wxDC *dc); // Create compatible DC
 
-    virtual void SelectObject(const wxBitmap& bitmap);
-
 protected:
     // override some base class virtuals
     virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
     virtual void DoGetSize(int* width, int* height) const;
+    virtual void DoSelect(const wxBitmap& bitmap);
 
     // create DC compatible with the given one or screen if dc == NULL
     bool CreateCompatible(wxDC *dc);
index 40c97fc7f0ab715b0f01292c9ff76eb1dde5309e..0a86134f666633ffadf4c858984e6e11e71b4fc2 100644 (file)
 
 #include "wx/dcclient.h"
 
-class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC
+class WXDLLIMPEXP_CORE wxMemoryDC : public wxWindowDC, public wxMemoryDCBase
 {
 public:
-    wxMemoryDC( const wxBitmap& bitmap = wxNullBitmap );
+    wxMemoryDC() { Init(); }
+    wxMemoryDC(wxBitmap& bitmap) { Init(); SelectObject(bitmap); }
     wxMemoryDC( wxDC *dc ); // Create compatible DC
     virtual ~wxMemoryDC();
-    virtual void SelectObject( const wxBitmap& bitmap );
 
     // implementation
     wxBitmap  m_selected;
 
 protected:
-    void DoGetSize( int *width, int *height ) const;
+    virtual void DoGetSize( int *width, int *height ) const;
+    virtual void DoSelect(const wxBitmap& bitmap);
+
+private:
+    void Init();
 
     DECLARE_DYNAMIC_CLASS(wxMemoryDC)
 };
index e72542ecf4d22012ab62be91240fb3f31d175797..4439ff42bae167624d271913988d00289fa10ca1 100644 (file)
@@ -102,7 +102,7 @@ bool wxEffects::TileBitmap(const wxRect& rect, wxDC& dc, const wxBitmap& bitmap)
     }
 #endif // wxUSE_PALETTE
 
-    dcMem.SelectObject(bitmap);
+    dcMem.SelectObjectAsSource(bitmap);
 
     int i, j;
     for (i = rect.x; i < rect.x + rect.width; i += w)
index 036fcb81e108287e965a9c9f3fcdf4877386c071..eb83b923d3672fb822e7c051632cb457fd90cab4 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
+void wxMemoryDC::Init()
 {
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC(wxDC *WXUNUSED(dc))
 {
 }
 
-void wxMemoryDC::SelectObject(const wxBitmap& bitmap)
+void wxMemoryDC::DoSelect(const wxBitmap& bitmap)
 {
     m_bmp = bitmap;
 
index 7695803aab4b8428a4c0f4a14b010a4c035b6f87..3fded78761c6de9d4ed3d6569b1a301b940b64dd 100644 (file)
@@ -149,7 +149,7 @@ static void wxDrawSplashBitmap(wxDC& dc, const wxBitmap& bitmap, int WXUNUSED(x)
     }
 #endif // USE_PALETTE_IN_SPLASH
 
-    dcMem.SelectObject(bitmap);
+    dcMem.SelectObjectAsSource(bitmap);
     dc.Blit(0, 0, bitmap.GetWidth(), bitmap.GetHeight(), & dcMem, 0, 0);
     dcMem.SelectObject(wxNullBitmap);
 
index f24a06e95eb971cae9f656d265781f7366bd6698..47c9a673f5c8a7b365793c88f4978276d6ec8d19 100644 (file)
@@ -21,8 +21,7 @@
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-   : wxWindowDC()
+void wxMemoryDC::Init()
 {
     m_ok = false;
 
@@ -34,22 +33,12 @@ wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
     pango_context_set_language( m_context, gtk_get_default_language() );
     m_layout = pango_layout_new( m_context );
     m_fontdesc = pango_font_description_copy( pango_context_get_font_description( m_context ) );
-
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
   : wxWindowDC()
 {
-    m_ok = false;
-
-    m_cmap = gtk_widget_get_default_colormap();
-
-    m_context = gdk_pango_context_get();
-    pango_context_set_language( m_context, gtk_get_default_language() );
-    m_layout = pango_layout_new( m_context );
-    m_fontdesc = pango_font_description_copy( pango_context_get_font_description( m_context ) );
+    Init();
 }
 
 wxMemoryDC::~wxMemoryDC()
@@ -57,9 +46,10 @@ wxMemoryDC::~wxMemoryDC()
     g_object_unref(m_context);
 }
 
-void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
 {
     Destroy();
+
     m_selected = bitmap;
     if (m_selected.Ok())
     {
index add3cc54f5daaa05e60b344f38806f3e52952c35..a27cce10412dd96bc01d375566dac33c85e500ca 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-    : wxWindowDC()
+void wxMemoryDC::Init()
 {
     m_ok = false;
 
     m_cmap = gtk_widget_get_default_colormap();
-
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
           : wxWindowDC()
 {
-    m_ok = false;
-
-    m_cmap = gtk_widget_get_default_colormap();
-
+    Init();
 }
 
 wxMemoryDC::~wxMemoryDC()
 {
 }
 
-void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
 {
     Destroy();
+
     m_selected = bitmap;
     if (m_selected.Ok())
     {
index ba8ecbe2711b8f131bafd7085a9003991ba3083a..f2519aef95d1f6ed5725203395de2fd30a45ad8e 100644 (file)
@@ -22,8 +22,7 @@
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxPaintDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-: m_selected()
+void wxMemoryDC::Init()
 {
     m_ok = true;
     SetBackground(*wxWHITE_BRUSH);
@@ -31,20 +30,12 @@ wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
     SetPen(*wxBLACK_PEN);
     SetFont(*wxNORMAL_FONT);
     m_ok = false;
-
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
 : m_selected()
 {
-    m_ok = true;
-    SetBackground(*wxWHITE_BRUSH);
-    SetBrush(*wxWHITE_BRUSH);
-    SetPen(*wxBLACK_PEN);
-    SetFont(*wxNORMAL_FONT);
-    m_ok = false;
+    Init();
 }
 
 wxMemoryDC::~wxMemoryDC()
@@ -63,7 +54,7 @@ wxMemoryDC::~wxMemoryDC()
     }
 }
 
-void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
 {
     if ( m_selected.Ok() )
     {
index 6017861c05c98fb6e2e121ad9c22b0af5533d278..d09e8080f84fe0915e91499fb1b99ebffeed04cf 100644 (file)
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-    : wxDC()
+void wxMemoryDC::Init()
 {
     m_isMemDC = true;
-
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC(wxDC *WXUNUSED(dc)) : wxDC()
 {
-    m_isMemDC = true;
+    Init();
 }
 
 wxMemoryDC::~wxMemoryDC()
 {
 }
 
-void wxMemoryDC::SelectObject(const wxBitmap& bitmap)
+void wxMemoryDC::DoSelect(const wxBitmap& bitmap)
 {
     if ( bitmap.Ok() )
     {
index 789dac864d6848c09506ed7f5e7ea43683e45b84..81f4da0b3e879c654f38105cd474fb246e4079d8 100644 (file)
@@ -35,7 +35,7 @@
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxWindowDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
+void wxMemoryDC::Init()
 {
     m_ok = true;
     m_display = wxGetDisplay();
@@ -57,9 +57,6 @@ wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
     SetBrush (* wxWHITE_BRUSH);
     SetPen (* wxBLACK_PEN);
     SetFont(wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT));
-    
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC( wxDC* dc )
@@ -92,7 +89,7 @@ wxMemoryDC::~wxMemoryDC(void)
 {
 }
 
-void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
 {
     m_bitmap = bitmap;
 
index f22685ba9726e53ae9dffc683aaee7e4b377e776..8c7a50a98264b557e9f914cb1659746fef2249a4 100644 (file)
@@ -930,7 +930,7 @@ void wxDC::DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
         // transparent pen) one pixel smaller in both directions and we want them
         // to have the same size regardless of which pen is used - adjust
 
-        // I wonder if this shouldnยดt be done after the LOG2DEV() conversions. RR.
+        // I wonder if this shouldnt be done after the LOG2DEV() conversions. RR.
         if ( m_pen.GetStyle() == wxTRANSPARENT )
         {
             // Apparently not needed for WinCE (see e.g. Life! demo)
@@ -1245,7 +1245,8 @@ void wxDC::DoDrawBitmap( const wxBitmap &bmp, wxCoord x, wxCoord y, bool useMask
             // Rather than reproduce wxDC::Blit, let's do it at the wxWin API
             // level
             wxMemoryDC memDC;
-            memDC.SelectObject(bmp);
+
+            memDC.SelectObjectAsSource(bmp);
 
             Blit(x, y, width, height, &memDC, 0, 0, wxCOPY, useMask);
 
index 36ff844b21afd6fe69fceee841d2af95641094bc..5565670444c6e91eeed472bd8bb43d5faa3ef5f3 100644 (file)
@@ -47,16 +47,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
 // wxMemoryDC
 // ----------------------------------------------------------------------------
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-{
-    CreateCompatible(NULL);
-
-    Init();
-    
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
-}
-
 wxMemoryDC::wxMemoryDC(wxDC *dc)
 {
     wxCHECK_RET( dc, _T("NULL dc in wxMemoryDC ctor") );
@@ -91,7 +81,7 @@ bool wxMemoryDC::CreateCompatible(wxDC *dc)
     return m_ok;
 }
 
-void wxMemoryDC::SelectObject(const wxBitmap& bitmap)
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap)
 {
     // select old bitmap out of the device context
     if ( m_oldBitmap )
index 32dad051fee9f63d5b5bafea474973b3e4c17da9..2450426227b35d3390cfbf08097eeadcf56085fc 100644 (file)
@@ -399,7 +399,8 @@ void wxPrinterDC::DoDrawBitmap(const wxBitmap& bmp,
     {
         // no support for StretchDIBits() or an error occurred if we got here
         wxMemoryDC memDC;
-        memDC.SelectObject(bmp);
+
+        memDC.SelectObjectAsSource(bmp);
 
         Blit(x, y, width, height, &memDC, 0, 0, wxCOPY, useMask);
 
index 770e42bce458316b084417df267d767f9031c381..1332c9d2fbb91bbd0cbfa09e4ff64cd6b2b80edc 100644 (file)
@@ -28,15 +28,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
 // Memory DC
 /////////////////////////////////////////////////////////////////////////////
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-{
-    CreateCompatible(NULL);
-    Init();
-
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
-} // end of wxMemoryDC::wxMemoryDC
-
 wxMemoryDC::wxMemoryDC(
   wxDC*                             pOldDC
 )
@@ -121,7 +112,7 @@ bool wxMemoryDC::CreateCompatible( wxDC* WXUNUSED(pDC) )
     return m_ok;
 } // end of wxMemoryDC::CreateCompatible
 
-void wxMemoryDC::SelectObject(
+void wxMemoryDC::DoSelect(
   const wxBitmap&                   rBitmap
 )
 {
@@ -168,6 +159,7 @@ void wxMemoryDC::SelectObject(
                    );
         m_vSelectedBitmap.SetSelectedInto(NULL);
     }
+
     m_vSelectedBitmap = rBitmap;
 
 
index 96487eba36b0831a7db43ad2ee2421c8c2fe7484..5211678a189c951fdb35203a35686e1b58998438 100644 (file)
@@ -45,12 +45,6 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC, wxDC)
 // wxMemoryDC
 // ----------------------------------------------------------------------------
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-{
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
-}
-
 wxMemoryDC::wxMemoryDC(wxDC *dc)
 {
 }
@@ -64,7 +58,7 @@ bool wxMemoryDC::CreateCompatible(wxDC *dc)
     return false;
 }
 
-void wxMemoryDC::SelectObject(const wxBitmap& bitmap)
+void wxMemoryDC::DoSelect(const wxBitmap& bitmap)
 {
 }
 
index f5a4bddb6455fe576db0706f6c38d0f6ad1677ce..f2019230e0a27500246a3cff8b1b84a13e745753 100644 (file)
@@ -23,8 +23,7 @@
 
 IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxWindowDC)
 
-wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
-    : wxWindowDC()
+void wxMemoryDC::Init()
 {
     m_ok = false;
 
@@ -32,27 +31,19 @@ wxMemoryDC::wxMemoryDC( const wxBitmap& bitmap )
 
     int screen = DefaultScreen( wxGlobalDisplay() );
     m_cmap = (WXColormap) DefaultColormap( wxGlobalDisplay(), screen );
-
-    if ( bitmap.IsOk() )
-        SelectObject(bitmap);
 }
 
 wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) )
   : wxWindowDC()
 {
-    m_ok = false;
-
-    m_display = (WXDisplay *) wxGlobalDisplay();
-
-    int screen = DefaultScreen( wxGlobalDisplay() );
-    m_cmap = (WXColormap) DefaultColormap( wxGlobalDisplay(), screen );
+    Init();
 }
 
 wxMemoryDC::~wxMemoryDC()
 {
 }
 
-void wxMemoryDC::SelectObject( const wxBitmap& bitmap )
+void wxMemoryDC::DoSelect( const wxBitmap& bitmap )
 {
     Destroy();