Rev 82785 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
/** 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-23 The R Core Team**//** Common cross-platform graphics routines library.*/#ifndef _GRAPHAPP_H#define _GRAPHAPP_H 240/** Assume C declarations for C++*/#ifdef __cplusplusextern "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 objptrtypedef struct { int kind; } gui_obj;typedef gui_obj * objptr;#endiftypedef 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 default_font_charset GAI_default_font_charset#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_next_valid_sibling GAI_find_next_valid_sibling#define find_prev_valid_sibling GAI_find_prev_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 edit_control_proc GAI_edit_control_proc#define edit_control_procedure GAI_edit_control_procedure#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 drawgreyscalevoid 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 0x00400000L#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 SetUpCaret 0x00400000L#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 0void 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#endifLibExtern 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. */