This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[gui][patch] some fixes to glyph vectors


hi,

this patch, which I've committed to the java-gui-20050128-branch, fixes some incorrect uses of glyph vectors, which resulted in small scrunched-up font rendering in certain contexts. it also completes the removal if GdkFontMetrics, which seems to have been missed with the last CVS commit I made.

-graydon

2005-02-08 Graydon Hoare <graydon@redhat.com>

	* gnu/java/awt/peer/gtk/GdkPixbufDecoder.java:
	(finalize): Call finish from here.
	(produce): Not from here.
	* Makefile.am (gtk_c_source_files):
	Remove jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c.
	* Makefile.in: Regenerate.
	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(cairoSetFont):
	(cairoDrawGdkTextLayout):
	(cairoDrawString):
	(getPeerTextMetrics):
	(getPeerFontMetrics): Remove.
	(setFont): Don't call cairoSetFont.
	(cairoDrawGlyphVector): Accept font peer argument.
	(drawGlyphVector): Pass font peer to cairoDrawGlyphVector.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	
	(ensure_metrics_cairo):
	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont):
	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString):
	(gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerFontMetrics):
	(gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerTextMetrics):
	(metrics_cairo):
	(metrics_surface): Remove.
	(gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector):
	Pass and install font peer.
--- Makefile.am	8 Feb 2005 05:22:02 -0000	1.436.2.1
+++ Makefile.am	10 Feb 2005 04:46:59 -0000
@@ -250,7 +250,6 @@
 gtk_c_source_files = \
 $(gtk_cairo_c_source_files) \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
-jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
--- Makefile.in	8 Feb 2005 05:22:03 -0000	1.466.2.1
+++ Makefile.in	10 Feb 2005 04:47:01 -0000
@@ -187,7 +187,6 @@
 	gnu/java/awt/peer/gtk/GThreadNativeMethodRunner.java \
 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c \
 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
-	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
 	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
@@ -277,7 +276,6 @@
 @GTK_CAIRO_TRUE@am__objects_4 = jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.lo
 am__objects_5 = $(am__objects_4) \
 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo \
-	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo \
 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo \
 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.lo \
 	jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.lo \
@@ -4199,7 +4197,6 @@
 gtk_c_source_files = \
 $(gtk_cairo_c_source_files) \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c \
-jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c \
 jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
@@ -7422,9 +7419,6 @@
 jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo:  \
 	jni/gtk-peer/$(am__dirstamp) \
 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
-jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo:  \
-	jni/gtk-peer/$(am__dirstamp) \
-	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
 jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo:  \
 	jni/gtk-peer/$(am__dirstamp) \
 	jni/gtk-peer/$(DEPDIR)/$(am__dirstamp)
@@ -19370,8 +19364,6 @@
 	-rm -f jni/classpath/lib_gnu_java_awt_peer_gtk_la-primlib.lo
 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.$(OBJEXT)
 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.lo
-	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.$(OBJEXT)
-	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo
 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.$(OBJEXT)
 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo
 	-rm -f jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.$(OBJEXT)
@@ -22084,7 +22076,6 @@
 @AMDEP_TRUE@@am__include@ @am__quote@jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-native_state.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@jni/classpath/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-primlib.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkGraphics2D.Plo@am__quote@
@@ -22225,13 +22216,6 @@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkTextLayout.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c
 
-jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
-@am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c; \
-@am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.Tpo"; exit 1; fi
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c' object='jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontMetrics.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c
-
 jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo: jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
 @am__fastdepCC_TRUE@	if $(LIBTOOL) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(lib_gnu_java_awt_peer_gtk_la_CFLAGS) $(CFLAGS) -MT jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo -MD -MP -MF "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Tpo" -c -o jni/gtk-peer/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.lo `test -f 'jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c' || echo '$(srcdir)/'`jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c; \
 @am__fastdepCC_TRUE@	then mv -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Tpo" "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Plo"; else rm -f "jni/gtk-peer/$(DEPDIR)/lib_gnu_java_awt_peer_gtk_la-gnu_java_awt_peer_gtk_GdkFontPeer.Tpo"; exit 1; fi
