javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java
changeset 47 f40128debb5d
parent 26 dc7c549001d5
child 48 e0d6e9bd3ca7
--- a/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java	Fri Jun 11 13:33:44 2010 +0300
+++ b/javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java	Wed Jun 23 18:07:10 2010 +0300
@@ -26,533 +26,533 @@
  */
 public final class JavaCommandBuffer {
 
-	// All collected drawing operations and their parameters
-	private int[] intParams;
-	private int intCount;
-	private StringBuffer strParams;
+    // All collected drawing operations and their parameters
+    private int[] intParams;
+    private int intCount;
+    private StringBuffer strParams;
 
-	// Holder for images
-	private Vector images;
+    // Holder for images
+    private Vector images;
 
-	// holder for rgbData
-	private Vector rgbData;
+    // holder for rgbData
+    private Vector rgbData;
 
-	// This flag is indicates if this buffer is bound by some GraphicsContext
-	private boolean bound;
+    // This flag is indicates if this buffer is bound by some GraphicsContext
+    private boolean bound;
 
     // This flag indicates if this buffer is empty or not
-	private boolean containsData;
-	
-	// This flag indicates if this buffer has any draw commands in it
-	private boolean containsPrimitiveData;
+    private boolean containsData;
+    
+    // This flag indicates if this buffer has any draw commands in it
+    private boolean containsPrimitiveData;
 
     // Memory management configuration constants
-	private static final int INT_BUF_GRANULARITY     	 = 10;
-	private static final int INT_BUF_INITIAL_SIZE    	 = 250;
-	private static final int IMAGE_BUF_INITIAL_SIZE 	 = 3;
-	private static final int IMAGE_BUF_GRANULARITY  	 = 2;
-	private static final int STRING_BUFFER_INITIAL_SIZE = 10;
+    private static final int INT_BUF_GRANULARITY         = 10;
+    private static final int INT_BUF_INITIAL_SIZE        = 250;
+    private static final int IMAGE_BUF_INITIAL_SIZE      = 3;
+    private static final int IMAGE_BUF_GRANULARITY       = 2;
+    private static final int STRING_BUFFER_INITIAL_SIZE = 10;
 
-	// Prefixes for different categories of op codes, stored in MSB
-	final static int DRAW_PREFIX = 0;
-	final static int FILL_PREFIX = 1;
-	final static int SET_PREFIX = 2;
-	final static int MISC_PREFIX = 3;
+    // Prefixes for different categories of op codes, stored in MSB
+    final static int DRAW_PREFIX = 0;
+    final static int FILL_PREFIX = 1;
+    final static int SET_PREFIX = 2;
+    final static int MISC_PREFIX = 3;
 
-	// Unique operation codes for all the gc operations that can be buffered.
-	static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);
-	static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);
-	static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);
-	static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);
-	static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);
-	static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);
-	static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);
-	static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);
-	static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);
-	static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);
-	static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);
-	static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);
-	static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);
-	static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);
-	static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);
-	static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);
-	static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);
-	static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);
-	static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);
-	static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);
-	static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);
-	static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);
-	static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);
-	static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);
-	static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);
-	static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);
-	static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);
-	static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);
-	static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);
-	static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);
-	static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);
-	static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);
-	static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);
-	static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);
-	static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);
-	static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);
+    // Unique operation codes for all the gc operations that can be buffered.
+    static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);
+    static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);
+    static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);
+    static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);
+    static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);
+    static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);
+    static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);
+    static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);
+    static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);
+    static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);
+    static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);
+    static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);
+    static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);
+    static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);
+    static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);
+    static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);
+    static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);
+    static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);
+    static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);
+    static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);
+    static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);
+    static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);
+    static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);
+    static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);
+    static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);
+    static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);
+    static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);
+    static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);
+    static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);
+    static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);
+    static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);
+    static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);
+    static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);
+    static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);
+    static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);
+    static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);
 
-	/**
-	 * Constructs empty command buffer with defined buffer sizes.
-	 */
-	public JavaCommandBuffer() {
-		intParams = new int[INT_BUF_INITIAL_SIZE];
-		strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);
-		images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
-		rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
-	}
+    /**
+     * Constructs empty command buffer with defined buffer sizes.
+     */
+    public JavaCommandBuffer() {
+        intParams = new int[INT_BUF_INITIAL_SIZE];
+        strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);
+        images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
+        rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
+    }
 
