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