⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xgc.c

📁 linux系统下的音频通信
💻 C
字号:
/*  * xgc.c -- * *	This file contains generic routines for manipulating X graphics *	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. * * SCCS: @(#) xgc.c 1.8 96/10/11 14:59:39 */#include <tkInt.h>#ifdef MAC_TCL#	include <Xlib.h>#else#	include <X11/Xlib.h>#endif#ifdef __WIN32__#include <tkWinInt.h>#endif/* *---------------------------------------------------------------------- * * XCreateGC -- * *	Allocate a new GC, and initialize the specified fields. * * Results: *	Returns a newly allocated GC.  * * Side effects: *	None. * *---------------------------------------------------------------------- */GCXCreateGC(display, d, mask, values)    Display* display;    Drawable d;    unsigned long mask;    XGCValues* values;{    GC gp;    gp = (XGCValues *)ckalloc(sizeof(XGCValues));    if (!gp) {	return None;    }    gp->function = 	(mask & GCFunction) 	?values->function	:GXcopy;    gp->plane_mask = 	(mask & GCPlaneMask) 	?values->plane_mask 	:~0;    gp->foreground = 	(mask & GCForeground) 	?values->foreground 	:0;    gp->background = 	(mask & GCBackground) 	?values->background 	:0xffffff;    gp->line_width = 	(mask & GCLineWidth)	?values->line_width	:0;	    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;    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;    } else {	gp->clip_mask = None;    }#ifdef __WIN32__    gp->fgBrush=None;    gp->bgBrush=None;    gp->fgPen=None;    gp->fgExtPen=None;    gp->extpenstyle=0;#endif    return gp;}/* *---------------------------------------------------------------------- * * XChangeGC -- * *	Changes the GC components specified by valuemask for the *	specified GC. * * Results: *	None. * * Side effects: *	Updates the specified GC. * *---------------------------------------------------------------------- */voidXChangeGC(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; }}/* *---------------------------------------------------------------------- * * XFreeGC -- * *	Deallocates the specified graphics context. * * Results: *	None. * * Side effects: *	None. * *---------------------------------------------------------------------- */voidXFreeGC(d, gc)    Display * d;    GC gc;{    if (gc != None) {	if (gc->clip_mask != None) {	    ckfree((char*) gc->clip_mask);	}#ifdef __WIN32__	if(gc->fgBrush!=None){	    CkDeleteBrush((HBRUSH)gc->fgBrush);	    gc->fgBrush=None;	}	if(gc->fgPen!=None){	    CkDeletePen((HPEN)gc->fgPen);	    gc->fgPen=None;	}	if(gc->bgBrush!=None){	    CkDeleteBrush((HBRUSH)gc->bgBrush);	    gc->bgBrush=None;	}	if(gc->fgExtPen!=None){	    CkDeletePen((HPEN)gc->fgExtPen);	    gc->fgExtPen=None;	}#endif	ckfree((char *) gc);    }}/* *---------------------------------------------------------------------- * * XSetForeground, etc. -- * *	The following functions are simply accessor functions for *	the GC slots. * * Results: *	None. * * Side effects: *	Each function sets some slot in the GC. * *---------------------------------------------------------------------- */void XSetForeground(display, gc, foreground)    Display *display;    GC gc;    unsigned long foreground;{#ifdef __WIN32__    if(foreground != gc->foreground){        if(gc->fgBrush!=None){	    CkDeleteBrush((HBRUSH)gc->fgBrush);	    gc->fgBrush=None;        }        if(gc->fgPen!=None){	    CkDeletePen((HPEN)gc->fgPen);	    gc->fgPen=None;        }        if(gc->fgExtPen!=None){	    CkDeletePen((HPEN)gc->fgExtPen);	    gc->fgExtPen=None;        }    }#endif    gc->foreground = foreground;}void XSetBackground(display, gc, background)    Display *display;    GC gc;    unsigned long background;{#ifdef __WIN32__    if(background != gc->background){        if(gc->bgBrush!=None){  	    CkDeleteBrush((HBRUSH)gc->bgBrush);	    gc->bgBrush=None;        }    }#endif    gc->background = background;}voidXSetFunction(display, gc, function)    Display *display;    GC gc;    int function;{    gc->function = function;}voidXSetFillRule(display, gc, fill_rule)    Display *display;    GC gc;    int fill_rule;{    gc->fill_rule = fill_rule;}voidXSetFillStyle(display, gc, fill_style)    Display *display;    GC gc;    int fill_style;{    gc->fill_style = fill_style;}voidXSetTSOrigin(display, gc, x, y)    Display *display;    GC gc;    int x, y;{    gc->ts_x_origin = x;    gc->ts_y_origin = y;}voidXSetFont(display, gc, font)    Display *display;    GC gc;    Font font;{    gc->font = font;}voidXSetArcMode(display, gc, arc_mode)    Display *display;    GC gc;    int arc_mode;{    gc->arc_mode = arc_mode;}voidXSetStipple(display, gc, stipple)    Display *display;    GC gc;    Pixmap stipple;{    gc->stipple = stipple;}voidXSetLineAttributes(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;{#ifdef __WIN32__    if(line_width != (unsigned int)gc->line_width){        if(gc->fgPen!=None){	    CkDeletePen((HPEN)gc->fgPen);	    gc->fgPen=None;        }        if(gc->fgExtPen!=None){	    CkDeletePen((HPEN)gc->fgExtPen);	    gc->fgExtPen=None;        }    }#endif    gc->line_width = line_width;    gc->line_style = line_style;    gc->cap_style = cap_style;    gc->join_style = join_style;}voidXSetClipOrigin(display, gc, clip_x_origin, clip_y_origin)    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;}/* *---------------------------------------------------------------------- * * TkSetRegion, XSetClipMask -- * *	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. * * Results: *	None. * * Side effects: *	Allocates or dealloates a TkpClipMask. * *---------------------------------------------------------------------- */voidTkSetRegion(display, gc, r)    Display* display;    GC gc;    TkRegion r;{    if (r == None) {	if (gc->clip_mask) {	    ckfree((char*) gc->clip_mask);	    gc->clip_mask = None;	}	return;    }    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;}voidXSetClipMask(display, gc, pixmap)    Display* display;    GC gc;    Pixmap pixmap;{    if (pixmap == None) {	if (gc->clip_mask) {	    ckfree((char*) gc->clip_mask);	    gc->clip_mask = None;	}	return;    }    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;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -