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

📄 garray.c

📁 Graphviz - Graph Drawing Programs from AT&T Research and Lucent Bell Labs See doc/build.html for
💻 C
字号:
/* $Id: garray.c,v 1.1 2005/01/06 15:01:43 ellson Exp $ $Revision: 1.1 $ *//* vim:set shiftwidth=4 ts=8: *//***********************************************************      This software is part of the graphviz package      **                http://www.graphviz.org/                 **                                                         **            Copyright (c) 1994-2004 AT&T Corp.           **                and is licensed under the                **            Common Public License, Version 1.0           **                      by AT&T Corp.                      **                                                         **        Information and Software Systems Research        **              AT&T Research, Florham Park NJ             ***********************************************************/#include "common.h"#include "g.h"#include "gcommon.h"#define WAU widget->u.aint GAcreatewidget(Gwidget_t * parent, Gwidget_t * widget,		   int attrn, Gwattr_t * attrp){    PIXsize_t ps;    int ai;    GdkColor c;    int color;    if (!parent) {	Gerr(POS, G_ERRNOPARENTWIDGET);	return -1;    }    WAU->func = NULL;    ps.x = ps.y = MINAWSIZE;    for (ai = 0; ai < attrn; ai++) {	switch (attrp[ai].id) {	case G_ATTRSIZE:	    GETSIZE(attrp[ai].u.s, ps, MINAWSIZE);	    break;	case G_ATTRBORDERWIDTH:	    break;	case G_ATTRMODE:	    if (Strcmp("horizontal", attrp[ai].u.t) == 0) {		WAU->mode = G_AWHARRAY;	    } else if (Strcmp("vertical", attrp[ai].u.t) == 0) {		WAU->mode = G_AWVARRAY;	    } else {		Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);		return -1;	    }	    break;	case G_ATTRLAYOUT:	    if (Strcmp("on", attrp[ai].u.t) == 0)		Gawsetmode(widget, FALSE);	    else if (Strcmp("off", attrp[ai].u.t) == 0)		Gawsetmode(widget, TRUE);	    else {		Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);		return -1;	    }	    break;	case G_ATTRCOLOR:	    color = attrp[ai].u.c.index;	    if (color != 0 && color != 1) {		Gerr(POS, G_ERRBADCOLORINDEX, color);		return -1;	    }	    c.red = attrp[ai].u.c.r * 257;	    c.green = attrp[ai].u.c.g * 257;	    c.blue = attrp[ai].u.c.b * 257;/*        			if (XAllocColor (				       Gdisplay, DefaultColormap (Gdisplay, Gscreenn), &c				)) {		                	if (color == 0)					        ADD2ARGS (XtNbackground, c.pixel);				        else					        ADD2ARGS (XtNforeground, c.pixel);					}*/	    break;	case G_ATTRWINDOWID:	    Gerr(POS, G_ERRCANNOTSETATTR1, "windowid");	    return -1;	case G_ATTRRESIZECB:	    WAU->func = (Gawcoordscb) attrp[ai].u.func;	    break;	case G_ATTRUSERDATA:	    widget->udata = attrp[ai].u.u;	    break;	default:	    Gerr(POS, G_ERRBADATTRID, attrp[ai].id);	    return -1;	}    }    if (WAU->mode == G_AWHARRAY)	widget->w = gtk_hbox_new(FALSE, 0);    else	widget->w = gtk_vbox_new(FALSE, 0);    if (parent->type == 7) {	gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW					      (parent->w), widget->w);    } else {	gtk_container_add(GTK_CONTAINER(parent->w), widget->w);    }    gtk_widget_set_usize(widget->w, ps.x, ps.y);    gtk_widget_show(widget->w);    return 0;}int GAsetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp){    PIXsize_t ps;    int ai;    for (ai = 0; ai < attrn; ai++) {	switch (attrp[ai].id) {	case G_ATTRSIZE:	    GETSIZE(attrp[ai].u.s, ps, MINAWSIZE);	    break;	case G_ATTRBORDERWIDTH:	    break;	case G_ATTRMODE:	    Gerr(POS, G_ERRCANNOTSETATTR2, "mode");	    return -1;	case G_ATTRLAYOUT:	    if (Strcmp("on", attrp[ai].u.t) == 0)		Gawsetmode(widget, FALSE);	    else if (Strcmp("off", attrp[ai].u.t) == 0)		Gawsetmode(widget, TRUE);	    else {		Gerr(POS, G_ERRBADATTRVALUE, attrp[ai].u.t);		return -1;	    }	    break;	case G_ATTRWINDOWID:	    Gerr(POS, G_ERRCANNOTSETATTR2, "windowid");	    return -1;	case G_ATTRRESIZECB:	    WAU->func = (Gawcoordscb) attrp[ai].u.func;	    break;	case G_ATTRUSERDATA:	    widget->udata = attrp[ai].u.u;	    break;	default:	    Gerr(POS, G_ERRBADATTRID, attrp[ai].id);	    return -1;	}    }    return 0;}int GAgetwidgetattr(Gwidget_t * widget, int attrn, Gwattr_t * attrp){    int width, height;    int ai;    for (ai = 0; ai < attrn; ai++) {	switch (attrp[ai].id) {	case G_ATTRSIZE:	    attrp[ai].u.s.x = width, attrp[ai].u.s.y = height;	    break;	case G_ATTRBORDERWIDTH:	    attrp[ai].u.i = width;	    break;	case G_ATTRMODE:	    attrp[ai].u.t =		(WAU->mode == G_AWHARRAY) ? "horizontal" : "vertical";	    break;	case G_ATTRLAYOUT:	    break;	case G_ATTRWINDOWID:	    break;	case G_ATTRRESIZECB:	    attrp[ai].u.func = WAU->func;	    break;	case G_ATTRUSERDATA:	    attrp[ai].u.u = widget->udata;	    break;	default:	    Gerr(POS, G_ERRBADATTRID, attrp[ai].id);	    return -1;	}    }    return 0;}int GAdestroywidget(Gwidget_t * widget){    gtk_widget_destroy(widget->w);    return 0;}void Gawdefcoordscb(int wi, Gawdata_t * dp){    Gawcarray_t *cp;    int sx, sy, csx, csy, ci;    sx = dp->sx, sy = dp->sy;    csx = csy = 0;    for (ci = 0; ci < dp->cj; ci++) {	cp = &dp->carray[ci];	if (!cp->flag)	    continue;	cp->ox = csx, cp->oy = csy;	if (dp->type == G_AWVARRAY)	    cp->sx = sx - 2 * cp->bs, csy += cp->sy + 2 * cp->bs;	else	    cp->sy = sy - 2 * cp->bs, csx += cp->sx + 2 * cp->bs;    }    if (dp->type == G_AWVARRAY)	dp->sy = csy;    else	dp->sx = csx;}static void dolayout(Gwidget_t * widget, int flag){}int Gawsetmode(Gwidget_t * widget, int mode){    dolayout(widget, TRUE);    return 0;}int Gaworder(Gwidget_t * widget, void *data, Gawordercb func){/*	(*func) (data, NULL);   */    dolayout(widget, TRUE);}

⌨️ 快捷键说明

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