1/* GNUPLOT - wxt.trm */
2
3/*[
4 * Copyright 2005,2006   Timothee Lecomte
5 *
6 * Permission to use, copy, and distribute this software and its
7 * documentation for any purpose with or without fee is hereby granted,
8 * provided that the above copyright notice appear in all copies and
9 * that both that copyright notice and this permission notice appear
10 * in supporting documentation.
11 *
12 * Permission to modify the software is granted, but not the right to
13 * distribute the complete modified source code.  Modifications are to
14 * be distributed as patches to the released version.  Permission to
15 * distribute binaries produced by compiling modified sources is granted,
16 * provided you
17 *   1. distribute the corresponding source modifications from the
18 *    released version in the form of a patch file along with the binaries,
19 *   2. add special version identification to distinguish your version
20 *    in addition to the base release version number,
21 *   3. provide your name and address as the primary contact for the
22 *    support of your modified version, and
23 *   4. retain our contact information in regard to use of the base
24 *    software.
25 * Permission to distribute the released version of the source code along
26 * with corresponding source modifications in the form of a patch file is
27 * granted with same provisions 2 through 4 for binary distributions.
28 *
29 * This software is provided "as is" without express or implied warranty
30 * to the extent permitted by applicable law.
31]*/
32
33/* ------------------------------------------------------
34 * Here you will find the terminal table, filled
35 * with C++ functions defined in wxt_gui.cpp,
36 * where the wxWidgets terminal is mainly implemented.
37 * See wxt_gui.cpp for details about this terminal.
38 * ------------------------------------------------------*/
39
40#ifdef TERM_REGISTER
41register_term (wxt)
42#endif
43
44#ifdef TERM_PROTO
45TERM_PUBLIC void wxt_options __PROTO ((void));
46TERM_PUBLIC void wxt_text_wrapper __PROTO ((void));
47#endif /* TERM_PROTO */
48
49#ifndef TERM_PROTO_ONLY
50
51#ifdef TERM_BODY
52
53#include "wxterminal/wxt_term.h"
54
55/* terminal state, defined extern in wxt_term.h */
56int wxt_window_number = 0;
57TBOOLEAN wxt_enhanced_enabled = TRUE;
58TBOOLEAN wxt_dashed = TRUE;
59double wxt_dashlength = 1.0;
60double wxt_lw = 1.0;
61int wxt_background = 0xffffff;
62rgb_color wxt_rgb_background = {1.,1.,1.};
63int wxt_persist = UNSET;
64int wxt_raise = UNSET;
65int wxt_ctrl = UNSET;
66int wxt_toggle = UNSET;
67int wxt_redraw = UNSET;
68t_linecap wxt_linecap = SQUARE;
69/* default text font family: */
70char *wxt_set_fontname = NULL;
71/* default text size*/
72int wxt_set_fontsize = 0;
73double wxt_set_fontscale = 1.0;
74/* window title */
75char wxt_title[MAX_ID_LEN + 1] = "";
76/* size of the plot area, in pixels
77 * (window is bigger, includes toolbar and status bar) */
78int wxt_width = 640;
79int wxt_height = 384;
80/* initial position of the plot window. wxPoint(-1, -1) is equivalent to wxDefaultPosition */
81int wxt_posx = -1;
82int wxt_posy = -1;
83
84/* These are used to pass axis scaling information at the end of each plot */
85int wxt_axis_mask;
86wxt_axis_state_t wxt_axis_state[4];
87
88enum WXT_id {
89    WXT_FONT,
90    WXT_FONTSCALE,
91    WXT_ENHANCED,
92    WXT_NOENHANCED,
93    WXT_SIZE,
94    WXT_POSITION,
95    WXT_PERSIST,
96    WXT_NOPERSIST,
97    WXT_RAISE,
98    WXT_NORAISE,
99    WXT_CTRL,
100    WXT_NOCTRL,
101    WXT_TITLE,
102    WXT_CLOSE,
103    WXT_ROUNDED,
104    WXT_BUTT,
105    WXT_SQUARE,
106    WXT_SOLID,
107    WXT_DASHED,
108    WXT_DASHLENGTH,
109    WXT_LINEWIDTH,
110    WXT_BACKGROUND,
111    WXT_OTHER
112};
113
114static struct gen_table wxt_opts[] = {
115    {"fontscale",   WXT_FONTSCALE},
116    {"font",   WXT_FONT},
117    {"enh$anced", WXT_ENHANCED},
118    {"noenh$anced", WXT_NOENHANCED},
119    {"s$ize", WXT_SIZE},
120    {"pos$ition", WXT_POSITION},
121    {"per$sist", WXT_PERSIST},
122    {"noper$sist", WXT_NOPERSIST},
123    {"rai$se", WXT_RAISE},
124    {"norai$se", WXT_NORAISE},
125    {"ct$rlq", WXT_CTRL},
126    {"noct$rlq", WXT_NOCTRL},
127    {"ti$tle", WXT_TITLE},
128    {"cl$ose", WXT_CLOSE},
129    {"round$ed", WXT_ROUNDED},
130    {"butt", WXT_BUTT},
131    {"square", WXT_SQUARE},
132    {"solid", WXT_SOLID},
133    {"dash$ed", WXT_DASHED},
134    {"dashl$ength", WXT_DASHLENGTH},
135    {"dl", WXT_DASHLENGTH},
136    {"line$width", WXT_LINEWIDTH},
137    {"lw", WXT_LINEWIDTH},
138    {"backg$round", WXT_BACKGROUND},
139    {NULL, WXT_OTHER}
140};
141
142
143/* "Called when terminal type is selected. This procedure should parse options on the command line.
144* A list of the currently selected options should be stored in term_options[],
145* in a form suitable for use with the set term command.
146* term_options[] is used by the save command.  Use options_null() if no options are available." */
147TERM_PUBLIC void wxt_options()
148{
149	char *s = NULL;
150	char *font_setting = NULL;
151	TBOOLEAN duplication = FALSE;
152	TBOOLEAN set_font = FALSE;
153	TBOOLEAN set_persist = FALSE, set_number = FALSE;
154	TBOOLEAN set_raise = FALSE, set_ctrl = FALSE;
155	TBOOLEAN set_title = FALSE, set_close = FALSE;
156	TBOOLEAN set_capjoin = FALSE, set_size = FALSE;
157	TBOOLEAN set_position = FALSE;
158
159#ifndef WIN32
160	if (term_interlock != NULL && term_interlock != (void *)wxt_init) {
161		term = NULL;
162		int_error(NO_CARET, "The wxt terminal cannot be used in a qt session");
163	}
164#endif
165
166	while (!END_OF_COMMAND) {
167		switch (lookup_table(&wxt_opts[0], c_token)) {
168		case WXT_FONT:
169			c_token++;
170			if (!(s = try_to_get_string()))
171				int_error(c_token,"font: expecting string");
172			font_setting = gp_strdup(s);
173			if (*s) {
174				char *sep = strchr(s,',');
175				if (sep) {
176					sscanf(sep+1, "%d", &wxt_set_fontsize);
177					*sep = '\0';
178				}
179				free(wxt_set_fontname);
180				wxt_set_fontname = gp_strdup(s);
181			}
182			free(s);
183			if (set_font) duplication=TRUE;
184			set_font = TRUE;
185			break;
186		case WXT_FONTSCALE:
187			c_token++;
188			wxt_set_fontscale = END_OF_COMMAND ? -1 : real_expression();
189			if (wxt_set_fontscale <= 0)
190			    wxt_set_fontscale = 1.;
191			break;
192		case WXT_ENHANCED:
193			c_token++;
194			wxt_enhanced_enabled = TRUE;
195			term->flags |= TERM_ENHANCED_TEXT;
196			break;
197		case WXT_NOENHANCED:
198			c_token++;
199			wxt_enhanced_enabled = FALSE;
200			term->flags &= ~TERM_ENHANCED_TEXT;
201			break;
202		case WXT_SIZE:
203		    {
204			double insize; /* shige 2019-02-27 for size 0 */
205			c_token++;
206			if (END_OF_COMMAND)
207				int_error(c_token,"size requires 'width,height'");
208			if ((insize = real_expression()) >= 1)
209				wxt_width = insize;
210			else
211				int_error(c_token, "size is out of range");
212			if (!equals(c_token++,","))
213				int_error(c_token,"size requires 'width,height'");
214			if ((insize = real_expression()) >= 1)
215				wxt_height = insize;
216			else
217				int_error(c_token, "size is out of range");
218			if (set_size) duplication=TRUE;
219			set_size = TRUE;
220			break;
221		    }
222		case WXT_POSITION:
223			c_token++;
224			if (END_OF_COMMAND)
225				int_error(c_token,"position requires 'x,y'");
226			wxt_posx = real_expression();
227			if (!equals(c_token++,","))
228				int_error(c_token,"position requires 'x,y'");
229			wxt_posy = real_expression();
230			if (set_position) duplication = TRUE;
231			set_position = TRUE;
232			break;
233		case WXT_PERSIST:
234			c_token++;
235			wxt_persist = yes;
236			if (set_persist) duplication=TRUE;
237			set_persist = TRUE;
238			break;
239		case WXT_NOPERSIST:
240			c_token++;
241			wxt_persist = no;
242			if (set_persist) duplication=TRUE;
243			set_persist = TRUE;
244			break;
245		case WXT_RAISE:
246			c_token++;
247			wxt_raise = yes;
248			if (set_raise) duplication=TRUE;
249			set_raise = TRUE;
250			break;
251		case WXT_NORAISE:
252			c_token++;
253			wxt_raise = no;
254			if (set_raise) duplication=TRUE;
255			set_raise = TRUE;
256			break;
257		case WXT_CTRL:
258			c_token++;
259			wxt_ctrl = yes;
260			if (set_ctrl) duplication=TRUE;
261			set_ctrl = TRUE;
262			break;
263		case WXT_NOCTRL:
264			c_token++;
265			wxt_ctrl = no;
266			if (set_ctrl) duplication=TRUE;
267			set_ctrl = TRUE;
268			break;
269		case WXT_TITLE:
270			c_token++;
271			if (!(s = try_to_get_string()))
272				int_error(c_token,"title: expecting string");
273			if (*s)
274				strncpy(wxt_title, s, sizeof(wxt_title));
275			free(s);
276			if (set_title) duplication=TRUE;
277			set_title = TRUE;
278			break;
279		case WXT_CLOSE:
280			c_token++;
281			if (set_close) duplication=TRUE;
282			set_close = TRUE;
283			break;
284		case WXT_ROUNDED:
285			c_token++;
286			if (set_capjoin) duplication=TRUE;
287			wxt_linecap = ROUNDED;
288			set_capjoin = TRUE;
289			break;
290		case WXT_BUTT:
291			c_token++;
292			if (set_capjoin) duplication=TRUE;
293			wxt_linecap = BUTT;
294			set_capjoin = TRUE;
295			break;
296		case WXT_SQUARE:
297			c_token++;
298			if (set_capjoin) duplication=TRUE;
299			wxt_linecap = SQUARE;
300			set_capjoin = TRUE;
301			break;
302		case WXT_DASHED:
303		case WXT_SOLID:
304			/* dashes always enabled in version 5 */
305			c_token++;
306			wxt_dashed = TRUE;
307			break;
308		case WXT_DASHLENGTH:
309			c_token++;
310			wxt_dashlength = real_expression();
311			if (wxt_dashlength <= 0)
312			    wxt_dashlength = 1.0;
313			break;
314		case WXT_LINEWIDTH:
315			c_token++;
316			wxt_lw = real_expression();
317			if (wxt_lw <= 0)
318			    wxt_lw = 1.0;
319			break;
320		case WXT_BACKGROUND:
321			{
322			c_token++;
323			wxt_background = parse_color_name();
324			wxt_rgb_background.r = (double)((wxt_background >> 16) & 0xff) / 255.;
325			wxt_rgb_background.g = (double)((wxt_background >>  8) & 0xff) / 255.;
326			wxt_rgb_background.b = (double)( wxt_background        & 0xff) / 255.;
327			break;
328			}
329		case WXT_OTHER:
330		default:
331			if (isanumber(c_token) || type_udv(c_token) == INTGR) {
332				wxt_window_number = int_expression();
333				if (set_number) duplication=TRUE;
334				set_number = TRUE;
335			} else {
336				int_warn(c_token++, "unrecognized terminal option");
337			}
338			break;
339		}
340
341		if (duplication) {
342			int_warn(c_token-1, "Duplicated or contradicting arguments in wxt term options.");
343			duplication = FALSE;
344		}
345	}
346
347	/* Save options back into options string in normalized format */
348	snprintf(term_options, sizeof(term_options)-strlen(term_options),
349		"%d", wxt_window_number);
350
351	if (set_title) {
352		strncat(term_options, " title \"", sizeof(term_options)-strlen(term_options)-1);
353		strncat(term_options, wxt_title, sizeof(term_options)-strlen(term_options)-1);
354		strncat(term_options, "\"", sizeof(term_options)-strlen(term_options)-1);
355		wxt_update_title(wxt_window_number);
356	}
357
358	if (wxt_dashlength != 1.0) {
359		char tmp_term_options[MAX_LINE_LEN+1] = "";
360		snprintf(tmp_term_options,sizeof(tmp_term_options), " dashlength %g", wxt_dashlength);
361		strncat(term_options, tmp_term_options, sizeof(term_options)-strlen(term_options)-1);
362	}
363
364	if (wxt_lw != 1.0) {
365		char tmp_term_options[MAX_LINE_LEN+1] = "";
366		snprintf(tmp_term_options,sizeof(tmp_term_options), " lw %g", wxt_lw);
367		strncat(term_options, tmp_term_options, sizeof(term_options)-strlen(term_options)-1);
368	}
369
370	if (wxt_background != 0xffffff) {
371		char tmp_term_options[MAX_LINE_LEN+1] = "";
372		snprintf(tmp_term_options,sizeof(tmp_term_options), " background '#%06x'", wxt_background);
373		strncat(term_options, tmp_term_options, sizeof(term_options)-strlen(term_options)-1);
374	}
375
376	if (set_size) {
377		char tmp_term_options[MAX_LINE_LEN+1] = "";
378		snprintf(tmp_term_options, sizeof(tmp_term_options),
379			  " size %d, %d", wxt_width, wxt_height);
380		strncat(term_options, tmp_term_options, sizeof(term_options)-strlen(term_options)-1);
381		wxt_update_size(wxt_window_number);
382	}
383
384	if (set_position) {
385		char tmp_term_options[MAX_LINE_LEN+1] = "";
386		snprintf(tmp_term_options, sizeof(tmp_term_options),
387			  " position %d, %d", wxt_posx, wxt_posy);
388		strncat(term_options, tmp_term_options, sizeof(term_options)-strlen(term_options)-1);
389		wxt_update_position(wxt_window_number);
390	}
391
392	strncat(term_options,
393		wxt_enhanced_enabled ? " enhanced" : " noenhanced",
394		sizeof(term_options)-strlen(term_options)-1);
395
396	if (set_font) {
397		strncat(term_options, " font \"", sizeof(term_options)-strlen(term_options)-1);
398		strncat(term_options, font_setting, sizeof(term_options)-strlen(term_options)-1);
399		strncat(term_options, "\"", sizeof(term_options)-strlen(term_options)-1);
400		free(font_setting);
401	}
402
403	if (!wxt_set_fontname)
404		wxt_set_fontname = gp_strdup("");
405
406	if (wxt_set_fontscale != 1.0) {
407		char tmp_term_options[MAX_LINE_LEN+1] = "";
408		snprintf(tmp_term_options,sizeof(tmp_term_options), " fontscale %.1f", wxt_set_fontscale);
409		strncat(term_options, tmp_term_options, sizeof(term_options)-strlen(term_options)-1);
410	}
411
412	if (set_capjoin)
413		strncat(term_options,
414			wxt_linecap == ROUNDED ? " rounded"
415			: wxt_linecap == SQUARE ? " square"
416			: " butt",
417			sizeof(term_options)-strlen(term_options)-1);
418
419	if (set_persist)
420		strncat(term_options,
421			(wxt_persist==yes) ? " persist" : " nopersist",
422			sizeof(term_options)-strlen(term_options)-1);
423
424	if (set_raise)
425		strncat(term_options,
426			(wxt_raise==yes) ? " raise" : " noraise",
427			sizeof(term_options)-strlen(term_options)-1);
428
429	if (set_ctrl)
430		strncat(term_options,
431			(wxt_ctrl==yes) ? " ctrl" : " noctrl",
432			sizeof(term_options)-strlen(term_options)-1);
433
434	if (set_close)
435		wxt_close_terminal_window(wxt_window_number);
436}
437
438/* wxt_text() will do most of the work, but we have to pass it axis scaling
439 * info via a global structure that is loaded here.  The axis scaling is
440 * so that subsequent mouse events can be transformed into plot
441 * coordinates even though the plot is no longer active.
442 */
443TERM_PUBLIC void wxt_text_wrapper()
444{
445    int i;
446
447#ifdef USE_MOUSE
448	int axis_order[4] = {FIRST_X_AXIS, FIRST_Y_AXIS, SECOND_X_AXIS, SECOND_Y_AXIS};
449	wxt_axis_mask = 0;
450
451	for (i=0; i<4; i++) {
452		if (axis_array[axis_order[i]].ticmode != NO_TICS)
453		    wxt_axis_mask |= (1 << i);
454	}
455
456	for (i=0; i<4; i++) {
457		wxt_axis_state[i].min = axis_array[axis_order[i]].min;
458		wxt_axis_state[i].term_lower = axis_array[axis_order[i]].term_lower;
459		wxt_axis_state[i].term_scale = axis_array[axis_order[i]].term_scale;
460		wxt_axis_state[i].logbase = axis_array[axis_order[i]].log
461			? axis_array[axis_order[i]].log_base : 0;
462	}
463#endif
464
465    wxt_text();
466}
467
468#endif /* TERM_BODY */
469
470#ifdef TERM_TABLE
471TERM_TABLE_START (wxt_driver)
472    "wxt", "wxWidgets cross-platform interactive terminal",
473    /* the following values are overriden by wxt_graphics */
474    1 /* xmax */ , 1 /* ymax */ , 1 /* vchar */ , 1 /* hchar */ ,
475    1 /* vtic */ , 1 /* htic */ ,
476    wxt_options, wxt_init, wxt_reset, wxt_text_wrapper, null_scale, wxt_graphics,
477    wxt_move, wxt_vector, wxt_linetype, wxt_put_text,
478    wxt_text_angle, wxt_justify_text,
479    wxt_point, do_arrow, wxt_set_font,
480    wxt_pointsize,
481    TERM_CAN_MULTIPLOT|TERM_NO_OUTPUTFILE|TERM_ALPHA_CHANNEL|TERM_CAN_DASH|TERM_FONTSCALE|TERM_ENHANCED_TEXT|TERM_LINEWIDTH,
482    wxt_text /* suspend */, 0 /* resume */, wxt_fillbox, wxt_linewidth
483#ifdef USE_MOUSE
484    , wxt_waitforinput, wxt_put_tmptext, wxt_set_ruler, wxt_set_cursor, wxt_set_clipboard
485#endif
486    , wxt_make_palette, 0 /* wxt_previous_palette */, wxt_set_color, wxt_filled_polygon
487    , wxt_image
488    , wxt_enhanced_open, wxt_enhanced_flush, wxt_enhanced_writec
489    , wxt_layer
490    , NULL /* no term->path */
491    , 0.0 /* Scale (unused) */
492    , wxt_hypertext
493#ifdef EAM_BOXED_TEXT
494    , wxt_boxed_text
495#endif
496    , wxt_modify_plots
497    , wxt_dashtype
498TERM_TABLE_END (wxt_driver)
499
500#undef LAST_TERM
501#define LAST_TERM wxt_driver
502
503#endif /* TERM_TABLE */
504#endif /* TERM_PROTO_ONLY */
505
506#ifdef TERM_HELP
507START_HELP(wxt)
508"1 wxt",
509"?set terminal wxt",
510"?terminal wxt",
511"?set term wxt",
512"?term wxt",
513"?wxt",
514" The `wxt` terminal device generates output in a separate window. The window",
515" is created by the wxWidgets library, where the 'wxt' comes from. The actual",
516" drawing is done via cairo, a 2D graphics library, and pango, a library for",
517" laying out and rendering text.",
518"",
519" Syntax:",
520"         set term wxt {<n>}",
521"                      {size <width>,<height>} {position <x>,<y>}",
522"                      {background <rgb_color>}",
523"                      {{no}enhanced}",
524"                      {font <font>} {fontscale <scale>}",
525"                      {title \"title\"}",
526"                      {linewidth <lw>}",
527"                      {dashlength <dl>}",
528"                      {{no}persist}",
529"                      {{no}raise}",
530"                      {{no}ctrl}",
531"                      {close}",
532"",
533" Multiple plot windows are supported: `set terminal wxt <n>` directs the",
534" output to plot window number n.",
535"",
536" The default window title is based on the window number. This title can also",
537" be specified with the keyword \"title\".",
538"",
539" Plot windows remain open even when the `gnuplot` driver is changed to a",
540" different device.  A plot window can be closed by pressing the letter 'q'",
541" while that window has input focus, by choosing `close` from a window",
542" manager menu, or with `set term wxt <n> close`.",
543"",
544" The size of the plot area is given in pixels, it defaults to 640x384.",
545" In addition to that, the actual size of the window also includes the space",
546" reserved for the toolbar and the status bar.",
547" When you resize a window, the plot is immediately scaled to fit in the",
548" new size of the window. Unlike other interactive terminals, the `wxt`",
549" terminal scales the whole plot, including fonts and linewidths, and keeps",
550" its global aspect ratio constant, leaving an empty space painted in gray.",
551" If you type `replot`, click the `replot` icon in the terminal toolbar or",
552" type a new `plot` command, the new plot will completely fit in the window",
553" and the font size and the linewidths will be reset to their defaults.",
554"",
555" The position option can be used to set the position of the plot window.",
556" The position option only applies to the first plot after the `set term`",
557" command.",
558"",
559" The active plot window (the one selected by `set term wxt <n>`) is",
560" interactive. Its behaviour is shared with other terminal types. See `mouse`",
561" for details. It also has some extra icons, which are supposed to be",
562" self-explanatory.",
563"",
564" This terminal supports an enhanced text mode, which allows font and other",
565" formatting commands (subscripts, superscripts, etc.) to be embedded in labels",
566" and other text strings. The enhanced text mode syntax is shared with other",
567" gnuplot terminal types. See `enhanced` for more details.",
568"",
569" <font> is in the format \"FontFace,FontSize\", i.e. the face and the size",
570" comma-separated in a single string. FontFace is a usual font face name, such",
571" as \'Arial\'. If you do not provide FontFace, the wxt terminal will use",
572" \'Sans\'. FontSize is the font size, in points. If you do not provide it,",
573" the wxt terminal will use a size of 10 points.",
574"    For example :",
575"       set term wxt font \"Arial,12\"",
576"       set term wxt font \"Arial\" # to change the font face only",
577"       set term wxt font \",12\" # to change the font size only",
578"       set term wxt font \"\" # to reset the font name and size",
579"",
580" The fonts are retrieved from the usual fonts subsystems. Under Windows,",
581" those fonts are to be found and configured in the entry \"Fonts\" of the",
582" control panel. Under UNIX, they are handled by \"fontconfig\".",
583"",
584" Pango, the library used to layout the text, is based on utf-8. Thus, the wxt",
585" terminal has to convert from your encoding to utf-8. The default input",
586" encoding is based on your \'locale\'. If you want to use another encoding,",
587" make sure gnuplot knows which one you are using. See `encoding` for more",
588" details.",
589"",
590" Pango may give unexpected results with fonts that do not respect the unicode",
591" mapping. With the Symbol font, for example, the wxt terminal will use the map",
592" provided by http://www.unicode.org/ to translate character codes to unicode.",
593" Pango will do its best to find a font containing this character, looking for",
594" your Symbol font, or other fonts with a broad unicode coverage, like the",
595" DejaVu fonts. Note that \"the Symbol font\" is to be understood as the Adobe",
596" Symbol font, distributed with Acrobat Reader as \"SY______.PFB\".",
597" Alternatively, the OpenSymbol font, distributed with OpenOffice.org as",
598" \"opens___.ttf\", offers the same characters. Microsoft has distributed a",
599" Symbol font (\"symbol.ttf\"), but it has a different character set with",
600" several missing or moved mathematic characters. If you experience problems",
601" with your default setup (if the demo enhancedtext.dem is not displayed",
602" properly for example), you probably have to install one of the Adobe or",
603" OpenOffice Symbol fonts, and remove the Microsoft one.",
604" Other non-conform fonts, such as \"wingdings\" have been observed working.",
605"",
606" The rendering of the plot can be altered with a dialog available from the",
607" toolbar. To obtain the best output possible, the rendering involves three",
608" mechanisms : antialiasing, oversampling and hinting.",
609" Antialiasing allows to display non-horizontal and non-vertical lines",
610" smoother.",
611" Oversampling combined with antialiasing provides subpixel accuracy,",
612" so that gnuplot can draw a line from non-integer coordinates. This avoids",
613" wobbling effects on diagonal lines ('plot x' for example).",
614" Hinting avoids the blur on horizontal and vertical lines caused by",
615" oversampling. The terminal will snap these lines to integer coordinates so",
616" that a one-pixel-wide line will actually be drawn on one and only one pixel.",
617"",
618" By default, the window is raised to the top of your desktop when a plot is",
619" drawn. This can be controlled with the keyword \"raise\".",
620" The keyword \"persist\" will prevent gnuplot from exiting before you",
621" explicitely close all the plot windows.",
622" Finally, by default the key <space> raises the gnuplot console window, and",
623" 'q' closes the plot window. The keyword \"ctrl\" allows you to replace those",
624" bindings by <ctrl>+<space> and <ctrl>+'q', respectively.",
625" These three keywords (raise, persist and ctrl) can also be set and remembered",
626" between sessions through the configuration dialog."
627END_HELP(wxt)
628#endif /* TERM_HELP */
629