/* * 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-24 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 #include #ifndef Pi #define Pi 3.14159265359 #endif /* * Types. */ typedef unsigned char GAbyte; /* R modification for public code: disable the gui_obj below, but instead use an incomplete declaration of objinfo (see internal.h) in the public interface. This avoids running into LTO-detected type mismatch e.g. on global variable Rconsole in rui.h/rui.c. #ifndef objptr typedef struct { int kind; } gui_obj; typedef gui_obj * objptr; #endif */ typedef struct objinfo objinfo; typedef objinfo *objptr; /* end of R modification */ 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 clickbutton GA_clickbutton #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 GA_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 #define askfilenameW GA_askfilenameW #define askfilenamesW GA_askfilenamesW #define askfilesaveW GA_askfilesaveW #define gcopyalpha2 GA_gcopyalpha2 #define gdrawimage GA_gdrawimage #define gfillpolypolygon GA_gfillpolypolygon #define gmaskimage GAI_gmaskimage #define gstrwidth1 GA_gstrwidth1 #define setuserfilterW GA_setuserfilterW #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 GA_D 0x0A #define DornotS 0x0B #define GA_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 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 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); void clickbutton(window w, button b); /* * 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 #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. */