]>
git.saurik.com Git - wxWidgets.git/blob - src/stubs/dc.cpp
   1 ///////////////////////////////////////////////////////////////////////////// 
   8 // Copyright:   (c) AUTHOR 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  13 #pragma implementation "dc.h" 
  18 #if !USE_SHARED_LIBRARY 
  19 IMPLEMENT_ABSTRACT_CLASS(wxDC
, wxObject
) 
  22 //----------------------------------------------------------------------------- 
  24 //----------------------------------------------------------------------------- 
  26 #define mm2inches               0.0393700787402 
  27 #define inches2mm               25.4 
  28 #define mm2twips                56.6929133859 
  29 #define twips2mm                0.0176388888889 
  30 #define mm2pt                   2.83464566929 
  31 #define pt2mm                   0.352777777778 
  33 //----------------------------------------------------------------------------- 
  35 //----------------------------------------------------------------------------- 
  41   m_autoSetting 
= FALSE
; 
  52   m_internalDeviceOriginX 
= 0; 
  53   m_internalDeviceOriginY 
= 0; 
  54   m_externalDeviceOriginX 
= 0; 
  55   m_externalDeviceOriginY 
= 0; 
  57   m_logicalScaleX 
= 1.0; 
  58   m_logicalScaleY 
= 1.0; 
  64   m_mappingMode 
= wxMM_TEXT
; 
  65   m_needComputeScaleX 
= FALSE
; 
  66   m_needComputeScaleY 
= FALSE
; 
  68   m_signX 
= 1;  // default x-axis left to right 
  69   m_signY 
= 1;  // default y-axis top down 
  71   m_maxX 
= m_maxY 
= -100000; 
  72   m_minY 
= m_minY 
=  100000; 
  74   m_logicalFunction 
= wxCOPY
; 
  75 //  m_textAlignment = wxALIGN_TOP_LEFT; 
  76   m_backgroundMode 
= wxTRANSPARENT
; 
  78   m_textForegroundColour 
= *wxBLACK
; 
  79   m_textBackgroundColour 
= *wxWHITE
; 
  81   m_font 
= *wxNORMAL_FONT
; 
  82   m_brush 
= *wxTRANSPARENT_BRUSH
; 
  83   m_backgroundBrush 
= *wxWHITE_BRUSH
; 
  85 //  m_palette = wxAPP_COLOURMAP; 
  92 void wxDC::DrawIcon( const wxIcon 
&WXUNUSED(icon
), long WXUNUSED(x
), long WXUNUSED(y
), bool WXUNUSED(useMask
) ) 
  96 void wxDC::DrawPoint( wxPoint
& point 
)  
  98   DrawPoint( point
.x
, point
.y 
);  
 101 void wxDC::DrawPolygon( wxList 
*list
, long xoffset
, long yoffset
, int fillStyle 
) 
 103   int n 
= list
->Number(); 
 104   wxPoint 
*points 
= new wxPoint
[n
]; 
 107   for( wxNode 
*node 
= list
->First(); node
; node 
= node
->Next() ) 
 109     wxPoint 
*point 
= (wxPoint 
*)node
->Data(); 
 110     points
[i
].x 
= point
->x
; 
 111     points
[i
++].y 
= point
->y
; 
 113   DrawPolygon( n
, points
, xoffset
, yoffset
, fillStyle 
); 
 117 void wxDC::DrawLines( wxList 
*list
, long xoffset
, long yoffset 
) 
 119   int n 
= list
->Number(); 
 120   wxPoint 
*points 
= new wxPoint
[n
]; 
 123   for( wxNode 
*node 
= list
->First(); node
; node 
= node
->Next() )  
 125     wxPoint 
*point 
= (wxPoint 
*)node
->Data(); 
 126     points
[i
].x 
= point
->x
; 
 127     points
[i
++].y 
= point
->y
; 
 129   DrawLines( n
, points
, xoffset
, yoffset 
); 
 133 void wxDC::DrawSpline( long x1
, long y1
, long x2
, long y2
, long x3
, long y3 
) 
 136   list
.Append( (wxObject
*)new wxPoint(x1
, y1
) ); 
 137   list
.Append( (wxObject
*)new wxPoint(x2
, y2
) ); 
 138   list
.Append( (wxObject
*)new wxPoint(x3
, y3
) ); 
 140   wxNode 
*node 
= list
.First(); 
 143     wxPoint 
*p 
= (wxPoint
*)node
->Data(); 
 149 void wxDC::DrawSpline( int n
, wxPoint points
[] ) 
 152   for (int i 
= 0; i 
< n
; i
++) list
.Append( (wxObject
*)&points
[i
] ); 
 156 void wxDC::SetClippingRegion( long x
, long y
, long width
, long height 
) 
 161   m_clipX2 
= x 
+ width
; 
 162   m_clipY2 
= y 
+ height
; 
 165 void wxDC::DestroyClippingRegion(void) 
 170 void wxDC::GetClippingBox( long *x
, long *y
, long *width
, long *height 
) const 
 174     if (x
) *x 
= m_clipX1
; 
 175     if (y
) *y 
= m_clipY1
; 
 176     if (width
) *width 
= (m_clipX2 
- m_clipX1
); 
 177     if (height
) *height 
= (m_clipY2 
- m_clipY1
); 
 180    *x 
= *y 
= *width 
= *height 
= 0; 
 183 void wxDC::GetSize( int* width
, int* height 
) const 
 185   *width 
= m_maxX
-m_minX
; 
 186   *height 
= m_maxY
-m_minY
; 
 189 void wxDC::GetSizeMM( long* width
, long* height 
) const 
 194   *width 
= long( double(w
) / (m_scaleX
*m_mm_to_pix_x
) ); 
 195   *height 
