git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/fop-0_95@663482 13f79535-47bb-0310-9956-ffa450edef68tags/fop-0_95
@@ -36,6 +36,7 @@ import org.apache.fop.area.Area; | |||
import org.apache.fop.area.Block; | |||
import org.apache.fop.area.BlockViewport; | |||
import org.apache.fop.area.CTM; | |||
import org.apache.fop.area.NormalFlow; | |||
import org.apache.fop.area.RegionViewport; | |||
import org.apache.fop.area.Trait; | |||
import org.apache.fop.area.inline.ForeignObject; | |||
@@ -556,6 +557,34 @@ public abstract class AbstractPathOrientedRenderer extends PrintRenderer { | |||
currentBPPosition = saveBP; | |||
} | |||
/** {@inheritDoc} */ | |||
protected void renderFlow(NormalFlow flow) { | |||
// save position and offset | |||
int saveIP = currentIPPosition; | |||
int saveBP = currentBPPosition; | |||
//Establish a new coordinate system | |||
AffineTransform at = new AffineTransform(); | |||
at.translate(currentIPPosition, currentBPPosition); | |||
if (!at.isIdentity()) { | |||
saveGraphicsState(); | |||
concatenateTransformationMatrix(mptToPt(at)); | |||
} | |||
currentIPPosition = 0; | |||
currentBPPosition = 0; | |||
super.renderFlow(flow); | |||
if (!at.isIdentity()) { | |||
restoreGraphicsState(); | |||
} | |||
// stacked and relative blocks effect stacking | |||
currentIPPosition = saveIP; | |||
currentBPPosition = saveBP; | |||
} | |||
/** | |||
* Concatenates the current transformation matrix with the given one, therefore establishing | |||
* a new coordinate system. |
@@ -59,6 +59,7 @@ import org.apache.fop.area.Block; | |||
import org.apache.fop.area.BlockViewport; | |||
import org.apache.fop.area.BodyRegion; | |||
import org.apache.fop.area.CTM; | |||
import org.apache.fop.area.NormalFlow; | |||
import org.apache.fop.area.OffDocumentItem; | |||
import org.apache.fop.area.PageViewport; | |||
import org.apache.fop.area.RegionReference; | |||
@@ -624,6 +625,37 @@ public class AFPRenderer extends AbstractPathOrientedRenderer { | |||
currentBPPosition = saveBP; | |||
} | |||
/** {@inheritDoc} */ | |||
protected void renderFlow(NormalFlow flow) { | |||
// save position and offset | |||
int saveIP = currentIPPosition; | |||
int saveBP = currentBPPosition; | |||
//Establish a new coordinate system | |||
AffineTransform at = new AffineTransform(); | |||
at.translate(currentIPPosition, currentBPPosition); | |||
if (!at.isIdentity()) { | |||
Rectangle2D contentRect | |||
= new Rectangle2D.Double(at.getTranslateX(), at.getTranslateY(), | |||
flow.getAllocIPD(), flow.getAllocBPD()); | |||
pushViewPortPos(new ViewPortPos(contentRect, new CTM(at))); | |||
} | |||
currentIPPosition = 0; | |||
currentBPPosition = 0; | |||
super.renderFlow(flow); | |||
if (!at.isIdentity()) { | |||
popViewPortPos(); | |||
} | |||
// stacked and relative blocks effect stacking | |||
currentIPPosition = saveIP; | |||
currentBPPosition = saveBP; | |||
} | |||
/** {@inheritDoc} */ | |||
protected void concatenateTransformationMatrix(AffineTransform at) { | |||
//Not used here since AFPRenderer defines its own renderBlockViewport() method. |
@@ -65,6 +65,7 @@ import org.apache.fop.area.Area; | |||
import org.apache.fop.area.Block; | |||
import org.apache.fop.area.BlockViewport; | |||
import org.apache.fop.area.CTM; | |||
import org.apache.fop.area.NormalFlow; | |||
import org.apache.fop.area.PageViewport; | |||
import org.apache.fop.area.RegionViewport; | |||
import org.apache.fop.area.Trait; | |||
@@ -1045,6 +1046,39 @@ public class PCLRenderer extends PrintRenderer { | |||
currentBPPosition = saveBP; | |||
} | |||
/** {@inheritDoc} */ | |||
protected void renderFlow(NormalFlow flow) { | |||
//TODO This is the same code as in AbstractPathOrientedRenderer | |||
//So there's some optimization potential but not otherwise PCLRenderer is a little | |||
//difficult to derive from AbstractPathOrientedRenderer. Maybe an additional layer | |||
//between PrintRenderer and AbstractPathOrientedRenderer is necessary. | |||
// save position and offset | |||
int saveIP = currentIPPosition; | |||
int saveBP = currentBPPosition; | |||
//Establish a new coordinate system | |||
AffineTransform at = new AffineTransform(); | |||
at.translate(currentIPPosition, currentBPPosition); | |||
if (!at.isIdentity()) { | |||
saveGraphicsState(); | |||
concatenateTransformationMatrix(mptToPt(at)); | |||
} | |||
currentIPPosition = 0; | |||
currentBPPosition = 0; | |||
super.renderFlow(flow); | |||
if (!at.isIdentity()) { | |||
restoreGraphicsState(); | |||
} | |||
// stacked and relative blocks effect stacking | |||
currentIPPosition = saveIP; | |||
currentBPPosition = saveBP; | |||
} | |||
/** | |||
* Concatenates the current transformation matrix with the given one, therefore establishing | |||
* a new coordinate system. |
@@ -60,6 +60,9 @@ | |||
--> | |||
<!--/release--> | |||
<release version="0.95" date="TBD"> | |||
<action context="Renderers" dev="JM" type="fix"> | |||
Fixed positioning of absolutely positioned block-containers in multi-column documents. | |||
</action> | |||
<action context="Renderers" dev="JM" type="fix"> | |||
Fixed rendering of fixed block-containers in AFP output. | |||
</action> |
@@ -0,0 +1,71 @@ | |||
<?xml version="1.0" encoding="UTF-8"?> | |||
<!-- | |||
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$ --> | |||
<testcase> | |||
<info> | |||
<p> | |||
This test checks absolutely positioned block-containers in multi-column documents. | |||
</p> | |||
</info> | |||
<fo> | |||
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"> | |||
<fo:layout-master-set> | |||
<fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="0.1in"> | |||
<fo:region-body column-count="2" column-gap="0.2in"/> | |||
</fo:simple-page-master> | |||
</fo:layout-master-set> | |||
<fo:page-sequence master-reference="normal"> | |||
<fo:flow flow-name="xsl-region-body" text-align="justify"> | |||
<fo:block background-color="yellow"> | |||
This should not have any line floating over it! This should not have any | |||
line floating over it! This should not have any line floating over it! This | |||
should not have any line floating over it! | |||
</fo:block> | |||
<fo:block span="all" background-color="orange"> | |||
<fo:block padding-top="0.5em" padding-bottom="0.5em"> | |||
This should not have any line floating over it! This should not have any | |||
line floating over it! This should not have any line floating over | |||
it!<fo:block /> | |||
</fo:block> | |||
</fo:block> | |||
<fo:block background-color="yellow"> | |||
This should not have any line floating over it! This should not have any | |||
line floating over it! This should not have any line floating over it! This | |||
should not have any line floating over it! | |||
</fo:block> | |||
<fo:block-container absolute-position="absolute" | |||
left="2.5in - 0.1in - 0.025in" top="auto" width="0.05in" height="100%" background-color="red"> | |||
<fo:block/> | |||
</fo:block-container> | |||
<fo:block-container absolute-position="absolute" left="2.5in - 0.1in" top="auto" | |||
reference-orientation="90"> | |||
<fo:block width="100%" line-height="1pt" background-color="black" | |||
height="1pt"> </fo:block> | |||
</fo:block-container> | |||
</fo:flow> | |||
</fo:page-sequence> | |||
</fo:root> | |||
</fo> | |||
<checks> | |||
<!-- | |||
This test is only visually interesting! Visually check that the block container begins | |||
directly under the spanned block! | |||
--> | |||
<eval expected="1" xpath="count(//pageViewport)"/> | |||
</checks> | |||
</testcase> |