in modules/print/src/main/java/windows/org/apache/harmony/x/print/PSInterpreter.java [378:537]
private void interpretCommand(int command) throws IOException {
if (queue.size() < commandsParams[command] + 1) {
System.out.println("Not enough parameters for PS command "
+ commands[command]);
return;
}
queue.remove(queue.size() - 1);
switch (command) {
case COMMAND_MOVETO:
try {
double x, y;
y = Double.parseDouble(extractQueueLast());
x = Double.parseDouble(extractQueueLast());
if (!pathOpened) {
beginPath(serviceID);
pathOpened = true;
}
moveTo(serviceID, x, y);
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " + nfe);
nfe.printStackTrace(System.out);
}
break;
case COMMAND_LINETO:
try {
double x, y;
y = Double.parseDouble(extractQueueLast());
x = Double.parseDouble(extractQueueLast());
if (!pathOpened) {
beginPath(serviceID);
pathOpened = true;
}
lineTo(serviceID, x, y);
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " + nfe);
nfe.printStackTrace(System.out);
}
break;
case COMMAND_SETRGBCOLOR:
try {
double r, g, b;
b = Double.parseDouble(extractQueueLast());
g = Double.parseDouble(extractQueueLast());
r = Double.parseDouble(extractQueueLast());
setRGBColor(serviceID, r, g, b);
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " + nfe);
nfe.printStackTrace(System.out);
}
break;
case COMMAND_NEWPATH:
beginPath(serviceID);
pathOpened = true;
break;
case COMMAND_CLOSEPATH:
if (pathOpened) {
closePath(serviceID);
pathOpened = false;
closedPathExists = true;
}
break;
case COMMAND_STROKE:
if (pathOpened) {
closePath(serviceID);
strokePath(serviceID);
pathOpened = false;
} else if (closedPathExists) {
strokePath(serviceID);
closedPathExists = false;
}
break;
case COMMAND_FILL:
if (pathOpened) {
closePath(serviceID);
fillPath(serviceID);
pathOpened = false;
} else if (closedPathExists) {
fillPath(serviceID);
closedPathExists = false;
}
break;
case COMMAND_COLORIMAGE:
if (extractQueueLast().equals("3") &&
extractQueueLast().equals("false")) {
try {
extractQueueLast(); // removing reading procedure
String imageParams = extractQueueLast();
int depth = Integer.parseInt(extractQueueLast());
int height = Integer.parseInt(extractQueueLast());
int width = Integer.parseInt(extractQueueLast());
if (depth == 8) {
int[] imageData = new int[width * height];
for (int j = 0; j < height; j++) {
for (int i = 0; i < width; i++) {
int color = hex2decimal(getNextHex() +
getNextHex() +
getNextHex());
imageData[j * width + i] = color;
}
}
if (scaleWidth < 0 || scaleHeight < 0) {
drawImage(serviceID, translateX, translateY,
width * scaleX, height * scaleY,
imageData, width, height);
} else {
drawImage(serviceID, translateX, translateY,
scaleWidth, scaleHeight,
imageData, width, height);
}
}
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " +
nfe);
nfe.printStackTrace(System.out);
}
}
break;
case COMMAND_TRANSLATE:
try {
translateY = Integer.parseInt(extractQueueLast());
translateX = Integer.parseInt(extractQueueLast());
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " + nfe);
nfe.printStackTrace(System.out);
}
break;
case COMMAND_SCALE:
try {
scaleY = Double.parseDouble(extractQueueLast());
scaleX = Double.parseDouble(extractQueueLast());
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " + nfe);
nfe.printStackTrace(System.out);
}
break;
case COMMAND_ARC:
try {
double x, y, r, a, b;
b = Double.parseDouble(extractQueueLast());
a = Double.parseDouble(extractQueueLast());
r = Double.parseDouble(extractQueueLast());
y = Double.parseDouble(extractQueueLast());
x = Double.parseDouble(extractQueueLast());
if (!pathOpened) {
beginPath(serviceID);
pathOpened = true;
}
drawArc(serviceID, x, y, r, a, b);
} catch (NumberFormatException nfe) {
System.out.println("NumberFormatException occured: " + nfe);
nfe.printStackTrace(System.out);
}
break;
case COMMAND_SHOW:
String text = extractQueueLast();
drawText(serviceID, text);
break;
default:
}
}