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