1 /*	SCCS Id: @(#)Window.c	3.3	93/02/02	*/
2 /* Copyright (c) Dean Luick, 1992				  */
3 /* NetHack may be freely redistributed.  See license for details. */
4 
5 /*
6  * Data structures and support routines for the Window widget.  This is a
7  * drawing canvas with 16 colors and one font.
8  */
9 
10 #ifndef SYSV
11 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
12 #endif
13 
14 #ifdef MSDOS			/* from compiler */
15 #define SHORT_FILENAMES
16 #endif
17 
18 #ifdef SHORT_FILENAMES
19 #include <X11/IntrinsP.h>
20 #else
21 #include <X11/IntrinsicP.h>
22 #endif
23 #include <X11/StringDefs.h>
24 
25 #ifdef PRESERVE_NO_SYSV
26 # ifdef SYSV
27 #  undef SYSV
28 # endif
29 # undef PRESERVE_NO_SYSV
30 #endif
31 
32 #include "xwindowp.h"
33 
34 #include "config.h"
35 
36 static XtResource resources[] = {
37 #define offset(field) XtOffset(WindowWidget, window.field)
38     /* {name, class, type, size, offset, default_type, default_addr}, */
39     { XtNrows, XtCRows, XtRDimension, sizeof(Dimension),
40 	  offset(rows), XtRImmediate, (XtPointer) 21},
41     { XtNcolumns, XtCColumns, XtRDimension, sizeof(Dimension),
42 	  offset(columns), XtRImmediate, (XtPointer) 80},
43     { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
44 	  offset(foreground), XtRString, XtDefaultForeground },
45 
46     { XtNblack, XtCColor, XtRPixel, sizeof(Pixel),
47 	  offset(black), XtRString, "black"},
48     { XtNred, XtCColor, XtRPixel, sizeof(Pixel),
49 	  offset(red), XtRString, "red" },
50     { XtNgreen, XtCColor, XtRPixel, sizeof(Pixel),
51 	  offset(green), XtRString, "pale green" },
52     { XtNbrown, XtCColor, XtRPixel, sizeof(Pixel),
53 	  offset(brown), XtRString, "brown" },
54     { XtNblue, XtCColor, XtRPixel, sizeof(Pixel),
55 	  offset(blue), XtRString, "blue" },
56     { XtNmagenta, XtCColor, XtRPixel, sizeof(Pixel),
57 	  offset(magenta), XtRString, "magenta" },
58     { XtNcyan, XtCColor, XtRPixel, sizeof(Pixel),
59 	  offset(cyan), XtRString, "light cyan" },
60     { XtNgray, XtCColor, XtRPixel, sizeof(Pixel),
61 	  offset(gray), XtRString, "gray" },
62     { XtNorange, XtCColor, XtRPixel, sizeof(Pixel),
63 	  offset(orange), XtRString, "orange" },
64     { XtNbright_green, XtCColor, XtRPixel, sizeof(Pixel),
65 	  offset(bright_green), XtRString, "green" },
66     { XtNyellow, XtCColor, XtRPixel, sizeof(Pixel),
67 	  offset(yellow), XtRString, "yellow" },
68     { XtNbright_blue, XtCColor, XtRPixel, sizeof(Pixel),
69 	  offset(bright_blue), XtRString, "royal blue" },
70     { XtNbright_magenta, XtCColor, XtRPixel, sizeof(Pixel),
71 	  offset(bright_magenta), XtRString, "violet" },
72     { XtNbright_cyan, XtCColor, XtRPixel, sizeof(Pixel),
73 	  offset(bright_cyan), XtRString, "cyan" },
74     { XtNwhite, XtCColor, XtRPixel, sizeof(Pixel),
75 	  offset(white), XtRString, "white" },
76 
77     { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
78 	  offset(font), XtRString, XtDefaultFont },
79     { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
80 	  offset(expose_callback), XtRCallback, (char *)0 },
81     { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
82 	  offset(input_callback), XtRCallback, (char *)0 },
83     { XtNresizeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
84 	  offset(resize_callback), XtRCallback, (char *)0 },
85 #undef offset
86 };
87 
88 /* ARGSUSED */
no_op(w,event,params,num_params)89 static void no_op(w, event, params, num_params)
90     Widget   w;			/* unused */
91     XEvent   *event;		/* unused */
92     String   *params;		/* unused */
93     Cardinal *num_params;	/* unused */
94 {
95 }
96 
97 static XtActionsRec actions[] =
98 {
99     {"no-op",	no_op},
100 };
101 
102 static char translations[] =
103 "<BtnDown>:     input() \
104 ";
105 
106 /* ARGSUSED */
Redisplay(w,event,region)107 static void Redisplay(w, event, region)
108     Widget w;
109     XEvent *event;
110     Region region;	/* unused */
111 {
112     /* This isn't correct - we need to call the callback with region. */
113     XtCallCallbacks(w, XtNexposeCallback, (caddr_t) event);
114 }
115 
116 /* ARGSUSED */
Resize(w)117 static void Resize(w)
118     Widget w;
119 {
120     XtCallCallbacks(w, XtNresizeCallback, (caddr_t) 0);
121 }
122 
123 
124 WindowClassRec windowClassRec = {
125   { /* core fields */
126     /* superclass		*/	(WidgetClass) &widgetClassRec,
127     /* class_name		*/	"Window",
128     /* widget_size		*/	sizeof(WindowRec),
129     /* class_initialize		*/	0,
130     /* class_part_initialize	*/	0,
131     /* class_inited		*/	FALSE,
132     /* initialize		*/	0,
133     /* initialize_hook		*/	0,
134     /* realize			*/	XtInheritRealize,
135     /* actions			*/	actions,
136     /* num_actions		*/	XtNumber(actions),
137     /* resources		*/	resources,
138     /* num_resources		*/	XtNumber(resources),
139     /* xrm_class		*/	NULLQUARK,
140     /* compress_motion		*/	TRUE,
141     /* compress_exposure	*/	TRUE,
142     /* compress_enterleave	*/	TRUE,
143     /* visible_interest		*/	FALSE,
144     /* destroy			*/	0,
145     /* resize			*/	Resize,
146     /* expose			*/	Redisplay,
147     /* set_values		*/	0,
148     /* set_values_hook		*/	0,
149     /* set_values_almost	*/	XtInheritSetValuesAlmost,
150     /* get_values_hook		*/	0,
151     /* accept_focus		*/	0,
152     /* version			*/	XtVersion,
153     /* callback_private		*/	0,
154     /* tm_table			*/	translations,
155     /* query_geometry		*/	XtInheritQueryGeometry,
156     /* display_accelerator	*/	XtInheritDisplayAccelerator,
157     /* extension		*/	0
158   },
159   { /* window fields */
160     /* empty			*/	0
161   }
162 };
163 
164 WidgetClass windowWidgetClass = (WidgetClass)&windowClassRec;
165 
166 Font
WindowFont(w)167 WindowFont(w) Widget w; { return ((WindowWidget)w)->window.font->fid; }
168 
169 XFontStruct *
WindowFontStruct(w)170 WindowFontStruct(w) Widget w; { return ((WindowWidget)w)->window.font; }
171