]> source.dussan.org Git - xmlgraphics-fop.git/commitdiff
now for some "real" commits
authorChris Bowditch <cbowditch@apache.org>
Tue, 2 Mar 2004 11:04:00 +0000 (11:04 +0000)
committerChris Bowditch <cbowditch@apache.org>
Tue, 2 Mar 2004 11:04:00 +0000 (11:04 +0000)
this is the patch to PDF Renderer for dotted/dashed lines I prepared some time ago.
bugzilla link
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=25900

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@197403 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/fop/render/pdf/PDFRenderer.java

index 512e9ec532e8260df07d701bb5c6dd147a749067..d28063b2a9f6e2fbfe4b00d4e24552139f16558c 100644 (file)
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 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.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@@ -83,6 +83,7 @@ import org.apache.fop.pdf.PDFXObject;
 import org.apache.fop.render.PrintRenderer;
 import org.apache.fop.render.RendererContext;
 import org.apache.fop.traits.BorderProps;
+import org.apache.fop.fo.Constants;
 
 
 /*
@@ -200,7 +201,7 @@ public class PDFRenderer extends PrintRenderer {
     protected int bpMarginOffset = 0;
 
     /**
-     * Offset for rendering text, taking into account borders and padding for 
+     * Offset for rendering text, taking into account borders and padding for
      * both the region and block.
      */
     protected int ipMarginOffset = 0;
@@ -262,7 +263,7 @@ public class PDFRenderer extends PrintRenderer {
      * @see org.apache.fop.render.Renderer#stopRenderer()
      */
     public void stopRenderer() throws IOException {
-        pdfDoc.getResources().addFonts(pdfDoc, 
+        pdfDoc.getResources().addFonts(pdfDoc,
             (org.apache.fop.apps.Document) fontInfo);
         pdfDoc.outputTrailer(ostream);
 
@@ -478,7 +479,7 @@ public class PDFRenderer extends PrintRenderer {
         int saveIPMargin = ipMarginOffset;
         int saveBPMargin = bpMarginOffset;
         if (block != null) {
-            Integer spaceStart = (Integer) block.getTrait(Trait.SPACE_START); 
+            Integer spaceStart = (Integer) block.getTrait(Trait.SPACE_START);
             if (spaceStart != null) {
                 ipMarginOffset += spaceStart.intValue();
             }
@@ -539,7 +540,7 @@ public class PDFRenderer extends PrintRenderer {
      * @param block the block to render the traits
      */
     protected void handleBlockTraits(Block block) {
-        /*  ipMarginOffset for a particular block = region border + 
+        /*  ipMarginOffset for a particular block = region border +
          *  region padding + parent block padding + current block padding
          */
 
@@ -547,12 +548,12 @@ public class PDFRenderer extends PrintRenderer {
         float starty = (currentBPPosition + bpMarginOffset) / 1000f;
         float width = block.getWidth() / 1000f;
 
-        Integer spaceStart = (Integer) block.getTrait(Trait.SPACE_START); 
+        Integer spaceStart = (Integer) block.getTrait(Trait.SPACE_START);
         if (spaceStart != null) {
             startx += spaceStart.floatValue() / 1000;
             width -= spaceStart.floatValue() / 1000;
         }
-        Integer spaceEnd = (Integer) block.getTrait(Trait.SPACE_END); 
+        Integer spaceEnd = (Integer) block.getTrait(Trait.SPACE_END);
         if (spaceEnd != null) {
             width -= spaceEnd.floatValue() / 1000;
         }
@@ -623,10 +624,13 @@ public class PDFRenderer extends PrintRenderer {
             }
 
             float bwidth = bps.width / 1000f;
-            updateColor(bps.color, true, null);
-            currentStream.add(startx + " " + starty + " "
-                              + width + " " + bwidth + " re\n");
-            currentStream.add("f\n");
+            updateColor(bps.color, false, null);
+            updateLineStyle(bps.style);
+            currentStream.add(bwidth + " w\n");
+            float y1 = starty + bwidth / 2;
+            currentStream.add(startx + " " + y1 + " m\n");
+            currentStream.add(startx + width + " " + y1 + " l\n");
+            currentStream.add("S\n");
         }
         bps = (BorderProps)block.getTrait(Trait.BORDER_AFTER);
         if (bps != null) {
@@ -638,10 +642,13 @@ public class PDFRenderer extends PrintRenderer {
             }
 
             float bwidth = bps.width / 1000f;
-            updateColor(bps.color, true, null);
-            currentStream.add(startx + " " + (starty + height - bwidth) + " "
-                              + width + " " + bwidth + " re\n");
-            currentStream.add("f\n");
+            updateColor(bps.color, false, null);
+            updateLineStyle(bps.style);
+            currentStream.add(bwidth + " w\n");
+            float y1 = starty - bwidth / 2;
+            currentStream.add(startx + " " + (y1 + height) + " m\n");
+            currentStream.add((startx + width) + " " + (y1 + height) + " l\n");
+            currentStream.add("S\n");
         }
         bps = (BorderProps)block.getTrait(Trait.BORDER_START);
         if (bps != null) {
@@ -653,10 +660,13 @@ public class PDFRenderer extends PrintRenderer {
             }
 
             float bwidth = bps.width / 1000f;
-            updateColor(bps.color, true, null);
-            currentStream.add(startx + " " + starty + " "
-                              + bwidth + " " + height + " re\n");
-            currentStream.add("f\n");
+            updateColor(bps.color, false, null);
+            updateLineStyle(bps.style);
+            currentStream.add(bwidth + " w\n");
+            float x1 = startx + bwidth / 2;
+            currentStream.add(x1 + " " + starty + " m\n");
+            currentStream.add(x1 + " " + (starty + height) + " l\n");
+            currentStream.add("S\n");
         }
         bps = (BorderProps)block.getTrait(Trait.BORDER_END);
         if (bps != null) {
@@ -668,10 +678,13 @@ public class PDFRenderer extends PrintRenderer {
             }
 
             float bwidth = bps.width / 1000f;
-            updateColor(bps.color, true, null);
-            currentStream.add((startx + width - bwidth) + " " + starty + " "
-                              + bwidth + " " + height + " re\n");
-            currentStream.add("f\n");
+            updateColor(bps.color, false, null);
+            updateLineStyle(bps.style);
+            currentStream.add(bwidth + " w\n");
+            float x1 = startx - bwidth / 2;
+            currentStream.add((x1 + width) + " " + starty + " m\n");
+            currentStream.add((x1 + width) + " " + (starty + height) + " l\n");
+            currentStream.add("S\n");
         }
         if (started) {
             //restoreGraphicsState();
@@ -681,6 +694,21 @@ public class PDFRenderer extends PrintRenderer {
         }
     }
 
+    private void updateLineStyle(int style) {
+        switch (style) {
+            case Constants.DASHED:
+                currentStream.add("[3] 0 d\n");
+                break;
+            case Constants.DOTTED:
+                currentStream.add("[1 7] 0 d\n");
+                break;
+            default:
+                // solid
+                currentStream.add("[] 0 d\n");
+                break;
+        }
+    }
+
     /**
      * Draw a line.
      *
@@ -719,9 +747,9 @@ public class PDFRenderer extends PrintRenderer {
             float y = (float)(bv.getYOffset() + containingBPPosition) / 1000f;
             float width = (float)bv.getWidth() / 1000f;
             float height = (float)bv.getHeight() / 1000f;
-            
+
             drawBackAndBorders(bv, x, y, width, height);
-            
+
             endTextObject();
             if (bv.getClip()) {
                 saveGraphicsState();