blob: ab784468446d015c3ab68896b43c21df87b28783 [file] [log] [blame]
/*
* 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. */