Browse Source

FOP-616: "visibility" property is not implemented

git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@1790795 13f79535-47bb-0310-9956-ffa450edef68
pull/5/head
Chris Bowditch 7 years ago
parent
commit
1fa8aa70e3

+ 8
- 2
fop-core/src/main/codegen/fo/foproperties.xml View File

@@ -2055,9 +2055,15 @@
</property>
<property>
<name>visibility</name>
<inherited>false</inherited>
<datatype>ToBeImplemented</datatype>
<inherited>true</inherited>
<default>visible</default>
<datatype>Enum</datatype>
<enumeration>
<value const="VISIBLE">visible</value>
<value const="HIDDEN">hidden</value>
<value const="COLLAPSE">collapse</value>
<value const="INHERIT">inherit</value>
</enumeration>
</property>
<property>
<name>z-index</name>

+ 5
- 0
fop-core/src/main/java/org/apache/fop/area/AreaTreeParser.java View File

@@ -80,6 +80,7 @@ import org.apache.fop.fo.extensions.ExtensionAttachment;
import org.apache.fop.fonts.Font;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.traits.BorderProps;
import org.apache.fop.traits.Visibility;
import org.apache.fop.util.ColorUtil;
import org.apache.fop.util.ContentHandlerFactory;
import org.apache.fop.util.ContentHandlerFactoryRegistry;
@@ -663,6 +664,10 @@ public class AreaTreeParser {
if (attributes.getValue("top-offset") != null) {
block.setYOffset(XMLUtil.getAttributeAsInt(attributes, "top-offset", 0));
}
if (attributes.getValue("visibility") != null) {
block.addTrait(Trait.VISIBILITY, Visibility.valueOf(attributes.getValue("visibility")));
}

transferForeignObjects(attributes, block);
setAreaAttributes(attributes, block);
setTraits(attributes, block, SUBSET_COMMON);

+ 6
- 2
fop-core/src/main/java/org/apache/fop/area/Trait.java View File

@@ -27,6 +27,7 @@ import org.apache.xmlgraphics.image.loader.ImageInfo;
import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.traits.BorderProps;
import org.apache.fop.traits.Direction;
import org.apache.fop.traits.Visibility;
import org.apache.fop.traits.WritingMode;
import org.apache.fop.util.ColorUtil;

@@ -172,8 +173,11 @@ public final class Trait implements Serializable {
/** For optional content groups. */
public static final Integer LAYER = 43;

/** Used to disable the rendering of a Block http://www.w3.org/TR/xsl/#rend-vis */
public static final Integer VISIBILITY = 44;

/** Maximum value used by trait keys */
public static final int MAX_TRAIT_KEY = 43;
public static final int MAX_TRAIT_KEY = 44;

private static final TraitInfo[] TRAIT_INFO = new TraitInfo[MAX_TRAIT_KEY + 1];

@@ -246,7 +250,7 @@ public final class Trait implements Serializable {
put(SHIFT_DIRECTION,
new TraitInfo("shift-direction", Direction.class));
put(LAYER, new TraitInfo("layer", String.class));
put(VISIBILITY, new TraitInfo("visibility", Visibility.class));
}

/**

+ 5
- 1
fop-core/src/main/java/org/apache/fop/fo/flow/Block.java View File

@@ -85,12 +85,12 @@ public class Block extends FObjMixed implements BreakPropertySet,
private Numeric widows;
private int wrapOption;
private int disableColumnBalancing;
private int visibility;
// Unused but valid items, commented out for performance:
// private CommonAccessibility commonAccessibility;
// private CommonAural commonAural;
// private Length textDepth;
// private Length textAltitude;
// private int visibility;
// End of FO trait values

/**
@@ -137,6 +137,7 @@ public class Block extends FObjMixed implements BreakPropertySet,
widows = pList.get(PR_WIDOWS).getNumeric();
wrapOption = pList.get(PR_WRAP_OPTION).getEnum();
disableColumnBalancing = pList.get(PR_X_DISABLE_COLUMN_BALANCING).getEnum();
visibility = pList.get(PR_VISIBILITY).getEnum();
}

/** {@inheritDoc} */
@@ -358,4 +359,7 @@ public class Block extends FObjMixed implements BreakPropertySet,
return FO_BLOCK;
}

public int getVisibility() {
return visibility;
}
}

+ 1
- 0
fop-core/src/main/java/org/apache/fop/layoutmgr/BlockLayoutManager.java View File

@@ -331,6 +331,7 @@ public class BlockLayoutManager extends SpacedBorderedPaddedBlockLayoutManager

