/* |
|
* Copyright (c) 1998, 2008, Oracle and/or its affiliates. All rights reserved. |
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
|
* |
|
* This code is free software; you can redistribute it and/or modify it |
|
* under the terms of the GNU General Public License version 2 only, as |
|
* published by the Free Software Foundation. Oracle designates this |
|
* particular file as subject to the "Classpath" exception as provided |
|
* by Oracle in the LICENSE file that accompanied this code. |
|
* |
|
* This code 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 General Public License |
|
* version 2 for more details (a copy is included in the LICENSE file that |
|
* accompanied this code). |
|
* |
|
* You should have received a copy of the GNU General Public License version |
|
* 2 along with this work; if not, write to the Free Software Foundation, |
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
|
* |
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
|
* or visit www.oracle.com if you need additional information or have any |
|
* questions. |
|
*/ |
|
/* ******************************************************************** |
|
********************************************************************** |
|
********************************************************************** |
|
*** COPYRIGHT (c) Eastman Kodak Company, 1997 *** |
|
*** As an unpublished work pursuant to Title 17 of the United *** |
|
*** States Code. All rights reserved. *** |
|
********************************************************************** |
|
********************************************************************** |
|
**********************************************************************/ |
|
package java.awt.image.renderable; |
|
import java.util.*; |
|
import java.awt.geom.*; |
|
import java.awt.*; |
|
import java.awt.image.*; |
|
/** |
|
* A RenderContext encapsulates the information needed to produce a |
|
* specific rendering from a RenderableImage. It contains the area to |
|
* be rendered specified in rendering-independent terms, the |
|
* resolution at which the rendering is to be performed, and hints |
|
* used to control the rendering process. |
|
* |
|
* <p> Users create RenderContexts and pass them to the |
|
* RenderableImage via the createRendering method. Most of the methods of |
|
* RenderContexts are not meant to be used directly by applications, |
|
* but by the RenderableImage and operator classes to which it is |
|
* passed. |
|
* |
|
* <p> The AffineTransform parameter passed into and out of this class |
|
* are cloned. The RenderingHints and Shape parameters are not |
|
* necessarily cloneable and are therefore only reference copied. |
|
* Altering RenderingHints or Shape instances that are in use by |
|
* instances of RenderContext may have undesired side effects. |
|
*/ |
|
public class RenderContext implements Cloneable { |
|
/** Table of hints. May be null. */ |
|
RenderingHints hints; |
|
/** Transform to convert user coordinates to device coordinates. */ |
|
AffineTransform usr2dev; |
|
/** The area of interest. May be null. */ |
|
Shape aoi; |
|
// Various constructors that allow different levels of |
|
// specificity. If the Shape is missing the whole renderable area |
|
// is assumed. If hints is missing no hints are assumed. |
|
/** |
|
* Constructs a RenderContext with a given transform. |
|
* The area of interest is supplied as a Shape, |
|
* and the rendering hints are supplied as a RenderingHints object. |
|
* |
|
* @param usr2dev an AffineTransform. |
|
* @param aoi a Shape representing the area of interest. |
|
* @param hints a RenderingHints object containing rendering hints. |
|
*/ |
|
public RenderContext(AffineTransform usr2dev, |
|
Shape aoi, |
|
RenderingHints hints) { |
|
this.hints = hints; |
|
this.aoi = aoi; |
|
this.usr2dev = (AffineTransform)usr2dev.clone(); |
|
} |
|
/** |
|
* Constructs a RenderContext with a given transform. |
|
* The area of interest is taken to be the entire renderable area. |
|
* No rendering hints are used. |
|
* |
|
* @param usr2dev an AffineTransform. |
|
*/ |
|
public RenderContext(AffineTransform usr2dev) { |
|
this(usr2dev, null, null); |
|
} |
|
/** |
|
* Constructs a RenderContext with a given transform and rendering hints. |
|
* The area of interest is taken to be the entire renderable area. |
|
* |
|
* @param usr2dev an AffineTransform. |
|
* @param hints a RenderingHints object containing rendering hints. |
|
*/ |
|
public RenderContext(AffineTransform usr2dev, RenderingHints hints) { |
|
this(usr2dev, null, hints); |
|
} |
|
/** |
|
* Constructs a RenderContext with a given transform and area of interest. |
|
* The area of interest is supplied as a Shape. |
|
* No rendering hints are used. |
|
* |
|
* @param usr2dev an AffineTransform. |
|
* @param aoi a Shape representing the area of interest. |
|
*/ |
|
public RenderContext(AffineTransform usr2dev, Shape aoi) { |
|
this(usr2dev, aoi, null); |
|
} |
|
/** |
|
* Gets the rendering hints of this <code>RenderContext</code>. |
|
* @return a <code>RenderingHints</code> object that represents |
|
* the rendering hints of this <code>RenderContext</code>. |
|
* @see #setRenderingHints(RenderingHints) |
|
*/ |
|
public RenderingHints getRenderingHints() { |
|
return hints; |
|
} |
|
/** |
|
* Sets the rendering hints of this <code>RenderContext</code>. |
|
* @param hints a <code>RenderingHints</code> object that represents |
|
* the rendering hints to assign to this <code>RenderContext</code>. |
|
* @see #getRenderingHints |
|
*/ |
|
public void setRenderingHints(RenderingHints hints) { |
|
this.hints = hints; |
|
} |
|
/** |
|
* Sets the current user-to-device AffineTransform contained |
|
* in the RenderContext to a given transform. |
|
* |
|
* @param newTransform the new AffineTransform. |
|
* @see #getTransform |
|
*/ |
|
public void setTransform(AffineTransform newTransform) { |
|
usr2dev = (AffineTransform)newTransform.clone(); |
|
} |
|
/** |
|
* Modifies the current user-to-device transform by prepending another |
|
* transform. In matrix notation the operation is: |
|
* <pre> |
|
* [this] = [modTransform] x [this] |
|
* </pre> |
|
* |
|
* @param modTransform the AffineTransform to prepend to the |
|
* current usr2dev transform. |
|
* @since 1.3 |
|
*/ |
|
public void preConcatenateTransform(AffineTransform modTransform) { |
|
this.preConcetenateTransform(modTransform); |
|
} |
|
/** |
|
* Modifies the current user-to-device transform by prepending another |
|
* transform. In matrix notation the operation is: |
|
* <pre> |
|
* [this] = [modTransform] x [this] |
|
* </pre> |
|
* This method does the same thing as the preConcatenateTransform |
|
* method. It is here for backward compatibility with previous releases |
|
* which misspelled the method name. |
|
* |
|
* @param modTransform the AffineTransform to prepend to the |
|
* current usr2dev transform. |
|
* @deprecated replaced by |
|
* <code>preConcatenateTransform(AffineTransform)</code>. |
|
*/ |
|
@Deprecated |
|
public void preConcetenateTransform(AffineTransform modTransform) { |
|
usr2dev.preConcatenate(modTransform); |
|
} |
|
/** |
|
* Modifies the current user-to-device transform by appending another |
|
* transform. In matrix notation the operation is: |
|
* <pre> |
|
* [this] = [this] x [modTransform] |
|
* </pre> |
|
* |
|
* @param modTransform the AffineTransform to append to the |
|
* current usr2dev transform. |
|
* @since 1.3 |
|
*/ |
|
public void concatenateTransform(AffineTransform modTransform) { |
|
this.concetenateTransform(modTransform); |
|
} |
|
/** |
|
* Modifies the current user-to-device transform by appending another |
|
* transform. In matrix notation the operation is: |
|
* <pre> |
|
* [this] = [this] x [modTransform] |
|
* </pre> |
|
* This method does the same thing as the concatenateTransform |
|
* method. It is here for backward compatibility with previous releases |
|
* which misspelled the method name. |
|
* |
|
* @param modTransform the AffineTransform to append to the |
|
* current usr2dev transform. |
|
* @deprecated replaced by |
|
* <code>concatenateTransform(AffineTransform)</code>. |
|
*/ |
|
@Deprecated |
|
public void concetenateTransform(AffineTransform modTransform) { |
|
usr2dev.concatenate(modTransform); |
|
} |
|
/** |
|
* Gets the current user-to-device AffineTransform. |
|
* |
|
* @return a reference to the current AffineTransform. |
|
* @see #setTransform(AffineTransform) |
|
*/ |
|
public AffineTransform getTransform() { |
|
return (AffineTransform)usr2dev.clone(); |
|
} |
|
/** |
|
* Sets the current area of interest. The old area is discarded. |
|
* |
|
* @param newAoi The new area of interest. |
|
* @see #getAreaOfInterest |
|
*/ |
|
public void setAreaOfInterest(Shape newAoi) { |
|
aoi = newAoi; |
|
} |
|
/** |
|
* Gets the ares of interest currently contained in the |
|
* RenderContext. |
|
* |
|
* @return a reference to the area of interest of the RenderContext, |
|
* or null if none is specified. |
|
* @see #setAreaOfInterest(Shape) |
|
*/ |
|
public Shape getAreaOfInterest() { |
|
return aoi; |
|
} |
|
/** |
|
* Makes a copy of a RenderContext. The area of interest is copied |
|
* by reference. The usr2dev AffineTransform and hints are cloned, |
|
* while the area of interest is copied by reference. |
|
* |
|
* @return the new cloned RenderContext. |
|
*/ |
|
public Object clone() { |
|
RenderContext newRenderContext = new RenderContext(usr2dev, |
|
aoi, hints); |
|
return newRenderContext; |
|
} |
|
} |