blob: 04a7319de851d915cadc8b9e47a50014f15ede05 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package java.awt;
import java.awt.font.GlyphVector;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
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.Map;
/**
* The Graphics2D class extends Graphics class and provides more capabilities
* for rendering text, images, shapes. This provides methods to perform
* transformation of coordinate system, color management, and text layout. The
* following attributes exist for rendering:
* <ul>
* <li>Color - current Graphics2D color;</li>
* <li>Font - current Graphics2D font;</li>
* <li>Stroke - pen with a width of 1 pixel;</li>
* <li>Transform - current Graphics2D Transformation;</li>
* <li>Composite - alpha compositing rules for combining source and destination
* colors.</li>
* </ul>
*
* @since Android 1.0
*/
public abstract class Graphics2D extends Graphics {
/**
* Instantiates a new Graphics2D object. This constructor should never be
* called directly.
*/
protected Graphics2D() {
super();
}
/**
* Adds preferences for the rendering algorithms. The preferences are
* arbitrary and specified by Map objects. All specified by Map object
* preferences can be modified.
*
* @param hints
* the rendering hints.
*/
public abstract void addRenderingHints(Map<?, ?> hints);
/**
* Intersects the current clipping area with the specified Shape and the
* result becomes a new clipping area. If current clipping area is not
* defined, the Shape becomes the new clipping area. No rendering operations
* are allowed outside the clipping area.
*
* @param s
* the specified Shape object which will be intersected with
* current clipping area.
*/
public abstract void clip(Shape s);
/**
* Draws the outline of the specified Shape.
*
* @param s
* the Shape which outline is drawn.
*/
public abstract void draw(Shape s);
/**
* Draws the specified GlyphVector object's text at the point x, y.
*
* @param g
* the GlyphVector object to be drawn.
* @param x
* the X position where the GlyphVector's text should be
* rendered.
* @param y
* the Y position where the GlyphVector's text should be
* rendered.
*/
public abstract void drawGlyphVector(GlyphVector g, float x, float y);
/**
* Draws the BufferedImage -- modified according to the operation
* BufferedImageOp -- at the point x, y.
*
* @param img
* the BufferedImage to be rendered.
* @param op
* the filter to be applied to the image before rendering.
* @param x
* the X coordinate of the point where the image's upper left
* corner will be placed.
* @param y
* the Y coordinate of the point where the image's upper left
* corner will be placed.
*/
public abstract void drawImage(BufferedImage img, BufferedImageOp op, int x, int y);
/**
* Draws BufferedImage transformed from image space into user space
* according to the AffineTransform xform and notifies the ImageObserver.
*
* @param img
* the BufferedImage to be rendered.
* @param xform
* the affine transformation from the image to the user space.
* @param obs
* the ImageObserver to be notified about the image conversion.
* @return true, if the image is successfully loaded and rendered, or it's
* null, otherwise false.
*/
public abstract boolean drawImage(Image img, AffineTransform xform, ImageObserver obs);
/**
* Draws a RenderableImage which is transformed from image space into user
* according to the AffineTransform xform.
*
* @param img
* the RenderableImage to be rendered.
* @param xform
* the affine transformation from image to user space.
*/
public abstract void drawRenderableImage(RenderableImage img, AffineTransform xform);
/**
* Draws a RenderedImage which is transformed from image space into user
* according to the AffineTransform xform.
*
* @param img
* the RenderedImage to be rendered.
* @param xform
* the affine transformation from image to user space.
*/
public abstract void drawRenderedImage(RenderedImage img, AffineTransform xform);
/**
* Draws the string specified by the AttributedCharacterIterator. The first
* character's position is specified by the X, Y parameters.
*
* @param iterator
* whose text is drawn.
* @param x
* the X position where the first character is drawn.
* @param y
* the Y position where the first character is drawn.
*/
public abstract void drawString(AttributedCharacterIterator iterator, float x, float y);
/**
* Draws the string specified by the AttributedCharacterIterator. The first
* character's position is specified by the X, Y parameters.
*
* @param iterator
* whose text is drawn.
* @param x
* the X position where the first character is drawn.
* @param y
* the Y position where the first character is drawn.
* @see java.awt.Graphics#drawString(AttributedCharacterIterator, int, int)
*/
@Override
public abstract void drawString(AttributedCharacterIterator iterator, int x, int y);
/**
* Draws the String whose the first character position is specified by the
* parameters X, Y.
*
* @param s
* the String to be drawn.
* @param x
* the X position of the first character.
* @param y
* the Y position of the first character.
*/
public abstract void drawString(String s, float x, float y);
/**
* Draws the String whose the first character coordinates are specified by
* the parameters X, Y.
*
* @param str
* the String to be drawn.
* @param x
* the X coordinate of the first character.
* @param y
* the Y coordinate of the first character.
* @see java.awt.Graphics#drawString(String, int, int)
*/
@Override
public abstract void drawString(String str, int x, int y);
/**
* Fills the interior of the specified Shape.
*
* @param s
* the Shape to be filled.
*/
public abstract void fill(Shape s);
/**
* Gets the background color.
*
* @return the current background color.
*/
public abstract Color getBackground();
/**
* Gets the current composite of the Graphics2D.
*
* @return the current composite which specifies the compositing style.
*/
public abstract Composite getComposite();
/**
* Gets the device configuration.
*
* @return the device configuration.
*/
public abstract GraphicsConfiguration getDeviceConfiguration();
/**
* Gets the rendering context of the Font.
*
* @return the FontRenderContext.
*/
public abstract FontRenderContext getFontRenderContext();
/**
* Gets the current Paint of Graphics2D.
*
* @return the current Paint of Graphics2D.
*/
public abstract Paint getPaint();
/**
* Gets the value of single preference for specified key.
*
* @param key
* the specified key of the rendering hint.
* @return the value of rendering hint for specified key.
*/
public abstract Object getRenderingHint(RenderingHints.Key key);
/**
* Gets the set of the rendering preferences as a collection of key/value
* pairs.
*
* @return the RenderingHints which contains the rendering preferences.
*/
public abstract RenderingHints getRenderingHints();
/**
* Gets current stroke of the Graphics2D.
*
* @return current stroke of the Graphics2D.
*/
public abstract Stroke getStroke();
/**
* Gets current affine transform of the Graphics2D.
*
* @return current AffineTransform of the Graphics2D.
*/
public abstract AffineTransform getTransform();
/**
* Determines whether or not the specified Shape intersects the specified
* Rectangle. If the onStroke parameter is true, this method checks whether
* or not the specified Shape outline intersects the specified Rectangle,
* otherwise this method checks whether or not the specified Shape's
* interior intersects the specified Rectangle.
*
* @param rect
* the specified Rectangle.
* @param s
* the Shape to check for intersection.
* @param onStroke
* the parameter determines whether or not this method checks for
* intersection of the Shape outline or of the Shape interior
* with the Rectangle.
* @return true, if there is a hit, false otherwise.
*/
public abstract boolean hit(Rectangle rect, Shape s, boolean onStroke);
/**
* Performs a rotation transform relative to current Graphics2D Transform.
* The coordinate system is rotated by the specified angle in radians
* relative to current origin.
*
* @param theta
* the angle of rotation in radians.
*/
public abstract void rotate(double theta);
/**
* Performs a translated rotation transform relative to current Graphics2D
* Transform. The coordinate system is rotated by the specified angle in
* radians relative to current origin and then moved to point (x, y). Is
* this right?
*
* @param theta
* the angle of rotation in radians.
* @param x
* the X coordinate.
* @param y
* the Y coordinate.
*/
public abstract void rotate(double theta, double x, double y);
/**
* Performs a linear scale transform relative to current Graphics2D
* Transform. The coordinate system is rescaled vertically and horizontally
* by the specified parameters.
*
* @param sx
* the scaling factor by which the X coordinate is multiplied.
* @param sy
* the scaling factor by which the Y coordinate is multiplied.
*/
public abstract void scale(double sx, double sy);
/**
* Sets a new background color for clearing rectangular areas. The clearRect
* method uses the current background color.
*
* @param color
* the new background color.
*/
public abstract void setBackground(Color color);
/**
* Sets the current composite for Graphics2D.
*
* @param comp
* the Composite object.
*/
public abstract void setComposite(Composite comp);
/**
* Sets the paint for Graphics2D.
*
* @param paint
* the Paint object.
*/
public abstract void setPaint(Paint paint);
/**
* Sets a key-value pair in the current RenderingHints map.
*
* @param key
* the key of the rendering hint to set.
* @param value
* the value to set for the rendering hint.
*/
public abstract void setRenderingHint(RenderingHints.Key key, Object value);
/**
* Replaces the current rendering hints with the specified rendering
* preferences.
*
* @param hints
* the new Map of rendering hints.
*/
public abstract void setRenderingHints(Map<?, ?> hints);
/**
* Sets the stroke for the Graphics2D.
*
* @param s
* the Stroke object.
*/
public abstract void setStroke(Stroke s);
/**
* Overwrite the current Transform of the Graphics2D. The specified
* Transform should be received from the getTransform() method and should be
* used only for restoring the original Graphics2D transform after calling
* draw or fill methods.
*
* @param Tx
* the specified Transform.
*/
public abstract void setTransform(AffineTransform Tx);
/**
* Performs a shear transform relative to current Graphics2D Transform. The
* coordinate system is shifted by the specified multipliers relative to
* current position.
*
* @param shx
* the multiplier by which the X coordinates shift position along
* X axis as a function of Y coordinates.
* @param shy
* the multiplier by which the Y coordinates shift position along
* Y axis as a function of X coordinates.
*/
public abstract void shear(double shx, double shy);
/**
* Concatenates the AffineTransform object with current Transform of this
* Graphics2D. The transforms are applied in reverse order with the last
* specified transform applied first and the next transformation applied to
* the result of previous transformation. More precisely, if Cx is the
* current Graphics2D transform, the transform method's result with Tx as
* the parameter is the transformation Rx, where Rx(p) = Cx(Tx(p)), for p -
* a point in current coordinate system. Rx becomes the current Transform
* for this Graphics2D.
*
* @param Tx
* the AffineTransform object to be concatenated with current
* Transform.
*/
public abstract void transform(AffineTransform Tx);
/**
* Performs a translate transform relative to current Graphics2D Transform.
* The coordinate system is moved by the specified distance relative to
* current position.
*
* @param tx
* the translation distance along the X axis.
* @param ty
* the translation distance along the Y axis.
*/
public abstract void translate(double tx, double ty);
/**
* Moves the origin Graphics2D Transform to the point with x, y coordinates
* in current coordinate system. The new origin of coordinate system is
* moved to the (x, y) point accordingly. All rendering and transform
* operations are performed relative to this new origin.
*
* @param x
* the X coordinate.
* @param y
* the Y coordinate.
* @see java.awt.Graphics#translate(int, int)
*/
@Override
public abstract void translate(int x, int y);
/**
* Fills a 3D rectangle with the current color. The rectangle is specified
* by its width, height, and top left corner coordinates.
*
* @param x
* the X coordinate of the rectangle's top left corner.
* @param y
* the Y coordinate of the rectangle's top left corner.
* @param width
* the width of rectangle.
* @param height
* the height of rectangle.
* @param raised
* a boolean value that determines whether the rectangle is drawn
* as raised or indented.
* @see java.awt.Graphics#fill3DRect(int, int, int, int, boolean)
*/
@Override
public void fill3DRect(int x, int y, int width, int height, boolean raised) {
// According to the spec, color should be used instead of paint,
// so Graphics.fill3DRect resets paint and
// it should be restored after the call
Paint savedPaint = getPaint();
super.fill3DRect(x, y, width, height, raised);
setPaint(savedPaint);
}
/**
* Draws the highlighted outline of a rectangle.
*
* @param x
* the X coordinate of the rectangle's top left corner.
* @param y
* the Y coordinate of the rectangle's top left corner.
* @param width
* the width of rectangle.
* @param height
* the height of rectangle.
* @param raised
* a boolean value that determines whether the rectangle is drawn
* as raised or indented.
* @see java.awt.Graphics#draw3DRect(int, int, int, int, boolean)
*/
@Override
public void draw3DRect(int x, int y, int width, int height, boolean raised) {
// According to the spec, color should be used instead of paint,
// so Graphics.draw3DRect resets paint and
// it should be restored after the call
Paint savedPaint = getPaint();
super.draw3DRect(x, y, width, height, raised);
setPaint(savedPaint);
}
}