Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
DISCONTINUED:openSUSE:11.2
xaw3d
Xaw3d-1.5E-thumb.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File Xaw3d-1.5E-thumb.patch of Package xaw3d
--- AsciiSink.c +++ AsciiSink.c 2005-11-29 15:54:05.000000000 +0100 @@ -174,13 +174,14 @@ return 0; } - if ( (nonPrinting = (c < (unsigned char) XawSP)) ) + if ( (nonPrinting = (c < (unsigned char) XawSP)) ) { if (sink->ascii_sink.display_nonprinting) c += '@'; else { c = XawSP; nonPrinting = False; } + } if (font->per_char && (c >= font->min_char_or_byte2 && c <= font->max_char_or_byte2)) @@ -661,12 +662,13 @@ XA_FIGURE_WIDTH = XInternAtom(XtDisplayOfObject(w), "FIGURE_WIDTH", FALSE); if ( (XA_FIGURE_WIDTH != None) && ( (!XGetFontProperty(font, XA_FIGURE_WIDTH, &figure_width)) || - (figure_width == 0)) ) + (figure_width == 0)) ) { if (font->per_char && font->min_char_or_byte2 <= '$' && font->max_char_or_byte2 >= '$') figure_width = font->per_char['$' - font->min_char_or_byte2].width; else figure_width = font->max_bounds.width; + } if (tab_count > sink->text_sink.tab_count) { sink->text_sink.tabs = (Position *) --- Form.c +++ Form.c 2005-11-29 15:54:05.000000000 +0100 @@ -780,7 +780,7 @@ reply->width = w->form.preferred_width; reply->height = w->form.preferred_height; reply->request_mode = CWWidth | CWHeight; - if ( request->request_mode & (CWWidth | CWHeight) == + if ( (request->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight) && request->width == reply->width && request->height == reply->height) --- Layout.c +++ Layout.c 2005-11-29 15:54:05.000000000 +0100 @@ -537,7 +537,7 @@ ExprPtr expr; double natural; { - double left, right, down; + double left = 0.0, right = 0.0, down = 0.0; Widget widget; SubInfoPtr info; --- MultiSink.c +++ MultiSink.c 2005-11-29 15:54:05.000000000 +0100 @@ -203,12 +203,13 @@ return 0; } - if (XwcTextEscapement (fontset, &c, 1) == 0) + if (XwcTextEscapement (fontset, &c, 1) == 0) { if (sink->multi_sink.display_nonprinting) c = _Xaw_atowc('@'); else { c = _Xaw_atowc(XawSP); } + } /* * if more efficiency(suppose one column is one ASCII char) @@ -730,12 +731,13 @@ XA_FIGURE_WIDTH = XInternAtom(XtDisplayOfObject(w), "FIGURE_WIDTH", FALSE); if ( (XA_FIGURE_WIDTH != None) && ( (!XGetFontProperty(font, XA_FIGURE_WIDTH, &figure_width)) || - (figure_width == 0)) ) + (figure_width == 0)) ) { if (font->per_char && font->min_char_or_byte2 <= '$' && font->max_char_or_byte2 >= '$') figure_width = font->per_char['$' - font->min_char_or_byte2].width; else figure_width = font->max_bounds.width; + } if (tab_count > sink->text_sink.tab_count) { sink->text_sink.tabs = (Position *) --- Paned.c +++ Paned.c 2005-11-29 15:54:05.000000000 +0100 @@ -1157,12 +1157,14 @@ managedP = managed_grips = (WidgetList) XtMalloc(alloc_size); unmanagedP = unmanaged_grips = (WidgetList) XtMalloc(alloc_size); - ForAllChildren(pw, childP) - if (IsPane(*childP) && HasGrip(*childP)) + ForAllChildren(pw, childP) { + if (IsPane(*childP) && HasGrip(*childP)) { if ( XtIsManaged(*childP) ) *managedP++ = PaneInfo(*childP)->grip; else *unmanagedP++ = PaneInfo(*childP)->grip; + } + } if (managedP != managed_grips) { *unmanagedP++ = *--managedP; /* Last grip is never managed */ @@ -1194,11 +1196,12 @@ XtSetArg(arglist[num_args], XtNtranslations, pw->paned.grip_translations); num_args++; - if ( (cursor = pw->paned.grip_cursor) == None ) + if ( (cursor = pw->paned.grip_cursor) == None ) { if (IsVert(pw)) cursor = pw->paned.v_grip_cursor; else cursor = pw->paned.h_grip_cursor; + } XtSetArg(arglist[num_args], XtNcursor, cursor); num_args++; @@ -1310,11 +1313,12 @@ Arg arglist[1]; Cursor cursor; - if ( (cursor = pw->paned.grip_cursor) == None ) + if ( (cursor = pw->paned.grip_cursor) == None ) { if ( IsVert(pw) ) cursor = pw->paned.v_grip_cursor; else cursor = pw->paned.h_grip_cursor; + } if (HasGrip (*childP)) { XtSetArg(arglist[0], XtNcursor, cursor); @@ -1489,11 +1493,12 @@ * a different on_size; */ - if (result != XtGeometryNo) + if (result != XtGeometryNo) { if (vert) pw->core.height = on_size; else pw->core.width = on_size; + } RefigureLocations(pw, PaneIndex(w), AnyPane); @@ -1524,11 +1529,12 @@ * THEN: set almost */ - if ( !((vert ? CWWidth : CWHeight) & mask)) + if ( !((vert ? CWWidth : CWHeight) & mask)) { if (vert) request->width = w->core.width; else request->height = w->core.height; + } almost = GetRequestInfo(request, !vert) != GetRequestInfo(reply, !vert); almost |= (GetRequestInfo(request, vert) != GetRequestInfo(reply, vert)); @@ -1673,8 +1679,8 @@ ResortChildren(pw); pw->paned.num_panes = 0; - ForAllChildren(pw, childP) - if ( IsPane(*childP) ) + ForAllChildren(pw, childP) { + if ( IsPane(*childP) ) { if ( XtIsManaged(*childP) ) { Pane pane = PaneInfo(*childP); if (HasGrip(*childP)) @@ -1684,6 +1690,8 @@ } else break; /* This list is already sorted. */ + } + } SetChildrenPrefSizes( (PanedWidget) w, size); @@ -1806,7 +1814,7 @@ /* Check for change in XtNshowGrip. */ - if (old_pane->show_grip != new_pane->show_grip) + if (old_pane->show_grip != new_pane->show_grip) { if (new_pane->show_grip == TRUE) { CreateGrip(new); if (XtIsRealized(XtParent(new))) { @@ -1822,6 +1830,7 @@ new_pane->grip = NULL; redisplay = TRUE; } + } /* ||| need to look at position changes */ --- Panner.c +++ Panner.c 2005-11-29 15:54:05.000000000 +0100 @@ -36,7 +36,7 @@ #include <X11/Xmu/Misc.h> /* for Min */ #include <X11/Xmu/Drawing.h> #include <ctype.h> /* for isascii() etc. */ -#include <math.h> /* for atof() */ +#include <stdlib.h> /* for atof() */ extern Bool XmuDistinguishablePixels(); /* not defined in any Xmu headers */ --- Scrollbar.c +++ Scrollbar.c 2005-11-29 15:56:40.000000000 +0100 @@ -130,14 +130,18 @@ Offset(scrollbar.thumb), XtRImmediate, (XtPointer) XtUnspecifiedPixmap}, {XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel), Offset(scrollbar.foreground), XtRString, XtDefaultForeground}, + {XtNscrollbarBackground, XtCScrollbarBackground, XtRPixel, sizeof(Pixel), + Offset(scrollbar.background), XtRString, XtDefaultForeground}, {XtNshown, XtCShown, XtRFloat, sizeof(float), Offset(scrollbar.shown), XtRFloat, (XtPointer)&floatZero}, {XtNtopOfThumb, XtCTopOfThumb, XtRFloat, sizeof(float), Offset(scrollbar.top), XtRFloat, (XtPointer)&floatZero}, {XtNpickTop, XtCPickTop, XtRBoolean, sizeof(Boolean), - Offset(scrollbar.pick_top), XtRBoolean, (XtPointer) False}, + Offset(scrollbar.pick_top), XtRImmediate, (XtPointer) False}, {XtNminimumThumb, XtCMinimumThumb, XtRDimension, sizeof(Dimension), - Offset(scrollbar.min_thumb), XtRImmediate, (XtPointer) 7} + Offset(scrollbar.min_thumb), XtRImmediate, (XtPointer) 7}, + {XtNpushThumb, XtCPushThumb, XtRBoolean, sizeof(Boolean), + Offset(scrollbar.push_thumb), XtRImmediate, (XtPointer) True} }; #undef Offset @@ -211,8 +215,7 @@ /* change_sensitive */ XtInheritChangeSensitive }, { /* threeD fields */ - /* shadowdraw */ XtInheritXaw3dShadowDraw /*,*/ - /* shadowboxdraw */ /*XtInheritXaw3dShadowBoxDraw*/ + /* shadowdraw */ XtInheritXaw3dShadowDraw }, { /* scrollbar fields */ /* ignore */ 0 @@ -224,7 +227,7 @@ #define NoButton -1 #define PICKLENGTH(widget, x, y) \ - ((widget->scrollbar.orientation == XtorientHorizontal) ? x : y) + ((widget->scrollbar.orientation == XtorientHorizontal) ? (x) : (y)) #define MIN(x,y) ((x) < (y) ? (x) : (y)) #define MAX(x,y) ((x) > (y) ? (x) : (y)) @@ -242,6 +245,18 @@ #define MARGIN(sbw) (sbw)->threeD.shadow_width #endif +/* + Used to swap X and Y coordinates when the scrollbar is horizontal. + */ +static void swap(a, b) + Dimension *a, *b; +{ + Dimension tmp = *a; + *a = *b; + *b = tmp; +} + + /* The original Xaw Scrollbar's FillArea *really* relied on the fact that the server was going to clip at the window boundaries; so the logic was really @@ -280,11 +295,11 @@ if (lh <= 0 || lw <= 0) return; if (fill) { XFillRectangle(XtDisplay((Widget) sbw), XtWindow((Widget) sbw), - sbw->scrollbar.gc, + sbw->scrollbar.gc, lx, ly, (unsigned int) lw, (unsigned int) lh); } else { XClearArea (XtDisplay((Widget) sbw), XtWindow((Widget) sbw), - lx, ly, (unsigned int) lw, (unsigned int) lh, + lx, ly, (unsigned int) lw, (unsigned int) lh, FALSE); } } @@ -293,163 +308,375 @@ sbw->shown. The old area is erased. The painting and erasing is done cleverly so that no flickering will occur. */ -static void PaintThumb (sbw, event) +static void PaintThumb (sbw, pressed, shadow) ScrollbarWidget sbw; - XEvent *event; + int pressed, shadow; { - Dimension s = sbw->threeD.shadow_width; - Position oldtop = sbw->scrollbar.topLoc; - Position oldbot = oldtop + sbw->scrollbar.shownLength; - Dimension margin = MARGIN (sbw); - Dimension tzl = sbw->scrollbar.length - margin - margin; - Position newtop, newbot; - Position floor = sbw->scrollbar.length - margin; + Dimension margin, tzl; + Position floor; + Position oldtop = sbw->scrollbar.topLoc; + Position oldbot = oldtop + sbw->scrollbar.shownLength; + Position newtop, newbot; + Dimension x, y; /* upper-left corner of rectangle */ + Dimension w, h; /* size of rectangle */ + Dimension sw = sbw->threeD.shadow_width; + Dimension th = sbw->scrollbar.thickness; + XPoint ipt[4],opt[4]; /* inner and outer points of thumb */ + XPoint pt[4]; /* points used for drawing */ + Display *dpy = XtDisplay (sbw); + Window win = XtWindow (sbw); + double thumb_len; + + margin = MARGIN (sbw); + tzl = sbw->scrollbar.length - 2*margin; + floor = sbw->scrollbar.length - margin; newtop = margin + (int)(tzl * sbw->scrollbar.top); - newbot = newtop + (int)(tzl * sbw->scrollbar.shown); - if (sbw->scrollbar.shown < 1.) newbot++; - if (newbot < newtop + (int)sbw->scrollbar.min_thumb + - 2 * (int)sbw->threeD.shadow_width) - newbot = newtop + sbw->scrollbar.min_thumb + - 2 * sbw->threeD.shadow_width; - if ( newbot >= floor ) { - newtop = floor-(newbot-newtop)+1; + thumb_len = tzl * sbw->scrollbar.shown; + newbot = newtop + (int)thumb_len; + if ((thumb_len - (int)thumb_len) > 0.5) ++newbot; + + if (newbot < newtop + (int)sbw->scrollbar.min_thumb + 2 * (int)sw) + newbot = newtop + sbw->scrollbar.min_thumb + 2 * sw; + + if (newbot >= floor) { + newtop = floor - (newbot-newtop) + 1; newbot = floor; } sbw->scrollbar.topLoc = newtop; sbw->scrollbar.shownLength = newbot - newtop; + if (XtIsRealized ((Widget) sbw)) { - /* 3D thumb wanted ? - */ - if (s) - { - if (newtop < oldtop) FillArea(sbw, oldtop, oldtop + s, 0); - if (newtop > oldtop) FillArea(sbw, oldtop, MIN(newtop, oldbot), 0); - if (newbot < oldbot) FillArea(sbw, MAX(newbot, oldtop), oldbot, 0); - if (newbot > oldbot) FillArea(sbw, oldbot - s, oldbot, 0); - - if (sbw->scrollbar.orientation == XtorientHorizontal) - { - _ShadowSurroundedBox((Widget)sbw, (ThreeDWidget)sbw, - newtop, s, newbot, sbw->core.height - s, - sbw->threeD.relief, TRUE); - } - else - { - _ShadowSurroundedBox((Widget)sbw, (ThreeDWidget)sbw, - s, newtop, sbw->core.width - s, newbot, - sbw->threeD.relief, TRUE); - } - } - else - { - /* - Note to Mitch: FillArea is (now) correctly implemented to - not draw over shadows or the arrows. Therefore setting clipmasks - doesn't seem to be necessary. Correct me if I'm wrong! - */ - if (newtop < oldtop) FillArea(sbw, newtop, MIN(newbot, oldtop), 1); - if (newtop > oldtop) FillArea(sbw, oldtop, MIN(newtop, oldbot), 0); - if (newbot < oldbot) FillArea(sbw, MAX(newbot, oldtop), oldbot, 0); - if (newbot > oldbot) FillArea(sbw, MAX(newtop, oldbot), newbot, 1); - } + /* 3D? */ + if (sw) { + GC top, bot; + GC back = sbw->scrollbar.bgc; + GC fore = sbw->scrollbar.gc; + + if ((pressed && sbw->scrollbar.push_thumb) ^ sbw->threeD.invert_border) { + top = sbw->threeD.bot_shadow_GC; + bot = sbw->threeD.top_shadow_GC; + } else { + top = sbw->threeD.top_shadow_GC; + bot = sbw->threeD.bot_shadow_GC; + } + + /* the space above the thumb */ + x = sw; + y = margin; + w = th - sw * 2; + h = newtop - y; + if (sbw->scrollbar.orientation == XtorientHorizontal) { + swap(&x, &y); + swap(&w, &h); + } + XFillRectangle(dpy, win, back, x, y, (unsigned int)w, (unsigned int)h); + + /* the space below the thumb */ + x = sw; + y = newbot; + w = th - sw * 2; + h = tzl + margin - newbot; + if (sbw->scrollbar.orientation == XtorientHorizontal) { + swap(&x, &y); + swap(&w, &h); + } + XFillRectangle(dpy, win, back, x, y, (unsigned int)w, (unsigned int)h); + + /* Return here if only the shadows should be repainted */ + if (shadow) return; + + /* the thumb itself */ + x = sw * 2; + y = newtop + sw; + w = th - sw * 4; + h = newbot - newtop - 2 * sw; + if (sbw->scrollbar.orientation == XtorientHorizontal) { + swap(&x, &y); + swap(&w, &h); + } + /* we can't use "w > 0" and "h > 0" because they are + usually unsigned quantities */ + if (th - sw * 4 > 0 && newbot - newtop - 2 * sw > 0) + XFillRectangle(dpy, win, fore, x, y, (unsigned int)w, (unsigned int)h); + + /* the shades around the thumb + + o0 +--------------+ o3 + |\ i0 i3 /| + | +----------+ | + | | | | + | | | | + | | | | + | +----------+ | + |/ i1 i2 \| + o1 +--------------+ o2 + + */ + opt[0].x = opt[1].x = sw; + opt[0].y = opt[3].y = newtop; + opt[2].x = opt[3].x = th - sw; + opt[2].y = opt[1].y = newbot; + + ipt[0].x = ipt[1].x = opt[0].x + sw; + ipt[0].y = ipt[3].y = opt[0].y + sw; + ipt[2].x = ipt[3].x = opt[2].x - sw; + ipt[2].y = ipt[1].y = opt[2].y - sw; + + /* make sure shades don't overlap */ + if (ipt[0].x > ipt[3].x) + ipt[3].x = ipt[2].x = ipt[1].x = ipt[0].x = (ipt[0].x + ipt[3].x) / 2; + if (ipt[0].y > ipt[1].y) + ipt[3].y = ipt[2].y = ipt[1].y = ipt[0].y = (ipt[0].y + ipt[1].y) / 2; + if (sbw->scrollbar.orientation == XtorientHorizontal) { + int n; + for (n = 0; n < 4; n++) { + swap(&ipt[n].x, &ipt[n].y); + swap(&opt[n].x, &opt[n].y); + } + } + + /* left */ + pt[0] = opt[0]; + pt[1] = opt[1]; + pt[2] = ipt[1]; + pt[3] = ipt[0]; + XFillPolygon (dpy, win, top, pt, 4, Convex, CoordModeOrigin); + + /* top */ + pt[0] = opt[0]; + pt[1] = opt[3]; + pt[2] = ipt[3]; + pt[3] = ipt[0]; + XFillPolygon (dpy, win, top, pt, 4, Convex, CoordModeOrigin); + + /* bottom */ + pt[0] = opt[1]; + pt[1] = opt[2]; + pt[2] = ipt[2]; + pt[3] = ipt[1]; + XFillPolygon (dpy, win, bot, pt, 4, Convex, CoordModeOrigin); + + /* right */ + pt[0] = opt[3]; + pt[1] = opt[2]; + pt[2] = ipt[2]; + pt[3] = ipt[3]; + XFillPolygon (dpy, win, bot, pt, 4, Convex, CoordModeOrigin); + + + } else { + /* Return here if only the shadows should be repainted */ + if (shadow) return; + + /* + * Note to Mitch: FillArea is (now) correctly implemented to + * not draw over shadows or the arrows. Therefore setting clipmasks + * doesn't seem to be necessary. Correct me if I'm wrong! + */ + if (newtop < oldtop) FillArea(sbw, newtop, MIN(newbot, oldtop), 1); + if (newtop > oldtop) FillArea(sbw, oldtop, MIN(newtop, oldbot), 0); + if (newbot < oldbot) FillArea(sbw, MAX(newbot, oldtop), oldbot, 0); + if (newbot > oldbot) FillArea(sbw, MAX(newtop, oldbot), newbot, 1); + } } } #ifdef XAW_ARROW_SCROLLBARS -static void PaintArrows (sbw) +static void PaintArrows (sbw, toppressed, botpressed) ScrollbarWidget sbw; + int toppressed, botpressed; { - XPoint pt[20]; - Dimension s = sbw->threeD.shadow_width; - Dimension t = sbw->scrollbar.thickness; - Dimension l = sbw->scrollbar.length; - Dimension tms = t - s, lms = l - s; - Dimension tm1 = t - 1; - Dimension lmt = l - t; - Dimension lp1 = lmt + 1; - Dimension sm1 = s - 1; - Dimension t2 = t / 2; - Dimension sa30 = (Dimension)(1.732 * s ); /* cotangent of 30 deg */ - Display *dpy = XtDisplay (sbw); - Window win = XtWindow (sbw); - GC top = sbw->threeD.top_shadow_GC; - GC bot = sbw->threeD.bot_shadow_GC; - + XPoint ipt[6], opt[6]; /* inner and outer points */ + XPoint rpt[4]; /* the rectangle around arrows */ + XPoint tpt[6]; /* temporary for args to XFillPolygon */ + Dimension sw = sbw->threeD.shadow_width; + Dimension th = sbw->scrollbar.thickness; + Dimension len = sbw->scrollbar.length; + Display *dpy = XtDisplay (sbw); + Window win = XtWindow (sbw); + GC top, bot; + GC back = sbw->scrollbar.bgc; + GC fore = sbw->scrollbar.gc; if (XtIsRealized ((Widget) sbw)) { /* 3D arrows? */ - if (s) { - /* upper/right arrow */ - pt[0].x = sm1; pt[0].y = tm1; - pt[1].x = t2; pt[1].y = sm1; - pt[2].x = t2; pt[2].y = s + sa30; - pt[3].x = sm1 + sa30; pt[3].y = tms - 1; - - pt[4].x = sm1; pt[4].y = tm1; - pt[5].x = tms; pt[5].y = tm1; - pt[6].x = t2; pt[6].y = sm1; - pt[7].x = t2; pt[7].y = s + sa30; - pt[8].x = tms - sa30; pt[8].y = tms - 1; - pt[9].x = sm1 + sa30; pt[9].y = tms - 1; - - /* lower/left arrow */ - pt[10].x = tms; pt[10].y = lp1; - pt[11].x = s; pt[11].y = lp1; - pt[12].x = t2; pt[12].y = lms; - pt[13].x = t2; pt[13].y = lms - sa30; - pt[14].x = s + sa30; pt[14].y = lmt + s + 1; - pt[15].x = tms - sa30; pt[15].y = lmt + s + 1; - - pt[16].x = tms; pt[16].y = lp1; - pt[17].x = t2; pt[17].y = lms; - pt[18].x = t2; pt[18].y = lms - sa30; - pt[19].x = tms - sa30; pt[19].y = lmt + s + 1; + if (sw) { + /* + The points are numbered like this: + + r0 +---------+ r3 + | ^ o2 | + | /|\ | a = i0 + | /c^ \ | b = i1 + | / / \ \ | c = i2 + |/a<--->b\| + o0 +---------+ o1 + | | + | | + o3 +---------+ o4 + |\d<--->e/| + | \ \ / / | d = i3 + | \fv / | e = i4 + | \|/ | f = i5 + | v o5 | + r1 +---------+ r2 + */ + + rpt[0].x = rpt[1].x = opt[0].x = opt[3].x = sw; + ipt[0].x = ipt[3].x = sw * 2.5; + opt[2].x = opt[5].x = ipt[2].x = ipt[5].x = th / 2; + ipt[1].x = ipt[4].x = th - (int)(sw * 2.5); + rpt[2].x = rpt[3].x = opt[1].x = opt[4].x = th - sw; + + rpt[0].y = rpt[3].y = opt[2].y = sw; + ipt[2].y = sw * 3.2; + ipt[0].y = ipt[1].y = th - sw; + opt[0].y = opt[1].y = th; + opt[3].y = opt[4].y = len - th; + ipt[3].y = ipt[4].y = len - th + sw; + ipt[5].y = len - (int)(sw * 3.2); + rpt[1].y = rpt[2].y = opt[5].y = len - sw; + + /* some ugly kludges to make them look right */ + opt[2].y--; + opt[0].x--; + ipt[2].y--; + ipt[0].x--; + + /* make sure shades don't overlap */ + if (ipt[0].x > ipt[1].x) { + Dimension tmp = (ipt[0].x + ipt[1].x) / 2; + ipt[4].x = ipt[3].x = ipt[1].x = ipt[0].x = tmp; + } + if (ipt[0].y < ipt[2].y) { + ipt[2].y = ipt[1].y = ipt[0].y = (ipt[0].y + ipt[2].y) / 2; + ipt[5].y = ipt[4].y = ipt[3].y = (ipt[3].y + ipt[5].y) / 2; + } - /* horizontal arrows require that x and y coordinates be swapped */ + /* horizontal arrows require that x and y coordinates be swapped */ if (sbw->scrollbar.orientation == XtorientHorizontal) { int n; - int swap; - for (n = 0; n < 20; n++) { - swap = pt[n].x; - pt[n].x = pt[n].y; - pt[n].y = swap; + for (n = 0; n < 6; n++) { + swap(&ipt[n].x, &ipt[n].y); + swap(&opt[n].x, &opt[n].y); } + for (n = 0; n < 4; n++) + swap(&rpt[n].x, &rpt[n].y); + } + + if (toppressed ^ sbw->threeD.invert_border) { + top = sbw->threeD.bot_shadow_GC; + bot = sbw->threeD.top_shadow_GC; + } else { + top = sbw->threeD.top_shadow_GC; + bot = sbw->threeD.bot_shadow_GC; } - XFillPolygon (dpy, win, top, pt, 4, Complex, CoordModeOrigin); - XFillPolygon (dpy, win, bot, pt + 4, 6, Complex, CoordModeOrigin); - XFillPolygon (dpy, win, top, pt + 10, 6, Complex, CoordModeOrigin); - XFillPolygon (dpy, win, bot, pt + 16, 4, Complex, CoordModeOrigin); + + /* top-left background */ + tpt[0] = rpt[0]; + tpt[1] = opt[0]; + tpt[2] = opt[2]; + XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); + + /* top-right background */ + tpt[0] = rpt[3]; + tpt[1] = opt[2]; + tpt[2] = opt[1]; + XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); + + /* the right shade */ + tpt[0] = opt[1]; + tpt[1] = opt[2]; + tpt[2] = ipt[2]; + tpt[3] = ipt[1]; + XFillPolygon (dpy, win, bot, tpt, 4, Convex, CoordModeOrigin); + + /* the left shade */ + tpt[0] = opt[2]; + tpt[1] = opt[0]; + tpt[2] = ipt[0]; + tpt[3] = ipt[2]; + XFillPolygon (dpy, win, top, tpt, 4, Convex, CoordModeOrigin); + + /* the bottom shade */ + tpt[0] = opt[0]; + tpt[1] = opt[1]; + tpt[2] = ipt[1]; + tpt[3] = ipt[0]; + XFillPolygon (dpy, win, bot, tpt, 4, Convex, CoordModeOrigin); + + /* the arrow itself */ + XFillPolygon (dpy, win, fore, ipt, 3, Convex, CoordModeOrigin); + + if (botpressed ^ sbw->threeD.invert_border) { + top = sbw->threeD.bot_shadow_GC; + bot = sbw->threeD.top_shadow_GC; + } else { + top = sbw->threeD.top_shadow_GC; + bot = sbw->threeD.bot_shadow_GC; + } + + /* bottom-left background */ + tpt[0] = rpt[1]; + tpt[1] = opt[5]; + tpt[2] = opt[3]; + XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); + + /* bottom-right background */ + tpt[0] = rpt[2]; + tpt[1] = opt[4]; + tpt[2] = opt[5]; + XFillPolygon (dpy, win, back, tpt, 3, Convex, CoordModeOrigin); + + /* the left shade */ + tpt[0] = opt[3]; + tpt[1] = opt[5]; + tpt[2] = ipt[5]; + tpt[3] = ipt[3]; + XFillPolygon (dpy, win, top, tpt, 4, Convex, CoordModeOrigin); + + /* the right shade */ + tpt[0] = opt[5]; + tpt[1] = opt[4]; + tpt[2] = ipt[4]; + tpt[3] = ipt[5]; + XFillPolygon (dpy, win, bot, tpt, 4, Convex, CoordModeOrigin); + + /* the top shade */ + tpt[0] = opt[4]; + tpt[1] = opt[3]; + tpt[2] = ipt[3]; + tpt[3] = ipt[4]; + XFillPolygon (dpy, win, top, tpt, 4, Convex, CoordModeOrigin); + + /* the arrow itself */ + XFillPolygon (dpy, win, fore, ipt+3, 3, Convex, CoordModeOrigin); } else { - pt[0].x = 0; pt[0].y = tm1; - pt[1].x = t; pt[1].y = tm1; - pt[2].x = t2; pt[2].y = 0; - - pt[3].x = 0; pt[3].y = lp1; - pt[4].x = t; pt[4].y = lp1; - pt[5].x = t2; pt[5].y = l; + + tpt[0] = opt[0]; + tpt[1] = opt[1]; + tpt[2] = opt[2]; + tpt[3] = opt[3]; + tpt[4] = opt[4]; + tpt[5] = opt[5]; /* horizontal arrows require that x and y coordinates be swapped */ if (sbw->scrollbar.orientation == XtorientHorizontal) { int n; - int swap; - for (n = 0; n < 6; n++) { - swap = pt[n].x; - pt[n].x = pt[n].y; - pt[n].y = swap; - } + for (n = 0; n < 6; n++) + swap(&tpt[n].x, &tpt[n].y); } + /* draw the up/left arrow */ - XFillPolygon (dpy, win, sbw->scrollbar.gc, - pt, 3, - Convex, CoordModeOrigin); + XFillPolygon (dpy, win, fore, tpt, 3, Convex, CoordModeOrigin); + /* draw the down/right arrow */ - XFillPolygon (dpy, win, sbw->scrollbar.gc, - pt+3, 3, - Convex, CoordModeOrigin); + XFillPolygon (dpy, win, fore, tpt+3, 3, Convex, CoordModeOrigin); + } } } @@ -469,12 +696,13 @@ XtRemoveTimeOut (sbw->scrollbar.timer_id); #endif XtReleaseGC (w, sbw->scrollbar.gc); + XtReleaseGC (w, sbw->scrollbar.bgc); } /* Function Name: CreateGC * Description: Creates the GC. * Arguments: w - the scrollbar widget. - * Returns: none. + * Returns: none. */ static void CreateGC (w) @@ -485,9 +713,22 @@ XtGCMask mask; unsigned int depth = 1; + /* make GC for scrollbar background */ + if (sbw->threeD.be_nice_to_cmap || + DefaultDepthOfScreen (XtScreen(w)) == 1) { + mask = GCTile | GCFillStyle; + gcValues.tile = sbw->threeD.bot_shadow_pxmap; + gcValues.fill_style = FillTiled; + } else { + mask = GCForeground; + gcValues.foreground = sbw->scrollbar.background; + } + sbw->scrollbar.bgc = XtGetGC(w, mask, &gcValues); + + /* make GC for scrollbar foreground */ if (sbw->scrollbar.thumb == XtUnspecifiedPixmap) { - sbw->scrollbar.thumb = XmuCreateStippledPixmap (XtScreen(w), - (Pixel) 1, (Pixel) 0, depth); + sbw->scrollbar.thumb = XmuCreateStippledPixmap (XtScreen(w), + (Pixel) 0, (Pixel) 0, depth); } else if (sbw->scrollbar.thumb != None) { Window root; int x, y; @@ -518,6 +759,9 @@ /* the creation should be non-caching, because */ /* we now set and clear clip masks on the gc returned */ sbw->scrollbar.gc = XtGetGC (w, mask, &gcValues); + gcValues.foreground = sbw->scrollbar.foreground; + gcValues.background = sbw->core.background_pixel; + mask = GCForeground | GCBackground; } static void SetDimensions (sbw) @@ -581,10 +825,10 @@ XtVaSetValues (w, XtNcursor, sbw->scrollbar.inactiveCursor, NULL); #endif - /* - * The Simple widget actually stuffs the value in the valuemask. + /* + * The Simple widget actually stuffs the value in the valuemask. */ - + (*scrollbarWidgetClass->core_class.superclass->core_class.realize) (w, valueMask, attributes); } @@ -617,8 +861,10 @@ if (XtIsRealized (desired)) { if (sbw->scrollbar.foreground != dsbw->scrollbar.foreground || sbw->core.background_pixel != dsbw->core.background_pixel || - sbw->scrollbar.thumb != dsbw->scrollbar.thumb) { + sbw->scrollbar.thumb != dsbw->scrollbar.thumb || + sbw->scrollbar.background != dsbw->scrollbar.background) { XtReleaseGC (desired, sbw->scrollbar.gc); + XtReleaseGC (desired, sbw->scrollbar.bgc); CreateGC (desired); redraw = TRUE; } @@ -667,11 +913,15 @@ XRectInRegion (region, x, y, width, height) != RectangleOut) { /* Forces entire thumb to be painted. */ sbw->scrollbar.topLoc = -(sbw->scrollbar.length + 1); - PaintThumb (sbw, event); + PaintThumb (sbw, 0, 0); + } else { + /* Redraw the surounding shadows of the thumb */ + PaintThumb (sbw, 0, 1); } + #ifdef XAW_ARROW_SCROLLBARS /* we'd like to be region aware here!!!! */ - PaintArrows (sbw); + PaintArrows (sbw, 0, 0); #endif } @@ -688,23 +938,23 @@ switch (newEvent->type) { case MotionNotify: - Check(xmotion.state); + Check(xmotion.state); break; case ButtonPress: case ButtonRelease: Check(xbutton.state); - Check(xbutton.button); + Check(xbutton.button); break; case KeyPress: case KeyRelease: Check(xkey.state); - Check(xkey.keycode); + Check(xkey.keycode); break; case EnterNotify: case LeaveNotify: Check(xcrossing.mode); Check(xcrossing.detail); - Check(xcrossing.state); + Check(xcrossing.state); break; } #undef Check @@ -753,23 +1003,23 @@ { switch( event->type ) { case MotionNotify: - *x = event->xmotion.x; - *y = event->xmotion.y; + *x = event->xmotion.x; + *y = event->xmotion.y; break; case ButtonPress: case ButtonRelease: - *x = event->xbutton.x; - *y = event->xbutton.y; + *x = event->xbutton.x; + *y = event->xbutton.y; break; case KeyPress: case KeyRelease: - *x = event->xkey.x; - *y = event->xkey.y; + *x = event->xkey.x; + *y = event->xkey.y; break; case EnterNotify: case LeaveNotify: - *x = event->xcrossing.x; - *y = event->xcrossing.y; + *x = event->xcrossing.x; + *y = event->xcrossing.y; break; default: *x = 0; *y = 0; @@ -792,7 +1042,8 @@ /* also call Move and Notify if we're already in continuous scroll mode */ if (sbw->scrollbar.scroll_mode == 2 || (PICKLENGTH (sbw,x,y) >= sbw->scrollbar.topLoc && - PICKLENGTH (sbw,x,y) <= sbw->scrollbar.topLoc + sbw->scrollbar.shownLength)){ + PICKLENGTH (sbw,x,y) <= (sbw->scrollbar.topLoc + + sbw->scrollbar.shownLength))){ XtCallActionProc(w, "MoveThumb", event, params, *num_params); XtCallActionProc(w, "NotifyThumb", event, params, *num_params); } @@ -812,8 +1063,8 @@ call_data = MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); if (sbw->scrollbar.scroll_mode == 1) call_data = -call_data; - XtCallCallbacks((Widget)sbw, XtNscrollProc, (XtPointer) call_data); - sbw->scrollbar.timer_id = + XtCallCallbacks((Widget)sbw, XtNscrollProc, (XtPointer)(long)call_data); + sbw->scrollbar.timer_id = XtAppAddTimeOut(XtWidgetToApplicationContext((Widget)sbw), (unsigned long) 150, RepeatNotify, @@ -833,7 +1084,7 @@ char direction; if (sbw->scrollbar.direction != 0) return; /* if we're already scrolling */ - if (*num_params > 0) + if (*num_params > 0) direction = *params[0]; else direction = 'C'; @@ -842,24 +1093,24 @@ switch (direction) { case 'B': - case 'b': + case 'b': cursor = (sbw->scrollbar.orientation == XtorientVertical) ? sbw->scrollbar.downCursor - : sbw->scrollbar.rightCursor; + : sbw->scrollbar.rightCursor; break; case 'F': case 'f': cursor = (sbw->scrollbar.orientation == XtorientVertical) ? sbw->scrollbar.upCursor - : sbw->scrollbar.leftCursor; + : sbw->scrollbar.leftCursor; break; case 'C': case 'c': cursor = (sbw->scrollbar.orientation == XtorientVertical) ? sbw->scrollbar.rightCursor - : sbw->scrollbar.upCursor; + : sbw->scrollbar.upCursor; break; - default: + default: return; /* invalid invocation */ } XtVaSetValues (w, XtNcursor, cursor, NULL); @@ -881,7 +1132,7 @@ #endif /* - * Same as above, but for floating numbers. + * Same as above, but for floating numbers. */ static float FloatInRange(num, small, big) @@ -895,15 +1146,15 @@ static void NotifyScroll (w, event, params, num_params) Widget w; XEvent *event; - String *params; - Cardinal *num_params; + String *params; + Cardinal *num_params; { ScrollbarWidget sbw = (ScrollbarWidget) w; int call_data; Position x, y; if (sbw->scrollbar.scroll_mode == 2 /* if scroll continuous */ - || LookAhead (w, event)) + || LookAhead (w, event)) return; ExtractPosition (event, &x, &y); @@ -911,33 +1162,36 @@ if (PICKLENGTH (sbw,x,y) < sbw->scrollbar.thickness) { /* handle first arrow zone */ call_data = -MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); - XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); + XtCallCallbacks (w, XtNscrollProc, (XtPointer)(long)call_data); /* establish autoscroll */ - sbw->scrollbar.timer_id = + sbw->scrollbar.timer_id = XtAppAddTimeOut (XtWidgetToApplicationContext (w), (unsigned long) 300, RepeatNotify, (XtPointer)w); sbw->scrollbar.scroll_mode = 1; + PaintArrows (sbw, 1, 0); } else if (PICKLENGTH (sbw,x,y) > sbw->scrollbar.length - sbw->scrollbar.thickness) { /* handle last arrow zone */ call_data = MAX (A_FEW_PIXELS, sbw->scrollbar.length / 20); - XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); + XtCallCallbacks (w, XtNscrollProc, (XtPointer)(long)call_data); /* establish autoscroll */ sbw->scrollbar.timer_id = - XtAppAddTimeOut (XtWidgetToApplicationContext (w), + XtAppAddTimeOut (XtWidgetToApplicationContext (w), (unsigned long) 300, RepeatNotify, (XtPointer)w); sbw->scrollbar.scroll_mode = 3; + PaintArrows (sbw, 0, 1); } else if (PICKLENGTH (sbw, x, y) < sbw->scrollbar.topLoc) { /* handle zone "above" the thumb */ - call_data = - sbw->scrollbar.length; - XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); + call_data = - (sbw->scrollbar.length); + XtCallCallbacks (w, XtNscrollProc, (XtPointer)(long)call_data); } else if (PICKLENGTH (sbw, x, y) > sbw->scrollbar.topLoc + sbw->scrollbar.shownLength) { /* handle zone "below" the thumb */ call_data = sbw->scrollbar.length; - XtCallCallbacks (w, XtNscrollProc, (XtPointer)(call_data)); - } else - { + XtCallCallbacks (w, XtNscrollProc, (XtPointer)(long)call_data); + } else { /* handle the thumb in the motion notify action */ - } + /* but we need to re-paint it "pressed in" here */ + PaintThumb (sbw, 1, 0); + } return; } #else /* XAW_ARROW_SCROLLBARS */ @@ -954,7 +1208,7 @@ if (sbw->scrollbar.direction == 0) return; /* if no StartScroll */ if (LookAhead (w, event)) return; - if (*num_params > 0) + if (*num_params > 0) style = *params[0]; else style = 'P'; @@ -963,24 +1217,24 @@ case 'P': /* Proportional */ case 'p': ExtractPosition (event, &x, &y); - call_data = - InRange (PICKLENGTH (sbw, x, y), 0, (int) sbw->scrollbar.length); + call_data = + InRange (PICKLENGTH (sbw, x, y), 0, (int) sbw->scrollbar.length); break; case 'F': /* FullLength */ - case 'f': - call_data = sbw->scrollbar.length; + case 'f': + call_data = sbw->scrollbar.length; break; } switch (sbw->scrollbar.direction) { case 'B': - case 'b': + case 'b': call_data = -call_data; /* fall through */ case 'F': - case 'f': - XtCallCallbacks (w, XtNscrollProc, (XtPointer)call_data); + case 'f': + XtCallCallbacks (w, XtNscrollProc, (XtPointer)(long)call_data); break; case 'C': @@ -1005,6 +1259,9 @@ /* no need to remove any autoscroll timeout; it will no-op */ /* because the scroll_mode is 0 */ /* but be sure to remove timeout in destroy proc */ + /* release all buttons */ + PaintArrows (sbw, 0, 0); + PaintThumb (sbw, 0, 0); #else XtVaSetValues (w, XtNcursor, sbw->scrollbar.inactiveCursor, NULL); XFlush (XtDisplay (w)); @@ -1055,7 +1312,7 @@ #ifdef XAW_ARROW_SCROLLBARS if (sbw->scrollbar.scroll_mode != 2 ) /* initialize picked position */ - sbw->scrollbar.picked = (FloatInRange( loc, t, t + s ) - t); + sbw->scrollbar.picked = (FloatInRange(loc, t, t+s) - t); #else sbw->scrollbar.picked = 0.5 * s; #endif @@ -1074,7 +1331,7 @@ #ifdef XAW_ARROW_SCROLLBARS sbw->scrollbar.scroll_mode = 2; /* indicate continuous scroll */ #endif - PaintThumb (sbw, event); + PaintThumb (sbw, 1, 0); XFlush (XtDisplay (w)); /* re-draw it before Notifying */ } @@ -1164,6 +1421,6 @@ sbw->scrollbar.shown = (shown > 1.0) ? 1.0 : (shown >= 0.0) ? shown : sbw->scrollbar.shown; - PaintThumb (sbw, NULL); + PaintThumb (sbw, 0, 0); } --- Scrollbar.h +++ Scrollbar.h 2005-11-29 15:54:05.000000000 +0100 @@ -94,6 +94,7 @@ scrollRCursor Cursor Cursor XC_sb_right_arrow scrollUCursor Cursor Cursor XC_sb_up_arrow scrollVCursor Cursor Cursor XC_sb_v_double_arrow + scrollbarBackground ScrollbarBackground Pixel XtDefaultForeground sensitive Sensitive Boolean True shown Shown Float 0.0 thickness Thickness Dimension 14 @@ -101,6 +102,7 @@ thumbProc Callback XtCallbackList NULL topOfThumb TopOfThumb Float 0.0 pickTop PickTop Boolean False + pushThumb PushThumb Boolean True translations Translations TranslationTable see source or doc width Width Dimension thickness or length x Position Position 0 @@ -115,11 +117,15 @@ #define XtCMinimumThumb "MinimumThumb" #define XtCShown "Shown" #define XtCTopOfThumb "TopOfThumb" +#define XtCScrollbarBackground "ScrollbarBackground" #define XtCPickTop "PickTop" +#define XtCPushThumb "PushThumb" #define XtNminimumThumb "minimumThumb" #define XtNtopOfThumb "topOfThumb" +#define XtNscrollbarBackground "scrollbarBackground" #define XtNpickTop "pickTop" +#define XtNpushThumb "pushThumb" typedef struct _ScrollbarRec *ScrollbarWidget; typedef struct _ScrollbarClassRec *ScrollbarWidgetClass; --- ScrollbarP.h +++ ScrollbarP.h 2005-11-29 15:54:05.000000000 +0100 @@ -70,6 +70,7 @@ XtCallbackList thumbProc; /* jump (to position) scroll */ XtCallbackList jumpProc; /* same as thumbProc but pass data by ref */ Pixmap thumb; /* thumb color */ + Pixel background; /* background color */ #ifndef XAW_ARROW_SCROLLBARS Cursor upCursor; /* scroll up cursor */ Cursor downCursor; /* scroll down cursor */ @@ -94,10 +95,12 @@ Cursor inactiveCursor; /* the normal cursor for scrollbar */ char direction; /* a scroll has started; which direction */ #endif - GC gc; /* a (shared) gc */ + GC gc; /* a (shared) gc for foreground */ + GC bgc; /* a (shared) gc for background */ Position topLoc; /* Pixel that corresponds to top */ Dimension shownLength; /* Num pixels corresponding to shown */ - Boolean pick_top; /* pick thumb at top or anywhere*/ + Boolean pick_top; /* pick thumb at top or anywhere */ + Boolean push_thumb; /* push thumb in or not */ } ScrollbarPart; --- SimpleMenu.c +++ SimpleMenu.c 2005-11-29 15:54:05.000000000 +0100 @@ -545,7 +545,7 @@ XDefineCursor(XtDisplay(new), XtWindow(new), smw_new->simple_menu.cursor); - if (smw_old->simple_menu.label_string !=smw_new->simple_menu.label_string) + if (smw_old->simple_menu.label_string !=smw_new->simple_menu.label_string) { if (smw_new->simple_menu.label_string == NULL) /* Destroy. */ XtDestroyWidget((Widget) smw_old->simple_menu.label); else if (smw_old->simple_menu.label_string == NULL) /* Create. */ @@ -556,6 +556,7 @@ XtSetArg(arglist[0], XtNlabel, smw_new->simple_menu.label_string); XtSetValues((Widget) smw_new->simple_menu.label, arglist, ONE); } + } if (smw_old->simple_menu.label_class != smw_new->simple_menu.label_class) XtAppWarning(XtWidgetToApplicationContext(new), --- SmeThreeD.c +++ SmeThreeD.c 2005-11-29 15:54:05.000000000 +0100 @@ -71,7 +71,9 @@ offset(sme_threeD.shadowed), XtRImmediate, (XtPointer) False}, {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension), XtOffsetOf(RectObjRec,rectangle.border_width), XtRImmediate, - (XtPointer)0} + (XtPointer)0}, + {XtNinvertBorder, XtCInvertBorder, XtRBoolean, sizeof(Boolean), + offset(sme_threeD.invert_border), XtRImmediate, (XtPointer) False}, }; #undef offset @@ -209,7 +211,7 @@ Display *dpy = XtDisplayOfObject (new); Screen *scn = XtScreenOfObject (new); unsigned long top_fg_pixel = 0, top_bg_pixel = 0; - char *pm_data; + char *pm_data = NULL; Boolean create_pixmap = FALSE; /* @@ -265,7 +267,7 @@ Display *dpy = XtDisplayOfObject (new); Screen *scn = XtScreenOfObject (new); unsigned long bot_fg_pixel = 0, bot_bg_pixel = 0; - char *pm_data; + char *pm_data = NULL; Boolean create_pixmap = FALSE; if (DefaultDepthOfScreen (scn) == 1) { @@ -568,8 +570,16 @@ if (tdo->sme_threeD.shadowed) { - top = tdo->sme_threeD.top_shadow_GC; - bot = tdo->sme_threeD.bot_shadow_GC; + if (tdo->sme_threeD.invert_border) + { + bot = tdo->sme_threeD.top_shadow_GC; + top = tdo->sme_threeD.bot_shadow_GC; + } + else + { + top = tdo->sme_threeD.top_shadow_GC; + bot = tdo->sme_threeD.bot_shadow_GC; + } } else top = bot = tdo->sme_threeD.erase_GC; --- SmeThreeD.h +++ SmeThreeD.h 2005-11-29 15:54:05.000000000 +0100 @@ -50,6 +50,7 @@ bottomShadowContrast BottomShadowContrast Int 40 userData UserData XtPointer NULL beNiceToColormap BeNiceToColormap Boolean False + invertBorder InvertBorder Boolean False */ @@ -67,6 +68,8 @@ #define XtCBeNiceToColormap "BeNiceToColormap" #define XtNbeNiceToColourmap "beNiceToColormap" #define XtCBeNiceToColourmap "BeNiceToColormap" +#define XtNinvertBorder "invertBorder" +#define XtCInvertBorder "InvertBorder" #define XtNuserData "userData" #define XtCUserData "UserData" --- SmeThreeDP.h +++ SmeThreeDP.h 2005-11-29 15:54:05.000000000 +0100 @@ -47,6 +47,7 @@ XtPointer user_data; Boolean be_nice_to_cmap; Boolean shadowed; + Boolean invert_border; } SmeThreeDPart; /* Full instance record declaration */ --- StripChart.c +++ StripChart.c 2005-11-29 15:54:05.000000000 +0100 @@ -292,7 +292,7 @@ if (XtIsRealized((Widget)w) && w->strip_chart.max_value > w->strip_chart.scale) { XClearWindow(XtDisplay ((Widget) w), XtWindow ((Widget) w)); - w->strip_chart.interval = repaint_window((Widget)w, 0, (int) w->core.width - 2 * s); + w->strip_chart.interval = repaint_window((Widget)w, 0, (int) w->core.width); (*swclass->threeD_class.shadowdraw) ((Widget) w, (XEvent *)0, (Region)0, w->threeD.relief, FALSE); @@ -315,7 +315,7 @@ if (w->strip_chart.points != NULL) { w->strip_chart.points[0].x = w->strip_chart.interval + s; XDrawPoints(XtDisplay(w), XtWindow(w), w->strip_chart.hiGC, - w->strip_chart.points, w->strip_chart.scale, + w->strip_chart.points, (w->strip_chart.scale - 1), CoordModePrevious); } @@ -346,6 +346,7 @@ int next = w->strip_chart.interval; int scale = w->strip_chart.scale; int scalewidth = 0; + int margin = w->core.width - s; /* Compute the minimum scale required to graph the data, but don't go lower than min_scale. */ @@ -358,7 +359,7 @@ w->strip_chart.scale = scale; left = 0; width = next; /* check this */ - scalewidth = w->core.width - 2 * s; + scalewidth = w->core.width - 2 * s - 1; SetPoints(gw); @@ -373,10 +374,18 @@ Display *dpy = XtDisplay(gw); Window win = XtWindow(gw); - width += left - 1; - if (!scalewidth) scalewidth = width; + if (left < s) left = 0; + else left -= s; + if (left >= margin) left = margin - 1; + + width += (left - 1); + + if (!scalewidth) { + scalewidth = w->core.width - 2 * s - 1; + if (width < scalewidth) scalewidth = width; + } - if (next < (++width - s)) width = next + s; + if (next < ++width) width = next; /* Draw data point lines. */ for (i = left; i < width; i++) { @@ -390,7 +399,7 @@ } /* Draw graph reference lines */ - for (i = 1; i < w->strip_chart.scale; i++) { + if (left <= scalewidth) for (i = 1; i < w->strip_chart.scale; i++) { j = i * ((w->core.height - 2 * s) / w->strip_chart.scale); XDrawLine(dpy, win, w->strip_chart.hiGC, left + s, j + s, scalewidth + s, j + s); @@ -415,6 +424,7 @@ double old_max; int left, i, j; int next = w->strip_chart.interval; + int margin = w->core.width - s; if (!XtIsRealized((Widget) w)) return; @@ -447,7 +457,7 @@ if ( ((int) old_max) != ( (int) w->strip_chart.max_value) ) { XClearWindow(XtDisplay(w), XtWindow(w)); - repaint_window((Widget)w, 0, w->core.width - 2 * s); + repaint_window((Widget)w, 0, w->core.width); return; } @@ -466,12 +476,13 @@ FALSE); /* Draw graph reference lines */ - left = j; - for (i = 1; i < w->strip_chart.scale; i++) { - j = i * ((w->core.height - 2 * s) / w->strip_chart.scale); - XDrawLine(XtDisplay((Widget) w), XtWindow( (Widget) w), - w->strip_chart.hiGC, - left, j + s, ((int)w->core.width - s - 1), j + s); + if ((left = j) < margin) { + for (i = 1; i < w->strip_chart.scale; i++) { + j = i * ((w->core.height - 2 * s) / w->strip_chart.scale); + XDrawLine(XtDisplay((Widget) w), XtWindow( (Widget) w), + w->strip_chart.hiGC, + left, j + s, margin - 1, j + s); + } } return; } @@ -523,7 +534,7 @@ * Returns: none. */ -#define HEIGHT ( (unsigned int) w->core.height) +#define HEIGHT ( (double)w->core.height - 2.0 * (double)s ) static void SetPoints(widget) @@ -550,7 +561,7 @@ for (i = 1; i < w->strip_chart.scale; i++) { points[i - 1].x = 0; - points[i - 1].y = ( short)(((double)w->core.height - 2.0 * (double) s) / (double) w->strip_chart.scale ); + points[i - 1].y = (short)(HEIGHT / (double) w->strip_chart.scale); } points[0].y += (short)s; } --- Text.c +++ Text.c 2005-11-29 15:54:05.000000000 +0100 @@ -1125,11 +1125,12 @@ _XawTextBuildLineTable (ctx, zeroPosition, FALSE); } } - else if (ctx->text.vbar != NULL) + else if (ctx->text.vbar != NULL) { if (ctx->text.scroll_vert == XawtextScrollWhenNeeded) DestroyVScrollBar(ctx); else if (ctx->text.scroll_vert == XawtextScrollAlways) XawScrollbarSetThumb(ctx->text.vbar, 0.0, 1.0); + } } /* @@ -1157,11 +1158,12 @@ else widest = ctx->core.width - 2 * s; widest /= (last = GetWidestLine(ctx)); - if (ctx->text.scroll_horiz == XawtextScrollWhenNeeded) + if (ctx->text.scroll_horiz == XawtextScrollWhenNeeded) { if (widest < 1.0) CreateHScrollBar(ctx); else DestroyHScrollBar(ctx); + } if ( (ctx->text.hbar == NULL) != temp ) { _XawTextBuildLineTable (ctx, ctx->text.lt.top, TRUE); --- TextAction.c +++ TextAction.c 2005-11-29 15:54:05.000000000 +0100 @@ -1852,6 +1852,7 @@ { TextWidget ctx = (TextWidget) w; int mult; + int atoi(); if (*num_params != 1) { XtAppError( XtWidgetToApplicationContext( w ), --- TextPop.c +++ TextPop.c 2005-11-29 15:54:05.000000000 +0100 @@ -1022,13 +1022,14 @@ else XawTextSetInsertionPoint( tw, pos); - if (once_only) + if (once_only) { if (show_current) break; else { DoSearch(search); return(TRUE); } + } count++; } --- ThreeD.c +++ ThreeD.c 2005-11-29 15:54:05.000000000 +0100 @@ -73,6 +73,8 @@ {XtNborderWidth, XtCBorderWidth, XtRDimension, sizeof(Dimension), XtOffsetOf(RectObjRec,rectangle.border_width), XtRImmediate, (XtPointer)0}, + {XtNinvertBorder, XtCInvertBorder, XtRBoolean, sizeof(Boolean), + offset(threeD.invert_border), XtRImmediate, (XtPointer) False}, {XtNrelief, XtCRelief, XtRRelief, sizeof(XtRelief), offset(threeD.relief), XtRString, (XtPointer) defRelief} }; @@ -222,14 +224,13 @@ if (tdw->core.background_pixel == WhitePixelOfScreen (scn) || tdw->core.background_pixel == BlackPixelOfScreen (scn)) { pm_data = mtshadowpm_bits; - pm_size = mtshadowpm_size; - } else + pm_size = mtshadowpm_size; + } else #endif - { - pm_data = shadowpm_bits; - pm_size = shadowpm_size; - } - + { + pm_data = shadowpm_bits; + pm_size = shadowpm_size; + } create_pixmap = TRUE; } else { pm_size = 0; /* keep gcc happy */ @@ -651,7 +652,7 @@ GC realbot = tdw->threeD.bot_shadow_GC; GC top, bot; - if (out) { + if ((out ^ tdw->threeD.invert_border)) { top = tdw->threeD.top_shadow_GC; bot = tdw->threeD.bot_shadow_GC; } else { @@ -792,7 +793,7 @@ Window win = XtWindow(gw); GC top, bot; - if (out) + if ((out ^ tdw->threeD.invert_border)) { top = tdw->threeD.top_shadow_GC; bot = tdw->threeD.bot_shadow_GC; --- ThreeD.h +++ ThreeD.h 2005-11-29 15:54:05.000000000 +0100 @@ -49,6 +49,7 @@ bottomShadowContrast BottomShadowContrast Int 40 userData UserData XtPointer NULL beNiceToColormap BeNiceToColormap Boolean False + invertBorder InvertBorder Boolean False relief Relief XtRelief XtReliefRaised */ @@ -67,6 +68,8 @@ #define XtCBeNiceToColormap "BeNiceToColormap" #define XtNbeNiceToColourmap "beNiceToColormap" #define XtCBeNiceToColourmap "BeNiceToColormap" +#define XtNinvertBorder "invertBorder" +#define XtCInvertBorder "InvertBorder" #define XtNuserData "userData" #define XtCUserData "UserData" #define XtNrelief "relief" --- ThreeDP.h +++ ThreeDP.h 2005-11-29 15:54:05.000000000 +0100 @@ -47,6 +47,7 @@ GC bot_shadow_GC; XtPointer user_data; Boolean be_nice_to_cmap; + Boolean invert_border; XtRelief relief; } ThreeDPart; --- Toggle.c +++ Toggle.c 2005-11-29 15:54:05.000000000 +0100 @@ -499,10 +499,11 @@ if ( tw->command.set && radio_group != NULL ) XawToggleUnsetCurrent(radio_group); - if (radio_group != NULL) + if (radio_group != NULL) { if ((group = GetRadioGroup(radio_group)) == NULL) CreateRadioGroup(w, radio_group); else AddToRadioGroup(group, w); + } } /* Function Name: XawToggleGetCurrent --- Viewport.c +++ Viewport.c 2005-11-29 15:54:05.000000000 +0100 @@ -824,17 +824,19 @@ if ( (w->viewport.allowvert || w->viewport.allowhoriz) ) { XtQueryGeometry( child, intended, &preferred ); - if ( !(intended->request_mode & CWWidth) ) + if ( !(intended->request_mode & CWWidth) ) { if ( preferred.request_mode & CWWidth ) intended->width = preferred.width; else intended->width = child->core.width; + } - if ( !(intended->request_mode & CWHeight) ) + if ( !(intended->request_mode & CWHeight) ) { if ( preferred.request_mode & CWHeight ) intended->height = preferred.height; else intended->height = child->core.height; + } } } else { --- XawI18n.c +++ XawI18n.c 2005-11-29 15:54:05.000000000 +0100 @@ -68,6 +68,9 @@ { wchar_t wc; char str[2]; +#ifndef USE_XMBTOWC + int mbtowc(); +#endif str[0] = c; str[1] = '\0'; --- XawI18n.h +++ XawI18n.h 2005-11-29 15:54:05.000000000 +0100 @@ -56,10 +56,12 @@ #endif #ifdef USE_XWCHAR_STRING +int _Xwcsncpy(), _Xwcscpy(), _Xwcslen(); #define wcslen(c) _Xwcslen(c) #define wcscpy(d,s) _Xwcscpy(d,s) #define wcsncpy(d,s,l) _Xwcsncpy(d,s,l) #ifdef USE_XMBTOWC +int _Xmbtowc(); #define mbtowc(wc,s,l) _Xmbtowc(wc,s,l) #endif #endif --- XawIm.c +++ XawIm.c 2005-11-29 15:54:05.000000000 +0100 @@ -1080,6 +1080,7 @@ XrmResourceList xrmres; int i; XawIcTablePart *p, save_tbl; + void _XtCopyFromArg(); if ((p = GetIcTable(w, ve)) == NULL) return; @@ -1331,8 +1332,6 @@ VendorShellWidget vw; XawVendorShellExtPart* ve; { - int i; - if (!XtIsVendorShell((Widget)vw)) return(FALSE); ve->parent = (Widget)vw; ve->im.xim = NULL; @@ -1531,6 +1530,8 @@ SetFocusValues( inwidg, args, num_args, FALSE ); } +void _XtCountVaList(), _XtVaToArgList(); + void #if NeedVarargsPrototypes _XawImVASetValues( Widget inwidg, ... )
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor