From f8517736f51320de0b8a02e82c5507a6ea28d407 Mon Sep 17 00:00:00 2001 From: Markus Steinborn Date: Thu, 1 Mar 2012 18:08:38 +0100 Subject: [PATCH 1/3] Xaw3d-1.6.1-3Dlabel.patch --- src/Label.c | 66 +++++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 46 insertions(+), 20 deletions(-) diff --git libXaw3d-1.6.2/src/Label.c libXaw3d-1.6.2/src/Label.c index e8743c5..c345573 100644 --- libXaw3d-1.6.2/src/Label.c +++ libXaw3d-1.6.2/src/Label.c @@ -418,9 +418,16 @@ GetgrayGC(LabelWidget lw) static void compute_bitmap_offsets (LabelWidget lw) { - if (lw->label.lbm_height != 0) - lw->label.lbm_y = (lw->core.height - lw->label.lbm_height) / 2; - else + /* + * bitmap will be eventually be displayed at + * (internal_width, internal_height + lbm_y) + */ + if (lw->label.lbm_height != 0) { + lw->label.lbm_y = (lw->core.height - + (lw->threeD.shadow_width * 2 + + lw->label.internal_height * 2 + + lw->label.lbm_height)) / 2; + } else lw->label.lbm_y = 0; } @@ -446,9 +453,11 @@ Initialize(Widget request, Widget new, ArgList args, Cardinal *num_args) { LabelWidget lw = (LabelWidget) new; +#if 0 /* disable shadows if we're not a subclass of Command */ if (!XtIsSubclass(new, commandWidgetClass)) lw->threeD.shadow_width = 0; +#endif if (lw->label.label == NULL) lw->label.label = XtNewString(lw->core.name); @@ -462,18 +471,20 @@ Initialize(Widget request, Widget new, ArgList args, Cardinal *num_args) if (lw->core.height == 0) lw->core.height = lw->label.label_height + - 2 * lw->label.internal_height; + 2 * lw->label.internal_height + + 2 * lw->threeD.shadow_width; set_bitmap_info(lw); /* req's core.height, sets label.lbm_* */ if (lw->label.lbm_height > lw->label.label_height) lw->core.height = lw->label.lbm_height + - 2 * lw->label.internal_height; + 2 * lw->label.internal_height; if (lw->core.width == 0) lw->core.width = lw->label.label_width + - 2 * lw->label.internal_width + - LEFT_OFFSET(lw); /* req's label.lbm_width */ + 2 * lw->label.internal_width + + 2 * lw->threeD.shadow_width + + LEFT_OFFSET(lw); /* req's label.lbm_width */ lw->label.label_x = lw->label.label_y = 0; (*XtClass(new)->core_class.resize) ((Widget)lw); @@ -551,14 +562,16 @@ Redisplay(Widget gw, XEvent *event, Region region) if (w->label.depth == 1) XCopyPlane(XtDisplay(gw), pm, XtWindow(gw), gc, 0, 0, w->label.lbm_width, w->label.lbm_height, - (int) w->label.internal_width, - (int) w->label.lbm_y, + (int) w->label.internal_width + w->threeD.shadow_width, + (int) w->label.internal_height + w->threeD.shadow_width + + w->label.lbm_y, (unsigned long) 1L); else XCopyArea(XtDisplay(gw), pm, XtWindow(gw), gc, 0, 0, w->label.lbm_width, w->label.lbm_height, - (int) w->label.internal_width, - (int) w->label.lbm_y); + (int) w->label.internal_width + w->threeD.shadow_width, + (int) w->label.internal_height + w->threeD.shadow_width + + w->label.lbm_y); } #ifdef XAW_INTERNATIONALIZATION @@ -648,14 +661,17 @@ _Reposition(LabelWidget lw, Dimension width, Dimension height, Position *dx, Position *dy) { Position newPos; - Position leftedge = lw->label.internal_width + LEFT_OFFSET(lw); + Position leftedge = lw->label.internal_width + LEFT_OFFSET(lw) + + lw->threeD.shadow_width; + switch (lw->label.justify) { case XtJustifyLeft: newPos = leftedge; break; case XtJustifyRight: - newPos = width - lw->label.label_width - lw->label.internal_width; + newPos = width - (lw->label.label_width + lw->label.internal_width + + lw->threeD.shadow_width); break; case XtJustifyCenter: default: @@ -747,17 +763,20 @@ SetValues(Widget current, Widget request, Widget new, ArgList args, Cardinal *nu if (newlw->label.resize && was_resized) { if (curlw->core.height == reqlw->core.height && !checks[HEIGHT]) newlw->core.height = newlw->label.label_height + - 2 * newlw->label.internal_height; + 2 * newlw->label.internal_height + + 2 * newlw->threeD.shadow_width; set_bitmap_info (newlw); /* req's core.height, sets label.lbm_* */ if (newlw->label.lbm_height > newlw->label.label_height) newlw->core.height = newlw->label.lbm_height + - 2 * newlw->label.internal_height; + 2 * newlw->label.internal_height + + 2 * newlw->threeD.shadow_width; if (curlw->core.width == reqlw->core.width && !checks[WIDTH]) newlw->core.width = newlw->label.label_width + 2 * newlw->label.internal_width + + 2 * newlw->threeD.shadow_width + LEFT_OFFSET(newlw); /* req's label.lbm_width */ } @@ -766,15 +785,20 @@ SetValues(Widget current, Widget request, Widget new, ArgList args, Cardinal *nu if (checks[HEIGHT]) { if (newlw->label.label_height > newlw->label.lbm_height) i = newlw->label.label_height + - 2 * newlw->label.internal_height; + 2 * newlw->label.internal_height + + 2 * newlw->threeD.shadow_width; else - i = newlw->label.lbm_height + 2 * newlw->label.internal_height; + i = newlw->label.lbm_height + + 2 * newlw->label.internal_height + + 2 * newlw->threeD.shadow_width; if (i > newlw->core.height) newlw->core.height = i; } if (checks[WIDTH]) { - i = newlw->label.label_width + 2 * newlw->label.internal_width + - LEFT_OFFSET(newlw); /* req's label.lbm_width */ + i = newlw->label.label_width + + 2 * newlw->label.internal_width + + 2 * newlw->threeD.shadow_width + + LEFT_OFFSET(newlw); /* req's label.lbm_width */ if (i > newlw->core.width) newlw->core.width = i; } @@ -845,9 +869,11 @@ QueryGeometry(Widget w, XtWidgetGeometry *intended, XtWidgetGeometry *preferred) preferred->request_mode = CWWidth | CWHeight; preferred->width = (lw->label.label_width + 2 * lw->label.internal_width + + 2 * lw->threeD.shadow_width + LEFT_OFFSET(lw)); preferred->height = lw->label.label_height + - 2 * lw->label.internal_height; + 2 * lw->label.internal_height + + 2 * lw->threeD.shadow_width; if ( ((intended->request_mode & (CWWidth | CWHeight)) == (CWWidth | CWHeight)) && intended->width == preferred->width && -- 1.7.9.5