|
|
1.1 root 1: #ifndef lint
2: static char *rcsid_Push_c = "$Header: Push.c,v 1.3 87/09/11 08:21:37 toddb Exp $";
3: #endif lint
4:
5: #include <X11/copyright.h>
6:
7: /*
8: * Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
9: *
10: * All Rights Reserved
11: *
12: * Permission to use, copy, modify, and distribute this software and its
13: * documentation for any purpose and without fee is hereby granted,
14: * provided that the above copyright notice appear in all copies and that
15: * both that copyright notice and this permission notice appear in
16: * supporting documentation, and that the name of Digital Equipment
17: * Corporation not be used in advertising or publicity pertaining to
18: * distribution of the software without specific, written prior permission.
19: *
20: *
21: * DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
22: * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
23: * DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
24: * ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
25: * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
26: * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
27: * SOFTWARE.
28: */
29:
30:
31:
32: /*
33: * MODIFICATION HISTORY
34: *
35: * 000 -- M. Gancarz, DEC Ultrix Engineering Group
36: * 001 -- Loretta Guarino Reid, DEC Ultrix Engineering Group,
37: Western Software Lab. Convert to X11.
38: */
39:
40: #ifndef lint
41: static char *sccsid = "@(#)Push.c 3.8 1/24/86";
42: #endif
43:
44: #include "uwm.h"
45:
46: #define PUSH_DOWN 1
47: #define PUSH_UP 2
48: #define PUSH_LEFT 3
49: #define PUSH_RIGHT 4
50:
51: extern Bool PushAll();
52:
53: Bool PushDown(window, mask, button, x, y)
54: Window window; /* Event window. */
55: int mask; /* Button/key mask. */
56: int button; /* Button event detail. */
57: int x, y; /* Event mouse position. */
58: {
59: return(PushAll(window, PUSH_DOWN));
60: }
61:
62: Bool PushUp(window, mask, button, x, y)
63: Window window; /* Event window. */
64: int mask; /* Button/key mask. */
65: int button; /* Button event detail. */
66: int x, y; /* Event mouse position. */
67: {
68: return(PushAll(window, PUSH_UP));
69: }
70:
71: Bool PushLeft(window, mask, button, x, y)
72: Window window; /* Event window. */
73: int mask; /* Button/key mask. */
74: int button; /* Button event detail. */
75: int x, y; /* Event mouse position. */
76: {
77: return(PushAll(window, PUSH_LEFT));
78: }
79:
80: Bool PushRight(window, mask, button, x, y)
81: Window window; /* Event window. */
82: int mask; /* Button/key mask. */
83: int button; /* Button event detail. */
84: int x, y; /* Event mouse position. */
85: {
86: return(PushAll(window, PUSH_RIGHT));
87: }
88:
89: Bool PushAll(w, direction)
90: Window w;
91: int direction;
92: {
93: XWindowAttributes winfo; /* Event window information. */
94: XWindowAttributes rinfo; /* Root window information. */
95: int xofs, yofs; /* Movement offsets. */
96: int x, y; /* New window position. */
97:
98: /*
99: * Do not try to move the root window.
100: */
101: if (w == RootWindow(dpy, scr))
102: return(FALSE);
103:
104: /*
105: * Gather info on the event window.
106: */
107: status = XGetWindowAttributes(dpy, w, &winfo);
108: if (status == FAILURE) return(FALSE);
109:
110: /*
111: * Calculate the movement offsets.
112: */
113: switch(direction) {
114: case PUSH_DOWN:
115: xofs = 0;
116: yofs = Push ? (winfo.height / Pushval) : Pushval;
117: break;
118: case PUSH_UP:
119: xofs = 0;
120: yofs = 0 - (Push ? (winfo.height / Pushval) : Pushval);
121: break;
122: case PUSH_LEFT:
123: xofs = 0 - (Push ? (winfo.width / Pushval) : Pushval);
124: yofs = 0;
125: break;
126: case PUSH_RIGHT:
127: xofs = Push ? (winfo.width / Pushval) : Pushval;
128: yofs = 0;
129: break;
130: }
131:
132: /*
133: * Calculate the new window position.
134: */
135: x = winfo.x + xofs;
136: y = winfo.y + yofs;
137:
138: /*
139: * Normalize the new window coordinates so we don't
140: * lose the window off the edge of the screen.
141: */
142: if (x < (0 - winfo.width + CURSOR_WIDTH - (winfo.border_width << 1)))
143: x = 0 - winfo.width + CURSOR_WIDTH - (winfo.border_width << 1);
144: if (y < (0 - winfo.height + CURSOR_HEIGHT - (winfo.border_width << 1)))
145: y = 0 - winfo.height + CURSOR_HEIGHT - (winfo.border_width << 1);
146: if (x > (ScreenWidth - CURSOR_WIDTH))
147: x = ScreenWidth - CURSOR_WIDTH;
148: if (y > (ScreenHeight - CURSOR_HEIGHT))
149: y = ScreenHeight - CURSOR_HEIGHT;
150:
151: /*
152: * Move the window into place.
153: */
154: XMoveWindow(dpy, w, x, y);
155:
156: return(FALSE);
157: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.