// Copyright 2001, FreeHEP. package org.freehep.postscript; /** * Device Dependent Graphics Operators for PostScript Processor * * @author Mark Donszelmann * @version $Id: DeviceOperator.java 8958 2006-09-12 23:37:43Z duns $ */ public class DeviceOperator extends PSOperator { // FIXME: most of these should be part of GSTate // FIXME: all are fake and ignored, just implemented as dummies PSDictionary halftone = new PSDictionary(); { halftone.put("HalftoneType", 1); halftone.put("Frequency", 60); halftone.put("Angle", 0); halftone.put("SpotFunction", new PSPackedArray(new PSObject[0])); } boolean overprint = true; public static Class[] operators = { SetHalftone.class, CurrentHalftone.class, SetScreen.class, CurrentScreen.class, SetColorScreen.class, CurrentColorScreen.class, SetTransfer.class, CurrentTransfer.class, SetColorTransfer.class, CurrentColorTransfer.class, SetBlackGeneration.class, CurrentBlackGeneration.class, SetUnderColorRemoval.class, CurrentUnderColorRemoval.class, SetColorRendering.class, CurrentColorRendering.class, SetFlat.class, CurrentFlat.class, SetOverprint.class, CurrentOverprint.class, SetSmoothness.class, CurrentSmoothness.class }; public boolean execute(OperandStack os) { throw new RuntimeException("Cannot execute class: "+getClass()); } } class SetHalftone extends DeviceOperator { { operandTypes = new Class[] { PSDictionary.class }; } public boolean execute(OperandStack os) { // FIXME: ignored os.pop(); return true; } } class CurrentHalftone extends DeviceOperator { public boolean execute(OperandStack os) { os.push(halftone); return true; } } class SetScreen extends DeviceOperator { // FIXME: ignored public boolean execute(OperandStack os) { if (os.checkType(PSNumber.class, PSNumber.class, PSPackedArray.class)) { os.pop(); os.pop(); os.pop(); } else if (os.checkType(PSNumber.class, PSNumber.class, PSDictionary.class)) { os.pop(); os.pop(); os.pop(); } else { error(os, new TypeCheck()); } return true; } } class CurrentScreen extends DeviceOperator { public boolean execute(OperandStack os) { os.push(halftone.get("Frequency")); os.push(halftone.get("Angle")); os.push(halftone); return true; } } class SetColorScreen extends DeviceOperator { // FIXME public boolean execute(OperandStack os) { error(os, new Unimplemented()); return true; } } class CurrentColorScreen extends DeviceOperator { // FIXME public boolean execute(OperandStack os) { os.push(60); os.push(0); os.push(halftone); os.push(60); os.push(0); os.push(halftone); os.push(60); os.push(0); os.push(halftone); os.push(60); os.push(0); os.push(halftone); return true; } } class SetTransfer extends DeviceOperator { { operandTypes = new Class[] {PSPackedArray.class}; } public boolean execute(OperandStack os) { PSPackedArray p = os.popPackedArray(); os.gstate().setTransfer(p); return true; } } class CurrentTransfer extends DeviceOperator { public boolean execute(OperandStack os) { os.push(os.gstate().transfer()); return true; } } class SetColorTransfer extends DeviceOperator { { operandTypes = new Class[] {PSPackedArray.class, PSPackedArray.class, PSPackedArray.class, PSPackedArray.class}; } // FIXME public boolean execute(OperandStack os) { os.pop(); os.pop(); os.pop(); PSPackedArray p = os.popPackedArray(); os.gstate().setTransfer(p); return true; } } class CurrentColorTransfer extends DeviceOperator { // FIXME public boolean execute(OperandStack os) { os.push(os.gstate().transfer()); os.push(os.gstate().transfer()); os.push(os.gstate().transfer()); os.push(os.gstate().transfer()); return true; } } class SetBlackGeneration extends DeviceOperator { { operandTypes = new Class[] {PSPackedArray.class}; } public boolean execute(OperandStack os) { PSPackedArray p = os.popPackedArray(); os.gstate().setBlackGeneration(p); return true; } } class CurrentBlackGeneration extends DeviceOperator { public boolean execute(OperandStack os) { os.push(os.gstate().blackGeneration()); return true; } } class SetUnderColorRemoval extends DeviceOperator { { operandTypes = new Class[] {PSPackedArray.class}; } public boolean execute(OperandStack os) { PSPackedArray p = os.popPackedArray(); os.gstate().setUnderColorRemoval(p); return true; } } class CurrentUnderColorRemoval extends DeviceOperator { public boolean execute(OperandStack os) { os.push(os.gstate().underColorRemoval()); return true; } } class SetColorRendering extends DeviceOperator { { operandTypes = new Class[] {PSDictionary.class}; } public boolean execute(OperandStack os) { // FIXME os.pop(); return true; } } class CurrentColorRendering extends DeviceOperator { // FIXME public boolean execute(OperandStack os) { error(os, new Unimplemented()); return true; } } class SetFlat extends DeviceOperator { { operandTypes = new Class[] {PSNumber.class}; } public boolean execute(OperandStack os) { PSNumber n = os.popNumber(); os.gstate().setFlat(n.getDouble()); return true; } } class CurrentFlat extends DeviceOperator { public boolean execute(OperandStack os) { os.push(os.gstate().flat()); return true; } } class SetOverprint extends DeviceOperator { { operandTypes = new Class[] {PSBoolean.class}; } // FIXME public boolean execute(OperandStack os) { overprint = os.popBoolean().getValue(); return true; } } class CurrentOverprint extends DeviceOperator { // FIXME public boolean execute(OperandStack os) { os.push(overprint); return true; } } class SetSmoothness extends DeviceOperator { { operandTypes = new Class[] {PSNumber.class}; } // Level 3 public boolean execute(OperandStack os) { error(os, new Unimplemented()); return true; } } class CurrentSmoothness extends DeviceOperator { // Level 3 public boolean execute(OperandStack os) { error(os, new Unimplemented()); return true; } }