-	/**
-	 * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing
-	 * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.
-	 * CommandBuffer can be reseted only if it is not bound by any GraphicsContext
-	 * @throws IllegalStateException if this CommandBuffer is bound while calling reset
-	 */
-	public void reset() {
-		if(bound) {
-			throw new IllegalStateException("CommandBuffer is still bound by gc");
-		}
-		intCount = 0;
-		strParams.setLength(0);
+    /**
+     * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing
+     * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.
+     * CommandBuffer can be reseted only if it is not bound by any GraphicsContext
+     * @throws IllegalStateException if this CommandBuffer is bound while calling reset
+     */
+    public void reset() {
+        if(bound) {
+            throw new IllegalStateException("CommandBuffer is still bound by gc");
+        }
+        intCount = 0;
+        strParams.setLength(0);
 
-		Enumeration allImages = images.elements();
-		while(allImages.hasMoreElements()) {
-			Image image = (Image)allImages.nextElement();
-			if(!image.isDisposed()) {
-				image.dispose();
-			}
-		}
-		images.removeAllElements();
-		rgbData.removeAllElements();
-		containsData = false;
-		containsPrimitiveData = false;
-	}
+        Enumeration allImages = images.elements();
+        while(allImages.hasMoreElements()) {
+            Image image = (Image)allImages.nextElement();
+            if(image != null) {
+                image.freeCommandBufferCopy();
+            }
+        }
+        images.removeAllElements();
+        rgbData.removeAllElements();
+        containsData = false;
+        containsPrimitiveData = false;
+    }
 
-	/**
-	 * Checks that does this buffer contain any commands
-	 * @return true if any command has been written to buffer otherwise false
-	 */
-	public boolean containsData() {
-		return containsData;
-	}
-	
-	/**
-	 * Checks that does this buffer contain any draw commands, i.e. any setters etc. 
-	 * that does to cause any pixels to be rendered are ignored 
-	 * @return true if any draw command has been written to buffer otherwise false
-	 */
-	public boolean containsDrawnPrimitives() {
-		return containsPrimitiveData;
-	}
-	
-	/**
-	 * Binds this buffer
-	 */
-	void bind() {
-		bound = true;
-	}
+    /**
+     * Checks that does this buffer contain any commands
+     * @return true if any command has been written to buffer otherwise false
+     */
+    public boolean containsData() {
+        return containsData;
+    }
+    
+    /**
+     * Checks that does this buffer contain any draw commands, i.e. any setters etc. 
+     * that does to cause any pixels to be rendered are ignored 
+     * @return true if any draw command has been written to buffer otherwise false
+     */
+    public boolean containsDrawnPrimitives() {
+        return containsPrimitiveData;
+    }
+    
+    /**
+     * Binds this buffer
+     */
+    void bind() {
+        bound = true;
+    }
 
-	/**
-	 * Provides the binding status of this buffer
-	 * @return true if this buffer has been already bound otherwise false
-	 */
-	boolean isBound() {
-		return bound;
-	}
+    /**
+     * Provides the binding status of this buffer
+     * @return true if this buffer has been already bound otherwise false
+     */
+    boolean isBound() {
+        return bound;
+    }
 
-	/**
-	 * Releases this buffer, i.e. it can be bound by some other GraphicsContext
-	 */
-	void release() {
-		bound = false;
-	}
+    /**
+     * Releases this buffer, i.e. it can be bound by some other GraphicsContext
+     */
+    void release() {
+        bound = false;
+    }
 
-	/**
-	 * Writes an integer to given array.
-	 * @param item The item to be added to the array
-	 * @param array The array where to append given item
-	 * @param elementsUsed The size of slots used in given array
-	 * @param granularity The granularity used if the array needs to be enlarged
-	 * @return Array containing the added item
-	 */
-	private int[] writeToArray(int item, int[] array, int elementsUsed, int granularity) {
-		if( array.length < elementsUsed + 1) {
-			int[] src = array;
-			int[] dst = new int[array.length + granularity];
-			System.arraycopy(src, 0, dst, 0, src.length);
-			array = dst;
-		}
-		array[elementsUsed] = item;
-		return array;
-	}
+    /**
+     * Writes an integer to given array.
+     * @param item The item to be added to the array
+     * @param array The array where to append given item
+     * @param elementsUsed The size of slots used in given array
+     * @param granularity The granularity used if the array needs to be enlarged
+     * @return Array containing the added item
+     */
+    private int[] writeToArray(int item, int[] array, int elementsUsed, int granularity) {
+        if( array.length < elementsUsed + 1) {
+            int[] src = array;
+            int[] dst = new int[array.length + granularity];
+            System.arraycopy(src, 0, dst, 0, src.length);
+            array = dst;
+        }
+        array[elementsUsed] = item;
+        return array;
+    }
 
