javauis/eswt_qt/org.eclipse.swt/Eclipse_SWT_PI/qt/org/eclipse/swt/internal/qt/graphics/JavaCommandBuffer.java
changeset 21 2a9601315dfc
child 26 dc7c549001d5
equal deleted inserted replaced
18:e8e63152f320 21:2a9601315dfc
       
     1 /*******************************************************************************
       
     2  * Copyright (c) 2008 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved. This program and the accompanying materials
       
     4  * are made available under the terms of the Eclipse Public License v1.0
       
     5  * which accompanies this distribution, and is available at
       
     6  * http://www.eclipse.org/legal/epl-v10.html
       
     7  *
       
     8  * Contributors:
       
     9  *     Nokia Corporation - initial implementation
       
    10  *******************************************************************************/
       
    11 package org.eclipse.swt.internal.qt.graphics;
       
    12 
       
    13 import java.util.Vector;
       
    14 import java.util.Enumeration;
       
    15 
       
    16 /**
       
    17  * This class implements a command buffer that can be bound by GraphicsContext
       
    18  * to collect the drawing operations. Contents of the command buffer can be replayed to
       
    19  * GraphicsContext target with GraphicsContext.render() method.
       
    20  *
       
    21  * When JavaCommandBuffer is set as the target of GraphicsContext some of the methods
       
    22  * provided by GraphicsContext are not supported, e.g. getters, since the JavaCommandBuffer
       
    23  * does not have a real rendering target from which to query related data. To find out what is
       
    24  * supported see the methods of this class. In principal GraphicsContext supports all draw and set operations,
       
    25  * when JavaCommandBuffer is set as rendering target.
       
    26  */
       
    27 public final class JavaCommandBuffer {
       
    28 
       
    29 	// All collected drawing operations and their parameters
       
    30 	private int[] intParams;
       
    31 	private int intCount;
       
    32 	private StringBuffer strParams;
       
    33 
       
    34 	// Holder for images
       
    35 	private Vector images;
       
    36 
       
    37 	// holder for rgbData
       
    38 	private Vector rgbData;
       
    39 
       
    40 	// This flag is indicates if this buffer is bound by some GraphicsContext
       
    41 	private boolean bound;
       
    42 
       
    43     // This flag indicates if this buffer is empty or not
       
    44 	private boolean containsData;
       
    45 
       
    46     // Memory management configuration constants
       
    47 	private static final int INT_BUF_GRANULARITY     	 = 10;
       
    48 	private static final int INT_BUF_INITIAL_SIZE    	 = 250;
       
    49 	private static final int IMAGE_BUF_INITIAL_SIZE 	 = 3;
       
    50 	private static final int IMAGE_BUF_GRANULARITY  	 = 2;
       
    51 	private static final int STRING_BUFFER_INITIAL_SIZE = 10;
       
    52 
       
    53 	// Prefixes for different categories of op codes, stored in MSB
       
    54 	final static int DRAW_PREFIX = 0;
       
    55 	final static int FILL_PREFIX = 1;
       
    56 	final static int SET_PREFIX = 2;
       
    57 	final static int MISC_PREFIX = 3;
       
    58 
       
    59 	// Unique operation codes for all the gc operations that can be buffered.
       
    60 	static final int OP_DRAWARC            = ((DRAW_PREFIX << 24) | 1);
       
    61 	static final int OP_DRAWFOCUS          = ((DRAW_PREFIX << 24) | 2);
       
    62 	static final int OP_DRAWIMAGE1         = ((DRAW_PREFIX << 24) | 3);
       
    63 	static final int OP_DRAWIMAGE2         = ((DRAW_PREFIX << 24) | 4);
       
    64 	static final int OP_DRAWLINE           = ((DRAW_PREFIX << 24) | 5);
       
    65 	static final int OP_DRAWELLIPSE        = ((DRAW_PREFIX << 24) | 6);
       
    66 	static final int OP_DRAWPOINT          = ((DRAW_PREFIX << 24) | 7);
       
    67 	static final int OP_DRAWPOLYGON        = ((DRAW_PREFIX << 24) | 8);
       
    68 	static final int OP_DRAWPOLYLINE       = ((DRAW_PREFIX << 24) | 9);
       
    69 	static final int OP_DRAWRECT           = ((DRAW_PREFIX << 24) | 10);
       
    70 	static final int OP_DRAWRGB_INT        = ((DRAW_PREFIX << 24) | 11);
       
    71 	static final int OP_DRAWRGB_BYTE       = ((DRAW_PREFIX << 24) | 12);
       
    72 	static final int OP_DRAWRGB_SHORT      = ((DRAW_PREFIX << 24) | 13);
       
    73 	static final int OP_DRAWROUNDRECT      = ((DRAW_PREFIX << 24) | 14);
       
    74 	static final int OP_DRAWSTRING         = ((DRAW_PREFIX << 24) | 15);
       
    75 	static final int OP_FILLARC            = ((FILL_PREFIX << 24) | 16);
       
    76 	static final int OP_FILLGRADIENTRECT   = ((FILL_PREFIX << 24) | 17);
       
    77 	static final int OP_FILLELLIPSE        = ((FILL_PREFIX << 24) | 18);
       
    78 	static final int OP_FILLPOLYGON        = ((FILL_PREFIX << 24) | 19);
       
    79 	static final int OP_FILLRECT           = ((FILL_PREFIX << 24) | 20);
       
    80 	static final int OP_FILLROUNDRECT      = ((FILL_PREFIX << 24) | 21);
       
    81 	static final int OP_SETBACKGROUNDALPHA = ((SET_PREFIX << 24) | 22);
       
    82 	static final int OP_SETBACKGROUNDCOLOR = ((SET_PREFIX << 24) | 23);
       
    83 	static final int OP_SETBLENDINGMODE    = ((SET_PREFIX << 24) | 24);
       
    84 	static final int OP_SETCLIP            = ((SET_PREFIX << 24) | 25);
       
    85 	static final int OP_CANCELCLIPPING     = ((SET_PREFIX << 24) | 26);
       
    86 	static final int OP_SETFONT            = ((SET_PREFIX << 24) | 27);
       
    87 	static final int OP_SETFOREGROUNDALPHA = ((SET_PREFIX << 24) | 28);
       
    88 	static final int OP_SETFOREGROUNDCOLOR = ((SET_PREFIX << 24) | 29);
       
    89 	static final int OP_SETSTROKESTYLE     = ((SET_PREFIX << 24) | 30);
       
    90 	static final int OP_SETSTROKEWIDTH     = ((SET_PREFIX << 24) | 31);
       
    91 	static final int OP_TRANSLATE          = ((MISC_PREFIX << 24) | 32);
       
    92 	static final int OP_SCALE              = ((MISC_PREFIX << 24) | 33);
       
    93 	static final int OP_RESETTRANSFORM     = ((MISC_PREFIX << 24) | 34);
       
    94 	static final int OP_COPYAREA1          = ((MISC_PREFIX << 24) | 35);
       
    95 	static final int OP_COPYAREA2          = ((MISC_PREFIX << 24) | 36);
       
    96 
       
    97 	/**
       
    98 	 * Constructs empty command buffer with defined buffer sizes.
       
    99 	 */
       
   100 	public JavaCommandBuffer() {
       
   101 		intParams = new int[INT_BUF_INITIAL_SIZE];
       
   102 		strParams = new StringBuffer(STRING_BUFFER_INITIAL_SIZE);
       
   103 		images = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
       
   104 		rgbData = new Vector(IMAGE_BUF_INITIAL_SIZE, IMAGE_BUF_GRANULARITY);
       
   105 	}
       
   106 
       
   107 	/**
       
   108 	 * Resets the buffer, i.e. removes all recorded commands and related data. The integer array containing
       
   109 	 * the actual operation codes is not deleted, only the index pointer is rested, thus the memory consumption of that is not freed.
       
   110 	 * CommandBuffer can be reseted only if it is not bound by any GraphicsContext
       
   111 	 * @throws IllegalStateException if this CommandBuffer is bound while calling reset
       
   112 	 */
       
   113 	public void reset() {
       
   114 		if(bound) {
       
   115 			throw new IllegalStateException("CommandBuffer is still bound by gc");
       
   116 		}
       
   117 		intCount = 0;
       
   118 		strParams.setLength(0);
       
   119 
       
   120 		Enumeration allImages = images.elements();
       
   121 		while(allImages.hasMoreElements()) {
       
   122 			Image image = (Image)allImages.nextElement();
       
   123 			if(!image.isDisposed()) {
       
   124 				image.dispose();
       
   125 			}
       
   126 		}
       
   127 		images.removeAllElements();
       
   128 		rgbData.removeAllElements();
       
   129 		containsData = false;
       
   130 	}
       
   131 
       
   132 	/**
       
   133 	 * Binds this buffer
       
   134 	 */
       
   135 	void bind() {
       
   136 		bound = true;
       
   137 	}
       
   138 
       
   139 	/**
       
   140 	 * Checks that does this buffer contain any commands
       
   141 	 * @return
       
   142 	 */
       
   143 	boolean containsData() {
       
   144 		return containsData;
       
   145 	}
       
   146 
       
   147 	/**
       
   148 	 * Provides the binding status of this buffer
       
   149 	 * @return true if this buffer has been already bound otherwise false
       
   150 	 */
       
   151 	boolean isBound() {
       
   152 		return bound;
       
   153 	}
       
   154 
       
   155 	/**
       
   156 	 * Releases this buffer, i.e. it can be bound by some other GraphicsContext
       
   157 	 */
       
   158 	void release() {
       
   159 		bound = false;
       
   160 	}
       
   161 
       
   162 	/**
       
   163 	 * Writes an integer to given array.
       
   164 	 * @param item The item to be added to the array
       
   165 	 * @param array The array where to append given item
       
   166 	 * @param elementsUsed The size of slots used in given array
       
   167 	 * @param granularity The granularity used if the array needs to be enlarged
       
   168 	 * @return Array containing the added item
       
   169 	 */
       
   170 	private int[] writeToArray(int item, int[] array, int elementsUsed, int granularity) {
       
   171 		if( array.length < elementsUsed + 1) {
       
   172 			int[] src = array;
       
   173 			int[] dst = new int[array.length + granularity];
       
   174 			System.arraycopy(src, 0, dst, 0, src.length);
       
   175 			array = dst;
       
   176 		}
       
   177 		array[elementsUsed] = item;
       
   178 		return array;
       
   179 	}
       
   180 
       
   181 	private void writeInt(int param) {
       
   182 		intParams = writeToArray(param, intParams, intCount++, INT_BUF_GRANULARITY);
       
   183 		containsData = true;
       
   184 	}
       
   185 
       
   186 	private void writeImage(Image image) {
       
   187 		images.addElement(image);
       
   188 	}
       
   189 
       
   190 	private void writeStr(String string) {
       
   191     	strParams.append(string);
       
   192 	}
       
   193 
       
   194 	private void writeRgb(int[] rgb) {
       
   195 		rgbData.addElement(rgb);
       
   196 	}
       
   197 	private void writeRgb(byte[] rgb) {
       
   198 		rgbData.addElement(rgb);
       
   199 	}
       
   200 
       
   201 	private void writeRgb(short[] rgb) {
       
   202 		rgbData.addElement(rgb);
       
   203 	}
       
   204 
       
   205 	private void reportNotSupported() {
       
   206 		throw new RuntimeException("Intenal: Operation not supported with JavaCommandBuffer");
       
   207 	}
       
   208 
       
   209 	private void printBufferInfo() {
       
   210 		System.out.println("CommandBuffer Info: " +this);
       
   211 		System.out.println("intParamCount: " + intCount);
       
   212 		System.out.println("intBuffer Size: " + intParams.length);
       
   213 		System.out.println("StringBuffer Size: " + strParams.length());
       
   214 	}
       
   215 
       
   216 	int[] intParams() {
       
   217 		return intParams;
       
   218 	}
       
   219 
       
   220 	int intParamCount() {
       
   221         return intCount;
       
   222 	}
       
   223 
       
   224 	Vector rgbParams() {
       
   225 		return rgbData;
       
   226 	}
       
   227 
       
   228 	Vector images() {
       
   229 		return images;
       
   230 	}
       
   231 
       
   232 	String strParams() {
       
   233 		return strParams.toString();
       
   234 	}
       
   235 
       
   236 	void drawArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
       
   237 		writeInt(OP_DRAWARC);
       
   238 		writeInt(x);
       
   239 		writeInt(y);
       
   240 		writeInt(width);
       
   241 		writeInt(height);
       
   242 		writeInt(startAngle);
       
   243 		writeInt(arcAngle);
       
   244 	}
       
   245 
       
   246 	void drawFocus (int x, int y, int width, int height) {
       
   247 		writeInt(OP_DRAWFOCUS);
       
   248 		writeInt(x);
       
   249 		writeInt(y);
       
   250 		writeInt(width);
       
   251 		writeInt(height);
       
   252 	}
       
   253 
       
   254 	// must be called from UI thread as images cannot be creates outside that
       
   255 	void drawImage(Image image, int x, int y) {
       
   256 		writeInt(OP_DRAWIMAGE1);
       
   257 		writeInt(x);
       
   258 		writeInt(y);
       
   259 		// creating copy of image here uses implicit data sharing,
       
   260 		// thus only a shallow copy is made
       
   261 		writeImage(new Image(image));
       
   262 	}
       
   263 
       
   264 	// must be called from UI thread as images cannot be creates outside that
       
   265 	void drawImage(Image image, int tx, int ty, int tw, int th,int sx, int sy, int sw, int sh, int manipulation) {
       
   266 		writeInt(OP_DRAWIMAGE2);
       
   267 		writeInt(tx);
       
   268 		writeInt(ty);
       
   269 		writeInt(tw);
       
   270 		writeInt(th);
       
   271 		writeInt(sx);
       
   272 		writeInt(sy);
       
   273 		writeInt(sw);
       
   274 		writeInt(sh);
       
   275 		writeInt(manipulation);
       
   276 		// creating copy of image here uses implicit data sharing,
       
   277 		// thus only a shallow copy is made
       
   278 		writeImage(new Image(image));
       
   279 	}
       
   280 
       
   281 	void drawLine (int x1, int y1, int x2, int y2) {
       
   282 		writeInt(OP_DRAWLINE);
       
   283 		writeInt(x1);
       
   284 		writeInt(y1);
       
   285 		writeInt(x2);
       
   286 		writeInt(y2);
       
   287 	}
       
   288 
       
   289 	void drawEllipse (int x, int y, int width, int height) {
       
   290 		writeInt(OP_DRAWELLIPSE);
       
   291 		writeInt(x);
       
   292 		writeInt(y);
       
   293 		writeInt(width);
       
   294 		writeInt(height);
       
   295 	}
       
   296 
       
   297 	void drawPoint (int x, int y) {
       
   298 		writeInt(OP_DRAWPOINT);
       
   299 		writeInt(x);
       
   300 		writeInt(y);
       
   301 	}
       
   302 
       
   303 	void drawPolygon(int[] pointArray) {
       
   304 		writeInt(OP_DRAWPOLYGON);
       
   305 		writeInt(pointArray.length);
       
   306 		for(int i = 0; i < pointArray.length; ++i) {
       
   307 			writeInt(pointArray[i]);
       
   308 		}
       
   309 	}
       
   310 
       
   311 	void drawPolyline(int[] pointArray) {
       
   312 		writeInt(OP_DRAWPOLYLINE);
       
   313 		writeInt(pointArray.length);
       
   314 		for(int i = 0; i < pointArray.length; ++i) {
       
   315 			writeInt(pointArray[i]);
       
   316 		}
       
   317 	}
       
   318 
       
   319 	void drawRect (int x, int y, int width, int height) {
       
   320 		writeInt(OP_DRAWRECT);
       
   321 		writeInt(x);
       
   322 		writeInt(y);
       
   323 		writeInt(width);
       
   324 		writeInt(height);
       
   325 	}
       
   326 
       
   327 	void drawRGB(int[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation) {
       
   328 		writeInt(OP_DRAWRGB_INT);
       
   329 		writeInt(offset);
       
   330 		writeInt(scanlength);
       
   331 		writeInt(x);
       
   332 		writeInt(y);
       
   333 		writeInt(width);
       
   334 		writeInt(height);
       
   335 		writeInt(processAlpha? 1 : 0);
       
   336 		writeInt(manipulation);
       
   337 		writeRgb(rgbData);
       
   338 	}
       
   339 
       
   340 	void drawRGB(byte[] rgbData, byte[] transparencyMask,int offset, int scanlength, int x, int y, int width, int height, int manipulation, int format) {
       
   341 		writeInt(OP_DRAWRGB_BYTE);
       
   342 		writeInt(offset);
       
   343 		writeInt(scanlength);
       
   344 		writeInt(x);
       
   345 		writeInt(y);
       
   346 		writeInt(width);
       
   347 		writeInt(height);
       
   348 		writeInt(manipulation);
       
   349 		writeInt(format);
       
   350 		writeRgb(rgbData);
       
   351 		writeRgb(transparencyMask);
       
   352 	}
       
   353 
       
   354 	void drawRGB(short[] rgbData, int offset, int scanlength, int x, int y, int width, int height, boolean processAlpha, int manipulation, int format) {
       
   355 		writeInt(OP_DRAWRGB_SHORT);
       
   356 		writeInt(offset);
       
   357 		writeInt(scanlength);
       
   358 		writeInt(x);
       
   359 		writeInt(y);
       
   360 		writeInt(width);
       
   361 		writeInt(height);
       
   362 		writeInt(processAlpha? 1 : 0);
       
   363 		writeInt(manipulation);
       
   364 		writeInt(format);
       
   365 		writeRgb(rgbData);
       
   366 	}
       
   367 
       
   368 	void drawRoundRect (int x, int y, int width, int height, int arcWidth, int arcHeight) {
       
   369 		writeInt(OP_DRAWROUNDRECT);
       
   370 		writeInt(x);
       
   371 		writeInt(y);
       
   372 		writeInt(width);
       
   373 		writeInt(height);
       
   374 		writeInt(arcWidth);
       
   375 		writeInt(arcHeight);
       
   376 	}
       
   377 
       
   378 	void drawString(String string, int x, int y, int width, int height, int alignments, int flags, boolean isTransparent) {
       
   379 		writeInt(OP_DRAWSTRING);
       
   380 		writeStr(string);
       
   381 		writeInt(string.length());
       
   382 		writeInt(x);
       
   383 		writeInt(y);
       
   384 		writeInt(width);
       
   385 		writeInt(height);
       
   386 		writeInt(alignments);
       
   387 		writeInt(flags);
       
   388 		writeInt(isTransparent? 1 : 0);
       
   389 	}
       
   390 
       
   391 	void fillArc (int x, int y, int width, int height, int startAngle, int arcAngle) {
       
   392 		writeInt(OP_FILLARC);
       
   393 		writeInt(x);
       
   394 		writeInt(y);
       
   395 		writeInt(width);
       
   396 		writeInt(height);
       
   397 		writeInt(startAngle);
       
   398 		writeInt(arcAngle);
       
   399 	}
       
   400 
       
   401 	void fillGradientRect(int x, int y, int width, int height, boolean vertical, boolean swapColors) {
       
   402 		writeInt(OP_FILLGRADIENTRECT);
       
   403 		writeInt(x);
       
   404 		writeInt(y);
       
   405 		writeInt(width);
       
   406 		writeInt(height);
       
   407 		writeInt(vertical ? 1 : 0);
       
   408 		writeInt(swapColors ? 1 : 0);
       
   409 	}
       
   410 
       
   411 	void fillEllipse (int x, int y, int width, int height) {
       
   412 		writeInt(OP_FILLELLIPSE);
       
   413 		writeInt(x);
       
   414 		writeInt(y);
       
   415 		writeInt(width);
       
   416 		writeInt(height);
       
   417 	}
       
   418 
       
   419 	void fillPolygon (int[] pointArray) {
       
   420 		writeInt(OP_FILLPOLYGON);
       
   421 		writeInt(pointArray.length);
       
   422 		for(int i = 0; i < pointArray.length; ++i) {
       
   423 			writeInt(pointArray[i]);
       
   424 		}
       
   425 	}
       
   426 
       
   427 	void fillRect (int x, int y, int width, int height) {
       
   428 		writeInt(OP_FILLRECT);
       
   429 		writeInt(x);
       
   430 		writeInt(y);
       
   431 		writeInt(width);
       
   432 		writeInt(height);
       
   433 	}
       
   434 
       
   435 	void fillRoundRectangle (int x, int y, int width, int height, int arcWidth, int arcHeight) {
       
   436 		writeInt(OP_FILLROUNDRECT);
       
   437 		writeInt(x);
       
   438 		writeInt(y);
       
   439 		writeInt(width);
       
   440 		writeInt(height);
       
   441 		writeInt(arcWidth);
       
   442 		writeInt(arcHeight);
       
   443 	}
       
   444 
       
   445 	public void setBackgroundAlpha(int alpha) {
       
   446 		writeInt(OP_SETBACKGROUNDALPHA);
       
   447 		writeInt(alpha);
       
   448 	}
       
   449 
       
   450 	void setBackgroundColor(int argb, boolean updateAlpha) {
       
   451 		writeInt(OP_SETBACKGROUNDCOLOR);
       
   452 		writeInt(argb);
       
   453 		writeInt(updateAlpha? 1 : 0);
       
   454 	}
       
   455 
       
   456 	void setBlendingMode(int mode) {
       
   457 		writeInt(OP_SETBLENDINGMODE);
       
   458 		writeInt(mode);
       
   459 	}
       
   460 
       
   461 	void setClip(int x, int y, int width, int height, boolean intersects) {
       
   462 		writeInt(OP_SETCLIP);
       
   463 		writeInt(x);
       
   464 		writeInt(y);
       
   465 		writeInt(width);
       
   466 		writeInt(height);
       
   467 		writeInt(intersects? 1 : 0 );
       
   468 	}
       
   469 
       
   470 	void cancelClipping () {
       
   471 		writeInt(OP_CANCELCLIPPING);
       
   472 	}
       
   473 
       
   474 	void setFont(int fontHandle) {
       
   475 		writeInt(OP_SETFONT);
       
   476 		writeInt(fontHandle);
       
   477 	}
       
   478 
       
   479 	void setForegroundAlpha(int alpha) {
       
   480 		writeInt(OP_SETFOREGROUNDALPHA);
       
   481 		writeInt(alpha);
       
   482 	}
       
   483 
       
   484 	void setForegroundColor(int argb, boolean updateAlpha) {
       
   485 		writeInt(OP_SETFOREGROUNDCOLOR);
       
   486 		writeInt(argb);
       
   487 		writeInt(updateAlpha? 1 : 0);
       
   488 	}
       
   489 
       
   490 	void setStrokeStyle(int style) {
       
   491 		writeInt(OP_SETSTROKESTYLE);
       
   492 		writeInt(style);
       
   493 	}
       
   494 
       
   495 	void setStrokeWidth(int width) {
       
   496 		writeInt(OP_SETSTROKEWIDTH);
       
   497 		writeInt(width);
       
   498 	}
       
   499 
       
   500 	void translate(int x, int y) {
       
   501 		writeInt(OP_TRANSLATE);
       
   502 		writeInt(x);
       
   503 		writeInt(y);
       
   504 	}
       
   505 
       
   506 	void scale(int x, int y) {
       
   507 		writeInt(OP_SCALE);
       
   508 		writeInt(x);
       
   509 		writeInt(y);
       
   510 	}
       
   511 
       
   512 	void resetTransform() {
       
   513 		writeInt(OP_RESETTRANSFORM);
       
   514 	}
       
   515 
       
   516 	void copyArea(Image image, int x, int y) {
       
   517 		writeInt(OP_COPYAREA1);
       
   518         writeInt(x);
       
   519         writeInt(y);
       
   520         // TODO does this need flushing on the image
       
   521         images.addElement(new Image(image));
       
   522     }
       
   523 
       
   524 	void copyArea(int srcX, int srcY, int width, int height, int destX, int destY, boolean paint) {
       
   525         writeInt(OP_COPYAREA2);
       
   526         writeInt(srcX);
       
   527         writeInt(srcY);
       
   528         writeInt(width);
       
   529         writeInt(height);
       
   530         writeInt(destX);
       
   531         writeInt(destY);
       
   532         writeInt(paint? 1 : 0);
       
   533     }
       
   534 
       
   535 	// Unsupported operations
       
   536 	int getAdvancedCharacterWidth(char ch, boolean isAdvanced) {
       
   537 		reportNotSupported();
       
   538 		return 0;
       
   539 	}
       
   540 
       
   541 	void getFontMetricsData(int[] data, int fontHandle) {
       
   542 		reportNotSupported();
       
   543 	}
       
   544 
       
   545 	int getBackgroundAlpha() {
       
   546 		reportNotSupported();
       
   547 		return 0;
       
   548 	}
       
   549 
       
   550 	int getBackgroundColor() {
       
   551 		reportNotSupported();
       
   552 		return 0;
       
   553 	}
       
   554 
       
   555 	int getBlendingMode() {
       
   556 		reportNotSupported();
       
   557 		return 0;
       
   558 	}
       
   559 
       
   560 	void getClip(int[] clip) {
       
   561 		reportNotSupported();
       
   562 	}
       
   563 
       
   564 	int getForegroundAlpha() {
       
   565 		reportNotSupported();
       
   566 		return 0;
       
   567 	}
       
   568 
       
   569 	int getForegroundColor() {
       
   570 		reportNotSupported();
       
   571 		return 0;
       
   572 	}
       
   573 
       
   574 	void getTextBoundingBox(int[] boundingBox, String string, int alignments, int flags, int rectX, int rectY, int rectWidth, int rectHeight) {
       
   575 		reportNotSupported();
       
   576 	}
       
   577 
       
   578 	int getStrokeWidth() {
       
   579 		reportNotSupported();
       
   580 		return 0;
       
   581 	}
       
   582 
       
   583 	int getStrokeStyle() {
       
   584 		reportNotSupported();
       
   585 		return 0;
       
   586 	}
       
   587 
       
   588 	int getTranslateX() {
       
   589 		reportNotSupported();
       
   590 		return 0;
       
   591 	}
       
   592 
       
   593 	int getTranslateY() {
       
   594 		reportNotSupported();
       
   595 		return 0;
       
   596 	}
       
   597 
       
   598 	boolean hasClipping() {
       
   599 		reportNotSupported();
       
   600 		return false;
       
   601 	}
       
   602 
       
   603 	void saveSettings() {
       
   604 		reportNotSupported();
       
   605 	}
       
   606 
       
   607 	void restoreSettings() {
       
   608 		reportNotSupported();
       
   609 	}
       
   610 
       
   611 
       
   612 
       
   613 }