break;
case Constants.EN_DASHED:
if (borderPaintInfo.isHorizontal()) {
- int dashWidth = (int) (BorderPainter.dashWidthCalculator(x2 - x1, thickness));
+ int dashWidth = (int) unitConv.pt2units(BorderPainter.dashWidthCalculator(w, h));
lineDataInfo.setX2 ( lineDataInfo.getX1() + dashWidth );
lineDataInfo.setY2 ( lineDataInfo.getY1() );
int ex2 = Math.round(x2);
int spaceWidth = (int) (BorderPainter.DASHED_BORDER_SPACE_RATIO * dashWidth);
- while (lineDataInfo.getX2() < ex2) {
+ while (lineDataInfo.getX2() <= ex2) {
dataStream.createLine(lineDataInfo);
lineDataInfo.setX1 ( lineDataInfo.getX2() + spaceWidth );
lineDataInfo.setX2 ( lineDataInfo.getX1() + dashWidth );
}
} else {
- int dashWidth = (int) BorderPainter.dashWidthCalculator(y2 - y1, thickness);
+ int dashWidth = (int) unitConv.pt2units(BorderPainter.dashWidthCalculator(h, w));
lineDataInfo.setX2 ( lineDataInfo.getX1() );
lineDataInfo.setY2 ( lineDataInfo.getY1() + dashWidth );
int ey2 = Math.round(y2);
int spaceWidth = (int) (BorderPainter.DASHED_BORDER_SPACE_RATIO * dashWidth);
- while (lineDataInfo.getY2() < ey2) {
+ while (lineDataInfo.getY2() <= ey2) {
dataStream.createLine(lineDataInfo);
lineDataInfo.setY1 ( lineDataInfo.getY2() + spaceWidth );
lineDataInfo.setY2 ( lineDataInfo.getY1() + dashWidth );
--- /dev/null
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.render.afp;
+
+import static org.junit.Assert.assertTrue;
+
+import java.awt.Color;
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+
+import org.apache.fop.afp.AFPBorderPainter;
+import org.apache.fop.afp.AFPLineDataInfo;
+import org.apache.fop.afp.AFPPaintingState;
+import org.apache.fop.afp.BorderPaintingInfo;
+import org.apache.fop.afp.DataStream;
+import org.apache.fop.afp.Factory;
+import org.apache.fop.fo.Constants;
+import org.junit.Before;
+import org.junit.Test;
+
+public class AFPBorderPainterTestCase {
+ private ByteArrayOutputStream outStream;
+ private AFPBorderPainter borderPainter;
+ private DataStream ds;
+ private AFPLineDataInfo line;
+
+ @Before
+ public void setUp() throws Exception {
+ outStream = new ByteArrayOutputStream();
+ ds = new MyDataStream(new Factory(), null, outStream);
+ ds.startDocument();
+ ds.startPage(1000, 1000, 90, 72, 72);
+ borderPainter = new AFPBorderPainter(new AFPPaintingState(), ds);
+ }
+
+ /**
+ * This test will fail if either of the below statements isn't true:
+ * org.apache.fop.render.intermediate.BorderPainter.DASHED_BORDER_SPACE_RATIO = 0.5f:q
+ * org.apache.fop.render.intermediate.BorderPainter.DASHED_BORDER_LENGTH_FACTOR = 4.0f.
+ */
+ @Test
+ public void testDrawBorderLine() throws Exception {
+ BorderPaintingInfo paintInfo = new BorderPaintingInfo(0f, 0f, 1000f, 1000f, true,
+ Constants.EN_DASHED, Color.BLACK);
+ borderPainter.paint(paintInfo);
+ ds.endDocument();
+ assertTrue(line.getX1() == 4999 && line.getX2() == 8332);
+ }
+
+ class MyDataStream extends DataStream {
+ public MyDataStream(Factory factory, AFPPaintingState paintingState, OutputStream outputStream) {
+ super(factory, paintingState, outputStream);
+ }
+
+ public void createLine(AFPLineDataInfo lineDataInfo) {
+ line = lineDataInfo;
+ }
+ }
+}