blob: de65c2ac39ec1550c36af303e7824de36cd173e5 [file] [log] [blame]
package org.eclipse.ui.internal;
import org.eclipse.swt.graphics.Point;
public class Shape {
int[] data;
int used = 0;
public Shape(int[] data) {
this.data = data;
this.used = data.length;
}
public Shape(int size) {
data = new int[size * 2];
}
public Shape() {
this(8);
}
public void add(IntAffineMatrix transform, Shape toAppend) {
int idx = 0;
while(idx < toAppend.used) {
int x = toAppend.data[idx++];
int y = toAppend.data[idx++];
add(transform.getx(x,y), transform.gety(x, y));
}
}
public void add(Shape toAppend) {
int idx = 0;
while(idx < toAppend.used) {
int x = toAppend.data[idx++];
int y = toAppend.data[idx++];
add(x, y);
}
}
public Shape reverse() {
int[] result = new int[used];
int idx = 0;
int srcIdx = used - 2;
while (idx < used) {
result[idx++] = data[srcIdx];
result[idx++] = data[srcIdx + 1];
srcIdx -= 2;
}
return new Shape(result);
}
public void add(int x, int y) {
if (used >= data.length - 1) {
resizeArray(Math.max(data.length * 2, 8));
}
data[used++] = x;
data[used++] = y;
}
public void add(Point toAdd) {
add(toAdd.x, toAdd.y);
}
public Point[] asPointArray() {
Point[] result = new Point[used / 2];
int idx = 0;
for (int i = 0; i < result.length; i++) {
int x = data[idx++];
int y = data[idx++];
result[i] = new Point(x, y);
}
return result;
}
private void resizeArray(int newSize) {
int[] newData = new int[newSize];
System.arraycopy(data, 0, newData, 0, used);
data = newData;
}
public int[] getData() {
if (used < data.length) {
resizeArray(used);
}
return data;
}
}