aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/org/apache/fop/fo/flow/ExternalGraphic.java
diff options
context:
space:
mode:
authorGlen Mazza <gmazza@apache.org>2004-08-13 00:03:49 +0000
committerGlen Mazza <gmazza@apache.org>2004-08-13 00:03:49 +0000
commitc3b3f698406cac5c801bff65a6cb3b4e7ef04753 (patch)
tree09bb0388f789a65bea17d4984ab98d162a739ace /src/java/org/apache/fop/fo/flow/ExternalGraphic.java
parent89db98aa88db50f99cc106202e43d9c4ff73f180 (diff)
downloadxmlgraphics-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.java182
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);