diff options
Diffstat (limited to 'vendor/x11iraf/obm/ObmW/Toggle.c')
-rw-r--r-- | vendor/x11iraf/obm/ObmW/Toggle.c | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/vendor/x11iraf/obm/ObmW/Toggle.c b/vendor/x11iraf/obm/ObmW/Toggle.c new file mode 100644 index 00000000..6f55305a --- /dev/null +++ b/vendor/x11iraf/obm/ObmW/Toggle.c @@ -0,0 +1,290 @@ +/* Generated by wbuild from "Toggle.w" +** (generator version $Revision: 2.0 $ of $Date: 93/07/06 16:08:04 $) +*/ +#include <X11/IntrinsicP.h> +#include <X11/StringDefs.h> +#include "Converters.h" +#include "ToggleP.h" +static void toggle( +#if NeedFunctionPrototypes +Widget,XEvent*,String*,Cardinal* +#endif +); +static void switch_on( +#if NeedFunctionPrototypes +Widget,XEvent*,String*,Cardinal* +#endif +); +static void switch_off( +#if NeedFunctionPrototypes +Widget,XEvent*,String*,Cardinal* +#endif +); + +static XtActionsRec actionsList[] = { +{"toggle", toggle}, +{"switch_on", switch_on}, +{"switch_off", switch_off}, +}; + +static char defaultTranslations[] = "\ +<Btn1Down>: set_shadow(sunken) \n\ +<Btn1Up>: toggle() set_shadow() \n\ +<Key>Return: toggle() \n\ +"; +static void _resolve_inheritance( +#if NeedFunctionPrototypes +WidgetClass +#endif +); +static void initialize( +#if NeedFunctionPrototypes +Widget ,Widget,ArgList ,Cardinal * +#endif +); +static Boolean set_values( +#if NeedFunctionPrototypes +Widget ,Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void expose( +#if NeedFunctionPrototypes +Widget,XEvent *,Region +#endif +); +static void create_on_gc( +#if NeedFunctionPrototypes +Widget +#endif +); +static void create_off_gc( +#if NeedFunctionPrototypes +Widget +#endif +); +/*ARGSUSED*/static void create_on_gc(self)Widget self; +{ + XtGCMask mask = GCFillStyle; + XGCValues values; + + if (((XfwfToggleWidget)self)->xfwfToggle.on_gc != NULL) XtReleaseGC(self, ((XfwfToggleWidget)self)->xfwfToggle.on_gc); + if (((XfwfToggleWidget)self)->xfwfToggle.onIcon && ((XfwfToggleWidget)self)->xfwfToggle.onIcon->pixmap != None) { + values.tile = ((XfwfToggleWidget)self)->xfwfToggle.onIcon->pixmap; + mask |= GCTile; + } + if (((XfwfToggleWidget)self)->xfwfToggle.onIcon && ((XfwfToggleWidget)self)->xfwfToggle.onIcon->mask != None) { + values.clip_mask = ((XfwfToggleWidget)self)->xfwfToggle.onIcon->mask; + mask |= GCClipMask; + } + values.fill_style = FillTiled; + ((XfwfToggleWidget)self)->xfwfToggle.on_gc = XtGetGC(self, mask, &values); +} +/*ARGSUSED*/static void create_off_gc(self)Widget self; +{ + XtGCMask mask = GCFillStyle; + XGCValues values; + + if (((XfwfToggleWidget)self)->xfwfToggle.off_gc != NULL) XtReleaseGC(self, ((XfwfToggleWidget)self)->xfwfToggle.off_gc); + if (((XfwfToggleWidget)self)->xfwfToggle.offIcon && ((XfwfToggleWidget)self)->xfwfToggle.offIcon->pixmap != None) { + values.tile = ((XfwfToggleWidget)self)->xfwfToggle.offIcon->pixmap; + mask |= GCTile; + } + if (((XfwfToggleWidget)self)->xfwfToggle.offIcon && ((XfwfToggleWidget)self)->xfwfToggle.offIcon->mask != None) { + values.clip_mask = ((XfwfToggleWidget)self)->xfwfToggle.offIcon->mask; + mask |= GCClipMask; + } + values.fill_style = FillTiled; + ((XfwfToggleWidget)self)->xfwfToggle.off_gc = XtGetGC(self, mask, &values); +} + +static XtResource resources[] = { +{XtNonCallback,XtCOnCallback,XtRCallback,sizeof(((XfwfToggleRec*)NULL)->xfwfToggle.onCallback),XtOffsetOf(XfwfToggleRec,xfwfToggle.onCallback),XtRImmediate,(XtPointer)NULL }, +{XtNoffCallback,XtCOffCallback,XtRCallback,sizeof(((XfwfToggleRec*)NULL)->xfwfToggle.offCallback),XtOffsetOf(XfwfToggleRec,xfwfToggle.offCallback),XtRImmediate,(XtPointer)NULL }, +{XtNon,XtCOn,XtRBoolean,sizeof(((XfwfToggleRec*)NULL)->xfwfToggle.on),XtOffsetOf(XfwfToggleRec,xfwfToggle.on),XtRImmediate,(XtPointer)False }, +{XtNonIcon,XtCOnIcon,XtRIcon,sizeof(((XfwfToggleRec*)NULL)->xfwfToggle.onIcon),XtOffsetOf(XfwfToggleRec,xfwfToggle.onIcon),XtRString,(XtPointer)"filledsquare"}, +{XtNoffIcon,XtCOffIcon,XtRIcon,sizeof(((XfwfToggleRec*)NULL)->xfwfToggle.offIcon),XtOffsetOf(XfwfToggleRec,xfwfToggle.offIcon),XtRString,(XtPointer)"emptysquare"}, +}; + +XfwfToggleClassRec xfwfToggleClassRec = { +{ /* core_class part */ +(WidgetClass) &xfwfButtonClassRec, +"TextToggle", +sizeof(XfwfToggleRec), +NULL, +_resolve_inheritance, +FALSE, +initialize, +NULL, +XtInheritRealize, +actionsList, +3, +resources, +5, +NULLQUARK, +False , +FALSE , +False , +False , +NULL, +XtInheritResize, +expose, +set_values, +NULL, +XtInheritSetValuesAlmost, +NULL, +XtInheritAcceptFocus, +XtVersion, +NULL, +defaultTranslations, +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 */ +XtInherit_set_label, +}, +{ /* XfwfButton_class part */ +0 +}, +{ /* XfwfToggle_class part */ +0 +}, +}; +WidgetClass xfwfToggleWidgetClass = (WidgetClass) &xfwfToggleClassRec; +/*ARGSUSED*/ +static void toggle(self,event,params,num_params)Widget self;XEvent*event;String*params;Cardinal*num_params; +{ + XtVaSetValues(self, "on", !((XfwfToggleWidget)self)->xfwfToggle.on, NULL); + XtCallCallbackList(self, ((XfwfToggleWidget)self)->xfwfToggle.on ? ((XfwfToggleWidget)self)->xfwfToggle.onCallback : ((XfwfToggleWidget)self)->xfwfToggle.offCallback, event); +} + +/*ARGSUSED*/ +static void switch_on(self,event,params,num_params)Widget self;XEvent*event;String*params;Cardinal*num_params; +{ + if (! ((XfwfToggleWidget)self)->xfwfToggle.on) { + XtVaSetValues(self, "on", True, NULL); + XtCallCallbackList(self, ((XfwfToggleWidget)self)->xfwfToggle.onCallback, event); + } +} + +/*ARGSUSED*/ +static void switch_off(self,event,params,num_params)Widget self;XEvent*event;String*params;Cardinal*num_params; +{ + if (((XfwfToggleWidget)self)->xfwfToggle.on) { + XtVaSetValues(self, "on", False, NULL); + XtCallCallbackList(self, ((XfwfToggleWidget)self)->xfwfToggle.offCallback, event); + } +} + +static void _resolve_inheritance(class) +WidgetClass class; +{ + XfwfToggleWidgetClass c = (XfwfToggleWidgetClass) class; + XfwfToggleWidgetClass 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 == xfwfToggleWidgetClass) return; + super = (XfwfToggleWidgetClass)class->core_class.superclass; +} +/*ARGSUSED*/static void initialize(request,self,args,num_args)Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + int status; + Dimension w1, w2, w; + + ((XfwfToggleWidget)self)->xfwfToggle.on_gc = NULL; + ((XfwfToggleWidget)self)->xfwfToggle.off_gc = NULL; + create_on_gc(self); + create_off_gc(self); + + w1 = ((XfwfToggleWidget)self)->xfwfToggle.onIcon ? ((XfwfToggleWidget)self)->xfwfToggle.onIcon->attributes.width : 0; + w2 = ((XfwfToggleWidget)self)->xfwfToggle.offIcon ? ((XfwfToggleWidget)self)->xfwfToggle.offIcon->attributes.width : 0; + w = max(w1, w2); + if (w != 0) XtVaSetValues(self, XtNleftMargin, ((XfwfToggleWidget)self)->xfwfLabel.leftMargin + w, NULL); +} +/*ARGSUSED*/static Boolean set_values(old,request,self,args,num_args)Widget old;Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + Boolean redraw = False, compute_margin = False; + Dimension w1, w2, w; + + if (((XfwfToggleWidget)self)->xfwfToggle.onIcon != ((XfwfToggleWidget)old)->xfwfToggle.onIcon) { + create_on_gc(self); + compute_margin = True; + } + if (((XfwfToggleWidget)self)->xfwfToggle.offIcon != ((XfwfToggleWidget)old)->xfwfToggle.offIcon) { + create_off_gc(self); + compute_margin = True; + } + if (((XfwfToggleWidget)self)->xfwfToggle.on != ((XfwfToggleWidget)old)->xfwfToggle.on) { + redraw = True; + } + if (compute_margin) { + /* Compute w = old margin between icons and text */ + w1 = ((XfwfToggleWidget)old)->xfwfToggle.onIcon ? ((XfwfToggleWidget)old)->xfwfToggle.onIcon->attributes.width : 0; + w2 = ((XfwfToggleWidget)old)->xfwfToggle.offIcon ? ((XfwfToggleWidget)old)->xfwfToggle.offIcon->attributes.width : 0; + w = ((XfwfToggleWidget)old)->xfwfLabel.leftMargin - max(w1, w2); + /* Compute new left margin w = w + width of icons */ + w1 = ((XfwfToggleWidget)self)->xfwfToggle.onIcon ? ((XfwfToggleWidget)self)->xfwfToggle.onIcon->attributes.width : 0; + w2 = ((XfwfToggleWidget)self)->xfwfToggle.offIcon ? ((XfwfToggleWidget)self)->xfwfToggle.offIcon->attributes.width : 0; + w = w + max(w1, w2); + if (((XfwfToggleWidget)old)->xfwfLabel.leftMargin != w) { + XtVaSetValues(self, XtNleftMargin, w, NULL); + redraw = False; + } else + redraw = True; + } + return redraw; +} +/*ARGSUSED*/static void expose(self,event,region)Widget self;XEvent * event;Region region; +{ + Position x, y; + Dimension w, h; + + if (! XtIsRealized(self)) return; + xfwfButtonClassRec.core_class.expose(self, event, region); + ((XfwfToggleWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + if (((XfwfToggleWidget)self)->xfwfToggle.on && ((XfwfToggleWidget)self)->xfwfToggle.onIcon) { + y = y + (h - ((XfwfToggleWidget)self)->xfwfToggle.onIcon->attributes.height)/2; + XSetTSOrigin(XtDisplay(self), ((XfwfToggleWidget)self)->xfwfToggle.on_gc, x, y); + XSetClipOrigin(XtDisplay(self), ((XfwfToggleWidget)self)->xfwfToggle.on_gc, x, y); + XFillRectangle(XtDisplay(self), XtWindow(self), ((XfwfToggleWidget)self)->xfwfToggle.on_gc, x, y, + ((XfwfToggleWidget)self)->xfwfToggle.onIcon->attributes.width, + ((XfwfToggleWidget)self)->xfwfToggle.onIcon->attributes.height); + } else if (((XfwfToggleWidget)self)->xfwfToggle.offIcon) { + y = y + (h - ((XfwfToggleWidget)self)->xfwfToggle.offIcon->attributes.height)/2; + XSetTSOrigin(XtDisplay(self), ((XfwfToggleWidget)self)->xfwfToggle.off_gc, x, y); + XSetClipOrigin(XtDisplay(self), ((XfwfToggleWidget)self)->xfwfToggle.off_gc, x, y); + XFillRectangle(XtDisplay(self), XtWindow(self), ((XfwfToggleWidget)self)->xfwfToggle.off_gc, x, y, + ((XfwfToggleWidget)self)->xfwfToggle.offIcon->attributes.width, + ((XfwfToggleWidget)self)->xfwfToggle.offIcon->attributes.height); + } +} |