This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][patch] some fixes to glyph vectors
- From: graydon hoare <graydon at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Thu, 10 Feb 2005 00:02:41 -0500
- Subject: [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);