1210
1209
rtt.row = rtt.trbl = rtt.tlbr = 0;
1212
1211
if ((!rtt.row && !(direction % 2)) ||
1213
(!rtt.trbl && (direction % 2) && !((side + direction / 2) % 2)) ||
1214
(!rtt.tlbr && (direction % 2) && ((side + direction / 2) % 2)))
1212
(!rtt.trbl && (direction % 2) &&
1213
!((side + direction / 2) % 2)) ||
1214
(!rtt.tlbr && (direction % 2) &&
1215
((side + direction / 2) % 2)))
1215
1216
RotateFace(w, view, rowToRotate[side][direction].face,
1216
rowToRotate[side][direction].rotation);
1217
rowToRotate[side][direction].rotation);
1217
1218
if ((rtt.row == w->oct.size - 1 && !(direction % 2)) ||
1218
(rtt.trbl == w->oct.size - 1 && (direction % 2) &&
1219
!((side + direction / 2) % 2)) ||
1220
(rtt.tlbr == w->oct.size - 1 && (direction % 2) &&
1221
(side + direction / 2) % 2))
1219
(rtt.trbl == w->oct.size - 1 &&
1221
!((side + direction / 2) % 2)) ||
1222
(rtt.tlbr == w->oct.size - 1 &&
1224
(side + direction / 2) % 2))
1222
1225
RotateFace(w, !view, rowToRotate[MAXSIDES + side][direction].face,
1223
rowToRotate[MAXSIDES + side][direction].rotation);
1226
rowToRotate[MAXSIDES + side][direction].rotation);
1224
1227
if (!(direction % 2))
1226
1229
else if ((direction / 2 + side) % 2)
1489
1495
while ((x <= (w->oct.size - (rtt->row + 1)) *
1490
(w->oct.facetLength + w->oct.delta) ||
1491
x >= w->oct.viewMiddle + (rtt->row + 1) *
1492
(w->oct.facetLength + w->oct.delta) + 1 ||
1493
y <= (w->oct.size - (rtt->row + 1)) *
1494
(w->oct.facetLength + w->oct.delta) ||
1495
y >= w->oct.viewMiddle + (rtt->row + 1) *
1496
(w->oct.facetLength + w->oct.delta) + 1) &&
1497
rtt->row < w->oct.size)
1496
(w->oct.facetLength + w->oct.delta) ||
1497
x >= w->oct.viewMiddle + (rtt->row + 1) *
1498
(w->oct.facetLength + w->oct.delta) + 1 ||
1499
y <= (w->oct.size - (rtt->row + 1)) *
1500
(w->oct.facetLength + w->oct.delta) ||
1501
y >= w->oct.viewMiddle + (rtt->row + 1) *
1502
(w->oct.facetLength + w->oct.delta) + 1) &&
1503
rtt->row < w->oct.size)
1500
1506
while ((x + y) / 2 <= (w->oct.size - (rtt->trbl + 1)) *
1501
(w->oct.facetLength + w->oct.delta) + 2 * w->oct.delta ||
1502
(x + y) / 2 >= w->oct.viewMiddle + (rtt->trbl + 1) *
1503
(w->oct.facetLength + w->oct.delta))
1507
(w->oct.facetLength + w->oct.delta) + 2 * w->oct.delta ||
1508
(x + y) / 2 >= w->oct.viewMiddle + (rtt->trbl + 1) *
1509
(w->oct.facetLength + w->oct.delta))
1506
1512
while (x <= y - 2 * (rtt->tlbr + 1) *
1507
(w->oct.facetLength + w->oct.delta) - 2 ||
1508
y <= x - 2 * (rtt->tlbr + 1) *
1509
(w->oct.facetLength + w->oct.delta) - 2)
1513
(w->oct.facetLength + w->oct.delta) - 2 ||
1514
y <= x - 2 * (rtt->tlbr + 1) *
1515
(w->oct.facetLength + w->oct.delta) - 2)
1511
1517
if (!w->oct.vertical && view == DOWN)
1512
1518
*face = (*face + MAXSIDES / 2) % MAXSIDES;
1624
1635
ResetPieces(OctWidget w)
1626
int face, position, orient;
1637
int face, position, orient;
1628
1639
w->oct.sizeSize = w->oct.size * w->oct.size;
1629
1640
for (face = 0; face < MAXFACES; face++) {
1630
1641
if (w->oct.facetLoc[face])
1631
1642
(void) free((void *) w->oct.facetLoc[face]);
1632
1643
if (!(w->oct.facetLoc[face] = (OctLoc *)
1633
malloc(sizeof (OctLoc) * w->oct.sizeSize))) {
1644
malloc(sizeof (OctLoc) * w->oct.sizeSize))) {
1634
1645
DISPLAY_ERROR("Not enough memory, exiting.");
1636
1647
if (startLoc[face])
1637
1648
(void) free((void *) startLoc[face]);
1638
1649
if (!(startLoc[face] = (OctLoc *)
1639
malloc(sizeof (OctLoc) * w->oct.sizeSize))) {
1650
malloc(sizeof (OctLoc) * w->oct.sizeSize))) {
1640
1651
DISPLAY_ERROR("Not enough memory, exiting.");
2531
2545
style = (w->oct.mode == PERIOD3) ? PERIOD3 : PERIOD4;
2533
2547
style = (shift) ? PERIOD4 : PERIOD3;
2534
if (face == w->oct.currentFace)
2535
count = CheckMoveDir(w, ToRTT(w->oct.currentPosition), rtt, face,
2548
if (face == w->oct.currentFace) {
2551
ToRTT(w->oct.currentPosition, &rtt1);
2552
count = CheckMoveDir(w, rtt1, rtt, face, &direction);
2537
2554
if (count == 1 && NarrowSelection(style, &face, &direction)) {
2538
2555
MoveOct(w, face, w->oct.currentPosition,
2539
2556
direction, style, (control) ? 1 : 0);
2818
2835
MoveOctCcw(OctWidget w, XEvent * event, char **args, int nArgs)
2820
2837
MoveOctInput(w, event->xbutton.x, event->xbutton.y, CCW,
2821
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2822
(int) (event->xbutton.state & ControlMask));
2838
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2839
(int) (event->xbutton.state & ControlMask));
2826
2843
MoveOctTl(OctWidget w, XEvent * event, char **args, int nArgs)
2828
2845
MoveOctInput(w, event->xbutton.x, event->xbutton.y, TL,
2829
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2830
(int) (event->xkey.state & ControlMask));
2846
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2847
(int) (event->xkey.state & ControlMask));
2834
2851
MoveOctTop(OctWidget w, XEvent * event, char **args, int nArgs)
2836
2853
MoveOctInput(w, event->xbutton.x, event->xbutton.y, TOP,
2837
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2838
(int) (event->xkey.state & ControlMask));
2854
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2855
(int) (event->xkey.state & ControlMask));
2842
2859
MoveOctTr(OctWidget w, XEvent * event, char **args, int nArgs)
2844
2861
MoveOctInput(w, event->xbutton.x, event->xbutton.y, TR,
2845
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2846
(int) (event->xkey.state & ControlMask));
2862
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2863
(int) (event->xkey.state & ControlMask));
2850
2867
MoveOctLeft(OctWidget w, XEvent * event, char **args, int nArgs)
2852
2869
MoveOctInput(w, event->xbutton.x, event->xbutton.y, LEFT,
2853
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2854
(int) (event->xkey.state & ControlMask));
2870
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2871
(int) (event->xkey.state & ControlMask));
2858
2875
MoveOctCw(OctWidget w, XEvent * event, char **args, int nArgs)
2860
2877
MoveOctInput(w, event->xbutton.x, event->xbutton.y, CW,
2861
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2862
(int) (event->xkey.state & ControlMask));
2878
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2879
(int) (event->xkey.state & ControlMask));
2866
2883
MoveOctRight(OctWidget w, XEvent * event, char **args, int nArgs)
2868
2885
MoveOctInput(w, event->xbutton.x, event->xbutton.y, RIGHT,
2869
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2870
(int) (event->xkey.state & ControlMask));
2886
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2887
(int) (event->xkey.state & ControlMask));
2874
2891
MoveOctBl(OctWidget w, XEvent * event, char **args, int nArgs)
2876
2893
MoveOctInput(w, event->xbutton.x, event->xbutton.y, BL,
2877
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2878
(int) (event->xkey.state & ControlMask));
2894
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2895
(int) (event->xkey.state & ControlMask));
2882
2899
MoveOctBottom(OctWidget w, XEvent * event, char **args, int nArgs)
2884
2901
MoveOctInput(w, event->xbutton.x, event->xbutton.y, BOTTOM,
2885
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2886
(int) (event->xkey.state & ControlMask));
2902
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2903
(int) (event->xkey.state & ControlMask));
2890
2907
MoveOctBr(OctWidget w, XEvent * event, char **args, int nArgs)
2892
2909
MoveOctInput(w, event->xbutton.x, event->xbutton.y, BR,
2893
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2894
(int) (event->xkey.state & ControlMask));
2910
(int) (event->xbutton.state & (ShiftMask | LockMask)),
2911
(int) (event->xkey.state & ControlMask));