TraitSetter.addSpaceBeforeAfter(curBlockArea, layoutContext.getSpaceAdjust(),
effSpaceBefore, effSpaceAfter);
TraitSetter.setVisibility(curBlockArea, getBlockFO().getVisibility());
flush();

curBlockArea = null;

+ 16
- 0
fop-core/src/main/java/org/apache/fop/layoutmgr/TraitSetter.java View File

@@ -36,6 +36,7 @@ import org.apache.fop.fo.properties.CommonTextDecoration;
import org.apache.fop.fonts.Font;
import org.apache.fop.traits.BorderProps;
import org.apache.fop.traits.MinOptMax;
import org.apache.fop.traits.Visibility;

/**
* This is a helper class used for setting common traits on areas.
@@ -599,6 +600,21 @@ public final class TraitSetter {
}
}

public static void setVisibility(Area area, int visibility) {
Visibility v;
switch (visibility) {
case Constants.EN_COLLAPSE:
v = Visibility.COLLAPSE;
break;
case Constants.EN_HIDDEN:
v = Visibility.HIDDEN;
break;
default:
v = Visibility.VISIBLE;
}
area.addTrait(Trait.VISIBILITY, v);
}

/**
* Sets the structure tree element associated to the given area.
*

+ 3
- 1
fop-core/src/main/java/org/apache/fop/render/AbstractRenderer.java View File

@@ -71,6 +71,7 @@ import org.apache.fop.area.inline.TextArea;
import org.apache.fop.area.inline.WordArea;
import org.apache.fop.fo.Constants;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.traits.Visibility;

/**
* Abstract base class for all renderers. The Abstract renderer does all the
@@ -609,7 +610,8 @@ public abstract class AbstractRenderer

handleBlockTraits(block);

if (children != null) {
if (children != null && block.getTrait(Trait.VISIBILITY) != Visibility.HIDDEN)
{
renderBlocks(block, children);
}


+ 70
- 0
fop-core/src/main/java/org/apache/fop/traits/Visibility.java View File

@@ -0,0 +1,70 @@
/*
* 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.
*/

package org.apache.fop.traits;

import java.io.ObjectStreamException;

import org.apache.fop.fo.Constants;


public final class Visibility extends TraitEnum {
private static final long serialVersionUID = 1L;

private static final String[] VISIBILITY_NAMES = new String[]
{"visible", "hidden", "collapse"};

private static final int[] VISIBILITY_VALUES = new int[]
{Constants.EN_VISIBLE, Constants.EN_HIDDEN, Constants.EN_COLLAPSE};

/** border-style: none */
public static final Visibility VISIBLE = new Visibility(0);
/** border-style: hidden */
public static final Visibility HIDDEN = new Visibility(1);
/** border-style: dotted */
public static final Visibility COLLAPSE = new Visibility(2);

private static final Visibility[] VISIBILITIES = new Visibility[] {
VISIBLE, HIDDEN, COLLAPSE};


private Visibility(int index) {
super(VISIBILITY_NAMES[index], VISIBILITY_VALUES[index]);
}

/**
* Returns the enumeration/singleton object based on its name.
* @param name the name of the enumeration value
* @return the enumeration object
*/
public static Visibility valueOf(String name) {
for (Visibility v : VISIBILITIES) {
if (v.getName().equalsIgnoreCase(name)) {
return v;
}
}
throw new IllegalArgumentException("Illegal visibility value: " + name);
}

private Object readResolve() throws ObjectStreamException {
return valueOf(getName());
}

public String toString() {
return getName();
}
}

+ 51
- 0
fop/test/layoutengine/standard-testcases/block_hidden.xml View File

@@ -0,0 +1,51 @@
<?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: block_basic_1.xml 627324 2008-02-13 09:35:01Z maxberger $ -->
<testcase>
<info>
<p>
This test checks the visibility trait.
</p>
</info>
<fo>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
<fo:layout-master-set>
<fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="normal" white-space-collapse="true">
<fo:flow flow-name="xsl-region-body">
<fo:block>test1</fo:block>
<fo:block visibility="hidden">hidden</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>
</fo>
<checks>
<!-- Check for first paragraph -->
<eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@ipd"/>
<eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@bpd"/>
<eval expected="visible" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[1]/@visibility"/>
<!-- Check for second paragraph -->
<eval expected="360000" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@ipd"/>
<eval expected="14400" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@bpd"/>
<eval expected="hidden" xpath="/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/@visibility"/>
<eval expected="0" xpath="count(/areaTree/pageSequence/pageViewport/page[1]/regionViewport/regionBody/mainReference/span/flow/block[2]/*)"/>
</checks>
</testcase>

Loading…
Cancel
Save