Mercurial > vim
annotate src/gui.h @ 16981:873f8aedfb6c
Added tag v8.1.1490 for changeset f3a6c2c3155114504f25c5a625b86399ab35d500
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 07 Jun 2019 22:45:06 +0200 |
parents | 7ae2396cef62 |
children | 00cd8830bab9 |
rev | line source |
---|---|
10042
4aead6a9b7a9
commit https://github.com/vim/vim/commit/edf3f97ae2af024708ebb4ac614227327033ca47
Christian Brabandt <cb@256bit.org>
parents:
9834
diff
changeset
|
1 /* vi:set ts=8 sts=4 sw=4 noet: |
7 | 2 * |
3 * VIM - Vi IMproved by Bram Moolenaar | |
4 * Motif support by Robert Webb | |
5 * | |
6 * Do ":help uganda" in Vim to read copying and usage conditions. | |
7 * Do ":help credits" in Vim to see a list of people who contributed. | |
8 */ | |
9 | |
10 #ifdef FEAT_GUI_MOTIF | |
11 # include <Xm/Xm.h> | |
12 #endif | |
13 | |
14 #ifdef FEAT_GUI_ATHENA | |
15 # include <X11/Intrinsic.h> | |
16 # include <X11/StringDefs.h> | |
17 #endif | |
18 | |
19 #ifdef FEAT_GUI_GTK | |
844 | 20 # ifdef VMS /* undef MIN and MAX because Intrinsic.h redefines them anyway */ |
21 # ifdef MAX | |
22 # undef MAX | |
23 # endif | |
24 # ifdef MIN | |
25 # undef MIN | |
26 # endif | |
27 # endif | |
7 | 28 # include <X11/Intrinsic.h> |
29 # include <gtk/gtk.h> | |
30 #endif | |
31 | |
32 #ifdef FEAT_GUI_MAC | |
33 # include <Types.h> | |
34 /*# include <Memory.h>*/ | |
35 # include <Quickdraw.h> | |
36 # include <Fonts.h> | |
37 # include <Events.h> | |
38 # include <Menus.h> | |
39 # if !(defined (TARGET_API_MAC_CARBON) && (TARGET_API_MAC_CARBON)) | |
6448 | 40 # include <Windows.h> |
7 | 41 # endif |
42 # include <Controls.h> | |
43 /*# include <TextEdit.h>*/ | |
44 # include <Dialogs.h> | |
45 # include <OSUtils.h> | |
46 /* | |
47 # include <ToolUtils.h> | |
48 # include <SegLoad.h>*/ | |
49 #endif | |
50 | |
51 #ifdef FEAT_GUI_PHOTON | |
52 # include <Ph.h> | |
53 # include <Pt.h> | |
54 # include "photon/PxProto.h" | |
55 #endif | |
56 | |
57 /* | |
1137 | 58 * On some systems scrolling needs to be done right away instead of in the |
59 * main loop. | |
60 */ | |
2277
f42e0b5ff9e9
Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents:
2275
diff
changeset
|
61 #if defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MAC) || defined(FEAT_GUI_GTK) |
7 | 62 # define USE_ON_FLY_SCROLL |
63 #endif | |
64 | |
65 /* | |
66 * GUIs that support dropping files on a running Vim. | |
67 */ | |
14428
aab5947be7c5
patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents:
13847
diff
changeset
|
68 #if (defined(FEAT_DND) && defined(FEAT_GUI_GTK)) \ |
aab5947be7c5
patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents:
13847
diff
changeset
|
69 || defined(FEAT_GUI_MSWIN) \ |
aab5947be7c5
patch 8.1.0228: dropping files is ignored while Vim is busy
Christian Brabandt <cb@256bit.org>
parents:
13847
diff
changeset
|
70 || defined(FEAT_GUI_MAC) |
7 | 71 # define HAVE_DROP_FILE |
72 #endif | |
73 | |
74 /* | |
75 * This define makes menus always use a fontset. | |
76 * We're not sure if this code always works, thus it can be disabled. | |
77 */ | |
78 #ifdef FEAT_XFONTSET | |
79 # define FONTSET_ALWAYS | |
80 #endif | |
81 | |
82 /* | |
83 * These macros convert between character row/column and pixel coordinates. | |
84 * TEXT_X - Convert character column into X pixel coord for drawing strings. | |
85 * TEXT_Y - Convert character row into Y pixel coord for drawing strings. | |
86 * FILL_X - Convert character column into X pixel coord for filling the area | |
87 * under the character. | |
88 * FILL_Y - Convert character row into Y pixel coord for filling the area | |
89 * under the character. | |
90 * X_2_COL - Convert X pixel coord into character column. | |
91 * Y_2_ROW - Convert Y pixel coord into character row. | |
92 */ | |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
93 #ifdef FEAT_GUI_MSWIN |
7 | 94 # define TEXT_X(col) ((col) * gui.char_width) |
95 # define TEXT_Y(row) ((row) * gui.char_height + gui.char_ascent) | |
96 # define FILL_X(col) ((col) * gui.char_width) | |
97 # define FILL_Y(row) ((row) * gui.char_height) | |
98 # define X_2_COL(x) ((x) / gui.char_width) | |
99 # define Y_2_ROW(y) ((y) / gui.char_height) | |
100 #else | |
101 # define TEXT_X(col) ((col) * gui.char_width + gui.border_offset) | |
102 # define FILL_X(col) ((col) * gui.char_width + gui.border_offset) | |
103 # define X_2_COL(x) (((x) - gui.border_offset) / gui.char_width) | |
104 # define TEXT_Y(row) ((row) * gui.char_height + gui.char_ascent \ | |
105 + gui.border_offset) | |
106 # define FILL_Y(row) ((row) * gui.char_height + gui.border_offset) | |
107 # define Y_2_ROW(y) (((y) - gui.border_offset) / gui.char_height) | |
108 #endif | |
109 | |
110 /* Indices for arrays of scrollbars */ | |
111 #define SBAR_NONE -1 | |
112 #define SBAR_LEFT 0 | |
113 #define SBAR_RIGHT 1 | |
114 #define SBAR_BOTTOM 2 | |
115 | |
116 /* Orientations for scrollbars */ | |
117 #define SBAR_VERT 0 | |
118 #define SBAR_HORIZ 1 | |
119 | |
120 /* Default size of scrollbar */ | |
121 #define SB_DEFAULT_WIDTH 16 | |
122 | |
123 /* Default height of the menu bar */ | |
124 #define MENU_DEFAULT_HEIGHT 1 /* figure it out at runtime */ | |
125 | |
126 /* Flags for gui_mch_outstr_nowrap() */ | |
127 #define GUI_MON_WRAP_CURSOR 0x01 /* wrap cursor at end of line */ | |
128 #define GUI_MON_INVERT 0x02 /* invert the characters */ | |
129 #define GUI_MON_IS_CURSOR 0x04 /* drawing cursor */ | |
130 #define GUI_MON_TRS_CURSOR 0x08 /* drawing transparent cursor */ | |
131 #define GUI_MON_NOCLEAR 0x10 /* don't clear selection */ | |
132 | |
133 /* Flags for gui_mch_draw_string() */ | |
1199 | 134 #define DRAW_TRANSP 0x01 /* draw with transparent bg */ |
7 | 135 #define DRAW_BOLD 0x02 /* draw bold text */ |
136 #define DRAW_UNDERL 0x04 /* draw underline text */ | |
203 | 137 #define DRAW_UNDERC 0x08 /* draw undercurl text */ |
2823 | 138 #if defined(FEAT_GUI_GTK) |
203 | 139 # define DRAW_ITALIC 0x10 /* draw italic text */ |
7 | 140 #endif |
203 | 141 #define DRAW_CURSOR 0x20 /* drawing block cursor (win32) */ |
12317
2a8890b80923
patch 8.0.1038: strike-through text not supported
Christian Brabandt <cb@256bit.org>
parents:
10176
diff
changeset
|
142 #define DRAW_STRIKE 0x40 /* strikethrough */ |
7 | 143 |
144 /* For our own tearoff menu item */ | |
145 #define TEAR_STRING "-->Detach" | |
146 #define TEAR_LEN (9) /* length of above string */ | |
147 | |
148 /* for the toolbar */ | |
8163
d8a8e86f39ad
commit https://github.com/vim/vim/commit/e89ff0472bc33779583d48e8d38a5e794d05613a
Christian Brabandt <cb@256bit.org>
parents:
6448
diff
changeset
|
149 #define TOOLBAR_BUTTON_HEIGHT 18 |
d8a8e86f39ad
commit https://github.com/vim/vim/commit/e89ff0472bc33779583d48e8d38a5e794d05613a
Christian Brabandt <cb@256bit.org>
parents:
6448
diff
changeset
|
150 #define TOOLBAR_BUTTON_WIDTH 18 |
7 | 151 #define TOOLBAR_BORDER_HEIGHT 12 /* room above+below buttons for MSWindows */ |
152 | |
810 | 153 #ifdef FEAT_GUI_MSWIN |
811 | 154 # define TABLINE_HEIGHT 22 |
810 | 155 #endif |
819 | 156 #ifdef FEAT_GUI_MOTIF |
157 # define TABLINE_HEIGHT 30 | |
158 #endif | |
810 | 159 |
574 | 160 #if defined(NO_CONSOLE) || defined(FEAT_GUI_GTK) || defined(FEAT_GUI_X11) |
7 | 161 # define NO_CONSOLE_INPUT /* use no_console_input() to check if there |
162 is no console input possible */ | |
163 #endif | |
164 | |
165 typedef struct GuiScrollbar | |
166 { | |
167 long ident; /* Unique identifier for each scrollbar */ | |
667 | 168 win_T *wp; /* Scrollbar's window, NULL for bottom */ |
7 | 169 int type; /* one of SBAR_{LEFT,RIGHT,BOTTOM} */ |
170 long value; /* Represents top line number visible */ | |
171 #ifdef FEAT_GUI_ATHENA | |
172 int pixval; /* pixel count of value */ | |
173 #endif | |
174 long size; /* Size of scrollbar thumb */ | |
175 long max; /* Number of lines in buffer */ | |
176 | |
177 /* Values measured in characters: */ | |
178 int top; /* Top of scroll bar (chars from row 0) */ | |
179 int height; /* Current height of scroll bar in rows */ | |
180 int width; /* Current width of scroll bar in cols */ | |
181 int status_height; /* Height of status line */ | |
182 #ifdef FEAT_GUI_X11 | |
183 Widget id; /* Id of real scroll bar */ | |
184 #endif | |
185 #ifdef FEAT_GUI_GTK | |
186 GtkWidget *id; /* Id of real scroll bar */ | |
187 unsigned long handler_id; /* Id of "value_changed" signal handler */ | |
188 #endif | |
189 | |
190 #ifdef FEAT_GUI_MSWIN | |
191 HWND id; /* Id of real scroll bar */ | |
192 int scroll_shift; /* The scrollbar stuff can handle only up to | |
193 32767 lines. When the file is longer, | |
194 scroll_shift is set to the number of shifts | |
195 to reduce the count. */ | |
196 #endif | |
197 #ifdef FEAT_GUI_MAC | |
198 ControlHandle id; /* A handle to the scrollbar */ | |
199 #endif | |
200 #ifdef FEAT_GUI_PHOTON | |
201 PtWidget_t *id; | |
202 #endif | |
203 } scrollbar_T; | |
204 | |
205 typedef long guicolor_T; /* handle for a GUI color; for X11 this should | |
206 be "Pixel", but that's an unsigned and we | |
207 need a signed value */ | |
208 #define INVALCOLOR (guicolor_T)-11111 /* number for invalid color; on 32 bit | |
209 displays there is a tiny chance this is an | |
210 actual color */ | |
13339
da2a9e217200
patch 8.0.1544: when using 'termguicolors' SpellBad doesn't show
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
211 #define CTERMCOLOR (guicolor_T)-11110 /* only used for cterm.bg_rgb and |
da2a9e217200
patch 8.0.1544: when using 'termguicolors' SpellBad doesn't show
Christian Brabandt <cb@256bit.org>
parents:
12871
diff
changeset
|
212 cterm.fg_rgb: use cterm color */ |
7 | 213 |
214 #ifdef FEAT_GUI_GTK | |
215 typedef PangoFontDescription *GuiFont; /* handle for a GUI font */ | |
216 typedef PangoFontDescription *GuiFontset; /* handle for a GUI fontset */ | |
217 # define NOFONT (GuiFont)NULL | |
218 # define NOFONTSET (GuiFontset)NULL | |
219 #else | |
220 # ifdef FEAT_GUI_PHOTON | |
221 typedef char *GuiFont; | |
222 typedef char *GuiFontset; | |
223 # define NOFONT (GuiFont)NULL | |
224 # define NOFONTSET (GuiFontset)NULL | |
225 # else | |
226 # ifdef FEAT_GUI_X11 | |
227 typedef XFontStruct *GuiFont; /* handle for a GUI font */ | |
228 typedef XFontSet GuiFontset; /* handle for a GUI fontset */ | |
229 # define NOFONT (GuiFont)0 | |
230 # define NOFONTSET (GuiFontset)0 | |
231 # else | |
232 typedef long_u GuiFont; /* handle for a GUI font */ | |
233 typedef long_u GuiFontset; /* handle for a GUI fontset */ | |
234 # define NOFONT (GuiFont)0 | |
235 # define NOFONTSET (GuiFontset)0 | |
236 # endif | |
237 # endif | |
238 #endif | |
239 | |
16451
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
240 #ifdef VIMDLL |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
241 // Use spawn when GUI is starting. |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
242 # define GUI_MAY_SPAWN |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
243 |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
244 // Uncomment the next definition if you want to use the `:gui` command on |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
245 // Windows. It uses `:mksession` to inherit the session from vim.exe to |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
246 // gvim.exe. So, it doesn't work perfectly. (EXPERIMENTAL) |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
247 //# define EXPERIMENTAL_GUI_CMD |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
248 #endif |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
249 |
7 | 250 typedef struct Gui |
251 { | |
252 int in_focus; /* Vim has input focus */ | |
253 int in_use; /* Is the GUI being used? */ | |
254 int starting; /* GUI will start in a little while */ | |
255 int shell_created; /* Has the shell been created yet? */ | |
256 int dying; /* Is vim dying? Then output to terminal */ | |
257 int dofork; /* Use fork() when GUI is starting */ | |
16451
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
258 #ifdef GUI_MAY_SPAWN |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
259 int dospawn; /* Use spawn() when GUI is starting */ |
7ae2396cef62
patch 8.1.1230: a lot of code is shared between vim.exe and gvim.exe
Bram Moolenaar <Bram@vim.org>
parents:
15868
diff
changeset
|
260 #endif |
7 | 261 int dragged_sb; /* Which scrollbar being dragged, if any? */ |
262 win_T *dragged_wp; /* Which WIN's sb being dragged, if any? */ | |
263 int pointer_hidden; /* Is the mouse pointer hidden? */ | |
264 int col; /* Current cursor column in GUI display */ | |
265 int row; /* Current cursor row in GUI display */ | |
266 int cursor_col; /* Physical cursor column in GUI display */ | |
267 int cursor_row; /* Physical cursor row in GUI display */ | |
268 char cursor_is_valid; /* There is a cursor at cursor_row/col */ | |
269 int num_cols; /* Number of columns */ | |
270 int num_rows; /* Number of rows */ | |
271 int scroll_region_top; /* Top (first) line of scroll region */ | |
272 int scroll_region_bot; /* Bottom (last) line of scroll region */ | |
273 int scroll_region_left; /* Left (first) column of scroll region */ | |
274 int scroll_region_right; /* Right (last) col. of scroll region */ | |
275 int highlight_mask; /* Highlight attribute mask */ | |
276 int scrollbar_width; /* Width of vertical scrollbars */ | |
277 int scrollbar_height; /* Height of horizontal scrollbar */ | |
278 int left_sbar_x; /* Calculated x coord for left scrollbar */ | |
279 int right_sbar_x; /* Calculated x coord for right scrollbar */ | |
280 | |
281 #ifdef FEAT_MENU | |
282 # ifndef FEAT_GUI_GTK | |
283 int menu_height; /* Height of the menu bar */ | |
284 int menu_width; /* Width of the menu bar */ | |
285 # endif | |
286 char menu_is_active; /* TRUE if menu is present */ | |
287 # ifdef FEAT_GUI_ATHENA | |
288 char menu_height_fixed; /* TRUE if menu height fixed */ | |
289 # endif | |
290 #endif | |
291 | |
292 scrollbar_T bottom_sbar; /* Bottom scrollbar */ | |
293 int which_scrollbars[3];/* Which scrollbar boxes are active? */ | |
294 int prev_wrap; /* For updating the horizontal scrollbar */ | |
444 | 295 int char_width; /* Width of char cell in pixels */ |
296 int char_height; /* Height of char cell in pixels, includes | |
297 'linespace' */ | |
7 | 298 int char_ascent; /* Ascent of char in pixels */ |
299 int border_width; /* Width of our border around text area */ | |
300 int border_offset; /* Total pixel offset for all borders */ | |
301 | |
302 GuiFont norm_font; /* Normal font */ | |
2277
f42e0b5ff9e9
Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents:
2275
diff
changeset
|
303 #ifndef FEAT_GUI_GTK |
7 | 304 GuiFont bold_font; /* Bold font */ |
305 GuiFont ital_font; /* Italic font */ | |
306 GuiFont boldital_font; /* Bold-Italic font */ | |
307 #else | |
308 int font_can_bold; /* Whether norm_font supports bold weight. | |
309 * The styled font variants are not used. */ | |
310 #endif | |
311 | |
2277
f42e0b5ff9e9
Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents:
2275
diff
changeset
|
312 #if defined(FEAT_MENU) && !defined(FEAT_GUI_GTK) |
7 | 313 # ifdef FONTSET_ALWAYS |
314 GuiFontset menu_fontset; /* set of fonts for multi-byte chars */ | |
315 # else | |
316 GuiFont menu_font; /* menu item font */ | |
317 # endif | |
318 #endif | |
4950
ba7db05e1482
updated for version 7.3.1220
Bram Moolenaar <bram@vim.org>
parents:
4039
diff
changeset
|
319 GuiFont wide_font; /* Normal 'guifontwide' font */ |
15605
62b3805506b3
patch 8.1.0810: too many #ifdefs
Bram Moolenaar <Bram@vim.org>
parents:
14428
diff
changeset
|
320 #ifndef FEAT_GUI_GTK |
4950
ba7db05e1482
updated for version 7.3.1220
Bram Moolenaar <bram@vim.org>
parents:
4039
diff
changeset
|
321 GuiFont wide_bold_font; /* Bold 'guifontwide' font */ |
ba7db05e1482
updated for version 7.3.1220
Bram Moolenaar <bram@vim.org>
parents:
4039
diff
changeset
|
322 GuiFont wide_ital_font; /* Italic 'guifontwide' font */ |
ba7db05e1482
updated for version 7.3.1220
Bram Moolenaar <bram@vim.org>
parents:
4039
diff
changeset
|
323 GuiFont wide_boldital_font; /* Bold-Italic 'guifontwide' font */ |
7 | 324 #endif |
325 #ifdef FEAT_XFONTSET | |
326 GuiFontset fontset; /* set of fonts for multi-byte chars */ | |
327 #endif | |
328 guicolor_T back_pixel; /* Color of background */ | |
329 guicolor_T norm_pixel; /* Color of normal text */ | |
330 guicolor_T def_back_pixel; /* default Color of background */ | |
331 guicolor_T def_norm_pixel; /* default Color of normal text */ | |
332 | |
333 #ifdef FEAT_GUI_X11 | |
1199 | 334 char *rsrc_menu_fg_name; /* Color of menu & dialog foreground */ |
7 | 335 guicolor_T menu_fg_pixel; /* Same in Pixel format */ |
1199 | 336 char *rsrc_menu_bg_name; /* Color of menu & dialog background */ |
7 | 337 guicolor_T menu_bg_pixel; /* Same in Pixel format */ |
338 char *rsrc_scroll_fg_name; /* Color of scrollbar foreground */ | |
339 guicolor_T scroll_fg_pixel; /* Same in Pixel format */ | |
340 char *rsrc_scroll_bg_name; /* Color of scrollbar background */ | |
341 guicolor_T scroll_bg_pixel; /* Same in Pixel format */ | |
342 | |
343 # ifdef FEAT_GUI_MOTIF | |
344 guicolor_T menu_def_fg_pixel; /* Default menu foreground */ | |
345 guicolor_T menu_def_bg_pixel; /* Default menu background */ | |
346 guicolor_T scroll_def_fg_pixel; /* Default scrollbar foreground */ | |
347 guicolor_T scroll_def_bg_pixel; /* Default scrollbar background */ | |
348 # endif | |
349 Display *dpy; /* X display */ | |
350 Window wid; /* Window id of text area */ | |
351 int visibility; /* Is shell partially/fully obscured? */ | |
352 GC text_gc; | |
353 GC back_gc; | |
354 GC invert_gc; | |
355 Cursor blank_pointer; /* Blank pointer */ | |
356 | |
357 /* X Resources */ | |
358 char_u *rsrc_font_name; /* Resource font name, used if 'guifont' | |
359 not set */ | |
360 char_u *rsrc_bold_font_name; /* Resource bold font name */ | |
361 char_u *rsrc_ital_font_name; /* Resource italic font name */ | |
362 char_u *rsrc_boldital_font_name; /* Resource bold-italic font name */ | |
363 char_u *rsrc_menu_font_name; /* Resource menu Font name */ | |
364 Bool rsrc_rev_video; /* Use reverse video? */ | |
365 | |
366 char_u *geom; /* Geometry, eg "80x24" */ | |
367 Bool color_approx; /* Some color was approximated */ | |
368 #endif | |
369 | |
370 #ifdef FEAT_GUI_GTK | |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
371 # ifndef USE_GTK3 |
7 | 372 int visibility; /* Is shell partially/fully obscured? */ |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
373 # endif |
7 | 374 GdkCursor *blank_pointer; /* Blank pointer */ |
375 | |
376 /* X Resources */ | |
377 char_u *geom; /* Geometry, eg "80x24" */ | |
378 | |
379 GtkWidget *mainwin; /* top level GTK window */ | |
380 GtkWidget *formwin; /* manages all the windows below */ | |
381 GtkWidget *drawarea; /* the "text" area */ | |
382 # ifdef FEAT_MENU | |
383 GtkWidget *menubar; /* menubar */ | |
384 # endif | |
385 # ifdef FEAT_TOOLBAR | |
386 GtkWidget *toolbar; /* toolbar */ | |
387 # endif | |
388 # ifdef FEAT_GUI_GNOME | |
389 GtkWidget *menubar_h; /* menubar handle */ | |
390 GtkWidget *toolbar_h; /* toolbar handle */ | |
391 # endif | |
9624
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
392 # ifdef USE_GTK3 |
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
393 GdkRGBA *fgcolor; /* GDK-styled foreground color */ |
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
394 GdkRGBA *bgcolor; /* GDK-styled background color */ |
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
395 GdkRGBA *spcolor; /* GDK-styled special color */ |
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
396 # else |
7 | 397 GdkColor *fgcolor; /* GDK-styled foreground color */ |
398 GdkColor *bgcolor; /* GDK-styled background color */ | |
203 | 399 GdkColor *spcolor; /* GDK-styled special color */ |
9624
d63b85fe3dc7
commit https://github.com/vim/vim/commit/36edf0685c8b55ee3ce709058d83ada8027fec1e
Christian Brabandt <cb@256bit.org>
parents:
8643
diff
changeset
|
400 # endif |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
401 # ifdef USE_GTK3 |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
402 cairo_surface_t *surface; /* drawarea surface */ |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
403 gboolean by_signal; /* cause of draw operation */ |
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
404 # else |
7 | 405 GdkGC *text_gc; /* cached GC for normal text */ |
8218
3456e2ebebd4
commit https://github.com/vim/vim/commit/9892189d2e7ab94b750f99e6da4cbfc3c8014517
Christian Brabandt <cb@256bit.org>
parents:
8163
diff
changeset
|
406 # endif |
7 | 407 PangoContext *text_context; /* the context used for all text */ |
408 PangoFont *ascii_font; /* cached font for ASCII strings */ | |
409 PangoGlyphString *ascii_glyphs; /* cached code point -> glyph map */ | |
714 | 410 # ifdef FEAT_GUI_TABLINE |
685 | 411 GtkWidget *tabline; /* tab pages line handle */ |
7 | 412 # endif |
413 | |
414 GtkAccelGroup *accel_group; | |
415 GtkWidget *filedlg; /* file selection dialog */ | |
416 char_u *browse_fname; /* file name from filedlg */ | |
2923 | 417 |
418 guint32 event_time; | |
7 | 419 #endif /* FEAT_GUI_GTK */ |
420 | |
843 | 421 #if defined(FEAT_GUI_TABLINE) \ |
15868
7fad90423bd2
patch 8.1.0941: macros for MS-Windows are inconsistent
Bram Moolenaar <Bram@vim.org>
parents:
15605
diff
changeset
|
422 && (defined(FEAT_GUI_MSWIN) || defined(FEAT_GUI_MOTIF) \ |
2330 | 423 || defined(FEAT_GUI_MAC)) |
843 | 424 int tabline_height; |
425 #endif | |
426 | |
7 | 427 #ifdef FEAT_FOOTER |
428 int footer_height; /* height of the message footer */ | |
429 #endif | |
430 | |
431 #if defined(FEAT_TOOLBAR) \ | |
432 && (defined(FEAT_GUI_ATHENA) || defined(FEAT_GUI_MOTIF)) | |
433 int toolbar_height; /* height of the toolbar */ | |
434 #endif | |
435 | |
436 #ifdef FEAT_BEVAL_TIP | |
437 /* Tooltip properties; also used for balloon evaluation */ | |
438 char_u *rsrc_tooltip_font_name; /* tooltip font name */ | |
439 char *rsrc_tooltip_fg_name; /* tooltip foreground color name */ | |
440 char *rsrc_tooltip_bg_name; /* tooltip background color name */ | |
441 guicolor_T tooltip_fg_pixel; /* tooltip foreground color */ | |
442 guicolor_T tooltip_bg_pixel; /* tooltip background color */ | |
443 XFontSet tooltip_fontset; /* tooltip fontset */ | |
444 #endif | |
445 | |
446 #ifdef FEAT_GUI_MSWIN | |
447 GuiFont currFont; /* Current font */ | |
448 guicolor_T currFgColor; /* Current foreground text color */ | |
449 guicolor_T currBgColor; /* Current background text color */ | |
203 | 450 guicolor_T currSpColor; /* Current special text color */ |
7 | 451 #endif |
452 | |
453 #ifdef FEAT_GUI_MAC | |
454 WindowPtr VimWindow; | |
455 MenuHandle MacOSHelpMenu; /* Help menu provided by the MacOS */ | |
456 int MacOSHelpItems; /* Nr of help-items supplied by MacOS */ | |
457 WindowPtr wid; /* Window id of text area */ | |
458 int visibility; /* Is window partially/fully obscured? */ | |
459 #endif | |
460 | |
461 #ifdef FEAT_GUI_PHOTON | |
462 PtWidget_t *vimWindow; /* PtWindow */ | |
463 PtWidget_t *vimTextArea; /* PtRaw */ | |
464 PtWidget_t *vimContainer; /* PtPanel */ | |
465 # if defined(FEAT_MENU) || defined(FEAT_TOOLBAR) | |
466 PtWidget_t *vimToolBarGroup; | |
467 # endif | |
468 # ifdef FEAT_MENU | |
469 PtWidget_t *vimMenuBar; | |
470 # endif | |
471 # ifdef FEAT_TOOLBAR | |
472 PtWidget_t *vimToolBar; | |
473 int toolbar_height; | |
474 # endif | |
475 PhEvent_t *event_buffer; | |
476 #endif | |
477 | |
478 #ifdef FEAT_XIM | |
479 char *rsrc_input_method; | |
480 char *rsrc_preedit_type_name; | |
481 #endif | |
482 } gui_T; | |
483 | |
484 extern gui_T gui; /* this is defined in gui.c */ | |
485 | |
486 /* definitions of available window positionings for gui_*_position_in_parent() | |
487 */ | |
488 typedef enum | |
489 { | |
490 VW_POS_MOUSE, | |
491 VW_POS_CENTER, | |
492 VW_POS_TOP_CENTER | |
325 | 493 } gui_win_pos_T; |
7 | 494 |
28 | 495 #ifdef FIND_REPLACE_DIALOG |
7 | 496 /* |
497 * Flags used to distinguish the different contexts in which the | |
498 * find/replace callback may be called. | |
499 */ | |
500 # define FRD_FINDNEXT 1 /* Find next in find dialog */ | |
501 # define FRD_R_FINDNEXT 2 /* Find next in repl dialog */ | |
502 # define FRD_REPLACE 3 /* Replace once */ | |
503 # define FRD_REPLACEALL 4 /* Replace remaining matches */ | |
504 # define FRD_UNDO 5 /* Undo replaced text */ | |
505 # define FRD_TYPE_MASK 7 /* Mask for the callback type */ | |
506 /* Flags which change the way searching is done. */ | |
507 # define FRD_WHOLE_WORD 0x08 /* match whole word only */ | |
508 # define FRD_MATCH_CASE 0x10 /* match case */ | |
509 #endif | |
836 | 510 |
2277
f42e0b5ff9e9
Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents:
2275
diff
changeset
|
511 #ifdef FEAT_GUI_GTK |
836 | 512 /* |
513 * Convenience macros to convert from 'encoding' to 'termencoding' and | |
514 * vice versa. If no conversion is necessary the passed-in pointer is | |
515 * returned as is, without allocating any memory. Thus additional _FREE() | |
516 * macros are provided. The _FREE() macros also set the pointer to NULL, | |
517 * in order to avoid bugs due to illegal memory access only happening if | |
518 * 'encoding' != utf-8... | |
519 * | |
520 * Defining these macros as pure expressions looks a bit tricky but | |
521 * avoids depending on the context of the macro expansion. One of the | |
522 * rare occasions where the comma operator comes in handy :) | |
523 * | |
524 * Note: Do NOT keep the result around when handling control back to | |
525 * the main Vim! The user could change 'encoding' at any time. | |
526 */ | |
527 # define CONVERT_TO_UTF8(String) \ | |
528 ((output_conv.vc_type == CONV_NONE || (String) == NULL) \ | |
529 ? (String) \ | |
530 : string_convert(&output_conv, (String), NULL)) | |
531 | |
532 # define CONVERT_TO_UTF8_FREE(String) \ | |
533 ((String) = ((output_conv.vc_type == CONV_NONE) \ | |
534 ? (char_u *)NULL \ | |
535 : (vim_free(String), (char_u *)NULL))) | |
536 | |
537 # define CONVERT_FROM_UTF8(String) \ | |
538 ((input_conv.vc_type == CONV_NONE || (String) == NULL) \ | |
539 ? (String) \ | |
540 : string_convert(&input_conv, (String), NULL)) | |
541 | |
542 # define CONVERT_FROM_UTF8_FREE(String) \ | |
543 ((String) = ((input_conv.vc_type == CONV_NONE) \ | |
544 ? (char_u *)NULL \ | |
545 : (vim_free(String), (char_u *)NULL))) | |
546 | |
547 #else | |
548 # define CONVERT_TO_UTF8(String) (String) | |
549 # define CONVERT_TO_UTF8_FREE(String) ((String) = (char_u *)NULL) | |
550 # define CONVERT_FROM_UTF8(String) (String) | |
551 # define CONVERT_FROM_UTF8_FREE(String) ((String) = (char_u *)NULL) | |
2277
f42e0b5ff9e9
Change remaining HAVE_GTK2 to FEAT_GUI_GTK.
Bram Moolenaar <bram@vim.org>
parents:
2275
diff
changeset
|
552 #endif /* FEAT_GUI_GTK */ |
10176
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
553 |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
554 #ifdef FEAT_GUI_GTK |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
555 /* |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
556 * The second parameter of g_signal_handlers_disconnect_by_func() is supposed |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
557 * to be a function pointer which was passed to g_signal_connect_*() somewhere |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
558 * previously, and hence it must be of type GCallback, i.e., void (*)(void). |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
559 * |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
560 * Meanwhile, g_signal_handlers_disconnect_by_func() is a macro calling |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
561 * g_signal_handlers_disconnect_matched(), and the second parameter of the |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
562 * former is to be passed to the sixth parameter of the latter the type of |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
563 * which, however, is declared as void * in the function signature. |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
564 * |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
565 * While the ISO C Standard does not require that function pointers be |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
566 * interconvertible to void *, widely-used compilers such as gcc and clang |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
567 * do such conversion implicitly and automatically on some platforms without |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
568 * issuing any warning. |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
569 * |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
570 * For Solaris Studio, that is not the case. An explicit type cast is needed |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
571 * to suppress warnings on that particular conversion. |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
572 */ |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
573 # if defined(__SUNPRO_C) && defined(USE_GTK3) |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
574 # define FUNC2GENERIC(func) (void *)(func) |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
575 # else |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
576 # define FUNC2GENERIC(func) G_CALLBACK(func) |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
577 # endif |
51888fb2599f
commit https://github.com/vim/vim/commit/d47d83745ff450232328ca7a4b8b00b31bad22fc
Christian Brabandt <cb@256bit.org>
parents:
10042
diff
changeset
|
578 #endif /* FEAT_GUI_GTK */ |
13847
fa0dcdaec6a3
patch 8.0.1795: lose contact with jobs when :gui forks
Christian Brabandt <cb@256bit.org>
parents:
13339
diff
changeset
|
579 |
fa0dcdaec6a3
patch 8.0.1795: lose contact with jobs when :gui forks
Christian Brabandt <cb@256bit.org>
parents:
13339
diff
changeset
|
580 #if defined(UNIX) && !defined(FEAT_GUI_MAC) |
fa0dcdaec6a3
patch 8.0.1795: lose contact with jobs when :gui forks
Christian Brabandt <cb@256bit.org>
parents:
13339
diff
changeset
|
581 # define GUI_MAY_FORK |
fa0dcdaec6a3
patch 8.0.1795: lose contact with jobs when :gui forks
Christian Brabandt <cb@256bit.org>
parents:
13339
diff
changeset
|
582 #endif |