// 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
/////////////////////////////////////////////////////////////////////////////
m_textGC = (GdkGC *) NULL;
m_bgGC = (GdkGC *) NULL;
m_cmap = (GdkColormap *) NULL;
+ m_isMemDC = FALSE;
}
wxPaintDC::wxPaintDC( wxWindow *window )
else
m_cmap = gtk_widget_get_colormap( window->m_widget );
- m_isDrawable = TRUE;
+ m_isMemDC = FALSE;
SetUpDC();
}
wxPaintDC::~wxPaintDC(void)
{
+ Destroy();
}
void wxPaintDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1),
{
if (!Ok()) return;
- // FIXME: is this right? Causes a segfault on my system and doesn't
- // seem right: wxPaintDC does not inherit from wxMemoryDC
- // if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (m_pen.GetStyle() != wxTRANSPARENT)
{
gdk_draw_line( m_window, m_penGC,
{
if (!Ok()) return;
- // FIXME: is this right? Causes a segfault on my system and doesn't
- // seem right: wxPaintDC does not inherit from wxMemoryDC
- // if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (m_pen.GetStyle() != wxTRANSPARENT)
{
int w = 0;
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
long xx1 = XLOG2DEV(x1);
long yy1 = YLOG2DEV(y1);
long xx2 = XLOG2DEV(x2);
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
long xx = XLOG2DEV(x);
long yy = YLOG2DEV(y);
long ww = m_signX * XLOG2DEVREL(width);
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_point( m_window, m_penGC, XLOG2DEV(x), YLOG2DEV(y) );
}
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (m_pen.GetStyle() == wxTRANSPARENT) return;
for (int i = 0; i < n-1; i++)
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (m_pen.GetStyle() == wxTRANSPARENT) return;
wxNode *node = points->First();
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (!n) return; // Nothing to draw
GdkPoint *gdkpoints = new GdkPoint[n+1];
int i;
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
int n = lines->Number();
GdkPoint *gdkpoints = new GdkPoint[n];
wxNode *node = lines->First();
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
long xx = XLOG2DEV(x);
long yy = YLOG2DEV(y);
long ww = m_signX * XLOG2DEVREL(width);
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
if (radius < 0.0) radius = - radius * ((width < height) ? width : height);
long xx = XLOG2DEV(x);
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
long xx = XLOG2DEV(x);
long yy = YLOG2DEV(y);
long ww = m_signX * XLOG2DEVREL(width);
if (!icon.Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
int xx = XLOG2DEV(x);
int yy = YLOG2DEV(y);
{
if (!Ok()) return FALSE;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
+ wxClientDC *csrc = (wxClientDC*)source;
- // CMB 20/5/98: add blitting of bitmaps
- if (source->IsKindOf(CLASSINFO(wxMemoryDC)))
+ if (csrc->m_isMemDC)
{
wxMemoryDC* srcDC = (wxMemoryDC*)source;
GdkBitmap* bmap = srcDC->m_selected.GetBitmap();
}
}
- wxClientDC *csrc = (wxClientDC*)source;
gdk_window_copy_area ( m_window, m_penGC,
XLOG2DEV(xdest), YLOG2DEV(ydest),
csrc->GetWindow(),
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
GdkFont *font = m_font.GetInternalFont( m_scaleY );
x = XLOG2DEV(x);
{
if (!Ok()) return;
- if (!m_isDrawable) ((wxMemoryDC*)this)->m_selected.DestroyImage();
-
- if (m_isDrawable)
+ if (!m_isMemDC)
{
gdk_window_clear( m_window );
}
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 );
}
}
+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;