1 ///////////////////////////////////////////////////////////////////////////// 2 // Name: wx/x11/dcclient.h 3 // Purpose: wxClientDC, wxPaintDC and wxWindowDC classes 4 // Author: Julian Smart 5 // Modified by: 6 // Created: 17/09/98 7 // Copyright: (c) Julian Smart 8 // Licence: wxWindows licence 9 ///////////////////////////////////////////////////////////////////////////// 10 11 #ifndef _WX_DCCLIENT_H_ 12 #define _WX_DCCLIENT_H_ 13 14 #include "wx/dc.h" 15 #include "wx/dcclient.h" 16 #include "wx/x11/dc.h" 17 #include "wx/region.h" 18 19 // ----------------------------------------------------------------------------- 20 // fwd declarations 21 // ----------------------------------------------------------------------------- 22 23 class WXDLLIMPEXP_FWD_CORE wxWindow; 24 25 //----------------------------------------------------------------------------- 26 // wxWindowDCImpl 27 //----------------------------------------------------------------------------- 28 29 class WXDLLIMPEXP_CORE wxWindowDCImpl : public wxX11DCImpl 30 { 31 public: 32 wxWindowDCImpl( wxDC *owner ); 33 wxWindowDCImpl( wxDC *owner, wxWindow *win ); 34 35 virtual ~wxWindowDCImpl(); 36 CanDrawBitmap()37 virtual bool CanDrawBitmap() const { return true; } CanGetTextExtent()38 virtual bool CanGetTextExtent() const { return true; } 39 40 protected: 41 virtual void DoGetSize(int *width, int *height) const; 42 virtual bool DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, 43 wxFloodFillStyle style = wxFLOOD_SURFACE ); 44 virtual bool DoGetPixel( wxCoord x, wxCoord y, wxColour *col ) const; 45 46 virtual void DoDrawPoint(wxCoord x, wxCoord y); 47 virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); 48 49 virtual void DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y ); 50 virtual void DoDrawBitmap( const wxBitmap &bitmap, wxCoord x, wxCoord y, 51 bool useMask = false ); 52 53 virtual void DoDrawArc(wxCoord x1, wxCoord y1, 54 wxCoord x2, wxCoord y2, 55 wxCoord xc, wxCoord yc); 56 virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, 57 double sa, double ea); 58 59 virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); 60 virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, 61 wxCoord width, wxCoord height, 62 double radius); 63 virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); 64 65 virtual void DoCrossHair(wxCoord x, wxCoord y); 66 67 virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); 68 virtual void DoDrawRotatedText(const wxString &text, wxCoord x, wxCoord y, double angle); 69 70 virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, 71 wxDC *source, wxCoord xsrc, wxCoord ysrc, 72 wxRasterOperationMode rop = wxCOPY, bool useMask = false, 73 wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); 74 75 virtual void DoSetClippingRegion(wxCoord x, wxCoord y, 76 wxCoord width, wxCoord height); 77 virtual void DoSetDeviceClippingRegion(const wxRegion& region); 78 79 virtual void DoDrawLines(int n, const wxPoint points[], 80 wxCoord xoffset, wxCoord yoffset); 81 virtual void DoDrawPolygon(int n, const wxPoint points[], 82 wxCoord xoffset, wxCoord yoffset, 83 wxPolygonFillMode fillStyle = wxODDEVEN_RULE); 84 85 86 public: 87 virtual void Clear(); 88 89 virtual void SetFont(const wxFont& font); 90 virtual void SetPen(const wxPen& pen); 91 virtual void SetBrush(const wxBrush& brush); 92 virtual void SetBackground(const wxBrush& brush); 93 virtual void SetBackgroundMode(int mode); 94 virtual void SetPalette(const wxPalette& palette); 95 virtual void SetLogicalFunction( wxRasterOperationMode function ); 96 97 virtual void SetTextForeground(const wxColour& colour); 98 virtual void SetTextBackground(const wxColour& colour); 99 100 virtual wxCoord GetCharHeight() const; 101 virtual wxCoord GetCharWidth() const; 102 103 virtual int GetDepth() const; 104 virtual wxSize GetPPI() const; 105 106 virtual void DestroyClippingRegion(); GetX11Window()107 WXWindow GetX11Window() const { return m_x11window; } 108 109 virtual void ComputeScaleAndOrigin(); 110 111 protected: 112 // implementation 113 // -------------- 114 virtual void DoGetTextExtent(const wxString& string, 115 wxCoord *x, wxCoord *y, 116 wxCoord *descent = NULL, 117 wxCoord *externalLeading = NULL, 118 const wxFont *theFont = NULL) const; 119 120 void Init(); 121 122 WXDisplay *m_display; 123 WXWindow m_x11window; 124 WXGC m_penGC; 125 WXGC m_brushGC; 126 WXGC m_textGC; 127 WXGC m_bgGC; 128 WXColormap m_cmap; 129 bool m_isMemDC; 130 bool m_isScreenDC; 131 wxRegion m_currentClippingRegion; 132 wxRegion m_paintClippingRegion; 133 134 #if wxUSE_UNICODE 135 PangoContext *m_context; 136 PangoFontDescription *m_fontdesc; 137 #endif 138 139 void SetUpDC(); 140 void Destroy(); 141 142 private: 143 DECLARE_CLASS(wxWindowDCImpl) 144 }; 145 146 //----------------------------------------------------------------------------- 147 // wxClientDC 148 //----------------------------------------------------------------------------- 149 150 class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl 151 { 152 public: wxClientDCImpl(wxDC * owner)153 wxClientDCImpl( wxDC *owner ) : wxWindowDCImpl( owner ) { } 154 wxClientDCImpl( wxDC *owner, wxWindow *win ); 155 156 protected: 157 virtual void DoGetSize(int *width, int *height) const; 158 159 private: 160 DECLARE_CLASS(wxClientDCImpl) 161 }; 162 163 //----------------------------------------------------------------------------- 164 // wxPaintDC 165 //----------------------------------------------------------------------------- 166 167 class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl 168 { 169 public: wxPaintDCImpl(wxDC * owner)170 wxPaintDCImpl( wxDC *owner ) : wxClientDCImpl( owner ) { } 171 wxPaintDCImpl( wxDC *owner, wxWindow *win ); 172 173 private: 174 DECLARE_CLASS(wxPaintDCImpl) 175 }; 176 177 #endif 178 // _WX_DCCLIENT_H_ 179