📄 font.java
字号:
/*
* Copyright 2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*/
package com.sun.lwuit;
import java.util.Hashtable;
/**
* A simple abstraction of platform fonts and library fonts that enables the
* library to use more elaborate fonts unsupported by a specific device.
* This abstraction also supports bitmap fonts using an Ant task (more details
* about the unifier are explained in the javadoc overview document).
* <p>A bitmap font can be created manually but that is tedious, normally you would use
* the Ant task as illustrated bellow to produce a resource file containing
* the supported bitmap font. For further detail read the overview document and
* {@link com.sun.lwuit.util.Resources}.
<pre>
<target name="pre-init">
<taskdef classpath="ImageUnifier.jar" classname="com.sun.jwt.resource.Builder" name="build" />
<build dest="src/font.res">
<font src="images/arial.ttf" bold="true" italic="true" size="11" />
<font logicalName="Dialog" />
</build>
</target>
</pre>
* <p>The following attributes can be expressed for a font ant task:
* <ul>
* <li>name - name for the font to load from the resource file (optional: defaults to logical name or file name).
* <li>charset - defaults to the English alphabet, numbers and common signs.
* Should contain a list of all characters that should be supported by a font. E.g. if a font would always be
* used for uppercase letters then it would save space to define the charset as: {@code "ABCDEFGHIJKLMNOPQRSTUVWXYZ" }
* <li>src - font file in the case of using a file, defaults to TrueType font
* <li>size - floating point size of the font
* <li>bold - defaults to false indicates if the font should be bold
* <li>italic - defaults to false indicates if the font should be italic
* <li>trueType - defaults to true, relevant only when src is used. If set to false type 1 fonts are assumed.
* <li>antiAliasing - defaults to true otherwise fonts will be aliased
* <li>logicalName - logical name of the font as specified by java.awt.Font in Java SE:
* {@code Dialog, DialogInput, Monospaced, Serif, or SansSerif }
* </ul>
*/
public abstract class Font {
/**
* Constant allowing us to author portable system fonts
*/
public static final int FACE_MONOSPACE = 32;
/**
* Constant allowing us to author portable system fonts
*/
public static final int FACE_PROPORTIONAL = 64;
/**
* Constant allowing us to author portable system fonts
*/
public static final int FACE_SYSTEM = 0;
/**
* Constant allowing us to author portable system fonts
*/
public static final int SIZE_LARGE = 16;
/**
* Constant allowing us to author portable system fonts
*/
public static final int SIZE_MEDIUM = 0;
/**
* Constant allowing us to author portable system fonts
*/
public static final int SIZE_SMALL = 8;
/**
* Constant allowing us to author portable system fonts
*/
public static final int STYLE_BOLD = 1;
/**
* Constant allowing us to author portable system fonts
*/
public static final int STYLE_ITALIC = 2;
/**
* Constant allowing us to author portable system fonts
*/
public static final int STYLE_UNDERLINED = 4;
/**
* Constant allowing us to author portable system fonts
*/
public static final int STYLE_PLAIN = 0;
private static Font defaultFont;
private static Hashtable bitmapCache = new Hashtable();
/**
* Creates a new Font
*/
protected Font(){
}
/**
* Returns a previously loaded bitmap font from cache
*
* @param fontName the font name is the logical name of the font
* @see #clearBitmapCache
*/
public static Font getBitmapFont(String fontName) {
return (Font)bitmapCache.get(fontName);
}
/**
* Bitmap fonts are cached this method allows us to flush the cache thus allows
* us to reload a font
*/
public static void clearBitmapCache() {
bitmapCache.clear();
}
/**
* Increase the contrast of the bitmap font for rendering on top of a surface
* whose color is darker. This is useful when drawing anti-aliased bitmap fonts using a light color
* (e.g. white) on top of a dark surface (e.g. black), the font often breaks down if its contrast is not
* increased due to the way alpha blending appears to the eye.
* <p>Notice that this method only works in one way, contrast cannot be decreased
* properly in a font and it should be cleared and reloaed with a Look and Feel switch.
*
* @param value the value to increase
*/
public void addContrast(byte value) {
}
/**
* Creates a bitmap font with the given arguments and places said font in the cache
*
* @param name the name for the font in the cache
* @param bitmap a transparency map in red and black that indicates the characters
* @param cutOffsets character offsets matching the bitmap pixels and characters in the font
* @param charWidth The width of the character when drawing... this should not be confused with
* the number of cutOffset[o + 1] - cutOffset[o]. They are completely different
* since a character can be "wider" and "seep" into the next region. This is
* especially true with italic characters all of which "lean" outside of their
* bounds.
* @param charsets the set of characters in the font
* @return a font object to draw bitmap fonts
*/
public static Font createBitmapFont(String name, Image bitmap, int[] cutOffsets, int[] charWidth, String charsets) {
Font f = createBitmapFont(bitmap, cutOffsets, charWidth, charsets);
bitmapCache.put(name, f);
return f;
}
/**
* Creates a bitmap font with the given arguments
*
* @param bitmap a transparency map in red and black that indicates the characters
* @param cutOffsets character offsets matching the bitmap pixels and characters in the font
* @param charWidth The width of the character when drawing... this should not be confused with
* the number of cutOffset[o + 1] - cutOffset[o]. They are completely different
* since a character can be "wider" and "seep" into the next region. This is
* especially true with italic characters all of which "lean" outside of their
* bounds.
* @param charsets the set of characters in the font
* @return a font object to draw bitmap fonts
*/
public static Font createBitmapFont(Image bitmap, int[] cutOffsets, int[] charWidth, String charsets) {
return new CustomFont(bitmap, cutOffsets, charWidth, charsets);
}
/**
* Creates a system native font in a similar way to common MIDP fonts
*
* @param face One of FACE_SYSTEM, FACE_PROPORTIONAL, FACE_MONOSPACE
* @param style one of STYLE_PLAIN, STYLE_ITALIC, STYLE_BOLD
* @param size One of SIZE_SMALL, SIZE_MEDIUM, SIZE_LARGE
* @return A newly created system font instance
*/
public static Font createSystemFont(int face, int style, int size) {
return new SystemFont(face, style, size);
}
/**
* Return the width of the given characters in this font instance
*
* @param ch array of characters
* @param offset characters offsets
* @param length characters length
* @return the width of the given characters in this font instance
*/
public int charsWidth(char[] ch, int offset, int length){
int retVal = 0;
for(int i=0; i<length; i++){
retVal += charWidth(ch[i + offset]);
}
return retVal;
}
/**
* Return the width of the given string subset in this font instance
*
* @param str the given string
* @param offset the string offset
* @param len the len od string
* @return the width of the given string subset in this font instance
*/
public int substringWidth(String str, int offset, int len){
return charsWidth(str.toCharArray(), offset, len);
}
/**
* Return the width of the given string in this font instance
*
* @param str the given string *
* @return the width of the given string in this font instance
*/
public int stringWidth(String str){
if( str==null || str.length()==0)
return 0;
return substringWidth(str, 0, str.length());
}
/**
* Return the width of the specific charcter when rendered alone
*
* @param ch the specific charcter
* @return the width of the specific charcter when rendered alone
*/
public abstract int charWidth(char ch);
/**
* Return the total height of the font
*
* @return the total height of the font
*/
public abstract int getHeight();
/**
* Draw the given char using the current font and color in the x,y
* coordinates.
*
* @param g the graphics object
* @param character the given character
* @param x the x coordinate to draw the char
* @param y the y coordinate to draw the char
*/
abstract void drawChar(Graphics g, char character, int x, int y);
/**
* Return the global default font instance
*
* @return the global default font instance
*/
public static Font getDefaultFont(){
if(defaultFont == null) {
defaultFont = SystemFont.defaultFont;
}
return defaultFont;
}
/**
* Sets the global default font instance
*
* @param f the global default font instance
*/
public static void setDefaultFont(Font f) {
if(f != null) {
defaultFont = f;
}
}
/**
* Draw the given char array using the current font and color in the x,y
* coordinates
*
* @param g the graphics object
* @param data the given char array
* @param offset the offset in the given char array
* @param length the number of chars to draw
* @param x the x coordinate to draw the char
* @param y the y coordinate to draw the char
*/
void drawChars(Graphics g, char[] data, int offset, int length, int x, int y) {
char c;
for ( int i = 0; i < length; i++ ) {
c = data[offset+i];
drawChar(g, c, x, y);
x += charWidth(c);
}
}
/**
* Return Optional operation returning the font face for system fonts
*
* @return Optional operation returning the font face for system fonts
*/
public int getFace(){
return 0;
}
/**
* Return Optional operation returning the font size for system fonts
*
* @return Optional operation returning the font size for system fonts
*/
public int getSize(){
return 0;
}
/**
* Return Optional operation returning the font style for system fonts
*
* @return Optional operation returning the font style for system fonts
*/
public int getStyle() {
return 0;
}
/**
* Returns a string containing all the characters supported by this font.
* Will return null for system fonts.
*
* @return String containing the characters supported by a bitmap font or
* null otherwise.
*/
public String getCharset() {
return null;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -