diff options
author | Finn Bock <bckfnn@apache.org> | 2004-10-18 20:16:54 +0000 |
---|---|---|
committer | Finn Bock <bckfnn@apache.org> | 2004-10-18 20:16:54 +0000 |
commit | 6a716d912cb6c73db3f98669e4d2f9a40e99861f (patch) | |
tree | 4e01d2fbbeed044c766bfd3616c0d7b752cb4159 | |
parent | 390b64d2ee1ac30ca5f587dee24473e6bd057dcf (diff) | |
download | xmlgraphics-fop-6a716d912cb6c73db3f98669e4d2f9a40e99861f.tar.gz xmlgraphics-fop-6a716d912cb6c73db3f98669e4d2f9a40e99861f.zip |
Initial version.
PR: 31699
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/trunk@198051 13f79535-47bb-0310-9956-ffa450edef68
-rwxr-xr-x | src/java/org/apache/fop/fo/properties/CommonBorderPaddingBackground.java | 223 | ||||
-rwxr-xr-x | src/java/org/apache/fop/fo/properties/CommonFont.java | 130 |
2 files changed, 353 insertions, 0 deletions
diff --git a/src/java/org/apache/fop/fo/properties/CommonBorderPaddingBackground.java b/src/java/org/apache/fop/fo/properties/CommonBorderPaddingBackground.java new file mode 100755 index 000000000..6e3643eda --- /dev/null +++ b/src/java/org/apache/fop/fo/properties/CommonBorderPaddingBackground.java @@ -0,0 +1,223 @@ +/* + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.fo.properties; + +import org.apache.fop.datatypes.ColorType; +import org.apache.fop.datatypes.Length; +import org.apache.fop.fo.Constants; +import org.apache.fop.fo.PropertyList; + +/** + * Stores all common border and padding properties. + * See Sec. 7.7 of the XSL-FO Standard. + */ +public class CommonBorderPaddingBackground implements Cloneable { + /** + * The "background-attachment" property. + */ + public int backgroundAttachment; + + /** + * The "background-color" property. + */ + public ColorType backgroundColor; + + /** + * The "background-image" property. + */ + public String backgroundImage; + + /** + * The "background-repeat" property. + */ + public int backgroundRepeat; + + /** + * The "background-position-horizontal" property. + */ + public Length backgroundPositionHorizontal; + + /** + * The "background-position-vertical" property. + */ + public Length backgroundPositionVertical; + + public static final int BEFORE = 0; + public static final int AFTER = 1; + public static final int START = 2; + public static final int END = 3; + + private static class BorderInfo implements Cloneable { + private int mStyle; // Enum for border style + private ColorType mColor; // Border color + private CondLengthProperty mWidth; + + BorderInfo(int style, CondLengthProperty width, ColorType color) { + mStyle = style; + mWidth = width; + mColor = color; + } + } + + private BorderInfo[] borderInfo = new BorderInfo[4]; + private CondLengthProperty[] padding = new CondLengthProperty[4]; + + /** + * Construct a CommonBorderAndPadding object. + * @param pList The PropertyList to get properties from. + */ + public CommonBorderPaddingBackground(PropertyList pList) { + backgroundAttachment = pList.get(Constants.PR_BACKGROUND_ATTACHMENT).getEnum(); + backgroundColor = pList.get(Constants.PR_BACKGROUND_COLOR).getColorType(); + if (backgroundColor.getAlpha() == 0) { + backgroundColor = null; + } + + backgroundImage = pList.get(Constants.PR_BACKGROUND_IMAGE).getString(); + if (backgroundImage == null || "none".equals(backgroundImage)) { + backgroundImage = null; + } else { + backgroundRepeat = pList.get(Constants.PR_BACKGROUND_REPEAT).getEnum(); + backgroundPositionHorizontal = pList.get(Constants.PR_BACKGROUND_POSITION_HORIZONTAL).getLength(); + backgroundPositionVertical = pList.get(Constants.PR_BACKGROUND_POSITION_VERTICAL).getLength(); + } + + initBorderInfo(pList, BEFORE, + Constants.PR_BORDER_BEFORE_COLOR, + Constants.PR_BORDER_BEFORE_STYLE, + Constants.PR_BORDER_BEFORE_WIDTH, + Constants.PR_PADDING_BEFORE); + initBorderInfo(pList, AFTER, + Constants.PR_BORDER_AFTER_COLOR, + Constants.PR_BORDER_AFTER_STYLE, + Constants.PR_BORDER_AFTER_WIDTH, + Constants.PR_PADDING_AFTER); + initBorderInfo(pList, START, + Constants.PR_BORDER_START_COLOR, + Constants.PR_BORDER_START_STYLE, + Constants.PR_BORDER_START_WIDTH, + Constants.PR_PADDING_START); + initBorderInfo(pList, END, + Constants.PR_BORDER_END_COLOR, + Constants.PR_BORDER_END_STYLE, + Constants.PR_BORDER_END_WIDTH, + Constants.PR_PADDING_END); + + } + + private void initBorderInfo(PropertyList pList, int side, + int colorProp, int styleProp, int widthProp, int paddingProp) + { + padding[side] = pList.get(paddingProp).getCondLength(); + // If style = none, force width to 0, don't get Color (spec 7.7.20) + int style = pList.get(styleProp).getEnum(); + if (style != Constants.NONE) { + borderInfo[side] = new BorderInfo(style, + pList.get(widthProp).getCondLength(), + pList.get(colorProp).getColorType()); + } + } + + public int getBorderStartWidth(boolean bDiscard) { + return getBorderWidth(START, bDiscard); + } + + public int getBorderEndWidth(boolean bDiscard) { + return getBorderWidth(END, bDiscard); + } + + public int getBorderBeforeWidth(boolean bDiscard) { + return getBorderWidth(BEFORE, bDiscard); + } + + public int getBorderAfterWidth(boolean bDiscard) { + return getBorderWidth(AFTER, bDiscard); + } + + public int getPaddingStart(boolean bDiscard) { + return getPadding(START, bDiscard); + } + + public int getPaddingEnd(boolean bDiscard) { + return getPadding(END, bDiscard); + } + + public int getPaddingBefore(boolean bDiscard) { + return getPadding(BEFORE, bDiscard); + } + + public int getPaddingAfter(boolean bDiscard) { + return getPadding(AFTER, bDiscard); + } + + public int getBorderWidth(int side, boolean bDiscard) { + if ((borderInfo[side] == null) + || (borderInfo[side].mStyle == Constants.NONE) + || (bDiscard && borderInfo[side].mWidth.isDiscard())) { + return 0; + } else { + return borderInfo[side].mWidth.getLengthValue(); + } + } + + public ColorType getBorderColor(int side) { + if (borderInfo[side] != null) { + return borderInfo[side].mColor; + } else { + return null; + } + } + + public int getBorderStyle(int side) { + if (borderInfo[side] != null) { + return borderInfo[side].mStyle; + } else { + return 0; + } + } + + public int getPadding(int side, boolean bDiscard) { + if ((padding[side] == null) || (bDiscard && padding[side].isDiscard())) { + return 0; + } else { + return padding[side].getLengthValue(); + } + } + + /** + * Return all the border and padding height in the block progression + * dimension. + * @param bDiscard the discard flag. + * @return all the padding and border height. + */ + public int getBPPaddingAndBorder(boolean bDiscard) { + return getPaddingBefore(bDiscard) + getPaddingAfter(bDiscard) + + getBorderBeforeWidth(bDiscard) + getBorderAfterWidth(bDiscard); + } + + public String toString() { + return "CommonBordersAndPadding (Before, After, Start, End):\n" + + "Borders: (" + getBorderBeforeWidth(false) + ", " + getBorderAfterWidth(false) + ", " + + getBorderStartWidth(false) + ", " + getBorderEndWidth(false) + ")\n" + + "Border Colors: (" + getBorderColor(BEFORE) + ", " + getBorderColor(AFTER) + ", " + + getBorderColor(START) + ", " + getBorderColor(END) + ")\n" + + "Padding: (" + getPaddingBefore(false) + ", " + getPaddingAfter(false) + ", " + + getPaddingStart(false) + ", " + getPaddingEnd(false) + ")\n"; + } +} diff --git a/src/java/org/apache/fop/fo/properties/CommonFont.java b/src/java/org/apache/fop/fo/properties/CommonFont.java new file mode 100755 index 000000000..9ab6b6db5 --- /dev/null +++ b/src/java/org/apache/fop/fo/properties/CommonFont.java @@ -0,0 +1,130 @@ +/* + * 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. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* $Id$ */ + +package org.apache.fop.fo.properties; + +// FOP +import org.apache.fop.datatypes.Length; +import org.apache.fop.datatypes.Numeric; +import org.apache.fop.fo.Constants; +import org.apache.fop.fo.PropertyList; +import org.apache.fop.fonts.Font; +import org.apache.fop.fonts.FontInfo; +import org.apache.fop.fonts.FontMetrics; + +/** + * Collection of properties used in + */ +public class CommonFont { + + /** + * The "font-family" property. + */ + public String fontFamily; + + /** + * The "font-selection-strategy" property. + */ + public int fontSelectionStrategy; + + /** + * The "font-size" property. + */ + public Length fontSize; + + /** + * The "font-stretch" property. + */ + public int fontStretch; + + /** + * The "font-size-adjust" property. + */ + public Numeric fontSizeAdjust; + + /** + * The "font-style" property. + */ + public String fontStyle; + + /** + * The "font-variant" property. + */ + public int fontVariant; + + /** + * The "font-weight" property. + */ + public String fontWeight; + + private Font fontState; + + /** + * Create a CommonFont object. + * @param pList The PropertyList to get properties from. + */ + public CommonFont(PropertyList pList) { + fontFamily = pList.get(Constants.PR_FONT_FAMILY).getString(); + fontSelectionStrategy = pList.get(Constants.PR_FONT_SELECTION_STRATEGY).getEnum(); + fontSize = pList.get(Constants.PR_FONT_SIZE).getLength(); + fontStretch = pList.get(Constants.PR_FONT_STRETCH).getEnum(); + fontSizeAdjust = pList.get(Constants.PR_FONT_SIZE_ADJUST).getNumeric(); + fontStyle = pList.get(Constants.PR_FONT_STYLE).getString(); + fontVariant = pList.get(Constants.PR_FONT_VARIANT).getEnum(); + fontWeight = pList.get(Constants.PR_FONT_WEIGHT).getString(); + } + + /** + * Create and return a Font object based on the properties. + * + * @param fontInfo + * @return a Font object. + */ + public Font getFontState(FontInfo fontInfo) { + if (fontState == null) { + /**@todo this is ugly. need to improve. */ + + int font_weight = 400; + if (fontWeight.equals("bolder")) { + // +100 from inherited + } else if (fontWeight.equals("lighter")) { + // -100 from inherited + } else { + try { + font_weight = Integer.parseInt(fontWeight); + } catch (NumberFormatException nfe) { + } /** TODO: log that exception */ + } + font_weight = ((int) font_weight / 100) * 100; + if (font_weight < 100) { + font_weight = 100; + } else if (font_weight > 900) { + font_weight = 900; + } + + // NOTE: this is incomplete. font-size may be specified with + // various kinds of keywords too + //int fontVariant = propertyList.get("font-variant").getEnum(); + String fname = fontInfo.fontLookup(fontFamily, fontStyle, + font_weight); + FontMetrics metrics = fontInfo.getMetricsFor(fname); + fontState = new Font(fname, metrics, fontSize.getValue()); + } + return fontState; + } +} |