From 2d84b6d1ed7b09a95cad0305e8377f397e455f8f Mon Sep 17 00:00:00 2001 From: "Andreas L. Delmelle" Date: Sun, 10 Feb 2008 12:50:47 +0000 Subject: [PATCH] Revisit background-position shorthand implementation: always convert to percentages (more possibilities/precision). git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@620276 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/fop/fo/FOPropertyMapping.java | 24 +++- .../BackgroundPositionShorthand.java | 126 ++++++++++++++++++ .../BackgroundPositionShorthandParser.java | 61 --------- .../background-position-shorthand-test.fo | 36 +++-- 4 files changed, 171 insertions(+), 76 deletions(-) create mode 100644 src/java/org/apache/fop/fo/properties/BackgroundPositionShorthand.java delete mode 100644 src/java/org/apache/fop/fo/properties/BackgroundPositionShorthandParser.java diff --git a/src/java/org/apache/fop/fo/FOPropertyMapping.java b/src/java/org/apache/fop/fo/FOPropertyMapping.java index 434d4acaf..b78ec49c4 100644 --- a/src/java/org/apache/fop/fo/FOPropertyMapping.java +++ b/src/java/org/apache/fop/fo/FOPropertyMapping.java @@ -26,7 +26,7 @@ import org.apache.fop.apps.FOUserAgent; import org.apache.fop.datatypes.LengthBase; import org.apache.fop.fo.expr.PropertyException; import org.apache.fop.fo.flow.table.TableFObj.ColumnNumberPropertyMaker; -import org.apache.fop.fo.properties.BackgroundPositionShorthandParser; +import org.apache.fop.fo.properties.BackgroundPositionShorthand; import org.apache.fop.fo.properties.BorderSpacingShorthandParser; import org.apache.fop.fo.properties.BorderWidthPropertyMaker; import org.apache.fop.fo.properties.BoxPropShorthandParser; @@ -2534,15 +2534,33 @@ public final class FOPropertyMapping implements Constants { addPropertyMaker("background", m); // background-position - m = new ListProperty.Maker(PR_BACKGROUND_POSITION); + m = new BackgroundPositionShorthand.Maker(PR_BACKGROUND_POSITION); m.setInherited(false); m.addKeyword("left", "0% 50%"); + m.addKeyword("left center", "0% 50%"); + m.addKeyword("center left", "0% 50%"); m.addKeyword("right", "100% 50%"); + m.addKeyword("right center", "100% 50%"); + m.addKeyword("center right", "100% 50%"); m.addKeyword("center", "50% 50%"); + m.addKeyword("center center", "50% 50%"); m.addKeyword("top", "50% 0%"); + m.addKeyword("top center", "50% 0%"); + m.addKeyword("center top", "50% 0%"); m.addKeyword("bottom", "50% 100%"); + m.addKeyword("bottom center", "50% 100%"); + m.addKeyword("center bottom", "50% 100%"); + m.addKeyword("top left", "0% 0%"); + m.addKeyword("left top", "0% 0%"); + m.addKeyword("top right", "100% 0%"); + m.addKeyword("right top", "100% 0%"); + m.addKeyword("bottom left", "0% 100%"); + m.addKeyword("left bottom", "0% 100%"); + m.addKeyword("bottom right", "100% 100%"); + m.addKeyword("right bottom", "100% 100%"); m.setDefault("0% 0%"); - m.setDatatypeParser(new BackgroundPositionShorthandParser()); + m.setPercentBase(LengthBase.CUSTOM_BASE); + m.setDatatypeParser(new BackgroundPositionShorthand.Parser()); addPropertyMaker("background-position", m); // border diff --git a/src/java/org/apache/fop/fo/properties/BackgroundPositionShorthand.java b/src/java/org/apache/fop/fo/properties/BackgroundPositionShorthand.java new file mode 100644 index 000000000..ba2ee7c60 --- /dev/null +++ b/src/java/org/apache/fop/fo/properties/BackgroundPositionShorthand.java @@ -0,0 +1,126 @@ +/* + * 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.fo.properties; + +import java.util.List; + +import org.apache.fop.datatypes.PercentBase; +import org.apache.fop.datatypes.PercentBaseContext; +import org.apache.fop.fo.Constants; +import org.apache.fop.fo.FObj; +import org.apache.fop.fo.PropertyList; +import org.apache.fop.fo.expr.PropertyException; + +/** + * Class encapsulating functionality for the getDimension() returns 1. + */ + public PercentBase getP‘rcentBase() { + return new PercentBase() { + /** {@inheritDoc} */ + public int getBaseLength(PercentBaseContext context) throws PropertyException { + return 0; + } + + /** {@inheritDoc} */ + public double getBaseValue() { + return 0; + } + + /** {@inheritDoc} */ + public int getDimension() { + return 1; + } + + }; + } + } + + /** + * Inner class to provide shorthand parsing capabilities + * + */ + public static class Parser extends GenericShorthandParser { + + /** {@inheritDoc} */ + public Property getValueForProperty(int propId, + Property property, + PropertyMaker maker, + PropertyList propertyList) + throws PropertyException { + + int index = -1; + List propList = property.getList(); + if (propId == Constants.PR_BACKGROUND_POSITION_HORIZONTAL) { + index = 0; + } else if (propId == Constants.PR_BACKGROUND_POSITION_VERTICAL) { + index = 1; + } + if (index >= 0) { + return maker.convertProperty( + (Property) propList.get(index), + propertyList, + propertyList.getFObj()); + } // else: invalid index? shouldn't happen... + return null; + } + } + +} diff --git a/src/java/org/apache/fop/fo/properties/BackgroundPositionShorthandParser.java b/src/java/org/apache/fop/fo/properties/BackgroundPositionShorthandParser.java deleted file mode 100644 index 76c934234..000000000 --- a/src/java/org/apache/fop/fo/properties/BackgroundPositionShorthandParser.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * 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.fo.properties; - -import java.util.List; -import org.apache.fop.fo.Constants; -import org.apache.fop.fo.PropertyList; -import org.apache.fop.fo.expr.PropertyException; - -/** - * A shorthand parser for the background-position shorthand - */ - -public class BackgroundPositionShorthandParser extends GenericShorthandParser { - - /** - * {@inheritDoc} - */ - public Property getValueForProperty(int propId, - Property property, - PropertyMaker maker, - PropertyList propertyList) - throws PropertyException { - - int index = -1; - List propList = property.getList(); - if (propId == Constants.PR_BACKGROUND_POSITION_HORIZONTAL) { - index = 0; - } else if (propId == Constants.PR_BACKGROUND_POSITION_VERTICAL) { - index = 1; - if (propList.size() == 1) { - /* only background-position-horizontal specified - * through the shorthand: - * background-position-vertical=50% (see: XSL-FO 1.0 -- 7.29.2) - */ - return maker.make(propertyList, "50%", propertyList.getParentFObj()); - } - } - if (index >= 0) { - return (Property) propList.get(index); - } // else: invalid index? shouldn't happen... - return null; - } -} diff --git a/test/fotree/testcases/background-position-shorthand-test.fo b/test/fotree/testcases/background-position-shorthand-test.fo index 6ef374544..6bc793535 100644 --- a/test/fotree/testcases/background-position-shorthand-test.fo +++ b/test/fotree/testcases/background-position-shorthand-test.fo @@ -25,48 +25,60 @@ - - + + Test background-position shorthand: initial values - - + + Test background-position shorthand: "50% 50%" - + Test background-position shorthand: "2in 50%" - + Test background-position shorthand: "100%" - - + + Test background-position shorthand: "top center" - - + + Test background-position shorthand: "right bottom" - - + + Test background-position shorthand: "inherit" + + + + Test background-position shorthand: "top right" + + + + + Test background-position shorthand: "center" + -- 2.39.5