]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/dc.cpp
24-bit rendering from wxImage into wxBitmap
[wxWidgets.git] / src / gtk / dc.cpp
index b50ade747a938b27d2eb14055abdda594e191795..a519e5fd40f08645fbb77aeac2a6eec008db5365 100644 (file)
@@ -2,9 +2,8 @@
 // Name:        dc.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
 // Licence:    wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
@@ -47,10 +46,6 @@ wxDC::wxDC(void)
   m_logicalOriginY = 0;
   m_deviceOriginX = 0;
   m_deviceOriginY = 0;
-  m_internalDeviceOriginX = 0;
-  m_internalDeviceOriginY = 0;
-  m_externalDeviceOriginX = 0;
-  m_externalDeviceOriginY = 0;
   
   m_logicalScaleX = 1.0;
   m_logicalScaleY = 1.0;
@@ -81,25 +76,31 @@ wxDC::wxDC(void)
   m_backgroundBrush = *wxWHITE_BRUSH;
   
 //  m_palette = wxAPP_COLOURMAP;
-};
+}
 
 wxDC::~wxDC(void)
 {
-};
+}
+
+bool wxDC::Ok(void) const 
+{ 
+  wxASSERT_MSG( m_ok, "invalid display context" );
+  return m_ok; 
+}
 
 void wxDC::DrawArc( long WXUNUSED(x1), long WXUNUSED(y1), long WXUNUSED(x2), long WXUNUSED(y2), 
   double WXUNUSED(xc), double WXUNUSED(yc) )
 {
-};
+}
 
 void wxDC::DrawIcon( const wxIcon &WXUNUSED(icon), long WXUNUSED(x), long WXUNUSED(y), bool WXUNUSED(useMask) ) 
 {
-};
+}
 
 void wxDC::DrawPoint( wxPoint& point ) 
 { 
   DrawPoint( point.x, point.y ); 
-};
+}
 
 void wxDC::DrawPolygon( wxList *list, long xoffset, long yoffset, int fillStyle )
 {
@@ -112,10 +113,10 @@ void wxDC::DrawPolygon( wxList *list, long xoffset, long yoffset, int fillStyle
     wxPoint *point = (wxPoint *)node->Data();
     points[i].x = point->x;
     points[i++].y = point->y;
-  };
+  }
   DrawPolygon( n, points, xoffset, yoffset, fillStyle );
   delete[] points;
-};
+}
 
 void wxDC::DrawLines( wxList *list, long xoffset, long yoffset )
 {
@@ -128,32 +129,33 @@ void wxDC::DrawLines( wxList *list, long xoffset, long yoffset )
     wxPoint *point = (wxPoint *)node->Data();
     points[i].x = point->x;
     points[i++].y = point->y;
-  };
+  }
   DrawLines( n, points, xoffset, yoffset );
   delete []points;
-};
+}
 
 void wxDC::DrawSpline( long x1, long y1, long x2, long y2, long x3, long y3 )
 {
   wxList list;
-  list.DeleteContents(TRUE);
   list.Append( (wxObject*)new wxPoint(x1, y1) );
   list.Append( (wxObject*)new wxPoint(x2, y2) );
   list.Append( (wxObject*)new wxPoint(x3, y3) );
   DrawSpline(&list);
-};
-
-void wxDC::DrawSpline( wxList *points )
-{
-  DrawOpenSpline( points );
-};
+  wxNode *node = list.First();
+  while (node)
+  {
+    wxPoint *p = (wxPoint*)node->Data();
+    delete p;
+    node = node->Next();
+  }
+}
 
 void wxDC::DrawSpline( int n, wxPoint points[] )
 {
   wxList list;
   for (int i = 0; i < n; i++) list.Append( (wxObject*)&points[i] );
   DrawSpline( &list );
-};
+}
 
 void wxDC::SetClippingRegion( long x, long y, long width, long height )
 {
@@ -162,12 +164,12 @@ void wxDC::SetClippingRegion( long x, long y, long width, long height )
   m_clipY1 = y;
   m_clipX2 = x + width;
   m_clipY2 = y + height;
-};
+}
 
 void wxDC::DestroyClippingRegion(void)
 {
   m_clipping = FALSE;
-};
+}
 
 void wxDC::GetClippingBox( long *x, long *y, long *width, long *height ) const
 {
@@ -180,13 +182,13 @@ void wxDC::GetClippingBox( long *x, long *y, long *width, long *height ) const
   }
   else
    *x = *y = *width = *height = 0;
