summaryrefslogtreecommitdiffstats
path: root/awt/org/apache/harmony/awt/gl/font/AndroidLineMetrics.java
diff options
context:
space:
mode:
Diffstat (limited to 'awt/org/apache/harmony/awt/gl/font/AndroidLineMetrics.java')
-rw-r--r--awt/org/apache/harmony/awt/gl/font/AndroidLineMetrics.java120
1 files changed, 120 insertions, 0 deletions
diff --git a/awt/org/apache/harmony/awt/gl/font/AndroidLineMetrics.java b/awt/org/apache/harmony/awt/gl/font/AndroidLineMetrics.java
new file mode 100644
index 0000000..f37be6d
--- /dev/null
+++ b/awt/org/apache/harmony/awt/gl/font/AndroidLineMetrics.java
@@ -0,0 +1,120 @@
+/*
+ * 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 Ilya S. Okomin
+ * @version $Revision$
+ */
+package org.apache.harmony.awt.gl.font;
+
+import java.awt.font.FontRenderContext;
+import org.apache.harmony.awt.gl.font.LineMetricsImpl;
+
+
+/**
+ *
+ * Linux implementation of LineMetrics class
+ */
+public class AndroidLineMetrics extends LineMetricsImpl {
+
+ /**
+ * Constructor
+ */
+ public AndroidLineMetrics( AndroidFont fnt,
+ FontRenderContext frc,
+ String str){
+ numChars = str.length();
+ baseLineIndex = 0;
+
+ ascent = fnt.ascent; // Ascent of the font
+ descent = -fnt.descent; // Descent of the font
+ leading = fnt.leading; // External leading
+
+ height = ascent + descent + leading; // Height of the font ( == (ascent + descent + leading))
+ underlineThickness = 0.0f;
+ underlineOffset = 0.0f;
+ strikethroughThickness = 0.0f;
+ strikethroughOffset = 0.0f;
+ maxCharWidth = 0.0f;
+
+ // TODO: Find out pixel metrics
+ /*
+ * positive metrics rounded to the smallest int that is bigger than value
+ * negative metrics rounded to the smallest int that is lesser than value
+ * thicknesses rounded to int ((int)round(value + 0.5))
+ *
+ */
+
+ lAscent = (int)Math.ceil(fnt.ascent);// // Ascent of the font
+ lDescent = -(int)Math.ceil(fnt.descent);// Descent of the font
+ lLeading = (int)Math.ceil(leading); // External leading
+
+ lHeight = lAscent + lDescent + lLeading; // Height of the font ( == (ascent + descent + leading))
+
+ lUnderlineThickness = Math.round(underlineThickness);//(int)metrics[11];
+
+ if (underlineOffset >= 0){
+ lUnderlineOffset = (int)Math.ceil(underlineOffset);
+ } else {
+ lUnderlineOffset = (int)Math.floor(underlineOffset);
+ }
+
+ lStrikethroughThickness = Math.round(strikethroughThickness); //(int)metrics[13];
+
+ if (strikethroughOffset >= 0){
+ lStrikethroughOffset = (int)Math.ceil(strikethroughOffset);
+ } else {
+ lStrikethroughOffset = (int)Math.floor(strikethroughOffset);
+ }
+
+ lMaxCharWidth = (int)Math.ceil(maxCharWidth); //(int)metrics[15];
+ units_per_EM = 0;
+
+ }
+
+ public float[] getBaselineOffsets() {
+ // TODO: implement baseline offsets for TrueType fonts
+ if (baselineOffsets == null){
+ float[] baselineData = null;
+
+ // Temporary workaround:
+ // Commented out native data initialization, since it can
+ // cause failures with opening files in multithreaded applications.
+ //
+ // TODO: support work with truetype data in multithreaded
+ // applications.
+
+ // If font TrueType data is taken from BASE table
+// if ((this.font.getFontHandle() != 0) && (font.getFontType() == FontManager.FONT_TYPE_TT)){
+// baselineData = LinuxNativeFont.getBaselineOffsetsNative(font.getFontHandle(), font.getSize(), ascent, descent, units_per_EM);
+// }
+//
+ baseLineIndex = 0;
+ baselineOffsets = new float[]{0, (-ascent+descent)/2, -ascent};
+ }
+
+ return baselineOffsets;
+ }
+
+ public int getBaselineIndex() {
+ if (baselineOffsets == null){
+ // get offsets and set correct index
+ getBaselineOffsets();
+ }
+ return baseLineIndex;
+ }
+
+}