X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/11026f7b59168c36240b4db4c3deaef5dd936846..5db1a502b4bf38f36a14c1377618d9eaae4c8e79:/src/gtk/dcclient.cpp diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 37e2ebbf25..3e8025961b 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -2,9 +2,8 @@ // Name: dcclient.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Markus Holzem, Chris Breeze // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -28,7 +27,7 @@ #define num_hatches 6 static GdkPixmap *hatches[num_hatches]; -static GdkPixmap **hatch_bitmap = NULL; +static GdkPixmap **hatch_bitmap = (GdkPixmap **) NULL; //----------------------------------------------------------------------------- // constants @@ -87,20 +86,21 @@ IMPLEMENT_DYNAMIC_CLASS(wxPaintDC,wxDC) wxPaintDC::wxPaintDC(void) { - m_penGC = NULL; - m_brushGC = NULL; - m_textGC = NULL; - m_bgGC = NULL; - m_cmap = NULL; + m_penGC = (GdkGC *) NULL; + m_brushGC = (GdkGC *) NULL; + m_textGC = (GdkGC *) NULL; + m_bgGC = (GdkGC *) NULL; + m_cmap = (GdkColormap *) NULL; + m_isMemDC = FALSE; } wxPaintDC::wxPaintDC( wxWindow *window ) { - m_penGC = NULL; - m_brushGC = NULL; - m_textGC = NULL; - m_bgGC = NULL; - m_cmap = NULL; + m_penGC = (GdkGC *) NULL; + m_brushGC = (GdkGC *) NULL; + m_textGC = (GdkGC *) NULL; + m_bgGC = (GdkGC *) NULL; + m_cmap = (GdkColormap *) NULL; if (!window) return; GtkWidget *widget = window->m_wxwindow; @@ -112,25 +112,25 @@ wxPaintDC::wxPaintDC( wxWindow *window ) else m_cmap = gtk_widget_get_colormap( window->m_widget ); - m_isDrawable = TRUE; + m_isMemDC = FALSE; SetUpDC(); - - long x = 0; - long y = 0; } wxPaintDC::~wxPaintDC(void) { + Destroy(); } void wxPaintDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col), int WXUNUSED(style) ) { + wxFAIL_MSG( "wxPaintDC::FloodFill not implemented" ); } bool wxPaintDC::GetPixel( long WXUNUSED(x1), long WXUNUSED(y1), wxColour *WXUNUSED(col) ) const { + wxFAIL_MSG( "wxPaintDC::GetPixel not implemented" ); return FALSE; } @@ -277,10 +277,10 @@ void wxPaintDC::DrawLines( wxList *points, long xoffset, long yoffset ) } } -void wxPaintDC::DrawPolygon( int n, wxPoint points[], - long xoffset, long yoffset, int WXUNUSED(fillStyle) ) - { - if (!Ok()) return; +void wxPaintDC::DrawPolygon( int n, wxPoint points[], long xoffset, long yoffset, int WXUNUSED(fillStyle) ) +{ + if (!Ok()) return; + if (!n) return; // Nothing to draw GdkPoint *gdkpoints = new GdkPoint[n+1]; int i; @@ -302,12 +302,11 @@ void wxPaintDC::DrawPolygon( int n, wxPoint points[], delete[] gdkpoints; } -void wxPaintDC::DrawPolygon( wxList *lines, long xoffset, - long yoffset, int WXUNUSED(fillStyle)) - { +void wxPaintDC::DrawPolygon( wxList *lines, long xoffset, long yoffset, int WXUNUSED(fillStyle)) +{ + if (!Ok()) return; + int n = lines->Number(); - - if (!Ok()) return; GdkPoint *gdkpoints = new GdkPoint[n]; wxNode *node = lines->First(); int cnt=0; @@ -457,7 +456,7 @@ void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) int xx = XLOG2DEV(x); int yy = YLOG2DEV(y); - GdkBitmap *mask = NULL; + GdkBitmap *mask = (GdkBitmap *) NULL; if (icon.GetMask()) mask = icon.GetMask()->GetBitmap(); if (useMask && mask) @@ -471,7 +470,7 @@ void wxPaintDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask ) if (useMask && mask) { - gdk_gc_set_clip_mask( m_penGC, NULL ); + gdk_gc_set_clip_mask( m_penGC, (GdkBitmap *) NULL ); gdk_gc_set_clip_origin( m_penGC, 0, 0 ); } } @@ -481,26 +480,25 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, { if (!Ok()) return FALSE; - // CMB 20/5/98: add blitting of bitmaps - if (source->IsKindOf(CLASSINFO(wxMemoryDC))) + wxClientDC *csrc = (wxClientDC*)source; + + if (csrc->m_isMemDC) { wxMemoryDC* srcDC = (wxMemoryDC*)source; - GdkBitmap* bmap = srcDC->m_selected.GetBitmap(); + GdkBitmap* bmap = srcDC->m_selected.GetBitmap(); if (bmap) { - gdk_draw_bitmap ( - m_window, - m_textGC, - bmap, - source->DeviceToLogicalX(xsrc), source->DeviceToLogicalY(ysrc), - XLOG2DEV(xdest), YLOG2DEV(ydest), - source->DeviceToLogicalXRel(width), source->DeviceToLogicalYRel(height) - ); + gdk_draw_bitmap( m_window, m_textGC, bmap, + source->DeviceToLogicalX(xsrc), + source->DeviceToLogicalY(ysrc), + XLOG2DEV(xdest), + YLOG2DEV(ydest), + source->DeviceToLogicalXRel(width), + source->DeviceToLogicalYRel(height) ); return TRUE; } } - wxClientDC *csrc = (wxClientDC*)source; gdk_window_copy_area ( m_window, m_penGC, XLOG2DEV(xdest), YLOG2DEV(ydest), csrc->GetWindow(), @@ -591,9 +589,7 @@ void wxPaintDC::Clear(void) { if (!Ok()) return; -// DestroyClippingRegion(); - - if (m_isDrawable) + if (!m_isMemDC) { gdk_window_clear( m_window ); } @@ -824,23 +820,20 @@ void wxPaintDC::DestroyClippingRegion(void) { wxDC::DestroyClippingRegion(); - gdk_gc_set_clip_rectangle( m_penGC, NULL ); - gdk_gc_set_clip_rectangle( m_brushGC, NULL ); - gdk_gc_set_clip_rectangle( m_textGC, NULL ); - gdk_gc_set_clip_rectangle( m_bgGC, NULL ); + gdk_gc_set_clip_rectangle( m_penGC, (GdkRectangle *) NULL ); + gdk_gc_set_clip_rectangle( m_brushGC, (GdkRectangle *) NULL ); + gdk_gc_set_clip_rectangle( m_textGC, (GdkRectangle *) NULL ); + gdk_gc_set_clip_rectangle( m_bgGC, (GdkRectangle *) NULL ); } void wxPaintDC::SetUpDC(void) { + Destroy(); m_ok = TRUE; m_logicalFunction = wxCOPY; - if (m_penGC) gdk_gc_unref( m_penGC ); m_penGC = gdk_gc_new( m_window ); - if (m_brushGC) gdk_gc_unref( m_brushGC ); m_brushGC = gdk_gc_new( m_window ); - if (m_textGC) gdk_gc_unref( m_textGC ); m_textGC = gdk_gc_new( m_window ); - if (m_bgGC) gdk_gc_unref( m_bgGC ); m_bgGC = gdk_gc_new( m_window ); SetTextForeground( m_textForegroundColour ); SetTextBackground( m_textBackgroundColour ); @@ -853,15 +846,27 @@ void wxPaintDC::SetUpDC(void) if (!hatch_bitmap) { hatch_bitmap = hatches; - hatch_bitmap[0] = gdk_bitmap_create_from_data( NULL, bdiag_bits, bdiag_width, bdiag_height ); - hatch_bitmap[1] = gdk_bitmap_create_from_data( NULL, cdiag_bits, cdiag_width, cdiag_height ); - hatch_bitmap[2] = gdk_bitmap_create_from_data( NULL, fdiag_bits, fdiag_width, fdiag_height ); - hatch_bitmap[3] = gdk_bitmap_create_from_data( NULL, cross_bits, cross_width, cross_height ); - hatch_bitmap[4] = gdk_bitmap_create_from_data( NULL, horiz_bits, horiz_width, horiz_height ); - hatch_bitmap[5] = gdk_bitmap_create_from_data( NULL, verti_bits, verti_width, verti_height ); + hatch_bitmap[0] = gdk_bitmap_create_from_data( (GdkWindow *) NULL, bdiag_bits, bdiag_width, bdiag_height ); + hatch_bitmap[1] = gdk_bitmap_create_from_data( (GdkWindow *) NULL, cdiag_bits, cdiag_width, cdiag_height ); + hatch_bitmap[2] = gdk_bitmap_create_from_data( (GdkWindow *) NULL, fdiag_bits, fdiag_width, fdiag_height ); + hatch_bitmap[3] = gdk_bitmap_create_from_data( (GdkWindow *) NULL, cross_bits, cross_width, cross_height ); + hatch_bitmap[4] = gdk_bitmap_create_from_data( (GdkWindow *) NULL, horiz_bits, horiz_width, horiz_height ); + hatch_bitmap[5] = gdk_bitmap_create_from_data( (GdkWindow *) NULL, verti_bits, verti_width, verti_height ); } } +void wxPaintDC::Destroy(void) +{ + if (m_penGC) gdk_gc_unref( m_penGC ); + m_penGC = (GdkGC*) NULL; + if (m_brushGC) gdk_gc_unref( m_brushGC ); + m_brushGC = (GdkGC*) NULL; + if (m_textGC) gdk_gc_unref( m_textGC ); + m_textGC = (GdkGC*) NULL; + if (m_bgGC) gdk_gc_unref( m_bgGC ); + m_bgGC = (GdkGC*) NULL; +} + GdkWindow *wxPaintDC::GetWindow(void) { return m_window; @@ -982,7 +987,7 @@ static void wx_spline_draw_point_array(wxDC *dc) } } -void wxPaintDC::DrawOpenSpline( wxList *points ) +void wxPaintDC::DrawSpline( wxList *points ) { wxPoint *p; double cx1, cy1, cx2, cy2, cx3, cy3, cx4, cy4;