]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gtk/window.h
better native font support for wxGTK
[wxWidgets.git] / include / wx / gtk / window.h
CommitLineData
c801d85f 1/////////////////////////////////////////////////////////////////////////////
1e6feb95 2// Name: wx/gtk/window.h
c801d85f
KB
3// Purpose:
4// Author: Robert Roebling
58614078
RR
5// Id: $Id$
6// Copyright: (c) 1998 Robert Roebling
aed8df38 7// Licence: wxWindows licence
c801d85f
KB
8/////////////////////////////////////////////////////////////////////////////
9
10
11#ifndef __GTKWINDOWH__
12#define __GTKWINDOWH__
13
14#ifdef __GNUG__
bfc6fde4 15 #pragma interface
c801d85f
KB
16#endif
17
6ca41e57 18//-----------------------------------------------------------------------------
fd0eed64 19// callback definition for inserting a window (internal)
6ca41e57
RR
20//-----------------------------------------------------------------------------
21
1e6feb95
VZ
22class wxWindowGTK;
23typedef void (*wxInsertChildFunction)( wxWindowGTK*, wxWindowGTK* );
6ca41e57 24
c801d85f 25//-----------------------------------------------------------------------------
1e6feb95 26// wxWindowGTK
c801d85f
KB
27//-----------------------------------------------------------------------------
28
1e6feb95 29class wxWindowGTK : public wxWindowBase
c801d85f 30{
aed8df38 31public:
bfc6fde4
VZ
32 // creating the window
33 // -------------------
1e6feb95
VZ
34 wxWindowGTK();
35 wxWindowGTK(wxWindow *parent,
36 wxWindowID id,
37 const wxPoint& pos = wxDefaultPosition,
38 const wxSize& size = wxDefaultSize,
39 long style = 0,
40 const wxString& name = wxPanelNameStr);
f03fc89f
VZ
41 bool Create(wxWindow *parent,
42 wxWindowID id,
43 const wxPoint& pos = wxDefaultPosition,
44 const wxSize& size = wxDefaultSize,
45 long style = 0,
46 const wxString& name = wxPanelNameStr);
1e6feb95 47 virtual ~wxWindowGTK();
cd0183ca 48
f03fc89f
VZ
49 // implement base class (pure) virtual methods
50 // -------------------------------------------
a264ece2 51
bfc6fde4 52 virtual bool Destroy();
bfc6fde4 53
f03fc89f
VZ
54 virtual void Raise();
55 virtual void Lower();
ff8bfdbb 56
f03fc89f
VZ
57 virtual bool Show( bool show = TRUE );
58 virtual bool Enable( bool enable = TRUE );
ff8bfdbb 59
f03fc89f 60 virtual bool IsRetained() const;
2f2aa628 61
bfc6fde4 62 virtual void SetFocus();
f03fc89f 63 virtual bool AcceptsFocus() const;
ff8bfdbb 64
fdb7dadb 65 virtual bool Reparent( wxWindowBase *newParent );
ff8bfdbb 66
f03fc89f
VZ
67 virtual void WarpPointer(int x, int y);
68 virtual void CaptureMouse();
69 virtual void ReleaseMouse();
b1170810 70
f03fc89f
VZ
71 virtual void Refresh( bool eraseBackground = TRUE,
72 const wxRect *rect = (const wxRect *) NULL );
bfc6fde4
VZ
73 virtual void Clear();
74
f03fc89f
VZ
75 virtual bool SetBackgroundColour( const wxColour &colour );
76 virtual bool SetForegroundColour( const wxColour &colour );
77 virtual bool SetCursor( const wxCursor &cursor );
78 virtual bool SetFont( const wxFont &font );
cd0183ca 79
bfc6fde4
VZ
80 virtual int GetCharHeight() const;
81 virtual int GetCharWidth() const;
f03fc89f
VZ
82 virtual void GetTextExtent(const wxString& string,
83 int *x, int *y,
84 int *descent = (int *) NULL,
85 int *externalLeading = (int *) NULL,
86 const wxFont *theFont = (const wxFont *) NULL)
87 const;
aed8df38 88
6522713c 89#if wxUSE_MENUS_NATIVE
a1665b22 90 virtual bool DoPopupMenu( wxMenu *menu, int x, int y );
6522713c 91#endif // wxUSE_MENUS_NATIVE
8bbe427f 92
f03fc89f
VZ
93 virtual void SetScrollbar( int orient, int pos, int thumbVisible,
94 int range, bool refresh = TRUE );
95 virtual void SetScrollPos( int orient, int pos, bool refresh = TRUE );
96 virtual int GetScrollPos( int orient ) const;
97 virtual int GetScrollThumb( int orient ) const;
98 virtual int GetScrollRange( int orient ) const;
99 virtual void ScrollWindow( int dx, int dy,
100 const wxRect* rect = (wxRect *) NULL );
8bbe427f 101
f03fc89f
VZ
102#if wxUSE_DRAG_AND_DROP
103 virtual void SetDropTarget( wxDropTarget *dropTarget );
104#endif // wxUSE_DRAG_AND_DROP
8bbe427f 105
f03fc89f
VZ
106 // implementation
107 // --------------
c801d85f 108
d7c24517
VZ
109 virtual WXWidget GetHandle() const { return m_widget; }
110
ab2b3dd4
RR
111 /* I don't want users to override what's done in idle so everything that
112 has to be done in idle time in order for wxGTK to work is done in
113 OnInternalIdle */
bfc6fde4 114 virtual void OnInternalIdle();
ff8bfdbb 115
f362b96d 116 /* For compatibility across platforms (not in event table) */
20e85460
JS
117 void OnIdle(wxIdleEvent& WXUNUSED(event)) {};
118
fdca68a6
JS
119 // wxGTK-specific: called recursively by Enable,
120 // to give widgets an oppprtunity to correct their colours after they
121 // have been changed by Enable
122 virtual void OnParentEnable( bool WXUNUSED(enable) ) {};
123
4dcaf11a 124 /* used by all window classes in the widget creation process */
1e6feb95 125 bool PreCreation( wxWindowGTK *parent, const wxPoint &pos, const wxSize &size );
bfc6fde4 126 void PostCreation();
ff8bfdbb 127
ddb6bc71
RR
128 /* internal addition of child windows. differs from class
129 to class not by using virtual functions but by using
130 the m_insertCallback */
1e6feb95 131 void DoAddChild(wxWindowGTK *child);
f03fc89f 132
bfc6fde4
VZ
133 /* the methods below are required because many native widgets
134 are composed of several subwidgets and setting a style for
135 the widget means setting it for all subwidgets as well.
136 also, it is nor clear, which native widget is the top
137 widget where (most of) the input goes. even tooltips have
138 to be applied to all subwidgets. */
ff8bfdbb 139
bfc6fde4
VZ
140 virtual GtkWidget* GetConnectWidget();
141 virtual bool IsOwnGtkWindow( GdkWindow *window );
142 void ConnectWidget( GtkWidget *widget );
8bbe427f 143
ddb6bc71
RR
144 /* creates a new widget style if none is there
145 and sets m_widgetStyle to this value. */
bfc6fde4 146 GtkStyle *GetWidgetStyle();
7af6f327 147
ddb6bc71 148 /* called by SetFont() and SetXXXColour etc */
bfc6fde4 149 void SetWidgetStyle();
7af6f327 150
ddb6bc71 151 /* overridden in many GTK widgets */
bfc6fde4 152 virtual void ApplyWidgetStyle();
ff8bfdbb
VZ
153
154#if wxUSE_TOOLTIPS
74ce55e9 155 virtual void ApplyToolTip( GtkTooltips *tips, const wxChar *tip );
ff8bfdbb 156#endif // wxUSE_TOOLTIPS
301cd871 157
739730ca
RR
158 // called from GTK signales handlers. it indicates that
159 // the layouting functions have to be called later on
160 // (i.e. in idle time, implemented in OnInternalIdle() ).
5b8a521e 161 void GtkUpdateSize() { m_sizeSet = FALSE; }
c5f9d156 162
f03fc89f
VZ
163 // position and size of the window
164 int m_x, m_y;
165 int m_width, m_height;
5b8a521e 166 int m_oldClientWidth,m_oldClientHeight;
bcf1fa6b 167
76fcf0f2
RR
168 // see the docs in src/gtk/window.cpp
169 GtkWidget *m_widget; // mostly the widget seen by the rest of GTK
170 GtkWidget *m_wxwindow; // mostly the client area as per wxWindows
171
172 // this widget will be queried for GTK's focus events
173 GtkWidget *m_focusWidget;
f03fc89f 174
63081513 175#if HAVE_XIM
76fcf0f2 176 // XIM support for wxWindows
63081513
RR
177 GdkIC *m_ic;
178 GdkICAttr *m_icattr;
179#endif
3379ed37 180
76fcf0f2 181 // scrolling stuff
bfc6fde4 182 GtkAdjustment *m_hAdjust,*m_vAdjust;
739730ca
RR
183 float m_oldHorizontalPos;
184 float m_oldVerticalPos;
185
f03fc89f 186 // extra (wxGTK-specific) flags
76fcf0f2
RR
187 bool m_needParent:1; // ! wxFrame, wxDialog, wxNotebookPage ?
188 bool m_noExpose:1; // wxGLCanvas has its own redrawing
189 bool m_nativeSizeEvent:1; // wxGLCanvas sends wxSizeEvent upon "alloc_size"
f03fc89f 190 bool m_hasScrolling:1;
f03fc89f
VZ
191 bool m_hasVMT:1;
192 bool m_sizeSet:1;
193 bool m_resizing:1;
76fcf0f2
RR
194 bool m_isStaticBox:1; // faster than IS_KIND_OF
195 bool m_isRadioButton:1; // faster than IS_KIND_OF
e2762ff0 196 bool m_isListBox:1; // faster than IS_KIND_OF
76fcf0f2
RR
197 bool m_isFrame:1; // faster than IS_KIND_OF
198 bool m_acceptsFocus:1; // not wxStaticBox, not wxStaticBitmap etc.
846e1424 199 bool m_isScrolling;
76fcf0f2
RR
200 bool m_clipPaintRegion; // TRUE after ScrollWindow()
201 bool m_queuedFullRedraw; // TRUE after DoMoveWindow
7af6f327 202
d7c24517
VZ
203 // these are true if the style were set before the widget was realized
204 // (typcally in the constructor) but the actual GTK style must not be set
205 // before the widget has been "realized"
739730ca
RR
206 bool m_delayedForegroundColour:1;
207 bool m_delayedBackgroundColour:1;
3379ed37 208
d7c24517
VZ
209 // contains GTK's widgets internal information about non-default widget
210 // font and colours. we create one for each widget that gets any
211 // non-default attribute set via SetFont() or SetForegroundColour() /
212 // SetBackgroundColour().
f03fc89f 213 GtkStyle *m_widgetStyle;
bfc6fde4 214
d7c24517
VZ
215 // C++ has no virtual methods in the constrcutor of any class but we need
216 // different methods of inserting a child window into a wxFrame,
217 // wxMDIFrame, wxNotebook etc. this is the callback that will get used.
f03fc89f 218 wxInsertChildFunction m_insertCallback;
68995f26 219
f03fc89f 220 // implement the base class pure virtuals
dabc0cd5
VZ
221 virtual void DoClientToScreen( int *x, int *y ) const;
222 virtual void DoScreenToClient( int *x, int *y ) const;
f03fc89f
VZ
223 virtual void DoGetPosition( int *x, int *y ) const;
224 virtual void DoGetSize( int *width, int *height ) const;
225 virtual void DoGetClientSize( int *width, int *height ) const;
bfc6fde4
VZ
226 virtual void DoSetSize(int x, int y,
227 int width, int height,
228 int sizeFlags = wxSIZE_AUTO);
bfc6fde4 229 virtual void DoSetClientSize(int width, int height);
9d9b7755 230 virtual void DoMoveWindow(int x, int y, int width, int height);
aed8df38 231
f03fc89f
VZ
232#if wxUSE_TOOLTIPS
233 virtual void DoSetToolTip( wxToolTip *tip );
234#endif // wxUSE_TOOLTIPS
235
236 // common part of all ctors (can't be virtual because called from ctor)
237 void Init();
238
68dda785 239private:
1e6feb95 240 DECLARE_DYNAMIC_CLASS(wxWindowGTK)
1a0d517e 241 DECLARE_NO_COPY_CLASS(wxWindowGTK)
c801d85f
KB
242};
243
3379ed37
VZ
244extern wxWindow *wxFindFocusedChild(wxWindowGTK *win);
245
c801d85f 246#endif // __GTKWINDOWH__