]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/dcclient.h
Added experimental async clipboard format query
[wxWidgets.git] / include / wx / gtk / dcclient.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: dcclient.h
3 // Purpose:
4 // Author: Robert Roebling
5 // Id: $Id$
6 // Copyright: (c) 1998 Robert Roebling
7 // Licence: wxWindows licence
8 /////////////////////////////////////////////////////////////////////////////
9
10 #ifndef _WX_GTKDCCLIENT_H_
11 #define _WX_GTKDCCLIENT_H_
12
13 #include "wx/gtk/dc.h"
14 #include "wx/dcclient.h"
15 #include "wx/region.h"
16
17 class WXDLLIMPEXP_FWD_CORE wxWindow;
18
19 //-----------------------------------------------------------------------------
20 // wxWindowDCImpl
21 //-----------------------------------------------------------------------------
22
23 class WXDLLIMPEXP_CORE wxWindowDCImpl : public wxGTKDCImpl
24 {
25 public:
26 wxWindowDCImpl( wxDC *owner );
27 wxWindowDCImpl( wxDC *owner, wxWindow *win );
28
29 virtual ~wxWindowDCImpl();
30
31 virtual bool CanDrawBitmap() const { return true; }
32 virtual bool CanGetTextExtent() const { return true; }
33
34 virtual void DoGetSize(int *width, int *height) const;
35 virtual bool DoFloodFill( wxCoord x, wxCoord y, const wxColour& col, int style=wxFLOOD_SURFACE );
36 virtual bool DoGetPixel( wxCoord x1, wxCoord y1, wxColour *col ) const;
37
38 virtual void DoDrawLine( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2 );
39 virtual void DoCrossHair( wxCoord x, wxCoord y );
40 virtual void DoDrawArc( wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2,
41 wxCoord xc, wxCoord yc );
42 virtual void DoDrawEllipticArc( wxCoord x, wxCoord y, wxCoord width, wxCoord height,
43 double sa, double ea );
44 virtual void DoDrawPoint( wxCoord x, wxCoord y );
45
46 virtual void DoDrawLines(int n, wxPoint points[],
47 wxCoord xoffset, wxCoord yoffset);
48 virtual void DoDrawPolygon(int n, wxPoint points[],
49 wxCoord xoffset, wxCoord yoffset,
50 int fillStyle = wxODDEVEN_RULE);
51
52 virtual void DoDrawRectangle( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
53 virtual void DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wxCoord height, double radius = 20.0 );
54 virtual void DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
55
56 virtual void DoDrawIcon( const wxIcon &icon, wxCoord x, wxCoord y );
57 virtual void DoDrawBitmap( const wxBitmap &bitmap, wxCoord x, wxCoord y,
58 bool useMask = false );
59
60 virtual bool DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
61 wxDC *source, wxCoord xsrc, wxCoord ysrc,
62 int logical_func = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1 );
63
64 virtual void DoDrawText( const wxString &text, wxCoord x, wxCoord y );
65 virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
66 double angle);
67 virtual void DoGetTextExtent( const wxString &string,
68 wxCoord *width, wxCoord *height,
69 wxCoord *descent = (wxCoord *) NULL,
70 wxCoord *externalLeading = (wxCoord *) NULL,
71 const wxFont *theFont = (wxFont *) NULL) const;
72 virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
73 virtual void DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoord height );
74 virtual void DoSetDeviceClippingRegion( const wxRegion &region );
75
76 virtual wxCoord GetCharWidth() const;
77 virtual wxCoord GetCharHeight() const;
78
79 virtual void Clear();
80
81 virtual void SetFont( const wxFont &font );
82 virtual void SetPen( const wxPen &pen );
83 virtual void SetBrush( const wxBrush &brush );
84 virtual void SetBackground( const wxBrush &brush );
85 virtual void SetLogicalFunction( int function );
86 virtual void SetTextForeground( const wxColour &col );
87 virtual void SetTextBackground( const wxColour &col );
88 virtual void SetBackgroundMode( int mode );
89 virtual void SetPalette( const wxPalette& palette );
90
91 virtual void DestroyClippingRegion();
92
93 // Resolution in pixels per logical inch
94 virtual wxSize GetPPI() const;
95 virtual int GetDepth() const;
96
97 // overrriden here for RTL
98 virtual void SetDeviceOrigin( wxCoord x, wxCoord y );
99 virtual void SetAxisOrientation( bool xLeftRight, bool yBottomUp );
100
101 // protected:
102 // implementation
103 // --------------
104
105 GdkWindow *m_gdkwindow;
106 GdkGC *m_penGC;
107 GdkGC *m_brushGC;
108 GdkGC *m_textGC;
109 GdkGC *m_bgGC;
110 GdkColormap *m_cmap;
111 bool m_isScreenDC;
112 wxRegion m_currentClippingRegion;
113 wxRegion m_paintClippingRegion;
114
115 // PangoContext stuff for GTK 2.0
116 PangoContext *m_context;
117 PangoLayout *m_layout;
118 PangoFontDescription *m_fontdesc;
119
120 void SetUpDC( bool ismem = false );
121 void Destroy();
122
123 virtual void ComputeScaleAndOrigin();
124
125 virtual GdkWindow *GetGDKWindow() const { return m_gdkwindow; }
126
127 private:
128 void DrawingSetup(GdkGC*& gc, bool& originChanged);
129
130 // return true if the rectangle specified by the parameters is entirely
131 // outside of the current clipping region
132 bool IsOutsideOfClippingRegion(int x, int y, int w, int h);
133
134 // remove the current clipping mask and set the clipping region
135 void RemoveClipMask(GdkGC *gc);
136
137 // return the mask equal to the intersection of the original one with the
138 // clipping region
139 GdkBitmap *GetClippedMask(GdkBitmap *mask, int w, int h,
140 int x, int y,
141 int xsrcMask, int ysrcMask);
142
143 void DoDrawMonoBitmap(const wxBitmap& bitmap,
144 int bmp_w, int bmp_h,
145 int xsrc, int ysrc,
146 int xdest, int ydest,
147 int width, int height);
148
149 DECLARE_ABSTRACT_CLASS(wxWindowDCImpl)
150 };
151
152 //-----------------------------------------------------------------------------
153 // wxClientDCImpl
154 //-----------------------------------------------------------------------------
155
156 class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl
157 {
158 public:
159 wxClientDCImpl( wxDC *owner );
160 wxClientDCImpl( wxDC *owner, wxWindow *win );
161
162 virtual void DoGetSize(int *width, int *height) const;
163
164 DECLARE_ABSTRACT_CLASS(wxClientDCImpl)
165 };
166
167 //-----------------------------------------------------------------------------
168 // wxPaintDCImpl
169 //-----------------------------------------------------------------------------
170
171 class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl
172 {
173 public:
174 wxPaintDCImpl( wxDC *owner );
175 wxPaintDCImpl( wxDC *owner, wxWindow *win );
176
177 DECLARE_ABSTRACT_CLASS(wxPaintDCImpl)
178 };
179
180 #endif // _WX_GTKDCCLIENT_H_