|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: P T
Length: 4312 (0x10d8)
Types: TextFile
Names: »Push.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦526ad3590⟧ »EUUGD11/gnu-31mar87/X.V10.R4.tar.Z«
└─⟦2109abc41⟧
└─⟦this⟧ »./X.V10R4/uwm/Push.c«
#ifndef lint
static char *rcsid_Push_c = "$Header: Push.c,v 10.4 86/11/19 16:24:23 jg Rel $";
#endif lint
/*
* COPYRIGHT 1985, 1986
* DIGITAL EQUIPMENT CORPORATION
* MAYNARD, MASSACHUSETTS
* ALL RIGHTS RESERVED.
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE AND
* SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.
* DIGITAL MAKES NO REPRESENTATIONS ABOUT THE SUITIBILITY OF THIS SOFTWARE FOR
* ANY PURPOSE. IT IS SUPPLIED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY.
*
* IF THE SOFTWARE IS MODIFIED IN A MANNER CREATING DERIVATIVE COPYRIGHT RIGHTS,
* APPROPRIATE LEGENDS MAY BE PLACED ON THE DERIVATIVE WORK IN ADDITION TO THAT
* SET FORTH ABOVE.
*
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted, provided
* that the above copyright notice appear in all copies and that both that
* copyright notice and this permission notice appear in supporting documentation,
* and that the name of Digital Equipment Corporation not be used in advertising
* or publicity pertaining to distribution of the software without specific,
* written prior permission.
*
*/
/*
* MODIFICATION HISTORY
*
* 000 -- M. Gancarz, DEC Ultrix Engineering Group
*/
#ifndef lint
static char *sccsid = "@(#)Push.c 3.8 1/24/86";
#endif
#include "uwm.h"
#define PUSH_DOWN 1
#define PUSH_UP 2
#define PUSH_LEFT 3
#define PUSH_RIGHT 4
extern Bool PushAll();
Bool PushDown(window, mask, button, x, y)
Window window; /* Event window. */
int mask; /* Button/key mask. */
short button; /* Button event detail. */
int x, y; /* Event mouse position. */
{
return(PushAll(window, PUSH_DOWN));
}
Bool PushUp(window, mask, button, x, y)
Window window; /* Event window. */
int mask; /* Button/key mask. */
short button; /* Button event detail. */
int x, y; /* Event mouse position. */
{
return(PushAll(window, PUSH_UP));
}
Bool PushLeft(window, mask, button, x, y)
Window window; /* Event window. */
int mask; /* Button/key mask. */
short button; /* Button event detail. */
int x, y; /* Event mouse position. */
{
return(PushAll(window, PUSH_LEFT));
}
Bool PushRight(window, mask, button, x, y)
Window window; /* Event window. */
int mask; /* Button/key mask. */
short button; /* Button event detail. */
int x, y; /* Event mouse position. */
{
return(PushAll(window, PUSH_RIGHT));
}
Bool PushAll(w, direction)
Window w;
int direction;
{
WindowInfo winfo; /* Event window information. */
WindowInfo rinfo; /* Root window information. */
int xofs, yofs; /* Movement offsets. */
int x, y; /* New window position. */
/*
* Do not try to move the root window.
*/
if (w == RootWindow)
return(FALSE);
/*
* Gather info on the event window.
*/
status = XQueryWindow(w, &winfo);
if (status == FAILURE) return(FALSE);
/*
* Calculate the movement offsets.
*/
switch(direction) {
case PUSH_DOWN:
xofs = 0;
yofs = Push ? (winfo.height / Pushval) : Pushval;
break;
case PUSH_UP:
xofs = 0;
yofs = 0 - (Push ? (winfo.height / Pushval) : Pushval);
break;
case PUSH_LEFT:
xofs = 0 - (Push ? (winfo.width / Pushval) : Pushval);
yofs = 0;
break;
case PUSH_RIGHT:
xofs = Push ? (winfo.width / Pushval) : Pushval;
yofs = 0;
break;
}
/*
* Calculate the new window position.
*/
x = winfo.x + xofs;
y = winfo.y + yofs;
/*
* Normalize the new window coordinates so we don't
* lose the window off the edge of the screen.
*/
if (x < (0 - winfo.width + CURSOR_WIDTH - (winfo.bdrwidth << 1)))
x = 0 - winfo.width + CURSOR_WIDTH - (winfo.bdrwidth << 1);
if (y < (0 - winfo.height + CURSOR_HEIGHT - (winfo.bdrwidth << 1)))
y = 0 - winfo.height + CURSOR_HEIGHT - (winfo.bdrwidth << 1);
if (x > (ScreenWidth - CURSOR_WIDTH))
x = ScreenWidth - CURSOR_WIDTH;
if (y > (ScreenHeight - CURSOR_HEIGHT))
y = ScreenHeight - CURSOR_HEIGHT;
/*
* Move the window into place.
*/
XMoveWindow(w, x, y);
return(FALSE);
}