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