-void wxWindowDC::DrawLine( long x1, long y1, long x2, long y2 )
-{
-  if (!Ok()) return;
-
-};
-
-void wxWindowDC::CrossHair( long x, long y )
-{
-  if (!Ok()) return;
-
-};
-
-void wxWindowDC::DrawArc( long x1, long y1, long x2, long y2, long xc, long yc )
-{
-  if (!Ok()) return;
-
-  long xx1 = XLOG2DEV(x1);
-  long yy1 = YLOG2DEV(y1);
-  long xx2 = XLOG2DEV(x2);
-  long yy2 = YLOG2DEV(y2);
-  long xxc = XLOG2DEV((long)xc);
-  long yyc = YLOG2DEV((long)yc);
-  double dx = xx1 - xxc;
-  double dy = yy1 - yyc;
-  double radius = sqrt(dx*dx+dy*dy);
-  long   r      = (long)radius;
-  double radius1, radius2;
-
-  if (xx1 == xx2 && yy1 == yy2)
-  {
-    radius1 = 0.0;
-    radius2 = 360.0;
-  }
-  else
-  if (radius == 0.0)
-  {
-    radius1 = radius2 = 0.0;
-  }
-  else
-  {
-    radius1 = (xx1 - xxc == 0) ?
-           (yy1 - yyc < 0) ? 90.0 : -90.0 :
-           -atan2(double(yy1-yyc), double(xx1-xxc)) * RAD2DEG;
-    radius2 = (xx2 - xxc == 0) ?
-           (yy2 - yyc < 0) ? 90.0 : -90.0 :
-           -atan2(double(yy2-yyc), double(xx2-xxc)) * RAD2DEG;
-  };
-  long alpha1 = long(radius1 * 64.0);
-  long alpha2 = long((radius2 - radius1) * 64.0);
-  while (alpha2 <= 0) alpha2 += 360*64;
-  while (alpha1 > 360*64) alpha1 -= 360*64;
-
-  if (m_brush.GetStyle() != wxTRANSPARENT) {};
-
-  if (m_pen.GetStyle() != wxTRANSPARENT) {};
-
-};
-
-void wxWindowDC::DrawEllipticArc( long x, long y, long width, long height, double sa, double ea )
-{
-  if (!Ok()) return;
-
-  long xx = XLOG2DEV(x);
-  long yy = YLOG2DEV(y);
-  long ww = m_signX * XLOG2DEVREL(width);
-  long hh = m_signY * YLOG2DEVREL(height);
-
-  // CMB: handle -ve width and/or height
-  if (ww < 0) { ww = -ww; xx = xx - ww; }
-  if (hh < 0) { hh = -hh; yy = yy - hh; }
-
-  long start = long(sa * 64.0);
-  long end = long(ea * 64.0);
-  if (m_brush.GetStyle() != wxTRANSPARENT) {};
-
-  if (m_pen.GetStyle() != wxTRANSPARENT) {};
-};
-
-void wxWindowDC::DrawPoint( long x, long y )
-{
-  if (!Ok()) return;
-
-  if (m_pen.GetStyle() != wxTRANSPARENT) {};
-};
-
-void wxWindowDC::DrawLines( int n, wxPoint points[], long xoffset, long yoffset )
-{
-  if (!Ok()) return;
-
-  if (m_pen.GetStyle() == wxTRANSPARENT) return;
-
-  for (int i = 0; i < n-1; i++)
-  {
-    long x1 = XLOG2DEV(points[i].x + xoffset);
-    long x2 = XLOG2DEV(points[i+1].x + xoffset);
-    long y1 = YLOG2DEV(points[i].y + yoffset);     // oh, what a waste
-    long y2 = YLOG2DEV(points[i+1].y + yoffset);
-  };
-};
-
-void wxWindowDC::DrawLines( wxList *points, long xoffset, long yoffset )
-{
-  if (!Ok()) return;
-
-  if (m_pen.GetStyle() == wxTRANSPARENT) return;
-
-  wxNode *node = points->First();
-  while (node->Next())
-  {
-    wxPoint *point = (wxPoint*)node->Data();
-    wxPoint *npoint = (wxPoint*)node->Next()->Data();
-    long x1 = XLOG2DEV(point->x + xoffset);
-    long x2 = XLOG2DEV(npoint->x + xoffset);
-    long y1 = YLOG2DEV(point->y + yoffset);    // and again...
-    long y2 = YLOG2DEV(npoint->y + yoffset);
-    node = node->Next();
-  };
-};
-
-void wxWindowDC::DrawPolygon( int WXUNUSED(n), wxPoint WXUNUSED(points)[],
-  long WXUNUSED(xoffset), long WXUNUSED(yoffset), int WXUNUSED(fillStyle) )
-{
-  if (!Ok()) return;
-};
-
-void wxWindowDC::DrawPolygon( wxList *WXUNUSED(lines), long WXUNUSED(xoffset),
-                             long WXUNUSED(yoffset), int WXUNUSED(fillStyle) )
-{
-  if (!Ok()) return;
-};
-
-void wxWindowDC::DrawRectangle( long x, long y, long width, long height )
-{
-  if (!Ok()) return;
-
-  long xx = XLOG2DEV(x);
-  long yy = YLOG2DEV(y);
-  long ww = m_signX * XLOG2DEVREL(width);
-  long hh = m_signY * YLOG2DEVREL(height);
-
-  // CMB: draw nothing if transformed w or h is 0
-  if (ww == 0 || hh == 0) return;
-
-  // CMB: handle -ve width and/or height
-  if (ww < 0) { ww = -ww; xx = xx - ww; }
-  if (hh < 0) { hh = -hh; yy = yy - hh; }
-
-  if (m_brush.GetStyle() != wxTRANSPARENT) {};
-
-  if (m_pen.GetStyle() != wxTRANSPARENT) {};
-};
-
-void wxWindowDC::DrawRoundedRectangle( long x, long y, long width, long height, double radius )
-{
-  if (!Ok()) return;
-
-  if (radius < 0.0) radius = - radius * ((width < height) ? width : height);
-
-  long xx = XLOG2DEV(x);
-  long yy = YLOG2DEV(y);
-  long ww = m_signX * XLOG2DEVREL(width);
-  long hh = m_signY * YLOG2DEVREL(height);
-  long rr = XLOG2DEVREL((long)radius);
-
-  // CMB: handle -ve width and/or height
-  if (ww < 0) { ww = -ww; xx = xx - ww; }
-  if (hh < 0) { hh = -hh; yy = yy - hh; }
-
-  // CMB: if radius is zero use DrawRectangle() instead to avoid
-  // X drawing errors with small radii
-  if (rr == 0)
-  {
-    DrawRectangle( x, y, width, height );
-    return;
-  }
-
-  // CMB: draw nothing if transformed w or h is 0
-  if (ww == 0 || hh == 0) return;
-
-  // CMB: adjust size if outline is drawn otherwise the result is
-  // 1 pixel too wide and high
-  if (m_pen.GetStyle() != wxTRANSPARENT)
-  {
-    ww--;
-    hh--;
-  }
-
-  // CMB: ensure dd is not larger than rectangle otherwise we
-  // get an hour glass shape
-  long dd = 2 * rr;
-  if (dd > ww) dd = ww;
-  if (dd > hh) dd = hh;
-  rr = dd / 2;
-
-  if (m_brush.GetStyle() != wxTRANSPARENT)
-  {
-  };
-
-  if (m_pen.GetStyle() != wxTRANSPARENT)
-  {
-  };
-};
-
-void wxWindowDC::DrawEllipse( long x, long y, long width, long height )
-{
-  if (!Ok()) return;
-
-  long xx = XLOG2DEV(x);
-  long yy = YLOG2DEV(y);
-  long ww = m_signX * XLOG2DEVREL(width);
-  long hh = m_signY * YLOG2DEVREL(height);
-
-  // CMB: handle -ve width and/or height
-  if (ww < 0) { ww = -ww; xx = xx - ww; }
-  if (hh < 0) { hh = -hh; yy = yy - hh; }
-
-  if (m_brush.GetStyle() != wxTRANSPARENT) {};
-
-  if (m_pen.GetStyle() != wxTRANSPARENT) {};
-};
-
-bool wxWindowDC::CanDrawBitmap(void) const
-{
-  return TRUE;
-};
-
-void wxWindowDC::DrawIcon( const wxIcon &icon, long x, long y, bool useMask )
-{
-  if (!Ok()) return;
-
-  if (!icon.Ok()) return;
-
-  int xx = XLOG2DEV(x);
-  int yy = YLOG2DEV(y);