libbluray | branch: master | hpi1 <[email protected]> | Fri Nov 21 11:51:10 2014 +0200| [cc456e4a060be20a218ce3b9570a05cd40988be5] | committer: hpi1
Add J2ME compatible java.awt.Font > http://git.videolan.org/gitweb.cgi/libbluray.git/?a=commit;h=cc456e4a060be20a218ce3b9570a05cd40988be5 --- src/libbluray/bdj/java/java/awt/Font.java | 236 +++++++++++++++++++++++++++++ 1 file changed, 236 insertions(+) diff --git a/src/libbluray/bdj/java/java/awt/Font.java b/src/libbluray/bdj/java/java/awt/Font.java new file mode 100644 index 0000000..174540b --- /dev/null +++ b/src/libbluray/bdj/java/java/awt/Font.java @@ -0,0 +1,236 @@ +/* + * This file is part of libbluray + * Copyright (C) 2014 libbluray + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * <http://www.gnu.org/licenses/>. + */ + +package java.awt; + +import java.io.File; +import java.util.Hashtable; +import java.util.Map; +import java.awt.font.TextAttribute; +import java.text.AttributedCharacterIterator.Attribute; + +public class Font implements java.io.Serializable { + + /* + * Java ME 1.4 compatible Font class + * + * https://docs.oracle.com/javame/config/cdc/ref-impl/pbp1.1.2/jsr217/ + */ + + public static final int PLAIN = 0; + public static final int BOLD = 1; + public static final int ITALIC = 2; + + protected String name; + protected int style; + protected int size; + + public Font(String name, int style, int size) { + this(name, style, size, null, null); + } + + public Font(Map attributes) { + this.name = "Default"; + this.style = PLAIN; + this.size = 12; + + org.videolan.Logger.unimplemented("Font", "Font(Map)"); + + setFamily(); + } + + public static Font decode(String str) { + + if (str == null) { + return new Font("Dialog", PLAIN, 12); + } + + org.videolan.Logger.unimplemented("Font", "decode"); + + return new Font("Dialog", PLAIN, 12); + } + + public boolean equals(Object obj) { + if (obj == this) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof Font)) { + return false; + } + Font font = (Font)obj; + if (size != font.size || style != font.style || !name.equals(font.name)) { + return false; + } + if (fontFile != null && font.fontFile != null && + !fontFile.equals(font.fontFile)) { + return false; + } + return true; + } + + public Attribute[] getAvailableAttributes() { + Attribute attributes[] = { + TextAttribute.FAMILY, + TextAttribute.WEIGHT, + TextAttribute.POSTURE, + TextAttribute.SIZE, + }; + return attributes; + } + + public Map getAttributes() { + Hashtable map = new Hashtable(); + map.put(TextAttribute.FAMILY, name); + map.put(TextAttribute.SIZE, new Float(size)); + map.put(TextAttribute.WEIGHT, (style & BOLD) != 0 ? TextAttribute.WEIGHT_BOLD : TextAttribute.WEIGHT_REGULAR); + map.put(TextAttribute.POSTURE, (style & ITALIC) != 0 ? TextAttribute.POSTURE_OBLIQUE : TextAttribute.POSTURE_REGULAR); + return (Map)map; + } + + public String getFamily() { + return family; + } + + public static Font getFont(Map attributes) { + Font font = (Font)attributes.get(TextAttribute.FONT); + if (font != null) { + return font; + } + return new Font(attributes); + } + + public static Font getFont(String nm) { + return getFont(nm, null); + } + + public static Font getFont(String nm, Font font) { + String str = System.getProperty(nm); + if (str == null) { + return font; + } + return decode(str); + } + + public String getName() { + return name; + } + + public int getSize() { + return size; + } + + public int getStyle() { + return style; + } + + public int hashCode() { + return name.hashCode() ^ style ^ size; + } + + public boolean isBold() { + return (style & BOLD) != 0; + } + + public boolean isItalic() { + return (style & ITALIC) != 0; + } + + public boolean isPlain() { + return style == 0; + } + + public String toString() { + String strStyle[] = { "plain", "bold", "italic", "bolditalic" }; + return getClass().getName() + "[family=" + getFamily() + ",name=" + name + ",style=" + strStyle[style] + ",size=" + size + "]"; + } + + /* + * libbluray implementation-specific extensions + */ + + private transient String family = null; + protected transient File fontFile = null; + + public static final int TRUETYPE_FONT = 0; + + /* used by org.dvb.ui.FontFacrtory */ + public static Font createFont(int type, File fontFile) throws FontFormatException { + if (type != TRUETYPE_FONT) { + throw new FontFormatException("unsupported font format"); + } + return new Font(null, -1, 1, fontFile, null); + } + + /* used by org.dvb.ui.FontFacrtory */ + public Font deriveFont(int style, int size) { + return new Font(name, style, size, fontFile, family); + } + + /* constructor */ + private Font(String name, int style, int size, File fontFile, String family) { + this.name = (name != null) ? name : "Default"; + this.style = (style & ~0x03) == 0 ? style : 0; + this.size = size; + this.fontFile = fontFile; + this.family = family; + if (family == null) { + setFamily(); + } + } + + /* + * private + */ + + private static final long serialVersionUID = -4206021311591459213L; /* JDK 1.1 serialVersionUID */ + + private void writeObject(java.io.ObjectOutputStream s) + throws java.lang.ClassNotFoundException, java.io.IOException { + s.defaultWriteObject(); + } + + private void readObject(java.io.ObjectInputStream s) + throws java.lang.ClassNotFoundException, java.io.IOException { + s.defaultReadObject(); + setFamily(); + } + + private void setFamily() { + String[] names = GraphicsEnvironment.getLocalGraphicsEnvironment().getAvailableFontFamilyNames(); + if (names.length == 0) { + family = "Default"; + return; + } + for (int i = 0; i < names.length; i++) { + if (names[i].equalsIgnoreCase(name)) { + family = names[i]; + return; + } + if (names[i].equalsIgnoreCase("Dialog")) { + family = names[i]; + } + } + if (family == null) { + family = names[0]; + } + } +} _______________________________________________ libbluray-devel mailing list [email protected] https://mailman.videolan.org/listinfo/libbluray-devel
