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(); } } } }