summaryrefslogtreecommitdiff
path: root/src/h/graphics.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/h/graphics.h')
-rw-r--r--src/h/graphics.h447
1 files changed, 447 insertions, 0 deletions
diff --git a/src/h/graphics.h b/src/h/graphics.h
new file mode 100644
index 0000000..fa56f79
--- /dev/null
+++ b/src/h/graphics.h
@@ -0,0 +1,447 @@
+/*
+ * graphics.h - macros and types used in Icon's graphics interface.
+ */
+
+#ifdef XWindows
+ #include "../h/xwin.h"
+#endif /* XWindows */
+
+#ifdef WinGraphics
+ #include "../h/mswin.h"
+#endif /* WinGraphics */
+
+#ifndef MAXXOBJS
+ #define MAXXOBJS 256
+#endif /* MAXXOBJS */
+
+#ifndef MAXCOLORNAME
+ #define MAXCOLORNAME 40
+#endif /* MAXCOLORNAME */
+
+#ifndef MAXFONTWORD
+ #define MAXFONTWORD 40
+#endif /* MAXFONTWORD */
+
+#define POLLSLEEP 20 /* milliseconds sleep while awaiting event */
+
+#define DEFAULTFONTSIZE 14
+
+#define FONTATT_SPACING 0x01000000
+#define FONTFLAG_MONO 0x00000001
+#define FONTFLAG_PROPORTIONAL 0x00000002
+
+#define FONTATT_SERIF 0x02000000
+#define FONTFLAG_SANS 0x00000004
+#define FONTFLAG_SERIF 0x00000008
+
+#define FONTATT_SLANT 0x04000000
+#define FONTFLAG_ROMAN 0x00000010
+#define FONTFLAG_ITALIC 0x00000020
+#define FONTFLAG_OBLIQUE 0x00000040
+
+#define FONTATT_WEIGHT 0x08000000
+#define FONTFLAG_LIGHT 0x00000100
+#define FONTFLAG_MEDIUM 0x00000200
+#define FONTFLAG_DEMI 0x00000400
+#define FONTFLAG_BOLD 0x00000800
+
+#define FONTATT_WIDTH 0x10000000
+#define FONTFLAG_CONDENSED 0x00001000
+#define FONTFLAG_NARROW 0x00002000
+#define FONTFLAG_NORMAL 0x00004000
+#define FONTFLAG_WIDE 0x00008000
+#define FONTFLAG_EXTENDED 0x00010000
+
+/*
+ * EVENT HANDLING
+ *
+ * Each window keeps an associated queue of events waiting to be
+ * processed. The queue consists of <eventcode,x,y> triples,
+ * where eventcodes are strings for normal keyboard events, and
+ * integers for mouse and special keystroke events.
+ *
+ * The main queue is an icon list. In addition, there is a queue of
+ * old keystrokes maintained for cooked mode operations, maintained
+ * in a little circular array of chars.
+ */
+#define EQ_MOD_CONTROL (1L<<16L)
+#define EQ_MOD_META (1L<<17L)
+#define EQ_MOD_SHIFT (1L<<18L)
+
+#define EVQUESUB(w,i) *evquesub(w,i)
+#define EQUEUELEN 256
+
+/*
+ * mode bits for the Icon window context (as opposed to X context)
+ */
+
+#define ISINITIAL(w) ((w)->window->bits & 1)
+#define ISINITIALW(ws) ((ws)->bits & 1)
+#define ISCURSORON(w) ((w)->window->bits & 2)
+#define ISCURSORONW(ws) ((ws->bits) & 2)
+#define ISMAPPED(w) ((w)->window->bits & 4)
+#define ISREVERSE(w) ((w)->context->bits & 8)
+#define ISXORREVERSE(w) ((w)->context->bits & 16)
+#define ISXORREVERSEW(w) ((w)->bits & 16)
+#define ISCLOSED(w) ((w)->window->bits & 64)
+#define ISRESIZABLE(w) ((w)->window->bits & 128)
+#define ISEXPOSED(w) ((w)->window->bits & 256)
+#define ISCEOLON(w) ((w)->window->bits & 512)
+#define ISECHOON(w) ((w)->window->bits & 1024)
+
+#define SETCURSORON(w) ((w)->window->bits |= 2)
+/* 4 is available */
+#define SETMAPPED(w) ((w)->window->bits |= 4)
+#define SETREVERSE(w) ((w)->context->bits |= 8)
+#define SETXORREVERSE(w) ((w)->context->bits |= 16)
+#define SETCLOSED(w) ((w)->window->bits |= 64)
+#define SETRESIZABLE(w) ((w)->window->bits |= 128)
+#define SETEXPOSED(w) ((w)->window->bits |= 256)
+#define SETCEOLON(w) ((w)->window->bits |= 512)
+#define SETECHOON(w) ((w)->window->bits |= 1024)
+
+#define CLRCURSORON(w) ((w)->window->bits &= ~2)
+#define CLRMAPPED(w) ((w)->window->bits &= ~4)
+#define CLRREVERSE(w) ((w)->context->bits &= ~8)
+#define CLRXORREVERSE(w) ((w)->context->bits &= ~16)
+#define CLRCLOSED(w) ((w)->window->bits &= ~64)
+#define CLRRESIZABLE(w) ((w)->window->bits &= ~128)
+#define CLREXPOSED(w) ((w)->window->bits &= ~256)
+#define CLRCEOLON(w) ((w)->window->bits &= ~512)
+#define CLRECHOON(w) ((w)->window->bits &= ~1024)
+
+#ifdef XWindows
+ #define ISZOMBIE(w) ((w)->window->bits & 1)
+ #define SETZOMBIE(w) ((w)->window->bits |= 1)
+ #define CLRZOMBIE(w) ((w)->window->bits &= ~1)
+#endif /* XWindows */
+
+#ifdef WinGraphics
+ #define ISTOBEHIDDEN(ws) ((ws)->bits & 4096)
+ #define SETTOBEHIDDEN(ws) ((ws)->bits |= 4096)
+ #define CLRTOBEHIDDEN(ws) ((ws)->bits &= ~4096)
+#endif /* WinGraphics */
+
+/*
+ * Window Resources
+ * Icon "Resources" are a layer on top of the window system resources,
+ * provided in order to facilitate resource sharing and minimize the
+ * number of calls to the window system. Resources are reference counted.
+ * These data structures are simple sets of pointers
+ * into internal window system structures.
+ */
+
+/*
+ * Fonts are allocated within displays.
+ */
+typedef struct _wfont {
+ int refcount;
+ int serial; /* serial # */
+ struct _wfont *previous, *next;
+ char *name; /* name for WAttrib and fontsearch */
+
+ #ifdef XWindows
+ int height; /* font height */
+ XFontStruct *fsp; /* X font pointer */
+ #endif /* XWindows */
+
+ #ifdef WinGraphics
+ HFONT font;
+ LONG ascent;
+ LONG descent;
+ LONG charwidth;
+ LONG height;
+ #endif /* WinGraphics */
+
+ } wfont, *wfp;
+
+/*
+ * These structures and definitions are used for colors and images.
+ */
+typedef struct {
+ long red, green, blue; /* color components, linear 0 - 65535*/
+ } LinearColor;
+
+struct palentry { /* entry for one palette member */
+ LinearColor clr; /* RGB value of color */
+ char used; /* nonzero if char is used */
+ char valid; /* nonzero if entry is valid & opaque */
+ char transpt; /* nonzero if char is transparent */
+ };
+
+struct imgdata { /* image loaded from a file */
+ int width, height; /* image dimensions */
+ struct palentry *paltbl; /* pointer to palette table */
+ unsigned char *data; /* pointer to image data */
+ };
+
+struct imgmem {
+ int x, y, width, height;
+
+ #ifdef XWindows
+ XImage *im;
+ #endif /* XWindows */
+
+ #ifdef WinGraphics
+ COLORREF *crp;
+ #endif /* WinGraphics */
+ };
+
+#define TCH1 '~' /* usual transparent character */
+#define TCH2 0377 /* alternate transparent character */
+#define PCH1 ' ' /* punctuation character */
+#define PCH2 ',' /* punctuation character */
+
+#define GIFMAX 256 /* maximum colors in a GIF file */
+
+#ifdef XWindows
+/*
+ * Displays are maintained in a global list in rwinrsc.r.
+ */
+typedef struct _wdisplay {
+ int refcount;
+ int serial; /* serial # */
+ char name[MAXDISPLAYNAME];
+ Display * display;
+ Visual * visual;
+ GC icongc;
+ Colormap cmap;
+ double gamma;
+ int screen;
+ int numFonts;
+ wfp fonts;
+ int numColors; /* number of allocated color structs */
+ int cpSize; /* max number of slots before realloc */
+ struct wcolor **colrptrs; /* array of pointers to those colors */
+ Cursor cursors[NUMCURSORSYMS];
+ struct _wdisplay *previous, *next;
+ } *wdp;
+#endif /* XWindows */
+
+/*
+ * "Context" comprises the graphics context, and the font (i.e. text context).
+ * Foreground and background colors (pointers into the display color table)
+ * are stored here to reduce the number of window system queries.
+ * Contexts are allocated out of a global array in rwinrsrc.c.
+ */
+typedef struct _wcontext {
+ int refcount;
+ int serial; /* serial # */
+ struct _wcontext *previous, *next;
+ int clipx, clipy, clipw, cliph;
+ char *patternname;
+ wfp font;
+ int dx, dy;
+ int fillstyle;
+ int drawop;
+ double gamma; /* gamma correction value */
+ int bits; /* context bits */
+
+ #ifdef XWindows
+ wdp display;
+ GC gc; /* X graphics context */
+ wclrp fg, bg;
+ int linestyle;
+ int linewidth;
+ int leading; /* inter-line leading */
+ #endif /* XWindows */
+
+ #ifdef WinGraphics
+ LOGPEN pen;
+ LOGPEN bgpen;
+ LOGBRUSH brush;
+ LOGBRUSH bgbrush;
+ HRGN cliprgn;
+ HBITMAP pattern;
+ SysColor fg, bg;
+ char *fgname, *bgname;
+ int leading, bkmode;
+ #endif /* WinGraphics*/
+
+ } wcontext, *wcp;
+
+/*
+ * Native facilities include the following child controls (windows) that
+ * persist on the canvas and intercept various events.
+ */
+#ifdef WinGraphics
+ #define CHILD_BUTTON 0
+ #define CHILD_SCROLLBAR 1
+ #define CHILD_EDIT 2
+ typedef struct childcontrol {
+ int type; /* what kind of control? */
+ HWND win; /* child window handle */
+ HFONT font;
+ char *id; /* child window string id */
+ } childcontrol;
+#endif /* WinGraphics */
+
+/*
+ * "Window state" includes the actual X window and references to a large
+ * number of resources allocated on a per-window basis. Windows are
+ * allocated out of a global array in rwinrsrc.c. Windows remember the
+ * first WMAXCOLORS colors they allocate, and deallocate them on clearscreen.
+ */
+typedef struct _wstate {
+ int refcount; /* reference count */
+ int serial; /* serial # */
+ struct _wstate *previous, *next;
+ int pixheight; /* backing pixmap height, in pixels */
+ int pixwidth; /* pixmap width, in pixels */
+ char *windowlabel; /* window label */
+ char *iconimage; /* icon pixmap file name */
+ char *iconlabel; /* icon label */
+ struct imgdata initimage; /* initial image data */
+ struct imgdata initicon; /* initial icon image data */
+ int y, x; /* current cursor location, in pixels*/
+ int pointery, pointerx; /* current mouse location, in pixels */
+ int posy, posx; /* desired upper lefthand corner */
+ unsigned int height; /* window height, in pixels */
+ unsigned int width; /* window width, in pixels */
+ int bits; /* window bits */
+ int theCursor; /* index into cursor table */
+ word timestamp; /* last event time stamp */
+ char eventQueue[EQUEUELEN]; /* queue of cooked-mode keystrokes */
+ int eQfront, eQback;
+ char *cursorname;
+ struct descrip filep, listp; /* icon values for this window */
+
+ #ifdef XWindows
+ wdp display;
+ Window win; /* X window */
+ Pixmap pix; /* current screen state */
+ Pixmap initialPix; /* an initial image to display */
+ Window iconwin; /* icon window */
+ Pixmap iconpix; /* icon pixmap */
+ int normalx, normaly; /* pos to remember when maximized */
+ int normalw, normalh; /* size to remember when maximized */
+ int numColors; /* allocated color info */
+ short *theColors; /* indices into display color table */
+ int numiColors; /* allocated color info for the icon */
+ short *iconColors; /* indices into display color table */
+ int iconic; /* window state; icon, window or root*/
+ int iconx, icony; /* location of icon */
+ unsigned int iconw, iconh; /* width and height of icon */
+ long wmhintflags; /* window manager hints */
+ #endif /* XWindows */
+
+ #ifdef WinGraphics
+ HWND win; /* client window */
+ HWND iconwin; /* client window when iconic */
+ HBITMAP pix; /* backing bitmap */
+ HBITMAP iconpix; /* backing bitmap */
+ HBITMAP initialPix; /* backing bitmap */
+ HBITMAP theOldPix;
+ int hasCaret;
+ HCURSOR curcursor;
+ HCURSOR savedcursor;
+ HMENU menuBar;
+ int nmMapElems;
+ char ** menuMap;
+ HWND focusChild;
+ int nChildren;
+ childcontrol *child;
+ #endif /* WinGraphics */
+
+ } wstate, *wsp;
+
+/*
+ * Icon window file variables are actually pointers to "bindings"
+ * of a window and a context. They are allocated out of a global
+ * array in rwinrsrc.c. There is one binding per Icon window value.
+ */
+typedef struct _wbinding {
+ int refcount;
+ int serial;
+ struct _wbinding *previous, *next;
+ wcp context;
+ wsp window;
+ } wbinding, *wbp;
+
+/*
+ * Table entry for string <-> integer mapping.
+ */
+typedef struct {
+ char *s;
+ int i;
+ } stringint, *siptr;
+
+
+/*
+ * Gamma Correction value to compensate for nonlinear monitor color response
+ */
+#ifndef GammaCorrection
+ #define GammaCorrection 2.5
+#endif /* GammaCorrection */
+
+/*
+ * Attributes
+ */
+#define A_ASCENT 1
+#define A_BG 2
+#define A_CANVAS 3
+#define A_CEOL 4
+#define A_CLIPH 5
+#define A_CLIPW 6
+#define A_CLIPX 7
+#define A_CLIPY 8
+#define A_COL 9
+#define A_COLUMNS 10
+#define A_CURSOR 11
+#define A_DEPTH 12
+#define A_DESCENT 13
+#define A_DISPLAY 14
+#define A_DISPLAYHEIGHT 15
+#define A_DISPLAYWIDTH 16
+#define A_DRAWOP 17
+#define A_DX 18
+#define A_DY 19
+#define A_ECHO 20
+#define A_FG 21
+#define A_FHEIGHT 22
+#define A_FILLSTYLE 23
+#define A_FONT 24
+#define A_FWIDTH 25
+#define A_GAMMA 26
+#define A_GEOMETRY 27
+#define A_HEIGHT 28
+#define A_ICONIC 29
+#define A_ICONIMAGE 30
+#define A_ICONLABEL 31
+#define A_ICONPOS 32
+#define A_IMAGE 33
+#define A_LABEL 34
+#define A_LEADING 35
+#define A_LINES 36
+#define A_LINESTYLE 37
+#define A_LINEWIDTH 38
+#define A_PATTERN 39
+#define A_POINTERCOL 40
+#define A_POINTERROW 41
+#define A_POINTERX 42
+#define A_POINTERY 43
+#define A_POINTER 44
+#define A_POS 45
+#define A_POSX 46
+#define A_POSY 47
+#define A_RESIZE 48
+#define A_REVERSE 49
+#define A_ROW 50
+#define A_ROWS 51
+#define A_SIZE 52
+#define A_VISUAL 53
+#define A_WIDTH 54
+#define A_WINDOWLABEL 55
+#define A_X 56
+#define A_Y 57
+
+#define NUMATTRIBS 57
+
+/*
+ * flags for ConsoleFlags
+ */
+/* I/O redirection flags */
+#define StdOutRedirect 1
+#define StdErrRedirect 2
+#define StdInRedirect 4
+#define OutputToBuf 8