commit-classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Compo...


From: Sven de Marothy
Subject: [commit-cp] classpath ChangeLog gnu/java/awt/peer/gtk/Compo...
Date: Tue, 06 Jun 2006 02:22:29 +0000

CVSROOT:        /sources/classpath
Module name:    classpath
Changes by:     Sven de Marothy <smarothy>      06/06/06 02:22:29

Modified files:
        .              : ChangeLog 
        gnu/java/awt/peer/gtk: ComponentGraphics.java 
                               GtkVolatileImage.java 
                               VolatileImageGraphics.java 
        include        : gnu_java_awt_peer_gtk_ComponentGraphics.h 
                         gnu_java_awt_peer_gtk_GtkVolatileImage.h 
        native/jni/gtk-peer: gnu_java_awt_peer_gtk_ComponentGraphics.c 
                             gnu_java_awt_peer_gtk_GtkVolatileImage.c 

Log message:
        2006-06-05  Sven de Marothy  <address@hidden>
        
                * include/gnu_java_awt_peer_gtk_ComponentGraphics.h
                * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
                * gnu/java/awt/peer/gtk/ComponentGraphics.java
                (initFromVolatile): New method.
                * gnu/java/awt/peer/gtk/GtkVolatileImage.java
                * gnu/java/awt/peer/gtk/VolatileImageGraphics.java
                Reimplement.
                * include/gnu_java_awt_peer_gtk_GtkVolatileImage.h
                * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c
                (copyArea, drawVolatileImage): New methods.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/classpath/ChangeLog?cvsroot=classpath&r1=1.7661&r2=1.7662
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java?cvsroot=classpath&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java?cvsroot=classpath&r1=1.5&r2=1.6
http://cvs.savannah.gnu.org/viewcvs/classpath/gnu/java/awt/peer/gtk/VolatileImageGraphics.java?cvsroot=classpath&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h?cvsroot=classpath&r1=1.3&r2=1.4
http://cvs.savannah.gnu.org/viewcvs/classpath/include/gnu_java_awt_peer_gtk_GtkVolatileImage.h?cvsroot=classpath&r1=1.1&r2=1.2
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c?cvsroot=classpath&r1=1.12&r2=1.13
http://cvs.savannah.gnu.org/viewcvs/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c?cvsroot=classpath&r1=1.2&r2=1.3

Patches:
Index: ChangeLog
===================================================================
RCS file: /sources/classpath/classpath/ChangeLog,v
retrieving revision 1.7661
retrieving revision 1.7662
diff -u -b -r1.7661 -r1.7662
--- ChangeLog   5 Jun 2006 20:36:21 -0000       1.7661
+++ ChangeLog   6 Jun 2006 02:22:27 -0000       1.7662
@@ -1,3 +1,16 @@
+2006-06-05  Sven de Marothy  <address@hidden>
+
+       * include/gnu_java_awt_peer_gtk_ComponentGraphics.h
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+       * gnu/java/awt/peer/gtk/ComponentGraphics.java
+       (initFromVolatile): New method.
+       * gnu/java/awt/peer/gtk/GtkVolatileImage.java
+       * gnu/java/awt/peer/gtk/VolatileImageGraphics.java
+       Reimplement.
+       * include/gnu_java_awt_peer_gtk_GtkVolatileImage.h
+       * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c
+       (copyArea, drawVolatileImage): New methods.
+       
 2006-06-05  Tania Bento  <address@hidden>
 
        * javax/swing/JFrame.java

Index: gnu/java/awt/peer/gtk/ComponentGraphics.java
===================================================================
RCS file: 
/sources/classpath/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- gnu/java/awt/peer/gtk/ComponentGraphics.java        5 Jun 2006 03:39:14 
-0000       1.9
+++ gnu/java/awt/peer/gtk/ComponentGraphics.java        6 Jun 2006 02:22:28 
-0000       1.10
@@ -46,6 +46,7 @@
 import java.awt.Image;
 import java.awt.Rectangle;
 import java.awt.Shape;
