do_movewin.c revision 533545b5
1264fa531Smrg/*****************************************************************************
2264fa531SmrgCopyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
3264fa531Smrg
4264fa531Smrg                        All Rights Reserved
5264fa531Smrg
6264fa531SmrgPermission to use, copy, modify, and distribute this software and its
7264fa531Smrgdocumentation for any purpose and without fee is hereby granted,
8264fa531Smrgprovided that the above copyright notice appear in all copies and that
9264fa531Smrgboth that copyright notice and this permission notice appear in
10264fa531Smrgsupporting documentation, and that the name of Digital not be
11264fa531Smrgused in advertising or publicity pertaining to distribution of the
12264fa531Smrgsoftware without specific, written prior permission.
13264fa531Smrg
14264fa531SmrgDIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
15264fa531SmrgALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
16264fa531SmrgDIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
17264fa531SmrgANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
18264fa531SmrgWHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
19264fa531SmrgARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
20264fa531SmrgSOFTWARE.
21264fa531Smrg
22264fa531Smrg******************************************************************************/
23264fa531Smrg
24264fa531Smrg#include "x11perf.h"
25264fa531Smrg
26264fa531Smrgstatic Window *children;
27264fa531Smrgstatic XPoint *positions;
28264fa531Smrgstatic Window cover;
29264fa531Smrgstatic int rows;
30264fa531Smrgstatic int x_offset, y_offset;  /* Private global data for DoMoveWindows */
31264fa531Smrgstatic int xmax, ymax;
32264fa531Smrgstatic int delta1;		/* Private global data for DoResizeWindows */
33264fa531Smrg
34264fa531Smrg#define STACK (4*(HEIGHT-10)/CHILDSIZE)
35264fa531Smrg
36264fa531Smrgint
37533545b5SmrgInitMoveWindows(XParms xp, Parms p, int64_t reps)
38264fa531Smrg{
39264fa531Smrg    int     i = 0;
40264fa531Smrg
41264fa531Smrg    rows = (p->objects + MAXCOLS - 1) / MAXCOLS;
42264fa531Smrg
43264fa531Smrg    x_offset = 0;
44264fa531Smrg    y_offset = 0;
45264fa531Smrg    delta1   = 1;
46264fa531Smrg
47264fa531Smrg    children = (Window *) malloc (p->objects*sizeof (Window));
48264fa531Smrg    positions = (XPoint *) malloc(p->objects*sizeof(XPoint));
49264fa531Smrg
50264fa531Smrg    xmax = (CHILDSIZE+CHILDSPACE) * (rows > 1 ? MAXCOLS : p->objects);
51264fa531Smrg    ymax = rows * (CHILDSIZE+CHILDSPACE);
52264fa531Smrg
53264fa531Smrg    for (i = 0; i != p->objects; i++) {
54264fa531Smrg	positions[i].x = (CHILDSIZE+CHILDSPACE) * (i/rows) + CHILDSPACE/2;
55264fa531Smrg	positions[i].y = (CHILDSIZE+CHILDSPACE) * (i%rows) + CHILDSPACE/2;
56264fa531Smrg	children[i] = XCreateSimpleWindow(xp->d, xp->w,
57264fa531Smrg	    positions[i].x, positions[i].y,
58264fa531Smrg	    CHILDSIZE, CHILDSIZE, 0, xp->foreground, xp->foreground);
59264fa531Smrg    }
60264fa531Smrg    if (p->special)
61264fa531Smrg	XMapSubwindows (xp->d, xp->w);
62264fa531Smrg    return reps;
63264fa531Smrg}
64264fa531Smrg
65264fa531Smrgvoid
66533545b5SmrgDoMoveWindows(XParms xp, Parms p, int64_t reps)
67264fa531Smrg{
68264fa531Smrg    int     i, j;
69264fa531Smrg
70264fa531Smrg    for (i = 0; i != reps; i++) {
71264fa531Smrg	x_offset += 1;
72264fa531Smrg	y_offset += 3;
73264fa531Smrg	if (y_offset + ymax > HEIGHT)
74264fa531Smrg	    y_offset = 0;
75264fa531Smrg	if (x_offset + xmax > WIDTH)
76264fa531Smrg	    x_offset = 0;
77264fa531Smrg	for (j = 0; j != p->objects; j++) {
78264fa531Smrg	    XMoveWindow(xp->d, children[j],
79264fa531Smrg	    positions[j].x + x_offset, positions[j].y + y_offset);
80264fa531Smrg	}
81264fa531Smrg	CheckAbort ();
82264fa531Smrg    }
83264fa531Smrg}
84264fa531Smrg
85264fa531Smrgvoid
86264fa531SmrgEndMoveWindows(XParms xp, Parms p)
87264fa531Smrg{
88264fa531Smrg    free(children);
89264fa531Smrg    free(positions);
90264fa531Smrg}
91264fa531Smrg
92264fa531Smrgvoid
93533545b5SmrgDoResizeWindows(XParms xp, Parms p, int64_t reps)
94264fa531Smrg{
95264fa531Smrg    int     i, j, delta2;
96264fa531Smrg
97264fa531Smrg    for (i = 0; i != reps; i++) {
98264fa531Smrg	delta1 = -delta1;
99264fa531Smrg	delta2 = delta1;
100264fa531Smrg	for (j = 0; j != p->objects; j++) {
101264fa531Smrg	    delta2 = -delta2;
102264fa531Smrg	    XResizeWindow(xp->d, children[j],
103264fa531Smrg		CHILDSIZE+delta2, CHILDSIZE-delta2);
104264fa531Smrg	}
105264fa531Smrg	CheckAbort ();
106264fa531Smrg    }
107264fa531Smrg}
108264fa531Smrg
109264fa531Smrgint
110533545b5SmrgInitCircWindows(XParms xp, Parms p, int64_t reps)
111264fa531Smrg{
112264fa531Smrg    int     i;
113264fa531Smrg    int     pos;
114264fa531Smrg    int     color;
115264fa531Smrg
116264fa531Smrg    children = (Window *) malloc (p->objects * sizeof (Window));
117264fa531Smrg    for (i = 0; i != p->objects; i++) {
118264fa531Smrg	pos = i % STACK;
119264fa531Smrg	color = (i & 1 ? xp->foreground : xp->background);
120264fa531Smrg	children[i] = XCreateSimpleWindow (xp->d, xp->w,
121264fa531Smrg	    pos*CHILDSIZE/4 + (i/STACK)*2*CHILDSIZE, pos*CHILDSIZE/4,
122264fa531Smrg	    CHILDSIZE, CHILDSIZE, 0, color, color);
123264fa531Smrg    }
124264fa531Smrg    if (p->special)
125264fa531Smrg	XMapSubwindows (xp->d, xp->w);
126264fa531Smrg    return reps;
127264fa531Smrg}
128264fa531Smrg
129264fa531Smrgvoid
130533545b5SmrgDoCircWindows(XParms xp, Parms p, int64_t reps)
131264fa531Smrg{
132264fa531Smrg    int     i, j;
133264fa531Smrg
134264fa531Smrg    for (i = 0; i != reps; i++)
135264fa531Smrg    {
136264fa531Smrg	for (j = 0; j != p->objects; j++)
137264fa531Smrg	    XCirculateSubwindows (xp->d, xp->w, RaiseLowest);
138264fa531Smrg	CheckAbort ();
139264fa531Smrg    }
140264fa531Smrg}
141264fa531Smrg
142264fa531Smrgvoid
143264fa531SmrgEndCircWindows(XParms xp, Parms p)
144264fa531Smrg{
145264fa531Smrg    free(children);
146264fa531Smrg}
147264fa531Smrg
148264fa531Smrg
149264fa531Smrgint
150533545b5SmrgInitMoveTree(XParms xp, Parms p, int64_t reps)
151264fa531Smrg{
152264fa531Smrg    int     i = 0;
153264fa531Smrg
154264fa531Smrg    rows = (p->objects + MAXCOLS - 1) / MAXCOLS;
155264fa531Smrg
156264fa531Smrg    x_offset = 0;
157264fa531Smrg    y_offset = 0;
158264fa531Smrg    delta1   = 1;
159264fa531Smrg
160264fa531Smrg    children = (Window *) malloc (p->objects*sizeof (Window));
161264fa531Smrg    positions = (XPoint *) malloc(p->objects*sizeof(XPoint));
162264fa531Smrg
163264fa531Smrg    xmax = (CHILDSIZE+CHILDSPACE) * (rows > 1 ? MAXCOLS : p->objects);
164264fa531Smrg    ymax = rows * (CHILDSIZE+CHILDSPACE);
165264fa531Smrg
166264fa531Smrg    cover = XCreateSimpleWindow(xp->d, xp->w,
167264fa531Smrg				0, 0, xmax, ymax, 0,
168264fa531Smrg				xp->background, xp->background);
169264fa531Smrg
170264fa531Smrg    for (i = 0; i != p->objects; i++) {
171264fa531Smrg	positions[i].x = (CHILDSIZE+CHILDSPACE) * (i/rows) + CHILDSPACE/2;
172264fa531Smrg	positions[i].y = (CHILDSIZE+CHILDSPACE) * (i%rows) + CHILDSPACE/2;
173264fa531Smrg	children[i] = XCreateSimpleWindow(xp->d, cover,
174264fa531Smrg	    positions[i].x, positions[i].y,
175264fa531Smrg	    CHILDSIZE, CHILDSIZE, 0, xp->foreground, xp->foreground);
176264fa531Smrg    }
177264fa531Smrg    XMapSubwindows (xp->d, cover);
178264fa531Smrg    XMapWindow (xp->d, cover);
179264fa531Smrg    return reps;
180264fa531Smrg}
181264fa531Smrg
182264fa531Smrgvoid
183533545b5SmrgDoMoveTree(XParms xp, Parms p, int64_t reps)
184264fa531Smrg{
185264fa531Smrg    int     i;
186264fa531Smrg
187264fa531Smrg    for (i = 0; i != reps; i++) {
188264fa531Smrg	x_offset += 1;
189264fa531Smrg	y_offset += 3;
190264fa531Smrg	if (y_offset + ymax > HEIGHT)
191264fa531Smrg	    y_offset = 0;
192264fa531Smrg	if (x_offset + xmax > WIDTH)
193264fa531Smrg	    x_offset = 0;
194264fa531Smrg	XMoveWindow(xp->d, cover, x_offset, y_offset);
195264fa531Smrg	CheckAbort ();
196264fa531Smrg    }
197264fa531Smrg}
198264fa531Smrg
199264fa531Smrgvoid
200264fa531SmrgEndMoveTree(XParms xp, Parms p)
201264fa531Smrg{
202264fa531Smrg    XDestroyWindow(xp->d, cover);
203264fa531Smrg    free(children);
204264fa531Smrg    free(positions);
205264fa531Smrg}
206