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

📄 grid.c

📁 安装DDD之前
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * * Grid.c - XmpGrid widget * */#include <GridP.h>#include <Xm/DrawP.h>#include <Xm/GadgetP.h>#define GetGridConstraint(w) \        (&((XmpGridConstraintPtr) (w)->core.constraints)->grid)#define Max(x, y) (((x) > (y)) ? (x) : (y))static void Initialize();static void Resize();static void Redisplay();static Boolean SetValues();static XtGeometryResult QueryGeometry();static XtGeometryResult GeometryManager();static void ChangeManaged();static Boolean ConstraintSetValues();static void Layout();static void CalcSize();static XtResource resources[] ={    {	XmNrows, 	XmCRows, 	XmRShort, 	sizeof (short),	XtOffsetOf( struct _XmpGridRec, grid.rows),	XmRImmediate, (XtPointer) 4    },    {	XmNcolumns, 	XmCColumns, 	XmRShort, 	sizeof (short),	XtOffsetOf( struct _XmpGridRec, grid.columns),	XmRImmediate, (XtPointer) 4    },    {	XmNmarginWidth, 	XmCMarginWidth, 	XmRHorizontalDimension, 	sizeof (Dimension),	XtOffsetOf( struct _XmpGridRec, grid.margin_width),	XmRImmediate, (XtPointer) 10    },    {	XmNmarginHeight, 	XmCMarginHeight, 	XmRVerticalDimension,	sizeof (Dimension),	XtOffsetOf( struct _XmpGridRec, grid.margin_height),	XmRImmediate, (XtPointer) 10    },};static XmSyntheticResource syn_resources[] = {    {	XmNmarginWidth, 	sizeof (Dimension),	XtOffsetOf( struct _XmpGridRec, grid.margin_width),	_XmFromHorizontalPixels,	_XmToHorizontalPixels    },    {	XmNmarginHeight, 	sizeof (Dimension),	XtOffsetOf( struct _XmpGridRec, grid.margin_height),	_XmFromVerticalPixels,	_XmToVerticalPixels    }};static XtResource constraints[] ={    {	XmNgridMarginWidth,	XmCGridMarginWidth,	XmRHorizontalDimension, sizeof (Dimension),	XtOffsetOf( struct _XmpGridConstraintRec, grid.grid_margin_width),	XmRImmediate, (XtPointer) 0    },    {	XmNgridMarginHeight,	XmCGridMarginHeight,	XmRVerticalDimension,sizeof (Dimension),	XtOffsetOf( struct _XmpGridConstraintRec, grid.grid_margin_height),	XmRImmediate, (XtPointer) 0    },};static XmSyntheticResource syn_constraints[] ={    {	XmNgridMarginWidth,	sizeof (Dimension),	XtOffsetOf( struct _XmpGridConstraintRec, grid.grid_margin_width),	_XmFromHorizontalPixels,	_XmToHorizontalPixels    },    {	XmNgridMarginHeight,	sizeof (Dimension),	XtOffsetOf( struct _XmpGridConstraintRec, grid.grid_margin_height),	_XmFromVerticalPixels,	_XmToVerticalPixels    },};/**************************************************************** * * XmpGrid class record * ****************************************************************/externaldef(xmgridclassrec) XmpGridClassRec xmpGridClassRec = {  {                                           /* core_class            */    (WidgetClass) &xmManagerClassRec,         /* superclass            */    "XmpGrid",                                /* class_name            */    sizeof(XmpGridRec),                       /* widget_size           */    NULL,                                     /* class_part_initialize */    NULL,                                     /* class_initialize      */    FALSE,                                    /* class_inited          */    Initialize,                               /* initialize            */    NULL,                                     /* initialize_hook       */    XtInheritRealize,                         /* realize               */    NULL,                                     /* actions               */    0,                                        /* num_actions           */    resources,                                /* resources             */    XtNumber(resources),                      /* num_resources         */    NULLQUARK,                                /* xrm_class             */    TRUE,                                     /* compress_motion       */    XtExposeCompressMaximal,                  /* compress_exposure     */    TRUE,                                     /* compress_enterleave   */    FALSE,                                    /* visible_interest      */    NULL,                                     /* destroy               */    Resize,                                   /* resize                */    Redisplay,                                /* expose                */    SetValues,                                /* set_values            */    NULL,                                     /* set_values_hook       */    XtInheritSetValuesAlmost,                 /* set_values_almost     */    NULL,                                     /* get_values_hook       */    NULL,                                     /* accept_focus          */    XtVersion,                                /* version               */    NULL,                                     /* callback_private      */    XtInheritTranslations,                    /* tm_table              */    QueryGeometry,                            /* query_geometry        */    NULL,                                     /* display_accelerator   */    NULL,                                     /* extension             */  },  {                                           /* composite_class       */    GeometryManager,                          /* geometry_manager      */    ChangeManaged,                            /* change_managed        */    XtInheritInsertChild,                     /* insert_child          */    XtInheritDeleteChild,                     /* delete_child          */    NULL,                                     /* extension             */  },  {                                           /* constraint_class      */    constraints,                              /* resources             */       XtNumber(constraints),                    /* num_resources         */       sizeof (XmpGridConstraintRec),            /* constraint_size       */       NULL,                                     /* initialize            */       NULL,                                     /* destroy               */       ConstraintSetValues,                      /* set_values            */       NULL,                                     /* extension             */  },  {                                           /* manager class         */    XtInheritTranslations,                    /* translations          */    syn_resources,                            /* syn_resources         */    XtNumber(syn_resources),                  /* num_syn_resources     */    syn_constraints,                          /* syn_constraint_resources */    XtNumber(syn_constraints),                /* num_syn_constraint_resources */    XmInheritParentProcess,                   /* parent_process        */    NULL,                                     /* extension             */      },  {                                           /* grid class            */    NULL,                                     /* extension             */      }        };externaldef(xmpgridwidgetclass) WidgetClass xmpGridWidgetClass =			                        (WidgetClass) &xmpGridClassRec;/************************************************************************ * *  Initialize * ************************************************************************/static void Initialize (request_w, new_w, args, num_args)    Widget request_w;    Widget new_w;    ArgList args;    Cardinal *num_args;{    XmpGridWidget rw = (XmpGridWidget)request_w;    XmpGridWidget nw = (XmpGridWidget)new_w;    nw->grid.processing_constraints = False;    /* Remember application geometry settings */    nw->grid.compute_width = True;    nw->grid.compute_height = True;    if (rw->core.width != 0) {	nw->grid.compute_width = False;	nw->grid.pref_width = rw->core.width;	nw->core.width = rw->core.width;    }    if (rw->core.height != 0) {	nw->grid.compute_height = False;	nw->grid.pref_height = rw->core.height;	nw->core.height = rw->core.height;    }    /* Calculate ideal size */    CalcSize (nw, NULL, &(nw->core.width), &(nw->core.height));    nw->grid.pref_width = nw->core.width;    nw->grid.pref_height = nw->core.height;    Resize((Widget)nw);}/************************************************************************ * *  Resize  * ************************************************************************/static void Resize (w)    Widget w;{    /* Configure using current size */    Layout ((XmpGridWidget)w, NULL);}/************************************************************************ * *  Redisplay * ************************************************************************/static void Redisplay (w, event, region)    Widget w;    XEvent *event;    Region region;{    /* Pass exposure down to gadget children */    _XmRedisplayGadgets (w, event, region);}/************************************************************************ * *  Set Values * ************************************************************************/static Boolean SetValues (old_w, request_w, new_w, args, num_args)    Widget old_w;    Widget request_w;    Widget new_w;    ArgList args;    Cardinal *num_args;{    XmpGridWidget cw = (XmpGridWidget)old_w;    XmpGridWidget rw = (XmpGridWidget)request_w;    XmpGridWidget nw = (XmpGridWidget)new_w;    Boolean redisplay = False;    /* Check for application geometry settings. '0' means 'ideal size' */    if (rw->core.width == 0) {	rw->core.width = 0;        nw->grid.compute_width = True;    }    else if (rw->core.width != cw->core.width) {        nw->grid.compute_width = False;        nw->grid.pref_width = rw->core.width;        nw->core.width = rw->core.width;    }    if (rw->core.height == 0) {	rw->core.height = 0;        nw->grid.compute_height = True;    }    else if (rw->core.height != cw->core.height) {        nw->grid.compute_height = False;        nw->grid.pref_height = rw->core.height;        nw->core.height = rw->core.height;    }    if (nw->core.width != cw->core.width ||	nw->core.height != cw->core.height ||	nw->grid.margin_width != cw->grid.margin_width ||	nw->grid.margin_height != cw->grid.margin_height ||	nw->grid.rows != cw->grid.rows ||	nw->grid.columns != cw->grid.columns) {	/* Calculate new size */	CalcSize (nw, NULL, &nw->core.width, &nw->core.height);	nw->grid.pref_width = nw->core.width;	nw->grid.pref_height = nw->core.height;	/* If there will be no geometry request better reconfigure now */	if (nw->core.width == cw->core.width &&	    nw->core.height == cw->core.height) {	    Resize(nw);	}    }   return (redisplay);}/************************************************************************ * *  QueryGeometry * ************************************************************************/static XtGeometryResult QueryGeometry (w, request, reply)    Widget w;    XtWidgetGeometry *request;    XtWidgetGeometry *reply;{    XmpGridWidget gw = (XmpGridWidget)w;    /* Return our preferred size */    if ((request->request_mode & CWWidth) &&

⌨️ 快捷键说明

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