Annotation of micropolis/src/tk/tkgeo.c, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * tkGeometry.c --
                      3:  *
                      4:  *     This file contains code generic Tk code for geometry
                      5:  *     management, plus code to manage the geometry of top-level
                      6:  *     windows (by reflecting information up to the window
                      7:  *     manager).
                      8:  *
                      9:  * Copyright 1990 Regents of the University of California.
                     10:  * Permission to use, copy, modify, and distribute this
                     11:  * software and its documentation for any purpose and without
                     12:  * fee is hereby granted, provided that the above copyright
                     13:  * notice appear in all copies.  The University of California
                     14:  * makes no representations about the suitability of this
                     15:  * software for any purpose.  It is provided "as is" without
                     16:  * express or implied warranty.
                     17:  */
                     18: 
                     19: #ifndef lint
                     20: static char rcsid[] = "$Header: /user6/ouster/wish/RCS/tkGeometry.c,v 1.18 92/05/13 16:51:17 ouster Exp $ SPRITE (Berkeley)";
                     21: #endif
                     22: 
                     23: #include "tkconfig.h"
                     24: #include "tkint.h"
                     25: 
                     26: /*
                     27:  *--------------------------------------------------------------
                     28:  *
                     29:  * Tk_ManageGeometry --
                     30:  *
                     31:  *     Arrange for a particular procedure to handle geometry
                     32:  *     requests for a given window.
                     33:  *
                     34:  * Results:
                     35:  *     None.
                     36:  *
                     37:  * Side effects:
                     38:  *     Proc becomes the new geometry manager for tkwin, replacing
                     39:  *     any previous geometry manager.  In the future, whenever
                     40:  *     Tk_GeometryRequest is called for tkwin, proc will be
                     41:  *     invoked to handle the request.  Proc should have the
                     42:  *     following structure:
                     43:  *
                     44:  *     void
                     45:  *     proc(clientData, tkwin)
                     46:  *     {
                     47:  *     }
                     48:  *
                     49:  *     The clientData argument will be the same as the clientData
                     50:  *     argument to this procedure, and the tkwin arguments will
                     51:  *     be the same as the corresponding argument to
                     52:  *     Tk_GeometryRequest.  Information about the desired
                     53:  *     geometry for tkwin is avilable to proc using macros such
                     54:  *     as Tk_ReqWidth.  Proc should do the best it can to meet
                     55:  *     the request within the constraints of its geometry-management
                     56:  *     algorithm, but it is not obligated to meet the request.
                     57:  *
                     58:  *--------------------------------------------------------------
                     59:  */
                     60: 
                     61: void
                     62: Tk_ManageGeometry(tkwin, proc, clientData)
                     63:     Tk_Window tkwin;           /* Window whose geometry is to
                     64:                                 * be managed by proc.  */
                     65:     Tk_GeometryProc *proc;     /* Procedure to manage geometry.
                     66:                                 * NULL means make tkwin unmanaged. */
                     67:     ClientData clientData;     /* Arbitrary one-word argument to
                     68:                                 * pass to proc. */
                     69: {
                     70:     register TkWindow *winPtr = (TkWindow *) tkwin;
                     71: 
                     72:     winPtr->geomProc = proc;
                     73:     winPtr->geomData = clientData;
                     74: }
                     75: 
                     76: /*
                     77:  *--------------------------------------------------------------
                     78:  *
                     79:  * Tk_GeometryRequest --
                     80:  *
                     81:  *     This procedure is invoked by widget code to indicate
                     82:  *     its preferences about the size of a window it manages.
                     83:  *     In general, widget code should call this procedure
                     84:  *     rather than Tk_ResizeWindow.
                     85:  *
                     86:  * Results:
                     87:  *     None.
                     88:  *
                     89:  * Side effects:
                     90:  *     The geometry manager for tkwin (if any) is invoked to
                     91:  *     handle the request.  If possible, it will reconfigure
                     92:  *     tkwin and/or other windows to satisfy the request.  The
                     93:  *     caller gets no indication of success or failure, but it
                     94:  *     will get X events if the window size was actually
                     95:  *     changed.
                     96:  *
                     97:  *--------------------------------------------------------------
                     98:  */
                     99: 
                    100: void
                    101: Tk_GeometryRequest(tkwin, reqWidth, reqHeight)
                    102:     Tk_Window tkwin;           /* Window that geometry information
                    103:                                 * pertains to. */
                    104:     int reqWidth, reqHeight;   /* Minimum desired dimensions for
                    105:                                 * window, in pixels. */
                    106: {
                    107:     register TkWindow *winPtr = (TkWindow *) tkwin;
                    108: 
                    109:     if ((reqWidth == winPtr->reqWidth) && (reqHeight == winPtr->reqHeight)) {
                    110:        return;
                    111:     }
                    112:     winPtr->reqWidth = reqWidth;
                    113:     winPtr->reqHeight = reqHeight;
                    114:     if (winPtr->geomProc != NULL) {
                    115:        (*winPtr->geomProc)(winPtr->geomData, tkwin);
                    116:     }
                    117: }
                    118: 
                    119: /*
                    120:  *----------------------------------------------------------------------
                    121:  *
                    122:  * Tk_SetInternalBorder --
                    123:  *
                    124:  *     Notify relevant geometry managers that a window has an internal
                    125:  *     border of a given width and that child windows should not be
                    126:  *     placed on that border.
                    127:  *
                    128:  * Results:
                    129:  *     None.
                    130:  *
                    131:  * Side effects:
                    132:  *     The border width is recorded for the window, and all geometry
                    133:  *     managers of all children are notified so that can re-layout, if
                    134:  *     necessary.
                    135:  *
                    136:  *----------------------------------------------------------------------
                    137:  */
                    138: 
                    139: void
                    140: Tk_SetInternalBorder(tkwin, width)
                    141:     Tk_Window tkwin;           /* Window that will have internal border. */
                    142:     int width;                 /* Width of internal border, in pixels. */
                    143: {
                    144:     register TkWindow *winPtr = (TkWindow *) tkwin;
                    145: 
                    146:     if (width == winPtr->internalBorderWidth) {
                    147:        return;
                    148:     }
                    149:     if (width < 0) {
                    150:        width = 0;
                    151:     }
                    152:     winPtr->internalBorderWidth = width;
                    153:     for (winPtr = winPtr->childList; winPtr != NULL;
                    154:            winPtr = winPtr->nextPtr) {
                    155:        if (winPtr->geomProc != NULL) {
                    156:            (*winPtr->geomProc)(winPtr->geomData, (Tk_Window) winPtr);
                    157:        }
                    158:     }
                    159: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.