Author: vhennebert
Date: Thu Feb 20 21:29:15 2014
New Revision: 1570359

URL: http://svn.apache.org/r1570359
Log:
BATIK-1067: Defer font-face loading to FontFamilyResolver

Modified:
    xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java
    
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
    
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java

Modified: xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java?rev=1570359&r1=1570358&r2=1570359&view=diff
==============================================================================
--- xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java 
(original)
+++ xmlgraphics/batik/trunk/sources/org/apache/batik/bridge/FontFace.java Thu 
Feb 20 21:29:15 2014
@@ -18,23 +18,21 @@
  */
 package org.apache.batik.bridge;
 
-import java.awt.Font;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.svg.SVGDocument;
+
 import org.apache.batik.dom.AbstractNode;
-import org.apache.batik.gvt.font.AWTFontFamily;
 import org.apache.batik.gvt.font.FontFamilyResolver;
 import org.apache.batik.gvt.font.GVTFontFace;
 import org.apache.batik.gvt.font.GVTFontFamily;
 import org.apache.batik.util.ParsedURL;
 import org.apache.batik.util.XMLConstants;
 
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.svg.SVGDocument;
-
 /**
  * This class represents a <font-face> element or @font-face rule
  *
@@ -94,21 +92,18 @@ public abstract class FontFace extends G
      */
     public GVTFontFamily getFontFamily(BridgeContext ctx) {
         final FontFamilyResolver fontFamilyResolver = 
ctx.getFontFamilyResolver();
-        String name = fontFamilyResolver.lookup(familyName);
-        if (name != null) {
-            GVTFontFace ff = createFontFace(name, this);
-            return new AWTFontFamily(ff);
+        GVTFontFamily family = fontFamilyResolver.resolve(familyName, this);
+        if (family != null) {
+            return family;
         }
 
         Iterator iter = srcs.iterator();
         while (iter.hasNext()) {
             Object o = iter.next();
             if (o instanceof String) {
-                String str = (String)o;
-                name = fontFamilyResolver.lookup(str);
-                if (name != null) {
-                    GVTFontFace ff = createFontFace(str, this);
-                    return new AWTFontFamily(ff);
+                family = fontFamilyResolver.resolve((String) o, this);
+                if (family != null) {
+                    return family;
                 }
             } else if (o instanceof ParsedURL) {
                 try {
@@ -129,7 +124,7 @@ public abstract class FontFace extends G
             }
         }
 
-        return new AWTFontFamily(this);
+        return null;
     }
 
     /**
@@ -198,7 +193,7 @@ public abstract class FontFace extends G
                 }
             }
             // todo : if the above loop fails to find a fontFaceElt, a null is 
passed to createFontFace()
-            
+
             SVGFontFaceElementBridge fontFaceBridge;
             fontFaceBridge = (SVGFontFaceElementBridge)ctx.getBridge
                 (SVG_NAMESPACE_URI, SVG_FONT_FACE_TAG);
@@ -208,11 +203,8 @@ public abstract class FontFace extends G
             return new SVGFontFamily(gff, fontElt, ctx);
         }
         // Must be a reference to a 'Web Font'.
-        // Let's see if JDK can parse it.
         try {
-            Font font = Font.createFont(Font.TRUETYPE_FONT,
-                                        purl.openStream());
-            return new AWTFontFamily(this, font);
+            return ctx.getFontFamilyResolver().loadFont(purl.openStream(), 
this);
         } catch (Exception ex) {
         }
         return null;

Modified: 
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java?rev=1570359&r1=1570358&r2=1570359&view=diff
==============================================================================
--- 
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
 (original)
+++ 
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/DefaultFontFamilyResolver.java
 Thu Feb 20 21:29:15 2014
@@ -20,6 +20,7 @@ package org.apache.batik.gvt.font;
 
 import java.awt.Font;
 import java.awt.GraphicsEnvironment;
+import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
@@ -28,6 +29,8 @@ import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 
+import org.apache.batik.bridge.FontFace;
+
 /**
  * The is a utility class that is used for resolving UnresolvedFontFamilies.
  *
@@ -130,9 +133,19 @@ public final class DefaultFontFamilyReso
      */
     protected static final Map resolvedFontFamilies = new HashMap();
 
-    /** {@inheritDoc} */
-    public String lookup(String familyName) {
-        return (String)fonts.get(familyName.toLowerCase());
+    public AWTFontFamily resolve(String familyName, FontFace fontFace) {
+        String fontName = 
(String)fonts.get(fontFace.getFamilyName().toLowerCase());
+        if (fontName == null) {
+            return null;
+        } else {
+            GVTFontFace face = FontFace.createFontFace(fontName, fontFace);
+            return new AWTFontFamily(fontFace);
+        }
+    }
+
+    public GVTFontFamily loadFont(InputStream in, FontFace ff) throws 
Exception {
+        Font font = Font.createFont(Font.TRUETYPE_FONT, 
in.toURL().openStream());
+        return new AWTFontFamily(ff, font);
     }
 
     /** {@inheritDoc} */

Modified: 
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
URL: 
http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java?rev=1570359&r1=1570358&r2=1570359&view=diff
==============================================================================
--- 
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
 (original)
+++ 
xmlgraphics/batik/trunk/sources/org/apache/batik/gvt/font/FontFamilyResolver.java
 Thu Feb 20 21:29:15 2014
@@ -19,9 +19,11 @@
 
 package org.apache.batik.gvt.font;
 
-public interface FontFamilyResolver {
+import java.io.InputStream;
+
+import org.apache.batik.bridge.FontFace;
 
-    String lookup(String familyName);
+public interface FontFamilyResolver {
 
     /**
      * Resolves a font family name into a GVTFontFamily. If the font
@@ -34,9 +36,12 @@ public interface FontFamilyResolver {
      */
     GVTFontFamily resolve(String familyName);
 
+    GVTFontFamily resolve(String familyName, FontFace fontFace);
+
+    GVTFontFamily loadFont(InputStream in, FontFace fontFace) throws Exception;
+
     GVTFontFamily getDefault();
 
     GVTFontFamily getFamilyThatCanDisplay(char c);
 
-
 }


Reply via email to