bella 01/07/04 23:47:04 Modified: sources/org/apache/batik/bridge UnitProcessor.java Log: fixed problem with em and ex unit conversion when font size is not a float value (eg medium) Revision Changes Path 1.3 +63 -19 xml-batik/sources/org/apache/batik/bridge/UnitProcessor.java Index: UnitProcessor.java =================================================================== RCS file: /home/cvs/xml-batik/sources/org/apache/batik/bridge/UnitProcessor.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- UnitProcessor.java 2001/03/15 16:28:08 1.2 +++ UnitProcessor.java 2001/07/05 06:47:03 1.3 @@ -26,7 +26,7 @@ * * @author <a href="mailto:[EMAIL PROTECTED]">Stephane Hillion</a> * @author <a href="mailto:[EMAIL PROTECTED]">Thierry Kormann</a> - * @version $Id: UnitProcessor.java,v 1.2 2001/03/15 16:28:08 tkormann Exp $ + * @version $Id: UnitProcessor.java,v 1.3 2001/07/05 06:47:03 bella Exp $ */ public abstract class UnitProcessor { @@ -699,10 +699,20 @@ protected static float pixelsToEms(float v, short d, Context ctx) { CSSPrimitiveValue fontSize = ctx.getFontSize(); short type = fontSize.getPrimitiveType(); - return v / cssToUserSpace(fontSize.getFloatValue(type), - type, - d, - ctx); + switch (type) { + case CSSPrimitiveValue.CSS_IDENT: + float fs = ctx.getMediumFontSize(); + fs = TextUtilities.parseFontSize(fontSize.getStringValue(), fs); + return v / cssToUserSpace(fs, + CSSPrimitiveValue.CSS_PT, + d, + ctx); + default: + return v / cssToUserSpace(fontSize.getFloatValue(type), + type, + d, + ctx); + } } /** @@ -715,10 +725,20 @@ protected static float emsToPixels(float v, short d, Context ctx) { CSSPrimitiveValue fontSize = ctx.getFontSize(); short type = fontSize.getPrimitiveType(); - return v * cssToUserSpace(fontSize.getFloatValue(type), - type, - d, - ctx); + switch (type) { + case CSSPrimitiveValue.CSS_IDENT: + float fs = ctx.getMediumFontSize(); + fs = TextUtilities.parseFontSize(fontSize.getStringValue(), fs); + return v * cssToUserSpace(fs, + CSSPrimitiveValue.CSS_PT, + d, + ctx); + default: + return v * cssToUserSpace(fontSize.getFloatValue(type), + type, + d, + ctx); + } } /** @@ -731,12 +751,24 @@ protected static float pixelsToExs(float v, short d, Context ctx) { CSSPrimitiveValue fontSize = ctx.getFontSize(); short type = fontSize.getPrimitiveType(); - float fs = cssToUserSpace(fontSize.getFloatValue(type), - type, - d, - ctx); + float fontSizeVal; + switch (type) { + case CSSPrimitiveValue.CSS_IDENT: + float fs = ctx.getMediumFontSize(); + fs = TextUtilities.parseFontSize(fontSize.getStringValue(), fs); + fontSizeVal = cssToUserSpace(fs, + CSSPrimitiveValue.CSS_PT, + d, + ctx); + break; + default: + fontSizeVal = cssToUserSpace(fontSize.getFloatValue(type), + type, + d, + ctx); + } float xh = ctx.getXHeight(); - return v / xh / fs; + return v / xh / fontSizeVal; } /** @@ -749,12 +781,24 @@ protected static float exsToPixels(float v, short d, Context ctx) { CSSPrimitiveValue fontSize = ctx.getFontSize(); short type = fontSize.getPrimitiveType(); - float fs = cssToUserSpace(fontSize.getFloatValue(type), - type, - d, - ctx); + float fontSizeVal; + switch (type) { + case CSSPrimitiveValue.CSS_IDENT: + float fs = ctx.getMediumFontSize(); + fs = TextUtilities.parseFontSize(fontSize.getStringValue(), fs); + fontSizeVal = cssToUserSpace(fs, + CSSPrimitiveValue.CSS_PT, + d, + ctx); + break; + default: + fontSizeVal = cssToUserSpace(fontSize.getFloatValue(type), + type, + d, + ctx); + } float xh = ctx.getXHeight(); - return v * xh * fs; + return v * xh * fontSizeVal; } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]