diff options
Diffstat (limited to 'xlib/xgc.c')
-rw-r--r-- | xlib/xgc.c | 492 |
1 files changed, 255 insertions, 237 deletions
@@ -1,15 +1,15 @@ -/* +/* * xgc.c -- * * This file contains generic routines for manipulating X graphics - * contexts. + * contexts. * * Copyright (c) 1995-1996 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: xgc.c,v 1.9 2006/07/20 06:24:16 das Exp $ + * RCS: @(#) $Id: xgc.c,v 1.10 2007/01/02 23:39:40 dkf Exp $ */ #include <tkInt.h> @@ -23,7 +23,6 @@ # define Cursor XCursor # define Region XRegion #endif - /* *---------------------------------------------------------------------- @@ -33,7 +32,7 @@ * Allocate a new GC, and initialize the specified fields. * * Results: - * Returns a newly allocated GC. + * Returns a newly allocated GC. * * Side effects: * None. @@ -42,55 +41,59 @@ */ GC -XCreateGC(display, d, mask, values) - Display* display; - Drawable d; - unsigned long mask; - XGCValues* values; +XCreateGC( + Display *display, + Drawable d, + unsigned long mask, + XGCValues *values) { GC gp; -/* - * In order to have room for a dash list, MAX_DASH_LIST_SIZE extra chars are - * defined, which is invisible from the outside. The list is assumed to end - * with a 0-char, so this must be set explicitely during initialization. - */ + /* + * In order to have room for a dash list, MAX_DASH_LIST_SIZE extra chars + * are defined, which is invisible from the outside. The list is assumed + * to end with a 0-char, so this must be set explicitely during + * initialization. + */ #define MAX_DASH_LIST_SIZE 10 - gp = (XGCValues *)ckalloc(sizeof(XGCValues) + MAX_DASH_LIST_SIZE); + gp = (XGCValues *) ckalloc(sizeof(XGCValues) + MAX_DASH_LIST_SIZE); if (!gp) { return None; } - gp->function = (mask & GCFunction) ?values->function :GXcopy; - gp->plane_mask = (mask & GCPlaneMask) ?values->plane_mask :(unsigned long )(~0); - gp->foreground = (mask & GCForeground) ?values->foreground :0; - gp->background = (mask & GCBackground) ?values->background :0xffffff; - gp->line_width = (mask & GCLineWidth) ?values->line_width :1; - gp->line_style = (mask & GCLineStyle) ?values->line_style :LineSolid; - gp->cap_style = (mask & GCCapStyle) ?values->cap_style :0; - gp->join_style = (mask & GCJoinStyle) ?values->join_style :0; - gp->fill_style = (mask & GCFillStyle) ?values->fill_style :FillSolid; - gp->fill_rule = (mask & GCFillRule) ?values->fill_rule :WindingRule; - gp->arc_mode = (mask & GCArcMode) ?values->arc_mode :ArcPieSlice; - gp->tile = (mask & GCTile) ?values->tile :None; - gp->stipple = (mask & GCStipple) ?values->stipple :None; - gp->ts_x_origin = (mask & GCTileStipXOrigin) ?values->ts_x_origin:0; - gp->ts_y_origin = (mask & GCTileStipYOrigin) ?values->ts_y_origin:0; - gp->font = (mask & GCFont) ?values->font :None; - gp->subwindow_mode = (mask & GCSubwindowMode)?values->subwindow_mode:ClipByChildren; - gp->graphics_exposures = (mask & GCGraphicsExposures)?values->graphics_exposures:True; - gp->clip_x_origin = (mask & GCClipXOrigin) ?values->clip_x_origin :0; - gp->clip_y_origin = (mask & GCClipYOrigin) ?values->clip_y_origin :0; - gp->dash_offset = (mask & GCDashOffset) ?values->dash_offset :0; - gp->dashes = (mask & GCDashList) ?values->dashes :4; - (&(gp->dashes))[1] = 0; +#define InitField(name,maskbit,default) \ + (gp->name = (mask & (maskbit)) ? values->name : (default)) + + InitField(function, GCFunction, GXCopy); + InitField(plane_mask, GCPlaneMask, (unsigned long)(~0)); + InitField(foreground, GCForeground, 0); + InitField(background, GCBackground, 0xffffff); + InitField(line_width, GCLineWidth, 1); + InitField(line_style, GCLineStyle, LineSolid); + InitField(cap_style, GCCapStyle, 0); + InitField(join_style, GCJoinStyle, 0); + InitField(fill_style, GCFillStyle, FillSolid); + InitField(fill_rule, GCFillRule, WindingRule); + InitField(arc_mode, GCArcMode, ArcPieSlice); + InitField(tile, GCTile, None); + InitField(stipple, GCStipple, None); + InitField(ts_x_origin, GCTileStipXOrigin, 0); + InitField(ts_y_origin, GCTileStipYOrigin, 0); + InitField(font, GCFont, None); + InitField(subwindow_mode, GCSubwindowMode, ClipByChildren); + InitField(graphics_exposures, GCGraphicsExposures, True); + InitField(clip_x_origin, GCClipXOrigin, 0); + InitField(clip_y_origin, GCClipYOrigin, 0); + InitField(dash_offset, GCDashOffset, 0); + InitField(dashes, GCDashList, 4); + (&(gp->dashes))[1] = 0; if (mask & GCClipMask) { - gp->clip_mask = (Pixmap)ckalloc(sizeof(TkpClipMask)); - ((TkpClipMask*)gp->clip_mask)->type = TKP_CLIP_PIXMAP; - ((TkpClipMask*)gp->clip_mask)->value.pixmap = values->clip_mask; + gp->clip_mask = (Pixmap) ckalloc(sizeof(TkpClipMask)); + ((TkpClipMask *) gp->clip_mask)->type = TKP_CLIP_PIXMAP; + ((TkpClipMask *) gp->clip_mask)->value.pixmap = values->clip_mask; } else { gp->clip_mask = None; } @@ -103,8 +106,7 @@ XCreateGC(display, d, mask, values) * * XChangeGC -- * - * Changes the GC components specified by valuemask for the - * specified GC. + * Changes the GC components specified by valuemask for the specified GC. * * Results: * None. @@ -116,35 +118,43 @@ XCreateGC(display, d, mask, values) */ void -XChangeGC(d, gc, mask, values) - Display * d; - GC gc; - unsigned long mask; - XGCValues *values; -{ - if (mask & GCFunction) { gc->function = values->function; } - if (mask & GCPlaneMask) { gc->plane_mask = values->plane_mask; } - if (mask & GCForeground) { gc->foreground = values->foreground; } - if (mask & GCBackground) { gc->background = values->background; } - if (mask & GCLineWidth) { gc->line_width = values->line_width; } - if (mask & GCLineStyle) { gc->line_style = values->line_style; } - if (mask & GCCapStyle) { gc->cap_style = values->cap_style; } - if (mask & GCJoinStyle) { gc->join_style = values->join_style; } - if (mask & GCFillStyle) { gc->fill_style = values->fill_style; } - if (mask & GCFillRule) { gc->fill_rule = values->fill_rule; } - if (mask & GCArcMode) { gc->arc_mode = values->arc_mode; } - if (mask & GCTile) { gc->tile = values->tile; } - if (mask & GCStipple) { gc->stipple = values->stipple; } - if (mask & GCTileStipXOrigin) { gc->ts_x_origin = values->ts_x_origin; } - if (mask & GCTileStipYOrigin) { gc->ts_y_origin = values->ts_y_origin; } - if (mask & GCFont) { gc->font = values->font; } - if (mask & GCSubwindowMode) { gc->subwindow_mode = values->subwindow_mode; } - if (mask & GCGraphicsExposures) { gc->graphics_exposures = values->graphics_exposures; } - if (mask & GCClipXOrigin) { gc->clip_x_origin = values->clip_x_origin; } - if (mask & GCClipYOrigin) { gc->clip_y_origin = values->clip_y_origin; } - if (mask & GCClipMask) { XSetClipMask(d, gc, values->clip_mask); } - if (mask & GCDashOffset) { gc->dash_offset = values->dash_offset; } - if (mask & GCDashList) { gc->dashes = values->dashes; (&(gc->dashes))[1] = 0;} +XChangeGC( + Display *d, + GC gc, + unsigned long mask, + XGCValues *values) +{ +#define ModifyField(name,maskbit) \ + if (mask & (maskbit)) { gc->name = values->name; } + + ModifyField(function, GCFunction); + ModifyField(plane_mask, GCPlaneMask); + ModifyField(foreground, GCForeground); + ModifyField(background, GCBackground); + ModifyField(line_width, GCLineWidth); + ModifyField(line_style, GCLineStyle); + ModifyField(cap_style, GCCapStyle); + ModifyField(join_style, GCJoinStyle); + ModifyField(fill_style, GCFillStyle); + ModifyField(fill_rule, GCFillRule); + ModifyField(arc_mode, GCArcMode); + ModifyField(tile, GCTile); + ModifyField(stipple, GCStipple); + ModifyField(ts_x_origin, GCTileStipXOrigin); + ModifyField(ts_y_origin, GCTileStipYOrigin); + ModifyField(font, GCFont); + ModifyField(subwindow_mode, GCSubwindowMode); + ModifyField(graphics_exposures, GCGraphicsExposures); + ModifyField(clip_x_origin, GCClipXOrigin); + ModifyField(clip_y_origin, GCClipYOrigin); + ModifyField(dash_offset, GCDashOffset); + if (mask & GCClipMask) { + XSetClipMask(d, gc, values->clip_mask); + } + if (mask & GCDashList) { + gc->dashes = values->dashes; + (&(gc->dashes))[1] = 0; + } } /* @@ -163,9 +173,9 @@ XChangeGC(d, gc, mask, values) *---------------------------------------------------------------------- */ -void XFreeGC(d, gc) - Display * d; - GC gc; +void XFreeGC( + Display *d, + GC gc) { if (gc != None) { if (gc->clip_mask != None) { @@ -180,8 +190,8 @@ void XFreeGC(d, gc) * * XSetForeground, etc. -- * - * The following functions are simply accessor functions for - * the GC slots. + * The following functions are simply accessor functions for the GC + * slots. * * Results: * None. @@ -192,31 +202,31 @@ void XFreeGC(d, gc) *---------------------------------------------------------------------- */ -void -XSetForeground(display, gc, foreground) - Display *display; - GC gc; - unsigned long foreground; +void +XSetForeground( + Display *display, + GC gc, + unsigned long foreground) { gc->foreground = foreground; } -void -XSetBackground(display, gc, background) - Display *display; - GC gc; - unsigned long background; +void +XSetBackground( + Display *display, + GC gc, + unsigned long background) { gc->background = background; } void -XSetDashes(display, gc, dash_offset, dash_list, n) - Display* display; - GC gc; - int dash_offset; - _Xconst char* dash_list; - int n; +XSetDashes( + Display *display, + GC gc, + int dash_offset, + _Xconst char *dash_list, + int n) { char *p = &(gc->dashes); @@ -235,78 +245,77 @@ XSetDashes(display, gc, dash_offset, dash_list, n) } void -XSetFunction(display, gc, function) - Display *display; - GC gc; - int function; +XSetFunction( + Display *display, + GC gc, + int function) { gc->function = function; } void -XSetFillRule(display, gc, fill_rule) - Display *display; - GC gc; - int fill_rule; +XSetFillRule( + Display *display, + GC gc, + int fill_rule) { gc->fill_rule = fill_rule; } void -XSetFillStyle(display, gc, fill_style) - Display *display; - GC gc; - int fill_style; +XSetFillStyle( + Display *display, + GC gc, + int fill_style) { gc->fill_style = fill_style; } void -XSetTSOrigin(display, gc, x, y) - Display *display; - GC gc; - int x, y; +XSetTSOrigin( + Display *display, + GC gc, + int x, int y) { gc->ts_x_origin = x; gc->ts_y_origin = y; } void -XSetFont(display, gc, font) - Display *display; - GC gc; - Font font; +XSetFont( + Display *display, + GC gc, + Font font) { gc->font = font; } void -XSetArcMode(display, gc, arc_mode) - Display *display; - GC gc; - int arc_mode; +XSetArcMode( + Display *display, + GC gc, + int arc_mode) { gc->arc_mode = arc_mode; } void -XSetStipple(display, gc, stipple) - Display *display; - GC gc; - Pixmap stipple; +XSetStipple( + Display *display, + GC gc, + Pixmap stipple) { gc->stipple = stipple; } void -XSetLineAttributes(display, gc, line_width, line_style, cap_style, - join_style) - Display *display; - GC gc; - unsigned int line_width; - int line_style; - int cap_style; - int join_style; +XSetLineAttributes( + Display *display, + GC gc, + unsigned int line_width, + int line_style, + int cap_style, + int join_style) { gc->line_width = line_width; gc->line_style = line_style; @@ -315,11 +324,11 @@ XSetLineAttributes(display, gc, line_width, line_style, cap_style, } void -XSetClipOrigin(display, gc, clip_x_origin, clip_y_origin) - Display* display; - GC gc; - int clip_x_origin; - int clip_y_origin; +XSetClipOrigin( + Display *display, + GC gc, + int clip_x_origin, + int clip_y_origin) { gc->clip_x_origin = clip_x_origin; gc->clip_y_origin = clip_y_origin; @@ -332,10 +341,9 @@ XSetClipOrigin(display, gc, clip_x_origin, clip_y_origin) * * Sets the clipping region/pixmap for a GC. * - * Note that unlike the Xlib equivalent, it is not safe to delete - * the region after setting it into the GC. The only use of - * TkSetRegion is currently in ImgPhotoDisplay, which uses the GC - * immediately. + * Note that unlike the Xlib equivalent, it is not safe to delete the + * region after setting it into the GC. The only use of TkSetRegion is + * currently in ImgPhotoDisplay, which uses the GC immediately. * * Results: * None. @@ -347,10 +355,10 @@ XSetClipOrigin(display, gc, clip_x_origin, clip_y_origin) */ void -TkSetRegion(display, gc, r) - Display* display; - GC gc; - TkRegion r; +TkSetRegion( + Display *display, + GC gc, + TkRegion r) { if (r == None) { if (gc->clip_mask) { @@ -363,15 +371,15 @@ TkSetRegion(display, gc, r) if (gc->clip_mask == None) { gc->clip_mask = (Pixmap)ckalloc(sizeof(TkpClipMask)); } - ((TkpClipMask*)gc->clip_mask)->type = TKP_CLIP_REGION; - ((TkpClipMask*)gc->clip_mask)->value.region = r; + ((TkpClipMask*) gc->clip_mask)->type = TKP_CLIP_REGION; + ((TkpClipMask*) gc->clip_mask)->value.region = r; } void -XSetClipMask(display, gc, pixmap) - Display* display; - GC gc; - Pixmap pixmap; +XSetClipMask( + Display *display, + GC gc, + Pixmap pixmap) { if (pixmap == None) { if (gc->clip_mask) { @@ -384,8 +392,8 @@ XSetClipMask(display, gc, pixmap) if (gc->clip_mask == None) { gc->clip_mask = (Pixmap)ckalloc(sizeof(TkpClipMask)); } - ((TkpClipMask*)gc->clip_mask)->type = TKP_CLIP_PIXMAP; - ((TkpClipMask*)gc->clip_mask)->value.pixmap = pixmap; + ((TkpClipMask*) gc->clip_mask)->type = TKP_CLIP_PIXMAP; + ((TkpClipMask*) gc->clip_mask)->value.pixmap = pixmap; } /* @@ -394,157 +402,167 @@ XSetClipMask(display, gc, pixmap) #if 0 Cursor -XCreateFontCursor(display, shape) - Display* display; - unsigned int shape; +XCreateFontCursor( + Display *display, + unsigned int shape) { return (Cursor) 0; } void -XDrawImageString(display, d, gc, x, y, string, length) - Display* display; - Drawable d; - GC gc; - int x; - int y; - _Xconst char* string; - int length; +XDrawImageString( + Display *display, + Drawable d, + GC gc, + int x, + int y, + _Xconst char *string, + int length) { } #endif void -XDrawPoint(display, d, gc, x, y) - Display* display; - Drawable d; - GC gc; - int x; - int y; +XDrawPoint( + Display *display, + Drawable d, + GC gc, + int x, + int y) { XDrawLine(display, d, gc, x, y, x, y); } void -XDrawPoints(display, d, gc, points, npoints, mode) - Display* display; - Drawable d; - GC gc; - XPoint* points; - int npoints; - int mode; +XDrawPoints( + Display *display, + Drawable d, + GC gc, + XPoint *points, + int npoints, + int mode) { int i; for (i=0; i<npoints; i++) { - XDrawPoint(display, d, gc, points[i].x, points[i].y); + XDrawLine(display, d, gc, + points[i].x, points[i].y, points[i].x, points[i].y); } } #if !defined(MAC_OSX_TK) void -XDrawSegments(display, d, gc, segments, nsegments) - Display* display; - Drawable d; - GC gc; - XSegment* segments; - int nsegments; +XDrawSegments( + Display *display, + Drawable d, + GC gc, + XSegment *segments, + int nsegments) { } #endif #if 0 char * -XFetchBuffer(display, nbytes_return, buffer) - Display* display; - int* nbytes_return; - int buffer; +XFetchBuffer( + Display *display, + int *nbytes_return, + int buffer) { return (char *) 0; } -Status XFetchName(display, w, window_name_return) - Display* display; - Window w; - char** window_name_return; +Status +XFetchName( + Display *display, + Window w, + char **window_name_return) { return (Status) 0; } -Atom *XListProperties(display, w, num_prop_return) - Display* display; - Window w; - int* num_prop_return; +Atom * +XListProperties( + Display* display, + Window w, + int *num_prop_return) { return (Atom *) 0; } void -XMapRaised(display, w) - Display* display; - Window w; +XMapRaised( + Display *display, + Window w) { } void -XPutImage(display, d, gc, image, src_x, src_y, dest_x, dest_y, width, height) - Display* display; - Drawable d; - GC gc; - XImage* image; - int src_x; - int src_y; - int dest_x; - int dest_y; - unsigned int width; - unsigned int height; +XPutImage( + Display *display, + Drawable d, + GC gc, + XImage *image, + int src_x, + int src_y, + int dest_x, + int dest_y, + unsigned int width, + unsigned int height) { } void -XQueryTextExtents(display, font_ID, string, nchars, direction_return, - font_ascent_return, font_descent_return, overall_return) - Display* display; - XID font_ID; - _Xconst char* string; - int nchars; - int* direction_return; - int* font_ascent_return; - int* font_descent_return; - XCharStruct* overall_return; +XQueryTextExtents( + Display *display, + XID font_ID, + _Xconst char *string, + int nchars, + int *direction_return, + int *font_ascent_return, + int *font_descent_return, + XCharStruct *overall_return) { } void -XReparentWindow(display, w, parent, x, y) - Display* display; - Window w; - Window parent; - int x; - int y; +XReparentWindow( + Display *display, + Window w, + Window parent, + int x, + int y) { } void -XRotateBuffers(display, rotate) - Display* display; - int rotate; +XRotateBuffers( + Display *display, + int rotate) { } void -XStoreBuffer(display, bytes, nbytes, buffer) - Display* display; - _Xconst char* bytes; - int nbytes; - int buffer; +XStoreBuffer( + Display *display, + _Xconst char *bytes, + int nbytes, + int buffer) { } void -XUndefineCursor(display, w) - Display* display; - Window w; +XUndefineCursor( + Display *display, + Window w) { } #endif + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ |