]> git.saurik.com Git - wxWidgets.git/blob - include/wx/gtk/dcclient.h
Further performance optimizations
[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 DoSetClippingRegionAsRegion( 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 DECLARE_ABSTRACT_CLASS(wxWindowDCImpl)
131 };
132
133 //-----------------------------------------------------------------------------
134 // wxClientDCImpl
135 //-----------------------------------------------------------------------------
136
137 class WXDLLIMPEXP_CORE wxClientDCImpl : public wxWindowDCImpl
138 {
139 public:
140 wxClientDCImpl( wxDC *owner );
141 wxClientDCImpl( wxDC *owner, wxWindow *win );
142
143 virtual void DoGetSize(int *width, int *height) const;
144
145 DECLARE_ABSTRACT_CLASS(wxClientDCImpl)
146 };
147
148 //-----------------------------------------------------------------------------
149 // wxPaintDCImpl
150 //-----------------------------------------------------------------------------
151
152 class WXDLLIMPEXP_CORE wxPaintDCImpl : public wxClientDCImpl
153 {
154 public:
155 wxPaintDCImpl( wxDC *owner );
156 wxPaintDCImpl( wxDC *owner, wxWindow *win );
157
158 DECLARE_ABSTRACT_CLASS(wxPaintDCImpl)
159 };
160
161 #endif // _WX_GTKDCCLIENT_H_