+import java.awt.Point;
 import java.awt.font.FontRenderContext;
 import java.awt.font.GlyphVector;
 import java.awt.geom.AffineTransform;
@@ -64,7 +65,11 @@
 public class ComponentGraphics extends CairoGraphics2D
 {
   private GtkComponentPeer component;
-  private long cairo_t;
+  protected long cairo_t;
+
+  ComponentGraphics()
+  {
+  }
 
   private ComponentGraphics(GtkComponentPeer component)
   {
@@ -94,6 +99,11 @@
   private native long initState(GtkComponentPeer component);
 
   /**
+   * Creates a cairo_t for a volatile image
+   */
+  protected native long initFromVolatile( long pixmapPtr, int width, int 
height);
+
+  /**
    * Grab lock
    */
   private native void start_gdk_drawing();
@@ -194,8 +204,7 @@
   {
     if( img instanceof GtkVolatileImage )
       {
-       ((GtkVolatileImage)img).validate( null );
-       drawVolatile( component, img, x, y-20 ,
+       drawVolatile( component, img, x, y - 20,
                      ((GtkVolatileImage)img).width, 
                      ((GtkVolatileImage)img).height );
        return true;
@@ -208,8 +217,7 @@
   {
     if( img instanceof GtkVolatileImage )
       {
-       ((GtkVolatileImage)img).validate( null );
-       drawVolatile( component, img, x, y-20, 
+       drawVolatile( component, img, x, y - 20, 
                      width, height );
        return true;
       }      

Index: gnu/java/awt/peer/gtk/GtkVolatileImage.java
===================================================================
RCS file: 
/sources/classpath/classpath/gnu/java/awt/peer/gtk/GtkVolatileImage.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -b -r1.5 -r1.6
--- gnu/java/awt/peer/gtk/GtkVolatileImage.java 4 Jun 2006 19:44:39 -0000       
1.5
+++ gnu/java/awt/peer/gtk/GtkVolatileImage.java 6 Jun 2006 02:22:28 -0000       
1.6
@@ -53,14 +53,7 @@
   /**
    * Don't touch, accessed from native code.
    */
-  private long nativePointer;
-
-  /**
-   * Offscreen image we draw to.
-   */
-  CairoSurface offScreen;
-
-  private boolean needsUpdate = false;
+  long nativePointer;
 
   native long init(GtkComponentPeer component, int width, int height);
 
@@ -68,7 +61,9 @@
 
   native int[] getPixels();
   
-  native void update(GtkImage image);
+  native void copyArea( int x, int y, int w, int h, int dx, int dy );
+
+  native void drawVolatile( long ptr, int x, int y, int w, int h );
 
   public GtkVolatileImage(GtkComponentPeer component, 
                          int width, int height, ImageCapabilities caps)
@@ -77,7 +72,6 @@
     this.height = height;
     this.caps = caps;
     nativePointer = init( component, width, height );
-    offScreen = new CairoSurface( width, height );
   }
 
   public GtkVolatileImage(int width, int height, ImageCapabilities caps)
@@ -100,11 +94,6 @@
     destroy();
   }
 
-  void invalidate()
-  {
-    needsUpdate = true;
-  }
-
   public BufferedImage getSnapshot()
   {
     CairoSurface cs = new CairoSurface( width, height );
@@ -119,24 +108,17 @@
 
   public Graphics2D createGraphics()
   {
-    invalidate();
-    return offScreen.getGraphics();
+    return new VolatileImageGraphics( this );
   }
 
   public int validate(GraphicsConfiguration gc)
   {
-    if( needsUpdate )
-      {
-       update( offScreen.getGtkImage() );
-       needsUpdate = false;
-       return VolatileImage.IMAGE_RESTORED;
-      }
     return VolatileImage.IMAGE_OK;
   }
 
   public boolean contentsLost()
   {
-    return needsUpdate;
+    return false;
   }
 
   public ImageCapabilities getCapabilities()

Index: gnu/java/awt/peer/gtk/VolatileImageGraphics.java
===================================================================
RCS file: 
/sources/classpath/classpath/gnu/java/awt/peer/gtk/VolatileImageGraphics.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- gnu/java/awt/peer/gtk/VolatileImageGraphics.java    3 Jun 2006 22:41:41 
-0000       1.1
+++ gnu/java/awt/peer/gtk/VolatileImageGraphics.java    6 Jun 2006 02:22:28 
-0000       1.2
@@ -58,72 +58,65 @@
 import java.awt.image.ImageObserver;
 import java.util.WeakHashMap;
 
-public class VolatileImageGraphics extends CairoSurfaceGraphics
+public class VolatileImageGraphics extends ComponentGraphics
 {
   private GtkVolatileImage owner;
 
-  public VolatileImageGraphics(GtkVolatileImage owner)
+  public VolatileImageGraphics(GtkVolatileImage img)
   {
-    super( owner.offScreen );
-    this.owner = owner;
+    this.owner = img;
+    cairo_t = initFromVolatile( owner.nativePointer, img.width, img.height );
+    setup( cairo_t );
+    setClip( new Rectangle( 0, 0, img.width, img.height) );
   }
   
-  VolatileImageGraphics(VolatileImageGraphics copyFrom)
+  private VolatileImageGraphics(VolatileImageGraphics copy)
   {
-    super( copyFrom.owner.offScreen );
-    owner = copyFrom.owner;
-  }
-
-  /**
-   * Abstract methods.
-   */  
-  public Graphics create()
-  {
-    return new VolatileImageGraphics( this );
+    this.owner = copy.owner;
+    initFromVolatile( owner.nativePointer, owner.width, owner.height );
+    setClip( new Rectangle( 0, 0, owner.width, owner.height) );
+    copy( copy, cairo_t );
   }
   
   public void copyAreaImpl(int x, int y, int width, int height, int dx, int dy)
   {
-    surface.copyAreaNative(x, y, width, height, dx, dy, surface.width);
-    owner.invalidate();
+    owner.copyArea(x, y, width, height, dx, dy);
   }
 
-  /**
-   * Overloaded methods that do actual drawing need to enter the gdk threads 
-   * and also do certain things before and after.
-   */
-  public void draw(Shape s)
+  public GraphicsConfiguration getDeviceConfiguration()
   {
-    super.draw(s);
-    Rectangle r = s.getBounds();
-    owner.invalidate();
+    return null;
   }
 
-  public void fill(Shape s)
+  public Graphics create()
   {
-    super.fill(s);
-    Rectangle r = s.getBounds();
-    owner.invalidate();
+    return new VolatileImageGraphics( this );
   }
 
-  public void drawRenderedImage(RenderedImage image, AffineTransform xform)
-  {
-    super.drawRenderedImage(image, xform);
-    owner.invalidate();
-  }
 
-  protected boolean drawImage(Image img, AffineTransform xform,
-                             Color bgcolor, ImageObserver obs)
+  public boolean drawImage(Image img, int x, int y, ImageObserver observer)
+  {
+    if( img instanceof GtkVolatileImage )
   {
-    boolean rv = super.drawImage(img, xform, bgcolor, obs);
-    owner.invalidate();
-    return rv;
+       owner.drawVolatile( ((GtkVolatileImage)img).nativePointer, 
+                           x, y,
+                           ((GtkVolatileImage)img).width, 
+                           ((GtkVolatileImage)img).height );
+       return true;
+      }      
+    return super.drawImage( img, x, y, observer );
   }
 
-  public void drawGlyphVector(GlyphVector gv, float x, float y)
+  public boolean drawImage(Image img, int x, int y, int width, int height,
+                           ImageObserver observer)
+  {
+    if( img instanceof GtkVolatileImage )
   {
-    super.drawGlyphVector(gv, x, y);
-    owner.invalidate();
+       owner.drawVolatile( ((GtkVolatileImage)img).nativePointer, 
+                           x, y, width, height );
+       return true;
+      }      
+    return super.drawImage( img, x, y, width, height, observer );
   }
 }
 

Index: include/gnu_java_awt_peer_gtk_ComponentGraphics.h
===================================================================
RCS file: 
/sources/classpath/classpath/include/gnu_java_awt_peer_gtk_ComponentGraphics.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -b -r1.3 -r1.4
--- include/gnu_java_awt_peer_gtk_ComponentGraphics.h   3 Jun 2006 22:41:41 
-0000       1.3
+++ include/gnu_java_awt_peer_gtk_ComponentGraphics.h   6 Jun 2006 02:22:28 
-0000       1.4
@@ -11,6 +11,7 @@
 #endif
 
 JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initState 
(JNIEnv *env, jobject, jobject);
+JNIEXPORT jlong JNICALL 
Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile(JNIEnv *env, 
jobject, jlong, jint, jint);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_ComponentGraphics_start_1gdk_1drawing (JNIEnv *env, 
jobject);
 JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_ComponentGraphics_end_1gdk_1drawing (JNIEnv *env, 
jobject);
 JNIEXPORT jboolean JNICALL 
Java_gnu_java_awt_peer_gtk_ComponentGraphics_hasXRender (JNIEnv *env, jclass);

Index: include/gnu_java_awt_peer_gtk_GtkVolatileImage.h
===================================================================
RCS file: 
/sources/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkVolatileImage.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- include/gnu_java_awt_peer_gtk_GtkVolatileImage.h    3 Jun 2006 22:41:41 
-0000       1.1
+++ include/gnu_java_awt_peer_gtk_GtkVolatileImage.h    6 Jun 2006 02:22:28 
-0000       1.2
@@ -13,7 +13,8 @@
 JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_GtkVolatileImage_init 
(JNIEnv *env, jobject, jobject, jint, jint);
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkVolatileImage_destroy 
(JNIEnv *env, jobject);
 JNIEXPORT jintArray JNICALL 
Java_gnu_java_awt_peer_gtk_GtkVolatileImage_getPixels (JNIEnv *env, jobject);
-JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkVolatileImage_update 
(JNIEnv *env, jobject, jobject);
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkVolatileImage_copyArea 
(JNIEnv *env, jobject, jint, jint, jint, jint, jint, jint);
+JNIEXPORT void JNICALL 
Java_gnu_java_awt_peer_gtk_GtkVolatileImage_drawVolatile (JNIEnv *env, jobject, 
jlong, jint, jint, jint, jint);
 
 #ifdef __cplusplus
 }

Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
===================================================================
RCS file: 
/sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c       4 Jun 
2006 19:44:39 -0000       1.12
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c       6 Jun 
2006 02:22:28 -0000       1.13
@@ -163,6 +163,43 @@
   return PTR_TO_JLONG(cr);
 }
 
+JNIEXPORT jlong JNICALL 
+Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVolatile
+  (JNIEnv *env  __attribute__ ((unused)), jobject obj __attribute__ ((unused)),
+   jlong ptr, jint width, jint height)
+{
+  Drawable draw;
+  Display * dpy;
+  Visual * vis;
+  GdkDrawable *drawable;
+  cairo_surface_t *surface;
+  cairo_t *cr;
+
+  gdk_threads_enter();
+
+  drawable = JLONG_TO_PTR(GdkDrawable, ptr);
+  g_assert (drawable != NULL);
+
+  draw = gdk_x11_drawable_get_xid(drawable);
+  g_assert (draw != (XID) 0);
+  
+  dpy = gdk_x11_drawable_get_xdisplay(drawable);
+  g_assert (dpy != NULL);
+  
+  vis = gdk_x11_visual_get_xvisual(gdk_drawable_get_visual(drawable));
+  g_assert (vis != NULL);
+  
+  surface = cairo_xlib_surface_create (dpy, draw, vis, width, height);
+  g_assert (surface != NULL);
+
+  cr = cairo_create (surface);
+  g_assert(cr != NULL);
+
+  gdk_threads_leave();
+
+  return PTR_TO_JLONG(cr);
+}
+
 JNIEXPORT void JNICALL 
 Java_gnu_java_awt_peer_gtk_ComponentGraphics_start_1gdk_1drawing
   (JNIEnv *env __attribute__ ((unused)), jobject obj __attribute__ ((unused)))
@@ -220,7 +257,6 @@
   GdkGC *gc;
 
   gdk_threads_enter();
-
   ptr = NSA_GET_PTR (env, peer);
   g_assert (ptr != NULL);
 
@@ -229,14 +265,16 @@
 
   pixmap = cp_gtk_get_pixmap( env, img );
  
-  gc = gdk_gc_new(GDK_DRAWABLE(widget->window));
-  gdk_draw_drawable(GDK_DRAWABLE(widget->window),
+  gc = gdk_gc_new(widget->window);
+  gdk_draw_drawable(widget->window,
                    gc,
                    pixmap,
                    0, 0,
                    x, y,
                    w, h);
 
+  g_object_unref( gc );
+
   schedule_flush ();
 
   gdk_threads_leave();

Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c
===================================================================
RCS file: 
/sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c        4 Jun 
2006 17:52:05 -0000       1.2
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkVolatileImage.c        6 Jun 
2006 02:22:29 -0000       1.3
@@ -146,28 +146,54 @@
 }
 
 /**
- * Update the pixels.
+ * Copy area
  */
 JNIEXPORT void JNICALL 
-Java_gnu_java_awt_peer_gtk_GtkVolatileImage_update
-(JNIEnv *env, jobject obj, jobject gtkimage)
+Java_gnu_java_awt_peer_gtk_GtkVolatileImage_copyArea
+(JNIEnv *env, jobject obj, jint x, jint y, jint w, jint h, jint dx, jint dy)
 {
-  GdkPixmap *pixmap = getNativeObject(env, obj);
   GdkPixbuf *pixbuf;
+  GdkPixmap* pixmap = getNativeObject(env, obj);
 
-  gdk_threads_enter();
-  g_assert( pixmap != NULL );
+  g_assert (pixmap != NULL);
 
-  pixbuf = cp_gtk_image_get_pixbuf (env, gtkimage);
-  g_assert( pixbuf != NULL );
+  gdk_threads_enter();
 
+  pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, TRUE, 8, w, h );
+  gdk_pixbuf_get_from_drawable( pixbuf, pixmap, NULL, x, y, 0, 0, w, h );
   gdk_draw_pixbuf (pixmap, NULL, pixbuf,
-                  0, 0, 0, 0,  /* src and dest x, y */
-                  -1, -1, /* full width, height */
+                  0, 0, x + dx, y + dy, 
+                  w, h, 
                   GDK_RGB_DITHER_NORMAL, 0, 0);
   gdk_threads_leave();
 }
 
+JNIEXPORT void JNICALL 
+Java_gnu_java_awt_peer_gtk_GtkVolatileImage_drawVolatile
+(JNIEnv *env, jobject obj, jlong ptr, jint x, jint y, jint w, jint h)
+{
+  GdkPixmap *dst, *src;
+  GdkGC *gc;
+
+  src = JLONG_TO_PTR(GdkPixmap, ptr);
+  dst = getNativeObject(env, obj);
+  g_assert (src != NULL);
+  g_assert (dst != NULL);
+
+  gdk_threads_enter();
+ 
+  gc = gdk_gc_new( dst );
+  gdk_draw_drawable(dst,
+                   gc,
+                   src,
+                   0, 0,
+                   x, y,
+                   w, h);
+  g_object_unref( gc );
+
+  gdk_threads_leave();
+}
+
 GdkPixmap *cp_gtk_get_pixmap( JNIEnv *env, jobject obj)
 {
   return (GdkPixmap *)getNativeObject(env, obj);




reply via email to

[Prev in Thread] Current Thread [Next in Thread]