You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2007/08/09 18:27:17 UTC

svn commit: r564263 - in /poi/trunk/src: java/org/apache/poi/hssf/usermodel/FontDetails.java java/org/apache/poi/hssf/usermodel/StaticFontMetrics.java testcases/org/apache/poi/hssf/usermodel/TestEscherGraphics2d.java

Author: nick
Date: Thu Aug  9 09:27:16 2007
New Revision: 564263

URL: http://svn.apache.org/viewvc?view=rev&rev=564263
Log:
Further enhancements to Font Metrics support, wrt fonts with bold/italic varients, such as dialog (plus tests)

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/FontDetails.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/StaticFontMetrics.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEscherGraphics2d.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/FontDetails.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/FontDetails.java?view=diff&rev=564263&r1=564262&r2=564263
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/FontDetails.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/FontDetails.java Thu Aug  9 09:27:16 2007
@@ -82,6 +82,16 @@
         }
     }
 
+	protected static String buildFontHeightProperty(String fontName) {
+		return "font." + fontName + ".height";
+	}
+	protected static String buildFontWidthsProperty(String fontName) {
+		return "font." + fontName + ".widths";
+	}
+	protected static String buildFontCharactersProperty(String fontName) {
+		return "font." + fontName + ".characters";
+	}
+
     /**
      * Create an instance of <code>FontDetails</code> by loading them from the
      * provided property object.
@@ -92,9 +102,9 @@
      */
     public static FontDetails create( String fontName, Properties fontMetricsProps )
     {
-        String heightStr = fontMetricsProps.getProperty( "font." + fontName + ".height");
-        String widthsStr = fontMetricsProps.getProperty( "font." + fontName + ".widths");
-        String charactersStr = fontMetricsProps.getProperty( "font." + fontName + ".characters");
+        String heightStr = fontMetricsProps.getProperty( buildFontHeightProperty(fontName) );
+        String widthsStr = fontMetricsProps.getProperty( buildFontWidthsProperty(fontName) );
+        String charactersStr = fontMetricsProps.getProperty( buildFontCharactersProperty(fontName) );
 
         // Ensure that this is a font we know about
         if(heightStr == null || widthsStr == null || charactersStr == null) {

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/StaticFontMetrics.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/StaticFontMetrics.java?view=diff&rev=564263&r1=564262&r2=564263
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/StaticFontMetrics.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/StaticFontMetrics.java Thu Aug  9 09:27:16 2007
@@ -32,7 +32,9 @@
  */
 class StaticFontMetrics
 {
+	/** The font metrics property file we're using */
     private static Properties fontMetricsProps;
+	/** Our cache of font details we've already looked up */
     private static Map fontDetailsMap = new HashMap();
 
     /**
@@ -42,6 +44,8 @@
      */
     public static FontDetails getFontDetails(Font font)
     {
+		// If we haven't already identified out font metrics file,
+		//  figure out which one to use and load it
         if (fontMetricsProps == null)
         {
             InputStream metricsIn = null;
@@ -81,16 +85,31 @@
             }
         }
 
+		// Grab the base name of the font they've asked about
         String fontName = font.getName();
 
-        if (fontDetailsMap.get(fontName) == null)
-        {
+		// Some fonts support plain/bold/italic/bolditalic variants
+		// Others have different font instances for bold etc
+		// (eg font.dialog.plain.* vs font.Californian FB Bold.*)
+		String fontStyle = "";
+		if(font.isPlain())  fontStyle += "plain";
+		if(font.isBold())   fontStyle += "bold";
+		if(font.isItalic()) fontStyle += "italic";
+
+		// Do we have a definition for this font with just the name?
+		// If not, check with the font style added
+		if(fontMetricsProps.get(FontDetails.buildFontHeightProperty(fontName)) == null && 
+		fontMetricsProps.get(FontDetails.buildFontHeightProperty(fontName+"."+fontStyle)) != null) {
+			// Need to add on the style to the font name
+			fontName += "." + fontStyle;
+		}
+
+		// Get the details on this font
+        if (fontDetailsMap.get(fontName) == null) {
             FontDetails fontDetails = FontDetails.create(fontName, fontMetricsProps);
             fontDetailsMap.put( fontName, fontDetails );
             return fontDetails;
-        }
-        else
-        {
+        } else {
             return (FontDetails) fontDetailsMap.get(fontName);
         }
 

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEscherGraphics2d.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEscherGraphics2d.java?view=diff&rev=564263&r1=564262&r2=564263
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEscherGraphics2d.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestEscherGraphics2d.java Thu Aug  9 09:27:16 2007
@@ -56,6 +56,15 @@
 		graphics.setFont(font);
         graphics.drawString("This is another test", 10, 10);
 
+		// And test with ones that need the style appending
+		font = new Font("dialog", Font.PLAIN, 12);
+		graphics.setFont(font);
+        graphics.drawString("This is another test", 10, 10);
+
+		font = new Font("dialog", Font.BOLD, 12);
+		graphics.setFont(font);
+        graphics.drawString("This is another test", 10, 10);
+
 		// But with an invalid font, we get an exception
 		font = new Font("IamAmadeUPfont", Font.PLAIN, 22);
 		graphics.setFont(font);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org