Delegates almost all work to a state object, that allows us to
hot-swap rendering strategies based on state changes inflicted on
this Graphics object. This class keeps track of properties that are
not affected by the state, (such as clip shape,
foreground/background color, font, etc.).
The far front-end of the rendering pipeline consists of the
Graphics2D API. In the far back-end, lies the native graphics
libraries. In most cases the native graphics libraries only have
direct support for a subset of the properties of Graphics2D. To
make up missing features in the native graphics libraries, the
pipeline between the front-end and the back-end need to translate
drawing request to primitive operations that are supported by the
back-end. E.g. for X11, drawing a straight line will translate to
an XDrawLine, drawing a bezier curve will trigger flattening of the
curve and will result in a call to XDrawLines.
This is the basic strategy for the rendering pipeline: Whenever
a graphics property change occurs, that causes the current pipeline
to be insufficient, amend or replace parts of the pipeline so that
the pipeline will once again be able to translate requests to the
set of primitives supported by the native graphics library.
Most graphics libraries share common subsets of
functionality. To be able to reuse pieces of the rendering pipeline
for several backends, we define interfaces that describe subsets of
characteristics supported by the backends. A wrapper for the native
library can implement several interfaces to describe its range of
functionality.
Typically, most painting is done with a graphics object with
simple properties. Unless one is using a complex Look & Feel, the
painting of Swing components will never require affine transforms,
alpha blending, non-rectangular clipping, etc. When graphics
objects are created, they start off in a state where all the
properties are simple. Most graphics objects experience only
trivial property changes, and never leave this simple state. It is
therefore wise to ensure that the rendering pipeline for this
initial state is lean and as much as possible plugs directly into
the backend.
The initial state for graphics object of most raster displays
would call for two levels of indirection:
Graphics2D object ---> IntegerGraphicsState ---> DirectRasterGraphics
clearRect
public void clearRect(int x,
int y,
int width,
int height)
Clears the specified rectangle.
- clearRect in interface Graphics
x
- The X coordinate of the upper left corner of the clear rect.y
- The Y coordinate of the upper left corner of the clear rect.width
- The width of the clear rect.height
- The height of the clear rect.
clipRect
public void clipRect(int x,
int y,
int width,
int height)
Sets the clipping region to the intersection of the current clipping
region and the rectangle determined by the specified parameters.
- clipRect in interface Graphics
x
- The X coordinate of the upper left corner of the intersect rect.y
- The Y coordinate of the upper left corner of the intersect rect.width
- The width of the intersect rect.height
- The height of the intersect rect.
clone
public Object clone()
This method may be called to create a new copy of the
Object. The typical behavior is as follows:
o == o.clone()
is falseo.getClass() == o.clone().getClass()
is trueo.equals(o)
is true
However, these are not strict requirements, and may
be violated if necessary. Of the three requirements, the
last is the most commonly violated, particularly if the
subclass does not override
Object.equals(Object)
.
If the Object you call clone() on does not implement
Cloneable
(which is a placeholder interface), then
a CloneNotSupportedException is thrown. Notice that
Object does not implement Cloneable; this method exists
as a convenience for subclasses that do.
Object's implementation of clone allocates space for the
new Object using the correct class, without calling any
constructors, and then fills in all of the new field values
with the old field values. Thus, it is a shallow copy.
However, subclasses are permitted to make a deep copy.
All array types implement Cloneable, and override
this method as follows (it should never fail):
public Object clone()
{
try
{
super.clone();
}
catch (CloneNotSupportedException e)
{
throw new InternalError(e.getMessage());
}
}
- clone in interface Object
copyArea
public void copyArea(int x,
int y,
int width,
int height,
int dx,
int dy)
Copies the specified rectangle to the specified offset location.
- copyArea in interface Graphics
x
- The X coordinate of the upper left corner of the copy rect.y
- The Y coordinate of the upper left corner of the copy rect.width
- The width of the copy rect.height
- The height of the copy rect.dx
- The offset from the X value to start drawing.dy
- The offset from the Y value to start drawing.
dispose
public void dispose()
Free any resources held by this graphics context immediately instead
of waiting for the object to be garbage collected and finalized.
- dispose in interface Graphics
drawArc
public void drawArc(int x,
int y,
int width,
int height,
int startAngle,
int arcAngle)
Draws an arc using the specified bounding rectangle and the specified
angle parameter. The arc is centered at the center of the rectangle.
The arc starts at the arcAngle position and extend for arcAngle
degrees. The degree origin is at the 3 o'clock position.
- drawArc in interface Graphics
x
- The X coordinate of the upper left corner of the rect.y
- The Y coordinate of the upper left corner of the rect.width
- The width of the rect.height
- The height of the rect.arcAngle
- The extent of the arc.
drawImage
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)
FIXME: Write Javadocs for this when you understand it.
- drawImage in interface Graphics
drawImage
public boolean drawImage(Image img,
int dx1,
int dy1,
int dx2,
int dy2,
int sx1,
int sy1,
int sx2,
int sy2,
ImageObserver observer)
FIXME: Write Javadocs for this when you understand it.
- drawImage in interface Graphics
drawImage
public boolean drawImage(Image img,
int x,
int y,
int width,
int height,
Color bgcolor,
ImageObserver observer)
Draws all of the image that is available and returns. The image
is scaled to fit in the specified rectangle. If the image
is not completely loaded, false
is returned and
the specified iamge observer is notified as more data becomes
available.
- drawImage in interface Graphics
x
- The X coordinate of the point to draw at.y
- The Y coordinate of the point to draw at.width
- The width of the rectangle to draw in.height
- The height of the rectangle to draw in.bgcolor
- The background color to use for the image.observer
- The image observer to notify as data becomes available.
true
if all the image data is available,
false
otherwise.
drawImage
public boolean drawImage(Image img,
int x,
int y,
int width,
int height,
ImageObserver observer)
Draws all of the image that is available and returns. The image
is scaled to fit in the specified rectangle. If the image
is not completely loaded, false
is returned and
the specified iamge observer is notified as more data becomes
available.
- drawImage in interface Graphics
x
- The X coordinate of the point to draw at.y
- The Y coordinate of the point to draw at.width
- The width of the rectangle to draw in.height
- The height of the rectangle to draw in.observer
- The image observer to notify as data becomes available.
true
if all the image data is available,
false
otherwise.
drawImage
public boolean drawImage(Image img,
int x,
int y,
Color bgcolor,
ImageObserver observer)
Draws all of the image that is available and returns. If the image
is not completely loaded, false
is returned and
the specified iamge observer is notified as more data becomes
available.
- drawImage in interface Graphics
x
- The X coordinate of the point to draw at.y
- The Y coordinate of the point to draw at.bgcolor
- The background color to use for the image.observer
- The image observer to notify as data becomes available.
true
if all the image data is available,
false
otherwise.
drawImage
public boolean drawImage(Image image,
int x,
int y,
ImageObserver observer)
Draws all of the image that is available and returns. If the image
is not completely loaded, false
is returned and
the specified iamge observer is notified as more data becomes
available.
- drawImage in interface Graphics
image
- The image to draw.x
- The X coordinate of the point to draw at.y
- The Y coordinate of the point to draw at.observer
- The image observer to notify as data becomes available.
true
if all the image data is available,
false
otherwise.
drawLine
public void drawLine(int x1,
int y1,
int x2,
int y2)
Draws a line between the two specified points.
- drawLine in interface Graphics
x1
- The X coordinate of the first point.y1
- The Y coordinate of the first point.x2
- The X coordinate of the second point.y2
- The Y coordinate of the second point.
drawOval
public void drawOval(int x,
int y,
int width,
int height)
Draws an oval that just fits within the specified rectangle.
- drawOval in interface Graphics
x
- The X coordinate of the upper left corner of the rect.y
- The Y coordinate of the upper left corner of the rect.width
- The width of the rect.height
- The height of the rect.
drawPolygon
public void drawPolygon(int[] xPoints,
int[] yPoints,
int nPoints)
drawPolyline
public void drawPolyline(int[] xPoints,
int[] yPoints,
int nPoints)
drawRoundRect
public void drawRoundRect(int x,
int y,
int width,
int height,
int arcWidth,
int arcHeight)
Draws the outline of the specified rectangle with rounded cornders.
- drawRoundRect in interface Graphics
x
- The X coordinate of the upper left corner of the draw rect.y
- The Y coordinate of the upper left corner of the draw rect.width
- The width of the draw rect.height
- The height of the draw rect.arcWidth
- The width of the corner arcs.arcHeight
- The height of the corner arcs.
drawString
public void drawString(String text,
int x,
int y)
Draws the specified string starting at the specified point.
- drawString in interface Graphics2D
x
- The X coordinate of the point to draw at.y
- The Y coordinate of the point to draw at.
fillArc
public void fillArc(int x,
int y,
int width,
int height,
int startAngle,
int arcAngle)
Fills the arc define by the specified bounding rectangle and the specified
angle parameter. The arc is centered at the center of the rectangle.
The arc starts at the arcAngle position and extend for arcAngle
degrees. The degree origin is at the 3 o'clock position.
- fillArc in interface Graphics
x
- The X coordinate of the upper left corner of the rect.y
- The Y coordinate of the upper left corner of the rect.width
- The width of the rect.height
- The height of the rect.arcAngle
- The extent of the arc.
fillOval
public void fillOval(int x,
int y,
int width,
int height)
Fills an oval that just fits within the specified rectangle.
- fillOval in interface Graphics
x
- The X coordinate of the upper left corner of the rect.y
- The Y coordinate of the upper left corner of the rect.width
- The width of the rect.height
- The height of the rect.
fillPolygon
public void fillPolygon(int[] xPoints,
int[] yPoints,
int nPoints)
fillRect
public void fillRect(int x,
int y,
int width,
int height)
Fills the area bounded by the specified rectangle.
- fillRect in interface Graphics
x
- The X coordinate of the upper left corner of the fill rect.y
- The Y coordinate of the upper left corner of the fill rect.width
- The width of the fill rect.height
- The height of the fill rect.
fillRoundRect
public void fillRoundRect(int x,
int y,
int width,
int height,
int arcWidth,
int arcHeight)
Fills the specified rectangle with rounded cornders.
- fillRoundRect in interface Graphics
x
- The X coordinate of the upper left corner of the fill rect.y
- The Y coordinate of the upper left corner of the fill rect.width
- The width of the fill rect.height
- The height of the fill rect.arcWidth
- The width of the corner arcs.arcHeight
- The height of the corner arcs.
getClip
public Shape getClip()
Returns the current clipping region as a Shape
object.
- getClip in interface Graphics
- The clipping region as a
Shape
.
setClip
public void setClip(int x,
int y,
int width,
int height)
Sets the clipping region to the rectangle determined by the specified
parameters.
- setClip in interface Graphics
x
- The X coordinate of the upper left corner of the rect.y
- The Y coordinate of the upper left corner of the rect.width
- The width of the rect.height
- The height of the rect.
setClip
public void setClip(Shape clip)
Sets the clipping region to the specified Shape
.
- setClip in interface Graphics
clip
- The new clipping region.
setFont
public void setFont(Font font)
Sets the font for this graphics context to the specified value.
- setFont in interface Graphics
setPaintMode
public void setPaintMode()
Sets this context into "paint" mode, where the target pixels are
completely overwritten when drawn on.
- setPaintMode in interface Graphics
setXORMode
public void setXORMode(Color altColor)
Sets this context info "XOR" mode, where the targe pixles are
XOR-ed when drawn on.
- setXORMode in interface Graphics
translate
public void translate(int x,
int y)
Translates this context so that its new origin point is the point
(x, y).
- translate in interface Graphics2D
x
- The new X coordinate of the origin.y
- The new Y coordinate of the origin.
Copyright (C) 2000, 2002, 2003 Free Software Foundation
This file is part of libgcj.
This software is copyrighted work licensed under the terms of the
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
details.