diff options
author | Francis Kung <fkung@redhat.com> | 2006-09-14 18:30:58 +0000 |
---|---|---|
committer | Francis Kung <fkung@redhat.com> | 2006-09-14 18:30:58 +0000 |
commit | 5c668921253bb3492325107edecb5a50cfb82a3f (patch) | |
tree | 909423a6f1a20c7a0d1b243a4c2af9298b286eb4 /gnu/java/awt/peer | |
parent | 76074e7e82247a39031b9031396fdad9abd3ed98 (diff) | |
download | classpath-5c668921253bb3492325107edecb5a50cfb82a3f.tar.gz |
2006-09-14 Francis Kung <fkung@redhat.com>
* gnu/java/awt/peer/gtk/CairoGraphics2D.java: Added interpolation constants.
(cairoSurfaceSetFilter): Removed method.
(drawImage): Pass interpolation type as argument to drawing methods.
(drawPixels): Added interpolation parameter.
(drawRaster): Pass interpolation type as argument to drawing method.
(getInterpolation): New method.
(setRenderingHint): Store hints, but do not set interpolation in cairo.
(setRenderingHints): Store hints, but do not set interpolation in cairo.
* gnu/java/awt/peer/gtk/CairoSurface.java
(drawSurface): Added interpolation parameter.
(nativeDrawSurface): Added interpolation parameter.
* include/gnu_java_awt_peer_gtk_CairoGraphics2D.h
(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels): Added interpolation
parameter.
(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter): Removed.
* native/jni/gtk-peer/cairographics2d.h
(java_awt_rendering_hints_filter): Added bicubic interpolation constant.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c
(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_drawPixels): Added interpolation
parameter.
(Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSurfaceSetFilter): Removed.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
(Java_gnu_java_awt_peer_gtk_CairoSurface_nativeDrawSurface): Added
interpolation parameter.
Diffstat (limited to 'gnu/java/awt/peer')
-rw-r--r-- | gnu/java/awt/peer/gtk/CairoGraphics2D.java | 97 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/CairoSurface.java | 8 |
2 files changed, 49 insertions, 56 deletions
diff --git a/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/gnu/java/awt/peer/gtk/CairoGraphics2D.java index 4c5123ecb..2b8e2d265 100644 --- a/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -192,6 +192,18 @@ public abstract class CairoGraphics2D extends Graphics2D 0xFF000000); /** + * Native constants for interpolation methods. + * Note, this corresponds to an enum in native/jni/gtk-peer/cairographics2d.h + */ + public static final int INTERPOLATION_NEAREST = 0, + INTERPOLATION_BILINEAR = 1, + INTERPOLATION_BICUBIC = 5, + ALPHA_INTERPOLATION_SPEED = 2, + ALPHA_INTERPOLATION_QUALITY = 3, + ALPHA_INTERPOLATION_DEFAULT = 4; + // TODO: Does ALPHA_INTERPOLATION really correspond to CAIRO_FILTER_FAST/BEST/GOOD? + + /** * Constructor does nothing. */ public CairoGraphics2D() @@ -311,7 +323,8 @@ public abstract class CairoGraphics2D extends Graphics2D * @param i2u - affine transform array */ private native void drawPixels(long pointer, int[] pixels, int w, int h, - int stride, double[] i2u, double alpha); + int stride, double[] i2u, double alpha, + int interpolation); private native void setGradient(long pointer, double x1, double y1, double x2, double y2, @@ -443,11 +456,6 @@ public abstract class CairoGraphics2D extends Graphics2D private native void cairoResetClip(long pointer); /** - * Set interpolation types - */ - private native void cairoSurfaceSetFilter(long pointer, int filter); - - /** * Draws a line from (x1,y1) to (x2,y2). * * @param pointer the native pointer @@ -1197,32 +1205,10 @@ public abstract class CairoGraphics2D extends Graphics2D ///////////////////////// RENDERING HINTS /////////////////////////////////// - /** - * FIXME- support better - */ public void setRenderingHint(RenderingHints.Key hintKey, Object hintValue) { hints.put(hintKey, hintValue); - if (hintKey.equals(RenderingHints.KEY_INTERPOLATION) - || hintKey.equals(RenderingHints.KEY_ALPHA_INTERPOLATION)) - { - if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)) - cairoSurfaceSetFilter(nativePointer, 0); - - else if (hintValue.equals(RenderingHints.VALUE_INTERPOLATION_BILINEAR)) - cairoSurfaceSetFilter(nativePointer, 1); - - else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)) - cairoSurfaceSetFilter(nativePointer, 2); - - else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY)) - cairoSurfaceSetFilter(nativePointer, 3); - - else if (hintValue.equals(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT)) - cairoSurfaceSetFilter(nativePointer, 4); - } - shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE) || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT); } @@ -1236,28 +1222,7 @@ public abstract class CairoGraphics2D extends Graphics2D { this.hints = new RenderingHints(getDefaultHints()); this.hints.add(new RenderingHints(hints)); - - if (hints.containsKey(RenderingHints.KEY_INTERPOLATION)) - { - if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)) - cairoSurfaceSetFilter(nativePointer, 0); - - else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR)) - cairoSurfaceSetFilter(nativePointer, 1); - } - - if (hints.containsKey(RenderingHints.KEY_ALPHA_INTERPOLATION)) - { - if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)) - cairoSurfaceSetFilter(nativePointer, 2); - - else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY)) - cairoSurfaceSetFilter(nativePointer, 3); - - else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT)) - cairoSurfaceSetFilter(nativePointer, 4); - } - + shiftDrawCalls = hints.containsValue(RenderingHints.VALUE_STROKE_NORMALIZE) || hints.containsValue(RenderingHints.VALUE_STROKE_DEFAULT); } @@ -1271,6 +1236,30 @@ public abstract class CairoGraphics2D extends Graphics2D { return hints; } + + private int getInterpolation() + { + if (this.hints.containsValue(RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR)) + return INTERPOLATION_NEAREST; + + else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BILINEAR)) + return INTERPOLATION_BILINEAR; + + else if (hints.containsValue(RenderingHints.VALUE_INTERPOLATION_BICUBIC)) + return INTERPOLATION_BICUBIC; + + else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_SPEED)) + return ALPHA_INTERPOLATION_SPEED; + + else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_QUALITY)) + return ALPHA_INTERPOLATION_QUALITY; + + else if (hints.containsValue(RenderingHints.VALUE_ALPHA_INTERPOLATION_DEFAULT)) + return ALPHA_INTERPOLATION_DEFAULT; + + // Do bilinear interpolation as default + return INTERPOLATION_BILINEAR; + } ///////////////////////// IMAGE. METHODS /////////////////////////////////// @@ -1337,7 +1326,8 @@ public abstract class CairoGraphics2D extends Graphics2D if(raster instanceof CairoSurface) { - ((CairoSurface)raster).drawSurface(nativePointer, i2u, alpha); + ((CairoSurface)raster).drawSurface(nativePointer, i2u, alpha, + getInterpolation()); updateColor(); return true; } @@ -1357,7 +1347,8 @@ public abstract class CairoGraphics2D extends Graphics2D int[] pixels = b.getRGB(0, 0, width, height, null, 0, width); - drawPixels(nativePointer, pixels, width, height, width, i2u, alpha); + drawPixels(nativePointer, pixels, width, height, width, i2u, alpha, + getInterpolation()); // Cairo seems to lose the current color which must be restored. updateColor(); @@ -1673,7 +1664,7 @@ public abstract class CairoGraphics2D extends Graphics2D if (comp instanceof AlphaComposite) alpha = ((AlphaComposite) comp).getAlpha(); drawPixels(nativePointer, pixels, r.getWidth(), r.getHeight(), - r.getWidth(), i2u, alpha); + r.getWidth(), i2u, alpha, getInterpolation()); // Cairo seems to lose the current color which must be restored. updateColor(); diff --git a/gnu/java/awt/peer/gtk/CairoSurface.java b/gnu/java/awt/peer/gtk/CairoSurface.java index 3bf9a9ccf..5a97c2b88 100644 --- a/gnu/java/awt/peer/gtk/CairoSurface.java +++ b/gnu/java/awt/peer/gtk/CairoSurface.java @@ -102,11 +102,13 @@ public class CairoSurface extends WritableRaster * with an affine transform given by i2u. */ public native void nativeDrawSurface(long surfacePointer, long contextPointer, - double[] i2u, double alpha); + double[] i2u, double alpha, + int interpolation); - public void drawSurface(long contextPointer, double[] i2u, double alpha) + public void drawSurface(long contextPointer, double[] i2u, double alpha, + int interpolation) { - nativeDrawSurface(surfacePointer, contextPointer, i2u, alpha); + nativeDrawSurface(surfacePointer, contextPointer, i2u, alpha, interpolation); } /** |