|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T s
Length: 6817 (0x1aa1) Types: TextFile Names: »sxUtils.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z« └─⟦2109abc41⟧ └─⟦this⟧ »./X.V10R4/Toolkit/Sx/code/sxUtils.c«
/* * $Source: /u1/Sx.new/code/RCS/sxUtils.c,v $ * $Header: sxUtils.c,v 1.1 86/12/03 16:11:13 swick Exp $ */ #ifndef lint static char *rcsid_sxUtils_c = "$Header: sxUtils.c,v 1.1 86/12/03 16:11:13 swick Exp $"; #endif lint /* * sxUtils.c -- * * This file provides routines and variables shared by all of * the files in the sx module, but not used outside this module. * * Copyright (C) 1986 Regents of the University of California. * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, 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 University of California makes no * representations about the suitability of this software for * any purpose. It is provided "as is" without express or * implied warranty. */ #ifndef lint static char rcsid[] = "$Header: sxUtils.c,v 1.1 86/12/03 16:11:13 swick Exp $ SPRITE (Berkeley)"; #endif not lint #include <X/Xlib.h> #include <sys/time.h> #include "sprite.h" #include "sx.h" #include "sxInt.h" /* * The include below is for information about the shadow pattern. */ #include "shadow.bits" /* * The default font: */ static FontInfo *defaultFontPtr = NULL; \f /* *---------------------------------------------------------------------- * * Sx_SetDefaultFont -- * * Specify a font to be used by default in all Sx routines. * * Results: * None. * * Side effects: * After this call, the font described in fontPtr will be * used in all Sx routines whenever a font isn't specified * explicitly. The caller must ensure that the font * information in *fontPtr never changes or becomes * invalid. * *---------------------------------------------------------------------- */ void Sx_SetDefaultFont(fontPtr) FontInfo *fontPtr; /* Describes default font. */ { defaultFontPtr = fontPtr; } \f /* *---------------------------------------------------------------------- * * Sx_GetDefaultFont -- * * Provides information about the font to use when users don't * care. * * Results: * Returns a pointer to a FontInfo structure describing the default * Sx font. If the font couldn't be opened then NULL is returned. * * Side effects: * The font gets registered with X, if it wasn't already. * *---------------------------------------------------------------------- */ FontInfo * Sx_GetDefaultFont() { if (defaultFontPtr == NULL) { defaultFontPtr = XOpenFont("serif.r.11"); if (defaultFontPtr == NULL) { defaultFontPtr = XOpenFont("8x13"); if (defaultFontPtr == NULL) { Sx_Panic("Couldn't locate a default font."); } } } return defaultFontPtr; } \f /* *---------------------------------------------------------------------- * * Sx_DefaultHeight -- * * Returns a "reasonable" height to use for windows that will * contain text in the given font. * * Results: * The return value is a suggested inside dimension for windows * that will display a single line of text in fontPtr. * * Side effects: * None. * *---------------------------------------------------------------------- */ int Sx_DefaultHeight(fontPtr) FontInfo *fontPtr; /* Font to be used for text. */ { if (fontPtr == NULL) { fontPtr = Sx_GetDefaultFont(); } return (fontPtr->height + 2); } \f /* *---------------------------------------------------------------------- * * Sx_NullProc -- * * This procedure does absolutely nothing. Its most common * use is as a null event handler, in order to keep the events * from propagating up the window hierarchy. * * Results: * None. * * Side effects: * None. * *---------------------------------------------------------------------- */ void Sx_NullProc() { return; } \f /* *---------------------------------------------------------------------- * * SxFlashWait -- * * This procedure flushes X output and waits the "correct" * amount of time for a button or menu entry to flash on or * off. * * Results: * None. * * Side effects: * Time goes by. Also, X output gets flushed. * *---------------------------------------------------------------------- */ void SxFlashWait() { static struct timeval flashPeriod = {0, 50000}; /* 50 ms */ extern int select(); XFlush(); (void) select(0, (int *) 0, (int *) 0, (int *) 0, &flashPeriod); } \f /* *---------------------------------------------------------------------- * * SxDrawShadow -- * * This procedure is used to draw boxes with shadows underneath * them, like the box around a pull-down menu or a notifier. * * Results: * None. * * Side effects: * A box gets drawn with a shadow around its right and bottom * edges. * *---------------------------------------------------------------------- */ void SxDrawShadow(w, x, y, width, height, color, pixmap) Window w; /* Window in which to draw shadowed box. */ int x, y; /* UL corner of shadowed box (gives location * of outside pixel of box/shadow). */ int width, height; /* Dimensions of useable area INSIDE * shadowed box. */ int color; /* Color to use for drawing box. */ Pixmap pixmap; /* If non-zero, this is the id for a pixmap * that contains the old screen contents * under w. It's used here to make the shadow * look nicer by appearing to be on top of * the previous contents. */ { static Pixmap shadowPixmap = 0; Bitmap tmp; XPixSet(w, x, y, width + 2*SHADOW_BORDER, SHADOW_BORDER, color); XPixSet(w, x, y, SHADOW_BORDER, height + 2*SHADOW_BORDER, color); XPixSet(w, x + width + SHADOW_BORDER, y, SHADOW_BORDER, height + 2*SHADOW_BORDER, color); XPixSet(w, x, y+ height + SHADOW_BORDER, width + 2*SHADOW_BORDER, SHADOW_BORDER, color); if (shadowPixmap == 0) { int width, height; XQueryTileShape(shadow_width, shadow_height, &width, &height); if ((width <= 16) && (height <= 16)) { tmp = XStoreBitmap(width, height, shadow_bits); if (tmp != 0) { shadowPixmap = XMakePixmap(tmp, BlackPixel, WhitePixel); XFreeBitmap(tmp); } } if (shadowPixmap == 0) { shadowPixmap = BlackPixmap; } } XTileSet(w, x + SHADOW_WIDTH, y + height + 2*SHADOW_BORDER, width + 2*SHADOW_BORDER, SHADOW_WIDTH, shadowPixmap); XTileSet(w, x + width + 2*SHADOW_BORDER, y + SHADOW_WIDTH, SHADOW_WIDTH, height + 2*SHADOW_WIDTH, shadowPixmap); if (pixmap != 0) { XPixmapPut(w, 0, y + height + 2*SHADOW_BORDER, 0, y + height + 2*SHADOW_BORDER, SHADOW_WIDTH, SHADOW_WIDTH, pixmap, GXcopy, AllPlanes); XPixmapPut(w, x + width + 2*SHADOW_BORDER, 0, x + width + 2*SHADOW_BORDER, 0, SHADOW_WIDTH, SHADOW_WIDTH, pixmap, GXcopy, AllPlanes); } }