= long( double(h
) / (m_scaleY
*m_mm_to_pix_y
) ); 
 198 void wxDC::SetTextForeground( const wxColour 
&col 
) 
 201   m_textForegroundColour 
= col
; 
 204 void wxDC::SetTextBackground( const wxColour 
&col 
) 
 207   m_textBackgroundColour 
= col
; 
 210 void wxDC::SetMapMode( int mode 
) 
 215       SetLogicalScale( twips2mm
*m_mm_to_pix_x
, twips2mm
*m_mm_to_pix_y 
); 
 218       SetLogicalScale( pt2mm
*m_mm_to_pix_x
, pt2mm
*m_mm_to_pix_y 
); 
 221       SetLogicalScale( m_mm_to_pix_x
, m_mm_to_pix_y 
); 
 224       SetLogicalScale( m_mm_to_pix_x
/10.0, m_mm_to_pix_y
/10.0 ); 
 228       SetLogicalScale( 1.0, 1.0 ); 
 231   if (mode 
!= wxMM_TEXT
) 
 233     m_needComputeScaleX 
= TRUE
; 
 234     m_needComputeScaleY 
= TRUE
; 
 238 void wxDC::SetUserScale( double x
, double y 
) 
 240   // allow negative ? -> no 
 243   ComputeScaleAndOrigin(); 
 246 void wxDC::GetUserScale( double *x
, double *y 
) 
 248   if (x
) *x 
= m_userScaleX
; 
 249   if (y
) *y 
= m_userScaleY
; 
 252 void wxDC::SetLogicalScale( double x
, double y 
) 
 257   ComputeScaleAndOrigin(); 
 260 void wxDC::GetLogicalScale( double *x
, double *y 
) 
 262   if (x
) *x 
= m_logicalScaleX
; 
 263   if (y
) *y 
= m_logicalScaleY
; 
 266 void wxDC::SetLogicalOrigin( long x
, long y 
) 
 268   m_logicalOriginX 
= x 
* m_signX
;   // is this still correct ? 
 269   m_logicalOriginY 
= y 
* m_signY
; 
 270   ComputeScaleAndOrigin(); 
 273 void wxDC::GetLogicalOrigin( long *x
, long *y 
) 
 275   if (x
) *x 
= m_logicalOriginX
; 
 276   if (y
) *y 
= m_logicalOriginY
; 
 279 void wxDC::SetDeviceOrigin( long x
, long y 
) 
 281   m_externalDeviceOriginX 
= x
; 
 282   m_externalDeviceOriginY 
= y
; 
 283   ComputeScaleAndOrigin(); 
 286 void wxDC::GetDeviceOrigin( long *x
, long *y 
) 
 288 //  if (x) *x = m_externalDeviceOriginX; 
 289 //  if (y) *y = m_externalDeviceOriginY; 
 290   if (x
) *x 
= m_deviceOriginX
; 
 291   if (y
) *y 
= m_deviceOriginY
; 
 294 void wxDC::SetInternalDeviceOrigin( long x
, long y 
) 
 296   m_internalDeviceOriginX 
= x
; 
 297   m_internalDeviceOriginY 
= y
; 
 298   ComputeScaleAndOrigin(); 
 301 void wxDC::GetInternalDeviceOrigin( long *x
, long *y 
) 
 303   if (x
) *x 
= m_internalDeviceOriginX
; 
 304   if (y
) *y 
= m_internalDeviceOriginY
; 
 307 void wxDC::SetAxisOrientation( bool xLeftRight
, bool yBottomUp 
) 
 309   m_signX 
= (xLeftRight 
?  1 : -1); 
 310   m_signY 
= (yBottomUp  
? -1 :  1); 
 311   ComputeScaleAndOrigin(); 
 314 long wxDC::DeviceToLogicalX(long x
) const 
 319 long wxDC::DeviceToLogicalY(long y
) const 
 324 long wxDC::DeviceToLogicalXRel(long x
) const 
 326   return XDEV2LOGREL(x
); 
 329 long wxDC::DeviceToLogicalYRel(long y
) const 
 331   return YDEV2LOGREL(y
); 
 334 long wxDC::LogicalToDeviceX(long x
) const 
 339 long wxDC::LogicalToDeviceY(long y
) const 
 344 long wxDC::LogicalToDeviceXRel(long x
) const 
 346   return XLOG2DEVREL(x
); 
 349 long wxDC::LogicalToDeviceYRel(long y
) const 
 351   return YLOG2DEVREL(y
); 
 354 void wxDC::CalcBoundingBox( long x
, long y 
) 
 356   if (x 
< m_minX
) m_minX 
= x
; 
 357   if (y 
< m_minY
) m_minY 
= y
; 
 358   if (x 
> m_maxX
) m_maxX 
= x
; 
 359   if (y 
> m_maxY
) m_maxY 
= y
; 
 362 void wxDC::ComputeScaleAndOrigin(void) 
 364   // CMB: copy scale to see if it changes 
 365   double origScaleX 
= m_scaleX
; 
 366   double origScaleY 
= m_scaleY
; 
 368   m_scaleX 
= m_logicalScaleX 
* m_userScaleX
; 
 369   m_scaleY 
= m_logicalScaleY 
* m_userScaleY
; 
 371   m_deviceOriginX 
= m_internalDeviceOriginX 
+ m_externalDeviceOriginX
; 
 372   m_deviceOriginY 
= m_internalDeviceOriginY 
+ m_externalDeviceOriginY
; 
 374   // CMB: if scale has changed call SetPen to recalulate the line width  
 375   if (m_scaleX 
!= origScaleX 
|| m_scaleY 
!= origScaleY
) 
 377     // this is a bit artificial, but we need to force wxDC to think 
 378     // the pen has changed 
 379     wxPen
* pen 
= & GetPen();