diff options
author | Thorsten Behrens <thb@openoffice.org> | 2004-03-18 09:38:44 +0000 |
---|---|---|
committer | Thorsten Behrens <thb@openoffice.org> | 2004-03-18 09:38:44 +0000 |
commit | 6e89341b5045a01e823364633ef0fbfd44ebdfd5 (patch) | |
tree | e8bfc629f55ce0e0d31befb0b5c02233ef935705 /canvas/source/java/BufferedGraphics2D.java | |
parent | aac18e0575873e71532ce77e4c2e4083e4c71b9a (diff) |
#110496# Merge from cws_srx645_canvas01: first working version of XCanvas UNO components, for now consisting of javacanvas.uno.jar, vclcanvas.uno and directxcanvas.uno (windows only)
Diffstat (limited to 'canvas/source/java/BufferedGraphics2D.java')
-rw-r--r-- | canvas/source/java/BufferedGraphics2D.java | 630 |
1 files changed, 630 insertions, 0 deletions
diff --git a/canvas/source/java/BufferedGraphics2D.java b/canvas/source/java/BufferedGraphics2D.java new file mode 100644 index 000000000000..53c89990b11e --- /dev/null +++ b/canvas/source/java/BufferedGraphics2D.java @@ -0,0 +1,630 @@ +/************************************************************************* + * + * $RCSfile: BufferedGraphics2D.java,v $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, +0 * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +// Java AWT +import java.awt.*; +import java.awt.geom.*; +import java.awt.image.*; +import java.awt.image.renderable.*; +import java.awt.font.*; +import java.text.*; +import java.util.*; + + +public class BufferedGraphics2D + extends java.awt.Graphics2D +{ + // TODO: Somehow, get rid of this duplicate graphics (the graphics member, + // and this object itself, extending a Graphics2D) + private Graphics2D graphics; + private BufferedImage backBuffer; + private Graphics2D backBufferGraphics; + + //---------------------------------------------------------------------------------- + + public BufferedGraphics2D( java.awt.Graphics2D _graphics, int width, int height ) + { + setGraphics( _graphics, Math.max(1,width), Math.max(1,height) ); + } + + public void redraw( Graphics2D graph ) + { + if( graph != null && + backBuffer != null ) + { + CanvasUtils.printLog("BufferedGraphics2D.redraw: using buffer of size (" + + backBuffer.getWidth() + "," + backBuffer.getHeight() + ")" ); + + // set transform to identity + graph.setTransform( new AffineTransform() ); + graph.drawImage(backBuffer, 0, 0, null); + CanvasUtils.postRenderImageTreatment( backBuffer ); + } + } + + public BufferedImage getBackBuffer() + { + return backBuffer; + } + + public void setSize( int width, int height ) + { + if( backBuffer != null && + width == backBuffer.getWidth() && + height == backBuffer.getHeight() ) + { + return; + } + + if( backBufferGraphics != null ) + backBufferGraphics.dispose(); + + if( backBuffer != null ) + backBuffer.flush(); + + // TODO: Maybe VolatileImage with another BufferedImage as a backup is + // a tad faster here. + backBuffer = graphics.getDeviceConfiguration().createCompatibleImage(width, + height); + + backBufferGraphics = backBuffer.createGraphics(); + CanvasUtils.initGraphics( backBufferGraphics ); + + // clear the buffer to white (to have a defined state here) + backBufferGraphics.setColor( java.awt.Color.white ); + backBufferGraphics.fillRect( 0,0,width,height ); + } + + public void setGraphics( Graphics2D _graphics, int width, int height ) + { + if( graphics != null ) + graphics.dispose(); + + graphics = _graphics; + + setSize(width,height); + } + + //---------------------------------------------------------------------------------- + + // + // Graphics + // ======== + // + public void clearRect(int x, int y, int width, int height) + { + graphics.clearRect(x,y,width,height); + backBufferGraphics.clearRect(x,y,width,height); + } + + public void clipRect(int x, int y, int width, int height) + { + graphics.clipRect(x,y,width,height); + backBufferGraphics.clipRect(x,y,width,height); + } + + public void copyArea(int x, int y, int width, int height, int dx, int dy) + { + graphics.copyArea(x,y,width,height,dx,dy); + backBufferGraphics.copyArea(x,y,width,height,dx,dy); + } + + public Graphics create() + { + return null; + } + + public Graphics create(int x, int y, int width, int height) + { + return null; + } + + public void dispose() + { + graphics.dispose(); + backBufferGraphics.dispose(); + backBuffer.flush(); + } + + public void draw3DRect(int x, int y, int width, int height, boolean raised) + { + graphics.draw3DRect(x,y,width,height,raised); + backBufferGraphics.draw3DRect(x,y,width,height,raised); + } + + public void drawArc(int x, int y, int width, int height, int startAngle, int arcAngle) + { + graphics.drawArc(x,y,width,height,startAngle,arcAngle); + backBufferGraphics.drawArc(x,y,width,height,startAngle,arcAngle); + } + + public void drawBytes(byte[] data, int offset, int length, int x, int y) + { + graphics.drawBytes(data,offset,length,x,y); + backBufferGraphics.drawBytes(data,offset,length,x,y); + } + + public void drawChars(char[] data, int offset, int length, int x, int y) + { + graphics.drawChars(data,offset,length,x,y); + backBufferGraphics.drawChars(data,offset,length,x,y); + } + + public boolean drawImage(Image img, int x, int y, Color bgcolor, ImageObserver observer) + { + backBufferGraphics.drawImage(img,x,y,bgcolor,observer); + return graphics.drawImage(img,x,y,bgcolor,observer); + } + + public boolean drawImage(Image img, int x, int y, ImageObserver observer) + { + backBufferGraphics.drawImage(img,x,y,observer); + return graphics.drawImage(img,x,y,observer); + } + + public boolean drawImage(Image img, int x, int y, int width, int height, Color bgcolor, ImageObserver observer) + { + backBufferGraphics.drawImage(img,x,y,width,height,bgcolor,observer); + return graphics.drawImage(img,x,y,width,height,bgcolor,observer); + } + + public boolean drawImage(Image img, int x, int y, int width, int height, ImageObserver observer) + { + backBufferGraphics.drawImage(img,x,y,width,height,observer); + return graphics.drawImage(img,x,y,width,height,observer); + } + + 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) + { + backBufferGraphics.drawImage(img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,bgcolor,observer); + return graphics.drawImage(img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,bgcolor,observer); + } + + public boolean drawImage(Image img, int dx1, int dy1, int dx2, int dy2, int sx1, int sy1, int sx2, int sy2, ImageObserver observer) + { + backBufferGraphics.drawImage(img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,observer); + return graphics.drawImage(img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,observer); + } + + public void drawLine(int x1, int y1, int x2, int y2) + { + graphics.drawLine(x1,y1,x2,y2); + backBufferGraphics.drawLine(x1,y1,x2,y2); + } + + public void drawOval(int x, int y, int width, int height) + { + graphics.drawOval(x,y,width,height); + backBufferGraphics.drawOval(x,y,width,height); + } + + public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints) + { + graphics.drawPolygon(xPoints,yPoints,nPoints); + backBufferGraphics.drawPolygon(xPoints,yPoints,nPoints); + } + + public void drawPolygon(Polygon p) + { + graphics.drawPolygon(p); + backBufferGraphics.drawPolygon(p); + } + + public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints) + { + graphics.drawPolyline(xPoints,yPoints,nPoints); + backBufferGraphics.drawPolyline(xPoints,yPoints,nPoints); + } + + public void drawRect(int x, int y, int width, int height) + { + graphics.drawRect(x,y,width,height); + backBufferGraphics.drawRect(x,y,width,height); + } + + public void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) + { + graphics.drawRoundRect(x,y,width,height,arcWidth,arcHeight); + backBufferGraphics.drawRoundRect(x,y,width,height,arcWidth,arcHeight); + } + + public void drawString(AttributedCharacterIterator iterator, int x, int y) + { + graphics.drawString(iterator,x,y); + backBufferGraphics.drawString(iterator,x,y); + } + + public void drawString(String str, int x, int y) + { + graphics.drawString(str,x,y); + backBufferGraphics.drawString(str,x,y); + } + + public void fill3DRect(int x, int y, int width, int height, boolean raised) + { + graphics.fill3DRect(x,y,width,height,raised); + backBufferGraphics.fill3DRect(x,y,width,height,raised); + } + + public void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle) + { + graphics.fillArc(x,y,width,height,startAngle,arcAngle); + backBufferGraphics.fillArc(x,y,width,height,startAngle,arcAngle); + } + + public void fillOval(int x, int y, int width, int height) + { + graphics.fillOval(x,y,width,height); + backBufferGraphics.fillOval(x,y,width,height); + } + + public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints) + { + graphics.fillPolygon(xPoints,yPoints,nPoints); + backBufferGraphics.fillPolygon(xPoints,yPoints,nPoints); + } + + public void fillPolygon(Polygon p) + { + graphics.fillPolygon(p); + backBufferGraphics.fillPolygon(p); + } + + public void fillRect(int x, int y, int width, int height) + { + graphics.fillRect(x,y,width,height); + backBufferGraphics.fillRect(x,y,width,height); + } + + public void fillRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight) + { + graphics.fillRoundRect(x,y,width,height,arcWidth,arcHeight); + backBufferGraphics.fillRoundRect(x,y,width,height,arcWidth,arcHeight); + } + + public Shape getClip() + { + return graphics.getClip(); + } + + public Rectangle getClipBounds() + { + return graphics.getClipBounds(); + } + + public Rectangle getClipBounds(Rectangle r) + { + return graphics.getClipBounds(r); + } + + public Rectangle getClipRect() + { + return graphics.getClipRect(); + } + + public Color getColor() + { + return getColor(); + } + + public Font getFont() + { + return getFont(); + } + + public FontMetrics getFontMetrics() + { + return getFontMetrics(); + } + + public FontMetrics getFontMetrics(Font f) + { + return getFontMetrics(f); + } + + public boolean hitClip(int x, int y, int width, int height) + { + return graphics.hitClip(x,y,width,height); + } + + public void setClip(int x, int y, int width, int height) + { + graphics.setClip(x,y,width,height); + backBufferGraphics.setClip(x,y,width,height); + } + + public void setClip(Shape clip) + { + graphics.setClip(clip); + backBufferGraphics.setClip(clip); + } + + public void setColor(Color c) + { + graphics.setColor(c); + backBufferGraphics.setColor(c); + } + + public void setFont(Font font) + { + graphics.setFont(font); + backBufferGraphics.setFont(font); + } + + public void setPaintMode() + { + graphics.setPaintMode(); + backBufferGraphics.setPaintMode(); + } + + public void setXORMode(Color c1) + { + graphics.setXORMode(c1); + backBufferGraphics.setXORMode(c1); + } + + public String toString() + { + return graphics.toString(); + } + + public void translate(int x, int y) + { + graphics.translate(x,y); + backBufferGraphics.translate(x,y); + } + + //---------------------------------------------------------------------------------- + + // + // Graphics2D + // ========== + // + public void addRenderingHints(Map hints) + { + graphics.addRenderingHints(hints); + backBufferGraphics.addRenderingHints(hints); + } + + public void clip(Shape s) + { + graphics.clip(s); + backBufferGraphics.clip(s); + } + + public void draw(Shape s) + { + graphics.draw(s); + backBufferGraphics.draw(s); + } + + public void drawGlyphVector(GlyphVector g, float x, float y) + { + graphics.drawGlyphVector(g,x,y); + backBufferGraphics.drawGlyphVector(g,x,y); + } + + public void drawImage(BufferedImage img, BufferedImageOp op, int x, int y) + { + graphics.drawImage(img,op,x,y); + backBufferGraphics.drawImage(img,op,x,y); + } + + public boolean drawImage(Image img, AffineTransform xform, ImageObserver obs) + { + backBufferGraphics.drawImage(img,xform,obs); + return graphics.drawImage(img,xform,obs); + } + + public void drawRenderableImage(RenderableImage img, AffineTransform xform) + { + graphics.drawRenderableImage(img,xform); + backBufferGraphics.drawRenderableImage(img,xform); + } + + public void drawRenderedImage(RenderedImage img, AffineTransform xform) + { + graphics.drawRenderedImage(img,xform); + backBufferGraphics.drawRenderedImage(img,xform); + } + + public void drawString(AttributedCharacterIterator iterator, float x, float y) + { + graphics.drawString(iterator,x,y); + backBufferGraphics.drawString(iterator,x,y); + } + + public void drawString(String s, float x, float y) + { + graphics.drawString(s,x,y); + backBufferGraphics.drawString(s,x,y); + } + + public void fill(Shape s) + { + graphics.fill(s); + backBufferGraphics.fill(s); + } + + public Color getBackground() + { + return graphics.getBackground(); + } + + public Composite getComposite() + { + return graphics.getComposite(); + } + + public GraphicsConfiguration getDeviceConfiguration() + { + return graphics.getDeviceConfiguration(); + } + + public FontRenderContext getFontRenderContext() + { + return graphics.getFontRenderContext(); + } + + public Paint getPaint() + { + return graphics.getPaint(); + } + + public Object getRenderingHint(RenderingHints.Key hintKey) + { + return graphics.getRenderingHint(hintKey); + } + + public RenderingHints getRenderingHints() + { + return graphics.getRenderingHints(); + } + + public Stroke getStroke() + { + return graphics.getStroke(); + } + + public AffineTransform getTransform() + { + return graphics.getTransform(); + } + + public boolean hit(Rectangle rect, Shape s, boolean onStroke) + { + return graphics.hit(rect,s,onStroke); + } + + public void rotate(double theta) + { + graphics.rotate(theta); + backBufferGraphics.rotate(theta); + } + + public void rotate(double theta, double x, double y) + { + graphics.rotate(theta,x,y); + backBufferGraphics.rotate(theta,x,y); + } + + public void scale(double sx, double sy) + { + graphics.scale(sx,sy); + backBufferGraphics.scale(sx,sy); + } + + public void setBackground(Color color) + { + graphics.setBackground(color); + backBufferGraphics.setBackground(color); + } + + public void setComposite(Composite comp) + { + graphics.setComposite(comp); + backBufferGraphics.setComposite(comp); + } + + public void setPaint(Paint paint) + { + graphics.setPaint(paint); + backBufferGraphics.setPaint(paint); + } + + public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) + { + graphics.setRenderingHint(hintKey,hintValue); + backBufferGraphics.setRenderingHint(hintKey,hintValue); + } + + public void setRenderingHints(Map hints) + { + graphics.setRenderingHints(hints); + backBufferGraphics.setRenderingHints(hints); + } + + public void setStroke(Stroke s) + { + graphics.setStroke(s); + backBufferGraphics.setStroke(s); + } + + public void setTransform(AffineTransform Tx) + { + graphics.setTransform(Tx); + backBufferGraphics.setTransform(Tx); + } + + public void shear(double shx, double shy) + { + graphics.shear(shx,shy); + backBufferGraphics.shear(shx,shy); + } + + public void transform(AffineTransform Tx) + { + graphics.transform(Tx); + backBufferGraphics.transform(Tx); + } + + public void translate(double tx, double ty) + { + graphics.translate(tx,ty); + backBufferGraphics.translate(tx,ty); + } +} |