| /* |
| * GraphApp |
| * -------- |
| * Common cross-platform graphics application routines. |
| * Version 2.4 (c) Lachlan Patrick 1996-1998. |
| * This header file is designed to be platform-independent. |
| * |
| * Copyright 2006-8 The R Foundation |
| * Copyright 2013-20 The R Core Team |
| * |
| */ |
| |
| /* |
| * Common cross-platform graphics routines library. |
| */ |
| |
| #ifndef _GRAPHAPP_H |
| #define _GRAPHAPP_H 240 |
| |
| /* |
| * Assume C declarations for C++ |
| */ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif /* begin normal C declarations */ |
| |
| /* |
| * Definition of some constants. |
| */ |
| |
| #include <stdio.h> |
| #include <stdlib.h> |
| |
| #ifndef Pi |
| #define Pi 3.14159265359 |
| #endif |
| |
| /* |
| * Types. |
| */ |
| |
| typedef unsigned char GAbyte; |
| |
| #ifndef objptr |
| typedef struct { int kind; } gui_obj; |
| typedef gui_obj * objptr; |
| #endif |
| |
| typedef unsigned long rgb; /* red-green-blue colour value */ |
| |
| typedef objptr font; /* font of certain size and style */ |
| typedef objptr cursor; /* mouse cursor shape */ |
| |
| typedef objptr drawing; /* bitmap, window or control */ |
| |
| typedef drawing bitmap; /* platform-specific bitmap */ |
| typedef drawing window; /* on-screen window */ |
| typedef drawing control; /* buttons, text-fields, scrollbars */ |
| |
| typedef control label; /* text label */ |
| typedef control button; /* push button */ |
| typedef control checkbox; /* check-box */ |
| typedef control radiobutton; /* radio button */ |
| typedef control radiogroup; /* group of radio buttons */ |
| typedef control field; /* one-line text field */ |
| typedef control textbox; /* multi-line text box */ |
| typedef control scrollbar; /* scroll-bar */ |
| typedef control listbox; /* list of text */ |
| typedef control progressbar; /* progress bar */ |
| |
| typedef control menubar; /* contains menus */ |
| typedef control menu; /* pull-down menu contains menuitems */ |
| typedef control menuitem; /* a single item in a pull-down menu */ |
| |
| /* |
| * Structures. |
| */ |
| |
| typedef struct point point; |
| typedef struct rect rect; |
| typedef struct drawstruct drawstruct; |
| typedef struct drawstruct *drawstate; |
| typedef struct imagedata imagedata; |
| typedef struct imagedata *image; |
| |
| struct point |
| { |
| int x, y; |
| }; |
| |
| struct rect |
| { |
| int x, y; /* top-left point inside rect */ |
| int width, height; /* width and height of rect */ |
| }; |
| |
| struct drawstruct |
| { |
| drawing dest; |
| rgb hue; |
| int mode; |
| point p; |
| int linewidth; |
| font fnt; |
| cursor crsr; |
| }; |
| |
| struct imagedata { |
| int depth; |
| int width; |
| int height; |
| int cmapsize; |
| rgb * cmap; |
| GAbyte * pixels; |
| }; |
| |
| /* |
| * Call-backs. |
| */ |
| |
| typedef void (*voidfn)(void); |
| typedef void (*timerfn)(void *data); |
| typedef void (*actionfn)(control c); |
| typedef void (*drawfn)(control c, rect r); |
| typedef void (*mousefn)(control c, int buttons, point xy); |
| typedef void (*intfn)(control c, int argument); |
| typedef void (*keyfn)(control c, int key); |
| typedef void (*menufn)(menuitem m); |
| typedef void (*scrollfn)(scrollbar s, int position); |
| typedef void (*dropfn)(control c, char *data); |
| typedef void (*imfn)(control c, font *f, point *xy); |
| |
| /* |
| * Mouse buttons state (bit-fields). |
| */ |
| |
| #define NoButton 0x0000 |
| #define LeftButton 0x0001 |
| #define MiddleButton 0x0002 |
| #define RightButton 0x0004 |
| |
| /* |
| * ANSI character codes. |
| */ |
| |
| #define BELL 0x07 |
| #define BKSP 0x08 |
| #define VTAB 0x0B |
| #define FF 0x0C |
| #define ESC 0x1B |
| |
| /* |
| * Edit-key codes. |
| */ |
| |
| #define INS 0x2041 |
| #define DEL 0x2326 |
| #define HOME 0x21B8 |
| #define END 0x2198 |
| #define PGUP 0x21DE |
| #define PGDN 0x21DF |
| #define ENTER 0x2324 |
| |
| /* |
| * Cursor-key codes. |
| */ |
| |
| #define LEFT 0x2190 |
| #define UP 0x2191 |
| #define RIGHT 0x2192 |
| #define DOWN 0x2193 |
| |
| /* |
| * Function-key codes. |
| */ |
| |
| #define F1 0x276C |
| #define F2 0x276D |
| #define F3 0x276E |
| #define F4 0x276F |
| #define F5 0x2770 |
| #define F6 0x2771 |
| #define F7 0x2772 |
| #define F8 0x2773 |
| #define F9 0x2774 |
| #define F10 0x2775 |
| |
| /* |
| * Redefined functions. |
| */ |
| #define REDEFINE_FUNC_NAMES |
| #define addpt GA_addpt |
| #define subpt GA_subpt |
| #define equalpt GA_equalpt |
| #define newmenu GA_newmenu |
| #define newcontrol GA_newcontrol |
| #define newwindow GA_newwindow |
| /* #define gettext GA_gettext */ |
| #define settext GA_settext |
| |
| #define R_REMAP |
| #ifdef R_REMAP |
| #define BringToTop GA_BringToTop |
| #define GetCurrentWinPos GA_GetCurrentWinPos |
| #define activatecontrol GA_activatecontrol |
| #define add_context GAI_add_context |
| #define add_strings GA_add_strings |
| #define addstatusbar GA_addstatusbar |
| #define addto GA_addto |
| #define addtooltip GA_addtooltip |
| #define adjust_menu GAI_adjust_menu |
| #define app_cleanup GA_appcleanup |
| #define apperror GA_apperror |
| #define apply_to_list GAI_apply_to_list |
| #define askUserPass GA_askUserPass |
| #define askcdstring GA_askcdstring |
| #define askchangedir GA_askchangedir |
| #define askfilename GA_askfilename |
| #define askfilenames GA_askfilenames |
| #define askfilenamewithdir GA_askfilenamewithdir |
| #define askfilesave GA_askfilesave |
| #define askfilesavewithdir GA_askfilesavewithdir |
| #define askok GA_askok |
| #define askokcancel GA_askokcancel |
| #define askpassword GA_askpassword |
| #define askstring GA_askstring |
| #define askyesno GA_askyesno |
| #define askyesnocancel GA_askyesnocancel |
| #define bitblt GA_bitblt |
| #define bitmaptoimage GA_bitmaptoimage |
| #define bottomleft GA_bottomleft |
| #define bottomright GA_bottomright |
| #define brighter GA_brighter |
| #define changelistbox GA_changelistbox |
| #define changescrollbar GA_changescrollbar |
| #define char_to_string GAI_char_to_string |
| #define check GA_check |
| #define checklimittext GA_checklimittext |
| #define clear GA_clear |
| #define cleartext GA_cleartext |
| #define clipboardhastext GA_clipboardhastext |
| #define clipr GA_clipr |
| #define compare_strings GAI_compare_strings |
| #define convert32to8 GA_convert32to8 |
| #define convert8to32 GA_convert8to32 |
| #define copy_string GAI_copy_string |
| #define copydrawstate GA_copydrawstate |
| #define copyimage GA_copyimage |
| #define copyrect GA_copyrect |
| #define copystringtoclipboard GA_copystringtoclipboard |
| #define copytext GA_copytext |
| #define copytoclipboard GA_copytoclipboard |
| #define countFilenames GA_countFilenames |
| #define createbitmap GA_createbitmap |
| #define createcursor GA_createcursor |
| #define currentcursor GA_currentcursor |
| #define currentdrawing GA_currentdrawing |
| #define currentfont GA_currentfont |
| #define currentlinewidth GA_currentlinewidth |
| #define currentmode GA_currentmode |
| #define currentpoint GA_currentpoint |
| #define currentrgb GA_currentrgb |
| #define currenttime GA_currenttime |
| #define cuttext GA_cuttext |
| #define darker GA_darker |
| #define decrease_refcount GAI_decrease_refcount |
| #define del_all_contexts GAI_del_all_contexts |
| #define del_context GAI_del_context |
| #define del_string GAI_del_string |
| #define delay GA_delay |
| #define deletion_traversal GAI_deletion_traversal |
| #define delimage GA_delimage |
| #define delobj GA_delobj |
| #define delstatusbar GA_delstatusbar |
| #define deviceheight GA_deviceheight |
| #define deviceheightmm GA_deviceheightmm |
| #define devicepixelsx GA_devicepixelsx |
| #define devicepixelsy GA_devicepixelsy |
| #define devicewidth GA_devicewidth |
| #define devicewidthmm GA_devicewidthmm |
| #define dialog_bg GA_dialog_bg |
| #define disable GA_disable |
| #define divpt GA_divpt |
| #define doevent GA_doevent |
| #define draw GA_draw |
| #define drawall GA_drawall |
| #define drawarc GA_drawarc |
| #define drawbrighter GA_drawbrighter |
| #define drawdarker GA_drawdarker |
| #define drawellipse GA_drawellipse |
| #define drawgreyscale GA_drawgreyscale |
| #define drawimage GA_drawimage |
| #define drawline GA_drawline |
| #define drawmonochrome GA_drawmonochrome |
| #define drawpoint GA_drawpoint |
| #define drawpolygon GA_drawpolygon |
| #define drawrect GA_drawrect |
| #define drawroundrect GA_drawroundrect |
| #define drawstr GA_drawstr |
| #define drawtext GA_drawtext |
| #define drawto GA_drawto |
| #define enable GA_enable |
| #define equalr GA_equalr |
| #define execapp GA_execapp |
| #define exitapp GA_exitapp |
| #define fillarc GA_fillarc |
| #define fillellipse GA_fillellipse |
| #define fillpolygon GA_fillpolygon |
| #define fillrect GA_fillrect |
| #define fillroundrect GA_fillroundrect |
| #define find_object GAI_find_object |
| #define find_valid_sibling GAI_find_valid_sibling |
| #define finddialog GA_finddialog |
| #define finish_contexts GAI_finish_contexts |
| #define finish_events GAI_finish_events |
| #define finish_objects GAI_finish_objects |
| #define fix_brush GAI_fix_brush |
| #define flashcontrol GA_flashcontrol |
| #define float_to_string GAI_float_to_string |
| #define fontascent GA_fontascent |
| #define fontdescent GA_fontdescent |
| #define fontheight GA_fontheight |
| #define fontwidth GA_fontwidth |
| #define gabeep GA_gabeep |
| #define gamainloop GA_gamainloop |
| #define gbitblt GA_gbitblt |
| #define gchangemenubar GA_gchangemenubar |
| #define gchangepopup GA_gchangepopup |
| #define gchangescrollbar GA_gchangescrollbar |
| #define gcharmetric GA_gcharmetric |
| #define gcopy GA_gcopy |
| #define gcopyalpha GA_gcopyalpha |
| #define gdrawellipse GA_gdrawellipse |
| #define gdrawline GA_gdrawline |
| #define gdrawpolyline GA_gdrawpolyline |
| #define gdrawrect GA_gdrawrect |
| #define gdrawstr GA_gdrawstr |
| #define gdrawstr1 GA_gdrawstr1 |
| #define gdrawwcs GA_gdrawwcs |
| #define getHandle GA_getHandle |
| #define getSysFontSize GA_getSysFontSize |
| #define get_context GAI_get_context |
| #define get_grey_pixel GAI_get_grey_pixel |
| #define get_image_pixel GAI_get_image_pixel |
| #define get_modeless GAI_get_modeless |
| #define get_monochrome_pixel GAI_get_monochrome_pixel |
| #define getbackground GA_getbackground |
| #define getbitmapdata GA_getbitmapdata |
| #define getbitmapdata2 GA_getbitmapdata2 |
| #define getcliprect GA_getcliprect |
| #define getcurrentline GA_getcurrentline |
| #define getdata GA_getdata |
| #define getforeground GA_getforeground |
| #define getkeystate GA_getkeystate |
| #define getlimittext GA_getlimittext |
| #define getlinelength GA_getlinelength |
| #define getlistitem GA_getlistitem |
| #define getpalette GA_getpalette |
| #define getpalettesize GA_getpalettesize |
| #define getpastelength GA_getpastelength |
| #define getpixel GA_getpixel |
| #define getpixels GA_getpixels |
| #define getseltext GA_getseltext |
| #define getstringfromclipboard GA_getstringfromclipboard |
| #define gettextfont GA_gettextfont |
| #define getvalue GA_getvalue |
| #define gfillellipse GA_gfillellipse |
| #define gfillpolygon GA_gfillpolygon |
| #define gfillrect GA_gfillrect |
| #define ggetcliprect GA_ggetcliprect |
| #define ggetkeystate GA_ggetkeystate |
| #define ggetmodified GA_ggetmodified |
| #define ggetpixel GA_ggetpixel |
| #define ghasfixedwidth GA_ghasfixedwidth |
| #define ginvert GA_ginvert |
| #define gmenubar GA_gmenubar |
| #define gnewfont GA_gnewfont |
| #define gnewfont2 GA_gnewfont2 |
| #define goldfillellipse GA_goldfillellipse |
| #define gpopup GA_gpopup |
| #define gprintf GA_gprintf |
| #define growr GA_growr |
| #define gscroll GA_gscroll |
| #define gsetcliprect GA_gsetcliprect |
| #define gsetcursor GA_gsetcursor |
| #define gsetpolyfillmode GA_gsetpolyfillmode |
| #define gsetmodified GA_gsetmodified |
| #define gsetpixel GA_gsetpixel |
| #define gstrrect GA_gstrrect |
| #define gstrsize GA_gstrsize |
| #define gstrwidth GA_gstrwidth |
| #define gwcharmetric GA_gwcharmetric |
| #define gwcswidth GA_gwcswidth |
| #define gwdrawstr1 GA_gwdrawstr1 |
| #define handle_control GAI_handle_control |
| #define handle_findreplace GAI_handle_findreplace |
| #define handle_menu_id GAI_handle_menu_id |
| #define handle_menu_key GAI_handle_menu_key |
| #define has_transparent_pixels GAI_has_transparent_pixels |
| #define hide GA_hide |
| #define hide_window GAI_hide_window |
| #define highlight GA_highlight |
| #define imagedepth GA_imagedepth |
| #define imageheight GA_imageheight |
| #define imagetobitmap GA_imagetobitmap |
| #define imagewidth GA_imagewidth |
| #define increase_refcount GAI_increase_refcount |
| #define init_contexts GAI_init_contexts |
| #define init_cursors GAI_init_cursors |
| #define init_events GAI_init_events |
| #define init_fonts GAI_init_fonts |
| #define init_menus GAI_init_menus |
| #define init_objects GAI_init_objects |
| #define initapp GA_initapp |
| #define inserttext GA_inserttext |
| #define insetr GA_insetr |
| #define int_to_string GAI_int_to_string |
| #define invertrect GA_invertrect |
| #define isTopmost GA_isTopmost |
| #define ischecked GA_ischecked |
| #define isenabled GA_isenabled |
| #define ishighlighted GA_ishighlighted |
| #define isiconic GA_isiconic |
| #define ismdi GA_ismdi |
| #define isselected GA_isselected |
| #define isUnicodeWindow GA_isUnicodeWindow |
| #define isvisible GA_isvisible |
| #define lineto GA_lineto |
| #define load_gif GAI_load_gif |
| #define loadbitmap GA_loadbitmap |
| #define loadcursor GA_loadcursor |
| #define loadimage GA_loadimage |
| #define memalloc GAI_memalloc |
| #define memexpand GAI_memexpand |
| #define memfree GAI_memfree |
| #define memjoin GAI_memjoin |
| #define memlength GAI_memlength |
| #define memrealloc GAI_memrealloc |
| #define midpt GA_midpt |
| #define modeless_active GA_modeless_active |
| #define move_to_front GAI_move_to_front |
| #define moveto GA_moveto |
| #define mulpt GA_mulpt |
| #define myAppendMenu GA_myAppendMenu |
| #define myGetSysColor GA_myGetSysColor |
| #define myMessageBox GA_myMessageBox |
| #define nametorgb GA_nametorgb |
| #define new_font_object GA_new_font_object |
| #define new_object GAI_new_object |
| #define new_string GAI_new_string |
| #define newbitmap GA_newbitmap |
| #define newbutton GA_newbutton |
| #define newcheckbox GA_newcheckbox |
| #define newcursor GA_newcursor |
| #define newdrawing GA_newdrawing |
| #define newdropfield GA_newdropfield |
| #define newdroplist GA_newdroplist |
| #define newfield GA_newfield |
| #define newfield_no_border GA_newfield_no_border |
| #define newfont GA_newfont |
| #define newimage GA_newimage |
| #define newimagebutton GA_newimagebutton |
| #define newimagecheckbox GA_newimagecheckbox |
| #define newlabel GA_newlabel |
| #define newlistbox GA_newlistbox |
| #define newmdimenu GA_newmdimenu |
| #define newmenubar GA_newmenubar |
| #define newmenuitem GA_newmenuitem |
| #define newmetafile GA_newmetafile |
| #define newmultilist GA_newmultilist |
| #define newpassword GA_newpassword |
| #define newpicture GA_newpicture |
| #define newpoint GA_newpoint |
| #define newpopup GA_newpopup |
| #define newprinter GA_newprinter |
| #define newprogressbar GA_newprogressbar |
| #define newradiobutton GA_newradiobutton |
| #define newradiogroup GA_newradiogroup |
| #define newrect GA_newrect |
| #define newrichtextarea GA_newrichtextarea |
| #define newscrollbar GA_newscrollbar |
| #define newsubmenu GA_newsubmenu |
| #define newtextarea GA_newtextarea |
| #define newtextbox GA_newtextbox |
| #define newtoolbar GA_newtoolbar |
| #define newtoolbutton GA_newtoolbutton |
| #define nextpage GA_nextpage |
| #define objdepth GA_objdepth |
| #define objheight GA_objheight |
| #define objrect GA_objrect |
| #define objwidth GA_objwidth |
| #define oldfillellipse GA_oldfillellipse |
| #define parentwindow GA_parentwindow |
| #define pastetext GA_pastetext |
| #define peekevent GA_peekevent |
| #define protect_object GAI_protect_object |
| #define ptinr GA_ptinr |
| #define raddpt GA_raddpt |
| #define rcanon GA_rcanon |
| #define rcenter GA_rcenter |
| #define rdiv GA_rdiv |
| #define redraw GA_redraw |
| #define remove_context GAI_remove_context |
| #define remove_menu_item GA_remove_menu_item |
| #define replacedialog GA_replacedialog |
| #define resetdrawstate GA_resetdrawstate |
| #define resize GA_resize |
| #define restoredrawstate GA_restoredrawstate |
| #define rgbtoname GA_rgbtoname |
| #define rgbtonum GA_rgbtonum |
| #define rinr GA_rinr |
| #define rmove GA_rmove |
| #define rmul GA_rmul |
| #define rpt GA_rpt |
| #define rsubpt GA_rsubpt |
| #define rxr GA_rxr |
| #define save_gif GAI_save_gif |
| #define saveimage GA_saveimage |
| #define scaleimage GA_scaleimage |
| #define screen_coords GA_screen_coords |
| #define scrollcaret GA_scrollcaret |
| #define scrollrect GA_scrollrect |
| #define scrolltext GA_scrolltext |
| #define selecttext GA_selecttext |
| #define selecttextex GA_selecttextex |
| #define setaction GA_setaction |
| #define setbackground GA_setbackground |
| #define setbitmapdata GA_setbitmapdata |
| #define setcaret GA_setcaret |
| #define setcliprect GA_setcliprect |
| #define setclose GA_setclose |
| #define setcursor GA_setcursor |
| #define setdata GA_setdata |
| #define setdel GA_setdel |
| #define setdrawmode GA_setdrawmode |
| #define setdrawstate GA_setdrawstate |
| #define setdrop GA_setdrop |
| #define setfont GA_setfont |
| #define setforeground GA_setforeground |
| #define sethit GA_sethit |
| #define setimage GA_setimage |
| #define setim GA_setim |
| #define setkeyaction GA_setkeyaction |
| #define setkeydown GA_setkeydown |
| #define setlimittext GA_setlimittext |
| #define setlinewidth GA_setlinewidth |
| #define setlistitem GA_setlistitem |
| #define setmousedown GA_setmousedown |
| #define setmousedrag GA_setmousedrag |
| #define setmousemove GA_setmousemove |
| #define setmouserepeat GA_setmouserepeat |
| #define setmousetimer GA_setmousetimer |
| #define setmouseup GA_setmouseup |
| #define setonfocus GA_setonfocus |
| #define setpalette GA_setpalette |
| #define setpixel GA_setpixel |
| #define setpixels GA_setpixels |
| #define setprogressbar GA_setprogressbar |
| #define setprogressbarrange GA_setprogressbarrange |
| #define setredraw GA_setredraw |
| #define setresize GA_setresize |
| #define setrgb GA_setrgb |
| #define setstatus GA_setstatus |
| #define settextfont GA_settextfont |
| #define settimer GA_settimer |
| #define settimerfn GA_settimerfn |
| #define setuserfilter GA_setuserfilter |
| #define setvalue GA_setvalue |
| #define show GA_show |
| #define showcaret GA_showcaret |
| #define show_window GAI_show_window |
| #define simple_window GAI_simple_window |
| #define sortpalette GA_sortpalette |
| #define startgraphapp GA_startgraphapp |
| #define stepprogressbar GA_stepprogressbar |
| #define string_diff GAI_string_diff |
| #define string_length GAI_string_length |
| #define strrect GA_strrect |
| #define strsize GA_strsize |
| #define strwidth GA_strwidth |
| #define textheight GA_textheight |
| #define textselection GA_textselection |
| #define textselectionex GA_textselectionex |
| #define texturerect GA_texturerect |
| #define to_c_string GAI_to_c_string |
| #define to_dos_string GAI_to_dos_string |
| #define toolbar_hide GA_toolbar_hide |
| #define toolbar_show GA_toolbar_show |
| #define topleft GA_topleft |
| #define topright GA_topright |
| #define tree_search GA_tree_search |
| #define uncheck GA_uncheck |
| #define undotext GA_undotext |
| #define unhighlight GA_unhighlight |
| #define updatestatus GA_updatestatus |
| #define waitevent GA_waitevent |
| |
| #define ColorName GA_ColorName |
| #define Courier GA_Courier |
| #define FixedFont GA_FixedFont |
| #define Helvetica GA_Helvetica |
| #define MDIFrame GA_MDIFrame |
| #define MDIStatus GA_MDIStatus |
| #define MDIToolbar GA_MDIToolbar |
| #define SystemFont GA_SystemFont |
| #define Times GA_Times |
| #define TopmostDialogs GA_TopmostDialogs |
| #define active_windows GAI_active_windows |
| #define app_control_proc GAI_app_control_proc |
| #define app_control_procedure GAI_app_control_procedure |
| #define app_doc_proc GAI_app_doc_proc |
| #define app_drawstate GAI_app_drawstate |
| #define app_initialised GAI_app_initialised |
| #define app_name GAI_app_name |
| #define app_timer_proc GAI_app_timer_proc |
| #define app_timer_procedure GAI_app_timer_procedure |
| #define app_win_proc GAI_app_win_proc |
| #define app_work_proc GAI_app_work_proc |
| #define child_id GAI_child_id |
| #define current GAI_current |
| #define current_menu GAI_current_menu |
| #define current_menubar GAI_current_menubar |
| #define current_window GAI_current_window |
| #define dc GAI_dc |
| #define hAccel GAI_hAccel |
| #define hwndClient GAI_hwndClient |
| #define hwndFrame GAI_hwndFrame |
| #define hwndMain GAI_hwndMain |
| #define is_NT GA_isNT |
| #define keystate GAI_keystate |
| #define menus_active GAI_menus_active |
| #define prev_instance GAI_prev_instance |
| #define the_brush GAI_the_brush |
| #define the_pen GAI_the_pen |
| #define this_instance GAI_this_instance |
| #define win_rgb GAI_win_rgb |
| |
| #define ArrowCursor GA_ArrowCursor |
| #define BlankCursor GA_BlankCursor |
| #define CaretCursor GA_CaretCursor |
| #define CrossCursor GA_CrossCursor |
| #define HandCursor GA_HandCursor |
| #define TextCursor GA_TextCursor |
| #define WatchCursor GA_WatchCursor |
| |
| #define cam_image GA_cam_image |
| #define color_image GA_color_image |
| #define console1_image GA_console1_image |
| #define console_image GA_console_image |
| #define copy1_image GA_copy1_image |
| #define copy_image GA_copy_image |
| #define copypaste_image GA_copypaste_image |
| #define cut_image GA_cut_image |
| #define erase_image GA_erase_image |
| #define help_image GA_help_image |
| #define open1_image GA_open1_image |
| #define open_image GA_open_image |
| #define paste1_image GA_paste1_image |
| #define paste_image GA_paste_image |
| #define print_image GA_print_image |
| #define save_image GA_save_image |
| #define stop_image GA_stop_image |
| #endif |
| |
| /* |
| * General functions. |
| */ |
| |
| int initapp(int argc, char *argv[]); |
| void exitapp(void); |
| |
| void drawall(void); |
| int peekevent(void); |
| void waitevent(void); |
| int doevent(void); |
| void mainloop(void); |
| |
| int execapp(char *cmd); |
| |
| /*void beep(void);*/ |
| |
| /* |
| * Point and rectangle arithmetic. |
| */ |
| |
| point newpoint(int x, int y); |
| rect newrect(int left, int top, int width, int height); |
| rect rpt(point min, point max); |
| |
| #define pt(x,y) newpoint((x),(y)) |
| #define rect(x,y,w,h) newrect((x),(y),(w),(h)) |
| |
| point topleft(rect r); |
| point bottomright(rect r); |
| point topright(rect r); |
| point bottomleft(rect r); |
| |
| point addpt(point p1, point p2); |
| point subpt(point p1, point p2); |
| point midpt(point p1, point p2); |
| point mulpt(point p1, int i); |
| point divpt(point p1, int i); |
| rect rmove(rect r, point p); |
| rect raddpt(rect r, point p); |
| rect rsubpt(rect r, point p); |
| rect rmul(rect r, int i); |
| rect rdiv(rect r, int i); |
| rect growr(rect r, int w, int h); |
| rect insetr(rect r, int i); |
| rect rcenter(rect r1, rect r2); |
| int ptinr(point p, rect r); |
| int rinr(rect r1, rect r2); |
| int rxr(rect r1, rect r2); |
| int equalpt(point p1, point p2); |
| int equalr(rect r1, rect r2); |
| rect clipr(rect r1, rect r2); |
| rect rcanon(rect r); |
| |
| /* |
| * Colour functions and constants. |
| */ |
| |
| #define rgb(r,g,b) ((((rgb)r)<<16)|(((rgb)g)<<8)|((rgb)b)) |
| #define getalpha(col) (((col)>>24)&0x00FFUL) |
| #define getred(col) (((col)>>16)&0x00FFUL) |
| #define getgreen(col) (((col)>>8)&0x00FFUL) |
| #define getblue(col) ((col)&0x00FFUL) |
| |
| void setrgb(rgb c); |
| #define setcolor(c) setrgb(c) |
| #define setcolour(c) setrgb(c) |
| |
| /* changed to avoid clashes with w32api 2.0 */ |
| #define gaRed 0x00FF0000UL |
| #define gaGreen 0x0000FF00UL |
| #define gaBlue 0x000000FFUL |
| |
| |
| #define Transparent 0xFFFFFFFFUL |
| |
| #define Black 0x00000000UL |
| #define White 0x00FFFFFFUL |
| #define Yellow 0x00FFFF00UL |
| #define Magenta 0x00FF00FFUL |
| #define Cyan 0x0000FFFFUL |
| |
| #define Grey 0x00808080UL |
| #define Gray 0x00808080UL |
| #define LightGrey 0x00C0C0C0UL |
| #define LightGray 0x00C0C0C0UL |
| #define DarkGrey 0x00404040UL |
| #define DarkGray 0x00404040UL |
| |
| #define DarkBlue 0x00000080UL |
| #define DarkGreen 0x00008000UL |
| #define DarkRed 0x008B0000UL/* changed to match rgb */ |
| #define LightBlue 0x0080C0FFUL |
| #define LightGreen 0x0080FF80UL |
| #define LightRed 0x00FFC0FFUL |
| #define Pink 0x00FFAFAFUL |
| #define Brown 0x00603000UL |
| #define Orange 0x00FF8000UL |
| #define Purple 0x00C000FFUL |
| #define Lime 0x0080FF00UL |
| |
| /* |
| * Context functions for bitmaps, windows, controls. |
| */ |
| |
| void addto(control dest); |
| void drawto(drawing dest); |
| void setlinewidth(int width); |
| |
| /* |
| * Transfer modes for drawing operations, S=source, D=destination. |
| * The modes are arranged so that, for example, (~D)|S == notDorS. |
| */ |
| |
| void setdrawmode(int mode); |
| |
| #define Zeros 0x00 |
| #define DnorS 0x01 |
| #define DandnotS 0x02 |
| #define notS 0x03 |
| #define notDandS 0x04 |
| #define notD 0x05 |
| #define DxorS 0x06 |
| #define DnandS 0x07 |
| #define DandS 0x08 |
| #define DxnorS 0x09 |
| #define D 0x0A |
| #define DornotS 0x0B |
| #define S 0x0C |
| #define notDorS 0x0D |
| #define DorS 0x0E |
| #define Ones 0x0F |
| |
| /* |
| * Drawing functions. |
| */ |
| |
| void bitblt(drawing dest, drawing src, point dp, rect sr, int mode); |
| |
| void scrollrect(point dp, rect sr); |
| void copyrect(drawing src, point dp, rect sr); |
| void texturerect(drawing src, rect r); |
| void invertrect(rect r); |
| |
| rgb getpixel(point p); |
| void setpixel(point p, rgb c); |
| |
| /* |
| * Drawing using the current colour. |
| */ |
| |
| void moveto(point p); |
| void lineto(point p); |
| |
| void drawpoint(point p); |
| void drawline(point p1, point p2); |
| void drawrect(rect r); |
| void fillrect(rect r); |
| void drawarc(rect r, int start_angle, int end_angle); |
| void fillarc(rect r, int start_angle, int end_angle); |
| void drawellipse(rect r); |
| void fillellipse(rect r); |
| void drawroundrect(rect r); |
| void fillroundrect(rect r); |
| void drawpolygon(point *p, int n); |
| void fillpolygon(point *p, int n); |
| |
| /* |
| * Drawing text, selecting fonts. |
| */ |
| |
| font newfont(const char *name, int style, int size); |
| void setfont(font f); |
| |
| int fontwidth(font f); |
| int fontheight(font f); |
| int fontascent(font f); |
| int fontdescent(font f); |
| |
| #define getascent(f) fontascent(f) |
| #define getdescent(f) fontdescent(f) |
| |
| int strwidth(font f, const char *s); |
| point strsize(font f, const char *s); |
| rect strrect(font f, const char *s); |
| |
| int drawstr(point p, const char *str); |
| int textheight(int width, const char *text); |
| const char *drawtext(rect r, int alignment, const char *text); |
| int gprintf(const char *fmt, ...); |
| |
| /* |
| * Text styles and alignments. |
| */ |
| |
| #define Plain 0x0000 |
| #define Bold 0x0001 |
| #define Italic 0x0002 |
| #define BoldItalic 0x0003 |
| #define SansSerif 0x0004 |
| #define FixedWidth 0x0008 |
| #define Wide 0x0010 |
| #define Narrow 0x0020 |
| |
| #define AlignTop 0x0000 |
| #define AlignBottom 0x0100 |
| #define VJustify 0x0200 |
| #define VCenter 0x0400 |
| #define VCentre 0x0400 |
| #define AlignLeft 0x0000 |
| #define AlignRight 0x1000 |
| #define Justify 0x2000 |
| #define Center 0x4000 |
| #define Centre 0x4000 |
| #define AlignCenter 0x4000 |
| #define AlignCentre 0x4000 |
| #define Underline 0x0800 |
| |
| /* |
| * Find the current state of drawing. |
| */ |
| |
| drawing currentdrawing(void); |
| rgb currentrgb(void); |
| #define currentcolor() currentrgb() |
| #define currentcolour() currentrgb() |
| int currentmode(void); |
| point currentpoint(void); |
| int currentlinewidth(void); |
| font currentfont(void); |
| cursor currentcursor(void); |
| |
| /* |
| * Find current keyboard state. |
| */ |
| |
| int getkeystate(void); |
| |
| #define AltKey 0x0001 |
| #define CmdKey 0x0001 |
| #define CtrlKey 0x0002 |
| #define OptionKey 0x0002 |
| #define ShiftKey 0x0004 |
| |
| /* |
| * Bitmaps. |
| */ |
| |
| bitmap newbitmap(int width, int height, int depth); |
| bitmap loadbitmap(const char *name); |
| bitmap imagetobitmap(image img); |
| bitmap createbitmap(int width, int height, int depth, GAbyte *data); |
| void setbitmapdata(bitmap b, GAbyte data[]); |
| void getbitmapdata(bitmap b, GAbyte data[]); |
| void getbitmapdata2(bitmap b, GAbyte **data); |
| |
| /* |
| * Images. |
| */ |
| |
| image newimage(int width, int height, int depth); |
| image copyimage(image img); |
| void delimage(image img); |
| |
| int imagedepth(image img); |
| int imagewidth(image img); |
| int imageheight(image img); |
| |
| void setpixels(image img, GAbyte pixels[]); |
| GAbyte * getpixels(image img); |
| |
| void setpalette(image img, int length, rgb cmap[]); |
| rgb * getpalette(image img); |
| int getpalettesize(image img); |
| |
| image scaleimage(image src, rect dr, rect sr); |
| image convert32to8(image img); |
| image convert8to32(image img); |
| void sortpalette(image img); |
| |
| image loadimage(const char *filename); |
| void saveimage(image img, const char *filename); |
| |
| void drawimage(image img, rect dr, rect sr); |
| void drawmonochrome(image img, rect dr, rect sr); |
| void drawgreyscale(image img, rect dr, rect sr); |
| #define drawgrayscale drawgreyscale |
| void drawdarker(image img, rect dr, rect sr); |
| void drawbrighter(image img, rect dr, rect sr); |
| |
| /* |
| * Windows. |
| */ |
| |
| window newwindow(const char *name, rect r, long flags); |
| void show(window w); |
| void hide(window w); |
| rect GetCurrentWinPos(window obj); |
| |
| /* |
| * Window creation flags. |
| */ |
| |
| #define SimpleWindow 0x00000000L |
| |
| #define Menubar 0x00000010L |
| #define Titlebar 0x00000020L |
| #define Closebox 0x00000040L |
| #define Resize 0x00000080L |
| #define Maximize 0x00000100L |
| #define Minimize 0x00000200L |
| #define HScrollbar 0x00000400L |
| #define VScrollbar 0x00000800L |
| #define CanvasSize 0x00200000L |
| |
| #define Modal 0x00001000L |
| #define Floating 0x00002000L |
| #define Centered 0x00004000L |
| #define Centred 0x00004000L |
| |
| #define Workspace 0x00010000L |
| #define Document 0x00020000L |
| #define ChildWindow 0x00040000L |
| |
| #define TrackMouse 0x00080000L |
| |
| #define UsePalette 0x00100000L |
| #define UseUnicode 0x00200000L |
| |
| #define StandardWindow (Titlebar|Closebox|Resize|Maximize|Minimize) |
| |
| /* |
| * Functions which work for bitmaps, windows and controls. |
| */ |
| |
| int objdepth(objptr obj); |
| rect objrect(objptr obj); |
| int objwidth(objptr obj); |
| int objheight(objptr obj); |
| void delobj(objptr obj); |
| |
| #define getdepth(obj) objdepth((objptr)(obj)) |
| #define getrect(obj) objrect((objptr)(obj)) |
| #define getwidth(obj) objwidth((objptr)(obj)) |
| #define getheight(obj) objheight((objptr)(obj)) |
| #define del(obj) delobj((objptr)(obj)) |
| |
| /* |
| * Setting window and control callback functions. |
| */ |
| |
| void setaction(control c, actionfn fn); |
| void sethit(control c, intfn fn); |
| void setdel(control c, actionfn fn); |
| void setclose(control c, actionfn fn); |
| |
| void setredraw(control c, drawfn fn); |
| void setresize(control c, drawfn fn); |
| |
| void setkeydown(control c, keyfn fn); |
| void setkeyaction(control c, keyfn fn); |
| |
| void setmousedown(control c, mousefn fn); |
| void setmousedrag(control c, mousefn fn); |
| void setmouseup(control c, mousefn fn); |
| void setmousemove(control c, mousefn fn); |
| void setmouserepeat(control c, mousefn fn); |
| |
| void setdrop(control c, dropfn fn); |
| |
| void setonfocus(control c, actionfn fn); |
| |
| void setim(control c, imfn fn); |
| |
| /* |
| * Using windows and controls. |
| */ |
| |
| void clear(control c); |
| void draw(control c); |
| void redraw(control c); |
| void resize(control c, rect r); |
| |
| void show(control c); |
| void hide(control c); |
| int isvisible(control c); |
| |
| void enable(control c); |
| void disable(control c); |
| int isenabled(control c); |
| |
| void check(control c); |
| void uncheck(control c); |
| int ischecked(control c); |
| |
| void highlight(control c); |
| void unhighlight(control c); |
| int ishighlighted(control c); |
| |
| void flashcontrol(control c); |
| void activatecontrol(control c); |
| |
| /* |
| * Changing the state of a control. |
| */ |
| |
| void settext(control c, const char *newtext); |
| char * GA_gettext(control c); |
| #define setname(c,newname) settext(c,newname) |
| #define getname(c) GA_gettext(c) |
| |
| void settextfont(control c, font f); |
| font gettextfont(control c); |
| |
| void setforeground(control c, rgb fg); |
| rgb getforeground(control c); |
| void setbackground(control c, rgb bg); |
| rgb getbackground(control c); |
| |
| void setvalue(control c, int value); |
| int getvalue(control c); |
| void setdata(control c, void *data); |
| void * getdata(control c); |
| |
| window parentwindow(control c); |
| |
| /* |
| * Control states. |
| */ |
| |
| #define GA_Visible 0x0001L |
| #define GA_Enabled 0x0002L |
| #define GA_Checked 0x0004L |
| #define GA_Highlighted 0x0008L |
| #define GA_Armed 0x0010L |
| #define GA_Focus 0x0020L |
| |
| /* |
| * Create buttons, scrollbars, controls etc on the current window. |
| */ |
| |
| control newcontrol(const char *text, rect r); |
| |
| drawing newdrawing(rect r, drawfn fn); |
| drawing newpicture(image img, rect r); |
| |
| button newbutton(const char *text, rect r, actionfn fn); |
| button newimagebutton(image img, rect r, actionfn fn); |
| void setimage(control c, image img); |
| |
| checkbox newcheckbox(const char *text, rect r, actionfn fn); |
| checkbox newimagecheckbox(image img, rect r, actionfn fn); |
| |
| radiobutton newradiobutton(const char *text, rect r, actionfn fn); |
| radiogroup newradiogroup(void); |
| |
| scrollbar newscrollbar(rect r, int max, int pagesize, scrollfn fn); |
| void changescrollbar(scrollbar s, int where, int max, int size); |
| |
| label newlabel(const char *text, rect r, int alignment); |
| field newfield(const char *text, rect r); |
| field newpassword(const char *text, rect r); |
| textbox newtextbox(const char *text, rect r); |
| textbox newtextarea(const char *text, rect r); |
| textbox newrichtextarea(const char *text, rect r); |
| |
| listbox newlistbox(const char *list[], rect r, scrollfn fn, actionfn dble); |
| listbox newdroplist(const char *list[], rect r, scrollfn fn); |
| listbox newdropfield(const char *list[], rect r, scrollfn fn); |
| listbox newmultilist(const char *list[], rect r, scrollfn fn, actionfn dble); |
| int isselected(listbox b, int index); |
| void setlistitem(listbox b, int index); |
| int getlistitem(listbox b); |
| void changelistbox(listbox b, const char *new_list[]); |
| |
| progressbar newprogressbar(rect r, int pmin, int pmax, int incr, int smooth); |
| void setprogressbar(progressbar obj, int n); |
| void stepprogressbar(progressbar obj, int n); |
| void setprogressbarrange(progressbar obj, int pbmin, int pbmax); |
| |
| |
| menubar newmenubar(actionfn adjust_menus); |
| menu newsubmenu(menu parent, const char *name); |
| menu newmenu(const char *name); |
| menuitem newmenuitem(const char *name, int key, menufn fn); |
| |
| /* |
| * Text editing functions. |
| */ |
| |
| void undotext(textbox t); |
| void cuttext(textbox t); |
| void copytext(textbox t); |
| void cleartext(textbox t); |
| void pastetext(textbox t); |
| void inserttext(textbox t, const char *text); |
| void selecttext(textbox t, long start, long end); |
| void textselection(textbox t, long *start, long *end); |
| |
| /* |
| * Dialogs. |
| */ |
| |
| #define YES 1 |
| #define NO -1 |
| #define CANCEL 0 |
| |
| void apperror(const char *errstr); |
| void askok(const char *info); |
| int askokcancel(const char *question); |
| int askyesno(const char *question); |
| int askyesnocancel(const char *question); |
| char * askstring(const char *question, const char *default_string); |
| char * askpassword(const char *question, const char *default_string); |
| char * askfilename(const char *title, const char *default_name); |
| char * askfilenamewithdir(const char *title, const char *default_name, const char *dir); |
| char * askfilesave(const char *title, const char *default_name); |
| char * askUserPass(const char *title); |
| |
| /* |
| * Time functions. |
| */ |
| |
| int settimer(unsigned millisec); |
| void settimerfn(timerfn timeout, void *data); |
| int setmousetimer(unsigned millisec); |
| void delay(unsigned millisec); |
| long currenttime(void); |
| |
| /* |
| * Cursors. |
| */ |
| |
| cursor newcursor(point hotspot, image img); |
| cursor createcursor(point offset, GAbyte *white_mask, GAbyte *black_shape); |
| cursor loadcursor(const char *name); |
| void setcursor(cursor c); |
| |
| /* |
| * Change the drawing state. |
| */ |
| |
| drawstate copydrawstate(void); |
| void setdrawstate(drawstate saved_state); |
| void restoredrawstate(drawstate saved_state); |
| void resetdrawstate(void); |
| |
| /* |
| * Caret-related functions. |
| */ |
| |
| void setcaret(control c, int x, int y, int width, int height); |
| void showcaret(control c, int showing); |
| |
| /* |
| * Library supplied variables. |
| */ |
| |
| #include <R_ext/libextern.h> |
| #undef LibExtern |
| #ifdef GA_DLL_BUILD |
| # define LibExtern extern |
| #else |
| # define LibExtern extern LibImport |
| #endif |
| |
| LibExtern font FixedFont; /* fixed-width font */ |
| LibExtern cursor ArrowCursor; /* normal arrow cursor */ |
| LibExtern cursor BlankCursor; /* invisible cursor */ |
| LibExtern cursor WatchCursor; /* wait for the computer */ |
| LibExtern cursor CaretCursor; /* insert text */ |
| LibExtern cursor TextCursor; /* insert text */ |
| LibExtern cursor HandCursor; /* hand pointer */ |
| LibExtern cursor CrossCursor; /* cross pointer */ |
| LibExtern font SystemFont; /* system font */ |
| LibExtern font Times; /* times roman font (serif) */ |
| LibExtern font Helvetica; /* helvetica font (sans serif) */ |
| LibExtern font Courier; /* courier font (fixed width) */ |
| |
| #undef LibExtern |
| #undef extern |
| |
| #ifdef __cplusplus |
| } |
| #endif /* end normal C declarations */ |
| |
| |
| #ifdef __cplusplus |
| |
| /* begin C++ declarations */ |
| |
| /* |
| * Point and rectangle arithmetic. |
| */ |
| |
| inline point operator + (point p, point p2) {p.x+=p2.x; p.y+=p2.y; return p;} |
| inline point operator - (point p, point p2) {p.x-=p2.x; p.y-=p2.y; return p;} |
| inline point operator += (point& p, point p2) {p.x+=p2.x; p.y+=p2.y; return p;} |
| inline point operator -= (point& p, point p2) {p.x-=p2.x; p.y-=p2.y; return p;} |
| |
| inline rect operator + (rect r, point p) {r.x+=p.x; r.y+=p.y; return r;} |
| inline rect operator - (rect r, point p) {r.x-=p.x; r.y-=p.y; return r;} |
| inline rect operator += (rect& r, point p) {r.x+=p.x; r.y+=p.y; return r;} |
| inline rect operator -= (rect& r, point p) {r.x-=p.x; r.y-=p.y; return r;} |
| |
| inline rect operator + (rect r, int i) {return insetr(r,-i);} |
| inline rect operator - (rect r, int i) {return insetr(r,i);} |
| inline rect operator ++ (rect& r) {return r=insetr(r,-1);} |
| inline rect operator -- (rect& r) {return r=insetr(r,1);} |
| inline rect operator += (rect& r, int i) {return r=insetr(r,-i);} |
| inline rect operator -= (rect& r, int i) {return r=insetr(r,i);} |
| |
| inline int operator == (point p1, point p2) {return equalpt(p1,p2);} |
| inline int operator == (rect r1, rect r2) {return equalr(r1,r2);} |
| inline int operator != (point p1, point p2) {return !equalpt(p1,p2);} |
| inline int operator != (rect r1, rect r2) {return !equalr(r1,r2);} |
| |
| #endif /* end C++ declarations */ |
| |
| #endif /* Common cross-platform graphics library. */ |