jeremias    2005/01/03 05:06:27

  Modified:    src/java/org/apache/fop/fo/flow ExternalGraphic.java
                        InstreamForeignObject.java
               src/java/org/apache/fop/datatypes PercentBase.java
                        LengthBase.java
               src/java/org/apache/fop/fo FObj.java
  Removed:     src/java/org/apache/fop/fo IntrinsicSizeAccess.java
  Log:
  Access to intrinsic image size for eg/ifo through getLayoutDimension() 
instead of through separate interface.
  Added a todo item about replacing the use of propertyList along with a 
reference to the related post on fop-dev.
  Made the LayoutDimension keys a subclass of Avalon Framework's Enum to make 
the thing more debugger-friendly and more type-safe.
  
  Revision  Changes    Path
  1.51      +16 -7     
xml-fop/src/java/org/apache/fop/fo/flow/ExternalGraphic.java
  
  Index: ExternalGraphic.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/ExternalGraphic.java,v
  retrieving revision 1.50
  retrieving revision 1.51
  diff -u -r1.50 -r1.51
  --- ExternalGraphic.java      28 Dec 2004 18:03:12 -0000      1.50
  +++ ExternalGraphic.java      3 Jan 2005 13:06:27 -0000       1.51
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 1999-2004 The Apache Software Foundation.
  + * Copyright 1999-2005 The Apache Software Foundation.
    * 
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -18,16 +18,13 @@
   
   package org.apache.fop.fo.flow;
   
  -// Java
  -import java.util.List;
  -
   import org.xml.sax.Locator;
   
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.datatypes.Length;
  +import org.apache.fop.datatypes.PercentBase;
   import org.apache.fop.fo.FONode;
   import org.apache.fop.fo.FObj;
  -import org.apache.fop.fo.IntrinsicSizeAccess;
   import org.apache.fop.fo.PropertyList;
   import org.apache.fop.fo.ValidationException;
   import org.apache.fop.fo.properties.CommonAccessibility;
  @@ -39,14 +36,13 @@
   import org.apache.fop.fo.properties.LengthRangeProperty;
   import org.apache.fop.image.FopImage;
   import org.apache.fop.image.ImageFactory;
  -import org.apache.fop.layoutmgr.ExternalGraphicLayoutManager;
   
   /**
    * External graphic formatting object.
    * This FO node handles the external graphic. It creates an image
    * inline area that can be added to the area tree.
    */
  -public class ExternalGraphic extends FObj implements IntrinsicSizeAccess {
  +public class ExternalGraphic extends FObj {
       
       // The value of properties relevant for fo:external-graphic.
       private CommonAccessibility commonAccessibility;
  @@ -272,6 +268,19 @@
           return FO_EXTERNAL_GRAPHIC;
       }
   
  +    /**
  +     * @see 
org.apache.fop.fo.FObj#getLayoutDimension(org.apache.fop.datatypes.PercentBase.DimensionType)
  +     */
  +    public Number getLayoutDimension(PercentBase.LayoutDimension key) {
  +        if (key == PercentBase.IMAGE_INTRINSIC_WIDTH) {
  +            return new Integer(getIntrinsicWidth());
  +        } else if (key == PercentBase.IMAGE_INTRINSIC_HEIGHT) {
  +            return new Integer(getIntrinsicHeight());
  +        } else {
  +            return super.getLayoutDimension(key);
  +        }
  +    }
  +    
       /**
        * Preloads the image so the intrinsic size is available.
        */
  
  
  
  1.39      +16 -3     
xml-fop/src/java/org/apache/fop/fo/flow/InstreamForeignObject.java
  
  Index: InstreamForeignObject.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/fo/flow/InstreamForeignObject.java,v
  retrieving revision 1.38
  retrieving revision 1.39
  diff -u -r1.38 -r1.39
  --- InstreamForeignObject.java        28 Dec 2004 18:03:12 -0000      1.38
  +++ InstreamForeignObject.java        3 Jan 2005 13:06:27 -0000       1.39
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 1999-2004 The Apache Software Foundation.
  + * Copyright 1999-2005 The Apache Software Foundation.
    * 
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -24,9 +24,9 @@
   
   import org.apache.fop.apps.FOPException;
   import org.apache.fop.datatypes.Length;
  +import org.apache.fop.datatypes.PercentBase;
   import org.apache.fop.fo.FONode;
   import org.apache.fop.fo.FObj;
  -import org.apache.fop.fo.IntrinsicSizeAccess;
   import org.apache.fop.fo.PropertyList;
   import org.apache.fop.fo.ValidationException;
   import org.apache.fop.fo.XMLObj;
  @@ -43,7 +43,7 @@
    * This is an atomic inline object that contains
    * xml data.
    */
  -public class InstreamForeignObject extends FObj implements 
IntrinsicSizeAccess {
  +public class InstreamForeignObject extends FObj {
       
       // The value of properties relevant for fo:instream-foreign-object.
       private CommonAccessibility commonAccessibility;
  @@ -285,6 +285,19 @@
           return FO_INSTREAM_FOREIGN_OBJECT;
       }
   
  +    /**
  +     * @see 
org.apache.fop.fo.FObj#getLayoutDimension(org.apache.fop.datatypes.PercentBase.DimensionType)
  +     */
  +    public Number getLayoutDimension(PercentBase.LayoutDimension key) {
  +        if (key == PercentBase.IMAGE_INTRINSIC_WIDTH) {
  +            return new Integer(getIntrinsicWidth());
  +        } else if (key == PercentBase.IMAGE_INTRINSIC_HEIGHT) {
  +            return new Integer(getIntrinsicHeight());
  +        } else {
  +            return super.getLayoutDimension(key);
  +        }
  +    }
  +    
       /**
        * Preloads the image so the intrinsic size is available.
        */
  
  
  
  1.6       +42 -9     
xml-fop/src/java/org/apache/fop/datatypes/PercentBase.java
  
  Index: PercentBase.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/datatypes/PercentBase.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- PercentBase.java  28 Oct 2004 10:00:19 -0000      1.5
  +++ PercentBase.java  3 Jan 2005 13:06:27 -0000       1.6
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 1999-2004 The Apache Software Foundation.
  + * Copyright 1999-2005 The Apache Software Foundation.
    * 
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -18,6 +18,7 @@
   
   package org.apache.fop.datatypes;
   
  +import org.apache.avalon.framework.Enum;
   import org.apache.fop.fo.expr.PropertyException;
   
   /**
  @@ -25,19 +26,51 @@
    * computations
    */
   public interface PercentBase {
  -    static Integer TABLE_UNITS = new Integer(1);
  -    static Integer BLOCK_IPD = new Integer(2);
  -    static Integer BLOCK_BPD = new Integer(3);
  -    static Integer REFERENCE_AREA_IPD = new Integer(4);
  -    static Integer REFERENCE_AREA_BPD = new Integer(5);
       
  +    //Types of values to store in layoutDimension on FObj
  +    
  +    /** table units */
  +    LayoutDimension TABLE_UNITS = new LayoutDimension("table-units");
  +    /** Block IPD */
  +    LayoutDimension BLOCK_IPD = new LayoutDimension("block-ipd");
  +    /** Block BPD */
  +    LayoutDimension BLOCK_BPD = new LayoutDimension("block-bpd");
  +    /** Reference Area IPD */
  +    LayoutDimension REFERENCE_AREA_IPD = new 
LayoutDimension("reference-area-ipd");
  +    /** Reference Area BPD */
  +    LayoutDimension REFERENCE_AREA_BPD = new 
LayoutDimension("reference-area-bpd");
  +    /** Intrinsic width of an image or foreign-object */ 
  +    LayoutDimension IMAGE_INTRINSIC_WIDTH = new 
LayoutDimension("image-intrinsic-width");
  +    /** Intrinsic height of an image or foreign-object */ 
  +    LayoutDimension IMAGE_INTRINSIC_HEIGHT = new 
LayoutDimension("image-intrinsic-heigth");
  +    
  +    /**
  +     * Determines whether a numeric property is created or one with a 
percentage
  +     * base.
  +     * @return 0 for length, 1 for percentage
  +     */
       int getDimension();
  +    
       double getBaseValue();
   
       /**
  -     * @return the integer size of the object (this will be used as the base 
to
  -     * which a percentage will be applied to compute the length of the
  -     * referencing item)
  +     * @return the integer size in millipoints of the object (this will be 
used 
  +     * as the base to which a percentage will be applied to compute the 
length 
  +     * of the referencing item)
  +     * @throws PropertyException if a problem occurs during evaluation of 
this
  +     *     value.
        */
       int getBaseLength() throws PropertyException;
  +    
  +    /** Enum class for dimension types. */
  +    public class LayoutDimension extends Enum {
  +        
  +        /**
  +         * Constructor to add a new named item.
  +         * @param name Name of the item.
  +         */
  +        protected LayoutDimension(String name) {
  +            super(name);
  +        }
  +    }
   }
  
  
  
  1.10      +8 -7      xml-fop/src/java/org/apache/fop/datatypes/LengthBase.java
  
  Index: LengthBase.java
  ===================================================================
  RCS file: 
/home/cvs/xml-fop/src/java/org/apache/fop/datatypes/LengthBase.java,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- LengthBase.java   28 Dec 2004 18:03:12 -0000      1.9
  +++ LengthBase.java   3 Jan 2005 13:06:27 -0000       1.10
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 1999-2004 The Apache Software Foundation.
  + * Copyright 1999-2005 The Apache Software Foundation.
    * 
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -20,7 +20,6 @@
   
   import org.apache.fop.fo.Constants;
   import org.apache.fop.fo.FObj;
  -import org.apache.fop.fo.IntrinsicSizeAccess;
   import org.apache.fop.fo.PropertyList;
   import org.apache.fop.fo.expr.PropertyException;
   
  @@ -114,10 +113,10 @@
           return 1.0;
       }
   
  -    /**
  -     * @return the base length (in millipoints ??) of this object
  -     */
  +    /** @see org.apache.fop.datatypes.PercentBase#getBaseLength() */
       public int getBaseLength() throws PropertyException {
  +        //TODO Don't use propertyList here
  +        //See http://nagoya.apache.org/eyebrowse/[EMAIL 
PROTECTED]&msgNo=10342
           switch (iBaseType) {
           case FONTSIZE:
               return 
propertyList.get(Constants.PR_FONT_SIZE).getLength().getValue();
  @@ -134,9 +133,11 @@
               //return (((fo != null) && (fo instanceof FObj)) ? 
((FObj)fo).getContentWidth() : 0);
               return 0;
           case IMAGE_INTRINSIC_WIDTH:
  -            return 
((IntrinsicSizeAccess)propertyList.getFObj()).getIntrinsicWidth();
  +            return propertyList.getFObj()
  +                
.getLayoutDimension(PercentBase.IMAGE_INTRINSIC_WIDTH).intValue();
           case IMAGE_INTRINSIC_HEIGHT:
  -            return 
((IntrinsicSizeAccess)propertyList.getFObj()).getIntrinsicHeight();
  +            return propertyList.getFObj()
  +                
.getLayoutDimension(PercentBase.IMAGE_INTRINSIC_HEIGHT).intValue();
           case CUSTOM_BASE:
               //log.debug("!!! LengthBase.getBaseLength() called on 
CUSTOM_BASE type !!!");
               return 0;
  
  
  
  1.89      +13 -10    xml-fop/src/java/org/apache/fop/fo/FObj.java
  
  Index: FObj.java
  ===================================================================
  RCS file: /home/cvs/xml-fop/src/java/org/apache/fop/fo/FObj.java,v
  retrieving revision 1.88
  retrieving revision 1.89
  diff -u -r1.88 -r1.89
  --- FObj.java 2 Jan 2005 20:42:50 -0000       1.88
  +++ FObj.java 3 Jan 2005 13:06:27 -0000       1.89
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 1999-2004 The Apache Software Foundation.
  + * Copyright 1999-2005 The Apache Software Foundation.
    * 
    * Licensed under the Apache License, Version 2.0 (the "License");
    * you may not use this file except in compliance with the License.
  @@ -26,6 +26,7 @@
   import java.util.Set;
   
   import org.apache.fop.apps.FOPException;
  +import org.apache.fop.datatypes.PercentBase;
   import org.apache.fop.fo.flow.Marker;
   import org.apache.fop.fo.properties.PropertyMaker;
   import org.xml.sax.Attributes;
  @@ -76,11 +77,12 @@
           }
           
           if (propertyListTable == null) {
  -            propertyListTable = new 
PropertyMaker[Constants.PROPERTY_COUNT+1];
  +            propertyListTable = new PropertyMaker[Constants.PROPERTY_COUNT + 
1];
               PropertyMaker[] list = FOPropertyMapping.getGenericMappings();
               for (int i = 1; i < list.length; i++) {
  -                if (list[i] != null)
  -                    propertyListTable[i] = list[i]; 
  +                if (list[i] != null) {
  +                    propertyListTable[i] = list[i];
  +                }
               }
           }
       }
  @@ -111,7 +113,8 @@
       /**
        * Create a default property list for this element. 
        */
  -    protected PropertyList createPropertyList(PropertyList parent, 
FOEventHandler foEventHandler) throws FOPException {
  +    protected PropertyList createPropertyList(PropertyList parent, 
  +                    FOEventHandler foEventHandler) throws FOPException {
           return foEventHandler.getPropertyListMaker().make(this, parent);
       }
   
  @@ -186,8 +189,8 @@
        * @param key the Layout dimension, from PercentBase.
        * @param dimension The layout length.
        */
  -    public void setLayoutDimension(Integer key, int dimension) {
  -        if (layoutDimension == null){
  +    public void setLayoutDimension(PercentBase.LayoutDimension key, int 
dimension) {
  +        if (layoutDimension == null) {
               layoutDimension = new HashMap();
           }
           layoutDimension.put(key, new Integer(dimension));
  @@ -198,8 +201,8 @@
        * @param key the Layout dimension, from PercentBase.
        * @param dimension The layout length.
        */
  -    public void setLayoutDimension(Integer key, float dimension) {
  -        if (layoutDimension == null){
  +    public void setLayoutDimension(PercentBase.LayoutDimension key, float 
dimension) {
  +        if (layoutDimension == null) {
               layoutDimension = new HashMap();
           }
           layoutDimension.put(key, new Float(dimension));
  @@ -210,7 +213,7 @@
        * @param key The layout dimension key.
        * @return the length.
        */
  -    public Number getLayoutDimension(Integer key) {
  +    public Number getLayoutDimension(PercentBase.LayoutDimension key) {
           if (layoutDimension != null) {
               Number result = (Number) layoutDimension.get(key);
               if (result != null) {
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to