diff options
Diffstat (limited to 'vendor/x11iraf/obm/ObmW/Table3d.c')
-rw-r--r-- | vendor/x11iraf/obm/ObmW/Table3d.c | 924 |
1 files changed, 924 insertions, 0 deletions
diff --git a/vendor/x11iraf/obm/ObmW/Table3d.c b/vendor/x11iraf/obm/ObmW/Table3d.c new file mode 100644 index 00000000..06fedd0b --- /dev/null +++ b/vendor/x11iraf/obm/ObmW/Table3d.c @@ -0,0 +1,924 @@ +#include <X11/Xraw/3d.h> +#include <X11/Xraw/color.h> + +#define WHITE WhitePixelOfScreen +#define BLACK BlackPixelOfScreen +#define SWITCH(a,b) (top_or_bottom == TOP ? a : b) + +#define DEPTH_SCREEN(w) DefaultDepthOfScreen(XtScreen(w)) + +#ifdef MIN +#undef MIN +#endif +#define MIN(a,b) ((a)<(b) ? (a) : (b)) + +#ifdef MAX +#undef MAX +#endif +#define MAX(a,b) ((a) > (b) ? (a) : (b)) + +#define TOP_VALUE_RATIO (1.3) +#define BOT_VALUE_RATIO (0.6) +#define ARM_VALUE_RATIO (0.85) + +#define Top_Cash (1<<0L) +#define Bot_Cash (1<<1L) +#define Arm_Cash (1<<2L) + +typedef struct _ColorCashRec { + struct _ColorCashRec* nxt; + XColor col; + RGB rgb[1]; + HSV hsv[1]; + RGB top[1]; + RGB bot[1]; + RGB arm[1]; + unsigned int set; +}ColorCashRec, *ColorCash; + +static ColorCashRec* color_cash = NULL; +static void GetTopShadow(); + + +static void GetTopShadow(trom ,to) + XColor* trom; + XColor* to; +{ + ColorCashRec* cash; + float save; + + for (cash = color_cash; cash != NULL; cash = cash->nxt) + { + if (cash->col.red == trom->red && + cash->col.green == trom->green && + cash->col.blue == trom->blue) + { + if (cash->set & Top_Cash) + { + to->red = cash->top[0].r; + to->green = cash->top[0].g; + to->blue = cash->top[0].b; + } + else + { + save = cash->hsv[0].v; + cash->hsv[0].v *= TOP_VALUE_RATIO; + cash->hsv[0].v = MIN(cash->hsv[0].v, 1.0); + + HSVToRGB((HSV*)cash->hsv, (RGB*)cash->top); + + cash->hsv[0].v = save; + + to->red = cash->top[0].r; + to->green = cash->top[0].g; + to->blue = cash->top[0].b; + + cash->set |= Top_Cash; + } + + return; + } + } + + cash = XtNew (ColorCashRec); + + cash->col.red = cash->rgb[0].r = trom->red; + cash->col.green = cash->rgb[0].g = trom->green; + cash->col.blue = cash->rgb[0].b = trom->blue; + + RGBToHSV((RGB*)cash->rgb, (HSV*)cash->hsv); + + save = cash->hsv[0].v; + cash->hsv[0].v *= TOP_VALUE_RATIO; + cash->hsv[0].v = MIN(cash->hsv[0].v, 1.0); + + HSVToRGB((HSV*)cash->hsv, (RGB*)cash->top); + + cash->hsv[0].v = save; + + to->red = cash->top[0].r; + to->green = cash->top[0].g; + to->blue = cash->top[0].b; + + cash->set = Top_Cash; + + cash->nxt = color_cash; + color_cash = cash; +} + +static void GetBotShadow(trom ,to) + XColor* trom; + XColor* to; +{ + ColorCashRec* cash; + float save; + + for (cash = color_cash; cash != NULL; cash = cash->nxt) + { + if (cash->col.red == trom->red && + cash->col.green == trom->green && + cash->col.blue == trom->blue) + { + if (cash->set & Bot_Cash) + { + to->red = cash->bot[0].r; + to->green = cash->bot[0].g; + to->blue = cash->bot[0].b; + } + else + { + save = cash->hsv[0].v; + cash->hsv[0].v *= BOT_VALUE_RATIO; + + HSVToRGB((HSV*)cash->hsv, (RGB*)cash->bot); + + cash->hsv[0].v = save; + + to->red = cash->bot[0].r; + to->green = cash->bot[0].g; + to->blue = cash->bot[0].b; + + cash->set |= Bot_Cash; + } + + return; + } + } + + cash = XtNew (ColorCashRec); + + cash->col.red = cash->rgb[0].r = trom->red; + cash->col.green = cash->rgb[0].g = trom->green; + cash->col.blue = cash->rgb[0].b = trom->blue; + + RGBToHSV((RGB*)cash->rgb, (HSV*)cash->hsv); + + save = cash->hsv[0].v; + cash->hsv[0].v *= BOT_VALUE_RATIO; + + HSVToRGB((HSV*)cash->hsv, (RGB*)cash->bot); + + cash->hsv[0].v = save; + + to->red = cash->bot[0].r; + to->green = cash->bot[0].g; + to->blue = cash->bot[0].b; + + cash->set = Bot_Cash; + + cash->nxt = color_cash; + color_cash = cash; +} + +static void GetArmShadow(trom ,to) + XColor* trom; + XColor* to; +{ + ColorCashRec* cash; + float save; + + for (cash = color_cash; cash != NULL; cash = cash->nxt) + { + if (cash->col.red == trom->red && + cash->col.green == trom->green && + cash->col.blue == trom->blue) + { + if (cash->set & Arm_Cash) + { + to->red = cash->arm[0].r; + to->green = cash->arm[0].g; + to->blue = cash->arm[0].b; + } + else + { + save = cash->hsv[0].v; + cash->hsv[0].v *= ARM_VALUE_RATIO; + + HSVToRGB((HSV*)cash->hsv, (RGB*)cash->arm); + + cash->hsv[0].v = save; + + to->red = cash->arm[0].r; + to->green = cash->arm[0].g; + to->blue = cash->arm[0].b; + + cash->set |= Arm_Cash; + } + + return; + } + } + + cash = XtNew (ColorCashRec); + + cash->col.red = cash->rgb[0].r = trom->red; + cash->col.green = cash->rgb[0].g = trom->green; + cash->col.blue = cash->rgb[0].b = trom->blue; + + RGBToHSV((RGB*)cash->rgb, (HSV*)cash->hsv); + + save = cash->hsv[0].v; + cash->hsv[0].v *= ARM_VALUE_RATIO; + + HSVToRGB((HSV*)cash->hsv, (RGB*)cash->arm); + + cash->hsv[0].v = save; + + to->red = cash->arm[0].r; + to->green = cash->arm[0].g; + to->blue = cash->arm[0].b; + + cash->set = Arm_Cash; + + cash->nxt = color_cash; + color_cash = cash; +} + +unsigned int shadowpm_width = 8; +unsigned int shadowpm_height= 8; + +static unsigned char shadow_bits[] = { + 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55}; + +static unsigned char mtshadowpm_bits[] = { + 0x92, 0x24, 0x49, 0x92, 0x24, 0x49, 0x92, 0x24}; + +static unsigned char mbshadowpm_bits[] = { + 0x6d, 0xdb, 0xb6, 0x6d, 0xdb, 0xb6, 0x6d, 0xdb}; + + +GC +#ifdef Xraw_NEED_PROTO +AllocGCFromPixmap (Widget w, Pixmap pixmap) +#else +AllocGCFromPixmap(w, pixmap) + Widget w; + Pixmap pixmap; +#endif +{ + XGCValues values; + + if (pixmap != None) { + values.tile = pixmap; + values.fill_style = FillTiled; + return XtGetGC(w, (XtGCMask)(GCTile | GCFillStyle), &values); + } + + return XtGetGC(w, (XtGCMask)0, (XGCValues *)NULL); +} + +GC +#ifdef Xraw_NEED_PROTO +AllocGCFromPixel (Widget w, Pixel fore) +#else +AllocGCFromPixel(w, fore) + Widget w; + Pixel fore; +#endif +{ + XGCValues values; + + values.foreground = fore; + return XtGetGC(w, GCForeground, &values); +} + +static Pixmap Depth_1_ShadowPixmap (w, top_or_bottom) + Widget w; + int top_or_bottom; +{ + Screen *scn = XtScreen (w); + + if (DEPTH_SCREEN(w) == 1) + return XCreatePixmapFromBitmapData (XtDisplay (w), + RootWindowOfScreen (scn), + (char *)shadow_bits, + shadowpm_width, + shadowpm_height, + SWITCH(BLACK (scn), WHITE (scn)), + SWITCH(WHITE (scn), BLACK (scn)), + 1); + else + return None; +} + +static Pixmap Depth_NOT_1_ShadowPixmap (w, colour, top_or_bottom) + Widget w; + Pixel colour; + int top_or_bottom; +{ + Display *dpy = XtDisplay (w); + Screen *scn = XtScreen (w); + unsigned long fore; + unsigned long back; + char *pm_data; + int depth = DEPTH_SCREEN(w); + + if (depth == 1) + return None; + + if (colour == WHITE (scn) || colour == BLACK (scn)) { + fore = WHITE (scn); + back = BLACK (scn); + pm_data = SWITCH((char *)mtshadowpm_bits, (char *)mbshadowpm_bits); + } else { + fore = colour; + back = SWITCH (WHITE (scn), BLACK (scn)); + pm_data = (char *)shadow_bits; + } + + return XCreatePixmapFromBitmapData (dpy, + RootWindowOfScreen (scn), + (char *)pm_data, + shadowpm_width, + shadowpm_height, + fore, + back, + depth); +} + +Pixmap +#ifdef Xraw_NEED_PROTO +CreateShadowPixmap (Widget w, Pixel colour, int top_or_bottom) +#else +CreateShadowPixmap (w, colour, top_or_bottom) + Widget w; + Pixel colour; + int top_or_bottom; +#endif +{ + if (DEPTH_SCREEN(w) == 1) + return Depth_1_ShadowPixmap (w, top_or_bottom); + else + return Depth_NOT_1_ShadowPixmap (w, colour, top_or_bottom); +} + +#define _MIN(x,y) (unsigned short) ((x) < (y)) ? (x) : (y) +#define _MAX(x,y) (unsigned short) ((x) < (y)) ? (y) : (x) + + +Boolean +#ifdef Xraw_NEED_PROTO +XrawAllocShadowPixel ( + Widget w, + Pixel base, + int brightness, + Pixel *result) +#else +XrawAllocShadowPixel (w, base, brightness, result) + Widget w; + Pixel base; + int brightness; + Pixel *result; /* RETURN */ +#endif +{ + XColor set; + XColor get; + double mult; + Colormap cmap= ((CoreWidget)w)->core.colormap; + unsigned short red; + unsigned short green; + unsigned short blue; + + get.pixel = base; + XQueryColor (XtDisplay (w), cmap, &get); + mult = (double)(100 + brightness) / ((double) 100.0); + + red = mult * (double)get.red; + green = mult * (double)get.green; + blue = mult * (double)get.blue; + + set.red = _MAX(0,_MIN (65535, red)); + set.green = _MAX(0,_MIN (65535, green)); + set.blue = _MAX(0,_MIN (65535, blue)); + +#define EQ(field) (set.field == get.field) + if (EQ(red) && EQ(green) && EQ(blue)) +#undef EQ + return False; + + if (XAllocColor (XtDisplay (w), cmap, &set) != 0) { + *result = set.pixel; + return True; + } else + return False; +} + +GC +#ifdef Xraw_NEED_PROTO +MakeGC (Widget w, + Pixel base, + int brightness, + Boolean pseudo, + int top_or_bottom) +#else +MakeGC(w, base, brightness, pseudo, top_or_bottom) + Widget w; + Pixel base; + int brightness; + Boolean pseudo; + int top_or_bottom; +#endif +{ + Pixel fore; + Pixmap tile; + + if (DEPTH_SCREEN(w) > 1) { + if (pseudo) { + tile = Depth_NOT_1_ShadowPixmap (w, base, top_or_bottom); + return AllocGCFromPixmap(w, tile); + } else { + if (XrawAllocShadowPixel(w, base, brightness, &fore)) { + return AllocGCFromPixel(w, fore); + } else { + tile = Depth_NOT_1_ShadowPixmap (w, base, top_or_bottom); + return AllocGCFromPixmap(w, tile); + } + } + } else { + tile = Depth_1_ShadowPixmap (w, top_or_bottom); + return AllocGCFromPixmap(w, tile); + } +} + +GC +#ifdef Xraw_NEED_PROTO +MakeTopShadowGC (Widget w, Pixel base) +#else +MakeTopShadowGC(w, base) + Widget w; + Pixel base; +#endif +{ + Pixel fore; + Pixmap tile; + + if (DEPTH_SCREEN(w) > 1) { + if (TopShadowColor(w, base, &fore)) { + return AllocGCFromPixel(w, fore); + } else { + tile = Depth_NOT_1_ShadowPixmap (w, base, TOP); + return AllocGCFromPixmap(w, tile); + } + } else { + tile = Depth_1_ShadowPixmap (w, TOP); + return AllocGCFromPixmap(w, tile); + } +} + + +GC +#ifdef Xraw_NEED_PROTO +MakeBottomShadowGC (Widget w, Pixel base) +#else +MakeBottomShadowGC(w, base) + Widget w; + Pixel base; +#endif +{ + Pixel fore; + Pixmap tile; + + if (DEPTH_SCREEN(w) > 1) { + if (BottomShadowColor(w, base, &fore)) { + return AllocGCFromPixel(w, fore); + } else { + tile = Depth_NOT_1_ShadowPixmap (w, base, BOTTOM); + return AllocGCFromPixmap(w, tile); + } + } else { + tile = Depth_1_ShadowPixmap (w, BOTTOM); + return AllocGCFromPixmap(w, tile); + } +} + +GC +#ifdef Xraw_NEED_PROTO +MakeArmedGC (Widget w, Pixel base) +#else +MakeArmedGC(w, base) + Widget w; + Pixel base; +#endif +{ + Pixel fore; + Pixmap tile; + + if (DEPTH_SCREEN(w) > 1) { + if (ArmedColor(w, base, &fore)) { + return AllocGCFromPixel(w, fore); + } else { + tile = Depth_NOT_1_ShadowPixmap (w, base, BOTTOM); + return AllocGCFromPixmap(w, tile); + } + } else { + tile = Depth_1_ShadowPixmap (w, BOTTOM); + return AllocGCFromPixmap(w, tile); + } +} + +void +#ifdef Xraw_NEED_PROTO +XawDrawFrame (Widget gw, + Position x, + Position y, + Dimension w, + Dimension h, + XawFrameType frame_type, + Dimension t, + GC lightgc, + GC darkgc) +#else +XawDrawFrame (gw, x, y, w, h, frame_type, t, lightgc, darkgc) + Widget gw; + Position x; + Position y; + Dimension w; + Dimension h; + XawFrameType frame_type; + Dimension t; + GC lightgc; + GC darkgc; +#endif +{ + XPoint top_polygon[6]; + XPoint bottom_polygon[6]; + XPoint points[3]; + + + if (t == 0 || w == 0 || h == 0) + return; + + if( lightgc == (GC)NULL ){ + XtWarning("XawDrawFrame: lightgc is NULL in XawDrawFrame."); + return; + } + + if( darkgc == (GC)NULL ){ + XtWarning("XawDrawFrame: darkgc is NULL in XawDrawFrame."); + return; + } + + if (!XtIsRealized(gw)) { + XtWarning("XawDrawFrame: widget is not realized!!!"); + return; + } + +#define topPolygon(i,xx,yy) \ + top_polygon[i].x = (short) (xx); \ + top_polygon[i].y = (short) (yy) + +#define bottomPolygon(i,xx,yy) \ + bottom_polygon[i].x = (short) (xx); \ + bottom_polygon[i].y = (short) (yy) + + + if (frame_type == XawTACK && t <= 2) + frame_type = XawLEDGED; + + switch (frame_type) { + + case XawRAISED : + case XawSUNKEN : + + topPolygon (0,x ,y ); bottomPolygon (0,x+w ,y+h ); + topPolygon (1,x+w ,y ); bottomPolygon (1,x ,y+h ); + topPolygon (2,x+w-t,y+t ); bottomPolygon (2,x+t ,y+h-t); + topPolygon (3,x+t ,y+t ); bottomPolygon (3,x+w-t,y+h-t); + topPolygon (4,x+t ,y+h-t); bottomPolygon (4,x+w-t,y+t ); + topPolygon (5,x ,y+h ); bottomPolygon (5,x+w ,y ); + + if (frame_type == XawSUNKEN) + { + XFillPolygon(XtDisplayOfObject(gw), XtWindowOfObject(gw), darkgc, + top_polygon, 6, Nonconvex, CoordModeOrigin); + + XFillPolygon(XtDisplayOfObject(gw), XtWindowOfObject(gw), lightgc, + bottom_polygon, 6, Nonconvex, CoordModeOrigin); + } + else if (frame_type == XawRAISED) + { + XFillPolygon(XtDisplayOfObject(gw), XtWindowOfObject(gw), lightgc, + top_polygon, 6, Nonconvex, CoordModeOrigin); + XFillPolygon(XtDisplayOfObject(gw), XtWindowOfObject(gw), darkgc, + bottom_polygon, 6, Nonconvex, CoordModeOrigin); + } + + break; + + case XawTACK : + + t -= 2; + + topPolygon (0,x ,y ); bottomPolygon (0,x+w ,y+h ); + topPolygon (1,x+w ,y ); bottomPolygon (1,x ,y+h ); + topPolygon (2,x+w-t,y+t ); bottomPolygon (2,x+t ,y+h-t); + topPolygon (3,x+t ,y+t ); bottomPolygon (3,x+w-t,y+h-t); + topPolygon (4,x+t ,y+h-t); bottomPolygon (4,x+w-t,y+t ); + topPolygon (5,x ,y+h ); bottomPolygon (5,x+w ,y ); + + XFillPolygon(XtDisplayOfObject(gw), XtWindowOfObject(gw), lightgc, + top_polygon, 6, Nonconvex, CoordModeOrigin); + XFillPolygon(XtDisplayOfObject(gw), XtWindowOfObject(gw), darkgc, + bottom_polygon, 6, Nonconvex, CoordModeOrigin); + + points[0].x = x + t + 1; points[0].y = y + h - t - 2; + points[1].x = x + t + 1; points[1].y = y + t + 1; + points[2].x = x + w - t - 2; points[2].y = y + t + 1; + + XDrawLines (XtDisplayOfObject(gw), XtWindowOfObject(gw), darkgc, + points, 3, CoordModeOrigin); + + /* points[0].x = x + t + 1; points[0].y = y + h -t - 1; */ + points[1].x = x + w - t - 2; points[1].y = y + h - t - 2; + /* points[2].x = x + w - t - 1; points[2].y = y + t + 1; */ + + XDrawLines (XtDisplayOfObject(gw), XtWindowOfObject(gw), lightgc, + points, 3, CoordModeOrigin); + + break; + + case XawLEDGED : + + XawDrawFrame(gw, x, y, w, h, XawRAISED, t/2, lightgc, darkgc); + XawDrawFrame(gw, (Position)(x + t/2), (Position)(y + t/2), + (Dimension)(w - 2 * (t/2)), (Dimension)(h - 2 * (t/2)), + XawSUNKEN, t/2, lightgc, darkgc); + break; + + case XawCHISELED : + + XawDrawFrame(gw, x, y, w, h, XawSUNKEN, t/2, lightgc, darkgc); + XawDrawFrame(gw, (Position)(x + t/2),(Position)(y + t/2), + (Dimension)(w - 2 * (t/2)), (Dimension)(h - 2 * (t/2)), + XawRAISED, t/2, lightgc, darkgc); + break; + + default : + break; + + } + +#undef topPolygon +#undef bottomPolygon +} + + +Boolean +#ifdef Xraw_NEED_PROTO +BottomShadowColor( Widget widget, + Pixel base, + Pixel *result) +#else +BottomShadowColor(widget, base, result) + Widget widget; + Pixel base; + Pixel *result; +#endif +{ + Colormap colormap; + XColor color; + + if (XtIsWidget(widget)) + colormap = widget->core.colormap; + else + colormap = (XtParent(widget))->core.colormap; + + color.pixel = base; + + XQueryColor(XtDisplay(widget), colormap, &color); + + GetBotShadow(&color, &color); + + if (XAllocColor (XtDisplay(widget), colormap, &color) != 0) + { + *result = color.pixel; + return True; + } + else + { + HSV hsv; + RGB rgb; + + rgb.r = color.red; + rgb.g = color.green; + rgb.b = color.blue; + + RGBToHSV ((RGB*)&rgb, (HSV*)&hsv); + + if (hsv.v > 0.5) + *result = WhitePixelOfScreen(XtScreen (widget)); + else + *result = BlackPixelOfScreen(XtScreen (widget)); + return True; + } + +} + +Boolean +#ifdef Xraw_NEED_PROTO +TopShadowColor( Widget widget, + Pixel base, + Pixel *result) +#else +TopShadowColor(widget, base, result) + Widget widget; + Pixel base; + Pixel *result; +#endif +{ + Colormap colormap; + XColor color; + + if (XtIsWidget(widget)) + colormap = widget->core.colormap; + else + colormap = (XtParent(widget))->core.colormap; + + color.pixel = base; + + XQueryColor(XtDisplay(widget), colormap, &color); + + GetTopShadow(&color, &color); + + if (XAllocColor (XtDisplay(widget), colormap, &color) != 0) + { + *result = color.pixel; + return True; + } + else + { + HSV hsv; + RGB rgb; + + rgb.r = color.red; + rgb.g = color.green; + rgb.b = color.blue; + + RGBToHSV ((RGB*)&rgb, (HSV*)&hsv); + + if (hsv.v > 0.5) + *result = WhitePixelOfScreen(XtScreen (widget)); + else + *result = BlackPixelOfScreen(XtScreen (widget)); + return True; + } + +} + +Boolean +#ifdef Xraw_NEED_PROTO +ArmedColor( Widget widget, + Pixel base, + Pixel *result) +#else +ArmedColor(widget, base, result) + Widget widget; + Pixel base; + Pixel *result; +#endif +{ + Colormap colormap; + XColor color; + + if (XtIsWidget(widget)) + colormap = widget->core.colormap; + else + colormap = (XtParent(widget))->core.colormap; + + color.pixel = base; + + XQueryColor(XtDisplay(widget), colormap, &color); + + GetArmShadow(&color, &color); + + if (XAllocColor (XtDisplay(widget), colormap, &color) != 0) + { + *result = color.pixel; + return True; + } + else + { + HSV hsv; + RGB rgb; + + rgb.r = color.red; + rgb.g = color.green; + rgb.b = color.blue; + + RGBToHSV ((RGB*)&rgb, (HSV*)&hsv); + + if (hsv.v > 0.5) + *result = WhitePixelOfScreen(XtScreen (widget)); + else + *result = BlackPixelOfScreen(XtScreen (widget)); + return True; + } + +} + + + +#undef assign_max +#undef assign_min + + +void +#ifdef Xraw_NEED_PROTO +DrawRhombus ( + Widget w, + short x, + short y, + short g, + short t, + GC top_shadow_GC, + GC foreground_gc, + GC bottom_shadow_GC, + Boolean state ) +#else +DrawRhombus(w, x, y, g, t, + top_shadow_GC, foreground_gc, bottom_shadow_GC, state) + Widget w; + short x; + short y; + short g; + short t; + GC top_shadow_GC; + GC foreground_gc; + GC bottom_shadow_GC; + Boolean state; +#endif +{ + XPoint top_shade[6]; + XPoint bot_shade[6]; + XPoint center[4]; + +#define topPolygon(i,a,b) top_shade[i].x = a; top_shade[i].y = b +#define bottomPolygon(i,a,b) bot_shade[i].x = a; bot_shade[i].y = b +#define centerPolygon(i,a,b) center[i].x = a; center[i].y = b + + topPolygon(0, x-g , y ); bottomPolygon(0, x-g , y ); + topPolygon(1, x-g+t, y ); bottomPolygon(1, x-g+t, y ); + topPolygon(2, x , y-g+t); bottomPolygon(2, x , y+g-t); + topPolygon(3, x+g-t, y ); bottomPolygon(3, x+g-t, y ); + topPolygon(4, x+g , y ); bottomPolygon(4, x+g , y ); + topPolygon(5, x , y-g ); bottomPolygon(5, x , y+g ); + + if (state) + { + if (foreground_gc) + { + centerPolygon(0, x-g+t, y ); + centerPolygon(1, x , y-g+t); + centerPolygon(2, x+g-t, y ); + centerPolygon(3, x , y+g-t); + + XFillPolygon(XtDisplayOfObject(w), XtWindowOfObject(w), foreground_gc, + center, XtNumber(center), + Convex, CoordModeOrigin); + } + + if (bottom_shadow_GC) + XFillPolygon(XtDisplayOfObject(w), XtWindowOfObject(w), bottom_shadow_GC, + top_shade, XtNumber(top_shade), Nonconvex, CoordModeOrigin); + + if (top_shadow_GC) + XFillPolygon(XtDisplayOfObject(w), XtWindowOfObject(w), top_shadow_GC, + bot_shade, XtNumber(bot_shade), Nonconvex, CoordModeOrigin); + }else{ + + if (top_shadow_GC) + XFillPolygon(XtDisplayOfObject(w), XtWindowOfObject(w), top_shadow_GC, + top_shade, XtNumber(top_shade), + Nonconvex, CoordModeOrigin); + + if (bottom_shadow_GC) + XFillPolygon(XtDisplayOfObject(w), XtWindowOfObject(w), bottom_shadow_GC, + bot_shade, XtNumber(bot_shade), + Nonconvex, CoordModeOrigin); + } + +#undef topPolygon +#undef bottomPolygon +#undef centerPolygon + +} + +Boolean +#ifdef Xraw_NEED_PROTO +FetchPixel (Widget w, String name, Pixel* pixel) +#else +FetchPixel(w, name, pixel) + Widget w; + String name; + Pixel* pixel; +#endif +{ + XrmValue source, dest; + + source.size = strlen(name)+1; + source.addr = name; + dest.size = sizeof(Pixel); + dest.addr = (caddr_t) pixel; + + return XtConvertAndStore(w, XtRString, &source, XtRPixel, &dest); +} |