From 415e62e2329a7f347ee0bb0f658daa35fa929a55 Mon Sep 17 00:00:00 2001 From: Thomas Fitzsimmons Date: Fri, 27 Apr 2007 18:08:03 +0000 Subject: [PATCH] [multiple changes] 2007-03-16 Francis Kung * gnu/java/awt/peer/gtk/CairoGraphics2D.java (cairoArc): Make protected rather than private so it can be over-ridden. (cairoClip): Likewise. (cairoClosePath): Likewise. (cairoCurveTo): Likewise. (cairoDrawGlyphVector): Likewise. (cairoFill): Likewise. (cairoLineTo): Likewise. (cairoMoveTo): Likewise. (cairoNewPath): Likewise. (cairoRectangle): Likewise. (cairoResetClip): Likewise. (cairoRestore): Likewise. (cairoSave): Likewise. (cairoScale): Likewise. (cairoSetAntialias): Likewise. (cairoSetDash): Likewise. (cairoSetFillRule): Likewise. (cairoSetFont): Likewise. (cairoSetLine): Likewise. (cairoSetMatrix): Likewise. (cairoSetOperator): Likewise. (cairoSetRGBAColor): Likewise. (cairoStroke): Likewise. (drawPixels): Likewise. (init): Likewise. (setGradient): Likewise. (setPaintPixels): Likewise. (cairoDrawLine): Removed. (cairoDrawRect): Removed. (cairoFillRect): Removed. (cairoPreserveClip): Removed. (cairoRelCurveTo): Removed. (cairoRelLineTo): Removed. (cairoRelMoveTo): Removed. * gnu/java/awt/peer/gtk/ComponentGraphics.java (cairoArc): New method wrapping superclass method in locks. (cairoClip): Likewise. (cairoClosePath): Likewise. (cairoCurveTo): Likewise. (cairoDrawGlyphVector): Likewise. (cairoFill): Likewise. (cairoLineTo): Likewise. (cairoMoveTo): Likewise. (cairoNewPath): Likewise. (cairoRectangle): Likewise. (cairoResetClip): Likewise. (cairoRestore): Likewise. (cairoSave): Likewise. (cairoScale): Likewise. (cairoSetAntialias): Likewise. (cairoSetDash): Likewise. (cairoSetFillRule): Likewise. (cairoSetFont): Likewise. (cairoSetLine): Likewise. (cairoSetMatrix): Likewise. (cairoSetOperator): Likewise. (cairoSetRGBAColor): Likewise. (cairoStroke): Likewise. (disposeNative): Likewise. (drawPixels): Likewise. (init): Likewise. (setGradient): Likewise. (setPaintPixels): Likewise. (draw): Do not lock, as locking is now done in the wrapped native methods. (drawComposite): Likewise. (drawGlyphVector): Likewise. (drawImage): Likewise. (drawRenderedImage): Likewise. (fill): Likewise. (setClip): Removed. (lock): Added documentation. (unlock): Added documentation. * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h: Regenerated. * include/gnu_java_awt_peer_gtk_ComponentGraphics.h: Regenerated. * lib/gnu/java/awt/peer/gtk/ComponentGraphics.class: Regenerated. * lib/gnu/java/awt/peer/gtk/CairoGraphics2D.class: Regenerated. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine): Removed. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawRect): Removed. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFillRect): Removed. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip): Removed. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelCurveTo): Removed. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo): Removed. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelMoveTo): Removed. 2007-04-27 Thomas Fitzsimmons * gnu/java/awt/peer/gtk/CairoGraphics2D.h: Regenerate. * gnu/java/awt/peer/gtk/ComponentGraphics.h: Regenerate. From-SVN: r124226 --- libjava/ChangeLog | 5 + libjava/classpath/ChangeLog | 88 +++ .../java/awt/peer/gtk/CairoGraphics2D.java | 107 +-- .../java/awt/peer/gtk/ComponentGraphics.java | 629 ++++++++++++++---- .../gnu_java_awt_peer_gtk_CairoGraphics2D.h | 12 +- .../gnu_java_awt_peer_gtk_ComponentGraphics.h | 4 +- .../java/awt/peer/gtk/CairoGraphics2D.class | Bin 36599 -> 36423 bytes .../java/awt/peer/gtk/ComponentGraphics.class | Bin 12162 -> 17237 bytes .../gnu_java_awt_peer_gtk_CairoGraphics2D.c | 85 --- .../gnu/java/awt/peer/gtk/CairoGraphics2D.h | 63 +- .../gnu/java/awt/peer/gtk/ComponentGraphics.h | 33 +- 11 files changed, 682 insertions(+), 344 deletions(-) diff --git a/libjava/ChangeLog b/libjava/ChangeLog index f012fe7808a..67c1389af5e 100644 --- a/libjava/ChangeLog +++ b/libjava/ChangeLog @@ -1,3 +1,8 @@ +2007-04-27 Thomas Fitzsimmons + + * gnu/java/awt/peer/gtk/CairoGraphics2D.h: Regenerate. + * gnu/java/awt/peer/gtk/ComponentGraphics.h: Regenerate. + 2007-04-25 Kyle Galloway * gnu/classpath/jdwp/VMIdManager.java (getObjectId): Deal with null diff --git a/libjava/classpath/ChangeLog b/libjava/classpath/ChangeLog index 0e6c85cbbbd..4877b1de2f0 100644 --- a/libjava/classpath/ChangeLog +++ b/libjava/classpath/ChangeLog @@ -1,3 +1,91 @@ +2007-03-16 Francis Kung + + * gnu/java/awt/peer/gtk/CairoGraphics2D.java + (cairoArc): Make protected rather than private so it can be over-ridden. + (cairoClip): Likewise. + (cairoClosePath): Likewise. + (cairoCurveTo): Likewise. + (cairoDrawGlyphVector): Likewise. + (cairoFill): Likewise. + (cairoLineTo): Likewise. + (cairoMoveTo): Likewise. + (cairoNewPath): Likewise. + (cairoRectangle): Likewise. + (cairoResetClip): Likewise. + (cairoRestore): Likewise. + (cairoSave): Likewise. + (cairoScale): Likewise. + (cairoSetAntialias): Likewise. + (cairoSetDash): Likewise. + (cairoSetFillRule): Likewise. + (cairoSetFont): Likewise. + (cairoSetLine): Likewise. + (cairoSetMatrix): Likewise. + (cairoSetOperator): Likewise. + (cairoSetRGBAColor): Likewise. + (cairoStroke): Likewise. + (drawPixels): Likewise. + (init): Likewise. + (setGradient): Likewise. + (setPaintPixels): Likewise. + (cairoDrawLine): Removed. + (cairoDrawRect): Removed. + (cairoFillRect): Removed. + (cairoPreserveClip): Removed. + (cairoRelCurveTo): Removed. + (cairoRelLineTo): Removed. + (cairoRelMoveTo): Removed. + * gnu/java/awt/peer/gtk/ComponentGraphics.java + (cairoArc): New method wrapping superclass method in locks. + (cairoClip): Likewise. + (cairoClosePath): Likewise. + (cairoCurveTo): Likewise. + (cairoDrawGlyphVector): Likewise. + (cairoFill): Likewise. + (cairoLineTo): Likewise. + (cairoMoveTo): Likewise. + (cairoNewPath): Likewise. + (cairoRectangle): Likewise. + (cairoResetClip): Likewise. + (cairoRestore): Likewise. + (cairoSave): Likewise. + (cairoScale): Likewise. + (cairoSetAntialias): Likewise. + (cairoSetDash): Likewise. + (cairoSetFillRule): Likewise. + (cairoSetFont): Likewise. + (cairoSetLine): Likewise. + (cairoSetMatrix): Likewise. + (cairoSetOperator): Likewise. + (cairoSetRGBAColor): Likewise. + (cairoStroke): Likewise. + (disposeNative): Likewise. + (drawPixels): Likewise. + (init): Likewise. + (setGradient): Likewise. + (setPaintPixels): Likewise. + (draw): Do not lock, as locking is now done in the wrapped native methods. + (drawComposite): Likewise. + (drawGlyphVector): Likewise. + (drawImage): Likewise. + (drawRenderedImage): Likewise. + (fill): Likewise. + (setClip): Removed. + (lock): Added documentation. + (unlock): Added documentation. + * include/gnu_java_awt_peer_gtk_CairoGraphics2D.h: Regenerated. + * include/gnu_java_awt_peer_gtk_ComponentGraphics.h: Regenerated. + * lib/gnu/java/awt/peer/gtk/ComponentGraphics.class: Regenerated. + * lib/gnu/java/awt/peer/gtk/CairoGraphics2D.class: Regenerated. + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine): Removed. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawRect): Removed. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFillRect): Removed. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip): Removed. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelCurveTo): Removed. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo): Removed. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelMoveTo): Removed. + 2007-04-23 Jeroen Frijters PR classpath/31646: diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java index 348801800d2..4a6ad008259 100644 --- a/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/libjava/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -302,7 +302,7 @@ public abstract class CairoGraphics2D extends Graphics2D * Allocate the cairographics2d structure and set the cairo_t pointer in it. * @param pointer - a cairo_t pointer, casted to a long. */ - private native long init(long pointer); + protected native long init(long pointer); /** * These are declared abstract as there may be context-specific issues. @@ -335,56 +335,56 @@ public abstract class CairoGraphics2D extends Graphics2D * @param stride - stride of the array width * @param i2u - affine transform array */ - private native void drawPixels(long pointer, int[] pixels, int w, int h, + protected native void drawPixels(long pointer, int[] pixels, int w, int h, int stride, double[] i2u, double alpha, int interpolation); - private native void setGradient(long pointer, double x1, double y1, + protected native void setGradient(long pointer, double x1, double y1, double x2, double y2, int r1, int g1, int b1, int a1, int r2, int g2, int b2, int a2, boolean cyclic); - private native void setPaintPixels(long pointer, int[] pixels, int w, + protected native void setPaintPixels(long pointer, int[] pixels, int w, int h, int stride, boolean repeat, int x, int y); /** * Set the current transform matrix */ - private native void cairoSetMatrix(long pointer, double[] m); + protected native void cairoSetMatrix(long pointer, double[] m); /** * Scaling method */ - private native void cairoScale(long pointer, double x, double y); + protected native void cairoScale(long pointer, double x, double y); /** * Set the compositing operator */ - private native void cairoSetOperator(long pointer, int cairoOperator); + protected native void cairoSetOperator(long pointer, int cairoOperator); /** * Sets the current color in RGBA as a 0.0-1.0 double */ - private native void cairoSetRGBAColor(long pointer, double red, double green, + protected native void cairoSetRGBAColor(long pointer, double red, double green, double blue, double alpha); /** * Sets the current winding rule in Cairo */ - private native void cairoSetFillRule(long pointer, int cairoFillRule); + protected native void cairoSetFillRule(long pointer, int cairoFillRule); /** * Set the line style, cap, join and miter limit. * Cap and join parameters are in the BasicStroke enumerations. */ - private native void cairoSetLine(long pointer, double width, int cap, + protected native void cairoSetLine(long pointer, double width, int cap, int join, double miterLimit); /** * Set the dash style */ - private native void cairoSetDash(long pointer, double[] dashes, int ndash, + protected native void cairoSetDash(long pointer, double[] dashes, int ndash, double offset); /* @@ -397,121 +397,66 @@ public abstract class CairoGraphics2D extends Graphics2D /** * Set the font in cairo. */ - private native void cairoSetFont(long pointer, GdkFontPeer font); - - private native void cairoRelCurveTo(long pointer, double dx1, double dy1, - double dx2, double dy2, double dx3, - double dy3); + protected native void cairoSetFont(long pointer, GdkFontPeer font); /** * Appends a rectangle to the current path */ - private native void cairoRectangle(long pointer, double x, double y, + protected native void cairoRectangle(long pointer, double x, double y, double width, double height); /** * Appends an arc to the current path */ - private native void cairoArc(long pointer, double x, double y, + protected native void cairoArc(long pointer, double x, double y, double radius, double angle1, double angle2); /** * Save / restore a cairo path */ - private native void cairoSave(long pointer); - private native void cairoRestore(long pointer); + protected native void cairoSave(long pointer); + protected native void cairoRestore(long pointer); /** * New current path */ - private native void cairoNewPath(long pointer); + protected native void cairoNewPath(long pointer); /** * Close current path */ - private native void cairoClosePath(long pointer); + protected native void cairoClosePath(long pointer); /** moveTo */ - private native void cairoMoveTo(long pointer, double x, double y); - - /** relative moveTo */ - private native void cairoRelMoveTo(long pointer, double dx, double dy); + protected native void cairoMoveTo(long pointer, double x, double y); /** lineTo */ - private native void cairoLineTo(long pointer, double x, double y); - - /** relative lineTo */ - private native void cairoRelLineTo(long pointer, double dx, double dy); + protected native void cairoLineTo(long pointer, double x, double y); /** Cubic curve-to */ - private native void cairoCurveTo(long pointer, double x1, double y1, + protected native void cairoCurveTo(long pointer, double x1, double y1, double x2, double y2, double x3, double y3); /** * Stroke current path */ - private native void cairoStroke(long pointer); + protected native void cairoStroke(long pointer); /** * Fill current path */ - private native void cairoFill(long pointer, double alpha); + protected native void cairoFill(long pointer, double alpha); /** * Clip current path */ - private native void cairoClip(long pointer); + protected native void cairoClip(long pointer); /** * Save clip */ - private native void cairoPreserveClip(long pointer); - - /** - * Save clip - */ - private native void cairoResetClip(long pointer); - - /** - * Draws a line from (x1,y1) to (x2,y2). - * - * @param pointer the native pointer - * - * @param x1 the x coordinate of the starting point - * @param y1 the y coordinate of the starting point - * @param x2 the x coordinate of the end point - * @param y2 the y coordinate of the end point - */ - private native void cairoDrawLine(long pointer, double x1, double y1, - double x2, double y2); - - /** - * Draws a rectangle at starting point (x,y) and with the specified width - * and height. - * - * @param pointer the native pointer - * @param x the x coordinate of the upper left corner - * @param y the y coordinate of the upper left corner - * @param w the width of the rectangle - * @param h the height of the rectangle - */ - private native void cairoDrawRect(long pointer, double x, double y, double w, - double h); - - /** - * Fills a rectangle at starting point (x,y) and with the specified width - * and height. - * - * @param pointer the native pointer - * @param x the x coordinate of the upper left corner - * @param y the y coordinate of the upper left corner - * @param w the width of the rectangle - * @param h the height of the rectangle - */ - private native void cairoFillRect(long pointer, double x, double y, double w, - double h); - + protected native void cairoResetClip(long pointer); ///////////////////////// TRANSFORMS /////////////////////////////////// /** @@ -2054,4 +1999,4 @@ public abstract class CairoGraphics2D extends Graphics2D return rect; } -} \ No newline at end of file +} diff --git a/libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java b/libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java index 098052ae961..be82f81ecbd 100644 --- a/libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java +++ b/libjava/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java @@ -112,6 +112,14 @@ public class ComponentGraphics extends CairoGraphics2D */ private native long initState(GtkComponentPeer component); + /** + * Obtain and hold a GDK lock, which is required for all drawing operations + * in this graphics context (since it is backed by an X surface). + * + * This method causes the GDK locking behaviour to be re-entrant. No race + * conditions are caused since a ThreadLocal is used and each thread has its + * own lock counter. + */ private void lock() { Integer i = (Integer) hasLock.get(); @@ -124,6 +132,9 @@ public class ComponentGraphics extends CairoGraphics2D hasLock.set(Integer.valueOf(i.intValue() + 1)); } + /** + * Release the re-entrant GDK lock. + */ private void unlock() { Integer i = (Integer) hasLock.get(); @@ -219,78 +230,54 @@ public class ComponentGraphics extends CairoGraphics2D */ public void draw(Shape s) { - lock(); - try - { - if (comp == null || comp instanceof AlphaComposite) - super.draw(s); + if (comp == null || comp instanceof AlphaComposite) + super.draw(s); - else - { - createBuffer(); + else + { + createBuffer(); - Graphics2D g2d = (Graphics2D)buffer.getGraphics(); - g2d.setStroke(this.getStroke()); - g2d.setColor(this.getColor()); - g2d.draw(s); + Graphics2D g2d = (Graphics2D)buffer.getGraphics(); + g2d.setStroke(this.getStroke()); + g2d.setColor(this.getColor()); + g2d.draw(s); - drawComposite(s.getBounds2D(), null); - } - } - finally - { - unlock(); + drawComposite(s.getBounds2D(), null); } } public void fill(Shape s) { - lock(); - try - { - if (comp == null || comp instanceof AlphaComposite) - super.fill(s); + if (comp == null || comp instanceof AlphaComposite) + super.fill(s); - else - { - createBuffer(); + else + { + createBuffer(); - Graphics2D g2d = (Graphics2D)buffer.getGraphics(); - g2d.setPaint(this.getPaint()); - g2d.setColor(this.getColor()); - g2d.fill(s); + Graphics2D g2d = (Graphics2D)buffer.getGraphics(); + g2d.setPaint(this.getPaint()); + g2d.setColor(this.getColor()); + g2d.fill(s); - drawComposite(s.getBounds2D(), null); - } - } - finally - { - unlock(); + drawComposite(s.getBounds2D(), null); } } public void drawRenderedImage(RenderedImage image, AffineTransform xform) { - lock(); - try - { - if (comp == null || comp instanceof AlphaComposite) - super.drawRenderedImage(image, xform); + if (comp == null || comp instanceof AlphaComposite) + super.drawRenderedImage(image, xform); - else - { - createBuffer(); + else + { + createBuffer(); - Graphics2D g2d = (Graphics2D)buffer.getGraphics(); - g2d.setRenderingHints(this.getRenderingHints()); - g2d.drawRenderedImage(image, xform); + Graphics2D g2d = (Graphics2D)buffer.getGraphics(); + g2d.setRenderingHints(this.getRenderingHints()); + g2d.drawRenderedImage(image, xform); - drawComposite(buffer.getRaster().getBounds(), null); - } - } - finally - { - unlock(); + drawComposite(buffer.getRaster().getBounds(), null); } } @@ -298,81 +285,65 @@ public class ComponentGraphics extends CairoGraphics2D Color bgcolor, ImageObserver obs) { boolean rv; - lock(); - try - { - if (comp == null || comp instanceof AlphaComposite) - rv = super.drawImage(img, xform, bgcolor, obs); + if (comp == null || comp instanceof AlphaComposite) + rv = super.drawImage(img, xform, bgcolor, obs); - else + else + { + // Get buffered image of source + if( !(img instanceof BufferedImage) ) { - // Get buffered image of source - if( !(img instanceof BufferedImage) ) - { - ImageProducer source = img.getSource(); - if (source == null) - return false; - img = Toolkit.getDefaultToolkit().createImage(source); - } - BufferedImage bImg = (BufferedImage) img; + ImageProducer source = img.getSource(); + if (source == null) + return false; + img = Toolkit.getDefaultToolkit().createImage(source); + } + BufferedImage bImg = (BufferedImage) img; - // Find translated bounds - Point2D origin = new Point2D.Double(bImg.getMinX(), bImg.getMinY()); - Point2D pt = new Point2D.Double(bImg.getWidth() + bImg.getMinX(), - bImg.getHeight() + bImg.getMinY()); - if (xform != null) - { - origin = xform.transform(origin, origin); - pt = xform.transform(pt, pt); - } + // Find translated bounds + Point2D origin = new Point2D.Double(bImg.getMinX(), bImg.getMinY()); + Point2D pt = new Point2D.Double(bImg.getWidth() + bImg.getMinX(), + bImg.getHeight() + bImg.getMinY()); + if (xform != null) + { + origin = xform.transform(origin, origin); + pt = xform.transform(pt, pt); + } - // Create buffer and draw image - createBuffer(); + // Create buffer and draw image + createBuffer(); - Graphics2D g2d = (Graphics2D)buffer.getGraphics(); - g2d.setRenderingHints(this.getRenderingHints()); - g2d.drawImage(img, xform, obs); - - // Perform compositing - rv = drawComposite(new Rectangle2D.Double(origin.getX(), - origin.getY(), - pt.getX(), pt.getY()), - obs); - } - } - finally - { - unlock(); + Graphics2D g2d = (Graphics2D)buffer.getGraphics(); + g2d.setRenderingHints(this.getRenderingHints()); + g2d.drawImage(img, xform, obs); + + // Perform compositing + rv = drawComposite(new Rectangle2D.Double(origin.getX(), + origin.getY(), + pt.getX(), pt.getY()), + obs); } return rv; } public void drawGlyphVector(GlyphVector gv, float x, float y) { - lock(); - try - { - if (comp == null || comp instanceof AlphaComposite) - super.drawGlyphVector(gv, x, y); + if (comp == null || comp instanceof AlphaComposite) + super.drawGlyphVector(gv, x, y); - else - { - createBuffer(); + else + { + createBuffer(); - Graphics2D g2d = (Graphics2D)buffer.getGraphics(); - g2d.setPaint(this.getPaint()); - g2d.setStroke(this.getStroke()); - g2d.drawGlyphVector(gv, x, y); + Graphics2D g2d = (Graphics2D)buffer.getGraphics(); + g2d.setPaint(this.getPaint()); + g2d.setStroke(this.getStroke()); + g2d.drawGlyphVector(gv, x, y); - Rectangle2D bounds = gv.getLogicalBounds(); - bounds = new Rectangle2D.Double(x + bounds.getX(), y + bounds.getY(), - bounds.getWidth(), bounds.getHeight()); - drawComposite(bounds, null); - } - } - finally - { - unlock(); + Rectangle2D bounds = gv.getLogicalBounds(); + bounds = new Rectangle2D.Double(x + bounds.getX(), y + bounds.getY(), + bounds.getWidth(), bounds.getHeight()); + drawComposite(bounds, null); } } @@ -466,20 +437,6 @@ public class ComponentGraphics extends CairoGraphics2D return super.drawImage(bimg, x, y, width, height, observer); } - public void setClip(Shape s) - { - lock(); - try - { - super.setClip(s); - } - finally - { - unlock(); - } - } - - private boolean drawComposite(Rectangle2D bounds, ImageObserver observer) { // Clip source to visible areas that need updating @@ -507,12 +464,10 @@ public class ComponentGraphics extends CairoGraphics2D Rectangle2D.intersect(deviceBounds, this.getClipInDevSpace(), deviceBounds); // Get current image on the component - unlock(); GtkImage img = grab(component); Graphics gr = componentBuffer.createGraphics(); gr.drawImage(img, 0, 0, null); gr.dispose(); - lock(); BufferedImage cBuffer = componentBuffer; if (!deviceBounds.equals(cBuffer.getRaster().getBounds())) @@ -573,5 +528,417 @@ public class ComponentGraphics extends CairoGraphics2D { return GtkVolatileImage.gdkColorModel; } + + /* --- START OVERRIDDEN NATIVE METHODS ---- + * All native methods in CairoGraphics2D should be overridden here and + * enclosed in locks, since the cairo surface is backed by an X surface + * in this graphics context and the X surface requires external locking. + * + * We lock everything "just in case", since it's difficult to know which + * calls are and aren't thread-safe. Overriding and locking the native + * methods allows superclass code in CairoGraphics2D to execute properly, + * without the need to override every single method. + * + * CAVEAT: if native code obtains a lock (using gdk_threads_enter(), not the + * lock() method provided here) and then calls back into Java and one of these + * methods ends up being called, we will deadlock. The lock is only reentrant + * when called via our lock() method. + */ + @Override + protected long init(long pointer) + { + long ret; + + try + { + lock(); + ret = super.init(pointer); + } + finally + { + unlock(); + } + + return ret; + } + + @Override + public void disposeNative(long pointer) + { + try + { + lock(); + super.disposeNative(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void drawPixels(long pointer, int[] pixels, int w, int h, + int stride, double[] i2u, double alpha, + int interpolation) + { + try + { + lock(); + super.drawPixels(pointer, pixels, w, h, stride, i2u, alpha, + interpolation); + } + finally + { + unlock(); + } + } + + @Override + protected void setGradient(long pointer, double x1, double y1, + double x2, double y2, + int r1, int g1, int b1, int a1, + int r2, int g2, int b2, int a2, boolean cyclic) + { + try + { + lock(); + super.setGradient(pointer, x1, y1, x2, y2, r1, g1, b1, a1, r2, g2, b2, a2, + cyclic); + } + finally + { + unlock(); + } + } + + @Override + protected void setPaintPixels(long pointer, int[] pixels, int w, int h, + int stride, boolean repeat, int x, int y) + { + try + { + lock(); + super.setPaintPixels(pointer, pixels, w, h, stride, repeat, x, y); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetMatrix(long pointer, double[] m) + { + try + { + lock(); + super.cairoSetMatrix(pointer, m); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoScale(long pointer, double x, double y) + { + try + { + lock(); + super.cairoScale(pointer, x, y); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetOperator(long pointer, int cairoOperator) + { + try + { + lock(); + super.cairoSetOperator(pointer, cairoOperator); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetRGBAColor(long pointer, double red, double green, + double blue, double alpha) + { + try + { + lock(); + super.cairoSetRGBAColor(pointer, red, green, blue, alpha); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetFillRule(long pointer, int cairoFillRule) + { + try + { + lock(); + super.cairoSetFillRule(pointer, cairoFillRule); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetLine(long pointer, double width, int cap, int join, + double miterLimit) + { + try + { + lock(); + super.cairoSetLine(pointer, width, cap, join, miterLimit); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetDash(long pointer, double[] dashes, int ndash, + double offset) + { + try + { + lock(); + super.cairoSetDash(pointer, dashes, ndash, offset); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoDrawGlyphVector(long pointer, GdkFontPeer font, + float x, float y, int n, + int[] codes, float[] positions) + { + try + { + lock(); + super.cairoDrawGlyphVector(pointer, font, x, y, n, codes, positions); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSetFont(long pointer, GdkFontPeer font) + { + try + { + lock(); + super.cairoSetFont(pointer, font); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoRectangle(long pointer, double x, double y, + double width, double height) + { + try + { + lock(); + super.cairoRectangle(pointer, x, y, width, height); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoArc(long pointer, double x, double y, + double radius, double angle1, double angle2) + { + try + { + lock(); + super.cairoArc(pointer, x, y, radius, angle1, angle2); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoSave(long pointer) + { + try + { + lock(); + super.cairoSave(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoRestore(long pointer) + { + try + { + lock(); + super.cairoRestore(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoNewPath(long pointer) + { + try + { + lock(); + super.cairoNewPath(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoClosePath(long pointer) + { + try + { + lock(); + super.cairoClosePath(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoMoveTo(long pointer, double x, double y) + { + try + { + lock(); + super.cairoMoveTo(pointer, x, y); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoLineTo(long pointer, double x, double y) + { + try + { + lock(); + super.cairoLineTo(pointer, x, y); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoCurveTo(long pointer, double x1, double y1, double x2, + double y2, double x3, double y3) + { + try + { + lock(); + super.cairoCurveTo(pointer, x1, y1, x2, y2, x3, y3); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoStroke(long pointer) + { + try + { + lock(); + super.cairoStroke(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoFill(long pointer, double alpha) + { + try + { + lock(); + super.cairoFill(pointer, alpha); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoClip(long pointer) + { + try + { + lock(); + super.cairoClip(pointer); + } + finally + { + unlock(); + } + } + + @Override + protected void cairoResetClip(long pointer) + { + try + { + lock(); + super.cairoResetClip(pointer); + } + finally + { + unlock(); + } + } } - diff --git a/libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h b/libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h index c4a7f1b0264..3e88d5747f7 100644 --- a/libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h +++ b/libjava/classpath/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h @@ -1,10 +1,10 @@ /* DO NOT EDIT THIS FILE - it is machine generated */ +#include + #ifndef __gnu_java_awt_peer_gtk_CairoGraphics2D__ #define __gnu_java_awt_peer_gtk_CairoGraphics2D__ -#include - #ifdef __cplusplus extern "C" { @@ -24,7 +24,6 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetLine ( JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetDash (JNIEnv *env, jobject, jlong, jdoubleArray, jint, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector (JNIEnv *env, jobject, jlong, jobject, jfloat, jfloat, jint, jintArray, jfloatArray); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont (JNIEnv *env, jobject, jlong, jobject); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelCurveTo (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoArc (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSave (JNIEnv *env, jobject, jlong); @@ -32,18 +31,13 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRestore ( JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoNewPath (JNIEnv *env, jobject, jlong); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClosePath (JNIEnv *env, jobject, jlong); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoMoveTo (JNIEnv *env, jobject, jlong, jdouble, jdouble); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelMoveTo (JNIEnv *env, jobject, jlong, jdouble, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoLineTo (JNIEnv *env, jobject, jlong, jdouble, jdouble); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo (JNIEnv *env, jobject, jlong, jdouble, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoCurveTo (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoStroke (JNIEnv *env, jobject, jlong); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFill (JNIEnv *env, jobject, jlong, jdouble); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoClip (JNIEnv *env, jobject, jlong); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip (JNIEnv *env, jobject, jlong); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip (JNIEnv *env, jobject, jlong); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawRect (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble); -JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFillRect (JNIEnv *env, jobject, jlong, jdouble, jdouble, jdouble, jdouble); + #undef gnu_java_awt_peer_gtk_CairoGraphics2D_INTERPOLATION_NEAREST #define gnu_java_awt_peer_gtk_CairoGraphics2D_INTERPOLATION_NEAREST 0L #undef gnu_java_awt_peer_gtk_CairoGraphics2D_INTERPOLATION_BILINEAR diff --git a/libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h b/libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h index 2df12469b42..3dd8bb43178 100644 --- a/libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h +++ b/libjava/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h @@ -1,10 +1,10 @@ /* DO NOT EDIT THIS FILE - it is machine generated */ +#include + #ifndef __gnu_java_awt_peer_gtk_ComponentGraphics__ #define __gnu_java_awt_peer_gtk_ComponentGraphics__ -#include - #ifdef __cplusplus extern "C" { diff --git a/libjava/classpath/lib/gnu/java/awt/peer/gtk/CairoGraphics2D.class b/libjava/classpath/lib/gnu/java/awt/peer/gtk/CairoGraphics2D.class index 2c472c48685a500a24660002d347257415ec0dc1..10383cbaaffbae502fd825c0fb64794fb84658b0 100644 GIT binary patch literal 36423 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⪻Ymr!)RaDsweo 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�C~t>{ZYNFVLwSR8j?<>57Qp95k$s3cTGrP> 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 literal 36599 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 O!R&O-26XA1^Zx-~Uss6$ diff --git a/libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class b/libjava/classpath/lib/gnu/java/awt/peer/gtk/ComponentGraphics.class index 0e671874914fb9eda4b473bb0ef5356841c3d988..54e991629c5864a0daacfb86467eb03b5b545ed4 100644 GIT binary patch literal 17237 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 delta 5325 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, x1, y1, x2, y2, x3, y3); } -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelMoveTo -(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jlong pointer, jdouble dx, jdouble dy) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_rel_move_to (gr->cr, dx, dy); -} - -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelLineTo -(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jlong pointer, jdouble dx, jdouble dy) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_rel_line_to (gr->cr, dx, dy); -} - -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRelCurveTo -(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jlong pointer, jdouble dx1, jdouble dy1, - jdouble dx2, jdouble dy2, jdouble dx3, jdouble dy3) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_rel_curve_to (gr->cr, dx1, dy1, dx2, dy2, dx3, dy3); -} - JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoRectangle (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), @@ -726,57 +692,6 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoResetClip cairo_reset_clip( gr->cr ); } -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoPreserveClip -(JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), - jlong pointer) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_clip_preserve( gr->cr ); -} - -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawLine -(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)), - jlong pointer, jdouble x1, jdouble y1, jdouble x2, jdouble y2) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_new_path(gr->cr); - cairo_move_to(gr->cr, x1, y1); - cairo_line_to(gr->cr, x2, y2); - cairo_stroke(gr->cr); -} - -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawRect -(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)), - jlong pointer, jdouble x, jdouble y, jdouble w, jdouble h) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_new_path(gr->cr); - cairo_rectangle(gr->cr, x, y, w, h); - cairo_stroke(gr->cr); -} - -JNIEXPORT void JNICALL -Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoFillRect -(JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)), - jlong pointer, jdouble x, jdouble y, jdouble w, jdouble h) -{ - struct cairographics2d *gr = JLONG_TO_PTR(struct cairographics2d, pointer); - g_assert (gr != NULL); - - cairo_new_path(gr->cr); - cairo_rectangle(gr->cr, x, y, w, h); - cairo_fill(gr->cr); -} - static void update_pattern_transform (struct cairographics2d *gr) { diff --git a/libjava/gnu/java/awt/peer/gtk/CairoGraphics2D.h b/libjava/gnu/java/awt/peer/gtk/CairoGraphics2D.h index a20f47212dd..1be46fbaf7b 100644 --- a/libjava/gnu/java/awt/peer/gtk/CairoGraphics2D.h +++ b/libjava/gnu/java/awt/peer/gtk/CairoGraphics2D.h @@ -88,8 +88,8 @@ public: virtual void copy(::gnu::java::awt::peer::gtk::CairoGraphics2D *, jlong); virtual void finalize(); virtual void dispose(); -private: - jlong init(jlong); +public: // actually protected + virtual jlong init(jlong); public: virtual ::java::awt::Graphics * create() = 0; virtual ::java::awt::GraphicsConfiguration * getDeviceConfiguration() = 0; @@ -98,41 +98,34 @@ public: // actually protected virtual ::java::awt::geom::Rectangle2D * getRealBounds() = 0; public: virtual void disposeNative(jlong); -private: - void drawPixels(jlong, JArray< jint > *, jint, jint, jint, JArray< jdouble > *, jdouble, jint); - void setGradient(jlong, jdouble, jdouble, jdouble, jdouble, jint, jint, jint, jint, jint, jint, jint, jint, jboolean); - void setPaintPixels(jlong, JArray< jint > *, jint, jint, jint, jboolean, jint, jint); - void cairoSetMatrix(jlong, JArray< jdouble > *); - void cairoScale(jlong, jdouble, jdouble); - void cairoSetOperator(jlong, jint); - void cairoSetRGBAColor(jlong, jdouble, jdouble, jdouble, jdouble); - void cairoSetFillRule(jlong, jint); - void cairoSetLine(jlong, jdouble, jint, jint, jdouble); - void cairoSetDash(jlong, JArray< jdouble > *, jint, jdouble); +public: // actually protected + virtual void drawPixels(jlong, JArray< jint > *, jint, jint, jint, JArray< jdouble > *, jdouble, jint); + virtual void setGradient(jlong, jdouble, jdouble, jdouble, jdouble, jint, jint, jint, jint, jint, jint, jint, jint, jboolean); + virtual void setPaintPixels(jlong, JArray< jint > *, jint, jint, jint, jboolean, jint, jint); + virtual void cairoSetMatrix(jlong, JArray< jdouble > *); + virtual void cairoScale(jlong, jdouble, jdouble); + virtual void cairoSetOperator(jlong, jint); + virtual void cairoSetRGBAColor(jlong, jdouble, jdouble, jdouble, jdouble); + virtual void cairoSetFillRule(jlong, jint); + virtual void cairoSetLine(jlong, jdouble, jint, jint, jdouble); + virtual void cairoSetDash(jlong, JArray< jdouble > *, jint, jdouble); public: // actually package-private virtual void cairoDrawGlyphVector(jlong, ::gnu::java::awt::peer::gtk::GdkFontPeer *, jfloat, jfloat, jint, JArray< jint > *, JArray< jfloat > *); -private: - void cairoSetFont(jlong, ::gnu::java::awt::peer::gtk::GdkFontPeer *); - void cairoRelCurveTo(jlong, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble); - void cairoRectangle(jlong, jdouble, jdouble, jdouble, jdouble); - void cairoArc(jlong, jdouble, jdouble, jdouble, jdouble, jdouble); - void cairoSave(jlong); - void cairoRestore(jlong); - void cairoNewPath(jlong); - void cairoClosePath(jlong); - void cairoMoveTo(jlong, jdouble, jdouble); - void cairoRelMoveTo(jlong, jdouble, jdouble); - void cairoLineTo(jlong, jdouble, jdouble); - void cairoRelLineTo(jlong, jdouble, jdouble); - void cairoCurveTo(jlong, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble); - void cairoStroke(jlong); - void cairoFill(jlong, jdouble); - void cairoClip(jlong); - void cairoPreserveClip(jlong); - void cairoResetClip(jlong); - void cairoDrawLine(jlong, jdouble, jdouble, jdouble, jdouble); - void cairoDrawRect(jlong, jdouble, jdouble, jdouble, jdouble); - void cairoFillRect(jlong, jdouble, jdouble, jdouble, jdouble); +public: // actually protected + virtual void cairoSetFont(jlong, ::gnu::java::awt::peer::gtk::GdkFontPeer *); + virtual void cairoRectangle(jlong, jdouble, jdouble, jdouble, jdouble); + virtual void cairoArc(jlong, jdouble, jdouble, jdouble, jdouble, jdouble); + virtual void cairoSave(jlong); + virtual void cairoRestore(jlong); + virtual void cairoNewPath(jlong); + virtual void cairoClosePath(jlong); + virtual void cairoMoveTo(jlong, jdouble, jdouble); + virtual void cairoLineTo(jlong, jdouble, jdouble); + virtual void cairoCurveTo(jlong, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble); + virtual void cairoStroke(jlong); + virtual void cairoFill(jlong, jdouble); + virtual void cairoClip(jlong); + virtual void cairoResetClip(jlong); public: virtual void setTransform(::java::awt::geom::AffineTransform *); private: diff --git a/libjava/gnu/java/awt/peer/gtk/ComponentGraphics.h b/libjava/gnu/java/awt/peer/gtk/ComponentGraphics.h index 1f11a4b7f7b..534834bd1f4 100644 --- a/libjava/gnu/java/awt/peer/gtk/ComponentGraphics.h +++ b/libjava/gnu/java/awt/peer/gtk/ComponentGraphics.h @@ -7,6 +7,8 @@ #pragma interface #include +#include + extern "Java" { namespace gnu @@ -24,6 +26,7 @@ extern "Java" namespace gtk { class ComponentGraphics; + class GdkFontPeer; class GtkComponentPeer; class GtkImage; } @@ -101,12 +104,40 @@ public: virtual void drawGlyphVector(::java::awt::font::GlyphVector *, jfloat, jfloat); virtual jboolean drawImage(::java::awt::Image *, jint, jint, ::java::awt::image::ImageObserver *); virtual jboolean drawImage(::java::awt::Image *, jint, jint, jint, jint, ::java::awt::image::ImageObserver *); - virtual void setClip(::java::awt::Shape *); private: jboolean drawComposite(::java::awt::geom::Rectangle2D *, ::java::awt::image::ImageObserver *); void createBuffer(); public: // actually protected virtual ::java::awt::image::ColorModel * getNativeCM(); + virtual jlong init(jlong); +public: + virtual void disposeNative(jlong); +public: // actually protected + virtual void drawPixels(jlong, JArray< jint > *, jint, jint, jint, JArray< jdouble > *, jdouble, jint); + virtual void setGradient(jlong, jdouble, jdouble, jdouble, jdouble, jint, jint, jint, jint, jint, jint, jint, jint, jboolean); + virtual void setPaintPixels(jlong, JArray< jint > *, jint, jint, jint, jboolean, jint, jint); + virtual void cairoSetMatrix(jlong, JArray< jdouble > *); + virtual void cairoScale(jlong, jdouble, jdouble); + virtual void cairoSetOperator(jlong, jint); + virtual void cairoSetRGBAColor(jlong, jdouble, jdouble, jdouble, jdouble); + virtual void cairoSetFillRule(jlong, jint); + virtual void cairoSetLine(jlong, jdouble, jint, jint, jdouble); + virtual void cairoSetDash(jlong, JArray< jdouble > *, jint, jdouble); + virtual void cairoDrawGlyphVector(jlong, ::gnu::java::awt::peer::gtk::GdkFontPeer *, jfloat, jfloat, jint, JArray< jint > *, JArray< jfloat > *); + virtual void cairoSetFont(jlong, ::gnu::java::awt::peer::gtk::GdkFontPeer *); + virtual void cairoRectangle(jlong, jdouble, jdouble, jdouble, jdouble); + virtual void cairoArc(jlong, jdouble, jdouble, jdouble, jdouble, jdouble); + virtual void cairoSave(jlong); + virtual void cairoRestore(jlong); + virtual void cairoNewPath(jlong); + virtual void cairoClosePath(jlong); + virtual void cairoMoveTo(jlong, jdouble, jdouble); + virtual void cairoLineTo(jlong, jdouble, jdouble); + virtual void cairoCurveTo(jlong, jdouble, jdouble, jdouble, jdouble, jdouble, jdouble); + virtual void cairoStroke(jlong); + virtual void cairoFill(jlong, jdouble); + virtual void cairoClip(jlong); + virtual void cairoResetClip(jlong); private: static jboolean hasXRenderExtension; ::gnu::java::awt::peer::gtk::GtkComponentPeer * __attribute__((aligned(__alignof__( ::gnu::java::awt::peer::gtk::CairoGraphics2D)))) component; -- 2.30.2