- virtual bool StartDoc(const wxString& message);
- virtual void EndDoc(void);
- virtual void StartPage(void);
- virtual void EndPage(void);
- virtual void SetMapMode(int mode);
- virtual void SetUserScale(double x, double y);
- virtual void SetSystemScale(double x, double y);
- virtual void SetLogicalOrigin(long x, long y);
- virtual void SetDeviceOrigin(long x, long y);
- virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
-
- // 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;
-
- // This group of functions may not do any conversion
- // if m_scaleGDI is TRUE, since the HDC does the
- // conversion automatically.
- // m_scaleGDI NOW OBSOLETE
- long ImplDeviceToLogicalX(long x) const;
- long ImplDeviceToLogicalY(long y) const;
- long ImplDeviceToLogicalXRel(long x) const;
- long ImplDeviceToLogicalYRel(long y) const;
- long ImplLogicalToDeviceX(long x) const;
- long ImplLogicalToDeviceY(long y) const;
- long ImplLogicalToDeviceXRel(long x) const;
- long ImplLogicalToDeviceYRel(long y) const;
-
- virtual bool Blit(long xdest, long ydest, long width, long height,
- wxDC *source, long xsrc, long ysrc, int rop = wxCOPY, bool useMask = FALSE);
-
- virtual bool CanDrawBitmap(void) const;
- virtual bool CanGetTextExtent(void) const;
-
- //
- // This function is intended to improves drawing, by avoiding to
- // repeatly call ::SetPen/::SetBrush. If set to FALSE, these functions
- // aren't called when calling ::DrawLine(),...
- // Please note that this is YOUR responsability to use it, and do it
- // only when you KNOWN that pen/brush isn't changed between 2 calls to
- // DrawLine,... !!!
- // Note also that in X, we don't test m_autoSetting on brushes, because they
- // modify Foreground, as pens. So, convention is:
- // - call your SetBrush(), THEN your SetPen, THEN AutoSetTools(FALSE)
- // - call DrawLine,...
- // [mainly coded for Windows]
- inline virtual void AutoSetTools(bool auto_setting) { m_autoSetting = auto_setting ; }
- inline virtual void DrawPoint(wxPoint& point) { DrawPoint(point.x, point.y); }
- virtual void DrawLines(wxList *list, long xoffset = 0, long yoffset = 0);
- virtual void DrawPolygon(wxList *list, long xoffset = 0, long yoffset = 0, int fillStyle=wxODDEVEN_RULE);
-#if USE_SPLINES
- // Splines
- // 3-point spline
- virtual void DrawSpline(long x1, long y1, long x2, long y2, long x3, long y3);
- // Any number of control points - a list of pointers to wxPoints
- virtual void DrawSpline(wxList *points);
- virtual void DrawSpline(int n, wxPoint points[]);
+protected:
+ virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
+ int style = wxFLOOD_SURFACE);
+
+ virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
+
+ virtual void DoDrawPoint(wxCoord x, wxCoord y);
+ virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
+
+ virtual void DoDrawArc(wxCoord x1, wxCoord y1,
+ wxCoord x2, wxCoord y2,
+ wxCoord xc, wxCoord yc);
+ virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height);
+ virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
+ double sa, double ea);
+
+ virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
+ virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height,
+ double radius);
+ virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
+
+ virtual void DoCrossHair(wxCoord x, wxCoord y);
+
+ virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
+ virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
+ bool useMask = FALSE);
+
+ virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y);
+ virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
+ double angle);
+
+ virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
+ wxDC *source, wxCoord xsrc, wxCoord ysrc,
+ int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
+
+ // this is gnarly - we can't even call this function DoSetClippingRegion()
+ // because of virtual function hiding
+ virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
+ virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
+ wxCoord width, wxCoord height);
+ virtual void DoGetClippingRegion(wxCoord *x, wxCoord *y,
+ wxCoord *width, wxCoord *height)
+ {
+ GetClippingBox(x, y, width, height);
+ }
+
+ virtual void DoGetSize(int *width, int *height) const;
+ virtual void DoGetSizeMM(int* width, int* height) const;
+
+ virtual void DoDrawLines(int n, wxPoint points[],
+ wxCoord xoffset, wxCoord yoffset);
+ virtual void DoDrawPolygon(int n, wxPoint points[],
+ wxCoord xoffset, wxCoord yoffset,
+ int fillStyle = wxODDEVEN_RULE);
+
+
+#if wxUSE_PALETTE
+ // MSW specific, select a logical palette into the HDC
+ // (tell windows to translate pixel from other palettes to our custom one
+ // and vice versa)
+ // Realize tells it to also reset the system palette to this one.
+ void DoSelectPalette(bool realize = FALSE);
+
+ // Find out what palette our parent window has, then select it into the dc
+ void InitializePalette();
+#endif // wxUSE_PALETTE
+
+ // common part of DoDrawText() and DoDrawRotatedText()
+ void DrawAnyText(const wxString& text, wxCoord x, wxCoord y);
+
+ // common part of DoSetClippingRegion() and DoSetClippingRegionAsRegion()
+ void SetClippingHrgn(WXHRGN hrgn);
+
+ // MSW-specific member variables
+ // -----------------------------
+
+ // the window associated with this DC (may be NULL)
+ wxWindow *m_canvas;
+
+ wxBitmap m_selectedBitmap;
+
+ // TRUE => DeleteDC() in dtor, FALSE => only ReleaseDC() it
+ bool m_bOwnsDC:1;
+
+ // our HDC
+ WXHDC m_hDC;
+
+ // Store all old GDI objects when do a SelectObject, so we can select them
+ // back in (this unselecting user's objects) so we can safely delete the
+ // DC.
+ WXHBITMAP m_oldBitmap;
+ WXHPEN m_oldPen;
+ WXHBRUSH m_oldBrush;
+ WXHFONT m_oldFont;
+
+#if wxUSE_PALETTE
+ WXHPALETTE m_oldPalette;
+#endif // wxUSE_PALETTE
+
+#if wxUSE_DC_CACHEING
+ static wxList sm_bitmapCache;
+ static wxList sm_dcCache;