--- gnu/java/awt/peer/gtk/GdkGraphics2D.java	8 Feb 2005 05:22:13 -0000	1.13.4.1
+++ gnu/java/awt/peer/gtk/GdkGraphics2D.java	10 Feb 2005 04:47:01 -0000
@@ -285,7 +285,6 @@
   // simple passthroughs to cairo
   private native void cairoSave();
   private native void cairoRestore();
-  private native void cairoSetFont(GdkFontPeer fp);
   private native void cairoSetMatrix(double[] m);
   private native void cairoSetOperator(int cairoOperator);
   private native void cairoSetRGBColor(double red, double green, double blue);
@@ -1322,9 +1321,12 @@
   }
 
   // these are the most accelerated painting paths
-  native void cairoDrawGlyphVector(float x, float y, int n, int[] codes, float[] positions);
-  native void cairoDrawGdkTextLayout(GdkTextLayout gl, float x, float y);
-  native void cairoDrawString(String str, float x, float y);
+  native void cairoDrawGlyphVector(GdkFontPeer font, 
+                                   float x, float y, int n, 
+                                   int[] codes, float[] positions);
+
+  native void cairoDrawGdkTextLayout(GdkTextLayout gl, 
+                                     float x, float y);
 
   GdkFontPeer getFontPeer()
   {
@@ -1360,7 +1362,7 @@
     float[] positions = gv.getGlyphPositions (0, n, null);
     
     setFont (gv.getFont ());
-    cairoDrawGlyphVector (x, y, n, codes, positions);
+    cairoDrawGlyphVector (getFontPeer(), x, y, n, codes, positions);
     updateBufferedImage ();
   }
 
@@ -1416,11 +1418,6 @@
 
   static native void releasePeerGraphicsResource(GdkFontPeer f);
 
-  static native void getPeerTextMetrics(GdkFontPeer f, String str,
-                                        double[] metrics);
-
-  static native void getPeerFontMetrics(GdkFontPeer f, double[] metrics);
-
   public FontMetrics getFontMetrics()
   {
     return getFontMetrics(getFont());
@@ -1441,7 +1438,6 @@
       font = 
         ((ClasspathToolkit)(Toolkit.getDefaultToolkit()))
         .getFont(f.getName(), f.getAttributes());    
-    cairoSetFont(getFontPeer());
   }
 
   public String toString()
--- gnu/java/awt/peer/gtk/GdkPixbufDecoder.java	8 Feb 2005 05:22:14 -0000	1.6.4.1
+++ gnu/java/awt/peer/gtk/GdkPixbufDecoder.java	10 Feb 2005 04:47:01 -0000
@@ -176,9 +176,12 @@
       }
 
     curr = null;
-    finish();    
   }
 