-	private void writeInt(int param) {
-		intParams = writeToArray(param, intParams, intCount++, INT_BUF_GRANULARITY);
-		containsData = true;
-	}
+    private void writeInt(int param) {
+        intParams = writeToArray(param, intParams, intCount++, INT_BUF_GRANULARITY);
+        containsData = true;
+    }
 
-	private void writeImage(Image image) {
-		images.addElement(image);
-	}
+    private void writeImage(Image image) {
+        images.addElement(image);
+    }
 
-	private void writeStr(String string) {
-    	strParams.append(string);
-	}
+    private void writeStr(String string) {
+        strParams.append(string);
+    }
 
-	private void writeRgb(int[] rgb) {
-		rgbData.addElement(rgb);
-	}
-	private void writeRgb(byte[] rgb) {
-		rgbData.addElement(rgb);
-	}
+    private void writeRgb(int[] rgb) {
+        rgbData.addElement(rgb);
+    }
+    private void writeRgb(byte[] rgb) {
+        rgbData.addElement(rgb);
+    }
 
-	private void writeRgb(short[] rgb) {
-		rgbData.addElement(rgb);
-	}
+    private void writeRgb(short[] rgb) {
+        rgbData.addElement(rgb);
+    }
 
-	private void reportNotSupported() {
-		throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");
-	}
+    private void reportNotSupported() {
+        throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");
+    }
 
-	private void printBufferInfo() {
-		System.out.println("CommandBuffer Info: " +this);
-		System.out.println("intParamCount: " + intCount);
-		System.out.println("intBuffer Size: " + intParams.length);
-		System.out.println("StringBuffer Size: " + strParams.length());
-	}
+    private void printBufferInfo() {
+        System.out.println("CommandBuffer Info: " +this);
+        System.out.println("intParamCount: " + intCount);
+        System.out.println("intBuffer Size: " + intParams.length);
+        System.out.println("StringBuffer Size: " + strParams.length());
+    }
 
-	private void raisePrimitiveFlag() {
-		containsPrimitiveData = true;
-	}
-	
-	int[] intParams() {
-		return intParams;
-	}
+    private void raisePrimitiveFlag() {
+        containsPrimitiveData = true;
+    }
+    
+    int[] intParams() {
+        return intParams;
+    }
 
-	int intParamCount() {
+    int intParamCount() {
         return intCount;
-	}
+    }
 
-	Vector rgbParams() {
-		return rgbData;
-	}
+    Vector rgbParams() {
+        return rgbData;
+    }
 
-	Vector images() {
-		return images;
-	}
+    Vector images() {
+        return images;
+    }
 
-	String strParams() {
-		return strParams.toString();
-	}
+    String strParams() {
+        return strParams.toString();
+    }
 
-	void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
-		writeInt(OP_DRAWARC);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(startAngle);
-		writeInt(arcAngle);
-		raisePrimitiveFlag();
-	}
+    void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
+        writeInt(OP_DRAWARC);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(startAngle);
+        writeInt(arcAngle);
+        raisePrimitiveFlag();
+    }
 
