summaryrefslogtreecommitdiff
path: root/do_movewin.c
diff options
context:
space:
mode:
Diffstat (limited to 'do_movewin.c')
-rw-r--r--do_movewin.c219
1 files changed, 219 insertions, 0 deletions
diff --git a/do_movewin.c b/do_movewin.c
new file mode 100644
index 0000000..034b51b
--- /dev/null
+++ b/do_movewin.c
@@ -0,0 +1,219 @@
+/* $Xorg: do_movewin.c,v 1.5 2000/11/30 12:19:00 pookie Exp $ */
+/*****************************************************************************
+Copyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+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 not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************************/
+
+#include "x11perf.h"
+
+static Window *children;
+static XPoint *positions;
+static Window cover;
+static int rows;
+static x_offset, y_offset; /* Private global data for DoMoveWindows */
+static int xmax, ymax;
+static delta1; /* Private global data for DoResizeWindows */
+
+#define STACK (4*(HEIGHT-10)/CHILDSIZE)
+
+int InitMoveWindows(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i = 0;
+
+ rows = (p->objects + MAXCOLS - 1) / MAXCOLS;
+
+ x_offset = 0;
+ y_offset = 0;
+ delta1 = 1;
+
+ children = (Window *) malloc (p->objects*sizeof (Window));
+ positions = (XPoint *) malloc(p->objects*sizeof(XPoint));
+
+ xmax = (CHILDSIZE+CHILDSPACE) * (rows > 1 ? MAXCOLS : p->objects);
+ ymax = rows * (CHILDSIZE+CHILDSPACE);
+
+ for (i = 0; i != p->objects; i++) {
+ positions[i].x = (CHILDSIZE+CHILDSPACE) * (i/rows) + CHILDSPACE/2;
+ positions[i].y = (CHILDSIZE+CHILDSPACE) * (i%rows) + CHILDSPACE/2;
+ children[i] = XCreateSimpleWindow(xp->d, xp->w,
+ positions[i].x, positions[i].y,
+ CHILDSIZE, CHILDSIZE, 0, xp->foreground, xp->foreground);
+ }
+ if (p->special)
+ XMapSubwindows (xp->d, xp->w);
+ return reps;
+}
+
+void DoMoveWindows(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i, j;
+
+ for (i = 0; i != reps; i++) {
+ x_offset += 1;
+ y_offset += 3;
+ if (y_offset + ymax > HEIGHT)
+ y_offset = 0;
+ if (x_offset + xmax > WIDTH)
+ x_offset = 0;
+ for (j = 0; j != p->objects; j++) {
+ XMoveWindow(xp->d, children[j],
+ positions[j].x + x_offset, positions[j].y + y_offset);
+ }
+ }
+}
+
+void EndMoveWindows(xp, p)
+ XParms xp;
+ Parms p;
+{
+ XDestroySubwindows(xp->d, xp->w);
+ free(children);
+ free(positions);
+}
+
+void DoResizeWindows(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i, j, delta2;
+
+ for (i = 0; i != reps; i++) {
+ delta1 = -delta1;
+ delta2 = delta1;
+ for (j = 0; j != p->objects; j++) {
+ delta2 = -delta2;
+ XResizeWindow(xp->d, children[j],
+ CHILDSIZE+delta2, CHILDSIZE-delta2);
+ }
+ }
+}
+
+int InitCircWindows(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i;
+ int pos;
+ int color;
+
+ children = (Window *) malloc (p->objects * sizeof (Window));
+ for (i = 0; i != p->objects; i++) {
+ pos = i % STACK;
+ color = (i & 1 ? xp->foreground : xp->background);
+ children[i] = XCreateSimpleWindow (xp->d, xp->w,
+ pos*CHILDSIZE/4 + (i/STACK)*2*CHILDSIZE, pos*CHILDSIZE/4,
+ CHILDSIZE, CHILDSIZE, 0, color, color);
+ }
+ if (p->special)
+ XMapSubwindows (xp->d, xp->w);
+ return reps;
+}
+
+void DoCircWindows(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i, j;
+
+ for (i = 0; i != reps; i++)
+ for (j = 0; j != p->objects; j++)
+ XCirculateSubwindows (xp->d, xp->w, RaiseLowest);
+}
+
+void EndCircWindows(xp, p)
+ XParms xp;
+ Parms p;
+{
+ XDestroySubwindows(xp->d, xp->w);
+ free(children);
+}
+
+
+int InitMoveTree(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i = 0;
+
+ rows = (p->objects + MAXCOLS - 1) / MAXCOLS;
+
+ x_offset = 0;
+ y_offset = 0;
+ delta1 = 1;
+
+ children = (Window *) malloc (p->objects*sizeof (Window));
+ positions = (XPoint *) malloc(p->objects*sizeof(XPoint));
+
+ xmax = (CHILDSIZE+CHILDSPACE) * (rows > 1 ? MAXCOLS : p->objects);
+ ymax = rows * (CHILDSIZE+CHILDSPACE);
+
+ cover = XCreateSimpleWindow(xp->d, xp->w,
+ 0, 0, xmax, ymax, 0,
+ xp->background, xp->background);
+
+ for (i = 0; i != p->objects; i++) {
+ positions[i].x = (CHILDSIZE+CHILDSPACE) * (i/rows) + CHILDSPACE/2;
+ positions[i].y = (CHILDSIZE+CHILDSPACE) * (i%rows) + CHILDSPACE/2;
+ children[i] = XCreateSimpleWindow(xp->d, cover,
+ positions[i].x, positions[i].y,
+ CHILDSIZE, CHILDSIZE, 0, xp->foreground, xp->foreground);
+ }
+ XMapSubwindows (xp->d, cover);
+ XMapWindow (xp->d, cover);
+ return reps;
+}
+
+void DoMoveTree(xp, p, reps)
+ XParms xp;
+ Parms p;
+ int reps;
+{
+ int i;
+
+ for (i = 0; i != reps; i++) {
+ x_offset += 1;
+ y_offset += 3;
+ if (y_offset + ymax > HEIGHT)
+ y_offset = 0;
+ if (x_offset + xmax > WIDTH)
+ x_offset = 0;
+ XMoveWindow(xp->d, cover, x_offset, y_offset);
+ }
+}
+
+void EndMoveTree(xp, p)
+ XParms xp;
+ Parms p;
+{
+ XDestroyWindow(xp->d, cover);
+ free(children);
+ free(positions);
+}