|
|
1.1 ! root 1: #ifndef lint ! 2: static char rcsid[] = "$Header: Geometry.c,v 1.15 87/09/11 21:23:59 haynes Rel $"; ! 3: #endif lint ! 4: ! 5: /* ! 6: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts. ! 7: * ! 8: * All Rights Reserved ! 9: * ! 10: * Permission to use, copy, modify, and distribute this software and its ! 11: * documentation for any purpose and without fee is hereby granted, ! 12: * provided that the above copyright notice appear in all copies and that ! 13: * both that copyright notice and this permission notice appear in ! 14: * supporting documentation, and that the name of Digital Equipment ! 15: * Corporation not be used in advertising or publicity pertaining to ! 16: * distribution of the software without specific, written prior permission. ! 17: * ! 18: * ! 19: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ! 20: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL ! 21: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ! 22: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, ! 23: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ! 24: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ! 25: * SOFTWARE. ! 26: */ ! 27: /* File: Geometry.c */ ! 28: ! 29: #include "Intrinsic.h" ! 30: ! 31: /* Public routines */ ! 32: ! 33: void XtResizeWindow(w) ! 34: Widget w; ! 35: { ! 36: if (XtIsRealized(w)) { ! 37: XWindowChanges changes; ! 38: changes.width = w->core.width; ! 39: changes.height = w->core.height; ! 40: changes.border_width = w->core.border_width; ! 41: XConfigureWindow(XtDisplay(w), XtWindow(w), ! 42: (unsigned) CWWidth | CWHeight | CWBorderWidth, &changes); ! 43: } ! 44: } /* XtResizeWindow */ ! 45: ! 46: ! 47: void XtResizeWidget(w, width, height, borderWidth) ! 48: Widget w; ! 49: Dimension height, width, borderWidth; ! 50: { ! 51: XWindowChanges changes; ! 52: Cardinal mask = 0; ! 53: ! 54: if (w->core.width != width) { ! 55: changes.width = w->core.width = width; ! 56: mask |= CWWidth; ! 57: } ! 58: ! 59: if (w->core.height != height) { ! 60: changes.height = w->core.height = height; ! 61: mask |= CWHeight; ! 62: } ! 63: ! 64: if (w->core.border_width != borderWidth) { ! 65: changes.border_width = w->core.border_width = borderWidth; ! 66: mask |= CWBorderWidth; ! 67: } ! 68: ! 69: if (mask != 0) { ! 70: if (XtIsRealized(w)) ! 71: XConfigureWindow(XtDisplay(w), XtWindow(w), mask, &changes); ! 72: if ((mask & (CWWidth | CWHeight)) && ! 73: XtClass(w)->core_class.resize != (XtWidgetProc) NULL) ! 74: w->core.widget_class->core_class.resize(w); ! 75: } ! 76: } /* XtResizeWidget */ ! 77: ! 78: XtGeometryResult XtMakeGeometryRequest (widget, request, reply) ! 79: Widget widget; ! 80: XtWidgetGeometry *request, *reply; ! 81: { ! 82: XtWidgetGeometry junk; ! 83: XtGeometryHandler manager; ! 84: XtGeometryResult returnCode; ! 85: ! 86: if (! XtIsComposite(widget->core.parent)) { ! 87: /* Should never happen - XtCreateWidget should have checked */ ! 88: XtError("XtMakeGeometryRequest - parent not composite"); ! 89: } ! 90: manager = ((CompositeWidgetClass) (widget->core.parent->core.widget_class)) ! 91: ->composite_class.geometry_manager; ! 92: if (manager == (XtGeometryHandler) NULL) { ! 93: XtError("XtMakeGeometryRequest - parent has no geometry manger"); ! 94: } ! 95: if ( ! widget->core.managed) { ! 96: XtWarning("XtMakeGeometryRequest - widget not managed"); ! 97: return XtGeometryNo; ! 98: } ! 99: if (widget->core.being_destroyed) { ! 100: return XtGeometryNo; ! 101: } ! 102: if (reply == (XtWidgetGeometry *) NULL) { ! 103: returnCode = (*manager)(widget, request, &junk); ! 104: } else { ! 105: returnCode = (*manager)(widget, request, reply); ! 106: } ! 107: /* ||| Right now this is automatic. However, we may want it to be ! 108: explicitely called by geometry manager in order to effect the window resize ! 109: (especially to smaller size) before the windows are layed out. */ ! 110: if (returnCode == XtGeometryYes) { ! 111: XtResizeWindow(widget); ! 112: } ! 113: return returnCode; ! 114: } /* XtMakeGeometryRequest */ ! 115: ! 116: XtGeometryResult XtMakeResizeRequest ! 117: (widget, width, height, replyWidth, replyHeight) ! 118: Widget widget; ! 119: Dimension width, height; ! 120: Dimension *replyWidth, *replyHeight; ! 121: { ! 122: XtWidgetGeometry request, reply; ! 123: XtGeometryResult r; ! 124: ! 125: request.request_mode = CWWidth | CWHeight; ! 126: request.width = width; ! 127: request.height = height; ! 128: r = XtMakeGeometryRequest(widget, &request, &reply); ! 129: if (replyWidth != NULL) ! 130: if (r == XtGeometryAlmost && reply.request_mode & CWWidth) ! 131: *replyWidth = reply.width; ! 132: else ! 133: *replyWidth = width; ! 134: if (replyHeight != NULL) ! 135: if (r == XtGeometryAlmost && reply.request_mode & CWHeight) ! 136: *replyHeight = reply.height; ! 137: else ! 138: *replyWidth = width; ! 139: return r; ! 140: } /* XtMakeResizeRequest */ ! 141: ! 142: void XtMoveWidget(w, x, y) ! 143: Widget w; ! 144: Position x, y; ! 145: { ! 146: if ((w->core.x != x) || (w->core.y != y)) { ! 147: w->core.x = x; ! 148: w->core.y = y; ! 149: if (XtIsRealized(w)) { ! 150: XMoveWindow(XtDisplay(w), XtWindow(w), w->core.x, w->core.y); ! 151: } ! 152: } ! 153: } /* XtMoveWidget */ ! 154:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.