-	void drawFocus (int x, int y, int width, int height) {
-		writeInt(OP_DRAWFOCUS);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void drawFocus (int x, int y, int width, int height) {
+        writeInt(OP_DRAWFOCUS);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	// must be called from UI thread as images cannot be creates outside that
-	void drawImage(Image image, int x, int y) {
-		writeInt(OP_DRAWIMAGE1);
-		writeInt(x);
-		writeInt(y);
-		// creating copy of image here uses implicit data sharing,
-		// thus only a shallow copy is made
-		writeImage(new Image(image));
-		raisePrimitiveFlag();
-	}
+    // must be called from UI thread as images cannot be creates outside that
+    void drawImage(Image image, int x, int y) {
+        writeInt(OP_DRAWIMAGE1);
+        writeInt(x);
+        writeInt(y);
+        // creating copy of image here uses implicit data sharing,
+        // thus only a shallow copy is made
+        writeImage(image.getCommandBufferCopy());
+        raisePrimitiveFlag();
+    }
 
-	// must be called from UI thread as images cannot be creates outside that
-	void drawImage(Image image, int tx, int ty, int tw, int th,int sx, int sy, int sw, int sh, int manipulation) {
-		writeInt(OP_DRAWIMAGE2);
-		writeInt(tx);
-		writeInt(ty);
-		writeInt(tw);
-		writeInt(th);
-		writeInt(sx);
-		writeInt(sy);
-		writeInt(sw);
-		writeInt(sh);
-		writeInt(manipulation);
-		// creating copy of image here uses implicit data sharing,
-		// thus only a shallow copy is made
-		writeImage(new Image(image));
-		raisePrimitiveFlag();
-	}
+    // must be called from UI thread as images cannot be creates outside that
+    void drawImage(Image image, int tx, int ty, int tw, int th,int sx, int sy, int sw, int sh, int manipulation) {
+        writeInt(OP_DRAWIMAGE2);
+        writeInt(tx);
+        writeInt(ty);
+        writeInt(tw);
+        writeInt(th);
+        writeInt(sx);
+        writeInt(sy);
+        writeInt(sw);
+        writeInt(sh);
+        writeInt(manipulation);
+        // creating copy of image here uses implicit data sharing,
+        // thus only a shallow copy is made
+        writeImage(image.getCommandBufferCopy());
+        raisePrimitiveFlag();
+    }
 
-	void drawLine (int x1, int y1, int x2, int y2) {
-		writeInt(OP_DRAWLINE);
-		writeInt(x1);
-		writeInt(y1);
-		writeInt(x2);
-		writeInt(y2);
-		raisePrimitiveFlag();
-	}
+    void drawLine (int x1, int y1, int x2, int y2) {
+        writeInt(OP_DRAWLINE);
+        writeInt(x1);
+        writeInt(y1);
+        writeInt(x2);
+        writeInt(y2);
+        raisePrimitiveFlag();
+    }
 
-	void drawEllipse (int x, int y, int width, int height) {
-		writeInt(OP_DRAWELLIPSE);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void drawEllipse (int x, int y, int width, int height) {
+        writeInt(OP_DRAWELLIPSE);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void drawPoint (int x, int y) {
-		writeInt(OP_DRAWPOINT);
-		writeInt(x);
-		writeInt(y);
-		raisePrimitiveFlag();
-	}
+    void drawPoint (int x, int y) {
+        writeInt(OP_DRAWPOINT);
+        writeInt(x);
+        writeInt(y);
+        raisePrimitiveFlag();
+    }
 
-	void drawPolygon(int[] pointArray) {
-		writeInt(OP_DRAWPOLYGON);
-		writeInt(pointArray.length);
-		for(int i = 0; i < pointArray.length; ++i) {
-			writeInt(pointArray[i]);
-		}
-		raisePrimitiveFlag();
-	}
+    void drawPolygon(int[] pointArray) {
+        writeInt(OP_DRAWPOLYGON);
+        writeInt(pointArray.length);
+        for(int i = 0; i < pointArray.length; ++i) {
+            writeInt(pointArray[i]);
+        }
+        raisePrimitiveFlag();
+    }
 
-	void drawPolyline(int[] pointArray) {
-		writeInt(OP_DRAWPOLYLINE);
-		writeInt(pointArray.length);
-		for(int i = 0; i < pointArray.length; ++i) {
-			writeInt(pointArray[i]);
-		}
-		raisePrimitiveFlag();
-	}
+    void drawPolyline(int[] pointArray) {
+        writeInt(OP_DRAWPOLYLINE);
+        writeInt(pointArray.length);
+        for(int i = 0; i < pointArray.length; ++i) {
+            writeInt(pointArray[i]);
+        }
+        raisePrimitiveFlag();
+    }
 
-	void drawRect (int x, int y, int width, int height) {
-		writeInt(OP_DRAWRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void drawRect (int x, int y, int width, int height) {
+        writeInt(OP_DRAWRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation) {
-		writeInt(OP_DRAWRGB_INT);
-		writeInt(offset);
-		writeInt(scanlength);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(processAlpha? 1 : 0);
-		writeInt(manipulation);
-		writeRgb(rgbData);
-		raisePrimitiveFlag();
-	}
+    void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation) {
+        writeInt(OP_DRAWRGB_INT);
+        writeInt(offset);
+        writeInt(scanlength);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(processAlpha? 1 : 0);
+        writeInt(manipulation);
+        writeRgb(rgbData);
+        raisePrimitiveFlag();
+    }
 
-	void drawRGB(byte[] rgbData, byte[] transparencyMask,int offset, int scanlength, int x, int y, int width, int height, int manipulation, int format) {
-		writeInt(OP_DRAWRGB_BYTE);
-		writeInt(offset);
-		writeInt(scanlength);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(manipulation);
-		writeInt(format);
-		writeRgb(rgbData);
-		writeRgb(transparencyMask);
-		raisePrimitiveFlag();
-	}
+    void drawRGB(byte[] rgbData, byte[] transparencyMask,int offset, int scanlength, int x, int y, int width, int height, int manipulation, int format) {
+        writeInt(OP_DRAWRGB_BYTE);
+        writeInt(offset);
+        writeInt(scanlength);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(manipulation);
+        writeInt(format);
+        writeRgb(rgbData);
+        writeRgb(transparencyMask);
+        raisePrimitiveFlag();
+    }
 
-	void drawRGB(short[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation, int format) {
-		writeInt(OP_DRAWRGB_SHORT);
-		writeInt(offset);
-		writeInt(scanlength);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(processAlpha? 1 : 0);
-		writeInt(manipulation);
-		writeInt(format);
-		writeRgb(rgbData);
-		raisePrimitiveFlag();
-	}
+    void drawRGB(short[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation, int format) {
+        writeInt(OP_DRAWRGB_SHORT);
+        writeInt(offset);
+        writeInt(scanlength);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(processAlpha? 1 : 0);
+        writeInt(manipulation);
+        writeInt(format);
+        writeRgb(rgbData);
+        raisePrimitiveFlag();
+    }
 
-	void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) {
-		writeInt(OP_DRAWROUNDRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(arcWidth);
-		writeInt(arcHeight);
-		raisePrimitiveFlag();
-	}
+    void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) {
+        writeInt(OP_DRAWROUNDRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(arcWidth);
+        writeInt(arcHeight);
+        raisePrimitiveFlag();
+    }
 
-	void drawString(String string, int x, int y, int width, int height, int alignments, int flags, boolean isTransparent) {
-		writeInt(OP_DRAWSTRING);
-		writeStr(string);
-		writeInt(string.length());
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(alignments);
-		writeInt(flags);
-		writeInt(isTransparent? 1 : 0);
-		raisePrimitiveFlag();
-	}
+    void drawString(String string, int x, int y, int width, int height, int alignments, int flags, boolean isTransparent) {
+        writeInt(OP_DRAWSTRING);
+        writeStr(string);
+        writeInt(string.length());
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(alignments);
+        writeInt(flags);
+        writeInt(isTransparent? 1 : 0);
+        raisePrimitiveFlag();
+    }
 
-	void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
-		writeInt(OP_FILLARC);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(startAngle);
-		writeInt(arcAngle);
-		raisePrimitiveFlag();
-	}
+    void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
+        writeInt(OP_FILLARC);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(startAngle);
+        writeInt(arcAngle);
+        raisePrimitiveFlag();
+    }
 
-	void fillGradientRect(int x, int y, int width, int height, boolean vertical, boolean swapColors) {
-		writeInt(OP_FILLGRADIENTRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(vertical ? 1 : 0);
-		writeInt(swapColors ? 1 : 0);
-		raisePrimitiveFlag();
-	}
+    void fillGradientRect(int x, int y, int width, int height, boolean vertical, boolean swapColors) {
+        writeInt(OP_FILLGRADIENTRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(vertical ? 1 : 0);
+        writeInt(swapColors ? 1 : 0);
+        raisePrimitiveFlag();
+    }
 
-	void fillEllipse (int x, int y, int width, int height) {
-		writeInt(OP_FILLELLIPSE);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void fillEllipse (int x, int y, int width, int height) {
+        writeInt(OP_FILLELLIPSE);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void fillPolygon (int[] pointArray) {
-		writeInt(OP_FILLPOLYGON);
-		writeInt(pointArray.length);
-		for(int i = 0; i < pointArray.length; ++i) {
-			writeInt(pointArray[i]);
-		}
-		raisePrimitiveFlag();
-	}
+    void fillPolygon (int[] pointArray) {
+        writeInt(OP_FILLPOLYGON);
+        writeInt(pointArray.length);
+        for(int i = 0; i < pointArray.length; ++i) {
+            writeInt(pointArray[i]);
+        }
+        raisePrimitiveFlag();
+    }
 
-	void fillRect (int x, int y, int width, int height) {
-		writeInt(OP_FILLRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		raisePrimitiveFlag();
-	}
+    void fillRect (int x, int y, int width, int height) {
+        writeInt(OP_FILLRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        raisePrimitiveFlag();
+    }
 
-	void fillRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
-		writeInt(OP_FILLROUNDRECT);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(arcWidth);
-		writeInt(arcHeight);
-		raisePrimitiveFlag();
-	}
+    void fillRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
+        writeInt(OP_FILLROUNDRECT);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(arcWidth);
+        writeInt(arcHeight);
+        raisePrimitiveFlag();
+    }
 
-	public void setBackgroundAlpha(int alpha) {
-		writeInt(OP_SETBACKGROUNDALPHA);
-		writeInt(alpha);
-	}
+    public void setBackgroundAlpha(int alpha) {
+        writeInt(OP_SETBACKGROUNDALPHA);
+        writeInt(alpha);
+    }
 
-	void setBackgroundColor(int argb, boolean updateAlpha) {
-		writeInt(OP_SETBACKGROUNDCOLOR);
-		writeInt(argb);
-		writeInt(updateAlpha? 1 : 0);
-	}
+    void setBackgroundColor(int argb, boolean updateAlpha) {
+        writeInt(OP_SETBACKGROUNDCOLOR);
+        writeInt(argb);
+        writeInt(updateAlpha? 1 : 0);
+    }
 
-	void setBlendingMode(int mode) {
-		writeInt(OP_SETBLENDINGMODE);
-		writeInt(mode);
-	}
+    void setBlendingMode(int mode) {
+        writeInt(OP_SETBLENDINGMODE);
+        writeInt(mode);
+    }
 
-	void setClip(int x, int y, int width, int height, boolean intersects) {
-		writeInt(OP_SETCLIP);
-		writeInt(x);
-		writeInt(y);
-		writeInt(width);
-		writeInt(height);
-		writeInt(intersects? 1 : 0 );
-	}
+    void setClip(int x, int y, int width, int height, boolean intersects) {
+        writeInt(OP_SETCLIP);
+        writeInt(x);
+        writeInt(y);
+        writeInt(width);
+        writeInt(height);
+        writeInt(intersects? 1 : 0 );
+    }
 
-	void cancelClipping () {
-		writeInt(OP_CANCELCLIPPING);
-	}
+    void cancelClipping () {
+        writeInt(OP_CANCELCLIPPING);
+    }
 
-	void setFont(int fontHandle) {
-		writeInt(OP_SETFONT);
-		writeInt(fontHandle);
-	}
+    void setFont(int fontHandle) {
+        writeInt(OP_SETFONT);
+        writeInt(fontHandle);
+    }
 
-	void setForegroundAlpha(int alpha) {
-		writeInt(OP_SETFOREGROUNDALPHA);
-		writeInt(alpha);
-	}
+    void setForegroundAlpha(int alpha) {
+        writeInt(OP_SETFOREGROUNDALPHA);
+        writeInt(alpha);
+    }
 
-	void setForegroundColor(int argb, boolean updateAlpha) {
-		writeInt(OP_SETFOREGROUNDCOLOR);
-		writeInt(argb);
-		writeInt(updateAlpha? 1 : 0);
-	}
+    void setForegroundColor(int argb, boolean updateAlpha) {
+        writeInt(OP_SETFOREGROUNDCOLOR);
+        writeInt(argb);
+        writeInt(updateAlpha? 1 : 0);
+    }
 
-	void setStrokeStyle(int style) {
-		writeInt(OP_SETSTROKESTYLE);
-		writeInt(style);
-	}
+    void setStrokeStyle(int style) {
+        writeInt(OP_SETSTROKESTYLE);
+        writeInt(style);
+    }
 
-	void setStrokeWidth(int width) {
-		writeInt(OP_SETSTROKEWIDTH);
-		writeInt(width);
-	}
+    void setStrokeWidth(int width) {
+        writeInt(OP_SETSTROKEWIDTH);
+        writeInt(width);
+    }
 
-	void translate(int x, int y) {
-		writeInt(OP_TRANSLATE);
-		writeInt(x);
-		writeInt(y);
-	}
+    void translate(int x, int y) {
+        writeInt(OP_TRANSLATE);
+        writeInt(x);
+        writeInt(y);
+    }
 
-	void scale(int x, int y) {
-		writeInt(OP_SCALE);
-		writeInt(x);
-		writeInt(y);
-	}
+    void scale(int x, int y) {
+        writeInt(OP_SCALE);
+        writeInt(x);
+        writeInt(y);
+    }
 
-	void resetTransform() {
-		writeInt(OP_RESETTRANSFORM);
-	}
+    void resetTransform() {
+        writeInt(OP_RESETTRANSFORM);
+    }
 
-	void copyArea(Image image, int x, int y) {
-		writeInt(OP_COPYAREA1);
+    void copyArea(Image image, int x, int y) {
+        writeInt(OP_COPYAREA1);
         writeInt(x);
         writeInt(y);
         // TODO does this need flushing on the image
@@ -560,7 +560,7 @@
         raisePrimitiveFlag();
     }
 
-	void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
+    void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
         writeInt(OP_COPYAREA2);
         writeInt(srcX);
         writeInt(srcY);
@@ -572,81 +572,81 @@
         raisePrimitiveFlag();
     }
 
-	// Unsupported operations
-	int getAdvancedCharacterWidth(char ch, boolean isAdvanced) {
-		reportNotSupported();
-		return 0;
-	}
+    // Unsupported operations
+    int getAdvancedCharacterWidth(char ch, boolean isAdvanced) {
+        reportNotSupported();
+        return 0;
+    }
 
-	void getFontMetricsData(int[] data, int fontHandle) {
-		reportNotSupported();
-	}
+    void getFontMetricsData(int[] data, int fontHandle) {
+        reportNotSupported();
+    }
 
-	int getBackgroundAlpha() {
-		reportNotSupported();
-		return 0;
-	}
+    int getBackgroundAlpha() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getBackgroundColor() {
-		reportNotSupported();
-		return 0;
-	}
+    int getBackgroundColor() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getBlendingMode() {
-		reportNotSupported();
-		return 0;
-	}
+    int getBlendingMode() {
+        reportNotSupported();
+        return 0;
+    }
 
-	void getClip(int[] clip) {
-		reportNotSupported();
-	}
+    void getClip(int[] clip) {
+        reportNotSupported();
+    }
 
-	int getForegroundAlpha() {
-		reportNotSupported();
-		return 0;
-	}
+    int getForegroundAlpha() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getForegroundColor() {
-		reportNotSupported();
-		return 0;
-	}
+    int getForegroundColor() {
+        reportNotSupported();
+        return 0;
+    }
 
-	void getTextBoundingBox(int[] boundingBox, String string, int alignments, int flags, int rectX, int rectY, int rectWidth, int rectHeight) {
-		reportNotSupported();
-	}
+    void getTextBoundingBox(int[] boundingBox, String string, int alignments, int flags, int rectX, int rectY, int rectWidth, int rectHeight) {
+        reportNotSupported();
+    }
 
-	int getStrokeWidth() {
-		reportNotSupported();
-		return 0;
-	}
+    int getStrokeWidth() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getStrokeStyle() {
-		reportNotSupported();
-		return 0;
-	}
+    int getStrokeStyle() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getTranslateX() {
-		reportNotSupported();
-		return 0;
-	}
+    int getTranslateX() {
+        reportNotSupported();
+        return 0;
+    }
 
-	int getTranslateY() {
-		reportNotSupported();
-		return 0;
-	}
+    int getTranslateY() {
+        reportNotSupported();
+        return 0;
+    }
 
-	boolean hasClipping() {
-		reportNotSupported();
-		return false;
-	}
+    boolean hasClipping() {
+        reportNotSupported();
+        return false;
+    }
 
-	void saveSettings() {
-		reportNotSupported();
-	}
+    void saveSettings() {
+        reportNotSupported();
+    }
 
-	void restoreSettings() {
-		reportNotSupported();
-	}
+    void restoreSettings() {
+        reportNotSupported();
+    }