diff options
Diffstat (limited to 'awt/org/apache/harmony/awt/gl/font/BasicMetrics.java')
-rw-r--r-- | awt/org/apache/harmony/awt/gl/font/BasicMetrics.java | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/awt/org/apache/harmony/awt/gl/font/BasicMetrics.java b/awt/org/apache/harmony/awt/gl/font/BasicMetrics.java new file mode 100644 index 0000000..c0fb390 --- /dev/null +++ b/awt/org/apache/harmony/awt/gl/font/BasicMetrics.java @@ -0,0 +1,134 @@ +/* + * 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. + */ +/** + * @author Oleg V. Khaschansky + * @version $Revision$ + * + */ + +package org.apache.harmony.awt.gl.font; + +import java.awt.font.LineMetrics; +import java.awt.font.GraphicAttribute; +import java.awt.*; + +/** + * Date: May 14, 2005 + * Time: 7:44:13 PM + * + * This class incapsulates text metrics specific for the text layout or + * for the separate text segment. Text segment is a text run with the constant direction + * and attributes like font, decorations, etc. BasicMetrics is also used to store + * calculated text metrics like advance, ascent or descent. this class is very similar to + * LineMetrics, but provides some additional info, constructors and is more transparent. + */ +public class BasicMetrics { + int baseLineIndex; + + float ascent; // Ascent of the font + float descent; // Descent of the font + float leading; // External leading + float advance; + + float italicAngle; + float superScriptOffset; + + float underlineOffset; + float underlineThickness; + + float strikethroughOffset; + float strikethroughThickness; + + /** + * Constructs BasicMetrics from LineMetrics and font + * @param lm + * @param font + */ + BasicMetrics(LineMetrics lm, Font font) { + ascent = lm.getAscent(); + descent = lm.getDescent(); + leading = lm.getLeading(); + + underlineOffset = lm.getUnderlineOffset(); + underlineThickness = lm.getUnderlineThickness(); + + strikethroughOffset = lm.getStrikethroughOffset(); + strikethroughThickness = lm.getStrikethroughThickness(); + + baseLineIndex = lm.getBaselineIndex(); + + italicAngle = font.getItalicAngle(); + superScriptOffset = (float) font.getTransform().getTranslateY(); + } + + /** + * Constructs BasicMetrics from GraphicAttribute. + * It gets ascent and descent from the graphic attribute and + * computes reasonable defaults for other metrics. + * @param ga - graphic attribute + */ + BasicMetrics(GraphicAttribute ga) { + ascent = ga.getAscent(); + descent = ga.getDescent(); + leading = 2; + + baseLineIndex = ga.getAlignment(); + + italicAngle = 0; + superScriptOffset = 0; + + underlineOffset = Math.max(descent/2, 1); + + // Just suggested, should be cap_stem_width or something like that + underlineThickness = Math.max(ascent/13, 1); + + strikethroughOffset = -ascent/2; // Something like middle of the line + strikethroughThickness = underlineThickness; + } + + /** + * Copies metrics from the TextMetricsCalculator object. + * @param tmc - TextMetricsCalculator object + */ + BasicMetrics(TextMetricsCalculator tmc) { + ascent = tmc.ascent; + descent = tmc.descent; + leading = tmc.leading; + advance = tmc.advance; + baseLineIndex = tmc.baselineIndex; + } + + public float getAscent() { + return ascent; + } + + public float getDescent() { + return descent; + } + + public float getLeading() { + return leading; + } + + public float getAdvance() { + return advance; + } + + public int getBaseLineIndex() { + return baseLineIndex; + } +} |