-};
+}
 
 void wxDC::GetSize( int* width, int* height ) const
 {
   *width = m_maxX-m_minX;
   *height = m_maxY-m_minY;
-};
+}
 
 void wxDC::GetSizeMM( long* width, long* height ) const
 {
@@ -195,19 +197,19 @@ void wxDC::GetSizeMM( long* width, long* height ) const
   GetSize( &w, &h );
   *width = long( double(w) / (m_scaleX*m_mm_to_pix_x) );
   *height = long( double(h) / (m_scaleY*m_mm_to_pix_y) );
-};
+}
 
 void wxDC::SetTextForeground( const wxColour &col )
 {
   if (!Ok()) return;
   m_textForegroundColour = col;
-};
+}
 
 void wxDC::SetTextBackground( const wxColour &col )
 {
   if (!Ok()) return;
   m_textBackgroundColour = col;
-};
+}
 
 void wxDC::SetMapMode( int mode )
 {
@@ -229,13 +231,13 @@ void wxDC::SetMapMode( int mode )
     case MM_TEXT:
       SetLogicalScale( 1.0, 1.0 );
       break;
-  };
+  }
   if (mode != MM_TEXT)
   {
     m_needComputeScaleX = TRUE;
     m_needComputeScaleY = TRUE;
-  };
-};
+  }
+}
 
 void wxDC::SetUserScale( double x, double y )
 {
@@ -243,13 +245,13 @@ void wxDC::SetUserScale( double x, double y )
   m_userScaleX = x;
   m_userScaleY = y;
   ComputeScaleAndOrigin();
-};
+}
 
 void wxDC::GetUserScale( double *x, double *y )
 {
   if (x) *x = m_userScaleX;
   if (y) *y = m_userScaleY;
-};
+}
 
 void wxDC::SetLogicalScale( double x, double y )
 {
@@ -257,99 +259,86 @@ void wxDC::SetLogicalScale( double x, double y )
   m_logicalScaleX = x;
   m_logicalScaleY = y;
   ComputeScaleAndOrigin();
-};
+}
 
 void wxDC::GetLogicalScale( double *x, double *y )
 {
   if (x) *x = m_logicalScaleX;
   if (y) *y = m_logicalScaleY;
-};
+}
 
 void wxDC::SetLogicalOrigin( long x, long y )
 {
   m_logicalOriginX = x * m_signX;   // is this still correct ?
   m_logicalOriginY = y * m_signY;
   ComputeScaleAndOrigin();
-};
+}
 
 void wxDC::GetLogicalOrigin( long *x, long *y )
 {
   if (x) *x = m_logicalOriginX;
   if (y) *y = m_logicalOriginY;
-};
+}
 
 void wxDC::SetDeviceOrigin( long x, long y )
 {
-  m_externalDeviceOriginX = x;
-  m_externalDeviceOriginY = y;
+  m_deviceOriginX = x;
+  m_deviceOriginY = y;
   ComputeScaleAndOrigin();
-};
+}
 
 void wxDC::GetDeviceOrigin( long *x, long *y )
 {
-  if (x) *x = m_externalDeviceOriginX;
-  if (y) *y = m_externalDeviceOriginY;
-};
-
-void wxDC::SetInternalDeviceOrigin( long x, long y )
-{
-  m_internalDeviceOriginX = x;
-  m_internalDeviceOriginY = y;
-  ComputeScaleAndOrigin();
-};
-
-void wxDC::GetInternalDeviceOrigin( long *x, long *y )
-{
-  if (x) *x = m_internalDeviceOriginX;
-  if (y) *y = m_internalDeviceOriginY;
-};
+  if (x) *x = m_deviceOriginX;
+  if (y) *y = m_deviceOriginY;
+}
 
 void wxDC::SetAxisOrientation( bool xLeftRight, bool yBottomUp )
 {
   m_signX = (xLeftRight ?  1 : -1);
   m_signY = (yBottomUp  ? -1 :  1);
   ComputeScaleAndOrigin();
-};
+}
 
 long wxDC::DeviceToLogicalX(long x) const
 {
   return XDEV2LOG(x);
-};
+}
 
 long wxDC::DeviceToLogicalY(long y) const
 {
   return YDEV2LOG(y);
-};
+}
 
 long wxDC::DeviceToLogicalXRel(long x) const
 {
   return XDEV2LOGREL(x);
-};
+}
 
 long wxDC::DeviceToLogicalYRel(long y) const
 {
   return YDEV2LOGREL(y);
-};
+}
 
 long wxDC::LogicalToDeviceX(long x) const
 {
   return XLOG2DEV(x);
-};
+}
 
 long wxDC::LogicalToDeviceY(long y) const
 {
   return YLOG2DEV(y);
-};
+}
 
 long wxDC::LogicalToDeviceXRel(long x) const
 {
   return XLOG2DEVREL(x);
-};
+}
 
 long wxDC::LogicalToDeviceYRel(long y) const
 {
   return YLOG2DEVREL(y);
-};
+}
     
 void wxDC::CalcBoundingBox( long x, long y )
 {
@@ -357,7 +346,7 @@ void wxDC::CalcBoundingBox( long x, long y )
   if (y < m_minY) m_minY = y;
   if (x > m_maxX) m_maxX = x;
   if (y > m_maxY) m_maxY = y;
-};
+}
 
 void wxDC::ComputeScaleAndOrigin(void)
 {
@@ -368,9 +357,6 @@ void wxDC::ComputeScaleAndOrigin(void)
   m_scaleX = m_logicalScaleX * m_userScaleX;
   m_scaleY = m_logicalScaleY * m_userScaleY;
 
-  m_deviceOriginX = m_internalDeviceOriginX + m_externalDeviceOriginX;
-  m_deviceOriginY = m_internalDeviceOriginY + m_externalDeviceOriginY;
-
   // CMB: if scale has changed call SetPen to recalulate the line width 
   if (m_scaleX != origScaleX || m_scaleY != origScaleY)
   {
@@ -381,5 +367,5 @@ void wxDC::ComputeScaleAndOrigin(void)
     m_pen = tempPen;
     SetPen(pen);
   }
-};
+}