aboutsummaryrefslogtreecommitdiffstats
path: root/src/org/apache/fop/fo/flow/ExternalGraphic.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/apache/fop/fo/flow/ExternalGraphic.java')
-rw-r--r--src/org/apache/fop/fo/flow/ExternalGraphic.java270
1 files changed, 65 insertions, 205 deletions
diff --git a/src/org/apache/fop/fo/flow/ExternalGraphic.java b/src/org/apache/fop/fo/flow/ExternalGraphic.java
index dac5ca9f9..386e475cd 100644
--- a/src/org/apache/fop/fo/flow/ExternalGraphic.java
+++ b/src/org/apache/fop/fo/flow/ExternalGraphic.java
@@ -13,13 +13,18 @@ import org.apache.fop.fo.properties.*;
import org.apache.fop.layout.*;
import org.apache.fop.apps.FOPException;
import org.apache.fop.image.*;
+import org.apache.fop.area.inline.InlineArea;
+import org.apache.fop.layoutmgr.LayoutManager;
+import org.apache.fop.layoutmgr.LeafNodeLayoutManager;
+import org.apache.fop.area.inline.Image;
+import org.apache.fop.area.inline.Viewport;
// Java
import java.net.URL;
import java.net.MalformedURLException;
public class ExternalGraphic extends FObj {
-
+ String url;
int breakAfter;
int breakBefore;
int align;
@@ -38,212 +43,67 @@ public class ExternalGraphic extends FObj {
super(parent);
}
- public Status layout(Area area) throws FOPException {
-
- if (this.marker == START) {
-
- // Common Accessibility Properties
- AccessibilityProps mAccProps = propMgr.getAccessibilityProps();
-
- // Common Aural Properties
- AuralProps mAurProps = propMgr.getAuralProps();
-
- // Common Border, Padding, and Background Properties
- BorderAndPadding bap = propMgr.getBorderAndPadding();
- BackgroundProps bProps = propMgr.getBackgroundProps();
-
- // Common Margin Properties-Inline
- MarginInlineProps mProps = propMgr.getMarginInlineProps();
-
- // Common Relative Position Properties
- RelativePositionProps mRelProps = propMgr.getRelativePositionProps();
-
- // this.properties.get("alignment-adjust");
- // this.properties.get("alignment-baseline");
- // this.properties.get("baseline-shift");
- // this.properties.get("block-progression-dimension");
- // this.properties.get("content-height");
- // this.properties.get("content-type");
- // this.properties.get("content-width");
- // this.properties.get("display-align");
- // this.properties.get("dominant-baseline");
- // this.properties.get("height");
- // this.properties.get("id");
- // this.properties.get("inline-progression-dimension");
- // this.properties.get("keep-with-next");
- // this.properties.get("keep-with-previous");
- // this.properties.get("line-height");
- // this.properties.get("line-height-shift-adjustment");
- // this.properties.get("overflow");
- // this.properties.get("scaling");
- // this.properties.get("scaling-method");
- // this.properties.get("src");
- // this.properties.get("text-align");
- // this.properties.get("width");
-
- // FIXME
- this.align = this.properties.get("text-align").getEnum();
-
- this.startIndent =
- this.properties.get("start-indent").getLength().mvalue();
- this.endIndent =
- this.properties.get("end-indent").getLength().mvalue();
-
- this.spaceBefore =
- this.properties.get("space-before.optimum").getLength().mvalue();
- this.spaceAfter =
- this.properties.get("space-after.optimum").getLength().mvalue();
-
- this.src = this.properties.get("src").getString();
-
- this.width = this.properties.get("width").getLength().mvalue();
-
- this.height = this.properties.get("height").getLength().mvalue();
-
- this.id = this.properties.get("id").getString();
-
- area.getIDReferences().createID(id);
- /*
- * if (area instanceof BlockArea) {
- * area.end();
- * }
- * if (this.isInTableCell) {
- * startIndent += forcedStartOffset;
- * endIndent = area.getAllocationWidth() - forcedWidth -
- * forcedStartOffset;
- * }
- */
- this.marker = 0;
- }
-
- try {
- FopImage img = FopImageFactory.Make(src);
- // if width / height needs to be computed
- if ((width == 0) || (height == 0)) {
- // aspect ratio
- double imgWidth = img.getWidth();
- double imgHeight = img.getHeight();
- if ((width == 0) && (height == 0)) {
- width = (int)((imgWidth * 1000d));
- height = (int)((imgHeight * 1000d));
- } else if (height == 0) {
- height = (int)((imgHeight * ((double)width)) / imgWidth);
- } else if (width == 0) {
- width = (int)((imgWidth * ((double)height)) / imgHeight);
- }
- }
-
- // scale image if it doesn't fit in the area/page
- // Need to be more tested...
- double ratio = ((double)width) / ((double)height);
- int areaWidth = area.getAllocationWidth() - startIndent
- - endIndent;
- int pageHeight = area.getPage().getBody().getMaxHeight()
- - spaceBefore;
- if (height > pageHeight) {
- height = pageHeight;
- width = (int)(ratio * ((double)height));
- }
- if (width > areaWidth) {
- width = areaWidth;
- height = (int)(((double)width) / ratio);
- }
-
- if (area.spaceLeft() < (height + spaceBefore)) {
- return new Status(Status.AREA_FULL_NONE);
- }
-
- this.imageArea =
- new ImageArea(propMgr.getFontState(area.getFontInfo()), img,
- area.getAllocationWidth(), width, height,
- startIndent, endIndent, align);
-
- if ((spaceBefore != 0) && (this.marker == 0)) {
- area.addDisplaySpace(spaceBefore);
- }
-
- if (marker == 0) {
- // configure id
- area.getIDReferences().configureID(id, area);
- }
-
- imageArea.start();
- imageArea.end();
- // area.addChild(imageArea);
- // area.increaseHeight(imageArea.getHeight());
-
- if (spaceAfter != 0) {
- area.addDisplaySpace(spaceAfter);
- }
- if (breakBefore == BreakBefore.PAGE
- || ((spaceBefore + imageArea.getHeight())
- > area.spaceLeft())) {
- return new Status(Status.FORCE_PAGE_BREAK);
- }
-
- if (breakBefore == BreakBefore.ODD_PAGE) {
- return new Status(Status.FORCE_PAGE_BREAK_ODD);
- }
-
- if (breakBefore == BreakBefore.EVEN_PAGE) {
- return new Status(Status.FORCE_PAGE_BREAK_EVEN);
- }
-
-
- if (area instanceof BlockArea) {
- BlockArea ba = (BlockArea)area;
- LineArea la = ba.getCurrentLineArea();
- if (la == null) {
- return new Status(Status.AREA_FULL_NONE);
- }
- la.addPending();
- if (imageArea.getContentWidth() > la.getRemainingWidth()) {
- la = ba.createNextLineArea();
- if (la == null) {
- return new Status(Status.AREA_FULL_NONE);
- }
- }
- la.addInlineArea(imageArea);
- } else {
- area.addChild(imageArea);
- area.increaseHeight(imageArea.getContentHeight());
- }
- imageArea.setPage(area.getPage());
-
- if (breakAfter == BreakAfter.PAGE) {
- this.marker = BREAK_AFTER;
- return new Status(Status.FORCE_PAGE_BREAK);
- }
-
- if (breakAfter == BreakAfter.ODD_PAGE) {
- this.marker = BREAK_AFTER;
- return new Status(Status.FORCE_PAGE_BREAK_ODD);
- }
-
- if (breakAfter == BreakAfter.EVEN_PAGE) {
- this.marker = BREAK_AFTER;
- return new Status(Status.FORCE_PAGE_BREAK_EVEN);
- }
-
-
-
-
-
- } catch (MalformedURLException urlex) {
- // bad URL
- log.error("Error while creating area : "
- + urlex.getMessage());
- } catch (FopImageException imgex) {
- // image error
- log.error("Error while creating area : "
- + imgex.getMessage());
- }
-
- // if (area instanceof BlockArea) {
- // area.start();
+ public LayoutManager getLayoutManager() {
+ LeafNodeLayoutManager lm = new LeafNodeLayoutManager(this);
+ lm.setCurrentArea(getInlineArea());
+ return lm;
+ }
+
+ protected InlineArea getInlineArea() {
+ url = ImageFactory.getURL(url);
+ // if we need to load this image to get its size
+ // FopImage fopimage = ImageFactory.getImage(url, userAgent);
+ // if(fopimage == null) {
+ // error
// }
+ // if(!fopimage.load(FopImage.DIMENSIONS)) {
+ // error
+ // }
+ Image imArea = new Image(url);
+ Viewport vp = new Viewport(imArea);
+ return vp;
+ }
- return new Status(Status.OK);
+ public void setup() throws FOPException {
+
+ // Common Accessibility Properties
+ AccessibilityProps mAccProps = propMgr.getAccessibilityProps();
+
+ // Common Aural Properties
+ AuralProps mAurProps = propMgr.getAuralProps();
+
+ // Common Border, Padding, and Background Properties
+ BorderAndPadding bap = propMgr.getBorderAndPadding();
+ BackgroundProps bProps = propMgr.getBackgroundProps();
+
+ // Common Margin Properties-Inline
+ MarginInlineProps mProps = propMgr.getMarginInlineProps();
+
+ // Common Relative Position Properties
+ RelativePositionProps mRelProps = propMgr.getRelativePositionProps();
+
+ // this.properties.get("alignment-adjust");
+ // this.properties.get("alignment-baseline");
+ // this.properties.get("baseline-shift");
+ // this.properties.get("block-progression-dimension");
+ // this.properties.get("content-height");
+ // this.properties.get("content-type");
+ // this.properties.get("content-width");
+ // this.properties.get("display-align");
+ // this.properties.get("dominant-baseline");
+ // this.properties.get("height");
+ // this.properties.get("id");
+ // this.properties.get("inline-progression-dimension");
+ // this.properties.get("keep-with-next");
+ // this.properties.get("keep-with-previous");
+ // this.properties.get("line-height");
+ // this.properties.get("line-height-shift-adjustment");
+ // this.properties.get("overflow");
+ // this.properties.get("scaling");
+ // this.properties.get("scaling-method");
+ // this.properties.get("src");
+ // this.properties.get("text-align");
+ // this.properties.get("width");
}
}