diff options
Diffstat (limited to 'vendor/x11iraf/obm/ObmW/Frame.c')
-rw-r--r-- | vendor/x11iraf/obm/ObmW/Frame.c | 654 |
1 files changed, 654 insertions, 0 deletions
diff --git a/vendor/x11iraf/obm/ObmW/Frame.c b/vendor/x11iraf/obm/ObmW/Frame.c new file mode 100644 index 00000000..47080b53 --- /dev/null +++ b/vendor/x11iraf/obm/ObmW/Frame.c @@ -0,0 +1,654 @@ +/* Generated by wbuild from "Frame.w" +** (generator version $Revision: 2.0 $ of $Date: 93/07/06 16:08:04 $) +*/ +#include <X11/IntrinsicP.h> +#include <X11/StringDefs.h> +#include <string.h> +#include <stdio.h> +#include <X11/Xmu/Converters.h> +#include <X11/Xmu/CharSet.h> +#include "stip4.bm" +#include "FrameP.h" +static void set_shadow( +#if NeedFunctionPrototypes +Widget,XEvent*,String*,Cardinal* +#endif +); + +static XtActionsRec actionsList[] = { +{"set_shadow", set_shadow}, +}; +static void _resolve_inheritance( +#if NeedFunctionPrototypes +WidgetClass +#endif +); +static void class_initialize( +#if NeedFunctionPrototypes +void +#endif +); +static void initialize( +#if NeedFunctionPrototypes +Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void realize( +#if NeedFunctionPrototypes +Widget,XtValueMask *,XSetWindowAttributes * +#endif +); +static Boolean set_values( +#if NeedFunctionPrototypes +Widget ,Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void expose( +#if NeedFunctionPrototypes +Widget,XEvent *,Region +#endif +); +static void compute_inside( +#if NeedFunctionPrototypes +Widget,Position *,Position *,Dimension *,Dimension * +#endif +); +static XtGeometryResult query_geometry( +#if NeedFunctionPrototypes +Widget,XtWidgetGeometry *,XtWidgetGeometry * +#endif +); +static XtGeometryResult geometry_manager( +#if NeedFunctionPrototypes +Widget ,XtWidgetGeometry *,XtWidgetGeometry * +#endif +); +static void resize( +#if NeedFunctionPrototypes +Widget +#endif +); +static void change_managed( +#if NeedFunctionPrototypes +Widget +#endif +); +#define done(type, value) do {\ + if (to->addr != NULL) {\ + if (to->size < sizeof(type)) {\ + to->size = sizeof(type);\ + return False;\ + }\ + *(type*)(to->addr) = (value);\ + } else {\ + static type static_val;\ + static_val = (value);\ + to->addr = (XtPointer)&static_val;\ + }\ + to->size = sizeof(type);\ + return True;\ + }while (0 ) + + +static char rcsid[] = "$Header: Frame.w,v 1.5 92/11/02 14:07:52 bert Exp $"; +static void create_darkgc( +#if NeedFunctionPrototypes +Widget +#endif +); +static void create_lightgc( +#if NeedFunctionPrototypes +Widget +#endif +); +static void compute_topcolor( +#if NeedFunctionPrototypes +Widget,int ,XrmValue * +#endif +); +static void compute_bottomcolor( +#if NeedFunctionPrototypes +Widget,int ,XrmValue * +#endif +); +/*ARGSUSED*/static void create_darkgc(self)Widget self; +{ + XtGCMask mask; + XGCValues values; + + if (((XfwfFrameWidget)self)->xfwfFrame.darkgc != NULL) XtReleaseGC(self, ((XfwfFrameWidget)self)->xfwfFrame.darkgc); + switch (((XfwfFrameWidget)self)->xfwfFrame.shadowScheme) { + case XfwfColor: + mask = GCForeground; + values.foreground = ((XfwfFrameWidget)self)->xfwfFrame.bottomShadowColor; + break; + case XfwfStipple: + mask = GCFillStyle | GCStipple | GCForeground | GCBackground; + values.fill_style = FillOpaqueStippled; + values.stipple = ((XfwfFrameWidget)self)->xfwfFrame.bottomShadowStipple; + values.foreground = BlackPixelOfScreen(XtScreen(self)); + values.background = ((XfwfFrameWidget)self)->core.background_pixel; + break; + case XfwfAuto: + if (DefaultDepthOfScreen(XtScreen(self)) > 4 + && ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.darker_color(self, ((XfwfFrameWidget)self)->core.background_pixel, &values.foreground)) { + mask = GCForeground; + } else { + mask = GCFillStyle | GCBackground | GCForeground | GCStipple; + values.fill_style = FillOpaqueStippled; + values.background = ((XfwfFrameWidget)self)->core.background_pixel; + values.foreground = WhitePixelOfScreen(XtScreen(self)); + values.stipple = ((XfwfFrameWidget)self)->xfwfFrame.stip4; + } + break; + } + ((XfwfFrameWidget)self)->xfwfFrame.darkgc = XtGetGC(self, mask, &values); +} +/*ARGSUSED*/static void create_lightgc(self)Widget self; +{ + XtGCMask mask; + XGCValues values; + + if (((XfwfFrameWidget)self)->xfwfFrame.lightgc != NULL) XtReleaseGC(self, ((XfwfFrameWidget)self)->xfwfFrame.lightgc); + switch (((XfwfFrameWidget)self)->xfwfFrame.shadowScheme) { + case XfwfColor: + mask = GCForeground; + values.foreground = ((XfwfFrameWidget)self)->xfwfFrame.topShadowColor; + break; + case XfwfStipple: + mask = GCFillStyle | GCStipple | GCForeground | GCBackground; + values.fill_style = FillOpaqueStippled; + values.background = ((XfwfFrameWidget)self)->core.background_pixel; + values.stipple = ((XfwfFrameWidget)self)->xfwfFrame.topShadowStipple; + values.foreground = WhitePixelOfScreen(XtScreen(self)); + break; + case XfwfAuto: + if (DefaultDepthOfScreen(XtScreen(self)) > 4 + && ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.lighter_color(self, ((XfwfFrameWidget)self)->core.background_pixel, &values.foreground)) { + mask = GCForeground; + } else { + mask = GCFillStyle | GCBackground | GCForeground | GCStipple; + values.fill_style = FillOpaqueStippled; + values.background = ((XfwfFrameWidget)self)->core.background_pixel; + values.foreground = WhitePixelOfScreen(XtScreen(self)); + values.stipple = ((XfwfFrameWidget)self)->xfwfFrame.stip4; + } + break; + } + ((XfwfFrameWidget)self)->xfwfFrame.lightgc = XtGetGC(self, mask, &values); +} +/*ARGSUSED*/static void compute_topcolor(self,offset,value)Widget self;int offset;XrmValue * value; +{ + static Pixel color; + ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.lighter_color(self, ((XfwfFrameWidget)self)->core.background_pixel, &color); + value->addr = (XtPointer) &color; +} +/*ARGSUSED*/static void compute_bottomcolor(self,offset,value)Widget self;int offset;XrmValue * value; +{ + static Pixel color; + ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.darker_color(self, ((XfwfFrameWidget)self)->core.background_pixel, &color); + value->addr = (XtPointer) &color; +} + +static XtResource resources[] = { +{XtNcursor,XtCCursor,XtRCursor,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.cursor),XtOffsetOf(XfwfFrameRec,xfwfFrame.cursor),XtRImmediate,(XtPointer)None }, +{XtNframeType,XtCFrameType,XtRFrameType,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.frameType),XtOffsetOf(XfwfFrameRec,xfwfFrame.frameType),XtRImmediate,(XtPointer)XfwfRaised }, +{XtNframeWidth,XtCFrameWidth,XtRDimension,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.frameWidth),XtOffsetOf(XfwfFrameRec,xfwfFrame.frameWidth),XtRImmediate,(XtPointer)0 }, +{XtNouterOffset,XtCOuterOffset,XtRDimension,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.outerOffset),XtOffsetOf(XfwfFrameRec,xfwfFrame.outerOffset),XtRImmediate,(XtPointer)0 }, +{XtNinnerOffset,XtCInnerOffset,XtRDimension,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.innerOffset),XtOffsetOf(XfwfFrameRec,xfwfFrame.innerOffset),XtRImmediate,(XtPointer)0 }, +{XtNshadowScheme,XtCShadowScheme,XtRShadowScheme,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.shadowScheme),XtOffsetOf(XfwfFrameRec,xfwfFrame.shadowScheme),XtRImmediate,(XtPointer)XfwfAuto }, +{XtNtopShadowColor,XtCTopShadowColor,XtRPixel,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.topShadowColor),XtOffsetOf(XfwfFrameRec,xfwfFrame.topShadowColor),XtRCallProc,(XtPointer)compute_topcolor }, +{XtNbottomShadowColor,XtCBottomShadowColor,XtRPixel,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.bottomShadowColor),XtOffsetOf(XfwfFrameRec,xfwfFrame.bottomShadowColor),XtRCallProc,(XtPointer)compute_bottomcolor }, +{XtNtopShadowStipple,XtCTopShadowStipple,XtRBitmap,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.topShadowStipple),XtOffsetOf(XfwfFrameRec,xfwfFrame.topShadowStipple),XtRImmediate,(XtPointer)NULL }, +{XtNbottomShadowStipple,XtCBottomShadowStipple,XtRBitmap,sizeof(((XfwfFrameRec*)NULL)->xfwfFrame.bottomShadowStipple),XtOffsetOf(XfwfFrameRec,xfwfFrame.bottomShadowStipple),XtRImmediate,(XtPointer)NULL }, +{XtNborderWidth,XtCBorderWidth,XtRDimension,sizeof(((XfwfFrameRec*)NULL)->core.border_width),XtOffsetOf(XfwfFrameRec,core.border_width),XtRImmediate,(XtPointer)0 }, +}; + +XfwfFrameClassRec xfwfFrameClassRec = { +{ /* core_class part */ +(WidgetClass) &xfwfCommonClassRec, +"Frame", +sizeof(XfwfFrameRec), +class_initialize, +_resolve_inheritance, +FALSE, +initialize, +NULL, +realize, +actionsList, +1, +resources, +11, +NULLQUARK, +False , +FALSE , +False , +False , +NULL, +resize, +expose, +set_values, +NULL, +XtInheritSetValuesAlmost, +NULL, +XtInheritAcceptFocus, +XtVersion, +NULL, +NULL, +query_geometry, +XtInheritDisplayAccelerator, +NULL +}, +{ /* composite_class part */ +geometry_manager, +change_managed, +XtInheritInsertChild, +XtInheritDeleteChild, +NULL +}, +{ /* XfwfCommon_class part */ +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 +}, +}; +WidgetClass xfwfFrameWidgetClass = (WidgetClass) &xfwfFrameClassRec; +/*ARGSUSED*/ +static void set_shadow(self,event,params,num_params)Widget self;XEvent*event;String*params;Cardinal*num_params; +{ + Position x, y; + Dimension w, h; + FrameType f = XfwfSunken; + + if (*num_params == 0) f = ((XfwfFrameWidget)self)->xfwfFrame.old_frame_type; /* Reset to old style */ + else if (strcmp("raised", params[0]) == 0) f = XfwfRaised; + else if (strcmp("sunken", params[0]) == 0) f = XfwfSunken; + else if (strcmp("chiseled", params[0]) == 0) f = XfwfChiseled; + else if (strcmp("ledged", params[0]) == 0) f = XfwfLedged; + else XtWarning("Unknown frame type in set_shadow action"); + + if (((XfwfFrameWidget)self)->xfwfFrame.frameType != f) { + ((XfwfFrameWidget)self)->xfwfFrame.frameType = f; + xfwfCommonClassRec.xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + XfwfDrawFrame(self, x + ((XfwfFrameWidget)self)->xfwfFrame.outerOffset, y + ((XfwfFrameWidget)self)->xfwfFrame.outerOffset, + w - 2*((XfwfFrameWidget)self)->xfwfFrame.outerOffset, h - 2*((XfwfFrameWidget)self)->xfwfFrame.outerOffset, + ((XfwfFrameWidget)self)->xfwfFrame.frameType, ((XfwfFrameWidget)self)->xfwfFrame.frameWidth, ((XfwfFrameWidget)self)->xfwfFrame.lightgc, ((XfwfFrameWidget)self)->xfwfFrame.darkgc); + } +} + +static void _resolve_inheritance(class) +WidgetClass class; +{ + XfwfFrameWidgetClass c = (XfwfFrameWidgetClass) class; + XfwfFrameWidgetClass 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 == xfwfFrameWidgetClass) return; + super = (XfwfFrameWidgetClass)class->core_class.superclass; +} +/*ARGSUSED*/static void class_initialize() +{ + static XtConvertArgRec screenArg[] = { + {XtBaseOffset, (XtPointer)XtOffset(Widget, core.screen), sizeof(Screen*)}}; + + XtSetTypeConverter(XtRString, XtRFrameType, cvtStringToFrameType, + NULL, 0, XtCacheNone, NULL); + XtSetTypeConverter(XtRFrameType, XtRString, cvtFrameTypeToString, + NULL, 0, XtCacheNone, NULL); + + XtAddConverter(XtRString, XtRBitmap, XmuCvtStringToBitmap, + screenArg, XtNumber(screenArg)); + + XtSetTypeConverter(XtRString, XtRShadowScheme, cvtStringToShadowScheme, + NULL, 0, XtCacheNone, NULL); + XtSetTypeConverter(XtRShadowScheme, XtRString, cvtShadowSchemeToString, + NULL, 0, XtCacheNone, NULL); +} +/*ARGSUSED*/static void initialize(request,self,args,num_args)Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + ((XfwfFrameWidget)self)->xfwfFrame.lightgc = NULL; + ((XfwfFrameWidget)self)->xfwfFrame.darkgc = NULL; + ((XfwfFrameWidget)self)->xfwfFrame.old_frame_type = ((XfwfFrameWidget)self)->xfwfFrame.frameType; +} +/*ARGSUSED*/static void realize(self,mask,attributes)Widget self;XtValueMask * mask;XSetWindowAttributes * attributes; +{ +#ifdef USE_CWCURSOR + *mask |= CWCursor; +#endif + attributes->cursor = ((XfwfFrameWidget)self)->xfwfFrame.cursor; + xfwfCommonClassRec.core_class.realize(self, mask, attributes); + + ((XfwfFrameWidget)self)->xfwfFrame.stip4 = XCreateBitmapFromData(XtDisplay(self), XtWindow(self), + stip4_bits, stip4_width, stip4_height); + + if (! ((XfwfFrameWidget)self)->xfwfFrame.topShadowStipple) ((XfwfFrameWidget)self)->xfwfFrame.topShadowStipple = ((XfwfFrameWidget)self)->xfwfFrame.stip4; + if (! ((XfwfFrameWidget)self)->xfwfFrame.bottomShadowStipple) ((XfwfFrameWidget)self)->xfwfFrame.bottomShadowStipple = ((XfwfFrameWidget)self)->xfwfFrame.stip4; + + create_lightgc(self); + create_darkgc(self); +} +/*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; + + if (((XfwfFrameWidget)self)->xfwfFrame.cursor != ((XfwfFrameWidget)old)->xfwfFrame.cursor && XtIsRealized(self)) + XDefineCursor(XtDisplay(self), XtWindow(self), ((XfwfFrameWidget)self)->xfwfFrame.cursor); + + if (((XfwfFrameWidget)self)->xfwfFrame.frameType == XfwfChiseled || ((XfwfFrameWidget)self)->xfwfFrame.frameType == XfwfLedged) + ((XfwfFrameWidget)self)->xfwfFrame.frameWidth = 2 * ((int) (((XfwfFrameWidget)self)->xfwfFrame.frameWidth / 2)); + + if (((XfwfFrameWidget)self)->xfwfFrame.shadowScheme != ((XfwfFrameWidget)old)->xfwfFrame.shadowScheme) { + create_darkgc(self); + create_lightgc(self); + need_redisplay = True; + } else if (((XfwfFrameWidget)self)->xfwfFrame.shadowScheme == XfwfColor) { + if (((XfwfFrameWidget)self)->xfwfFrame.topShadowColor != ((XfwfFrameWidget)old)->xfwfFrame.topShadowColor) { + create_lightgc(self); + need_redisplay = True; + } + if (((XfwfFrameWidget)self)->xfwfFrame.bottomShadowColor != ((XfwfFrameWidget)old)->xfwfFrame.bottomShadowColor) { + create_darkgc(self); + need_redisplay = True; + } + } else if (((XfwfFrameWidget)self)->xfwfFrame.shadowScheme == XfwfStipple) { + if (((XfwfFrameWidget)self)->xfwfFrame.topShadowStipple != ((XfwfFrameWidget)old)->xfwfFrame.topShadowStipple) { + create_lightgc(self); + need_redisplay = True; + } + if (((XfwfFrameWidget)self)->xfwfFrame.bottomShadowStipple != ((XfwfFrameWidget)old)->xfwfFrame.bottomShadowStipple) { + create_darkgc(self); + need_redisplay = True; + } + } + + if (((XfwfFrameWidget)self)->xfwfFrame.outerOffset != ((XfwfFrameWidget)old)->xfwfFrame.outerOffset) + need_redisplay = True; + + if (((XfwfFrameWidget)self)->xfwfFrame.innerOffset != ((XfwfFrameWidget)old)->xfwfFrame.innerOffset) + need_redisplay = True; + + if (((XfwfFrameWidget)self)->xfwfFrame.frameType != ((XfwfFrameWidget)old)->xfwfFrame.frameType) { + ((XfwfFrameWidget)self)->xfwfFrame.old_frame_type = ((XfwfFrameWidget)self)->xfwfFrame.frameType; + need_redisplay = True; + } + + if (((XfwfFrameWidget)self)->xfwfFrame.frameWidth != ((XfwfFrameWidget)old)->xfwfFrame.frameWidth) + need_redisplay = True; + else if (((XfwfFrameWidget)self)->xfwfFrame.frameWidth == 0) + need_redisplay = False; + + return need_redisplay; +} +/*ARGSUSED*/static void expose(self,event,region)Widget self;XEvent * event;Region region; +{ + Position x, y; + Dimension w, h; + + if (! XtIsRealized(self)) return; + if (region != NULL) { + XSetRegion(XtDisplay(self), ((XfwfFrameWidget)self)->xfwfFrame.lightgc, region); + XSetRegion(XtDisplay(self), ((XfwfFrameWidget)self)->xfwfFrame.darkgc, region); + } + xfwfCommonClassRec.xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + XfwfDrawFrame(self, x + ((XfwfFrameWidget)self)->xfwfFrame.outerOffset, y + ((XfwfFrameWidget)self)->xfwfFrame.outerOffset, w - 2*((XfwfFrameWidget)self)->xfwfFrame.outerOffset, + h - 2*((XfwfFrameWidget)self)->xfwfFrame.outerOffset, ((XfwfFrameWidget)self)->xfwfFrame.frameType, ((XfwfFrameWidget)self)->xfwfFrame.frameWidth, ((XfwfFrameWidget)self)->xfwfFrame.lightgc, ((XfwfFrameWidget)self)->xfwfFrame.darkgc); + if (region != NULL) { + XSetClipMask(XtDisplay(self), ((XfwfFrameWidget)self)->xfwfFrame.lightgc, None); + XSetClipMask(XtDisplay(self), ((XfwfFrameWidget)self)->xfwfFrame.darkgc, None); + } + xfwfCommonClassRec.core_class.expose(self, event, region); +} +/*ARGSUSED*/static void compute_inside(self,x,y,w,h)Widget self;Position * x;Position * y;Dimension * w;Dimension * h; +{ + int ww, hh; /* DCT */ + + xfwfCommonClassRec.xfwfCommon_class.compute_inside(self, x, y, w, h); + *x += ((XfwfFrameWidget)self)->xfwfFrame.outerOffset + ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + ((XfwfFrameWidget)self)->xfwfFrame.innerOffset; + *y += ((XfwfFrameWidget)self)->xfwfFrame.outerOffset + ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + ((XfwfFrameWidget)self)->xfwfFrame.innerOffset; + + /* 17Mar94 DCT - keep w,h from wrapping around to 65xxxx. */ + +/* For reasons which are not clear avoiding wrap-around here causes + * geometry management to fail in some circumstances while determining the + * initial frame size during startup. + * + * ww = *w; + * *w = max (0, ww - 2 * (((XfwfFrameWidget)self)->xfwfFrame.outerOffset + + * ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + + * ((XfwfFrameWidget)self)->xfwfFrame.innerOffset)); + * hh = *h; + * *h = max (0, hh - 2 * (((XfwfFrameWidget)self)->xfwfFrame.outerOffset + + * ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + + * ((XfwfFrameWidget)self)->xfwfFrame.innerOffset)); + */ + *w -= 2 * (((XfwfFrameWidget)self)->xfwfFrame.outerOffset + ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + ((XfwfFrameWidget)self)->xfwfFrame.innerOffset); + *h -= 2 * (((XfwfFrameWidget)self)->xfwfFrame.outerOffset + ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + ((XfwfFrameWidget)self)->xfwfFrame.innerOffset); +} + +/*ARGSUSED*/static XtGeometryResult query_geometry(self,request,reply)Widget self;XtWidgetGeometry * request;XtWidgetGeometry * reply; +{ + XtWidgetGeometry request2, reply2; + XtGeometryResult result; + Dimension h; + + if (((XfwfFrameWidget)self)->composite.num_children == 0) return XtGeometryYes; + + /* We're only interested in size and stacking order */ + reply->request_mode = + (CWWidth | CWHeight | CWStackMode) & request->request_mode; + + /* If nothing of interest is left, we can return immediately */ + if (reply->request_mode == 0) + return XtGeometryYes; + + /* Prepare a request to the child */ + h = 2 * (((XfwfFrameWidget)self)->xfwfFrame.outerOffset + ((XfwfFrameWidget)self)->xfwfFrame.frameWidth + ((XfwfFrameWidget)self)->xfwfFrame.innerOffset); + request2.request_mode = reply->request_mode; + request2.width = request->width - h; + request2.height = request->height - h; + request2.sibling = request->sibling; + request2.stack_mode = request->stack_mode; + + result = XtQueryGeometry(((XfwfFrameWidget)self)->composite.children[0], &request2, &reply2); + + /* If the child accepted its proposal, we accept ours */ + if (result == XtGeometryYes) return XtGeometryYes; + + /* If the child doesn't want any change, we don't want any, either */ + if (result == XtGeometryNo) return XtGeometryNo; + + /* Otherwise, ignore everything but size and stacking order */ + reply->request_mode &= reply2.request_mode; + if (reply->request_mode == 0) return XtGeometryYes; + + reply->width = reply2.width + h; + reply->height = reply2.height + h; + reply->sibling = reply2.sibling; + reply->stack_mode = reply2.stack_mode; + return XtGeometryAlmost; +} +/*ARGSUSED*/static XtGeometryResult geometry_manager(child,request,reply)Widget child;XtWidgetGeometry * request;XtWidgetGeometry * reply; +{ Widget self = XtParent(child); { + XtWidgetGeometry request2, reply2; + XtGeometryResult result; + Position x, y; + Dimension w, h, extraw, extrah; + + ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + if (! (request->request_mode & (CWWidth|CWHeight))) return XtGeometryYes; + extraw = ((XfwfFrameWidget)self)->core.width - w; + extrah = ((XfwfFrameWidget)self)->core.height - h; + request2.request_mode = request->request_mode & (CWWidth|CWHeight); + request2.width = request->width + extraw; + request2.height = request->height + extrah; + result = XtMakeGeometryRequest(self, &request2, &reply2); + if (result == XtGeometryNo) return XtGeometryNo; + if (result == XtGeometryYes) return XtGeometryYes; + reply->request_mode = reply2.request_mode & (CWWidth|CWHeight); + reply->width = reply2.width - extraw; + reply->height = reply2.height - extrah; + return XtGeometryAlmost; +} +} +/*ARGSUSED*/static void resize(self)Widget self; +{ + Position x, y; + Dimension w, h; + Widget child; + + if (((XfwfFrameWidget)self)->composite.num_children == 0) return; + ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + child = ((XfwfFrameWidget)self)->composite.children[0]; + w -= 2 * ((XfwfFrameWidget)child)->core.border_width; + h -= 2 * ((XfwfFrameWidget)child)->core.border_width; + XtConfigureWidget(child, x, y, w, h, ((XfwfFrameWidget)child)->core.border_width); +} +/*ARGSUSED*/static void change_managed(self)Widget self; +{ + XtWidgetGeometry request2, reply2; + XtGeometryResult result; + Widget child; + Position x, y; + Dimension w, h; + + if (((XfwfFrameWidget)self)->composite.num_children == 0) return; + ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + child = ((XfwfFrameWidget)self)->composite.children[0]; + request2.request_mode = CWWidth | CWHeight; + request2.width = ((XfwfFrameWidget)child)->core.width + ((XfwfFrameWidget)self)->core.width - w; + request2.height = ((XfwfFrameWidget)child)->core.height + ((XfwfFrameWidget)self)->core.height - h; + result = XtMakeGeometryRequest(self, &request2, &reply2); + ((XfwfFrameWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + w -= 2 * ((XfwfFrameWidget)child)->core.border_width; + h -= 2 * ((XfwfFrameWidget)child)->core.border_width; + XtConfigureWidget(child, x, y, w, h, ((XfwfFrameWidget)child)->core.border_width); +} +/*ARGSUSED*/void XfwfDrawFrame(self,x,y,w,h,tp,t,lightgc,darkgc)Widget self;int x;int y;int w;int h;FrameType tp;int t;GC lightgc;GC darkgc; +{ + XPoint tlPoints[7], brPoints[7]; + + if (t == 0) return; + switch (tp) { + case XfwfRaised: + case XfwfSunken: + tlPoints[0].x = x; tlPoints[0].y = y; + tlPoints[1].x = x + w; tlPoints[1].y = y; + tlPoints[2].x = x + w - t; tlPoints[2].y = y + t; + tlPoints[3].x = x + t; tlPoints[3].y = y + t; + tlPoints[4].x = x + t; tlPoints[4].y = y + h - t; + tlPoints[5].x = x; tlPoints[5].y = y + h; + tlPoints[6].x = x; tlPoints[6].y = y; + brPoints[0].x = x + w; brPoints[0].y = y + h; + brPoints[1].x = x; brPoints[1].y = y + h; + brPoints[2].x = x + t; brPoints[2].y = y + h - t; + brPoints[3].x = x + w - t; brPoints[3].y = y + h - t; + brPoints[4].x = x + w - t; brPoints[4].y = y + t; + brPoints[5].x = x + w; brPoints[5].y = y; + brPoints[6].x = x + w; brPoints[6].y = y + h; + if (tp == XfwfSunken) { + XFillPolygon(XtDisplay(self), XtWindow(self), + darkgc, tlPoints, 7, Nonconvex, CoordModeOrigin); + XFillPolygon(XtDisplay(self), XtWindow(self), + lightgc, brPoints, 7, Nonconvex, CoordModeOrigin); + } else { + XFillPolygon(XtDisplay(self), XtWindow(self), + lightgc, tlPoints, 7, Nonconvex, CoordModeOrigin); + XFillPolygon(XtDisplay(self), XtWindow(self), + darkgc, brPoints, 7, Nonconvex, CoordModeOrigin); + } + break; + case XfwfLedged: + XfwfDrawFrame(self, x, y, w, h, XfwfRaised, t/2, lightgc, darkgc); + XfwfDrawFrame(self, x+t/2, y+t/2, w-2*(int)(t/2), h-2*(int)(t/2), + XfwfSunken, t/2, lightgc, darkgc); + break; + case XfwfChiseled: + XfwfDrawFrame(self, x, y, w, h, XfwfSunken, t/2, lightgc, darkgc); + XfwfDrawFrame(self, x+t/2, y+t/2, w-2*(int)(t/2), h-2*(int)(t/2), + XfwfRaised, t/2, lightgc, darkgc); + break; + } + +} +/*ARGSUSED*/Boolean cvtStringToFrameType(display,args,num_args,from,to,converter_data)Display * display;XrmValuePtr args;Cardinal * num_args;XrmValuePtr from;XrmValuePtr to;XtPointer * converter_data; +{ + String s = (String) from->addr; + + if (*num_args != 0) + XtAppErrorMsg(XtDisplayToApplicationContext(display), + "cvtStringToFrameType", "wrongParameters", + "XtToolkitError", + "String to frame type conversion needs no arguments", + (String*) NULL, (Cardinal*) NULL); + + if (XmuCompareISOLatin1(s, "raised") == 0) done(FrameType, XfwfRaised); + if (XmuCompareISOLatin1(s, "sunken") == 0) done(FrameType, XfwfSunken); + if (XmuCompareISOLatin1(s, "chiseled") == 0) done(FrameType, XfwfChiseled); + if (XmuCompareISOLatin1(s, "ledged") == 0) done(FrameType, XfwfLedged); + XtDisplayStringConversionWarning(display, s, XtRFrameType); + done(FrameType, XfwfRaised); +} +/*ARGSUSED*/Boolean cvtFrameTypeToString(display,args,num_args,from,to,converter_data)Display * display;XrmValuePtr args;Cardinal * num_args;XrmValuePtr from;XrmValuePtr to;XtPointer * converter_data; +{ + if (*num_args != 0) + XtAppErrorMsg(XtDisplayToApplicationContext(display), + "cvtFrameTypeToString", "wrongParameters", + "XtToolkitError", + "Fframe type to String conversion needs no arguments", + (String*) NULL, (Cardinal*) NULL); + switch (*(FrameType*)from->addr) { + case XfwfRaised: done(String, "raised"); + case XfwfSunken: done(String, "sunken"); + case XfwfChiseled: done(String, "chiseled"); + case XfwfLedged: done(String, "ledged"); + default: XtError("Illegal FrameType"); + } +} +/*ARGSUSED*/Boolean cvtStringToShadowScheme(display,args,num_args,from,to,converter_data)Display * display;XrmValuePtr args;Cardinal * num_args;XrmValuePtr from;XrmValuePtr to;XtPointer * converter_data; +{ + String s = (String) from->addr; + + if (*num_args != 0) + XtAppErrorMsg(XtDisplayToApplicationContext(display), + "cvtStringToShadowScheme", "wrongParameters", + "XtToolkitError", + "String to shadow scheme conversion needs no arguments", + (String*) NULL, (Cardinal*) NULL); + + if (XmuCompareISOLatin1(s, "auto")==0) done(ShadowScheme, XfwfAuto); + if (XmuCompareISOLatin1(s, "color")==0) done(ShadowScheme, XfwfColor); + if (XmuCompareISOLatin1(s, "stipple")==0) done(ShadowScheme, XfwfStipple); + XtDisplayStringConversionWarning(display, s, XtRShadowScheme); + done(ShadowScheme, XfwfAuto); +} +/*ARGSUSED*/Boolean cvtShadowSchemeToString(display,args,num_args,from,to,converter_data)Display * display;XrmValuePtr args;Cardinal * num_args;XrmValuePtr from;XrmValuePtr to;XtPointer * converter_data; +{ + if (*num_args != 0) + XtAppErrorMsg(XtDisplayToApplicationContext(display), + "cvtShadowSchemeToString", "wrongParameters", + "XtToolkitError", + "Shadow scheme to String conversion needs no arguments", + (String*) NULL, (Cardinal*) NULL); + + switch (*(ShadowScheme*)from->addr) { + case XfwfAuto: done(String, "auto"); + case XfwfColor: done(String, "color"); + case XfwfStipple: done(String, "stipple"); + default: XtError("Illegal ShadowScheme"); + } +} |