]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
externalgraphic replaces graphic tags in former xsl versions
authorfotis <fotis@unknown>
Mon, 24 Jul 2000 15:31:41 +0000 (15:31 +0000)
committerfotis <fotis@unknown>
Mon, 24 Jul 2000 15:31:41 +0000 (15:31 +0000)
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@193557 13f79535-47bb-0310-9956-ffa450edef68

src/org/apache/fop/fo/flow/ExternalGraphic.java [new file with mode: 0644]

diff --git a/src/org/apache/fop/fo/flow/ExternalGraphic.java b/src/org/apache/fop/fo/flow/ExternalGraphic.java
new file mode 100644 (file)
index 0000000..6df3a7a
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+
+ ============================================================================
+                   The Apache Software License, Version 1.1
+ ============================================================================
+    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
+ Redistribution and use in source and binary forms, with or without modifica-
+ tion, are permitted provided that the following conditions are met:
+ 1. Redistributions of  source code must  retain the above copyright  notice,
+    this list of conditions and the following disclaimer.
+ 2. Redistributions in binary form must reproduce the above copyright notice,
+    this list of conditions and the following disclaimer in the documentation
+    and/or other materials provided with the distribution.
+ 3. The end-user documentation included with the redistribution, if any, must
+    include  the following  acknowledgment:  "This product includes  software
+    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
+    Alternately, this  acknowledgment may  appear in the software itself,  if
+    and wherever such third-party acknowledgments normally appear.
+ 4. The names "FOP" and  "Apache Software Foundation"  must not be used to
+    endorse  or promote  products derived  from this  software without  prior
+    written permission. For written permission, please contact
+    apache@apache.org.
+ 5. Products  derived from this software may not  be called "Apache", nor may
+    "Apache" appear  in their name,  without prior written permission  of the
+    Apache Software Foundation.
+ THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
+ APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
+ INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
+ DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
+ ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
+ (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ This software  consists of voluntary contributions made  by many individuals
+ on  behalf of the Apache Software  Foundation and was  originally created by
+ James Tauber <jtauber@jtauber.com>. For more  information on the Apache 
+ Software Foundation, please see <http://www.apache.org/>.
+ */
+/* Modified by Eric SCHAEFFER */
+
+package org.apache.fop.fo.flow;
+
+// FOP
+import org.apache.fop.fo.*;
+import org.apache.fop.messaging.MessageHandler;
+import org.apache.fop.fo.properties.*;
+import org.apache.fop.layout.Area;
+import org.apache.fop.layout.BlockArea;
+import org.apache.fop.layout.FontState;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.image.*;
+
+// Java
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.net.URL;
+import java.net.MalformedURLException;
+
+public class ExternalGraphic extends FObj {
+
+    public static class Maker extends FObj.Maker { 
+       public FObj make(FObj parent, PropertyList propertyList)
+           throws FOPException {
+           return new ExternalGraphic(parent, propertyList);
+       }
+    }
+
+    public static FObj.Maker maker() {
+       return new ExternalGraphic.Maker();
+    }
+
+    FontState fs;
+    int align;
+    int startIndent;
+    int endIndent;
+    int spaceBefore;
+    int spaceAfter;
+    String src;
+    int height;
+    int width;
+    String id;
+
+    ImageArea imageArea;
+
+    public ExternalGraphic(FObj parent, PropertyList propertyList) {
+       super(parent, propertyList);
+       this.name = "fo:external-graphic";
+    }
+
+    public Status layout(Area area) throws FOPException {
+       
+       if (this.marker == START) {
+           String fontFamily =
+               this.properties.get("font-family").getString();
+           String fontStyle =
+               this.properties.get("font-style").getString();
+           String fontWeight =
+               this.properties.get("font-weight").getString();
+           int fontSize =
+               this.properties.get("font-size").getLength().mvalue();
+               
+           this.fs = new FontState(area.getFontInfo(), fontFamily,
+                                   fontStyle, fontWeight, fontSize);
+
+           // 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.isInLabel) {
+               startIndent += bodyIndent;
+               endIndent += (area.getAllocationWidth()
+                             - distanceBetweenStarts - startIndent)
+                   + labelSeparation;
+           }
+
+           if (this.isInListBody) {
+               startIndent += bodyIndent + distanceBetweenStarts;
+           }
+
+           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) / 2d);
+                               height = (int) ((imgHeight * 1000d) / 2d);
+                       } else if (height == 0) {
+                               height = (int) ((imgHeight * ((double) width)) / imgWidth);
+                       } else if (width == 0) {
+                               width = (int) ((imgWidth * ((double) height)) / imgHeight);
+                       }
+//MessageHandler.errorln("DisplayGraphic: imgW=" + imgWidth + " imgH=" + imgHeight + " w=" + width + " h=" + height);
+               }
+
+               if (area.spaceLeft() < (height + spaceBefore)) {
+                       return new Status(Status.AREA_FULL_NONE);
+               }
+
+               this.imageArea = new ImageArea(
+                                                                               fs,
+                                                                               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);
+               }
+
+       } catch (MalformedURLException urlex) {
+               // bad URL
+MessageHandler.errorln("Error while creating area : " + urlex.getMessage());
+       } catch (FopImageException imgex) {
+               // image error
+MessageHandler.errorln("Error while creating area : " + imgex.getMessage());
+       }
+
+       if (area instanceof BlockArea) {
+           area.start();
+       }
+
+       return new Status(Status.OK);
+    }
+}