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]