diff options
Diffstat (limited to 'nx-X11/lib/Xaw/SmeBSB.c')
-rw-r--r-- | nx-X11/lib/Xaw/SmeBSB.c | 774 |
1 files changed, 0 insertions, 774 deletions
diff --git a/nx-X11/lib/Xaw/SmeBSB.c b/nx-X11/lib/Xaw/SmeBSB.c deleted file mode 100644 index 0d77278ab..000000000 --- a/nx-X11/lib/Xaw/SmeBSB.c +++ /dev/null @@ -1,774 +0,0 @@ -/* $Xorg: SmeBSB.c,v 1.5 2001/02/09 02:03:45 xorgcvs Exp $ */ - -/* -Copyright 1989, 1994, 1998 The Open Group - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation. - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN -AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of The Open Group shall not be -used in advertising or otherwise to promote the sale, use or other dealings -in this Software without prior written authorization from The Open Group. - */ - -/* $XFree86: xc/lib/Xaw/SmeBSB.c,v 1.11 2001/01/17 19:42:31 dawes Exp $ */ - -/* - * SmeBSB.c - Source code file for BSB Menu Entry object. - * - * Date: September 26, 1989 - * - * By: Chris D. Peterson - * MIT X Consortium - * kit@expo.lcs.mit.edu - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif -#include <stdio.h> -#include <X11/IntrinsicP.h> -#include <X11/StringDefs.h> -#include <X11/Xos.h> -#include <X11/Xmu/Drawing.h> -#include <X11/Xmu/SysUtil.h> -#include <X11/Xaw/Cardinals.h> -#include <X11/Xaw/SimpleMenu.h> -#include <X11/Xaw/SmeBSBP.h> -#include <X11/Xaw/XawInit.h> -#include "Private.h" - -#define ONE_HUNDRED 100 - -/* - * Class Methods - */ -static void FlipColors(Widget); -static void XawSmeBSBClassInitialize(void); -static void XawSmeBSBInitialize(Widget, Widget, ArgList, Cardinal*); -static void XawSmeBSBDestroy(Widget); -static XtGeometryResult XawSmeBSBQueryGeometry(Widget, XtWidgetGeometry*, - XtWidgetGeometry*); -static void XawSmeBSBRedisplay(Widget, XEvent*, Region); -static Boolean XawSmeBSBSetValues(Widget, Widget, Widget, - ArgList, Cardinal*); - -/* - * Prototypes - */ -static void CreateGCs(Widget); -static void GetBitmapInfo(Widget, Bool); -static void GetDefaultSize(Widget, Dimension*, Dimension*); -static void DestroyGCs(Widget); -static void DrawBitmaps(Widget, GC); - -/* - * Initialization - */ -#define offset(field) XtOffsetOf(SmeBSBRec, sme_bsb.field) -static XtResource resources[] = { - { - XtNlabel, - XtCLabel, - XtRString, - sizeof(String), - offset(label), - XtRString, - NULL - }, - { - XtNvertSpace, - XtCVertSpace, - XtRInt, - sizeof(int), - offset(vert_space), - XtRImmediate, - (XtPointer)25 - }, - { - XtNleftBitmap, - XtCLeftBitmap, - XtRBitmap, - sizeof(Pixmap), - offset(left_bitmap), - XtRImmediate, - (XtPointer)None - }, - { - XtNjustify, - XtCJustify, - XtRJustify, - sizeof(XtJustify), - offset(justify), - XtRImmediate, - (XtPointer)XtJustifyLeft - }, - { - XtNrightBitmap, - XtCRightBitmap, - XtRBitmap, - sizeof(Pixmap), - offset(right_bitmap), - XtRImmediate, - (XtPointer)None - }, - { - XtNleftMargin, - XtCHorizontalMargins, - XtRDimension, - sizeof(Dimension), - offset(left_margin), - XtRImmediate, - (XtPointer)4 - }, - { - XtNrightMargin, - XtCHorizontalMargins, - XtRDimension, - sizeof(Dimension), - offset(right_margin), - XtRImmediate, - (XtPointer)4 - }, - { - XtNforeground, - XtCForeground, - XtRPixel, - sizeof(Pixel), - offset(foreground), - XtRString, - XtDefaultForeground - }, - { - XtNfont, - XtCFont, - XtRFontStruct, - sizeof(XFontStruct*), - offset(font), - XtRString, - XtDefaultFont - }, - { - XtNfontSet, - XtCFontSet, - XtRFontSet, - sizeof(XFontSet), - offset(fontset), - XtRString, - XtDefaultFontSet - }, -#ifndef OLDXAW - { - XtNmenuName, - XtCMenuName, - XtRString, - sizeof(String), - offset(menu_name), - XtRImmediate, - (XtPointer)NULL - }, -#endif -}; -#undef offset - -#define superclass (&smeClassRec) -SmeBSBClassRec smeBSBClassRec = { - /* rectangle */ - { - (WidgetClass)superclass, /* superclass */ - "SmeBSB", /* class_name */ - sizeof(SmeBSBRec), /* size */ - XawSmeBSBClassInitialize, /* class_init */ - NULL, /* class_part_initialize */ - False, /* class_inited */ - XawSmeBSBInitialize, /* initialize */ - NULL, /* initialize_hook */ - NULL, /* realize */ - NULL, /* actions */ - 0, /* num_actions */ - resources, /* resources */ - XtNumber(resources), /* num_resources */ - NULLQUARK, /* xrm_class */ - False, /* compress_motion */ - False, /* compress_exposure */ - False, /* compress_enterleave */ - False, /* visible_interest */ - XawSmeBSBDestroy, /* destroy */ - NULL, /* resize */ - XawSmeBSBRedisplay, /* expose */ - XawSmeBSBSetValues, /* set_values */ - NULL, /* set_values_hook */ - XtInheritSetValuesAlmost, /* set_values_almost */ - NULL, /* get_values_hook */ - NULL, /* accept_focus */ - XtVersion, /* intrinsics version */ - NULL, /* callback offsets */ - NULL, /* tm_table */ - XawSmeBSBQueryGeometry, /* query_geometry */ - NULL, /* display_accelerator */ - NULL, /* extension */ - }, - /* sme */ - { - FlipColors, /* highlight */ - FlipColors, /* unhighlight */ - XtInheritNotify, /* notify */ - NULL, /* extension */ - }, - /* sme_bsb */ - { - NULL, /* extension */ - }, -}; -WidgetClass smeBSBObjectClass = (WidgetClass)&smeBSBClassRec; - -/* - * Function: - * XawSmeBSBClassInitialize - * - * Description: - * Initializes the SmeBSBObject. - */ -static void -XawSmeBSBClassInitialize(void) -{ - XawInitializeWidgetSet(); - XtAddConverter(XtRString, XtRJustify, XmuCvtStringToJustify, NULL, 0); - XtSetTypeConverter(XtRJustify, XtRString, XmuCvtJustifyToString, - NULL, 0, XtCacheNone, NULL); -} - -/* - * Function: - * XawSmeBSBInitialize - * - * Parameters: - * request - widget requested by the argument list - * cnew - new widget with both resource and non resource values - * - * Description: - * Initializes the simple menu widget entry. - */ -/*ARGSUSED*/ -static void -XawSmeBSBInitialize(Widget request, Widget cnew, - ArgList args, Cardinal *num_args) -{ - SmeBSBObject entry = (SmeBSBObject)cnew; - - if (!entry->sme_bsb.font) XtError("Aborting: no font found\n"); - - if (entry->sme_bsb.label == NULL) - entry->sme_bsb.label = XtName(cnew); - else - entry->sme_bsb.label = XtNewString(entry->sme_bsb.label); - - GetDefaultSize(cnew, &entry->rectangle.width, &entry->rectangle.height); - CreateGCs(cnew); - - entry->sme_bsb.left_bitmap_width = entry->sme_bsb.left_bitmap_height = 0; - entry->sme_bsb.right_bitmap_width = entry->sme_bsb.right_bitmap_height = 0; - - GetBitmapInfo(cnew, True); /* Left Bitmap Info */ - GetBitmapInfo(cnew, False); /* Right Bitmap Info */ -} - -/* - * Function: - * XawSmeBSBDestroy - * - * Parameters: - * w - simple menu widget entry - */ -static void -XawSmeBSBDestroy(Widget w) -{ - SmeBSBObject entry = (SmeBSBObject)w; - - DestroyGCs(w); - if (entry->sme_bsb.label != XtName(w)) - XtFree(entry->sme_bsb.label); -} - -/* - * Function: - * XawSmeBSBRedisplay - * - * Parameters: - * w - simple menu widget entry - * event - X event that caused this redisplay - * region - region the needs to be repainted - * - * Description: - * Redisplays the contents of the widget. - */ -/* ARGSUSED */ -static void -XawSmeBSBRedisplay(Widget w, XEvent *event, Region region) -{ - GC gc; - SmeBSBObject entry = (SmeBSBObject)w; - int font_ascent, font_descent, y_loc; - int fontset_ascent, fontset_descent; - XFontSetExtents *ext = XExtentsOfFontSet(entry->sme_bsb.fontset); - - font_ascent = font_descent = fontset_ascent = fontset_descent = 0; - entry->sme_bsb.set_values_area_cleared = False; - - if (entry->sme.international == True) { - fontset_ascent = XawAbs(ext->max_ink_extent.y); - fontset_descent = ext->max_ink_extent.height - fontset_ascent; - } - else { - font_ascent = entry->sme_bsb.font->max_bounds.ascent; - font_descent = entry->sme_bsb.font->max_bounds.descent; - } - y_loc = XtY(entry); - - if (XtIsSensitive(w) && XtIsSensitive(XtParent(w))) { - if (w == XawSimpleMenuGetActiveEntry(XtParent(w))) { - XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w), - entry->sme_bsb.norm_gc, XtX(w), y_loc, - XtWidth(entry), XtHeight(entry)); - gc = entry->sme_bsb.rev_gc; - } - else - gc = entry->sme_bsb.norm_gc; - } - else - gc = entry->sme_bsb.norm_gray_gc; - - if (entry->sme_bsb.label != NULL) { - int x_loc = entry->sme_bsb.left_margin; - int len = strlen(entry->sme_bsb.label); - char *label = entry->sme_bsb.label; - int width, t_width; - - switch(entry->sme_bsb.justify) { - case XtJustifyCenter: - if (entry->sme.international == True) { - t_width = XmbTextEscapement(entry->sme_bsb.fontset,label, - len); - width = XtWidth(entry) - (entry->sme_bsb.left_margin + - entry->sme_bsb.right_margin); - } - else { - t_width = XTextWidth(entry->sme_bsb.font, label, len); - width = XtWidth(entry) - (entry->sme_bsb.left_margin + - entry->sme_bsb.right_margin); - } - x_loc += (width - t_width) >> 1; - break; - case XtJustifyRight: - if (entry->sme.international == True) { - t_width = XmbTextEscapement(entry->sme_bsb.fontset,label, - len); - x_loc = XtWidth(entry) - (entry->sme_bsb.right_margin + - t_width); - } - else { - t_width = XTextWidth(entry->sme_bsb.font, label, len); - x_loc = XtWidth(entry) - (entry->sme_bsb.right_margin + - t_width); - } - break; - case XtJustifyLeft: - /*FALLTHROUGH*/ - default: - break; - } - - /* this will center the text in the gadget top-to-bottom */ - if (entry->sme.international == True) { - y_loc += ((XtHeight(entry) - - (fontset_ascent + fontset_descent)) >> 1) + - fontset_ascent; - - XmbDrawString(XtDisplayOfObject(w), XtWindowOfObject(w), - entry->sme_bsb.fontset, gc, - XtX(w) + x_loc, y_loc, label, len); - } - else { - y_loc += ((XtHeight(entry) - - (font_ascent + font_descent)) >> 1) + font_ascent; - - XDrawString(XtDisplayOfObject(w), XtWindowOfObject(w), gc, - XtX(w) + x_loc, y_loc, label, len); - } - } - - DrawBitmaps(w, gc); -} - - -/* - * Function: - * XawSmeBSBSetValues - * - * Parameters: - * current - current state of the widget - * request - what was requested - * cnew - what the widget will become - * - * Description: - * Relayout the menu when one of the resources is changed. - */ - -/*ARGSUSED*/ -static Boolean -XawSmeBSBSetValues(Widget current, Widget request, Widget cnew, - ArgList args, Cardinal *num_args) -{ - SmeBSBObject entry = (SmeBSBObject)cnew; - SmeBSBObject old_entry = (SmeBSBObject)current; - Boolean ret_val = False; - - if (old_entry->sme_bsb.label != entry->sme_bsb.label) { - if (old_entry->sme_bsb.label != XtName(cnew)) - XtFree((char *)old_entry->sme_bsb.label); - - if (entry->sme_bsb.label != XtName(cnew)) - entry->sme_bsb.label = XtNewString(entry->sme_bsb.label); - - ret_val = True; - } - - if (entry->rectangle.sensitive != old_entry->rectangle.sensitive) - ret_val = True; - - if (entry->sme_bsb.left_bitmap != old_entry->sme_bsb.left_bitmap) { - GetBitmapInfo(cnew, True); - ret_val = True; - } - - if (entry->sme_bsb.right_bitmap != old_entry->sme_bsb.right_bitmap) { - GetBitmapInfo(cnew, False); - ret_val = True; - } - - if ((old_entry->sme_bsb.font != entry->sme_bsb.font - && old_entry->sme.international == False) - || old_entry->sme_bsb.foreground != entry->sme_bsb.foreground) { - DestroyGCs(current); - CreateGCs(cnew); - ret_val = True; - } - - if (old_entry->sme_bsb.fontset != entry->sme_bsb.fontset && - old_entry->sme.international == True) - /* DONT changes the GCs, because the fontset is not in them */ - ret_val = True; - - if (ret_val) { - Dimension width, height; - - GetDefaultSize(cnew, &width, &height); - entry->sme_bsb.set_values_area_cleared = True; - XtMakeResizeRequest(cnew, width, height, NULL, NULL); - } - - return (ret_val); -} - -/* - * Function: - * XawSmeBSBQueryGeometry - * - * Parameters: - * w - menu entry object - * itended - intended and return geometry info - * return_val - "" - * - * Returns: - * Geometry Result - * - * Description: - * Returns the preferred geometry for this widget. - * See the Intrinsics manual for details on what this function is for. - */ -static XtGeometryResult -XawSmeBSBQueryGeometry(Widget w, XtWidgetGeometry *intended, - XtWidgetGeometry *return_val) -{ - SmeBSBObject entry = (SmeBSBObject)w; - Dimension width, height; - XtGeometryResult ret_val = XtGeometryYes; - XtGeometryMask mode = intended->request_mode; - - GetDefaultSize(w, &width, &height); - - if (((mode & CWWidth) && intended->width != width) || !(mode & CWWidth)) { - return_val->request_mode |= CWWidth; - return_val->width = width; - ret_val = XtGeometryAlmost; - } - - if (((mode & CWHeight) && intended->height != height) || !(mode & CWHeight)) { - return_val->request_mode |= CWHeight; - return_val->height = height; - ret_val = XtGeometryAlmost; - } - - if (ret_val == XtGeometryAlmost) { - mode = return_val->request_mode; - if (((mode & CWWidth) && width == XtWidth(entry)) && - ((mode & CWHeight) && height == XtHeight(entry))) - return (XtGeometryNo); - } - - return (ret_val); -} - -/* - * Function: - * FlipColors - * - * Parameters: - * w - bsb menu entry widget - * - * Description: - * Invert the colors of the current entry. - */ -static void -FlipColors(Widget w) -{ - SmeBSBObject entry = (SmeBSBObject)w; - - if (entry->sme_bsb.set_values_area_cleared) - return; - - XFillRectangle(XtDisplayOfObject(w), XtWindowOfObject(w), - entry->sme_bsb.invert_gc, - XtX(w), XtY(entry), XtWidth(entry), XtHeight(entry)); -} - -/* - * Function: - * GetDefaultSize - * - * Parameters: - * w - menu entry widget. - * width - default width (return) - * height - default height (return) - * - * Description: - * Calculates the Default (preferred) size of this menu entry. - */ -static void -GetDefaultSize(Widget w, Dimension *width, Dimension *height) -{ - SmeBSBObject entry = (SmeBSBObject)w; - - if (entry->sme.international == True) { - XFontSetExtents *ext = XExtentsOfFontSet(entry->sme_bsb.fontset); - - if (entry->sme_bsb.label == NULL) - *width = 0; - else - *width = XmbTextEscapement(entry->sme_bsb.fontset, - entry->sme_bsb.label, - strlen(entry->sme_bsb.label)); - *width += entry->sme_bsb.left_margin + entry->sme_bsb.right_margin; - *height = ext->max_ink_extent.height; - *height = ((int)*height * (ONE_HUNDRED + - entry->sme_bsb.vert_space)) / ONE_HUNDRED; - } - else { - if (entry->sme_bsb.label == NULL) - *width = 0; - else - *width = XTextWidth(entry->sme_bsb.font, entry->sme_bsb.label, - strlen(entry->sme_bsb.label)); - - *width += entry->sme_bsb.left_margin + entry->sme_bsb.right_margin; - - *height = entry->sme_bsb.font->max_bounds.ascent + - entry->sme_bsb.font->max_bounds.descent; - - *height = ((int)*height * (ONE_HUNDRED + - entry->sme_bsb.vert_space)) / ONE_HUNDRED; - } -} - -/* - * Function: - * DrawBitmaps - * - * Parameters: - * w - simple menu widget entry - * gc - graphics context to use for drawing - * - * Description: - * Draws left and right bitmaps. - */ -static void -DrawBitmaps(Widget w, GC gc) -{ - int x_loc, y_loc; - SmeBSBObject entry = (SmeBSBObject)w; - - if (entry->sme_bsb.left_bitmap == None && - entry->sme_bsb.right_bitmap == None) - return; - - /* - * Draw Left Bitmap - */ - if (entry->sme_bsb.left_bitmap != None) { - x_loc = ((entry->sme_bsb.left_margin - - entry->sme_bsb.left_bitmap_width) >> 1) + XtX(w); - - y_loc = XtY(entry) + ((XtHeight(entry) - - entry->sme_bsb.left_bitmap_height) >> 1); - - XCopyPlane(XtDisplayOfObject(w), entry->sme_bsb.left_bitmap, - XtWindowOfObject(w), gc, 0, 0, - entry->sme_bsb.left_bitmap_width, - entry->sme_bsb.left_bitmap_height, x_loc, y_loc, 1); - } - - /* - * Draw Right Bitmap - */ - if (entry->sme_bsb.right_bitmap != None) { - x_loc = XtWidth(entry) - ((entry->sme_bsb.right_margin + - entry->sme_bsb.right_bitmap_width) >> 1) + - XtX(w); - y_loc = XtY(entry) + ((XtHeight(entry) - - entry->sme_bsb.right_bitmap_height) >> 1); - - XCopyPlane(XtDisplayOfObject(w), entry->sme_bsb.right_bitmap, - XtWindowOfObject(w), gc, 0, 0, - entry->sme_bsb.right_bitmap_width, - entry->sme_bsb.right_bitmap_height, x_loc, y_loc, 1); - } -} - -/* - * Function: - * GetBitmapInfo - * - * Parameters: - * w - bsb menu entry object - * is_left - True: if we are testing left bitmap - * False: if we are testing the right bitmap - * - * Description: - * Gets the bitmap information from either of the bitmaps. - */ -static void -GetBitmapInfo(Widget w, Bool is_left) -{ - SmeBSBObject entry = (SmeBSBObject)w; - unsigned int depth, bw; - Window root; - int x, y; - unsigned int width, height; - - if (is_left) { - if (entry->sme_bsb.left_bitmap != None && - XGetGeometry(XtDisplayOfObject(w), - entry->sme_bsb.left_bitmap, &root, - &x, &y, &width, &height, &bw, &depth)) { - entry->sme_bsb.left_bitmap_width = width; - entry->sme_bsb.left_bitmap_height = height; - } - } - else if (entry->sme_bsb.right_bitmap != None && - XGetGeometry(XtDisplayOfObject(w), - entry->sme_bsb.right_bitmap, &root, - &x, &y, &width, &height, &bw, &depth)) { - entry->sme_bsb.right_bitmap_width = width; - entry->sme_bsb.right_bitmap_height = height; - } -} - -/* - * Function: - * CreateGCs - * - * Parameters: - * w - simple menu widget entry - * - * Description: - * Creates all gc's for the simple menu widget. - */ -static void -CreateGCs(Widget w) -{ - SmeBSBObject entry = (SmeBSBObject)w; - XGCValues values; - XtGCMask mask, mask_i18n; - - values.foreground = XtParent(w)->core.background_pixel; - values.background = entry->sme_bsb.foreground; - values.font = entry->sme_bsb.font->fid; - values.graphics_exposures = False; - mask = GCForeground | GCBackground | GCGraphicsExposures | GCFont; - mask_i18n = GCForeground | GCBackground | GCGraphicsExposures; - if (entry->sme.international == True) - entry->sme_bsb.rev_gc = XtAllocateGC(w, 0, mask_i18n, &values, GCFont, 0); - else - entry->sme_bsb.rev_gc = XtGetGC(w, mask, &values); - - values.foreground = entry->sme_bsb.foreground; - values.background = XtParent(w)->core.background_pixel; - if (entry->sme.international == True) - entry->sme_bsb.norm_gc = XtAllocateGC(w, 0, mask_i18n, &values, GCFont, 0); - else - entry->sme_bsb.norm_gc = XtGetGC(w, mask, &values); - - values.fill_style = FillTiled; - values.tile = XmuCreateStippledPixmap(XtScreenOfObject(w), - entry->sme_bsb.foreground, - XtParent(w)->core.background_pixel, - XtParent(w)->core.depth); - values.graphics_exposures = False; - mask |= GCTile | GCFillStyle; - mask_i18n |= GCTile | GCFillStyle; - if (entry->sme.international == True) - entry->sme_bsb.norm_gray_gc = XtAllocateGC(w, 0, mask_i18n, &values, - GCFont, 0); - else - entry->sme_bsb.norm_gray_gc = XtGetGC(w, mask, &values); - - values.foreground ^= values.background; - values.background = 0; - values.function = GXxor; - mask = GCForeground | GCBackground | GCGraphicsExposures | GCFunction; - entry->sme_bsb.invert_gc = XtGetGC(w, mask, &values); -} - -/* - * Function: - * DestroyGCs - * - * Parameters: - * w - simple menu widget entry - * - * Description: - * Removes all gc's for the simple menu widget. - */ -static void -DestroyGCs(Widget w) -{ - SmeBSBObject entry = (SmeBSBObject)w; - - XtReleaseGC(w, entry->sme_bsb.norm_gc); - XtReleaseGC(w, entry->sme_bsb.norm_gray_gc); - XtReleaseGC(w, entry->sme_bsb.rev_gc); - XtReleaseGC(w, entry->sme_bsb.invert_gc); -} |