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

📄 gscroll.c

📁 Graphviz - Graph Drawing Programs from AT&T Research and Lucent Bell Labs See doc/build.html for
💻 C
字号:
/* $Id: gscroll.c,v 1.3 2005/11/08 17:21:46 ellson Exp $ $Revision: 1.3 $ *//* 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             ***********************************************************//* Lefteris Koutsofios - AT&T Labs Research */#include "common.h"#include "g.h"#include "gcommon.h"int GScreatewidget (    Gwidget_t *parent, Gwidget_t *widget, int attrn, Gwattr_t *attrp) {    PIXsize_t ps;#if XlibSpecificationRelease < 5    Widget w;#endif    int ai;    XColor c;    int color;    if (!parent) {        Gerr (POS, G_ERRNOPARENTWIDGET);        return -1;    }    ps.x = ps.y = MINSWSIZE;    RESETARGS;    for (ai = 0; ai < attrn; ai++) {        switch (attrp[ai].id) {        case G_ATTRSIZE:            GETSIZE (attrp[ai].u.s, ps, MINSWSIZE);            break;        case G_ATTRBORDERWIDTH:            ADD2ARGS (XtNborderWidth, attrp[ai].u.i);            break;        case G_ATTRCHILDCENTER:            Gerr (POS, G_ERRCANNOTSETATTR1, "childcenter");            return -1;        case G_ATTRMODE:            if (strcmp ("forcebars", attrp[ai].u.t) == 0)                ADD2ARGS (XtNforceBars, 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_ATTRUSERDATA:            widget->udata = attrp[ai].u.u;            break;        default:            Gerr (POS, G_ERRBADATTRID, attrp[ai].id);            return -1;        }    }    ADD2ARGS (XtNallowHoriz, True);    ADD2ARGS (XtNallowVert, True);    ADD2ARGS (XtNwidth, ps.x);    ADD2ARGS (XtNheight, ps.y);    if (!(widget->w = XtCreateWidget (        "scroll", viewportWidgetClass, parent->w, argp, argn    ))) {        Gerr (POS, G_ERRCANNOTCREATEWIDGET);        return -1;    }#if XlibSpecificationRelease < 5    RESETARGS;    ADD2ARGS (XtNwidth, ps.x);    ADD2ARGS (XtNheight, ps.y);    if (!(w = XtCreateWidget (        "owsucks", formWidgetClass, widget->w, argp, argn    ))) {        Gerr (POS, G_ERRCANNOTCREATEWIDGET);        return -1;    }    Glazymanage (w);    Glazymanage (widget->w);    XtDestroyWidget (w);#else    Glazymanage (widget->w);#endif    return 0;}int GSsetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) {    PIXpoint_t po;    PIXsize_t ps;    Dimension width, height;    int ai;    XColor c;    int color;    RESETARGS;    for (ai = 0; ai < attrn; ai++) {        switch (attrp[ai].id) {        case G_ATTRSIZE:            GETSIZE (attrp[ai].u.s, ps, MINSWSIZE);            ADD2ARGS (XtNwidth, ps.x);            ADD2ARGS (XtNheight, ps.y);            break;        case G_ATTRBORDERWIDTH:            ADD2ARGS (XtNborderWidth, attrp[ai].u.i);            break;        case G_ATTRCHILDCENTER:            GETORIGIN (attrp[ai].u.p, po);            ADD2ARGS (XtNwidth, &width);            ADD2ARGS (XtNheight, &height);            XtGetValues (widget->w, argp, argn);            po.x -= width / 2, po.y -= height / 2;            if (po.x < 0)                po.x = 0;            if (po.y < 0)                po.y = 0;            XawViewportSetCoordinates (widget->w, po.x, po.y);            break;        case G_ATTRMODE:            if (strcmp ("forcebars", attrp[ai].u.t) == 0)                ADD2ARGS (XtNforceBars, 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_ERRCANNOTSETATTR2, "windowid");            return -1;        case G_ATTRUSERDATA:            widget->udata = attrp[ai].u.u;            break;        default:            Gerr (POS, G_ERRBADATTRID, attrp[ai].id);            return -1;        }    }    XtSetValues (widget->w, argp, argn);    return 0;}int GSgetwidgetattr (Gwidget_t *widget, int attrn, Gwattr_t *attrp) {    Dimension width, height;    Position x, y;    Boolean tf;    Gwidget_t *child;    int ai, wi;    child = NULL;    for (ai = 0; ai < attrn; ai++) {        RESETARGS;        switch (attrp[ai].id) {        case G_ATTRSIZE:            ADD2ARGS (XtNwidth, &width);            ADD2ARGS (XtNheight, &height);            XtGetValues (widget->w, argp, argn);            attrp[ai].u.s.x = width, attrp[ai].u.s.y = height;            break;        case G_ATTRBORDERWIDTH:            ADD2ARGS (XtNborderWidth, &width);            XtGetValues (widget->w, argp, argn);            attrp[ai].u.i = width;            break;        case G_ATTRCHILDCENTER:            for (wi = 0; wi < Gwidgetn; wi++) {                child = &Gwidgets[wi];                if (child->inuse && child->pwi == widget - &Gwidgets[0])                    break;            }            if (wi == Gwidgetn) {                Gerr (POS, G_ERRNOCHILDWIDGET);                return -1;            }            ADD2ARGS (XtNwidth, &width);            ADD2ARGS (XtNheight, &height);            XtGetValues (widget->w, argp, argn);            RESETARGS;            ADD2ARGS (XtNx, &x);            ADD2ARGS (XtNy, &y);            XtGetValues (child->w, argp, argn);            attrp[ai].u.p.x = width / 2 - x, attrp[ai].u.p.y = height / 2 - y;            break;        case G_ATTRMODE:            ADD2ARGS (XtNforceBars, &tf);            attrp[ai].u.t = (tf == True) ? "forcebars" : "";            break;        case G_ATTRWINDOWID:            sprintf (&Gbufp[0], "0x%lx", XtWindow (widget->w));            attrp[ai].u.t = &Gbufp[0];            break;        case G_ATTRUSERDATA:            attrp[ai].u.u = widget->udata;            break;        default:            Gerr (POS, G_ERRBADATTRID, attrp[ai].id);            return -1;        }    }    return 0;}int GSdestroywidget (Gwidget_t *widget) {    XtDestroyWidget (widget->w);    return 0;}#if XlibSpecificationRelease < 5#include <X11/IntrinsicP.h>#include <X11/Xaw/ViewportP.h>void XawViewportSetCoordinates (Widget gw, Position x, Position y) {    ViewportWidget w = (ViewportWidget) gw;    Widget child = w->viewport.child;    Widget clip = w->viewport.clip;    Position mx, my;    if (x > (int) child->core.width)        x = child->core.width;    else if (x < 0)        x = child->core.x;    if (y > (int) child->core.height)        y = child->core.height;    else if (y < 0)        y = child->core.y;    mx = -x, my = -y;    if (- mx + (int) clip->core.width > (int) child->core.width)        mx = - (child->core.width - clip->core.width);    if (- my + (int) clip->core.height > (int) child->core.height)        my = - (child->core.height - clip->core.height);    /* make sure we never move past left/top borders */    if (mx >= 0) mx = 0;    if (my >= 0) my = 0;    XtMoveWidget (child, mx, my);    XtUnmanageChild (child);    XtManageChild (child);}#endif

⌨️ 快捷键说明

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