X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee5e8025711fb3938bc62ec23297713caf63551c..c9f8e0e22e0cb2a82233e9076da7414315df062d:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 0d0d479bf7..0b2a1391cd 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -13,6 +13,7 @@ #include "wx/dcclient.h" #include "wx/dcmemory.h" +#include "wx/image.h" #include //----------------------------------------------------------------------------- @@ -79,12 +80,12 @@ void gdk_draw_bitmap (GdkDrawable *drawable, } //----------------------------------------------------------------------------- -// wxPaintDC +// wxWindowDC //----------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxPaintDC,wxDC) +IMPLEMENT_DYNAMIC_CLASS(wxWindowDC,wxDC) -wxPaintDC::wxPaintDC(void) +wxWindowDC::wxWindowDC() { m_penGC = (GdkGC *) NULL; m_brushGC = (GdkGC *) NULL; @@ -94,7 +95,7 @@ wxPaintDC::wxPaintDC(void) m_isMemDC = FALSE; } -wxPaintDC::wxPaintDC( wxWindow *window ) +wxWindowDC::wxWindowDC( wxWindow *window ) { m_penGC = (GdkGC *) NULL; m_brushGC = (GdkGC *) NULL; @@ -115,42 +116,43 @@ wxPaintDC::wxPaintDC( wxWindow *window ) m_isMemDC = FALSE; SetUpDC(); + } -wxPaintDC::~wxPaintDC(void) +wxWindowDC::~wxWindowDC() { Destroy(); } -void wxPaintDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1), - wxColour *WXUNUSED(col), int WXUNUSED(style) ) +void wxWindowDC::FloodFill( long WXUNUSED(x), long WXUNUSED(y), + const wxColour &WXUNUSED(col), int WXUNUSED(style) ) { - wxFAIL_MSG( "wxPaintDC::FloodFill not implemented" ); + wxFAIL_MSG( "wxWindowDC::FloodFill not implemented" ); } -bool wxPaintDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const +bool wxWindowDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const { - wxFAIL_MSG( "wxPaintDC::GetPixel not implemented" ); + wxFAIL_MSG( "wxWindowDC::GetPixel not implemented" ); return FALSE; } -void wxPaintDC::DrawLine( long x1, long y1, long x2, long y2 ) +void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_pen.GetStyle() != wxTRANSPARENT) { gdk_draw_line( m_window, m_penGC, XLOG2DEV(x1), YLOG2DEV(y1), XLOG2DEV(x2), YLOG2DEV(y2) ); + + CalcBoundingBox(x1, y1); + CalcBoundingBox(x2, y2); } - - CalcBoundingBox(x1, y1); - CalcBoundingBox(x2, y2); } -void wxPaintDC::CrossHair( long x, long y ) +void wxWindowDC::CrossHair( long x, long y ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_pen.GetStyle() != wxTRANSPARENT) { @@ -164,9 +166,9 @@ void wxPaintDC::CrossHair( long x, long y ) } } -void wxPaintDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double yc ) +void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double yc ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); long xx1 = XLOG2DEV(x1); long yy1 = YLOG2DEV(y1); @@ -214,9 +216,9 @@ void wxPaintDC::DrawArc( long x1, long y1, long x2, long y2, double xc, double y CalcBoundingBox (x2, y2); } -void wxPaintDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) +void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); @@ -239,9 +241,9 @@ void wxPaintDC::DrawEllipticArc( long x, long y, long width, long height, double CalcBoundingBox (x + width, y + height); } -void wxPaintDC::DrawPoint( long x, long y ) +void wxWindowDC::DrawPoint( long x, long y ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_pen.GetStyle() != wxTRANSPARENT) gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) ); @@ -249,9 +251,9 @@ void wxPaintDC::DrawPoint( long x, long y ) CalcBoundingBox (x, y); } -void wxPaintDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) +void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_pen.GetStyle() == wxTRANSPARENT) return; if (n <= 0) return; @@ -270,9 +272,9 @@ void wxPaintDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset ) } } -void wxPaintDC::DrawLines( wxList *points, long xoffset, long yoffset ) +void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_pen.GetStyle() == wxTRANSPARENT) return; @@ -297,11 +299,11 @@ void wxPaintDC::DrawLines( wxList *points, long xoffset, long yoffset ) } } -void wxPaintDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) ) +void wxWindowDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); - if (!n) return; + if (n <= 0) return; GdkPoint *gdkpoints = new GdkPoint[n+1]; int i; @@ -331,12 +333,12 @@ void wxPaintDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset delete[] gdkpoints; } -void wxPaintDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle)) +void wxWindowDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle)) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); int n = lines->Number(); - if (!n) return; + if (n <= 0) return; GdkPoint *gdkpoints = new GdkPoint[n]; wxNode *node = lines->First(); @@ -372,9 +374,9 @@ void wxPaintDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUN delete[] gdkpoints; } -void wxPaintDC::DrawRectangle( long x, long y, long width, long height ) +void wxWindowDC::DrawRectangle( long x, long y, long width, long height ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); @@ -398,9 +400,9 @@ void wxPaintDC::DrawRectangle( long x, long y, long width, long height ) CalcBoundingBox( x + width, y + height ); } -void wxPaintDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius ) +void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (radius < 0.0) radius = - radius * ((width < height) ? width : height); @@ -467,9 +469,9 @@ void wxPaintDC::DrawRoundedRectangle( long x, long y, long width, long height, d CalcBoundingBox( x + width, y + height ); } -void wxPaintDC::DrawEllipse( long x, long y, long width, long height ) +void wxWindowDC::DrawEllipse( long x, long y, long width, long height ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); long xx = XLOG2DEV(x); long yy = YLOG2DEV(y); @@ -486,26 +488,51 @@ void wxPaintDC::DrawEllipse( long x, long y, long width, long height ) if (m_pen.GetStyle() != wxTRANSPARENT) gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 ); - CalcBoundingBox( x, y ); + CalcBoundingBox( x - width, y - height ); CalcBoundingBox( x + width, y + height ); } -bool wxPaintDC::CanDrawBitmap(void) const +bool wxWindowDC::CanDrawBitmap() const { - return TRUE; + return TRUE; +} + +void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y ) +{ + DrawBitmap( icon, x, y, TRUE ); } -void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) +void wxWindowDC::DrawBitmap( const wxBitmap &bitmap, long x, long y, bool useMask ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); - if (!icon.Ok()) return; + if (!bitmap.Ok()) return; int xx = XLOG2DEV(x); int yy = YLOG2DEV(y); + int w = bitmap.GetWidth(); + int h = bitmap.GetHeight(); + + int ww = XLOG2DEVREL(w); + int hh = YLOG2DEVREL(h); + + wxBitmap use_bitmap; + + if ((w != ww) || (h != hh)) + { + wxImage image( bitmap ); + image = image.Scale( ww, hh ); + + use_bitmap = image.ConvertToBitmap(); + } + else + { + use_bitmap = bitmap; + } + GdkBitmap *mask = (GdkBitmap *) NULL; - if (icon.GetMask()) mask = icon.GetMask()->GetBitmap(); + if (use_bitmap.GetMask()) mask = use_bitmap.GetMask()->GetBitmap(); if (useMask && mask) { @@ -513,7 +540,7 @@ void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) gdk_gc_set_clip_origin( m_penGC, xx, yy ); } - GdkPixmap *pm = icon.GetPixmap(); + GdkPixmap *pm = use_bitmap.GetPixmap(); gdk_draw_pixmap( m_window, m_penGC, pm, 0, 0, xx, yy, -1, -1 ); if (useMask && mask) @@ -523,19 +550,20 @@ void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) } CalcBoundingBox( x, y ); - int width = icon.GetWidth(); - int height = icon.GetHeight(); - CalcBoundingBox( x + width, y + height ); + CalcBoundingBox( x + w, y + h ); } -bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, - wxDC *source, long xsrc, long ysrc, int WXUNUSED(logical_func), bool useMask ) +bool wxWindowDC::Blit( long xdest, long ydest, long width, long height, + wxDC *source, long xsrc, long ysrc, int logical_func, bool useMask ) { - if (!Ok()) return FALSE; + wxCHECK_MSG( Ok(), FALSE, "invalid window dc" ); CalcBoundingBox( xdest, ydest ); CalcBoundingBox( xdest + width, ydest + height ); + int old_logical_func = m_logicalFunction; + SetLogicalFunction( logical_func ); + wxClientDC *csrc = (wxClientDC*)source; if (csrc->m_isMemDC) @@ -552,11 +580,11 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, if (useMask && mask) { - gdk_gc_set_clip_mask( m_textGC, mask ); - gdk_gc_set_clip_origin( m_textGC, xx, yy ); + gdk_gc_set_clip_mask( m_penGC, mask ); + gdk_gc_set_clip_origin( m_penGC, xx, yy ); } - - gdk_draw_pixmap( m_window, m_textGC, pmap, + + gdk_draw_pixmap( m_window, m_penGC, pmap, source->DeviceToLogicalX(xsrc), source->DeviceToLogicalY(ysrc), xx, @@ -566,10 +594,11 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, if (useMask && mask) { - gdk_gc_set_clip_mask( m_textGC, (GdkBitmap *) NULL ); - gdk_gc_set_clip_origin( m_textGC, 0, 0 ); + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); + gdk_gc_set_clip_origin( m_penGC, 0, 0 ); } + SetLogicalFunction( old_logical_func ); return TRUE; } @@ -584,8 +613,8 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, if (useMask && mask) { - gdk_gc_set_clip_mask( m_textGC, mask ); - gdk_gc_set_clip_origin( m_textGC, xx, yy ); + gdk_gc_set_clip_mask( m_penGC, mask ); + gdk_gc_set_clip_origin( m_penGC, xx, yy ); } gdk_draw_bitmap( m_window, m_textGC, bmap, @@ -598,15 +627,16 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, if (useMask && mask) { - gdk_gc_set_clip_mask( m_textGC, (GdkBitmap *) NULL ); - gdk_gc_set_clip_origin( m_textGC, 0, 0 ); + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); + gdk_gc_set_clip_origin( m_penGC, 0, 0 ); } + SetLogicalFunction( old_logical_func ); return TRUE; } } - gdk_window_copy_area ( m_window, m_textGC, + gdk_window_copy_area ( m_window, m_penGC, XLOG2DEV(xdest), YLOG2DEV(ydest), csrc->GetWindow(), source->DeviceToLogicalX(xsrc), @@ -614,20 +644,13 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, source->DeviceToLogicalXRel(width), source->DeviceToLogicalYRel(height) ); -/* - gdk_window_copy_area ( m_window, m_textGC, - XLOG2DEV(xdest), YLOG2DEV(ydest), - csrc->GetWindow(), - xsrc, ysrc, - width, height ); -*/ - - return TRUE; + SetLogicalFunction( old_logical_func ); + return TRUE; } -void wxPaintDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(use16) ) +void wxWindowDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(use16) ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); GdkFont *font = m_font.GetInternalFont( m_scaleY ); @@ -662,16 +685,16 @@ void wxPaintDC::DrawText( const wxString &text, long x, long y, bool WXUNUSED(us CalcBoundingBox (x, y); } -bool wxPaintDC::CanGetTextExtent(void) const +bool wxWindowDC::CanGetTextExtent() const { return TRUE; } -void wxPaintDC::GetTextExtent( const wxString &string, long *width, long *height, +void wxWindowDC::GetTextExtent( const wxString &string, long *width, long *height, long *descent, long *externalLeading, wxFont *theFont, bool WXUNUSED(use16) ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); wxFont fontToUse = m_font; if (theFont) fontToUse = *theFont; @@ -683,25 +706,25 @@ void wxPaintDC::GetTextExtent( const wxString &string, long *width, long *height if (externalLeading) (*externalLeading) = 0; // ?? } -long wxPaintDC::GetCharWidth(void) +long wxWindowDC::GetCharWidth() { - if (!Ok()) return 0; + wxCHECK_MSG( Ok(), 0, "invalid window dc" ); GdkFont *font = m_font.GetInternalFont( m_scaleY ); return long(gdk_string_width( font, "H" ) / m_scaleX); } -long wxPaintDC::GetCharHeight(void) +long wxWindowDC::GetCharHeight() { - if (!Ok()) return 0; + wxCHECK_MSG( Ok(), 0, "invalid window dc" ); GdkFont *font = m_font.GetInternalFont( m_scaleY ); return long((font->ascent + font->descent) / m_scaleY); } -void wxPaintDC::Clear(void) +void wxWindowDC::Clear() { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (!m_isMemDC) { @@ -715,17 +738,17 @@ void wxPaintDC::Clear(void) } } -void wxPaintDC::SetFont( const wxFont &font ) +void wxWindowDC::SetFont( const wxFont &font ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); m_font = font; } -void wxPaintDC::SetPen( const wxPen &pen ) +void wxWindowDC::SetPen( const wxPen &pen ) { - if (!Ok()) return; - + wxCHECK_RET( Ok(), "invalid window dc" ); + if (m_pen == pen) return; m_pen = pen; @@ -778,9 +801,9 @@ void wxPaintDC::SetPen( const wxPen &pen ) gdk_gc_set_foreground( m_penGC, m_pen.GetColour().GetColor() ); } -void wxPaintDC::SetBrush( const wxBrush &brush ) +void wxWindowDC::SetBrush( const wxBrush &brush ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_brush == brush) return; @@ -815,11 +838,12 @@ void wxPaintDC::SetBrush( const wxBrush &brush ) } } -// CMB 21/7/98: Added SetBackground. Sets background brush -// for Clear() and bg colour for shapes filled with cross-hatch brush -void wxPaintDC::SetBackground( const wxBrush &brush ) +void wxWindowDC::SetBackground( const wxBrush &brush ) { - if (!Ok()) return; + // CMB 21/7/98: Added SetBackground. Sets background brush + // for Clear() and bg colour for shapes filled with cross-hatch brush + + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_backgroundBrush == brush) return; @@ -829,6 +853,8 @@ void wxPaintDC::SetBackground( const wxBrush &brush ) m_backgroundBrush.GetColour().CalcPixel( m_cmap ); gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() ); + gdk_gc_set_background( m_penGC, m_backgroundBrush.GetColour().GetColor() ); + gdk_gc_set_background( m_bgGC, m_backgroundBrush.GetColour().GetColor() ); gdk_gc_set_foreground( m_bgGC, m_backgroundBrush.GetColour().GetColor() ); GdkFill fillStyle = GDK_SOLID; @@ -855,9 +881,12 @@ void wxPaintDC::SetBackground( const wxBrush &brush ) } } -void wxPaintDC::SetLogicalFunction( int function ) +void wxWindowDC::SetLogicalFunction( int function ) { + wxCHECK_RET( Ok(), "invalid window dc" ); + if (m_logicalFunction == function) return; + GdkFunction mode = GDK_COPY; switch (function) { @@ -865,14 +894,16 @@ void wxPaintDC::SetLogicalFunction( int function ) case wxINVERT: mode = GDK_INVERT; break; default: break; } + m_logicalFunction = function; gdk_gc_set_function( m_penGC, mode ); gdk_gc_set_function( m_brushGC, mode ); + gdk_gc_set_function( m_textGC, mode ); } -void wxPaintDC::SetTextForeground( const wxColour &col ) +void wxWindowDC::SetTextForeground( const wxColour &col ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_textForegroundColour == col) return; @@ -883,9 +914,9 @@ void wxPaintDC::SetTextForeground( const wxColour &col ) gdk_gc_set_foreground( m_textGC, m_textForegroundColour.GetColor() ); } -void wxPaintDC::SetTextBackground( const wxColour &col ) +void wxWindowDC::SetTextBackground( const wxColour &col ) { - if (!Ok()) return; + wxCHECK_RET( Ok(), "invalid window dc" ); if (m_textBackgroundColour == col) return; @@ -896,12 +927,15 @@ void wxPaintDC::SetTextBackground( const wxColour &col ) gdk_gc_set_background( m_textGC, m_textBackgroundColour.GetColor() ); } -void wxPaintDC::SetBackgroundMode( int mode ) +void wxWindowDC::SetBackgroundMode( int mode ) { + wxCHECK_RET( Ok(), "invalid window dc" ); + m_backgroundMode = mode; // CMB 21/7/98: fill style of cross-hatch brushes is affected by // transparent/solid background mode + if (m_brush.GetStyle() != wxSOLID && m_brush.GetStyle() != wxTRANSPARENT) { gdk_gc_set_fill( m_brushGC, @@ -909,12 +943,15 @@ void wxPaintDC::SetBackgroundMode( int mode ) } } -void wxPaintDC::SetPalette( const wxPalette& WXUNUSED(palette) ) +void wxWindowDC::SetPalette( const wxPalette& WXUNUSED(palette) ) { + wxFAIL_MSG( "wxWindowDC::SetPalette not implemented" ); } -void wxPaintDC::SetClippingRegion( long x, long y, long width, long height ) +void wxWindowDC::SetClippingRegion( long x, long y, long width, long height ) { + wxCHECK_RET( Ok(), "invalid window dc" ); + wxDC::SetClippingRegion( x, y, width, height ); GdkRectangle rect; @@ -928,8 +965,26 @@ void wxPaintDC::SetClippingRegion( long x, long y, long width, long height ) gdk_gc_set_clip_rectangle( m_bgGC, &rect ); } -void wxPaintDC::DestroyClippingRegion(void) +void wxWindowDC::SetClippingRegion( const wxRegion ®ion ) { + wxCHECK_RET( Ok(), "invalid window dc" ); + + if (region.Empty()) + { + DestroyClippingRegion(); + return; + } + + gdk_gc_set_clip_region( m_penGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_brushGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_textGC, region.GetRegion() ); + gdk_gc_set_clip_region( m_bgGC, region.GetRegion() ); +} + +void wxWindowDC::DestroyClippingRegion() +{ + wxCHECK_RET( Ok(), "invalid window dc" ); + wxDC::DestroyClippingRegion(); gdk_gc_set_clip_rectangle( m_penGC, (GdkRectangle *) NULL ); @@ -938,7 +993,7 @@ void wxPaintDC::DestroyClippingRegion(void) gdk_gc_set_clip_rectangle( m_bgGC, (GdkRectangle *) NULL ); } -void wxPaintDC::SetUpDC(void) +void wxWindowDC::SetUpDC() { Destroy(); m_ok = TRUE; @@ -947,13 +1002,29 @@ void wxPaintDC::SetUpDC(void) m_brushGC = gdk_gc_new( m_window ); m_textGC = gdk_gc_new( m_window ); m_bgGC = gdk_gc_new( m_window ); - SetTextForeground( m_textForegroundColour ); - SetTextBackground( m_textBackgroundColour ); - SetPen( m_pen ); - SetFont( m_font ); - SetBrush( m_brush ); - - gdk_gc_set_background( m_penGC, wxWHITE->GetColor() ); + + wxColour tmp_col( m_textForegroundColour ); + m_textForegroundColour = wxNullColour; + SetTextForeground( tmp_col ); + tmp_col = m_textBackgroundColour; + m_textBackgroundColour = wxNullColour; + SetTextBackground( tmp_col ); + + wxPen tmp_pen( m_pen ); + m_pen = wxNullPen; + SetPen( tmp_pen ); + + wxFont tmp_font( m_font ); + m_font = wxNullFont; + SetFont( tmp_font ); + + wxBrush tmp_brush( m_brush ); + m_brush = wxNullBrush; + SetBrush( tmp_brush ); + + tmp_brush = m_backgroundBrush; + m_backgroundBrush = wxNullBrush; + SetBackground( tmp_brush ); if (!hatch_bitmap) { @@ -967,7 +1038,7 @@ void wxPaintDC::SetUpDC(void) } } -void wxPaintDC::Destroy(void) +void wxWindowDC::Destroy() { if (m_penGC) gdk_gc_unref( m_penGC ); m_penGC = (GdkGC*) NULL; @@ -979,7 +1050,7 @@ void wxPaintDC::Destroy(void) m_bgGC = (GdkGC*) NULL; } -GdkWindow *wxPaintDC::GetWindow(void) +GdkWindow *wxWindowDC::GetWindow() { return m_window; } @@ -988,7 +1059,7 @@ GdkWindow *wxPaintDC::GetWindow(void) void wx_quadratic_spline(double a1, double b1, double a2, double b2, double a3, double b3, double a4, double b4); -void wx_clear_stack(void); +void wx_clear_stack(); int wx_spline_pop(double *x1, double *y1, double *x2, double *y2, double *x3, double *y3, double *x4, double *y4); void wx_spline_push(double x1, double y1, double x2, double y2, double x3, double y3, @@ -1039,7 +1110,7 @@ static Stack wx_spline_stack[SPLINE_STACK_DEPTH]; static Stack *wx_stack_top; static int wx_stack_count; -void wx_clear_stack(void) +void wx_clear_stack() { wx_stack_top = wx_spline_stack; wx_stack_count = 0; @@ -1099,8 +1170,10 @@ static void wx_spline_draw_point_array(wxDC *dc) } } -void wxPaintDC::DrawSpline( wxList *points ) +void wxWindowDC::DrawSpline( wxList *points ) { + wxCHECK_RET( Ok(), "invalid window dc" ); + wxPoint *p; double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4; double x1, y1, x2, y2; @@ -1148,3 +1221,37 @@ void wxPaintDC::DrawSpline( wxList *points ) wx_spline_draw_point_array( this ); } + + +//----------------------------------------------------------------------------- +// wxPaintDC +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxPaintDC,wxWindowDC) + +wxPaintDC::wxPaintDC() + : wxWindowDC() +{ +} + +wxPaintDC::wxPaintDC( wxWindow *win ) + : wxWindowDC( win ) +{ +} + +//----------------------------------------------------------------------------- +// wxClientDC +//----------------------------------------------------------------------------- + +IMPLEMENT_DYNAMIC_CLASS(wxClientDC,wxWindowDC) + +wxClientDC::wxClientDC() + : wxWindowDC() +{ +} + +wxClientDC::wxClientDC( wxWindow *win ) + : wxWindowDC( win ) +{ +} +