+/////////////////////////////////////////////////////////////////////////////
+// Name: dc.h
+// Purpose: wxDC class
+// Author: Vadim Zeitlin
+// Modified by:
+// Created: 05/25/99
+// RCS-ID: $Id$
+// Copyright: (c) wxWindows team
+// Licence: wxWindows licence
+/////////////////////////////////////////////////////////////////////////////
+
#ifndef _WX_DC_H_BASE_
#define _WX_DC_H_BASE_
#include "wx/list.h" // we use wxList in inline functions
-// ---------------------------------------------------------------------------
-// types
-// ---------------------------------------------------------------------------
-
-// type which should be used (whenever possible, i.e. as long as it doesn't
-// break compatibility) for screen coordinates
-typedef int wxCoord;
-
// ---------------------------------------------------------------------------
// global variables
// ---------------------------------------------------------------------------
m_deviceOriginX = m_deviceOriginY = 0;
m_logicalScaleX = m_logicalScaleY =
- m_userScaleX = m_userScaleY =
+ m_userScaleX = m_userScaleY =
m_scaleX = m_scaleY = 1.0;
m_logicalFunction = -1;
m_mappingMode = wxMM_TEXT;
- m_backgroundBrush = *wxWHITE_BRUSH;
+ m_backgroundBrush = *wxTRANSPARENT_BRUSH;
m_textForegroundColour = *wxBLACK;
m_textBackgroundColour = *wxWHITE;
// graphic primitives
// ------------------
- void FloodFill(long x, long y, const wxColour& col,
- int style = wxFLOOD_SURFACE)
+ void FloodFill(wxCoord x, wxCoord y, const wxColour& col,
+ int style = wxFLOOD_SURFACE)
{ DoFloodFill(x, y, col, style); }
void FloodFill(const wxPoint& pt, const wxColour& col,
- int style = wxFLOOD_SURFACE)
+ int style = wxFLOOD_SURFACE)
{ DoFloodFill(pt.x, pt.y, col, style); }
- bool GetPixel(long x, long y, wxColour *col) const
+ bool GetPixel(wxCoord x, wxCoord y, wxColour *col) const
{ return DoGetPixel(x, y, col); }
bool GetPixel(const wxPoint& pt, wxColour *col) const
{ return DoGetPixel(pt.x, pt.y, col); }
- void DrawLine(long x1, long y1, long x2, long y2)
+ void DrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
{ DoDrawLine(x1, y1, x2, y2); }
void DrawLine(const wxPoint& pt1, const wxPoint& pt2)
{ DoDrawLine(pt1.x, pt1.y, pt2.x, pt2.y); }
- void CrossHair(long x, long y)
+ void CrossHair(wxCoord x, wxCoord y)
{ DoCrossHair(x, y); }
void CrossHair(const wxPoint& pt)
{ DoCrossHair(pt.x, pt.y); }
- void DrawArc(long x1, long y1, long x2, long y2, long xc, long yc)
+ void DrawArc(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2,
+ wxCoord xc, wxCoord yc)
{ DoDrawArc(x1, y1, x2, y2, xc, yc); }
void DrawArc(const wxPoint& pt1, const wxPoint& pt2, const wxPoint& centre)
{ DoDrawArc(pt1.x, pt1.y, pt2.x, pt2.y, centre.x, centre.y); }
- void DrawEllipticArc(long x, long y, long w, long h, double sa, double ea)
- { DoDrawEllipticArc(x, y, x, y, sa, ea); }
+ void DrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
+ double sa, double ea)
+ { DoDrawEllipticArc(x, y, w, h, sa, ea); }
void DrawEllipticArc(const wxPoint& pt, const wxSize& sz,
double sa, double ea)
{ DoDrawEllipticArc(pt.x, pt.y, sz.x, sz.y, sa, ea); }
- void DrawPoint(long x, long y)
+ void DrawPoint(wxCoord x, wxCoord y)
{ DoDrawPoint(x, y); }
void DrawPoint(const wxPoint& pt)
{ DoDrawPoint(pt.x, pt.y); }
- void DrawLines(int n, wxPoint points[], long xoffset = 0, long yoffset = 0)
+ void DrawLines(int n, wxPoint points[],
+ wxCoord xoffset = 0, wxCoord yoffset = 0)
{ DoDrawLines(n, points, xoffset, yoffset); }
- void DrawLines(const wxList *list, long xoffset = 0, long yoffset = 0)
- {
- int n = list->Number();
- wxPoint *points = new wxPoint[n];
-
- int i = 0;
- for ( wxNode *node = list->First(); node; node = node->Next(), i++ )
- {
- wxPoint *point = (wxPoint *)node->Data();
- points[i].x = point->x;
- points[i].y = point->y;
- }
-
- DoDrawLines(n, points, xoffset, yoffset);
-
- delete [] points;
- }
+ void DrawLines(const wxList *list,
+ wxCoord xoffset = 0, wxCoord yoffset = 0);
void DrawPolygon(int n, wxPoint points[],
- long xoffset = 0, long yoffset = 0,
+ wxCoord xoffset = 0, wxCoord yoffset = 0,
int fillStyle = wxODDEVEN_RULE)
{ DoDrawPolygon(n, points, xoffset, yoffset, fillStyle); }
void DrawPolygon(const wxList *list,
- long xoffset = 0, long yoffset = 0,
- int fillStyle = wxODDEVEN_RULE)
- {
- int n = list->Number();
- wxPoint *points = new wxPoint[n];
+ wxCoord xoffset = 0, wxCoord yoffset = 0,
+ int fillStyle = wxODDEVEN_RULE);
- int i = 0;
- for ( wxNode *node = list->First(); node; node = node->Next(), i++ )
- {
- wxPoint *point = (wxPoint *)node->Data();
- points[i].x = point->x;
- points[i].y = point->y;
- }
-
- DoDrawPolygon(n, points, xoffset, yoffset, fillStyle);
-
- delete [] points;
- }
-
- void DrawRectangle(long x, long y, long width, long height)
+ void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{ DoDrawRectangle(x, y, width, height); }
void DrawRectangle(const wxPoint& pt, const wxSize& sz)
{ DoDrawRectangle(pt.x, pt.y, sz.x, sz.y); }
void DrawRectangle(const wxRect& rect)
{ DoDrawRectangle(rect.x, rect.y, rect.width, rect.height); }
- void DrawRoundedRectangle(long x, long y, long width, long height,
+ void DrawRoundedRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height,
double radius)
{ DoDrawRoundedRectangle(x, y, width, height, radius); }
void DrawRoundedRectangle(const wxPoint& pt, const wxSize& sz,
void DrawRoundedRectangle(const wxRect& r, double radius)
{ DoDrawRoundedRectangle(r.x, r.y, r.width, r.height, radius); }
- void DrawEllipse(long x, long y, long width, long height)
+ void DrawCircle(wxCoord x, wxCoord y, wxCoord radius)
+ { DoDrawEllipse(x - radius, y - radius, 2*radius, 2*radius); }
+ void DrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{ DoDrawEllipse(x, y, width, height); }
void DrawEllipse(const wxPoint& pt, const wxSize& sz)
{ DoDrawEllipse(pt.x, pt.y, sz.x, sz.y); }
void DrawEllipse(const wxRect& rect)
{ DoDrawEllipse(rect.x, rect.y, rect.width, rect.height); }
- void DrawIcon(const wxIcon& icon, long x, long y)
+ void DrawIcon(const wxIcon& icon, wxCoord x, wxCoord y)
{ DoDrawIcon(icon, x, y); }
void DrawIcon(const wxIcon& icon, const wxPoint& pt)
{ DoDrawIcon(icon, pt.x, pt.y); }
- void DrawBitmap(const wxBitmap &bmp, long x, long y, bool useMask = FALSE)
+ void DrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
+ bool useMask = FALSE)
{ DoDrawBitmap(bmp, x, y, useMask); }
void DrawBitmap(const wxBitmap &bmp, const wxPoint& pt,
bool useMask = FALSE)
{ DoDrawBitmap(bmp, pt.x, pt.y, useMask); }
- void DrawText(const wxString& text, long x, long y)
+ void DrawText(const wxString& text, wxCoord x, wxCoord y)
{ DoDrawText(text, x, y); }
void DrawText(const wxString& text, const wxPoint& pt)
{ DoDrawText(text, pt.x, pt.y); }
- bool Blit(long xdest, long ydest, long width, long height,
- wxDC *source, long xsrc, long ysrc,
+ bool Blit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
+ wxDC *source, wxCoord xsrc, wxCoord ysrc,
int rop = wxCOPY, bool useMask = FALSE)
{
return DoBlit(xdest, ydest, width, height,
#if wxUSE_SPLINES
// TODO: this API needs fixing (wxPointList, why (!const) "wxList *"?)
- void DrawSpline(long x1, long y1, long x2, long y2, long x3, long y3)
- {
- wxList point_list;
-
- wxPoint *point1 = new wxPoint;
- point1->x = x1; point1->y = y1;
- point_list.Append((wxObject*)point1);
-
- wxPoint *point2 = new wxPoint;
- point2->x = x2; point2->y = y2;
- point_list.Append((wxObject*)point2);
-
- wxPoint *point3 = new wxPoint;
- point3->x = x3; point3->y = y3;
- point_list.Append((wxObject*)point3);
-
- DrawSpline(&point_list);
-
- for( wxNode *node = point_list.First(); node; node = node->Next() )
- {
- wxPoint *p = (wxPoint *)node->Data();
- delete p;
- }
- }
-
- void DrawSpline(int n, wxPoint points[])
- {
- wxList list;
- for (int i =0; i < n; i++)
- {
- list.Append((wxObject*)&points[i]);
- }
-
- DrawSpline(&list);
- }
+ void DrawSpline(wxCoord x1, wxCoord y1,
+ wxCoord x2, wxCoord y2,
+ wxCoord x3, wxCoord y3);
+ void DrawSpline(int n, wxPoint points[]);
void DrawSpline(wxList *points) { DoDrawSpline(points); }
#endif // wxUSE_SPLINES
virtual void Clear() = 0;
- virtual bool StartDoc(const wxString& message) = 0;
- virtual void EndDoc() = 0;
+ virtual bool StartDoc(const wxString& WXUNUSED(message)) { return TRUE; }
+ virtual void EndDoc() { }
- virtual void StartPage() = 0;
- virtual void EndPage() = 0;
+ virtual void StartPage() { }
+ virtual void EndPage() { }
// set objects to use for drawing
// ------------------------------
// clipping region
// ---------------
- void SetClippingRegion(long x, long y, long width, long height)
+ void SetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height)
{ DoSetClippingRegion(x, y, width, height); }
void SetClippingRegion(const wxPoint& pt, const wxSize& sz)
{ DoSetClippingRegion(pt.x, pt.y, sz.x, sz.y); }
virtual void DestroyClippingRegion() = 0;
- void GetClippingBox(long *x, long *y, long *w, long *h) const
+ void GetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const
{ DoGetClippingBox(x, y, w, h); }
void GetClippingBox(wxRect& rect) const
- { DoGetClippingBox(&rect.x, &rect.y, &rect.width, &rect.height); }
+ {
+ // Necessary to use intermediate variables for 16-bit compilation
+ wxCoord x, y, w, h;
+ DoGetClippingBox(&x, &y, &w, &h);
+ rect.x = x; rect.y = y; rect.width = w; rect.height = h;
+ }
// text extent
// -----------
- virtual long GetCharHeight() const = 0;
- virtual long GetCharWidth() const = 0;
- virtual void GetTextExtent(const wxString& string,
- long *x, long *y,
- long *descent = NULL,
- long *externalLeading = NULL,
- wxFont *theFont = NULL) const = 0;
+ virtual wxCoord GetCharHeight() const = 0;
+ virtual wxCoord GetCharWidth() const = 0;
+
+ void GetTextExtent(const wxString& string,
+ wxCoord *x, wxCoord *y,
+ wxCoord *descent = NULL,
+ wxCoord *externalLeading = NULL,
+ wxFont *theFont = NULL) const
+ { DoGetTextExtent(string, x, y, descent, externalLeading, theFont); }
// size and resolution
// -------------------
// This group of functions does actual conversion of the input, as you'd
// expect.
- long DeviceToLogicalX(long x) const;
- long DeviceToLogicalY(long y) const;
- long DeviceToLogicalXRel(long x) const;
- long DeviceToLogicalYRel(long y) const;
- long LogicalToDeviceX(long x) const;
- long LogicalToDeviceY(long y) const;
- long LogicalToDeviceXRel(long x) const;
- long LogicalToDeviceYRel(long y) const;
+ wxCoord DeviceToLogicalX(wxCoord x) const;
+ wxCoord DeviceToLogicalY(wxCoord y) const;
+ wxCoord DeviceToLogicalXRel(wxCoord x) const;
+ wxCoord DeviceToLogicalYRel(wxCoord y) const;
+ wxCoord LogicalToDeviceX(wxCoord x) const;
+ wxCoord LogicalToDeviceY(wxCoord y) const;
+ wxCoord LogicalToDeviceXRel(wxCoord x) const;
+ wxCoord LogicalToDeviceYRel(wxCoord y) const;
// query DC capabilities
// ---------------------
if ( x ) *x = m_userScaleX;
if ( y ) *y = m_userScaleY;
}
- void SetSystemScale(double x, double y)
- { SetUserScale(x, y); }
virtual void SetUserScale(double x, double y) = 0;
virtual void GetLogicalScale(double *x, double *y)
m_logicalScaleY = y;
}
- void GetLogicalOrigin(long *x, long *y) const
+ void GetLogicalOrigin(wxCoord *x, wxCoord *y) const
{ DoGetLogicalOrigin(x, y); }
wxPoint GetLogicalOrigin() const
- { long x, y; DoGetLogicalOrigin(&x, &y); return wxPoint(x, y); }
- virtual void SetLogicalOrigin(long x, long y) = 0;
+ { wxCoord x, y; DoGetLogicalOrigin(&x, &y); return wxPoint(x, y); }
+ virtual void SetLogicalOrigin(wxCoord x, wxCoord y) = 0;
- void GetDeviceOrigin(long *x, long *y) const
+ void GetDeviceOrigin(wxCoord *x, wxCoord *y) const
{ DoGetDeviceOrigin(x, y); }
wxPoint GetDeviceOrigin() const
- { long x, y; DoGetDeviceOrigin(&x, &y); return wxPoint(x, y); }
- virtual void SetDeviceOrigin(long x, long y) = 0;
+ { wxCoord x, y; DoGetDeviceOrigin(&x, &y); return wxPoint(x, y); }
+ virtual void SetDeviceOrigin(wxCoord x, wxCoord y) = 0;
virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) = 0;
// bounding box
// ------------
- virtual void CalcBoundingBox(long x, long y)
+ virtual void CalcBoundingBox(wxCoord x, wxCoord y)
{
- if (x < m_minX) m_minX = x;
- if (y < m_minY) m_minY = y;
- if (x > m_maxX) m_maxX = x;
- if (y > m_maxY) m_maxY = y;
+ if ( x < m_minX ) m_minX = x;
+ if ( y < m_minY ) m_minY = y;
+ if ( x > m_maxX ) m_maxX = x;
+ if ( y > m_maxY ) m_maxY = y;
}
// Get the final bounding box of the PostScript or Metafile picture.
- long MinX() const { return m_minX; }
- long MaxX() const { return m_maxX; }
- long MinY() const { return m_minY; }
- long MaxY() const { return m_maxY; }
+ wxCoord MinX() const { return m_minX; }
+ wxCoord MaxX() const { return m_maxX; }
+ wxCoord MinY() const { return m_minY; }
+ wxCoord MaxY() const { return m_maxY; }
// misc old functions
// ------------------
+ // for compatibility with the old code when wxCoord was long everywhere
+#ifndef __WIN16__
+ void GetTextExtent(const wxString& string,
+ long *x, long *y,
+ long *descent = NULL,
+ long *externalLeading = NULL,
+ wxFont *theFont = NULL) const
+ {
+ wxCoord x2, y2, descent2, externalLeading2;
+ DoGetTextExtent(string, &x2, &y2,
+ &descent2, &externalLeading2,
+ theFont);
+ if ( x )
+ *x = x2;
+ if ( y )
+ *y = y2;
+ if ( descent )
+ *descent = descent2;
+ if ( externalLeading )
+ *externalLeading = externalLeading2;
+ }
+
+ void GetLogicalOrigin(long *x, long *y) const
+ {
+ wxCoord x2, y2;
+ DoGetLogicalOrigin(&x2, &y2);
+ if ( x )
+ *x = x2;
+ if ( y )
+ *y = y2;
+ }
+
+ void GetDeviceOrigin(long *x, long *y) const
+ {
+ wxCoord x2, y2;
+ DoGetDeviceOrigin(&x2, &y2);
+ if ( x )
+ *x = x2;
+ if ( y )
+ *y = y2;
+ }
+ void GetClippingBox(long *x, long *y, long *w, long *h) const
+ {
+ wxCoord xx,yy,ww,hh;
+ DoGetClippingBox(&xx, &yy, &ww, &hh);
+ if (x) *x = xx;
+ if (y) *y = yy;
+ if (w) *w = ww;
+ if (h) *h = hh;
+ }
+#endif // !Win16
+
#if WXWIN_COMPATIBILITY
virtual void SetColourMap(const wxPalette& palette) { SetPalette(palette); }
void GetTextExtent(const wxString& string, float *x, float *y,
protected:
// the pure virtual functions which should be implemented by wxDC
- virtual void DoFloodFill(long x, long y, const wxColour& col,
+ virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
int style = wxFLOOD_SURFACE) = 0;
- virtual bool DoGetPixel(long x, long y, wxColour *col) const = 0;
+ virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const = 0;
- virtual void DoDrawPoint(long x, long y) = 0;
- virtual void DoDrawLine(long x1, long y1, long x2, long y2) = 0;
+ virtual void DoDrawPoint(wxCoord x, wxCoord y) = 0;
+ virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2) = 0;
- virtual void DoDrawArc(long x1, long y1,
- long x2, long y2,
- long xc, long yc) = 0;
- virtual void DoDrawEllipticArc(long x, long y, long w, long h,
+ virtual void DoDrawArc(wxCoord x1, wxCoord y1,
+ wxCoord x2, wxCoord y2,
+ wxCoord xc, wxCoord yc) = 0;
+ virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
double sa, double ea) = 0;
- virtual void DoDrawRectangle(long x, long y, long width, long height) = 0;
- virtual void DoDrawRoundedRectangle(long x, long y,
- long width, long height,
+ virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) = 0;
+ virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height,
double radius) = 0;
- virtual void DoDrawEllipse(long x, long y, long width, long height) = 0;
+ virtual void DoDrawEllipse(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height) = 0;
- virtual void DoCrossHair(long x, long y) = 0;
+ virtual void DoCrossHair(wxCoord x, wxCoord y) = 0;
- virtual void DoDrawIcon(const wxIcon& icon, long x, long y) = 0;
- virtual void DoDrawBitmap(const wxBitmap &bmp, long x, long y,
+ virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y) = 0;
+ virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
bool useMask = FALSE) = 0;
- virtual void DoDrawText(const wxString& text, long x, long y) = 0;
+ virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y) = 0;
- virtual bool DoBlit(long xdest, long ydest, long width, long height,
- wxDC *source, long xsrc, long ysrc,
+ virtual bool DoBlit(wxCoord xdest, wxCoord ydest,
+ wxCoord width, wxCoord height,
+ wxDC *source, wxCoord xsrc, wxCoord ysrc,
int rop = wxCOPY, bool useMask = FALSE) = 0;
virtual void DoGetSize(int *width, int *height) const = 0;
virtual void DoGetSizeMM(int* width, int* height) const = 0;
virtual void DoDrawLines(int n, wxPoint points[],
- long xoffset, long yoffset) = 0;
+ wxCoord xoffset, wxCoord yoffset) = 0;
virtual void DoDrawPolygon(int n, wxPoint points[],
- long xoffset, long yoffset,
+ wxCoord xoffset, wxCoord yoffset,
int fillStyle = wxODDEVEN_RULE) = 0;
virtual void DoSetClippingRegionAsRegion(const wxRegion& region) = 0;
- virtual void DoSetClippingRegion(long x, long y,
- long width, long height) = 0;
+ virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height) = 0;
// FIXME are these functions really different?
- virtual void DoGetClippingRegion(long *x, long *y,
- long *w, long *h)
+ virtual void DoGetClippingRegion(wxCoord *x, wxCoord *y,
+ wxCoord *w, wxCoord *h)
{ DoGetClippingBox(x, y, w, h); }
- virtual void DoGetClippingBox(long *x, long *y,
- long *w, long *h) const
+ virtual void DoGetClippingBox(wxCoord *x, wxCoord *y,
+ wxCoord *w, wxCoord *h) const
{
if ( m_clipping )
{
}
}
- virtual void DoGetLogicalOrigin(long *x, long *y) const
+ virtual void DoGetLogicalOrigin(wxCoord *x, wxCoord *y) const
{
if ( x ) *x = m_logicalOriginX;
if ( y ) *y = m_logicalOriginY;
}
- virtual void DoGetDeviceOrigin(long *x, long *y) const
+ virtual void DoGetDeviceOrigin(wxCoord *x, wxCoord *y) const
{
if ( x ) *x = m_deviceOriginX;
if ( y ) *y = m_deviceOriginY;
}
+ virtual void DoGetTextExtent(const wxString& string,
+ wxCoord *x, wxCoord *y,
+ wxCoord *descent = NULL,
+ wxCoord *externalLeading = NULL,
+ wxFont *theFont = NULL) const = 0;
+
+#if wxUSE_SPLINES
virtual void DoDrawSpline(wxList *points) = 0;
+#endif
protected:
// flags
// TODO short descriptions of what exactly they are would be nice...
- long m_logicalOriginX, m_logicalOriginY;
- long m_deviceOriginX, m_deviceOriginY;
+ wxCoord m_logicalOriginX, m_logicalOriginY;
+ wxCoord m_deviceOriginX, m_deviceOriginY;
double m_logicalScaleX, m_logicalScaleY;
double m_userScaleX, m_userScaleY;
int m_signX, m_signY;
// bounding and clipping boxes
- long m_minX, m_minY, m_maxX, m_maxY;
- long m_clipX1, m_clipY1, m_clipX2, m_clipY2;
+ wxCoord m_minX, m_minY, m_maxX, m_maxY;
+ wxCoord m_clipX1, m_clipY1, m_clipX2, m_clipY2;
int m_logicalFunction;
int m_backgroundMode;
#include "wx/qt/dc.h"
#elif defined(__WXMAC__)
#include "wx/mac/dc.h"
+#elif defined(__WXPM__)
+ #include "wx/os2/dc.h"
#elif defined(__WXSTUBS__)
#include "wx/stubs/dc.h"
#endif