/*----------------------------------------------------------------------*/ static void DrawHighlight(Widget w,XEvent * event,Region region,XRectangle * clip_rect) { XfeComboBoxPart * cp = _XfeComboBoxPart(w); /* Make sure the highlight is needed */ if (!cp->highlight_thickness || !_XfeIsRealized(w)) { return; } if (cp->highlighted) { _XmDrawSimpleHighlight(XtDisplay(w), _XfeWindow(w), _XfemHighlightGC(w), 0,0, _XfeWidth(w),_XfeHeight(w), cp->highlight_thickness); } else { assert( XmIsManager(_XfeParent(w)) ); _XmDrawSimpleHighlight(XtDisplay(w), _XfeWindow(w), _XfemBackgroundGC(_XfeParent(w)), 0,0, _XfeWidth(w),_XfeHeight(w), cp->highlight_thickness); } }
static void gadget_border_unhighlight(Widget w) { DEBUGOUT(_LtDebug(__FILE__, w, "gadget_border_unhighlight\n")); /* with zero width, we don't need this... */ if (G_HighlightThickness(w) == 0) { return; } if (XmIsManager(XtParent(w))) { _XmDrawHighlight(XtDisplayOfObject(w), XtWindowOfObject(w), XmParentBackgroundGC(w), XtX(w), XtY(w), XtWidth(w), XtHeight(w), G_HighlightThickness(w), LineSolid); } else { _XmClearBorder(XtDisplay(w), XtWindow(w), XtX(w), XtY(w), XtWidth(w), XtHeight(w), G_HighlightThickness(w)); } G_Highlighted(w) = False; G_HighlightDrawn(w) = False; }
/*----------------------------------------------------------------------*/ /* extern */ void XfeDrawShadowsAroundWidget(Widget parent, Widget child, GC top_gc, GC bottom_gc, Dimension offset, Dimension shadow_thickness, unsigned char shadow_type) { assert( _XfeIsAlive(parent) ); assert( _XfeIsAlive(child) ); assert( shadow_thickness > 0 ); assert( XmIsManager(parent) ); _XmDrawShadows(XtDisplay(parent), _XfeWindow(parent), _XfemTopShadowGC(parent), _XfemBottomShadowGC(parent), _XfeX(child) - shadow_thickness - offset, _XfeY(child) - shadow_thickness - offset, _XfeWidth(child) + 2 * shadow_thickness + 2 * offset, _XfeHeight(child) + 2 * shadow_thickness + 2 * offset, shadow_thickness, shadow_type); }
static void ParentActivate(Widget w, XEvent *event, String *params, Cardinal *num_params) { if (XmIsManager(w)) { XtCallActionProc(w, "ManagerParentActivate", event, params, *num_params); } else if (XmIsPrimitive(w)) { XtCallActionProc(w, "PrimitiveParentActivate", event, params, *num_params); } else { } }
static void draw_unhighlight(XmEnhancedButtonWidget eb) { GC manager_background_GC; eb->primitive.highlighted = False; eb->primitive.highlight_drawn = False; if (!XtWidth(eb) || !XtHeight(eb) || !eb->primitive.highlight_thickness) return; if (XmIsManager(eb->core.parent)) { #ifdef UNHIGHLIGHTT XmSpecifyUnhighlightTrait UnhighlightT; if (((UnhighlightT = (XmSpecifyUnhighlightTrait) XmeTraitGet((XtPointer) XtClass(eb->core.parent), XmQTspecifyUnhighlight)) != NULL) && (UnhighlightT->getUnhighlightGC != NULL)) { /* if unhighlight trait in parent use specified GC... */ manager_background_GC = UnhighlightT->getUnhighlightGC(eb->core.parent, (Widget) eb); } else { /* ...otherwise, use parent's background GC */ manager_background_GC = ((XmManagerWidget) (eb->core.parent))->manager.background_GC; } #else manager_background_GC = ((XmManagerWidget) (eb->core.parent))->manager.background_GC; #endif XmeDrawHighlight(XtDisplay(eb), XtWindow(eb), manager_background_GC, 0, 0, XtWidth(eb), XtHeight(eb), eb->primitive.highlight_thickness); if (!eb->pushbutton.armed && eb->primitive.shadow_thickness) XmeClearBorder(XtDisplay(eb), XtWindow(eb), eb->primitive.highlight_thickness, eb->primitive.highlight_thickness, eb->core.width - 2 * eb->primitive.highlight_thickness, eb->core.height - 2 * eb->primitive.highlight_thickness, eb->primitive.shadow_thickness); } else XmeClearBorder(XtDisplay(eb), XtWindow(eb), 0, 0, XtWidth(eb), XtHeight(eb), eb->primitive.highlight_thickness); }
XmNavigability MyManagerNavigable(Widget wid) { // We've installed this function for Manager // with the name ScrollPaneManagerName if (XmIsManager(wid) && ( XtName(wid) != NULL && strcmp(XtName(wid), ScrollPaneManagerName) == 0) ) { // To be able to request focus on Manager by call // XmProcessTraversal(, XmTRAVERSE_CURRENT) we need to make // it return XmCONTROL_NAVIGABLE. Default implementation returns // DESCENDANTS_TAB_NAVIGABLE which doesn't allow this. return XmCONTROL_NAVIGABLE; } if (oldManagerNavigable) { return oldManagerNavigable(wid); } // this will never happen return XmCONTROL_NAVIGABLE; }
static void BorderUnhighlight( Widget w ) { XmGadget g = (XmGadget) w ; XmSpecifyUnhighlightTrait UnhighlightT; GC manager_background_GC; g->gadget.highlighted = False ; g->gadget.highlight_drawn = False ; if ( g->rectangle.width == 0 || g->rectangle.height == 0 || g->gadget.highlight_thickness == 0) { return ; } /* If unhighlight trait in parent use specified GC, else just clear area */ if ( XmIsManager(g->object.parent) && ((UnhighlightT=(XmSpecifyUnhighlightTrait)XmeTraitGet((XtPointer) XtClass(g->object.parent), XmQTspecifyUnhighlight)) != NULL) && (UnhighlightT->getUnhighlightGC != NULL)) { /* Get and use parent's specified background GC for unhighlighting */ manager_background_GC = UnhighlightT->getUnhighlightGC( g->object.parent, w); XmeDrawHighlight( XtDisplay( g), XtWindow( g), manager_background_GC, g->rectangle.x, g->rectangle.y, g->rectangle.width, g->rectangle.height, g->gadget.highlight_thickness) ; } else { XmeClearBorder( XtDisplay( g), XtWindow( g), g->rectangle.x, g->rectangle.y, g->rectangle.width, g->rectangle.height, g->gadget.highlight_thickness) ; } return ; }
static void XmLDrawnBDrawStringCB(Widget w, XtPointer clientData, XtPointer callData) { XmLDrawnBData *dd; XmFontList fontlist; XmString str; XmStringDirection stringDir; unsigned char drawDir, alignment; int width, height, xoff, yoff, drawWidth; Pixel fg; Dimension highlightThickness; Dimension shadowThickness, marginWidth, marginHeight; Dimension marginLeft, marginRight, marginTop, marginBottom; if (!XtIsRealized(w)) return; dd = (XmLDrawnBData *)clientData; XtVaGetValues(w, XmNlabelString, &str, NULL); if (!str && XtName(w)) str = XmStringCreateSimple(XtName(w)); if (!str) return; XtVaGetValues(w, XmNforeground, &fg, XmNfontList, &fontlist, XmNalignment, &alignment, XmNhighlightThickness, &highlightThickness, XmNshadowThickness, &shadowThickness, XmNmarginWidth, &marginWidth, XmNmarginHeight, &marginHeight, XmNmarginLeft, &marginLeft, XmNmarginRight, &marginRight, XmNmarginTop, &marginTop, XmNmarginBottom, &marginBottom, NULL); xoff = highlightThickness + shadowThickness + marginLeft + marginWidth; yoff = highlightThickness + shadowThickness + marginTop + marginHeight; width = XtWidth(w) - xoff - xoff + marginLeft - marginRight; height = XtHeight(w) - yoff - yoff + marginTop - marginBottom; if (XmIsManager(XtParent(w))) XtVaGetValues(XtParent(w), XmNstringDirection, &stringDir, NULL); else stringDir = XmSTRING_DIRECTION_L_TO_R; switch (dd->dir) { case XmDRAWNB_LEFT: drawDir = XmSTRING_LEFT; break; case XmDRAWNB_UP: drawDir = XmSTRING_UP; break; case XmDRAWNB_DOWN: drawDir = XmSTRING_DOWN; break; default: drawDir = XmSTRING_RIGHT; break; } if (drawDir == XmSTRING_LEFT || drawDir == XmSTRING_RIGHT) drawWidth = width; else drawWidth = height; if (!dd->gc) { dd->gc = XCreateGC(XtDisplay(w), XtWindow(w), 0, NULL); dd->fontStruct = XLoadQueryFont(XtDisplay(w), "fixed"); if (!dd->fontStruct) { XmLWarning(w, "DrawnBDrawString() - FATAL can't load fixed font"); return; } XSetFont(XtDisplay(w), dd->gc, dd->fontStruct->fid); } XSetForeground(XtDisplay(w), dd->gc, fg); XmLStringDrawDirection(XtDisplay(w), XtWindow(w), fontlist, str, dd->gc, xoff, yoff, drawWidth, alignment, stringDir, drawDir); XmStringFree(str); }