static void expose(Widget w, XEvent *event, Region region) { XmDrawnButtonCallbackStruct cbs; DEBUGOUT(_LtDebug(__FILE__, w, "Expose (%dx%d%+d%+d)\n", XtWidth(w), XtHeight(w),XtX(w),XtY(w))); #define superclass (&xmLabelClassRec) (*superclass->core_class.expose) (w, event, region); #undef superclass #if 0 /* rws 24 Oct 1998 mfm clipboard pixmap */ if (XtSensitive(w) && Lab_Pixmap(w) != XmUNSPECIFIED_PIXMAP) { XCopyArea(XtDisplay(w), Lab_Pixmap(w), XtWindow(w), Lab_NormalGC(w), 0, 0, Lab_TextRect_width(w), Lab_TextRect_height(w), (XtWidth(w) - Lab_TextRect_width(w)) / 2, (XtHeight(w) - Lab_TextRect_height(w)) / 2); } else if (!XtSensitive(w) && Lab_PixmapInsensitive(w) != XmUNSPECIFIED_PIXMAP) { XCopyArea(XtDisplay(w), Lab_PixmapInsensitive(w), XtWindow(w), Lab_InsensitiveGC(w), 0, 0, Lab_TextRect_width(w), Lab_TextRect_height(w), Lab_TextRect_x(w), Lab_TextRect_y(w)); } #endif _XmDrawShadows(XtDisplay(w), XtWindow(w), Prim_TopShadowGC(w), Prim_BottomShadowGC(w), Prim_HighlightThickness(w), Prim_HighlightThickness(w), XtWidth(w) - (Prim_HighlightThickness(w) << 1), XtHeight(w) - (Prim_HighlightThickness(w) << 1), Prim_ShadowThickness(w), DB_PushButtonEnabled(w) ? XtSensitive(w) && DB_Armed(w) ? XmSHADOW_IN : XmSHADOW_OUT : DB_ShadowType(w)); if (DB_ExposeCallback(w)) { cbs.reason = XmCR_EXPOSE; cbs.event = event; cbs.window = XtWindow(w); cbs.click_count = DB_ClickCount(w); XFlush(XtDisplay(w)); XtCallCallbackList(w, DB_ExposeCallback(w), (XtPointer)&cbs); } }
void GaugePick(Widget WXUNUSED(w), XEvent *WXUNUSED(e), String *WXUNUSED(args), Cardinal *WXUNUSED(num_args)) { /* Commented out for a read-only gauge in wxWidgets */ #if 0 XmGaugeWidget gw = (XmGaugeWidget)w; #define THIS gw->gauge int size, sht; float ratio; Boolean dragging = False; XButtonEvent *event = (XButtonEvent *)e; int x, y; x = event->x; y = event->y; sht = gw->primitive.shadow_thickness; _XmDrawShadows(XtDisplay(w), XtWindow(w), gw->primitive.top_shadow_GC, gw->primitive.bottom_shadow_GC, 0, 0, w->core.width, w->core.height, sht, XmSHADOW_IN); ratio = (float)((float)THIS.maximum - (float)THIS.minimum) / (float)THIS.value; switch(THIS.orientation) { case XmHORIZONTAL: size = (w->core.width - 2 * sht) / ratio; switch(THIS.processingDirection) { case XmMAX_ON_RIGHT: case XmMAX_ON_BOTTOM: dragging = (x > sht) && (y > sht) && (x < sht + size) && (y < w->core.height - sht); break; case XmMAX_ON_LEFT: case XmMAX_ON_TOP: dragging = (x > w->core.width - size - sht) && (y > sht) && (x < w->core.width - sht) && (y < w->core.height + sht); break; } break; case XmVERTICAL: size = (w->core.height - 2 * sht) / ratio; switch(THIS.processingDirection) { case XmMAX_ON_RIGHT: case XmMAX_ON_BOTTOM: dragging = (x > sht) && (y > sht) && (x < w->core.width - sht) && (y < w->core.width - 2 * sht + size); break; case XmMAX_ON_LEFT: case XmMAX_ON_TOP: dragging = (x > sht) && (y > w->core.height - size - sht) && (x < w->core.width - sht) && (y < w->core.height - sht); } break; } THIS.dragging = dragging; THIS.oldx = x; THIS.oldy = y; #undef THIS #endif }
/*----------------------------------------------------------------------*/ static void AccentAll(Widget w, GC top_gc, GC bottom_gc, Dimension offset_left, Dimension offset_right, Dimension shadow_thickness, Dimension accent_thickness, int code) { #if 1 if (code == ACCENT_DRAW) { /* Draw accent */ _XmDrawShadows(XtDisplay(w),_XfeWindow(w), top_gc,bottom_gc, _XfeHighlightThickness(w), _XfeHighlightThickness(w), _XfeWidth(w) - 2 * _XfeHighlightThickness(w), _XfeHeight(w) - 2 * _XfeHighlightThickness(w), _XfeShadowThickness(w), XmSHADOW_OUT); } else { /* Erase accent */ XfeDrawRectangle(XtDisplay(w),_XfeWindow(w),top_gc, _XfeHighlightThickness(w), _XfeHighlightThickness(w), _XfeWidth(w) - 2 * _XfeHighlightThickness(w), _XfeHeight(w) - 2 * _XfeHighlightThickness(w), _XfeShadowThickness(w)); } #else Widget pw = _XfeParent(w); int position_index = XfeMenuItemPositionIndex(w); Cardinal num_children = _XfemNumChildren(pw); Position x; Position y; Dimension width; Dimension height; Dimension total_thickness = shadow_thickness + accent_thickness; assert( code == ACCENT_DRAW || code == ACCENT_ERASE ); /* One and only */ if (num_children == 1) { x = _XfeX(w) + offset_left; y = _XfeY(w); width = _XfeWidth(w) - offset_left - offset_right; height = _XfeHeight(w); } else { Dimension overlap = (2 * shadow_thickness + accent_thickness) / 2; /* First item */ if (position_index == 0) { x = _XfeX(w) + offset_left; y = _XfeY(w); width = _XfeWidth(w) - offset_left - offset_right; height = _XfeHeight(w) + overlap; } /* Last item */ else if (position_index == (num_children - 1)) { x = _XfeX(w) + offset_left; y = _XfeY(w) - overlap; width = _XfeWidth(w) - offset_left - offset_right; height = _XfeHeight(w) + overlap; } /* In between two others */ else { x = _XfeX(w) + offset_left; y = _XfeY(w) - overlap; width = _XfeWidth(w) - offset_left - offset_right; height = _XfeHeight(w) + 2 * total_thickness; } } if (code == ACCENT_DRAW) { /* Draw accent */ _XmDrawShadows(XtDisplay(pw),_XfeWindow(pw),top_gc,bottom_gc, x,y,width,height,shadow_thickness,XmSHADOW_IN); x += total_thickness; y += total_thickness; width -= (2 * total_thickness); height -= (2 * total_thickness); _XmDrawShadows(XtDisplay(pw),_XfeWindow(pw),top_gc,bottom_gc, x,y,width,height,shadow_thickness,XmSHADOW_OUT); } else { /* Erase accent */ XfeDrawRectangle(XtDisplay(pw),_XfeWindow(pw),top_gc, x,y,width,height,shadow_thickness); x += total_thickness; y += total_thickness; width -= (2 * total_thickness); height -= (2 * total_thickness); XfeDrawRectangle(XtDisplay(pw),_XfeWindow(pw),top_gc, x,y,width,height,shadow_thickness); } #endif }
/* ARGSUSED */ static void Redisplay(Widget gw, XEvent * event, Region region) { XmPannerWidget pw = (XmPannerWidget) gw; Display *dpy = XtDisplay(gw); Window w = XtWindow(gw); int pad = (XmPanner_internal_border(pw) + pw->primitive.highlight_thickness + pw->primitive.shadow_thickness); int dx, dy, width, height; int kx = XmPanner_knob_x(pw) + pad, ky = XmPanner_knob_y(pw) + pad; XmPanner_tmp(pw).showing = FALSE; if (event != NULL) { dx = dy = pw->primitive.highlight_thickness; width = pw->core.width - (2 * dx); height = pw->core.height - (2 * dy); _XmDrawShadows(XtDisplay(gw), XtWindow(gw), pw->primitive.bottom_shadow_GC, pw->primitive.top_shadow_GC, dx, dy, width, height, pw->primitive.shadow_thickness, XmSHADOW_OUT); if (pw->primitive.highlighted) (*(xmPrimitiveClassRec.primitive_class.border_highlight))(gw); else (*(xmPrimitiveClassRec.primitive_class.border_unhighlight))(gw); } if ((XmPanner_tmp(pw).doing && XmPanner_rubber_band(pw)) || (event == NULL)) { XClearArea (XtDisplay(pw), XtWindow(pw), (int) XmPanner_last_x(pw) + pad, (int) XmPanner_last_y(pw) + pad, (unsigned int) (XmPanner_knob_width(pw)), (unsigned int) (XmPanner_knob_height(pw)), False); } XmPanner_last_x(pw) = XmPanner_knob_x(pw); XmPanner_last_y(pw) = XmPanner_knob_y(pw); XmeDrawShadows(XtDisplay(gw), XtWindow(gw), pw->primitive.top_shadow_GC, pw->primitive.bottom_shadow_GC, kx, ky, XmPanner_knob_width(pw), XmPanner_knob_height(pw), pw->primitive.shadow_thickness, XmSHADOW_OUT); dx = kx + pw->primitive.shadow_thickness; dy = ky + pw->primitive.shadow_thickness; if (((int)XmPanner_knob_width(pw) > (int)(2 * pw->primitive.shadow_thickness)) && ((int)XmPanner_knob_height(pw) > (int)(2 * pw->primitive.shadow_thickness))) { width = XmPanner_knob_width(pw) - (2 * pw->primitive.shadow_thickness); height = XmPanner_knob_height(pw) - (2 * pw->primitive.shadow_thickness); XFillRectangle (dpy, w, XmPanner_slider_gc(pw), dx, dy, width, height); } if (XmPanner_tmp(pw).doing && XmPanner_rubber_band(pw)) DRAW_TMP (pw); }