diff options
Diffstat (limited to 'vendor/x11iraf/obm/ObmW/Scrollbar.c')
-rw-r--r-- | vendor/x11iraf/obm/ObmW/Scrollbar.c | 427 |
1 files changed, 427 insertions, 0 deletions
diff --git a/vendor/x11iraf/obm/ObmW/Scrollbar.c b/vendor/x11iraf/obm/ObmW/Scrollbar.c new file mode 100644 index 00000000..bec84d33 --- /dev/null +++ b/vendor/x11iraf/obm/ObmW/Scrollbar.c @@ -0,0 +1,427 @@ +/* Generated by wbuild from "Scrollbar.w" +** (generator version $Revision: 2.0 $ of $Date: 93/07/06 16:08:04 $) +*/ +#include <X11/IntrinsicP.h> +#include <X11/StringDefs.h> +#include "Arrow.h" +#include "Slider2.h" +#include <stdio.h> +#include "ScrollbarP.h" +static void Scroll( +#if NeedFunctionPrototypes +Widget,XEvent*,String*,Cardinal* +#endif +); + +static XtActionsRec actionsList[] = { +{"Scroll", Scroll}, +}; +static void _resolve_inheritance( +#if NeedFunctionPrototypes +WidgetClass +#endif +); +static void initialize( +#if NeedFunctionPrototypes +Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void resize( +#if NeedFunctionPrototypes +Widget +#endif +); +static void insert_child( +#if NeedFunctionPrototypes +Widget +#endif +); +static Boolean set_values( +#if NeedFunctionPrototypes +Widget ,Widget ,Widget,ArgList ,Cardinal * +#endif +); +static void scroll_response( +#if NeedFunctionPrototypes +Widget ,XtPointer ,XtPointer +#endif +); +static char rcsid[] = "$Header: Scrollbar.w,v 1.1 92/11/02 14:08:00 bert Exp $"; +static void up( +#if NeedFunctionPrototypes +Widget ,XtPointer ,XtPointer +#endif +); +static void down( +#if NeedFunctionPrototypes +Widget ,XtPointer ,XtPointer +#endif +); +static void thumbscroll( +#if NeedFunctionPrototypes +Widget ,XtPointer ,XtPointer +#endif +); +static void copy_background( +#if NeedFunctionPrototypes +Widget,int ,XrmValue * +#endif +); +/*ARGSUSED*/static void up(arrow,client_data,call_data)Widget arrow;XtPointer client_data;XtPointer call_data; +{ + Widget self = (Widget) client_data; + XfwfScrollInfo info; + + XfwfGetThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, &info); + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) { + info.reason = XfwfSUp; + info.flags = XFWF_VPOS; + info.vpos = max(0.0, info.vpos - ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + } else { + info.reason = XfwfSLeft; + info.flags = XFWF_HPOS; + info.hpos = max(0.0, info.hpos - ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + } + XtCallCallbackList(self, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollCallback, &info); +} +/*ARGSUSED*/static void down(arrow,client_data,call_data)Widget arrow;XtPointer client_data;XtPointer call_data; +{ + Widget self = (Widget) client_data; + XfwfScrollInfo info; + + XfwfGetThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, &info); + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) { + info.reason = XfwfSDown; + info.flags = XFWF_VPOS; + info.vpos = min(1.0, info.vpos + ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + } else { + info.reason = XfwfSRight; + info.flags = XFWF_HPOS; + info.hpos = min(1.0, info.hpos + ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + } + XtCallCallbackList(self, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollCallback, &info); +} +/*ARGSUSED*/static void thumbscroll(w,client_data,call_data)Widget w;XtPointer client_data;XtPointer call_data; +{ + Widget self = (Widget) client_data; + XfwfScrollInfo *info = (XfwfScrollInfo*) call_data; + + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) + info->flags &= XFWF_VPOS; + else + info->flags &= XFWF_HPOS; + XtCallCallbackList(self, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollCallback, info); +} +/*ARGSUSED*/static void copy_background(self,offset,value)Widget self;int offset;XrmValue * value; +{ + value->addr = (XtPointer) &((XfwfScrollbarWidget)self)->core.background_pixel; +} + +static XtResource resources[] = { +{XtNvertical,XtCVertical,XtRBoolean,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.vertical),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.vertical),XtRImmediate,(XtPointer)True }, +{XtNscrollCallback,XtCScrollCallback,XtRCallback,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.scrollCallback),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.scrollCallback),XtRImmediate,(XtPointer)NULL }, +{XtNscrollResponse,XtCScrollResponse,XtRXTCallbackProc,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.scrollResponse),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.scrollResponse),XtRImmediate,(XtPointer)scroll_response }, +{XtNinitialDelay,XtCInitialDelay,XtRCardinal,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.initialDelay),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.initialDelay),XtRImmediate,(XtPointer)500 }, +{XtNrepeatDelay,XtCRepeatDelay,XtRCardinal,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.repeatDelay),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.repeatDelay),XtRImmediate,(XtPointer)50 }, +{XtNincrement,XtCIncrement,XtRFloat,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.increment),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.increment),XtRString,(XtPointer)"0.05"}, +{XtNscrollbarForeground,XtCScrollbarForeground,XtRPixel,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.scrollbarForeground),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.scrollbarForeground),XtRCallProc,(XtPointer)copy_background }, +{XtNshadow,XtCShadow,XtRDimension,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.shadow),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.shadow),XtRImmediate,(XtPointer)2 }, +{XtNminsize,XtCMinsize,XtRDimension,sizeof(((XfwfScrollbarRec*)NULL)->xfwfScrollbar.minsize),XtOffsetOf(XfwfScrollbarRec,xfwfScrollbar.minsize),XtRImmediate,(XtPointer)20 }, +{XtNframeWidth,XtCFrameWidth,XtRDimension,sizeof(((XfwfScrollbarRec*)NULL)->xfwfFrame.frameWidth),XtOffsetOf(XfwfScrollbarRec,xfwfFrame.frameWidth),XtRImmediate,(XtPointer)2 }, +{XtNframeType,XtCFrameType,XtRFrameType,sizeof(((XfwfScrollbarRec*)NULL)->xfwfFrame.frameType),XtOffsetOf(XfwfScrollbarRec,xfwfFrame.frameType),XtRImmediate,(XtPointer)XfwfSunken }, +}; + +XfwfScrollbarClassRec xfwfScrollbarClassRec = { +{ /* core_class part */ +(WidgetClass) &xfwfBoardClassRec, +"Scrollbar2", +sizeof(XfwfScrollbarRec), +NULL, +_resolve_inheritance, +FALSE, +initialize, +NULL, +XtInheritRealize, +actionsList, +1, +resources, +11, +NULLQUARK, +False , +FALSE , +False , +False , +NULL, +resize, +XtInheritExpose, +set_values, +NULL, +XtInheritSetValuesAlmost, +NULL, +XtInheritAcceptFocus, +XtVersion, +NULL, +NULL, +XtInheritQueryGeometry, +XtInheritDisplayAccelerator, +NULL +}, +{ /* composite_class part */ +XtInheritGeometryManager, +XtInheritChangeManaged, +insert_child, +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, +}, +{ /* XfwfScrollbar_class part */ +scroll_response, +}, +}; +WidgetClass xfwfScrollbarWidgetClass = (WidgetClass) &xfwfScrollbarClassRec; +/*ARGSUSED*/ +static void Scroll(self,event,params,num_params)Widget self;XEvent*event;String*params;Cardinal*num_params; +{ + XfwfScrollInfo info; + + XfwfGetThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, &info); + info.reason = XfwfCvtStringToScrollReason(params[0]); + switch (info.reason) { + case XfwfSUp: + info.flags = XFWF_VPOS; + info.vpos = max(0.0, info.vpos - ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + break; + case XfwfSDown: + info.flags = XFWF_VPOS; + info.vpos = min(1.0, info.vpos + ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + break; + case XfwfSLeft: + info.flags = XFWF_HPOS; + info.hpos = max(0.0, info.hpos - ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + break; + case XfwfSRight: + info.flags = XFWF_HPOS; + info.hpos = min(1.0, info.hpos + ((XfwfScrollbarWidget)self)->xfwfScrollbar.increment); + break; + case XfwfSPageUp: + info.flags = XFWF_VPOS; + info.vpos = max(0.0, info.vpos - info.vsize); + break; + case XfwfSPageDown: + info.flags = XFWF_VPOS; + info.vpos = min(1.0, info.vpos + info.vsize); + break; + case XfwfSPageLeft: + info.flags = XFWF_HPOS; + info.hpos = max(0.0, info.hpos - info.hsize); + break; + case XfwfSPageRight: + info.flags = XFWF_HPOS; + info.hpos = min(1.0, info.hpos + info.hsize); + break; + case XfwfSTop: + info.flags = XFWF_VPOS; + info.vpos = 0.0; + break; + case XfwfSBottom: + info.flags = XFWF_VPOS; + info.vpos = 1.0; + break; + case XfwfSLeftSide: + info.flags = XFWF_HPOS; + info.hpos = 0.0; + break; + case XfwfSRightSide: + info.flags = XFWF_HPOS; + info.hpos = 1.0; + break; + default: break; /* Not understood */ + } + XtCallCallbackList(self, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollCallback, &info); +} + +static void _resolve_inheritance(class) +WidgetClass class; +{ + XfwfScrollbarWidgetClass c = (XfwfScrollbarWidgetClass) class; + XfwfScrollbarWidgetClass 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 == xfwfScrollbarWidgetClass) return; + super = (XfwfScrollbarWidgetClass)class->core_class.superclass; + if (c->xfwfScrollbar_class.scroll_response == XtInherit_scroll_response) + c->xfwfScrollbar_class.scroll_response = super->xfwfScrollbar_class.scroll_response; +} +/*ARGSUSED*/static void initialize(request,self,args,num_args)Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + Position x, y, xa2, xslider, ya2, yslider; + Dimension w, h, wa, ha, wslider, hslider; + + ((XfwfScrollbarWidget)self)->xfwfScrollbar.initializing = True; + ((XfwfScrollbarWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) { + ha = wa = wslider = w; + xa2 = xslider = x; + hslider = (h - 2*ha > 0) ? h - 2*ha : 10; + yslider = y + ha; + ya2 = yslider + hslider; + } else { + wa = ha = hslider = h; + ya2 = yslider = y; + wslider = (w - 2*wa > 0) ? w - 2*wa : 10; + xslider = x + wa; + xa2 = xslider + wslider; + } + ((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow1 = XtVaCreateManagedWidget + ("_arrow1", xfwfArrowWidgetClass, self, + XtNx, x, + XtNy, y, + XtNwidth, wa, + XtNheight, ha, + XtNframeWidth, 0, + XtNforeground, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground, + XtNinitialDelay, ((XfwfScrollbarWidget)self)->xfwfScrollbar.initialDelay, + XtNrepeatDelay, ((XfwfScrollbarWidget)self)->xfwfScrollbar.repeatDelay, + XtNtraversalOn, False, + XtNhighlightThickness, 0, + XtNdirection, ((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical?XfwfTop:XfwfLeft, + XtNouterOffset, 0, + XtNborderWidth, 0, + NULL); + XtAddCallback(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow1, XtNcallback, up, self); + ((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow2 = XtVaCreateManagedWidget + ("_arrow2", xfwfArrowWidgetClass, self, + XtNx, xa2, + XtNy, ya2, + XtNwidth, wa, + XtNheight, ha, + XtNframeWidth, 0, + XtNforeground, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground, + XtNinitialDelay, ((XfwfScrollbarWidget)self)->xfwfScrollbar.initialDelay, + XtNrepeatDelay, ((XfwfScrollbarWidget)self)->xfwfScrollbar.repeatDelay, + XtNtraversalOn, False, + XtNhighlightThickness, 0, + XtNdirection, ((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical?XfwfBottom:XfwfRight, + XtNouterOffset, 0, + XtNborderWidth, 0, + NULL); + XtAddCallback(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow2, XtNcallback, down, self); + ((XfwfScrollbarWidget)self)->xfwfScrollbar.slider = XtVaCreateManagedWidget + ("_slider", xfwfSlider2WidgetClass, self, + XtNx, xslider, + XtNy, yslider, + XtNwidth, wslider, + XtNheight, hslider, + XtNthumbColor, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground, + XtNframeWidth, 0, + XtNinitialDelay, ((XfwfScrollbarWidget)self)->xfwfScrollbar.initialDelay, + XtNrepeatDelay, ((XfwfScrollbarWidget)self)->xfwfScrollbar.repeatDelay, + XtNtraversalOn, False, + XtNhighlightThickness, 0, + XtNouterOffset, 0, + XtNborderWidth, 0, + NULL); + XtAddCallback(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, XtNscrollCallback, thumbscroll, self); + XtVaGetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, XtNscrollResponse, &((XfwfScrollbarWidget)self)->xfwfScrollbar.slider_scroll, NULL); + ((XfwfScrollbarWidget)self)->xfwfScrollbar.initializing = False; +} +/*ARGSUSED*/static void resize(self)Widget self; +{ + Position x, y, xa2, xslider, ya2, yslider; + Dimension w, h, wa, ha, wslider, hslider; + + ((XfwfScrollbarWidgetClass)self->core.widget_class)->xfwfCommon_class.compute_inside(self, &x, &y, &w, &h); + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) { + wa = wslider = w; + xa2 = xslider = x; + ha = 2 * (wa + 1)/3; + hslider = (h - 2*ha > 0) ? h - 2*ha : 10; + yslider = y + ha; + ya2 = yslider + hslider; + } else { + ha = hslider = h; + ya2 = yslider = y; + wa = 2 * (ha + 1)/3; + wslider = (w - 2*wa > 0) ? w - 2*wa : 10; + xslider = x + wa; + xa2 = xslider + wslider; + } + XtConfigureWidget(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow1, x, y, wa, ha, 0); + XtConfigureWidget(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow2, xa2, ya2, wa, ha, 0); + XtConfigureWidget(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, xslider, yslider, wslider, hslider, 0); +} +/*ARGSUSED*/static void insert_child(child)Widget child; +{ Widget self = XtParent(child); { + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.initializing) + xfwfBoardClassRec.composite_class.insert_child(child); + else { + char s[500]; + (void)sprintf(s, "Cannot add children to a scrollbar (\"%s\"->\"%s\")", + XtName(child), XtName(self)); + XtWarning(s); + } +} +} +/*ARGSUSED*/static Boolean set_values(old,request,self,args,num_args)Widget old;Widget request;Widget self;ArgList args;Cardinal * num_args; +{ + if (((XfwfScrollbarWidget)old)->xfwfScrollbar.vertical != ((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) { + XtWarning("Cannot change the \"vertical\" resource of a scrollbar\n"); + ((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical = ((XfwfScrollbarWidget)old)->xfwfScrollbar.vertical; + } + if (((XfwfScrollbarWidget)old)->xfwfScrollbar.scrollbarForeground != ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground) { + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, XtNthumbColor, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground, NULL); + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow1, XtNforeground, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground, NULL); + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow2, XtNforeground, ((XfwfScrollbarWidget)self)->xfwfScrollbar.scrollbarForeground, NULL); + } + if (((XfwfScrollbarWidget)old)->xfwfScrollbar.shadow != ((XfwfScrollbarWidget)self)->xfwfScrollbar.shadow) { + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, XtNthumbFrameWidth, ((XfwfScrollbarWidget)self)->xfwfScrollbar.shadow, NULL); + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow1, XtNarrowShadow, ((XfwfScrollbarWidget)self)->xfwfScrollbar.shadow, NULL); + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.arrow2, XtNarrowShadow, ((XfwfScrollbarWidget)self)->xfwfScrollbar.shadow, NULL); + } + if (((XfwfScrollbarWidget)old)->xfwfScrollbar.minsize != ((XfwfScrollbarWidget)self)->xfwfScrollbar.minsize) { + XtVaSetValues(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, XtNminsize, ((XfwfScrollbarWidget)self)->xfwfScrollbar.minsize, NULL); + } + return False; +} +/*ARGSUSED*/static void scroll_response(wdg,client_data,call_data)Widget wdg;XtPointer client_data;XtPointer call_data; +{ + Widget self = (Widget) client_data; + + ((XfwfScrollbarWidget)self)->xfwfScrollbar.slider_scroll(wdg, ((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, call_data); +} +/*ARGSUSED*/void XfwfSetScrollbar(self,pos,size)Widget self;double pos;double size; +{ + if (! XtIsSubclass(self, xfwfScrollbarWidgetClass)) + XtError("XfwfSetScrollbar called with incorrect widget type"); + if (pos < 0.0 || pos > 1.0 || size < 0.0 || size > 1.0) + XtError("XfwfSetScrollbar called with incorrect arguments"); + if (((XfwfScrollbarWidget)self)->xfwfScrollbar.vertical) { + XfwfResizeThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, 1.0, size); + XfwfMoveThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, 0.0, pos); + } else { + XfwfResizeThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, size, 1.0); + XfwfMoveThumb(((XfwfScrollbarWidget)self)->xfwfScrollbar.slider, pos, 0.0); + } +} |