[kaffe] CVS kaffe (dalibor): Resynced with GNU Classpath
Kaffe CVS
cvs-commits at kaffe.org
Wed Dec 3 13:12:03 PST 2003
PatchSet 4188
Date: 2003/12/03 21:10:00
Author: dalibor
Branch: HEAD
Tag: (none)
Log:
Resynced with GNU Classpath
2003-12-03 Dalibor Topic <robilad at kaffe.org>
* libraries/javalib/java/awt/Font.java:
(createGlyphVector) Added new methods from GNU Classpath.
* libraries/javalib/java/awt/font/TextLayout.java:
Resynced with GNU Classpath.
2003-11-18 Graydon Hoare <graydon at redhat.com>
* java/awt/font/TextLayout.java: Implement simple layouts
using attributed strings and glyph vectors.
Members:
ChangeLog:1.1779->1.1780
libraries/javalib/java/awt/Font.java:1.13->1.14
libraries/javalib/java/awt/font/TextLayout.java:1.1->1.2
Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.1779 kaffe/ChangeLog:1.1780
--- kaffe/ChangeLog:1.1779 Wed Dec 3 20:48:07 2003
+++ kaffe/ChangeLog Wed Dec 3 21:10:00 2003
@@ -1,5 +1,18 @@
2003-12-03 Dalibor Topic <robilad at kaffe.org>
+ * libraries/javalib/java/awt/Font.java:
+ (createGlyphVector) Added new methods from GNU Classpath.
+
+ * libraries/javalib/java/awt/font/TextLayout.java:
+ Resynced with GNU Classpath.
+
+ 2003-11-18 Graydon Hoare <graydon at redhat.com>
+
+ * java/awt/font/TextLayout.java: Implement simple layouts
+ using attributed strings and glyph vectors.
+
+2003-12-03 Dalibor Topic <robilad at kaffe.org>
+
* libraries/javalib/gnu/java/net/protocol/jar/Handler.java:
Resynced with GNU Classpath.
Index: kaffe/libraries/javalib/java/awt/Font.java
diff -u kaffe/libraries/javalib/java/awt/Font.java:1.13 kaffe/libraries/javalib/java/awt/Font.java:1.14
--- kaffe/libraries/javalib/java/awt/Font.java:1.13 Sun Jul 14 23:24:58 2002
+++ kaffe/libraries/javalib/java/awt/Font.java Wed Dec 3 21:10:01 2003
@@ -1,7 +1,10 @@
package java.awt;
+import java.awt.font.GlyphVector;
+import java.awt.font.FontRenderContext;
import java.awt.peer.FontPeer;
import java.io.Serializable;
+import java.text.CharacterIterator;
import kaffe.util.Ptr;
/**
@@ -221,5 +224,30 @@
return getClass().getName() + "[family=" +getFamily() + ",name=" + name
+ ",style=" + s + ",size=" + size + ']';
+}
+
+/* taken from GNU Classpath */
+public GlyphVector
+createGlyphVector(FontRenderContext ctx, String str)
+{
+ throw new UnsupportedOperationException ();
+}
+
+public GlyphVector
+createGlyphVector(FontRenderContext ctx, CharacterIterator i)
+{
+ throw new UnsupportedOperationException ();
+}
+
+public GlyphVector
+createGlyphVector(FontRenderContext ctx, char[] chars)
+{
+ throw new UnsupportedOperationException ();
+}
+
+public GlyphVector
+createGlyphVector(FontRenderContext ctx, int[] glyphCodes)
+{
+ throw new UnsupportedOperationException ();
}
}
Index: kaffe/libraries/javalib/java/awt/font/TextLayout.java
diff -u kaffe/libraries/javalib/java/awt/font/TextLayout.java:1.1 kaffe/libraries/javalib/java/awt/font/TextLayout.java:1.2
--- kaffe/libraries/javalib/java/awt/font/TextLayout.java:1.1 Fri Aug 15 16:59:01 2003
+++ kaffe/libraries/javalib/java/awt/font/TextLayout.java Wed Dec 3 21:10:03 2003
@@ -43,8 +43,12 @@
import java.awt.Shape;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
+import java.text.CharacterIterator;
import java.text.AttributedCharacterIterator;
+import java.text.AttributedString;
import java.util.Map;
+import java.awt.font.TextAttribute;
+
/**
* @author Michael Koch
@@ -67,24 +71,26 @@
}
}
+ private AttributedString attributedString;
private FontRenderContext fontRenderContext;
public TextLayout (AttributedCharacterIterator text, FontRenderContext frc)
- {
- // FIXME
- this.fontRenderContext = frc;
+ {
+ attributedString = new AttributedString (text);
+ fontRenderContext = frc;
}
public TextLayout (String string, Font font, FontRenderContext frc)
{
- // FIXME
- this.fontRenderContext = frc;
+ attributedString = new AttributedString (string);
+ attributedString.addAttribute (TextAttribute.FONT, font);
+ fontRenderContext = frc;
}
public TextLayout (String string, Map attributes, FontRenderContext frc)
{
- // FIXME
- this.fontRenderContext = frc;
+ attributedString = new AttributedString (string, attributes);
+ fontRenderContext = frc;
}
protected Object clone ()
@@ -100,9 +106,147 @@
}
}
+
+ protected class CharacterIteratorProxy
+ implements CharacterIterator
+ {
+ public CharacterIterator target;
+ public int begin;
+ public int limit;
+ public int index;
+
+ public CharacterIteratorProxy (CharacterIterator ci)
+ {
+ target = ci;
+ }
+
+ public int getBeginIndex ()
+ {
+ return begin;
+ }
+
+ public int getEndIndex ()
+ {
+ return limit;
+ }
+
+ public int getIndex ()
+ {
+ return index;
+ }
+
+ public char setIndex (int idx)
+ throws IllegalArgumentException
+ {
+ if (idx < begin || idx >= limit)
+ throw new IllegalArgumentException ();
+ char ch = target.setIndex (idx);
+ index = idx;
+ return ch;
+ }
+
+ public char first ()
+ {
+ int save = target.getIndex ();
+ char ch = target.setIndex (begin);
+ target.setIndex (save);
+ return ch;
+ }
+
+ public char last ()
+ {
+ if (begin == limit)
+ return this.first ();
+
+ int save = target.getIndex ();
+ char ch = target.setIndex (limit - 1);
+ target.setIndex (save);
+ return ch;
+ }
+
+ public char current ()
+ {
+ return target.current();
+ }
+
+ public char next ()
+ {
+ if (index >= limit - 1)
+ return CharacterIterator.DONE;
+ else
+ {
+ index++;
+ return target.next();
+ }
+ }
+
+ public char previous ()
+ {
+ if (index <= begin)
+ return CharacterIterator.DONE;
+ else
+ {
+ index--;
+ return target.previous ();
+ }
+ }
+
+ public Object clone ()
+ {
+ CharacterIteratorProxy cip = new CharacterIteratorProxy (this.target);
+ cip.begin = this.begin;
+ cip.limit = this.limit;
+ cip.index = this.index;
+ return cip;
+ }
+
+ }
+
+
public void draw (Graphics2D g2, float x, float y)
{
- throw new Error ("not implemented");
+ AttributedCharacterIterator ci = attributedString.getIterator ();
+ CharacterIteratorProxy proxy = new CharacterIteratorProxy (ci);
+ Font defFont = g2.getFont ();
+
+ /* Note: this implementation currently only interprets FONT text
+ * attributes. There is a reasonable argument to be made for some
+ * attributes being interpreted out here, where we have control of the
+ * Graphics2D and can construct or derive new fonts, and some
+ * attributes being interpreted by the GlyphVector itself. So far, for
+ * all attributes except FONT we do neither.
+ */
+
+ for (char c = ci.first ();
+ c != CharacterIterator.DONE;
+ c = ci.next ())
+ {
+ proxy.begin = ci.getIndex ();
+ proxy.limit = ci.getRunLimit(TextAttribute.FONT);
+ if (proxy.limit <= proxy.begin)
+ continue;
+
+ proxy.index = proxy.begin;
+
+ Object fnt = ci.getAttribute(TextAttribute.FONT);
+ GlyphVector gv;
+ if (fnt instanceof Font)
+ gv = ((Font)fnt).createGlyphVector (fontRenderContext, proxy);
+ else
+ gv = defFont.createGlyphVector (fontRenderContext, proxy);
+
+ g2.drawGlyphVector (gv, x, y);
+
+ int n = gv.getNumGlyphs ();
+ for (int i = 0; i < n; ++i)
+ {
+ GlyphMetrics gm = gv.getGlyphMetrics (i);
+ if (gm.getAdvanceX() == gm.getAdvance ())
+ x += gm.getAdvanceX ();
+ else
+ y += gm.getAdvanceY ();
+ }
+ }
}
public boolean equals (Object obj)
More information about the kaffe
mailing list