diff options
| author | Audrius Meskauskas <audriusa@Bioinformatics.org> | 2006-05-30 07:11:58 +0000 |
|---|---|---|
| committer | Audrius Meskauskas <audriusa@Bioinformatics.org> | 2006-05-30 07:11:58 +0000 |
| commit | d2c6cc6950c3274e7c45fa40f41f8ddb4918275a (patch) | |
| tree | 79db15d4725bf4956bdd25885a9c50aafeab6a02 /gnu/java/awt/peer/gtk/CairoGraphics2D.java | |
| parent | 39430f75c8e744cc7916b8b1365c335a67fdf905 (diff) | |
| download | classpath-d2c6cc6950c3274e7c45fa40f41f8ddb4918275a.tar.gz | |
2006-05-29 Audrius Meskauskas <AudriusA@Bioinformatics.org>
* gnu/java/awt/peer/gtk/CairoGraphics2D.java
(copy): Do not reuse the fd field.
(setColor): Do not set the color if the parameter
matches fd field.
(translate(double, double): Rewritten to use
AffineTransform.translate.
Diffstat (limited to 'gnu/java/awt/peer/gtk/CairoGraphics2D.java')
| -rw-r--r-- | gnu/java/awt/peer/gtk/CairoGraphics2D.java | 47 |
1 files changed, 38 insertions, 9 deletions
diff --git a/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/gnu/java/awt/peer/gtk/CairoGraphics2D.java index 204805cce..64a86c108 100644 --- a/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -219,12 +219,14 @@ public abstract class CairoGraphics2D extends Graphics2D paint = g.paint; stroke = g.stroke; setRenderingHints(g.hints); + + Color foreground; if (g.fg.getAlpha() != -1) - fg = new Color(g.fg.getRed(), g.fg.getGreen(), g.fg.getBlue(), + foreground = new Color(g.fg.getRed(), g.fg.getGreen(), g.fg.getBlue(), g.fg.getAlpha()); else - fg = new Color(g.fg.getRGB()); + foreground = new Color(g.fg.getRGB()); if (g.bg != null) { @@ -247,7 +249,7 @@ public abstract class CairoGraphics2D extends Graphics2D font = g.font; - setColor(fg); + setColor(foreground); setBackground(bg); setPaint(paint); setStroke(stroke); @@ -467,11 +469,35 @@ public abstract class CairoGraphics2D extends Graphics2D transform(AffineTransform.getScaleInstance(sx, sy)); } + /** + * Translate the system of the co-ordinates. As translation is a frequent + * operation, it is done in an optimised way, unlike scaling and rotating. + */ public void translate(double tx, double ty) { - transform(AffineTransform.getTranslateInstance(tx, ty)); - } + if (transform != null) + transform.translate(tx, ty); + else + transform = AffineTransform.getTranslateInstance(tx, ty); + + if (clip != null) + { + // FIXME: this should actuall try to transform the shape + // rather than degrade to bounds. + Rectangle2D r; + if (clip instanceof Rectangle2D) + r = (Rectangle2D) clip; + else + r = clip.getBounds2D(); + + r.setRect(r.getX() - tx, r.getY() - ty, r.getWidth(), r.getHeight()); + clip = r; + } + + setTransform(transform); + } + public void translate(int x, int y) { translate((double) x, (double) y); @@ -610,10 +636,13 @@ public abstract class CairoGraphics2D extends Graphics2D if (c == null) c = Color.BLACK; - fg = c; - paint = c; - cairoSetRGBAColor(fg.getRed() / 255.0, fg.getGreen() / 255.0, - fg.getBlue() / 255.0, fg.getAlpha() / 255.0); + if (! c.equals(fg)) + { + fg = c; + paint = c; + cairoSetRGBAColor(fg.getRed() / 255.0, fg.getGreen() / 255.0, + fg.getBlue() / 255.0, fg.getAlpha() / 255.0); + } } public Color getColor() |
