| /* |
| * 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}. |
| * @return a {@code RenderingHints} object that represents |
| * the rendering hints of this {@code RenderContext}. |
| * @see #setRenderingHints(RenderingHints) |
| */ |
| public RenderingHints getRenderingHints() { |
| return hints; |
| } |
| |
| /** |
| * Sets the rendering hints of this {@code RenderContext}. |
| * @param hints a {@code RenderingHints} object that represents |
| * the rendering hints to assign to this {@code RenderContext}. |
| * @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)}. |
| */ |
| @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)}. |
| */ |
| @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; |
| } |
| } |