package edu.umd.cs.piccolox.swt;
import java.awt.Color;
import java.awt.Composite;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Paint;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.RenderingHints.Key;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.geom.Arc2D;
import java.awt.geom.Ellipse2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ImageObserver;
import java.awt.image.RenderedImage;
import java.awt.image.renderable.RenderableImage;
import java.text.AttributedCharacterIterator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Device;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.GC;
/**
* An extension to Graphics2D to support an SWT Piccolo Canvas with little modification to the current Piccolo architecture
*
* There is an outstanding SWT bug request #33319 for more efficient polyline/polygon rendering methods. It also appears that
* most of the code below could be made obselete by bug fix #6490
*
* A lot of this may also be duplicated in GEF - the eclipse Graphical Editor Framework
*
* @author Lance Good
*/
public class SWTGraphics2D extends Graphics2D {
protected static int CACHE_COUNT = 0;
protected static HashMap FONT_CACHE = new HashMap();
protected static HashMap COLOR_CACHE = new HashMap();
protected static HashMap SHAPE_CACHE = new HashMap();
protected static BufferedImage BUFFER = new BufferedImage(1,1,BufferedImage.TYPE_INT_ARGB);
static Point PT = new Point();
static Rectangle2D RECT = new Rectangle2D.Double();
static Rectangle2D LINE_RECT = new Rectangle2D.Double();
static org.eclipse.swt.graphics.Rectangle SWT_RECT = new org.eclipse.swt.graphics.Rectangle(0,0,0,0);
protected GC gc;
protected Device device;
protected AffineTransform transform = new AffineTransform();
protected org.eclipse.swt.graphics.Font curFont;
protected double lineWidth = 1.0;
/**
* Constructor for SWTGraphics2D.
*/
public SWTGraphics2D(GC gc, Device device) {
super();
this.gc = gc;
this.device = device;
}
////////////////////
// GET CLIP
////////////////////
/**
* @see java.awt.Graphics#getClipBounds()
*/
public Rectangle getClipBounds() {
org.eclipse.swt.graphics.Rectangle rect = gc.getClipping();
Rectangle aRect = new Rectangle(rect.x,rect.y,rect.width,rect.height);
try {
SWTShapeManager.transform(aRect,transform.createInverse());
} catch (Exception e) {e.printStackTrace();}
return aRect;
}
public void clipRect(int x, int y, int width, int height) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
org.eclipse.swt.graphics.Rectangle clip = gc.getClipping();
clip = clip.intersection(SWT_RECT);
gc.setClipping(clip);
}
public void setClip(int x, int y, int width, int height) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
gc.setClipping(SWT_RECT);
}
/**
* This method isn't really supported by SWT - so will use the shape bounds
*/
public void clip(Shape s) {
Rectangle2D clipBds = s.getBounds2D();
SWTShapeManager.transform(clipBds,transform);
SWTShapeManager.awtToSWT(clipBds,SWT_RECT);
org.eclipse.swt.graphics.Rectangle clip = gc.getClipping();
clip = clip.intersection(SWT_RECT);
gc.setClipping(SWT_RECT);
}
/**
* This method isn't really supported by SWT - so will use the shape bounds
*/
public void setClip(Shape clip) {
if (clip == null) {
gc.setClipping((org.eclipse.swt.graphics.Rectangle)null);
}
else {
Rectangle2D clipBds = clip.getBounds2D();
SWTShapeManager.transform(clipBds,transform);
SWTShapeManager.awtToSWT(clipBds,SWT_RECT);
gc.setClipping(SWT_RECT);
}
}
public Shape getClip() {
org.eclipse.swt.graphics.Rectangle rect = gc.getClipping();
Rectangle2D aRect = new Rectangle2D.Double(rect.x,rect.y,rect.width,rect.height);
try {
SWTShapeManager.transform(aRect,transform.createInverse());
} catch (Exception e) {e.printStackTrace();}
return aRect;
}
/////////////////////
// DEVICE SPECIFIC
/////////////////////
public GraphicsConfiguration getDeviceConfiguration() {
return ((Graphics2D)BUFFER.getGraphics()).getDeviceConfiguration();
}
////////////////
// COLOR METHODS
////////////////
public Paint getPaint() {
return getColor();
}
public void setPaint(Paint paint) {
if (paint instanceof Color) {
setColor((Color)paint);
}
}
public Color getColor() {
org.eclipse.swt.graphics.Color color = gc.getForeground();
Color awtColor = new Color(color.getRed(),color.getGreen(),color.getBlue());
return awtColor;
}
public void setColor(Color c) {
org.eclipse.swt.graphics.Color cachedColor = (org.eclipse.swt.graphics.Color)COLOR_CACHE.get(c);
if (cachedColor == null) {
cachedColor = new org.eclipse.swt.graphics.Color(device,c.getRed(),c.getGreen(),c.getBlue());
COLOR_CACHE.put(c,cachedColor);
}
gc.setForeground(cachedColor);
}
public void setColor(org.eclipse.swt.graphics.Color c) {
gc.setForeground(c);
}
public void setBackground(Color c) {
org.eclipse.swt.graphics.Color cachedColor = (org.eclipse.swt.graphics.Color)COLOR_CACHE.get(c);
if (cachedColor == null) {
cachedColor = new org.eclipse.swt.graphics.Color(device,c.getRed(),c.getGreen(),c.getBlue());
COLOR_CACHE.put(c,cachedColor);
}
gc.setBackground(cachedColor);
}
public void setBackground(org.eclipse.swt.graphics.Color c) {
gc.setBackground(c);
}
public Color getBackground() {
org.eclipse.swt.graphics.Color color = gc.getBackground();
Color awtColor = new Color(color.getRed(),color.getGreen(),color.getBlue());
return awtColor;
}
////////////////
// FONT METHODS
////////////////
public org.eclipse.swt.graphics.Font getSWTFont() {
return curFont;
}
public org.eclipse.swt.graphics.FontMetrics getSWTFontMetrics() {
gc.setFont(curFont);
return gc.getFontMetrics();
}
public Font getFont() {
if (curFont != null) {
int style = Font.PLAIN;
FontData[] fd = curFont.getFontData();
if (fd.length > 0) {
if ((fd[0].getStyle() & SWT.BOLD) != 0) {
style = style | Font.BOLD;
}
if ((fd[0].getStyle() & SWT.ITALIC) != 0) {
style = style | SWT.ITALIC;
}
return new Font(fd[0].getName(),style,fd[0].height);
}
return null;
}
else {
return null;
}
}
public void setFont(Font font) {
String fontString = "name="+font.getFamily()+";bold="+font.isBold()+";italic="+font.isItalic()+";size="+font.getSize();
curFont = getFont(fontString);
}
public void setFont(org.eclipse.swt.graphics.Font font) {
curFont = font;
}
public org.eclipse.swt.graphics.Font getFont(String fontString) {
org.eclipse.swt.graphics.Font cachedFont = (org.eclipse.swt.graphics.Font)FONT_CACHE.get(fontString);
if (cachedFont == null) {
int style = 0;
if (fontString.indexOf("bold=true") != -1) {
style = style | SWT.BOLD;
}
if (fontString.indexOf("italic=true") != -1) {
style = style | SWT.ITALIC;
}
String name = fontString.substring(0,fontString.indexOf(";"));
String size = fontString.substring(fontString.lastIndexOf(";")+1,fontString.length());
int sizeInt = 12;
try {
sizeInt = Integer.parseInt(size.substring(size.indexOf("=")+1,size.length()));
}
catch (Exception e) {e.printStackTrace();}
cachedFont = new org.eclipse.swt.graphics.Font(device,name.substring(name.indexOf("=")+1,name.length()),sizeInt,style);
FONT_CACHE.put(fontString,cachedFont);
}
return cachedFont;
}
protected org.eclipse.swt.graphics.Font getTransformedFont() {
if (curFont != null) {
FontData fontData = curFont.getFontData()[0];
int height = fontData.getHeight();
RECT.setRect(0,0,height,height);
SWTShapeManager.transform(RECT,transform);
height = (int)(RECT.getHeight()+0.5);
String fontString = "name="+fontData.getName()+";bold="+((fontData.getStyle() & SWT.BOLD) != 0)+";italic="+((fontData.getStyle() & SWT.ITALIC) != 0)+";size="+height;
return getFont(fontString);
}
return null;
}
///////////////////////////
// AFFINE TRANSFORM METHODS
///////////////////////////
public void translate(int x, int y) {
transform.translate(x,y);
}
public void translate(double tx, double ty) {
transform.translate(tx,ty);
}
public void rotate(double theta) {
transform.rotate(theta);
}
public void rotate(double theta, double x, double y) {
transform.rotate(theta,x,y);
}
public void scale(double sx, double sy) {
transform.scale(sx,sy);
}
public void shear(double shx, double shy) {
transform.shear(shx,shy);
}
public void transform(AffineTransform Tx) {
transform.concatenate(Tx);
}
public void setTransform(AffineTransform Tx) {
transform = (AffineTransform)Tx.clone();
}
public AffineTransform getTransform() {
return (AffineTransform)transform.clone();
}
///////////////////////////////
// DRAWING AND FILLING METHODS
///////////////////////////////
public void clearRect(int x, int y, int width, int height) {
fillRect(x,y,width,height);
}
public void draw(Shape s) {
if (s instanceof Rectangle2D) {
Rectangle2D r2 = (Rectangle2D)s;
drawRect(r2.getX(),r2.getY(),r2.getWidth(),r2.getHeight());
}
else if (s instanceof Ellipse2D) {
Ellipse2D e2 = (Ellipse2D)s;
drawOval(e2.getX(),e2.getY(),e2.getWidth(),e2.getHeight());
}
else if (s instanceof RoundRectangle2D) {
RoundRectangle2D r2 = (RoundRectangle2D)s;
drawRoundRect(r2.getX(),r2.getY(),r2.getWidth(),r2.getHeight(),r2.getArcWidth(),r2.getArcHeight());
}
else if (s instanceof Arc2D) {
Arc2D a2 = (Arc2D)s;
drawArc(a2.getX(),a2.getY(),a2.getWidth(),a2.getHeight(),a2.getAngleStart(),a2.getAngleExtent());
}
else {
double[] pts = (double[])SHAPE_CACHE.get(s);
if (pts == null) {
pts = SWTShapeManager.shapeToPolyline(s);
SHAPE_CACHE.put(s,pts);
}
drawPolyline(pts);
}
}
public void fill(Shape s) {
if (s instanceof Rectangle2D) {
Rectangle2D r2 = (Rectangle2D)s;
fillRect(r2.getX(),r2.getY(),r2.getWidth(),r2.getHeight());
}
else if (s instanceof Ellipse2D) {
Ellipse2D e2 = (Ellipse2D)s;
fillOval(e2.getX(),e2.getY(),e2.getWidth(),e2.getHeight());
}
else if (s instanceof RoundRectangle2D) {
RoundRectangle2D r2 = (RoundRectangle2D)s;
fillRoundRect(r2.getX(),r2.getY(),r2.getWidth(),r2.getHeight(),r2.getArcWidth(),r2.getArcHeight());
}
else if (s instanceof Arc2D) {
Arc2D a2 = (Arc2D)s;
fillArc(a2.getX(),a2.getY(),a2.getWidth(),a2.getHeight(),a2.getAngleStart(),a2.getAngleExtent());
}
else {
double[] pts = (double[])SHAPE_CACHE.get(s);
if (pts == null) {
pts = SWTShapeManager.shapeToPolyline(s);
SHAPE_CACHE.put(s,pts);
}
fillPolygon(pts);
}
}
public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) {
int[] ptArray = new int[2*nPoints];
for(int i=0; i<nPoints; i++) {
PT.setLocation(xPoints[i],yPoints[i]);
transform.transform(PT,PT);
ptArray[2*i] = xPoints[i];
ptArray[2*i+1] = yPoints[i];
}
gc.setLineWidth(getTransformedLineWidth());
gc.drawPolyline(ptArray);
}
public void drawPolyline(double[] pts) {
int[] intPts = SWTShapeManager.transform(pts,transform);
gc.drawPolyline(intPts);
}
public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) {
int[] ptArray = new int[2*nPoints];
for(int i=0; i<nPoints; i++) {
PT.setLocation(xPoints[i],yPoints[i]);
transform.transform(PT,PT);
ptArray[2*i] = xPoints[i];
ptArray[2*i+1] = yPoints[i];
}
gc.drawPolygon(ptArray);
}
public void fillPolygon(double[] pts) {
int[] intPts = SWTShapeManager.transform(pts,transform);
gc.fillPolygon(intPts);
}
public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) {
int[] ptArray = new int[2*nPoints];
for(int i=0; i<nPoints; i++) {
PT.setLocation(xPoints[i],yPoints[i]);
transform.transform(PT,PT);
ptArray[2*i] = xPoints[i];
ptArray[2*i+1] = yPoints[i];
}
gc.fillPolygon(ptArray);
}
public void drawLine(int x1, int y1, int x2, int y2) {
drawLine((double)x1,(double)y1,(double)x2,(double)y2);
}
public void drawLine(double x1, double y1, double x2, double y2) {
PT.setLocation(x1,y1);
transform.transform(PT,PT);
x1 = (int)PT.getX();
y1 = (int)PT.getY();
PT.setLocation(x2,y2);
transform.transform(PT,PT);
x2 = (int)PT.getX();
y2 = (int)PT.getY();
gc.setLineWidth(getTransformedLineWidth());
gc.drawLine((int)(x1+0.5),(int)(y1+0.5),(int)(x2+0.5),(int)(y2+0.5));
}
//***************************************************************************
// FOR NOW - ASSUME NO ROTATION ON THE TRANSFORM FOR THE FOLLOWING CALLS!
//***************************************************************************
public void copyArea(org.eclipse.swt.graphics.Image img, double x, double y) {
PT.setLocation(x,y);
transform.transform(PT,PT);
gc.copyArea(img,(int)(PT.getX()+0.5),(int)(PT.getY()+0.5));
}
public void copyArea(int x, int y, int width, int height, int dx, int dy) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
PT.setLocation(dx,dy);
transform.transform(PT,PT);
gc.copyArea((int)RECT.getX(),(int)RECT.getY(),(int)RECT.getWidth(),(int)RECT.getHeight(),(int)PT.getX(),(int)PT.getY());
}
public void drawString(String str, double x, double y) {
PT.setLocation(x,y);
transform.transform(PT,PT);
gc.setFont(getTransformedFont());
gc.drawString(str,(int)(PT.getX()+0.5),(int)(PT.getY()+0.5),true);
}
public void drawString(String str, int x, int y) {
drawString(str,(double)x,(double)y);
}
public void drawString(String str, float x, float y) {
drawString(str,(double)x,(double)y);
}
public void drawText(String s, double x, double y) {
PT.setLocation(x,y);
transform.transform(PT,PT);
gc.setFont(getTransformedFont());
gc.drawText(s,(int)(PT.getX()+0.5),(int)(PT.getY()+0.5),true);
}
public void drawText(String s, double x, double y, int flags) {
PT.setLocation(x,y);
transform.transform(PT,PT);
gc.setFont(getTransformedFont());
gc.drawText(s,(int)(PT.getX()+0.5),(int)(PT.getY()+0.5),flags);
}
public void drawRect(int x, int y, int width, int height) {
drawRect((double)x,(double)y,(double)width,(double)height);
}
public void drawRect(double x, double y, double width, double height) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
gc.setLineWidth(getTransformedLineWidth());
gc.drawRectangle(SWT_RECT);
}
public void fillRect(int x, int y, int width, int height) {
fillRect((double)x,(double)y,(double)width,(double)height);
}
public void fillRect(double x, double y, double width, double height) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
gc.fillRectangle(SWT_RECT);
}
public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
drawRoundRect((double)x,(double)y,(double)width,(double)height,(double)arcWidth,(double)arcHeight);
}
public void drawRoundRect(double x, double y, double width, double height, double arcWidth, double arcHeight) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
x = RECT.getX();
y = RECT.getY();
width = RECT.getWidth();
height = RECT.getHeight();
RECT.setRect(0,0,arcWidth,arcHeight);
SWTShapeManager.transform(RECT,transform);
arcWidth = RECT.getWidth();
arcHeight = RECT.getHeight();
gc.setLineWidth(getTransformedLineWidth());
gc.drawRoundRectangle((int)(x+0.5),(int)(y+0.5),(int)(width+0.5),(int)(height+0.5),(int)(arcWidth+0.5),(int)(arcHeight+0.5));
}
public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) {
fillRoundRect((double)x,(double)y,(double)width,(double)height,(double)arcWidth,(double)arcHeight);
}
public void fillRoundRect(double x, double y, double width, double height, double arcWidth, double arcHeight) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
x = RECT.getX();
y = RECT.getY();
width = RECT.getWidth();
height = RECT.getHeight();
RECT.setRect(0,0,arcWidth,arcHeight);
SWTShapeManager.transform(RECT,transform);
arcWidth = RECT.getWidth();
arcHeight = RECT.getHeight();
gc.setLineWidth(getTransformedLineWidth());
gc.fillRoundRectangle((int)(x+0.5),(int)(y+0.5),(int)(width+0.5),(int)(height+0.5),(int)(arcWidth+0.5),(int)(arcHeight+0.5));
}
public void drawOval(int x, int y, int width, int height) {
drawOval((double)x,(double)y,(double)width,(double)height);
}
public void drawOval(double x, double y, double width, double height) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
gc.setLineWidth(getTransformedLineWidth());
gc.drawOval((int)(RECT.getX()+0.5),(int)(RECT.getY()+0.5),(int)(RECT.getWidth()+0.5),(int)(RECT.getHeight()+0.5));
}
public void fillOval(int x, int y, int width, int height) {
fillOval((double)x,(double)y,(double)width,(double)height);
}
public void fillOval(double x, double y, double width, double height) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
gc.fillOval((int)(RECT.getX()+0.5),(int)(RECT.getY()+0.5),(int)(RECT.getWidth()+0.5),(int)(RECT.getHeight()+0.5));
}
public void drawArc(int x, int y, int width, int height, int startAngle, int extent) {
drawArc((double)x,(double)y,(double)width,(double)height,(double)startAngle,(double)extent);
}
public void drawArc(double x, double y, double width, double height, double startAngle, double extent) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
gc.setLineWidth(getTransformedLineWidth());
gc.drawArc((int)(RECT.getX()+0.5),(int)(RECT.getY()+0.5),(int)(RECT.getWidth()+0.5),(int)(RECT.getHeight()+0.5),(int)(startAngle+0.5),(int)(startAngle+extent+0.5));
}
public void fillArc(int x, int y, int width, int height, int startAngle, int extent) {
drawArc((double)x,(double)y,(double)width,(double)height,(double)startAngle,(double)extent);
}
public void fillArc(double x, double y, double width, double height, double startAngle, double extent) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
gc.drawArc((int)(RECT.getX()+0.5),(int)(RECT.getY()+0.5),(int)(RECT.getWidth()+0.5),(int)(RECT.getHeight()+0.5),(int)(startAngle+0.5),(int)(startAngle+extent+0.5));
}
//////////////////////////
// SWT IMAGE METHODS
//////////////////////////
public void drawImage(org.eclipse.swt.graphics.Image image, double x, double y) {
org.eclipse.swt.graphics.Rectangle bounds = image.getBounds();
RECT.setRect(x,y,bounds.width,bounds.height);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
gc.drawImage(image,0,0,bounds.width,bounds.height,SWT_RECT.x,SWT_RECT.y,SWT_RECT.width,SWT_RECT.height);
}
public void drawImage(org.eclipse.swt.graphics.Image image, int srcX, int srcY, int srcW, int srcH, double destX, double destY, double destW, double destH) {
RECT.setRect(destX,destY,destW,destH);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
gc.drawImage(image,srcX,srcY,srcW,srcH,SWT_RECT.x,SWT_RECT.y,SWT_RECT.width,SWT_RECT.height);
}
//////////////////////////////
// OTHER SWT SPECIFIC METHODS
//////////////////////////////
public void setLineWidth(double lineWidth) {
this.lineWidth = lineWidth;
}
protected int getTransformedLineWidth() {
LINE_RECT.setRect(0,0,lineWidth,lineWidth);
SWTShapeManager.transform(LINE_RECT,transform);
return (int)(Math.max(LINE_RECT.getWidth(),1)+0.5);
}
public void fillGradientRectangle(double x, double y, double width, double height, boolean vertical) {
RECT.setRect(x,y,width,height);
SWTShapeManager.transform(RECT,transform);
SWTShapeManager.awtToSWT(RECT,SWT_RECT);
gc.fillGradientRectangle(SWT_RECT.x,SWT_RECT.y,SWT_RECT.width,SWT_RECT.height,vertical);
}
public void setXORMode(boolean xOr) {
gc.setXORMode(xOr);
}
public int getAdvanceWidth(char ch) {
org.eclipse.swt.graphics.Font scaledFont = gc.getFont();
gc.setFont(curFont);
int width = gc.getAdvanceWidth(ch);
gc.setFont(scaledFont);
return width;
}
public int getCharWidth(char ch) {
org.eclipse.swt.graphics.Font scaledFont = gc.getFont();
gc.setFont(curFont);
int width = gc.getCharWidth(ch);
gc.setFont(scaledFont);
return width;
}
public org.eclipse.swt.graphics.Point stringExtent(String str) {
org.eclipse.swt.graphics.Font scaledFont = gc.getFont();
gc.setFont(curFont);
org.eclipse.swt.graphics.Point extent = gc.stringExtent(str);
gc.setFont(scaledFont);
return extent;
}
public org.eclipse.swt.graphics.Point textExtent(String str) {
org.eclipse.swt.graphics.Font scaledFont = gc.getFont();
gc.setFont(curFont);
org.eclipse.swt.graphics.Point extent = gc.textExtent(str);
gc.setFont(scaledFont);
return extent;
}
public org.eclipse.swt.graphics.Point textExtent(String str, int flags) {
org.eclipse.swt.graphics.Font scaledFont = gc.getFont();
gc.setFont(curFont);
org.eclipse.swt.graphics.Point extent = gc.textExtent(str,flags);
gc.setFont(scaledFont);
return extent;
}
/////////////////////////////////
// CURRENTLY UNSUPPORTED METHODS
/////////////////////////////////
/**
* @see java.awt.Graphics#drawString(AttributedCharacterIterator, int, int)
*/
public void drawString(AttributedCharacterIterator iterator, int x, int y) {
}
/**
* @see java.awt.Graphics2D#drawString(AttributedCharacterIterator, float, float)
*/
public void drawString(AttributedCharacterIterator iterator, float x, float y) {
}
/**
* @see java.awt.Graphics2D#drawGlyphVector(GlyphVector, float, float)
*/
public void drawGlyphVector(GlyphVector g, float x, float y) {
}
/**
* @see java.awt.Graphics2D#hit(Rectangle, Shape, boolean)
*/
public boolean hit(Rectangle rect, Shape s, boolean onStroke) {
return false;
}
/**
* @see java.awt.Graphics2D#setComposite(Composite)
*/
public void setComposite(Composite comp) {
}
/**
* @see java.awt.Graphics2D#setStroke(Stroke)
*/
public void setStroke(Stroke s) {
}
public void setRenderingHint(Key hintKey, Object hintValue) {
}
public Object getRenderingHint(Key hintKey) {
return null;
}
/**
* @see java.awt.Graphics2D#setRenderingHints(Map)
*/
public void setRenderingHints(Map hints) {
}
/**
* @see java.awt.Graphics2D#addRenderingHints(Map)
*/
public void addRenderingHints(Map hints) {
}
/**
* @see java.awt.Graphics2D#getRenderingHints()
*/
public RenderingHints getRenderingHints() {
return null;
}
/**
* @see java.awt.Graphics2D#getComposite()
*/
public Composite getComposite() {
return null;
}
/**
* @see java.awt.Graphics2D#getStroke()
*/
public Stroke getStroke() {
return null;
}
/**
* @see java.awt.Graphics2D#getFontRenderContext()
*/
public FontRenderContext getFontRenderContext() {
return null;
}
/**
* @see java.awt.Graphics#create()
*/
public Graphics create() {
return null;
}
/**
* @see java.awt.Graphics#setPaintMode()
*/
public void setPaintMode() {
}
/**
* @see java.awt.Graphics#setXORMode(Color)
*/
public void setXORMode(Color c1) {
}
/**
* @see java.awt.Graphics#getFontMetrics(Font)
*/
public FontMetrics getFontMetrics(Font f) {
return null;
}
/**
* @see java.awt.Graphics2D#drawImage(Image, AffineTransform, ImageObserver)
*/
public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) {
return false;
}
/**
* @see java.awt.Graphics2D#drawImage(BufferedImage, BufferedImageOp, int, int)
*/
public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) {
}
/**
* @see java.awt.Graphics2D#drawRenderedImage(RenderedImage, AffineTransform)
*/
public void drawRenderedImage(RenderedImage img, AffineTransform xform) {
}
/**
* @see java.awt.Graphics2D#drawRenderableImage(RenderableImage, AffineTransform)
*/
public void drawRenderableImage(RenderableImage img, AffineTransform xform) {
}
/**
* @see java.awt.Graphics#drawImage(Image, int, int, ImageObserver)
*/
public boolean drawImage(Image img, int x, int y, ImageObserver observer) {
return false;
}
/**
* @see java.awt.Graphics#drawImage(Image, int, int, int, int, ImageObserver)
*/
public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) {
return false;
}
/**
* @see java.awt.Graphics#drawImage(Image, int, int, Color, ImageObserver)
*/
public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) {
return false;
}
/**
* @see java.awt.Graphics#drawImage(Image, int, int, int, int, Color, ImageObserver)
*/
public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) {
return false;
}
/**
* @see java.awt.Graphics#drawImage(Image, int, int, int, int, int, int, int, int, ImageObserver)
*/
public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) {
return false;
}
/**
* @see java.awt.Graphics#drawImage(Image, int, int, int, int, int, int, int, int, Color, ImageObserver)
*/
public boolean drawImage(
Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
Color bgcolor,
ImageObserver observer) {
return false;
}
/**
* DO NOTHING - DISPOSED IN RENDERING CLASS
*/
public void dispose() {
}
/////////////////////////////////
// CLEAN-UP METHODS
/////////////////////////////////
public static void incrementGCCount() {
CACHE_COUNT++;
}
public static void decrementGCCount() {
CACHE_COUNT--;
if (CACHE_COUNT == 0) {
for(Iterator i=FONT_CACHE.values().iterator(); i.hasNext();) {
org.eclipse.swt.graphics.Font font = (org.eclipse.swt.graphics.Font)i.next();
font.dispose();
}
for(Iterator i=COLOR_CACHE.values().iterator(); i.hasNext();) {
org.eclipse.swt.graphics.Color color = (org.eclipse.swt.graphics.Color)i.next();
color.dispose();
}
}
}
}