1264fa531Smrg/***************************************************************************** 2264fa531SmrgCopyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts. 3264fa531Smrg 4264fa531Smrg All Rights Reserved 5264fa531Smrg 6dfac8f13SmrgPermission to use, copy, modify, and distribute this software and its 7dfac8f13Smrgdocumentation for any purpose and without fee is hereby granted, 8264fa531Smrgprovided that the above copyright notice appear in all copies and that 9dfac8f13Smrgboth 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 12dfac8f13Smrgsoftware 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 36dfac8f13Smrgint 37533545b5SmrgInitMoveWindows(XParms xp, Parms p, int64_t reps) 38264fa531Smrg{ 39264fa531Smrg rows = (p->objects + MAXCOLS - 1) / MAXCOLS; 40dfac8f13Smrg 41264fa531Smrg x_offset = 0; 42264fa531Smrg y_offset = 0; 43264fa531Smrg delta1 = 1; 44264fa531Smrg 45c9e4df9bSmrg children = malloc(p->objects * sizeof (Window)); 46c9e4df9bSmrg positions = malloc(p->objects * sizeof(XPoint)); 47264fa531Smrg 48264fa531Smrg xmax = (CHILDSIZE+CHILDSPACE) * (rows > 1 ? MAXCOLS : p->objects); 49264fa531Smrg ymax = rows * (CHILDSIZE+CHILDSPACE); 50264fa531Smrg 51c9e4df9bSmrg for (int i = 0; i != p->objects; i++) { 52264fa531Smrg positions[i].x = (CHILDSIZE+CHILDSPACE) * (i/rows) + CHILDSPACE/2; 53264fa531Smrg positions[i].y = (CHILDSIZE+CHILDSPACE) * (i%rows) + CHILDSPACE/2; 54264fa531Smrg children[i] = XCreateSimpleWindow(xp->d, xp->w, 55264fa531Smrg positions[i].x, positions[i].y, 56264fa531Smrg CHILDSIZE, CHILDSIZE, 0, xp->foreground, xp->foreground); 57264fa531Smrg } 58264fa531Smrg if (p->special) 59264fa531Smrg XMapSubwindows (xp->d, xp->w); 60264fa531Smrg return reps; 61264fa531Smrg} 62264fa531Smrg 63dfac8f13Smrgvoid 64533545b5SmrgDoMoveWindows(XParms xp, Parms p, int64_t reps) 65264fa531Smrg{ 66c9e4df9bSmrg for (int i = 0; i != reps; i++) { 67264fa531Smrg x_offset += 1; 68264fa531Smrg y_offset += 3; 69264fa531Smrg if (y_offset + ymax > HEIGHT) 70264fa531Smrg y_offset = 0; 71264fa531Smrg if (x_offset + xmax > WIDTH) 72264fa531Smrg x_offset = 0; 73c9e4df9bSmrg for (int j = 0; j != p->objects; j++) { 74264fa531Smrg XMoveWindow(xp->d, children[j], 75264fa531Smrg positions[j].x + x_offset, positions[j].y + y_offset); 76264fa531Smrg } 77264fa531Smrg CheckAbort (); 78264fa531Smrg } 79264fa531Smrg} 80264fa531Smrg 81dfac8f13Smrgvoid 82264fa531SmrgEndMoveWindows(XParms xp, Parms p) 83264fa531Smrg{ 84264fa531Smrg free(children); 85264fa531Smrg free(positions); 86264fa531Smrg} 87264fa531Smrg 88dfac8f13Smrgvoid 89533545b5SmrgDoResizeWindows(XParms xp, Parms p, int64_t reps) 90264fa531Smrg{ 91c9e4df9bSmrg for (int i = 0; i != reps; i++) { 92c9e4df9bSmrg int delta2; 93264fa531Smrg 94264fa531Smrg delta1 = -delta1; 95264fa531Smrg delta2 = delta1; 96c9e4df9bSmrg for (int j = 0; j != p->objects; j++) { 97264fa531Smrg delta2 = -delta2; 98264fa531Smrg XResizeWindow(xp->d, children[j], 99264fa531Smrg CHILDSIZE+delta2, CHILDSIZE-delta2); 100264fa531Smrg } 101264fa531Smrg CheckAbort (); 102264fa531Smrg } 103264fa531Smrg} 104264fa531Smrg 105264fa531Smrgint 106533545b5SmrgInitCircWindows(XParms xp, Parms p, int64_t reps) 107264fa531Smrg{ 108c9e4df9bSmrg children = malloc (p->objects * sizeof (Window)); 109c9e4df9bSmrg for (int i = 0; i != p->objects; i++) { 110c9e4df9bSmrg int pos = i % STACK; 111c9e4df9bSmrg int color = (i & 1 ? xp->foreground : xp->background); 112dfac8f13Smrg children[i] = XCreateSimpleWindow (xp->d, xp->w, 113264fa531Smrg pos*CHILDSIZE/4 + (i/STACK)*2*CHILDSIZE, pos*CHILDSIZE/4, 114264fa531Smrg CHILDSIZE, CHILDSIZE, 0, color, color); 115264fa531Smrg } 116264fa531Smrg if (p->special) 117264fa531Smrg XMapSubwindows (xp->d, xp->w); 118264fa531Smrg return reps; 119264fa531Smrg} 120264fa531Smrg 121dfac8f13Smrgvoid 122533545b5SmrgDoCircWindows(XParms xp, Parms p, int64_t reps) 123264fa531Smrg{ 124c9e4df9bSmrg for (int i = 0; i != reps; i++) 125264fa531Smrg { 126c9e4df9bSmrg for (int j = 0; j != p->objects; j++) 127264fa531Smrg XCirculateSubwindows (xp->d, xp->w, RaiseLowest); 128264fa531Smrg CheckAbort (); 129264fa531Smrg } 130264fa531Smrg} 131264fa531Smrg 132dfac8f13Smrgvoid 133264fa531SmrgEndCircWindows(XParms xp, Parms p) 134264fa531Smrg{ 135264fa531Smrg free(children); 136264fa531Smrg} 137264fa531Smrg 138264fa531Smrg 139dfac8f13Smrgint 140533545b5SmrgInitMoveTree(XParms xp, Parms p, int64_t reps) 141264fa531Smrg{ 142264fa531Smrg rows = (p->objects + MAXCOLS - 1) / MAXCOLS; 143dfac8f13Smrg 144264fa531Smrg x_offset = 0; 145264fa531Smrg y_offset = 0; 146264fa531Smrg delta1 = 1; 147264fa531Smrg 148c9e4df9bSmrg children = malloc(p->objects * sizeof (Window)); 149c9e4df9bSmrg positions = malloc(p->objects * sizeof(XPoint)); 150264fa531Smrg 151264fa531Smrg xmax = (CHILDSIZE+CHILDSPACE) * (rows > 1 ? MAXCOLS : p->objects); 152264fa531Smrg ymax = rows * (CHILDSIZE+CHILDSPACE); 153264fa531Smrg 154264fa531Smrg cover = XCreateSimpleWindow(xp->d, xp->w, 155264fa531Smrg 0, 0, xmax, ymax, 0, 156264fa531Smrg xp->background, xp->background); 157dfac8f13Smrg 158c9e4df9bSmrg for (int i = 0; i != p->objects; i++) { 159264fa531Smrg positions[i].x = (CHILDSIZE+CHILDSPACE) * (i/rows) + CHILDSPACE/2; 160264fa531Smrg positions[i].y = (CHILDSIZE+CHILDSPACE) * (i%rows) + CHILDSPACE/2; 161264fa531Smrg children[i] = XCreateSimpleWindow(xp->d, cover, 162264fa531Smrg positions[i].x, positions[i].y, 163264fa531Smrg CHILDSIZE, CHILDSIZE, 0, xp->foreground, xp->foreground); 164264fa531Smrg } 165264fa531Smrg XMapSubwindows (xp->d, cover); 166264fa531Smrg XMapWindow (xp->d, cover); 167264fa531Smrg return reps; 168264fa531Smrg} 169264fa531Smrg 170dfac8f13Smrgvoid 171533545b5SmrgDoMoveTree(XParms xp, Parms p, int64_t reps) 172264fa531Smrg{ 173c9e4df9bSmrg for (int i = 0; i != reps; i++) { 174264fa531Smrg x_offset += 1; 175264fa531Smrg y_offset += 3; 176264fa531Smrg if (y_offset + ymax > HEIGHT) 177264fa531Smrg y_offset = 0; 178264fa531Smrg if (x_offset + xmax > WIDTH) 179264fa531Smrg x_offset = 0; 180264fa531Smrg XMoveWindow(xp->d, cover, x_offset, y_offset); 181264fa531Smrg CheckAbort (); 182264fa531Smrg } 183264fa531Smrg} 184264fa531Smrg 185dfac8f13Smrgvoid 186264fa531SmrgEndMoveTree(XParms xp, Parms p) 187264fa531Smrg{ 188264fa531Smrg XDestroyWindow(xp->d, cover); 189264fa531Smrg free(children); 190264fa531Smrg free(positions); 191264fa531Smrg} 192