1 /* Generated by wbuild from "Label.w"
2 ** (generator version $Revision: 2.5 $ of $Date: 94/07/29 15:31:49 $)
3 */
4 #include <X11/IntrinsicP.h>
5 #include <X11/StringDefs.h>
6 #line 441 "Label.w"
7 #include "stip4.bm"
8 #line 443 "Label.w"
9 #include <stdio.h>
10 #line 444 "Label.w"
11 #include <Xfwf/TabString.h>
12 #include <Xfwf/LabelP.h>
13 static void _resolve_inheritance(
14 #if NeedFunctionPrototypes
15 WidgetClass
16 #endif
17 );
18 #line 154 "Label.w"
19 static void set_label(
20 #if NeedFunctionPrototypes
21 Widget,String
22 #endif
23 );
24 #line 178 "Label.w"
25 static Boolean  set_values(
26 #if NeedFunctionPrototypes
27 Widget ,Widget ,Widget,ArgList ,Cardinal *
28 #endif
29 );
30 #line 241 "Label.w"
31 static void initialize(
32 #if NeedFunctionPrototypes
33 Widget ,Widget,ArgList ,Cardinal *
34 #endif
35 );
36 #line 308 "Label.w"
37 static void expose(
38 #if NeedFunctionPrototypes
39 Widget,XEvent *,Region
40 #endif
41 );
42 #line 365 "Label.w"
43 static void make_gc(
44 #if NeedFunctionPrototypes
45 Widget
46 #endif
47 );
48 #line 396 "Label.w"
49 static void make_graygc(
50 #if NeedFunctionPrototypes
51 Widget
52 #endif
53 );
54 #line 415 "Label.w"
55 static void count_lines(
56 #if NeedFunctionPrototypes
57 Widget
58 #endif
59 );
60 #line 365 "Label.w"
make_gc(self)61 /*ARGSUSED*/static void make_gc(self)Widget self;
62 {
63     XtGCMask mask;
64     XGCValues values;
65 
66     if (((XfwfLabelWidget)self)->xfwfLabel.gc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.gc);
67     values.background = ((XfwfLabelWidget)self)->core.background_pixel;
68     values.foreground = ((XfwfLabelWidget)self)->xfwfLabel.foreground;
69     values.font = ((XfwfLabelWidget)self)->xfwfLabel.font->fid;
70     mask = GCFont | GCBackground | GCForeground;
71     ((XfwfLabelWidget)self)->xfwfLabel.gc = XtGetGC(self, mask, &values);
72 
73     if (((XfwfLabelWidget)self)->xfwfLabel.rv_gc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.rv_gc);
74     values.foreground = ((XfwfLabelWidget)self)->core.background_pixel;
75     values.background = ((XfwfLabelWidget)self)->xfwfLabel.foreground;
76     values.font = ((XfwfLabelWidget)self)->xfwfLabel.font->fid;
77     mask = GCFont | GCBackground | GCForeground;
78     ((XfwfLabelWidget)self)->xfwfLabel.rv_gc = XtGetGC(self, mask, &values);
79 
80     if (((XfwfLabelWidget)self)->xfwfLabel.hl_gc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.hl_gc);
81     values.background = ((XfwfLabelWidget)self)->core.background_pixel;
82     values.foreground = ((XfwfLabelWidget)self)->xfwfLabel.hlForeground;
83     values.font = ((XfwfLabelWidget)self)->xfwfLabel.font->fid;
84     values.function = GXcopy;
85     ((XfwfLabelWidget)self)->xfwfLabel.hl_gc = XtGetGC(self, mask, &values);
86 }
87 #line 396 "Label.w"
make_graygc(self)88 /*ARGSUSED*/static void make_graygc(self)Widget self;
89 {
90     XtGCMask mask;
91     XGCValues values;
92 
93     if (((XfwfLabelWidget)self)->xfwfLabel.graygc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.graygc);
94     values.foreground = ((XfwfLabelWidget)self)->core.background_pixel;
95     values.stipple =
96 	XCreateBitmapFromData(XtDisplay(self),
97 			      RootWindowOfScreen(XtScreen(self)),
98 			      stip4_bits, stip4_width, stip4_height);
99     values.fill_style = FillStippled;
100     mask = GCForeground | GCStipple | GCFillStyle;
101     ((XfwfLabelWidget)self)->xfwfLabel.graygc = XtGetGC(self, mask, &values);
102 }
103 #line 415 "Label.w"
count_lines(self)104 /*ARGSUSED*/static void count_lines(self)Widget self;
105 {
106     String p, s;
107     int w;
108 
109     ((XfwfLabelWidget)self)->xfwfLabel.nlines = 0;
110     ((XfwfLabelWidget)self)->xfwfLabel.label_width = 0;
111     if (((XfwfLabelWidget)self)->xfwfLabel.label) {
112 	for (p = ((XfwfLabelWidget)self)->xfwfLabel.label, ((XfwfLabelWidget)self)->xfwfLabel.nlines = 1, s = ((XfwfLabelWidget)self)->xfwfLabel.label; *s; s++) {
113 	    if (*s == '\n') {
114 		((XfwfLabelWidget)self)->xfwfLabel.nlines++;
115 		w = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, p, s - p, ((XfwfLabelWidget)self)->xfwfLabel.tabs);
116 		p = s + 1;
117 		if (w > ((XfwfLabelWidget)self)->xfwfLabel.label_width) ((XfwfLabelWidget)self)->xfwfLabel.label_width = w;
118 	    }
119 	}
120 	w = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, p, s - p, ((XfwfLabelWidget)self)->xfwfLabel.tabs);
121 	if (w > ((XfwfLabelWidget)self)->xfwfLabel.label_width) ((XfwfLabelWidget)self)->xfwfLabel.label_width = w;
122     }
123     ((XfwfLabelWidget)self)->xfwfLabel.label_height = ((XfwfLabelWidget)self)->xfwfLabel.nlines * (((XfwfLabelWidget)self)->xfwfLabel.font->ascent + ((XfwfLabelWidget)self)->xfwfLabel.font->descent);
124     ((XfwfLabelWidget)self)->xfwfLabel.label_width += ((XfwfLabelWidget)self)->xfwfLabel.leftMargin + ((XfwfLabelWidget)self)->xfwfLabel.rightMargin;
125     ((XfwfLabelWidget)self)->xfwfLabel.label_height += ((XfwfLabelWidget)self)->xfwfLabel.topMargin + ((XfwfLabelWidget)self)->xfwfLabel.bottomMargin;
126 }
127 
128 static XtResource resources[] = {
129 #line 26 "Label.w"
130 {XtNlabel,XtCLabel,XtRString,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.label),XtOffsetOf(XfwfLabelRec,xfwfLabel.label),XtRImmediate,(XtPointer)NULL },
131 #line 31 "Label.w"
132 {XtNtablist,XtCTablist,XtRString,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.tablist),XtOffsetOf(XfwfLabelRec,xfwfLabel.tablist),XtRImmediate,(XtPointer)NULL },
133 #line 35 "Label.w"
134 {XtNfont,XtCFont,XtRFontStruct,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.font),XtOffsetOf(XfwfLabelRec,xfwfLabel.font),XtRString,(XtPointer)XtDefaultFont },
135 #line 40 "Label.w"
136 {XtNforeground,XtCForeground,XtRPixel,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.foreground),XtOffsetOf(XfwfLabelRec,xfwfLabel.foreground),XtRString,(XtPointer)XtDefaultForeground },
137 #line 41 "Label.w"
138 {XtNhlForeground,XtCHlForeground,XtRPixel,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.hlForeground),XtOffsetOf(XfwfLabelRec,xfwfLabel.hlForeground),XtRString,(XtPointer)XtDefaultForeground },
139 #line 53 "Label.w"
140 {XtNalignment,XtCAlignment,XtRAlignment,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.alignment),XtOffsetOf(XfwfLabelRec,xfwfLabel.alignment),XtRImmediate,(XtPointer)0 },
141 #line 58 "Label.w"
142 {XtNtopMargin,XtCTopMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.topMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.topMargin),XtRImmediate,(XtPointer)2 },
143 #line 63 "Label.w"
144 {XtNbottomMargin,XtCBottomMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.bottomMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.bottomMargin),XtRImmediate,(XtPointer)2 },
145 #line 70 "Label.w"
146 {XtNleftMargin,XtCLeftMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.leftMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.leftMargin),XtRImmediate,(XtPointer)2 },
147 #line 75 "Label.w"
148 {XtNrightMargin,XtCRightMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.rightMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.rightMargin),XtRImmediate,(XtPointer)2 },
149 #line 82 "Label.w"
150 {XtNshrinkToFit,XtCShrinkToFit,XtRBoolean,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.shrinkToFit),XtOffsetOf(XfwfLabelRec,xfwfLabel.shrinkToFit),XtRImmediate,(XtPointer)False },
151 #line 88 "Label.w"
152 {XtNrvStart,XtCRvStart,XtRInt,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.rvStart),XtOffsetOf(XfwfLabelRec,xfwfLabel.rvStart),XtRImmediate,(XtPointer)0 },
153 #line 93 "Label.w"
154 {XtNrvLength,XtCRvLength,XtRInt,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.rvLength),XtOffsetOf(XfwfLabelRec,xfwfLabel.rvLength),XtRImmediate,(XtPointer)0 },
155 #line 98 "Label.w"
156 {XtNtraversalOn,XtCTraversalOn,XtRBoolean,sizeof(((XfwfLabelRec*)NULL)->xfwfCommon.traversalOn),XtOffsetOf(XfwfLabelRec,xfwfCommon.traversalOn),XtRImmediate,(XtPointer)False },
157 #line 103 "Label.w"
158 {XtNhlStart,XtCHlStart,XtRInt,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.hlStart),XtOffsetOf(XfwfLabelRec,xfwfLabel.hlStart),XtRImmediate,(XtPointer)0 },
159 #line 104 "Label.w"
160 {XtNhlLength,XtCHlLength,XtRInt,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.hlLength),XtOffsetOf(XfwfLabelRec,xfwfLabel.hlLength),XtRImmediate,(XtPointer)0 },
161 };
162 
163 XfwfLabelClassRec xfwfLabelClassRec = {
164 { /* core_class part */
165 (WidgetClass) &xfwfBoardClassRec,
166 "XfwfLabel",
167 sizeof(XfwfLabelRec),
168 NULL,
169 _resolve_inheritance,
170 FALSE,
171 initialize,
172 NULL,
173 XtInheritRealize,
174 NULL,
175 0,
176 resources,
177 16,
178 NULLQUARK,
179 True ,
180 XtExposeCompressMultiple ,
181 True ,
182 False ,
183 NULL,
184 XtInheritResize,
185 expose,
186 set_values,
187 NULL,
188 XtInheritSetValuesAlmost,
189 NULL,
190 XtInheritAcceptFocus,
191 XtVersion,
192 NULL,
193 NULL,
194 XtInheritQueryGeometry,
195 XtInheritDisplayAccelerator,
196 NULL
197 },
198 { /* composite_class part */
199 XtInheritGeometryManager,
200 XtInheritChangeManaged,
201 XtInheritInsertChild,
202 XtInheritDeleteChild,
203 NULL
204 },
205 { /* XfwfCommon_class part */
206 XtInherit_compute_inside,
207 XtInherit_total_frame_width,
208 XtInherit_highlight_border,
209 XtInherit_unhighlight_border,
210 XtInherit_would_accept_focus,
211 XtInherit_traverse,
212 XtInherit_lighter_color,
213 XtInherit_darker_color,
214 NULL ,
215 },
216 { /* XfwfFrame_class part */
217 0
218 },
219 { /* XfwfBoard_class part */
220 XtInherit_set_abs_location,
221 },
222 { /* XfwfLabel_class part */
223 set_label,
224 },
225 };
226 WidgetClass xfwfLabelWidgetClass = (WidgetClass) &xfwfLabelClassRec;
_resolve_inheritance(class)227 static void _resolve_inheritance(class)
228 WidgetClass class;
229 {
230   XfwfLabelWidgetClass c = (XfwfLabelWidgetClass) class;
231   XfwfLabelWidgetClass super;
232   static CompositeClassExtensionRec extension_rec = {
233     NULL, NULLQUARK, XtCompositeExtensionVersion,
234     sizeof(CompositeClassExtensionRec), True};
235   CompositeClassExtensionRec *ext;
236   ext = (XtPointer)XtMalloc(sizeof(*ext));
237   *ext = extension_rec;
238   ext->next_extension = c->composite_class.extension;
239   c->composite_class.extension = ext;
240   if (class == xfwfLabelWidgetClass) return;
241   super = (XfwfLabelWidgetClass)class->core_class.superclass;
242   if (c->xfwfLabel_class.set_label == XtInherit_set_label)
243     c->xfwfLabel_class.set_label = super->xfwfLabel_class.set_label;
244 }
245 #line 154 "Label.w"
set_label(self,newlabel)246 /*ARGSUSED*/static void set_label(self,newlabel)Widget self;String  newlabel;
247 {
248     Position x, y;
249     Dimension w, h;
250 
251     XtFree(((XfwfLabelWidget)self)->xfwfLabel.label);
252     ((XfwfLabelWidget)self)->xfwfLabel.label = XtNewString(newlabel);
253     count_lines(self);
254     if (XtIsRealized(self)) {
255 	((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h);
256 	XClearArea(XtDisplay(self), XtWindow(self), x, y, w, h, True);
257 	/* $expose($, NULL, NULL); */
258     }
259 }
260 #line 178 "Label.w"
set_values(old,request,self,args,num_args)261 /*ARGSUSED*/static Boolean  set_values(old,request,self,args,num_args)Widget  old;Widget  request;Widget self;ArgList  args;Cardinal * num_args;
262 {
263     Boolean need_redisplay = False, need_count = False;
264     Position x, y;
265     Dimension w, h, wd, ht;
266 
267     if (((XfwfLabelWidget)self)->core.background_pixel != ((XfwfLabelWidget)old)->core.background_pixel)
268 	make_graygc(self);
269 
270     if (((XfwfLabelWidget)self)->xfwfLabel.tablist != ((XfwfLabelWidget)old)->xfwfLabel.tablist) {
271 	XtFree((String) ((XfwfLabelWidget)old)->xfwfLabel.tabs);
272 	((XfwfLabelWidget)self)->xfwfLabel.tabs = XfwfTablist2Tabs(((XfwfLabelWidget)self)->xfwfLabel.tablist);
273 	if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_count = True;
274     }
275 
276     if (((XfwfLabelWidget)self)->xfwfLabel.font != ((XfwfLabelWidget)old)->xfwfLabel.font) {
277 	make_gc(self);
278 	if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_count = True;
279     }
280     if (((XfwfLabelWidget)self)->xfwfLabel.foreground != ((XfwfLabelWidget)old)->xfwfLabel.foreground
281  	|| ((XfwfLabelWidget)self)->xfwfLabel.hlForeground != ((XfwfLabelWidget)self)->xfwfLabel.hlForeground
282 	|| ((XfwfLabelWidget)self)->core.background_pixel != ((XfwfLabelWidget)old)->core.background_pixel) {
283 	make_gc(self);
284 	if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_redisplay = True;
285     }
286     if (((XfwfLabelWidget)self)->xfwfLabel.topMargin != ((XfwfLabelWidget)old)->xfwfLabel.topMargin
287 	|| ((XfwfLabelWidget)self)->xfwfLabel.bottomMargin != ((XfwfLabelWidget)old)->xfwfLabel.bottomMargin
288 	|| ((XfwfLabelWidget)self)->xfwfLabel.leftMargin != ((XfwfLabelWidget)old)->xfwfLabel.leftMargin
289 	|| ((XfwfLabelWidget)self)->xfwfLabel.rightMargin != ((XfwfLabelWidget)old)->xfwfLabel.rightMargin)
290 	need_count = True;
291 
292     if (((XfwfLabelWidget)self)->core.sensitive != ((XfwfLabelWidget)old)->core.sensitive)
293 	if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_redisplay = True;
294 
295     if (((XfwfLabelWidget)self)->xfwfLabel.rvStart != ((XfwfLabelWidget)old)->xfwfLabel.rvStart || ((XfwfLabelWidget)self)->xfwfLabel.rvLength != ((XfwfLabelWidget)old)->xfwfLabel.rvLength
296  	|| ((XfwfLabelWidget)self)->xfwfLabel.hlStart != ((XfwfLabelWidget)old)->xfwfLabel.hlStart || ((XfwfLabelWidget)self)->xfwfLabel.hlLength != ((XfwfLabelWidget)old)->xfwfLabel.hlLength)
297 	if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_redisplay = True;
298 
299     if (((XfwfLabelWidget)self)->xfwfLabel.label != ((XfwfLabelWidget)old)->xfwfLabel.label) {
300 	XtFree(((XfwfLabelWidget)old)->xfwfLabel.label);
301 	((XfwfLabelWidget)self)->xfwfLabel.label = XtNewString(((XfwfLabelWidget)self)->xfwfLabel.label);
302 	need_count = True;
303     }
304     if (need_count) {
305 	count_lines(self);
306 	need_redisplay = True;
307     }
308     if (need_count && ((XfwfLabelWidget)self)->xfwfLabel.shrinkToFit) {
309 	((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h);
310 	wd = ((XfwfLabelWidget)self)->xfwfLabel.label_width + ((XfwfLabelWidget)self)->core.width - w;
311 	ht = ((XfwfLabelWidget)self)->xfwfLabel.label_height + ((XfwfLabelWidget)self)->core.height - h;
312 	if (wd != ((XfwfLabelWidget)self)->core.width || ht != ((XfwfLabelWidget)self)->core.height) {
313 	    ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfBoard_class.set_abs_location(self, CWWidth | CWHeight, 0, 0, wd, ht);
314 	    need_redisplay = False;
315 	}
316     }
317     return need_redisplay;
318 }
319 #line 241 "Label.w"
initialize(request,self,args,num_args)320 /*ARGSUSED*/static void initialize(request,self,args,num_args)Widget  request;Widget self;ArgList  args;Cardinal * num_args;
321 {
322     char *s;
323     Position x, y;
324     Dimension w, h, wd, ht;
325 
326     if (((XfwfLabelWidget)self)->xfwfLabel.label) ((XfwfLabelWidget)self)->xfwfLabel.label = XtNewString(((XfwfLabelWidget)self)->xfwfLabel.label);
327     count_lines(self);
328     ((XfwfLabelWidget)self)->xfwfLabel.gc = NULL;
329     ((XfwfLabelWidget)self)->xfwfLabel.rv_gc = NULL;
330     ((XfwfLabelWidget)self)->xfwfLabel.graygc = NULL;
331     ((XfwfLabelWidget)self)->xfwfLabel.hl_gc = NULL;
332     make_gc(self);
333     make_graygc(self);
334     ((XfwfLabelWidget)self)->xfwfLabel.tabs = XfwfTablist2Tabs(((XfwfLabelWidget)self)->xfwfLabel.tablist);
335     if (((XfwfLabelWidget)self)->xfwfLabel.shrinkToFit) {
336 	((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h);
337 	wd = ((XfwfLabelWidget)self)->xfwfLabel.label_width + ((XfwfLabelWidget)self)->core.width - w;
338 	ht = ((XfwfLabelWidget)self)->xfwfLabel.label_height + ((XfwfLabelWidget)self)->core.height - h;
339 	((XfwfLabelWidgetClass)self->core.widget_class)->xfwfBoard_class.set_abs_location(self, CWWidth | CWHeight, 0, 0, wd, ht);
340     }
341 }
342 #define draw_line(dpy, win, from, to) do {\
343 	if (((XfwfLabelWidget)self)->xfwfLabel.hlStart >= to) hstart = to;\
344  	else hstart = max(((XfwfLabelWidget)self)->xfwfLabel.hlStart, from);\
345 	if (((XfwfLabelWidget)self)->xfwfLabel.hlStart + ((XfwfLabelWidget)self)->xfwfLabel.hlLength <= from) hend = hstart;\
346  	else hend = min(((XfwfLabelWidget)self)->xfwfLabel.hlStart + ((XfwfLabelWidget)self)->xfwfLabel.hlLength, to);\
347         if (((XfwfLabelWidget)self)->xfwfLabel.rvStart >= to) rstart = to;\
348 	else rstart = max(((XfwfLabelWidget)self)->xfwfLabel.rvStart, from);\
349 	if (((XfwfLabelWidget)self)->xfwfLabel.rvStart + ((XfwfLabelWidget)self)->xfwfLabel.rvLength <= from) rend = rstart;\
350 	else rend = min(((XfwfLabelWidget)self)->xfwfLabel.rvStart + ((XfwfLabelWidget)self)->xfwfLabel.rvLength, to);\
351 	w1 = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, ((XfwfLabelWidget)self)->xfwfLabel.label + from, rstart - from, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
352 	w2 = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, ((XfwfLabelWidget)self)->xfwfLabel.label + rstart, rend - rstart, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
353 	w3 = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, ((XfwfLabelWidget)self)->xfwfLabel.label + rend, to - rend, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
354  	w4 = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, ((XfwfLabelWidget)self)->xfwfLabel.label + hstart, hend - hstart, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
355  	w5 = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, ((XfwfLabelWidget)self)->xfwfLabel.label + from, hstart - from, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
356 	if (((XfwfLabelWidget)self)->xfwfLabel.alignment & XfwfLeft)\
357 	    x = rect.x;\
358 	else if (((XfwfLabelWidget)self)->xfwfLabel.alignment & XfwfRight)\
359 	    x = rect.x + rect.width - w1 - w2 - w3;\
360 	else\
361 	    x = rect.x + (rect.width - w1 - w2 - w3)/2;\
362 	if (w1)\
363 	    XfwfDrawImageString(dpy, win, ((XfwfLabelWidget)self)->xfwfLabel.gc, x, y, ((XfwfLabelWidget)self)->xfwfLabel.label + from,\
364 			     rstart - from, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
365 	if (w2)\
366 	    XfwfDrawImageString(dpy, win, ((XfwfLabelWidget)self)->xfwfLabel.rv_gc, x + w1, y, ((XfwfLabelWidget)self)->xfwfLabel.label\
367 			     + rstart, rend - rstart, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
368 	if (w3)\
369 	    XfwfDrawImageString(dpy, win, ((XfwfLabelWidget)self)->xfwfLabel.gc, x + w1 + w2, y, ((XfwfLabelWidget)self)->xfwfLabel.label +\
370 			     rend, to - rend, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
371  	if (w4)\
372  	    XfwfDrawString(dpy, win, ((XfwfLabelWidget)self)->xfwfLabel.hl_gc, x + w5, y, ((XfwfLabelWidget)self)->xfwfLabel.label\
373  			     + hstart, hend - hstart, ((XfwfLabelWidget)self)->xfwfLabel.tabs);\
374     }while (0 )
375 
376 
377 #line 308 "Label.w"
expose(self,event,region)378 /*ARGSUSED*/static void expose(self,event,region)Widget self;XEvent * event;Region  region;
379 {
380     Region reg;
381     XRectangle rect;
382     int baseline;
383     int w1, w2, w3, w4, w5;
384     char *s, *t;
385     int x, y, i, j, rstart, rend, hstart, hend;
386 
387     if (! XtIsRealized(self)) return;
388     xfwfBoardClassRec.core_class.expose(self, event, region);
389     if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) {
390 	baseline = ((XfwfLabelWidget)self)->xfwfLabel.font->ascent + ((XfwfLabelWidget)self)->xfwfLabel.font->descent;
391 	((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &rect.x, &rect.y, &rect.width, &rect.height);
392 	rect.x += ((XfwfLabelWidget)self)->xfwfLabel.leftMargin;  rect.width -= ((XfwfLabelWidget)self)->xfwfLabel.leftMargin + ((XfwfLabelWidget)self)->xfwfLabel.rightMargin;
393 	rect.y += ((XfwfLabelWidget)self)->xfwfLabel.topMargin;  rect.height -= ((XfwfLabelWidget)self)->xfwfLabel.topMargin + ((XfwfLabelWidget)self)->xfwfLabel.bottomMargin;
394 	reg = XCreateRegion();
395 	XUnionRectWithRegion(&rect, reg, reg);
396 	if (region != NULL) XIntersectRegion(region, reg, reg);
397 	XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.gc, reg);
398 	XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.rv_gc, reg);
399  	XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.hl_gc, reg);
400 	if (((XfwfLabelWidget)self)->xfwfLabel.alignment & XfwfTop)
401 	    y = rect.y + ((XfwfLabelWidget)self)->xfwfLabel.font->ascent;
402 	else if (((XfwfLabelWidget)self)->xfwfLabel.alignment & XfwfBottom)
403 	    y = rect.y + rect.height - ((XfwfLabelWidget)self)->xfwfLabel.nlines * baseline + ((XfwfLabelWidget)self)->xfwfLabel.font->ascent;
404 	else
405 	    y = rect.y + (rect.height - ((XfwfLabelWidget)self)->xfwfLabel.nlines * baseline)/2 + ((XfwfLabelWidget)self)->xfwfLabel.font->ascent;
406 	for (i = 0, j = 0; ((XfwfLabelWidget)self)->xfwfLabel.label[i]; i++) {
407 	    if (((XfwfLabelWidget)self)->xfwfLabel.label[i] == '\n') {
408 		draw_line(XtDisplay(self), XtWindow(self), j, i);
409 		j = i + 1;
410 		y += baseline;
411 	    }
412 	}
413 	draw_line(XtDisplay(self), XtWindow(self), j, i);
414 
415 	/* Gray out if not sensitive */
416 	if (! ((XfwfLabelWidget)self)->core.sensitive) {
417 	    XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.graygc, reg);
418 	    XFillRectangle(XtDisplay(self), XtWindow(self), ((XfwfLabelWidget)self)->xfwfLabel.graygc, rect.x,
419 			   rect.y, rect.width, rect.height);
420 	    XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.graygc, None);
421 	}
422 	XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.gc, None);
423 	XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.rv_gc, None);
424  	XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.hl_gc, None);
425     }
426 }
427