diff --git a/include/wx/gtk/dc.h b/include/wx/gtk/dc.h index a778ba23db..19f11b607c 100644 --- a/include/wx/gtk/dc.h +++ b/include/wx/gtk/dc.h @@ -95,7 +95,6 @@ public: virtual void ComputeScaleAndOrigin(); virtual GdkWindow* GetGDKWindow() const { return NULL; } - virtual wxBitmap GetSelectedBitmap() const { return wxNullBitmap; } protected: // implementation diff --git a/include/wx/gtk/dcmemory.h b/include/wx/gtk/dcmemory.h index 94de61a1f3..a0fb9d6c23 100644 --- a/include/wx/gtk/dcmemory.h +++ b/include/wx/gtk/dcmemory.h @@ -35,14 +35,17 @@ public: virtual void SetTextBackground( const wxColour &col ); // implementation - virtual wxBitmap GetSelectedBitmap() const { return m_selected; } + wxBitmap GetSelectedBitmap() const { return m_selected; } wxBitmap m_selected; protected: void DoGetSize( int *width, int *height ) const; virtual void DoSelect(const wxBitmap& bitmap); - virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const - { return subrect == NULL ? GetSelectedBitmap() : GetSelectedBitmap().GetSubBitmap(*subrect); } + virtual wxBitmap DoGetAsBitmap(const wxRect *subrect) const + { + wxBitmap bmp = GetSelectedBitmap(); + return subrect ? bmp.GetSubBitmap(*subrect) : bmp; + } private: void Init(); diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 146afce404..81eaf12861 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -1217,8 +1217,14 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, xsrc = source->LogicalToDeviceX(xsrc); ysrc = source->LogicalToDeviceY(ysrc); + wxBitmap selected; wxMemoryDC *memDC = wxDynamicCast(source, wxMemoryDC); - wxBitmap selected = source->GetSelectedBitmap(); + if ( memDC ) + { + selected = memDC->GetSelectedBitmap(); + if ( !selected.IsOk() ) + return false; + } bool use_bitmap_method = false; bool is_mono = false; @@ -1229,8 +1235,6 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, ysrcMask = ysrc; } - if (memDC && !selected.Ok()) return false; - if (selected.Ok()) { is_mono = (selected.GetDepth() == 1);