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]

Reply via email to