?? grid.c
字號(hào):
/* * * 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) &&
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -