diff options
Diffstat (limited to 'vendor/x11iraf/obm/ObmW/Label.c')
-rw-r--r-- | vendor/x11iraf/obm/ObmW/Label.c | 345 |
1 files changed, 345 insertions, 0 deletions
diff --git a/vendor/x11iraf/obm/ObmW/Label.c b/vendor/x11iraf/obm/ObmW/Label.c new file mode 100644 index 00000000..116ee13e --- /dev/null +++ b/vendor/x11iraf/obm/ObmW/Label.c @@ -0,0 +1,345 @@ +/* Generated by wbuild from "Label.w" +** (generator version $Revision: 2.0 $ of $Date: 93/07/06 16:08:04 $) +*/ +#include <X11/IntrinsicP.h> +#include <X11/StringDefs.h> +#include "stip4.bm" +#include <stdio.h> +#include "TabString.h" +#include "LabelP.h" +static void _resolve_inheritance( +#if NeedFunctionPrototypes +WidgetClass +#endif +); +static void set_label( +#if NeedFunctionPrototypes +Widget,String +#endif +); +static Boolean set_values( +#if NeedFunctionPrototypes +Widget ,Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void initialize( +#if NeedFunctionPrototypes +Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void expose( +#if NeedFunctionPrototypes +Widget,XEvent *,Region +#endif +); +static void make_gc( +#if NeedFunctionPrototypes +Widget +#endif +); +static void make_graygc( +#if NeedFunctionPrototypes +Widget +#endif +); +static void count_lines( +#if NeedFunctionPrototypes +Widget +#endif +); +/*ARGSUSED*/static void make_gc(self)Widget self; +{ + XtGCMask mask; + XGCValues values; + + if (((XfwfLabelWidget)self)->xfwfLabel.gc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.gc); + values.background = ((XfwfLabelWidget)self)->core.background_pixel; + values.foreground = ((XfwfLabelWidget)self)->xfwfLabel.foreground; + values.font = ((XfwfLabelWidget)self)->xfwfLabel.font->fid; + mask = GCFont | GCBackground | GCForeground; + ((XfwfLabelWidget)self)->xfwfLabel.gc = XtGetGC(self, mask, &values); + + if (((XfwfLabelWidget)self)->xfwfLabel.rv_gc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.rv_gc); + values.foreground = ((XfwfLabelWidget)self)->core.background_pixel; + values.background = ((XfwfLabelWidget)self)->xfwfLabel.foreground; + values.font = ((XfwfLabelWidget)self)->xfwfLabel.font->fid; + mask = GCFont | GCBackground | GCForeground; + ((XfwfLabelWidget)self)->xfwfLabel.rv_gc = XtGetGC(self, mask, &values); +} +/*ARGSUSED*/static void make_graygc(self)Widget self; +{ + XtGCMask mask; + XGCValues values; + + if (((XfwfLabelWidget)self)->xfwfLabel.graygc != NULL) XtReleaseGC(self, ((XfwfLabelWidget)self)->xfwfLabel.graygc); + values.foreground = ((XfwfLabelWidget)self)->core.background_pixel; + values.stipple = + XCreateBitmapFromData(XtDisplay(self), + RootWindowOfScreen(XtScreen(self)), + stip4_bits, stip4_width, stip4_height); + values.fill_style = FillStippled; + mask = GCForeground | GCStipple | GCFillStyle; + ((XfwfLabelWidget)self)->xfwfLabel.graygc = XtGetGC(self, mask, &values); +} +/*ARGSUSED*/static void count_lines(self)Widget self; +{ + String p, s; + int w; + + ((XfwfLabelWidget)self)->xfwfLabel.nlines = 0; + ((XfwfLabelWidget)self)->xfwfLabel.label_width = 0; + if (((XfwfLabelWidget)self)->xfwfLabel.label) { + for (p = ((XfwfLabelWidget)self)->xfwfLabel.label, ((XfwfLabelWidget)self)->xfwfLabel.nlines = 1, s = ((XfwfLabelWidget)self)->xfwfLabel.label; *s; s++) { + if (*s == '\n') { + ((XfwfLabelWidget)self)->xfwfLabel.nlines++; + w = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, p, s - p, ((XfwfLabelWidget)self)->xfwfLabel.tabs); + p = s + 1; + if (w > ((XfwfLabelWidget)self)->xfwfLabel.label_width) ((XfwfLabelWidget)self)->xfwfLabel.label_width = w; + } + } + w = XfwfTextWidth(((XfwfLabelWidget)self)->xfwfLabel.font, p, s - p, ((XfwfLabelWidget)self)->xfwfLabel.tabs); + if (w > ((XfwfLabelWidget)self)->xfwfLabel.label_width) ((XfwfLabelWidget)self)->xfwfLabel.label_width = w; + } + ((XfwfLabelWidget)self)->xfwfLabel.label_height = ((XfwfLabelWidget)self)->xfwfLabel.nlines * (((XfwfLabelWidget)self)->xfwfLabel.font->ascent + ((XfwfLabelWidget)self)->xfwfLabel.font->descent); + ((XfwfLabelWidget)self)->xfwfLabel.label_width += ((XfwfLabelWidget)self)->xfwfLabel.leftMargin + ((XfwfLabelWidget)self)->xfwfLabel.rightMargin; + ((XfwfLabelWidget)self)->xfwfLabel.label_height += ((XfwfLabelWidget)self)->xfwfLabel.topMargin + ((XfwfLabelWidget)self)->xfwfLabel.bottomMargin; +} + +static XtResource resources[] = { +{XtNlabel,XtCLabel,XtRString,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.label),XtOffsetOf(XfwfLabelRec,xfwfLabel.label),XtRImmediate,(XtPointer)NULL }, +{XtNtablist,XtCTablist,XtRString,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.tablist),XtOffsetOf(XfwfLabelRec,xfwfLabel.tablist),XtRImmediate,(XtPointer)NULL }, +{XtNfont,XtCFont,XtRFontStruct,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.font),XtOffsetOf(XfwfLabelRec,xfwfLabel.font),XtRString,(XtPointer)XtDefaultFont }, +{XtNforeground,XtCForeground,XtRPixel,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.foreground),XtOffsetOf(XfwfLabelRec,xfwfLabel.foreground),XtRString,(XtPointer)XtDefaultForeground }, +{XtNalignment,XtCAlignment,XtRAlignment,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.alignment),XtOffsetOf(XfwfLabelRec,xfwfLabel.alignment),XtRImmediate,(XtPointer)0 }, +{XtNtopMargin,XtCTopMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.topMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.topMargin),XtRImmediate,(XtPointer)2 }, +{XtNbottomMargin,XtCBottomMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.bottomMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.bottomMargin),XtRImmediate,(XtPointer)2 }, +{XtNleftMargin,XtCLeftMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.leftMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.leftMargin),XtRImmediate,(XtPointer)2 }, +{XtNrightMargin,XtCRightMargin,XtRDimension,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.rightMargin),XtOffsetOf(XfwfLabelRec,xfwfLabel.rightMargin),XtRImmediate,(XtPointer)2 }, +{XtNshrinkToFit,XtCShrinkToFit,XtRBoolean,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.shrinkToFit),XtOffsetOf(XfwfLabelRec,xfwfLabel.shrinkToFit),XtRImmediate,(XtPointer)False }, +{XtNrvStart,XtCRvStart,XtRInt,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.rvStart),XtOffsetOf(XfwfLabelRec,xfwfLabel.rvStart),XtRImmediate,(XtPointer)0 }, +{XtNrvLength,XtCRvLength,XtRInt,sizeof(((XfwfLabelRec*)NULL)->xfwfLabel.rvLength),XtOffsetOf(XfwfLabelRec,xfwfLabel.rvLength),XtRImmediate,(XtPointer)0 }, +{XtNtraversalOn,XtCTraversalOn,XtRBoolean,sizeof(((XfwfLabelRec*)NULL)->xfwfCommon.traversalOn),XtOffsetOf(XfwfLabelRec,xfwfCommon.traversalOn),XtRImmediate,(XtPointer)False }, +}; + +XfwfLabelClassRec xfwfLabelClassRec = { +{ /* core_class part */ +(WidgetClass) &xfwfBoardClassRec, +"TextBox", +sizeof(XfwfLabelRec), +NULL, +_resolve_inheritance, +FALSE, +initialize, +NULL, +XtInheritRealize, +NULL, +0, +resources, +13, +NULLQUARK, +False , +FALSE , +False , +False , +NULL, +XtInheritResize, +expose, +set_values, +NULL, +XtInheritSetValuesAlmost, +NULL, +XtInheritAcceptFocus, +XtVersion, +NULL, +NULL, +XtInheritQueryGeometry, +XtInheritDisplayAccelerator, +NULL +}, +{ /* composite_class part */ +XtInheritGeometryManager, +XtInheritChangeManaged, +XtInheritInsertChild, +XtInheritDeleteChild, +NULL +}, +{ /* XfwfCommon_class part */ +XtInherit_compute_inside, +XtInherit_highlight_border, +XtInherit_unhighlight_border, +XtInherit_would_accept_focus, +XtInherit_traverse, +XtInherit_choose_color, +XtInherit_lighter_color, +XtInherit_darker_color, +NULL , +}, +{ /* XfwfFrame_class part */ +0 +}, +{ /* XfwfBoard_class part */ +XtInherit_set_abs_location, +}, +{ /* XfwfLabel_class part */ +set_label, +}, +}; +WidgetClass xfwfLabelWidgetClass = (WidgetClass) &xfwfLabelClassRec; +static void _resolve_inheritance(class) +WidgetClass class; +{ + XfwfLabelWidgetClass c = (XfwfLabelWidgetClass) class; + XfwfLabelWidgetClass super; + static CompositeClassExtensionRec extension_rec = { + NULL, NULLQUARK, XtCompositeExtensionVersion, + sizeof(CompositeClassExtensionRec), True}; + CompositeClassExtensionRec *ext; + ext = (XtPointer)XtMalloc(sizeof(*ext)); + *ext = extension_rec; + ext->next_extension = c->composite_class.extension; + c->composite_class.extension = ext; + if (class == xfwfLabelWidgetClass) return; + super = (XfwfLabelWidgetClass)class->core_class.superclass; + if (c->xfwfLabel_class.set_label == XtInherit_set_label) + c->xfwfLabel_class.set_label = super->xfwfLabel_class.set_label; +} +/*ARGSUSED*/static void set_label(self,newlabel)Widget self;String newlabel; +{ + Position x, y; + Dimension w, h; + + XtFree(((XfwfLabelWidget)self)->xfwfLabel.label); + ((XfwfLabelWidget)self)->xfwfLabel.label = XtNewString(newlabel); + count_lines(self); + if (XtIsRealized(self)) { + ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + XClearArea(XtDisplay(self), XtWindow(self), x, y, w, h, True); + /* $expose($, NULL, NULL); */ + } +} +/*ARGSUSED*/static Boolean set_values(old,request,self,args,num_args)Widget old;Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + Boolean need_redisplay = False, need_count = False; + Position x, y; + Dimension w, h, wd, ht; + + if (((XfwfLabelWidget)self)->core.background_pixel != ((XfwfLabelWidget)old)->core.background_pixel) + make_graygc(self); + + if (((XfwfLabelWidget)self)->xfwfLabel.tablist != ((XfwfLabelWidget)old)->xfwfLabel.tablist) { + XtFree((String) ((XfwfLabelWidget)old)->xfwfLabel.tabs); + ((XfwfLabelWidget)self)->xfwfLabel.tabs = XfwfTablist2Tabs(((XfwfLabelWidget)self)->xfwfLabel.tablist); + if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_count = True; + } + + if (((XfwfLabelWidget)self)->xfwfLabel.font != ((XfwfLabelWidget)old)->xfwfLabel.font) { + make_gc(self); + if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_count = True; + } + if (((XfwfLabelWidget)self)->xfwfLabel.foreground != ((XfwfLabelWidget)old)->xfwfLabel.foreground + || ((XfwfLabelWidget)self)->core.background_pixel != ((XfwfLabelWidget)old)->core.background_pixel) { + make_gc(self); + if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_redisplay = True; + } + if (((XfwfLabelWidget)self)->xfwfLabel.topMargin != ((XfwfLabelWidget)old)->xfwfLabel.topMargin + || ((XfwfLabelWidget)self)->xfwfLabel.bottomMargin != ((XfwfLabelWidget)old)->xfwfLabel.bottomMargin + || ((XfwfLabelWidget)self)->xfwfLabel.leftMargin != ((XfwfLabelWidget)old)->xfwfLabel.leftMargin + || ((XfwfLabelWidget)self)->xfwfLabel.rightMargin != ((XfwfLabelWidget)old)->xfwfLabel.rightMargin) + need_count = True; + + if (((XfwfLabelWidget)self)->core.sensitive != ((XfwfLabelWidget)old)->core.sensitive) + if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_redisplay = True; + + if (((XfwfLabelWidget)self)->xfwfLabel.rvStart != ((XfwfLabelWidget)old)->xfwfLabel.rvStart || ((XfwfLabelWidget)self)->xfwfLabel.rvLength != ((XfwfLabelWidget)old)->xfwfLabel.rvLength) + if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) need_redisplay = True; + + if (((XfwfLabelWidget)self)->xfwfLabel.label != ((XfwfLabelWidget)old)->xfwfLabel.label) { + XtFree(((XfwfLabelWidget)old)->xfwfLabel.label); + ((XfwfLabelWidget)self)->xfwfLabel.label = XtNewString(((XfwfLabelWidget)self)->xfwfLabel.label); + need_count = True; + } + if (need_count) { + count_lines(self); + need_redisplay = True; + } + if (need_count && ((XfwfLabelWidget)self)->xfwfLabel.shrinkToFit) { + ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + wd = ((XfwfLabelWidget)self)->xfwfLabel.label_width + ((XfwfLabelWidget)self)->core.width - w; + ht = ((XfwfLabelWidget)self)->xfwfLabel.label_height + ((XfwfLabelWidget)self)->core.height - h; + if (wd != ((XfwfLabelWidget)self)->core.width || ht != ((XfwfLabelWidget)self)->core.height) { + ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfBoard_class.set_abs_location(self, CWWidth | CWHeight, 0, 0, wd, ht); + need_redisplay = False; + } + } + return need_redisplay; +} +/*ARGSUSED*/static void initialize(request,self,args,num_args)Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + char *s; + Position x, y; + Dimension w, h, wd, ht; + + if (((XfwfLabelWidget)self)->xfwfLabel.label) ((XfwfLabelWidget)self)->xfwfLabel.label = XtNewString(((XfwfLabelWidget)self)->xfwfLabel.label); + count_lines(self); + ((XfwfLabelWidget)self)->xfwfLabel.gc = NULL; + ((XfwfLabelWidget)self)->xfwfLabel.rv_gc = NULL; + ((XfwfLabelWidget)self)->xfwfLabel.graygc = NULL; + make_gc(self); + make_graygc(self); + ((XfwfLabelWidget)self)->xfwfLabel.tabs = XfwfTablist2Tabs(((XfwfLabelWidget)self)->xfwfLabel.tablist); + if (((XfwfLabelWidget)self)->xfwfLabel.shrinkToFit) { + ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + wd = ((XfwfLabelWidget)self)->xfwfLabel.label_width + ((XfwfLabelWidget)self)->core.width - w; + ht = ((XfwfLabelWidget)self)->xfwfLabel.label_height + ((XfwfLabelWidget)self)->core.height - h; + ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfBoard_class.set_abs_location(self, CWWidth | CWHeight, 0, 0, wd, ht); + } +} +/*ARGSUSED*/static void expose(self,event,region)Widget self;XEvent * event;Region region; +{ + Region reg; + XRectangle rect; + int baseline; + int w1, w2, w3; + char *s, *t; + int x, y, i, j, rstart, rend; + + if (! XtIsRealized(self)) return; + xfwfBoardClassRec.core_class.expose(self, event, region); + if (((XfwfLabelWidget)self)->xfwfLabel.label != NULL) { + baseline = ((XfwfLabelWidget)self)->xfwfLabel.font->ascent + ((XfwfLabelWidget)self)->xfwfLabel.font->descent; + ((XfwfLabelWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &rect.x, &rect.y, &rect.width, &rect.height); + rect.x += ((XfwfLabelWidget)self)->xfwfLabel.leftMargin; rect.width -= ((XfwfLabelWidget)self)->xfwfLabel.leftMargin + ((XfwfLabelWidget)self)->xfwfLabel.rightMargin; + rect.y += ((XfwfLabelWidget)self)->xfwfLabel.topMargin; rect.height -= ((XfwfLabelWidget)self)->xfwfLabel.topMargin + ((XfwfLabelWidget)self)->xfwfLabel.bottomMargin; + reg = XCreateRegion(); + XUnionRectWithRegion(&rect, reg, reg); + if (region != NULL) XIntersectRegion(region, reg, reg); + XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.gc, reg); + XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.rv_gc, reg); + if (((XfwfLabelWidget)self)->xfwfLabel.alignment & XfwfTop) + y = rect.y + ((XfwfLabelWidget)self)->xfwfLabel.font->ascent; + else if (((XfwfLabelWidget)self)->xfwfLabel.alignment & XfwfBottom) + y = rect.y + rect.height - ((XfwfLabelWidget)self)->xfwfLabel.nlines * baseline + ((XfwfLabelWidget)self)->xfwfLabel.font->ascent; + else + y = rect.y + (rect.height - ((XfwfLabelWidget)self)->xfwfLabel.nlines * baseline)/2 + ((XfwfLabelWidget)self)->xfwfLabel.font->ascent; + for (i = 0, j = 0; ((XfwfLabelWidget)self)->xfwfLabel.label[i]; i++) { + if (((XfwfLabelWidget)self)->xfwfLabel.label[i] == '\n') { + draw_line(XtDisplay(self), XtWindow(self), j, i); + j = i + 1; + y += baseline; + } + } + draw_line(XtDisplay(self), XtWindow(self), j, i); + + /* Gray out if not sensitive */ + if (! ((XfwfLabelWidget)self)->core.sensitive) { + XSetRegion(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.graygc, reg); + XFillRectangle(XtDisplay(self), XtWindow(self), ((XfwfLabelWidget)self)->xfwfLabel.graygc, rect.x, + rect.y, rect.width, rect.height); + XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.graygc, None); + } + XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.gc, None); + XSetClipMask(XtDisplay(self), ((XfwfLabelWidget)self)->xfwfLabel.rv_gc, None); + + XDestroyRegion (reg); /* MF038 */ + } +} |