+  public void finalize ()
+  {
+    finish();    
+  }
 
   public static class ImageFormatSpec
   {
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c	30 Nov 2004 23:59:12 -0000	1.5
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c	1 Jan 1970 00:00:00 -0000
@@ -1,115 +0,0 @@
-/* gdkfontmetrics.c
-   Copyright (C) 1999, 2003, 2004 Free Software Foundation, Inc.
-
-This file is part of GNU Classpath.
-
-GNU Classpath is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-GNU Classpath is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU Classpath; see the file COPYING.  If not, write to the
-Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-02111-1307 USA.
-
-Linking this library statically or dynamically with other modules is
-making a combined work based on this library.  Thus, the terms and
-conditions of the GNU General Public License cover the whole
-combination.
-
-As a special exception, the copyright holders of this library give you
-permission to link this library with independent modules to produce an
-executable, regardless of the license terms of these independent
-modules, and to copy and distribute the resulting executable under
-terms of your choice, provided that you also meet, for each linked
-independent module, the terms and conditions of the license of that
-module.  An independent module is a module which is not derived from
-or based on this library.  If you modify this library, you may extend
-this exception to your version of the library, but you are not
-obligated to do so.  If you do not wish to do so, delete this
-exception statement from your version. */
-
-#include "gtkpeer.h"
-#include "gdkfont.h"
-
-#include "gnu_java_awt_peer_gtk_GdkFontMetrics.h"
-#include <gdk/gdkx.h>
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerFontMetrics
-   (JNIEnv *env, jclass clazz __attribute__ ((unused)), jobject java_font, jdoubleArray java_metrics)
-{
-  struct peerfont *pfont = NULL;
-  jdouble *native_metrics = NULL;
-  PangoFontMetrics *pango_metrics;
-
-  gdk_threads_enter();
-
-  pfont = (struct peerfont *) NSA_GET_FONT_PTR (env, java_font);
-  g_assert (pfont != NULL);
-
-  pango_metrics = pango_context_get_metrics (pfont->ctx, pfont->desc,
-                                             gtk_get_default_language ());
-
-  native_metrics = (*env)->GetDoubleArrayElements (env, java_metrics, NULL);
-  g_assert (native_metrics != NULL);
-
-  native_metrics[FONT_METRICS_ASCENT] = PANGO_PIXELS (pango_font_metrics_get_ascent (pango_metrics));
-  native_metrics[FONT_METRICS_MAX_ASCENT] = native_metrics[FONT_METRICS_ASCENT];
-  native_metrics[FONT_METRICS_DESCENT] = PANGO_PIXELS (pango_font_metrics_get_descent (pango_metrics));
-  if (native_metrics[FONT_METRICS_DESCENT] < 0)
-    native_metrics[FONT_METRICS_DESCENT] = - native_metrics[FONT_METRICS_DESCENT];
-  native_metrics[FONT_METRICS_MAX_DESCENT] = native_metrics[FONT_METRICS_DESCENT];
-  native_metrics[FONT_METRICS_MAX_ADVANCE] = PANGO_PIXELS (pango_font_metrics_get_approximate_char_width (pango_metrics));
-	 
-  (*env)->ReleaseDoubleArrayElements (env, java_metrics, native_metrics, 0);
-
-  pango_font_metrics_unref (pango_metrics);
-
-  gdk_threads_leave();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GdkFontMetrics_getPeerTextMetrics
-   (JNIEnv *env, jclass clazz __attribute__ ((unused)), jobject java_font, jstring str, jdoubleArray java_metrics)
-{
-  struct peerfont *pfont = NULL;
-  const char *cstr = NULL;
-  jdouble *native_metrics = NULL;  
-  PangoRectangle log;
-
-  gdk_threads_enter();
-
-  pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, java_font);
-  g_assert (pfont != NULL);
-
-  cstr = (*env)->GetStringUTFChars (env, str, NULL);
-  g_assert(cstr != NULL);
-
-  pango_layout_set_text (pfont->layout, cstr, -1);
-  pango_layout_get_extents (pfont->layout, NULL, &log);
-
-  (*env)->ReleaseStringUTFChars (env, str, cstr);  
-  pango_layout_set_text (pfont->layout, "", -1);
-
-  native_metrics = (*env)->GetDoubleArrayElements (env, java_metrics, NULL);
-  g_assert (native_metrics != NULL);
-
-  native_metrics[TEXT_METRICS_X_BEARING] = PANGO_PIXELS(log.x);
-  native_metrics[TEXT_METRICS_Y_BEARING] = PANGO_PIXELS(log.y);
-  native_metrics[TEXT_METRICS_WIDTH] = PANGO_PIXELS(log.width);
-  native_metrics[TEXT_METRICS_HEIGHT] = PANGO_PIXELS(log.height);
-  native_metrics[TEXT_METRICS_X_ADVANCE] = PANGO_PIXELS(log.x + log.width);
-  native_metrics[TEXT_METRICS_Y_ADVANCE] = PANGO_PIXELS(log.y + log.height);
-	 
-  (*env)->ReleaseDoubleArrayElements (env, java_metrics, native_metrics, 0);
-
-  gdk_threads_leave();
-}
-
--- jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	8 Feb 2005 05:22:49 -0000	1.11.4.1
+++ jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c	10 Feb 2005 04:47:01 -0000
@@ -961,38 +961,6 @@
 
 
 JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoSetFont
-  (JNIEnv *env, jobject obj, jobject font)
-{
-  struct graphics2d *gr = NULL;
-  struct peerfont *pfont = NULL;
-
-  gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
-  g_assert(gr != NULL);
-
-  pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
-  g_assert (pfont != NULL);
-
-  install_font_peer (gr->cr, pfont, gr->debug);
-}
-
-
-static cairo_t *metrics_cairo = NULL;
-static cairo_surface_t *metrics_surface = NULL;
-
-static void
-ensure_metrics_cairo()
-{
-  if (metrics_cairo == NULL)
-    {
-      metrics_cairo = cairo_create ();
-      metrics_surface = cairo_image_surface_create (CAIRO_FORMAT_A8, 1, 1);
-      cairo_set_target_surface (metrics_cairo, metrics_surface);
-    }
-}
-
-
-JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GdkGraphics2D_releasePeerGraphicsResource
    (JNIEnv *env, jclass clazz __attribute__ ((unused)), jobject java_font)
 {
@@ -1011,78 +979,6 @@
   gdk_threads_leave();
 }
 
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerTextMetrics
-   (JNIEnv *env, jclass clazz __attribute__ ((unused)), jobject java_font, jstring str, jdoubleArray java_metrics)
-{
-  struct peerfont *pfont = NULL;
-  const char *cstr = NULL;
-  jdouble *native_metrics = NULL;
-  cairo_text_extents_t extents;
-
-  g_assert(java_font != NULL);
-  gdk_threads_enter();
-
-  pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, java_font);
-  g_assert (pfont != NULL);
-
-  ensure_metrics_cairo();
-  install_font_peer (metrics_cairo, pfont, 0);
-
-  cstr = (*env)->GetStringUTFChars (env, str, NULL);
-  g_assert(cstr != NULL);
-  cairo_text_extents (metrics_cairo, (unsigned char *) cstr, &extents);
-
-  native_metrics = (*env)->GetDoubleArrayElements (env, java_metrics, NULL);
-  g_assert (native_metrics != NULL);
-
-  native_metrics[TEXT_METRICS_X_BEARING] = extents.x_bearing;
-  native_metrics[TEXT_METRICS_Y_BEARING] = extents.y_bearing;
-  native_metrics[TEXT_METRICS_WIDTH] = extents.width;
-  native_metrics[TEXT_METRICS_HEIGHT] = extents.height;
-  native_metrics[TEXT_METRICS_X_ADVANCE] = extents.x_advance;
-  native_metrics[TEXT_METRICS_Y_ADVANCE] = extents.y_advance;
-	 
-  (*env)->ReleaseStringUTFChars (env, str, cstr);  
-  (*env)->ReleaseDoubleArrayElements (env, java_metrics, native_metrics, 0);
-  gdk_threads_leave();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GdkGraphics2D_getPeerFontMetrics
-   (JNIEnv *env, jclass clazz __attribute__ ((unused)), jobject java_font, jdoubleArray java_metrics)
-{
-  struct peerfont *pfont = NULL;
-  jdouble *native_metrics = NULL;
-  cairo_font_extents_t extents;
-
-  g_assert(java_font != NULL);
-
-  gdk_threads_enter();
-
-  pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, java_font);
-  g_assert (pfont != NULL);
-
-  ensure_metrics_cairo();
-  install_font_peer (metrics_cairo, pfont, 0);
-
-  cairo_current_font_extents (metrics_cairo, &extents); 
-
-  native_metrics = (*env)->GetDoubleArrayElements (env, java_metrics, NULL);
-  g_assert (native_metrics != NULL);
-
-  native_metrics[FONT_METRICS_ASCENT] = extents.ascent;
-  native_metrics[FONT_METRICS_MAX_ASCENT] = extents.ascent;
-  native_metrics[FONT_METRICS_DESCENT] = extents.descent;
-  if (native_metrics[FONT_METRICS_DESCENT] < 0)
-    native_metrics[FONT_METRICS_DESCENT] = - native_metrics[FONT_METRICS_DESCENT];
-  native_metrics[FONT_METRICS_MAX_DESCENT] = native_metrics[FONT_METRICS_DESCENT];
-  native_metrics[FONT_METRICS_MAX_ADVANCE] = extents.max_x_advance;
-
-  (*env)->ReleaseDoubleArrayElements (env, java_metrics, native_metrics, 0);
-  gdk_threads_leave();
-}
-
 static void
 paint_glyph_run(JNIEnv *env,
 		struct graphics2d *gr,
@@ -1139,85 +1035,18 @@
     }
 }
 
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawString
-  (JNIEnv *env, jobject obj, jstring str, float x, float y)
-{
-  struct graphics2d *gr = NULL;
-  const char *cstr = NULL;
-
-  /*
-  cairo_glyph_t *glyphs = NULL;
-  gint n_glyphs = 0;
-  PangoLayoutRun *run = NULL;
-  PangoLayoutIter *iter = NULL;
-  */
-
-  g_assert(obj != NULL);
-  g_assert(str != NULL);
-
-  gdk_threads_enter ();
-  if (peer_is_disposed(env, obj)) { gdk_threads_leave(); return; }
-
-  gr = (struct graphics2d *) NSA_GET_G2D_PTR (env, obj);
-  g_assert(gr != NULL);
-
-  cstr = (*env)->GetStringUTFChars (env, str, NULL);
-  g_assert(cstr != NULL);
-
-  if (gr->debug) printf ("painting string '%s' at (%f,%f)\n", cstr, x, y);
-
-  /* For now we let cairo do the glyph conversion; eventually this
-   * ought to be unified with pango, but it is impossible to get
-   * pango and cairo to agree on metrics at the moment, so we either
-   * have to use "all cairo" metrics (the string-based APIs) or 
-   * "all pango" metrics (the glyph-vector based APIs). 
-   */
-
-  cairo_move_to (gr->cr, x, y);
-  cairo_show_text (gr->cr, (unsigned char *) cstr);
-  
-  /*
-    
-  pango_layout_set_text (gr->pango_layout, cstr, -1);
-
-  iter = pango_layout_get_iter (gr->pango_layout);
-  g_assert(iter != NULL);
-
-  cairo_translate (gr->cr, x, y);
-
-  do 
-    {
-      run = pango_layout_iter_get_run (iter);
-      if (run != NULL)
-	paint_glyph_run (gr, &glyphs, &n_glyphs, run);
-    } 
-  while (pango_layout_iter_next_run (iter));
-  
-  if (glyphs != NULL)
-    g_free (glyphs);
-
-  cairo_translate (gr->cr, -x, -y);
-  
-  pango_layout_iter_free (iter);
-
-  */
-
-  gdk_threads_leave ();
-
-  (*env)->ReleaseStringUTFChars (env, str, cstr);
-}
-
 
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoDrawGlyphVector
    (JNIEnv *env, jobject self, 
+    jobject font,
     jfloat x, jfloat y, jint n,
     jintArray java_codes,
     jfloatArray java_positions)
 {
   
   struct graphics2d *gr = NULL;
+  struct peerfont *pfont = NULL;
   cairo_glyph_t *glyphs = NULL;
   int *native_codes;
   float *native_positions;
@@ -1233,6 +1062,11 @@
   gr = (struct graphics2d *)NSA_GET_G2D_PTR (env, self);
   g_assert (gr != NULL);
 
+  pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font);
+  g_assert (pfont != NULL);
+
+  install_font_peer(gr->cr, pfont, gr->debug);
+
   glyphs = malloc( sizeof(cairo_glyph_t) * n);
   g_assert (glyphs != NULL);
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]