diff options
author | Glen Mazza <gmazza@apache.org> | 2004-08-13 00:03:49 +0000 |
---|---|---|
committer | Glen Mazza <gmazza@apache.org> | 2004-08-13 00:03:49 +0000 |
commit | c3b3f698406cac5c801bff65a6cb3b4e7ef04753 (patch) | |
tree | 09bb0388f789a65bea17d4984ab98d162a739ace /src/java/org/apache/fop/fo/flow/ExternalGraphic.java | |
parent | 89db98aa88db50f99cc106202e43d9c4ff73f180 (diff) | |
download | xmlgraphics-fop-c3b3f698406cac5c801bff65a6cb3b4e7ef04753.tar.gz xmlgraphics-fop-c3b3f698406cac5c801bff65a6cb3b4e7ef04753.zip |
1.) Layout initialization logic for fo:table, fo:table-header, and fo:table-footer
moved from AddLMVisitor to fo.Table.
2.) Layout logic for fo:external-graphic moved from fo.ExternalGraphic to
layoutmgr.ExternalGraphicLayoutManager.
3.) Partial implementation of validateChildNode() for fo:footnote.
4.) fox:destination commented out from images.fo sample until purpose, content
model better defined. Also needs a Maker class. (Does not appear to work
in either maintenance or HEAD.)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197867 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/java/org/apache/fop/fo/flow/ExternalGraphic.java')
-rw-r--r-- | src/java/org/apache/fop/fo/flow/ExternalGraphic.java | 182 |
1 files changed, 1 insertions, 181 deletions
diff --git a/src/java/org/apache/fop/fo/flow/ExternalGraphic.java b/src/java/org/apache/fop/fo/flow/ExternalGraphic.java index 4a37eab8a..581ab9fc2 100644 --- a/src/java/org/apache/fop/fo/flow/ExternalGraphic.java +++ b/src/java/org/apache/fop/fo/flow/ExternalGraphic.java @@ -20,7 +20,6 @@ package org.apache.fop.fo.flow; // Java import java.util.List; -import java.awt.geom.Rectangle2D; // XML import org.xml.sax.Attributes; @@ -28,12 +27,8 @@ import org.xml.sax.Locator; import org.xml.sax.SAXParseException; // FOP -import org.apache.fop.area.inline.Image; -import org.apache.fop.datatypes.Length; import org.apache.fop.fo.FONode; import org.apache.fop.fo.FObj; -import org.apache.fop.image.FopImage; -import org.apache.fop.image.ImageFactory; import org.apache.fop.layoutmgr.ExternalGraphicLayoutManager; /** @@ -43,17 +38,6 @@ import org.apache.fop.layoutmgr.ExternalGraphicLayoutManager; */ public class ExternalGraphic extends FObj { private String url; - private int breakAfter; - private int breakBefore; - private int align; - private int startIndent; - private int endIndent; - private int spaceBefore; - private int spaceAfter; - private int viewWidth = -1; - private int viewHeight = -1; - private boolean clip = false; - private Rectangle2D placement = null; /** * Create a new External graphic node. @@ -78,182 +62,18 @@ public class ExternalGraphic extends FObj { */ protected void addProperties(Attributes attlist) throws SAXParseException { super.addProperties(attlist); - getFOInputHandler().image(this); - } - - /** - * Setup this image. - * This gets the sizes for the image and the dimensions and clipping. - * @todo move logic to LM class and/or addProperties() as appropriate - */ - private void setup() { url = this.propertyList.get(PR_SRC).getString(); - if (url == null) { - return; - } - url = ImageFactory.getURL(url); - - // assume lr-tb for now and just use the .optimum value of the range - Length ipd = propertyList.get(PR_INLINE_PROGRESSION_DIMENSION). - getLengthRange().getOptimum().getLength(); - if (!ipd.isAuto()) { - viewWidth = ipd.getValue(); - } else { - ipd = propertyList.get(PR_WIDTH).getLength(); - if (!ipd.isAuto()) { - viewWidth = ipd.getValue(); - } - } - Length bpd = propertyList.get(PR_BLOCK_PROGRESSION_DIMENSION | CP_OPTIMUM).getLength(); - if (!bpd.isAuto()) { - viewHeight = bpd.getValue(); - } else { - bpd = propertyList.get(PR_HEIGHT).getLength(); - if (!bpd.isAuto()) { - viewHeight = bpd.getValue(); - } - } - - // if we need to load this image to get its size - FopImage fopimage = null; - - int cwidth = -1; - int cheight = -1; - Length ch = propertyList.get(PR_CONTENT_HEIGHT).getLength(); - if (!ch.isAuto()) { - /*if (ch.scaleToFit()) { - if (viewHeight != -1) { - cheight = viewHeight; - } - } else {*/ - cheight = ch.getValue(); - } - Length cw = propertyList.get(PR_CONTENT_WIDTH).getLength(); - if (!cw.isAuto()) { - /*if (cw.scaleToFit()) { - if (viewWidth != -1) { - cwidth = viewWidth; - } - } else {*/ - cwidth = cw.getValue(); - } - - int scaling = propertyList.get(PR_SCALING).getEnum(); - if ((scaling == Scaling.UNIFORM) || (cwidth == -1) || cheight == -1) { - ImageFactory fact = ImageFactory.getInstance(); - fopimage = fact.getImage(url, getUserAgent()); - if (fopimage == null) { - // error - url = null; - return; - } - // load dimensions - if (!fopimage.load(FopImage.DIMENSIONS)) { - // error - url = null; - return; - } - if (cwidth == -1 && cheight == -1) { - cwidth = (int)(fopimage.getWidth() * 1000); - cheight = (int)(fopimage.getHeight() * 1000); - } else if (cwidth == -1) { - cwidth = (int)(fopimage.getWidth() * cheight) / fopimage.getHeight(); - } else if (cheight == -1) { - cheight = (int)(fopimage.getHeight() * cwidth) / fopimage.getWidth(); - } else { - // adjust the larger - double rat1 = cwidth / (fopimage.getWidth() * 1000f); - double rat2 = cheight / (fopimage.getHeight() * 1000f); - if (rat1 < rat2) { - // reduce cheight - cheight = (int)(rat1 * fopimage.getHeight() * 1000); - } else { - cwidth = (int)(rat2 * fopimage.getWidth() * 1000); - } - } - } - - if (viewWidth == -1) { - viewWidth = cwidth; - } - if (viewHeight == -1) { - viewHeight = cheight; - } - - if (cwidth > viewWidth || cheight > viewHeight) { - int overflow = propertyList.get(PR_OVERFLOW).getEnum(); - if (overflow == Overflow.HIDDEN) { - clip = true; - } else if (overflow == Overflow.ERROR_IF_OVERFLOW) { - getLogger().error("Image: " + url - + " overflows the viewport, clipping to viewport"); - clip = true; - } - } - - int xoffset = 0; - int yoffset = 0; - int da = propertyList.get(PR_DISPLAY_ALIGN).getEnum(); - switch(da) { - case DisplayAlign.BEFORE: - break; - case DisplayAlign.AFTER: - yoffset = viewHeight - cheight; - break; - case DisplayAlign.CENTER: - yoffset = (viewHeight - cheight) / 2; - break; - case DisplayAlign.AUTO: - default: - break; - } - - int ta = propertyList.get(PR_TEXT_ALIGN).getEnum(); - switch(ta) { - case TextAlign.CENTER: - xoffset = (viewWidth - cwidth) / 2; - break; - case TextAlign.END: - xoffset = viewWidth - cwidth; - break; - case TextAlign.START: - break; - case TextAlign.JUSTIFY: - default: - break; - } - placement = new Rectangle2D.Float(xoffset, yoffset, cwidth, cheight); - } - - /** - * @return the ViewHeight (in millipoints??) - * @todo check that each of these accessors are needed - */ - public int getViewHeight() { - return viewHeight; + getFOInputHandler().image(this); } public String getURL() { return url; } - public int getViewWidth() { - return viewWidth; - } - - public boolean getClip() { - return clip; - } - - public Rectangle2D getPlacement() { - return placement; - } - /** * @see org.apache.fop.fo.FObj#addLayoutManager(List) */ public void addLayoutManager(List list) { - setup(); if (getURL() != null) { ExternalGraphicLayoutManager lm = new ExternalGraphicLayoutManager(this); list.add(lm); |