提交 e43dcf4d 编写于 作者: R rkennke

6795908: Refactor FontManager

Reviewed-by: prr, igor
上级 09e86cab
......@@ -114,6 +114,7 @@ FILES_export2 = \
sun/awt/KeyboardFocusManagerPeerImpl.java \
sun/awt/windows/WEmbeddedFrame.java \
sun/awt/windows/WEmbeddedFramePeer.java \
sun/awt/Win32FontManager.java \
sun/awt/Win32GraphicsEnvironment.java \
sun/awt/Win32GraphicsDevice.java \
sun/awt/Win32GraphicsConfig.java \
......
......@@ -140,7 +140,7 @@ $(OBJDIR)/awt_Win32GraphicsConfig.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLA
$(OBJDIR)/awt_Win32GraphicsDevice.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_color_ColorSpace.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_image_DataBuffer.h $(CLASSHDRDIR)/java_awt_Transparency.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsDevice.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/awt/image/dither.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/img_util_md.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
$(OBJDIR)/awt_Win32GraphicsEnv.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_Win32GraphicsEnvironment.h $(CLASSHDRDIR)/sun_awt_Win32FontManager.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/java2d/windows/WindowsFlags.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/DllUtil.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
$(OBJDIR)/awt_Window.obj:: $(CLASSHDRDIR)/java_awt_AWTEvent.h $(CLASSHDRDIR)/java_awt_Component.h $(CLASSHDRDIR)/java_awt_Container.h $(CLASSHDRDIR)/java_awt_Dialog.h $(CLASSHDRDIR)/java_awt_Dimension.h $(CLASSHDRDIR)/java_awt_event_ComponentEvent.h $(CLASSHDRDIR)/java_awt_event_FocusEvent.h $(CLASSHDRDIR)/java_awt_Event.h $(CLASSHDRDIR)/java_awt_event_KeyEvent.h $(CLASSHDRDIR)/java_awt_event_MouseEvent.h $(CLASSHDRDIR)/java_awt_event_WindowEvent.h $(CLASSHDRDIR)/java_awt_Font.h $(CLASSHDRDIR)/java_awt_FontMetrics.h $(CLASSHDRDIR)/java_awt_Frame.h $(CLASSHDRDIR)/java_awt_Insets.h $(CLASSHDRDIR)/java_awt_MenuBar.h $(CLASSHDRDIR)/java_awt_MenuComponent.h $(CLASSHDRDIR)/java_awt_Menu.h $(CLASSHDRDIR)/java_awt_MenuItem.h $(CLASSHDRDIR)/java_awt_peer_MenuComponentPeer.h $(CLASSHDRDIR)/java_awt_Window.h $(CLASSHDRDIR)/sun_awt_FontDescriptor.h $(CLASSHDRDIR)/sun_awt_PlatformFont.h $(CLASSHDRDIR)/sun_awt_windows_WCanvasPeer.h $(CLASSHDRDIR)/sun_awt_windows_WComponentPeer.h $(CLASSHDRDIR)/sun_awt_windows_WDialogPeer.h $(CLASSHDRDIR)/sun_awt_windows_WFontMetrics.h $(CLASSHDRDIR)/sun_awt_windows_WFramePeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuBarPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuItemPeer.h $(CLASSHDRDIR)/sun_awt_windows_WMenuPeer.h $(CLASSHDRDIR)/sun_awt_windows_WObjectPeer.h $(CLASSHDRDIR)/sun_awt_windows_WToolkit.h $(CLASSHDRDIR)/sun_awt_windows_WWindowPeer.h ../../../src/share/javavm/export/classfile_constants.h ../../../src/share/javavm/export/jni.h ../../../src/share/javavm/export/jvm.h ../../../src/share/native/common/jlong.h ../../../src/share/native/common/jni_util.h ../../../src/share/native/sun/awt/debug/debug_assert.h ../../../src/share/native/sun/awt/debug/debug_mem.h ../../../src/share/native/sun/awt/debug/debug_trace.h ../../../src/share/native/sun/awt/debug/debug_util.h ../../../src/share/native/sun/awt/image/cvutils/img_globals.h ../../../src/share/native/sun/java2d/SurfaceData.h ../../../src/share/native/sun/java2d/Trace.h ../../../src/windows/javavm/export/jni_md.h ../../../src/windows/javavm/export/jvm_md.h ../../../src/windows/native/common/jlong_md.h ../../../src/windows/native/sun/java2d/windows/GDIWindowSurfaceData.h ../../../src/windows/native/sun/windows/alloc.h ../../../src/windows/native/sun/windows/awt_BitmapUtil.h ../../../src/windows/native/sun/windows/awt_Brush.h ../../../src/windows/native/sun/windows/awt_Canvas.h ../../../src/windows/native/sun/windows/awt_Component.h ../../../src/windows/native/sun/windows/awt_Container.h ../../../src/windows/native/sun/windows/awt_Debug.h ../../../src/windows/native/sun/windows/awt_Dialog.h ../../../src/windows/native/sun/windows/awt_Font.h ../../../src/windows/native/sun/windows/awt_Frame.h ../../../src/windows/native/sun/windows/awt_GDIObject.h ../../../src/windows/native/sun/windows/awt.h ../../../src/windows/native/sun/windows/awt_IconCursor.h ../../../src/windows/native/sun/windows/awt_Insets.h ../../../src/windows/native/sun/windows/awt_MenuBar.h ../../../src/windows/native/sun/windows/awt_Menu.h ../../../src/windows/native/sun/windows/awt_MenuItem.h ../../../src/windows/native/sun/windows/awtmsg.h ../../../src/windows/native/sun/windows/awt_Object.h ../../../src/windows/native/sun/windows/awt_Palette.h ../../../src/windows/native/sun/windows/awt_Panel.h ../../../src/windows/native/sun/windows/awt_Pen.h ../../../src/windows/native/sun/windows/awt_Toolkit.h ../../../src/windows/native/sun/windows/awt_Win32GraphicsDevice.h ../../../src/windows/native/sun/windows/awt_Window.h ../../../src/windows/native/sun/windows/colordata.h ../../../src/windows/native/sun/windows/ComCtl32Util.h ../../../src/windows/native/sun/windows/Devices.h ../../../src/windows/native/sun/windows/GDIHashtable.h ../../../src/windows/native/sun/windows/Hashtable.h ../../../src/windows/native/sun/windows/ObjectList.h ../../../src/windows/native/sun/windows/stdhdrs.h
......
......@@ -477,11 +477,11 @@ SUNWprivate_1.1 {
X11SurfaceData_GetOps;
getDefaultConfig;
Java_sun_font_FontManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap;
Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_awt_X11FontManager_getFontPath;
Java_sun_awt_X11FontManager_setNativeFontPath;
Java_sun_font_SunFontManager_populateFontFileNameMap;
# CDE private entry point
Java_sun_awt_motif_XsessionWMcommand;
......
......@@ -533,11 +533,11 @@ SUNWprivate_1.1 {
X11SurfaceData_GetOps;
getDefaultConfig;
Java_sun_font_FontManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap;
Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_awt_X11FontManager_getFontPath;
Java_sun_awt_X11FontManager_setNativeFontPath;
Java_sun_font_SunFontManager_populateFontFileNameMap;
# CDE private entry point
Java_sun_awt_motif_XsessionWMcommand;
......
......@@ -33,12 +33,7 @@ SUNWprivate_1.1 {
isNullScalerContext;
Java_sun_font_NullFontScaler_getNullScalerContext;
Java_sun_font_NullFontScaler_getGlyphImage;
Java_sun_font_FontManager_getPlatformFontVar;
Java_sun_font_FontManager_initIDs;
Java_sun_font_FontManager_getFont2D;
Java_sun_font_FontManager_setFont2D;
Java_sun_font_FontManager_isCreatedFont;
Java_sun_font_FontManager_setCreatedFont;
Java_sun_font_SunFontManager_initIDs;
Java_sun_font_StrikeCache_getGlyphCacheDescription;
Java_sun_font_StrikeCache_freeIntPointer;
Java_sun_font_StrikeCache_freeLongPointer;
......
......@@ -35,12 +35,7 @@ SUNWprivate_1.1 {
isNullScalerContext;
Java_sun_font_NullFontScaler_getNullScalerContext;
Java_sun_font_NullFontScaler_getGlyphImage;
Java_sun_font_FontManager_getPlatformFontVar;
Java_sun_font_FontManager_initIDs;
Java_sun_font_FontManager_getFont2D;
Java_sun_font_FontManager_setFont2D;
Java_sun_font_FontManager_isCreatedFont;
Java_sun_font_FontManager_setCreatedFont;
Java_sun_font_SunFontManager_initIDs;
Java_sun_font_StrikeCache_getGlyphCacheDescription;
Java_sun_font_StrikeCache_freeIntPointer;
Java_sun_font_StrikeCache_freeLongPointer;
......
......@@ -59,12 +59,10 @@ SUNWprivate_1.1 {
X11SurfaceData_GetOps;
Java_java_awt_Font_initIDs;
Java_sun_font_FontManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigVersion;
Java_sun_font_FontManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap;
Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_font_FontConfigManager_getFontConfigVersion;
Java_sun_awt_X11FontManager_getFontPath;
Java_sun_awt_FontDescriptor_initIDs;
Java_sun_awt_PlatformFont_initIDs;
......
......@@ -182,12 +182,11 @@ SUNWprivate_1.1 {
Java_java_awt_ScrollPane_initIDs;
Java_java_awt_TextField_initIDs;
Java_java_awt_TrayIcon_initIDs;
Java_sun_font_FontManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigVersion;
Java_sun_font_FontManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap;
Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_font_FontConfigManager_getFontConfigVersion;
Java_sun_awt_X11FontManager_getFontPath;
Java_sun_font_X11FontManager_setNativeFontPath;
Java_sun_awt_X11GraphicsEnvironment_initDisplay;
Java_sun_awt_X11GraphicsEnvironment_initGLX;
Java_sun_awt_X11GraphicsEnvironment_checkShmExt;
......
......@@ -29,7 +29,9 @@ import java.awt.*;
import java.awt.geom.AffineTransform;
import javax.swing.plaf.FontUIResource;
import java.util.StringTokenizer;
import sun.font.FontManager;
import sun.font.FontConfigManager;
import sun.font.FontUtilities;
/**
* @author Shannon Hickey
......@@ -193,13 +195,13 @@ class PangoFonts {
}
String fcFamilyLC = family.toLowerCase();
if (FontManager.mapFcName(fcFamilyLC) != null) {
if (FontUtilities.mapFcName(fcFamilyLC) != null) {
/* family is a Fc/Pango logical font which we need to expand. */
return FontManager.getFontConfigFUIR(fcFamilyLC, style, size);
return FontUtilities.getFontConfigFUIR(fcFamilyLC, style, size);
} else {
/* It's a physical font which we will create with a fallback */
Font font = new FontUIResource(family, style, size);
return FontManager.getCompositeFontUIResource(font);
return FontUtilities.getCompositeFontUIResource(font);
}
}
......
......@@ -63,7 +63,7 @@ import java.security.AccessController;
import sun.awt.SunToolkit;
import sun.awt.OSInfo;
import sun.awt.shell.ShellFolder;
import sun.font.FontManager;
import sun.font.FontUtilities;
import sun.security.action.GetPropertyAction;
import sun.swing.DefaultLayoutStyle;
......@@ -2347,13 +2347,14 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
font.getStyle(), size);
}
}
if (FontManager.fontSupportsDefaultEncoding(font)) {
if (FontUtilities.fontSupportsDefaultEncoding(font)) {
if (!(font instanceof UIResource)) {
font = new FontUIResource(font);
}
}
else {
font = FontManager.getCompositeFontUIResource(font);
font = FontUtilities.getCompositeFontUIResource(font);
}
return font;
......
......@@ -74,6 +74,9 @@ import sun.awt.CausedFocusEvent;
import sun.awt.EmbeddedFrame;
import sun.awt.dnd.SunDropTargetEvent;
import sun.awt.im.CompositionArea;
import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.SunFontManager;
import sun.java2d.SunGraphics2D;
import sun.java2d.pipe.Region;
import sun.awt.image.VSyncedBSManager;
......@@ -2848,8 +2851,12 @@ public abstract class Component implements ImageObserver, MenuContainer,
* @since JDK1.0
*/
public FontMetrics getFontMetrics(Font font) {
// REMIND: PlatformFont flag should be obsolete soon...
if (sun.font.FontManager.usePlatformFontMetrics()) {
// This is an unsupported hack, but left in for a customer.
// Do not remove.
FontManager fm = FontManagerFactory.getInstance();
if (fm instanceof SunFontManager
&& ((SunFontManager) fm).usePlatformFontMetrics()) {
if (peer != null &&
!(peer instanceof LightweightPeer)) {
return peer.getFontMetrics(font);
......
......@@ -30,7 +30,6 @@ import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics;
import java.awt.font.TextAttribute;
import java.awt.font.TextLayout;
import java.awt.font.TransformAttribute;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
......@@ -42,21 +41,21 @@ import java.security.PrivilegedExceptionAction;
import java.text.AttributedCharacterIterator.Attribute;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.HashMap;
import java.util.Hashtable;
import java.util.Locale;
import java.util.Map;
import sun.font.StandardGlyphVector;
import sun.java2d.FontSupport;
import sun.font.AttributeMap;
import sun.font.AttributeValues;
import sun.font.EAttribute;
import sun.font.CompositeFont;
import sun.font.CreatedFontTracker;
import sun.font.Font2D;
import sun.font.Font2DHandle;
import sun.font.FontAccess;
import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
import sun.font.GlyphLayout;
import sun.font.FontLineMetrics;
import sun.font.CoreMetrics;
......@@ -223,10 +222,29 @@ import static sun.font.EAttribute.*;
*/
public class Font implements java.io.Serializable
{
private static class FontAccessImpl extends FontAccess {
public Font2D getFont2D(Font font) {
return font.getFont2D();
}
public void setFont2D(Font font, Font2DHandle handle) {
font.font2DHandle = handle;
}
public void setCreatedFont(Font font) {
font.createdFont = true;
}
public boolean isCreatedFont(Font font) {
return font.createdFont;
}
}
static {
/* ensure that the necessary native libraries are loaded */
Toolkit.loadLibraries();
initIDs();
FontAccess.setFontAccess(new FontAccessImpl());
}
/**
......@@ -464,15 +482,16 @@ public class Font implements java.io.Serializable
}
private Font2D getFont2D() {
if (FontManager.usingPerAppContextComposites &&
FontManager fm = FontManagerFactory.getInstance();
if (fm.usingPerAppContextComposites() &&
font2DHandle != null &&
font2DHandle.font2D instanceof CompositeFont &&
((CompositeFont)(font2DHandle.font2D)).isStdComposite()) {
return FontManager.findFont2D(name, style,
return fm.findFont2D(name, style,
FontManager.LOGICAL_FALLBACK);
} else if (font2DHandle == null) {
font2DHandle =
FontManager.findFont2D(name, style,
fm.findFont2D(name, style,
FontManager.LOGICAL_FALLBACK).handle;
}
/* Do not cache the de-referenced font2D. It must be explicitly
......@@ -570,8 +589,8 @@ public class Font implements java.io.Serializable
if (created) {
if (handle.font2D instanceof CompositeFont &&
handle.font2D.getStyle() != style) {
this.font2DHandle =
FontManager.getNewComposite(null, style, handle);
FontManager fm = FontManagerFactory.getInstance();
this.font2DHandle = fm.getNewComposite(null, style, handle);
} else {
this.font2DHandle = handle;
}
......@@ -586,9 +605,9 @@ public class Font implements java.io.Serializable
/* Font2D instances created by this method track their font file
* so that when the Font2D is GC'd it can also remove the file.
*/
this.font2DHandle =
FontManager.createFont2D(fontFile, fontFormat,
isCopy, tracker).handle;
FontManager fm = FontManagerFactory.getInstance();
this.font2DHandle = fm.createFont2D(fontFile, fontFormat, isCopy,
tracker).handle;
this.name = this.font2DHandle.font2D.getFontName(Locale.getDefault());
this.style = Font.PLAIN;
this.size = 1;
......@@ -640,8 +659,9 @@ public class Font implements java.io.Serializable
}
if (handle.font2D instanceof CompositeFont) {
if (newStyle != -1 || newName != null) {
FontManager fm = FontManagerFactory.getInstance();
this.font2DHandle =
FontManager.getNewComposite(newName, newStyle, handle);
fm.getNewComposite(newName, newStyle, handle);
}
} else if (newName != null) {
this.createdFont = false;
......@@ -852,7 +872,6 @@ public class Font implements java.io.Serializable
throw new IllegalArgumentException ("font format not recognized");
}
boolean copiedFontData = false;
try {
final File tFile = AccessController.doPrivileged(
new PrivilegedExceptionAction<File>() {
......@@ -2320,7 +2339,7 @@ public class Font implements java.io.Serializable
(values.getKerning() == 0 && values.getLigatures() == 0 &&
values.getBaselineTransform() == null);
if (simple) {
simple = !FontManager.isComplexText(chars, beginIndex, limit);
simple = ! FontUtilities.isComplexText(chars, beginIndex, limit);
}
if (simple) {
......
......@@ -29,6 +29,9 @@ package java.awt;
import java.awt.image.BufferedImage;
import java.security.AccessController;
import java.util.Locale;
import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.java2d.HeadlessGraphicsEnvironment;
import sun.java2d.SunGraphicsEnvironment;
import sun.security.action.GetPropertyAction;
......@@ -353,7 +356,8 @@ public abstract class GraphicsEnvironment {
if (font == null) {
throw new NullPointerException("font cannot be null.");
}
return sun.font.FontManager.registerFont(font);
FontManager fm = FontManagerFactory.getInstance();
return fm.registerFont(font);
}
/**
......@@ -377,10 +381,8 @@ public abstract class GraphicsEnvironment {
* @since 1.5
*/
public void preferLocaleFonts() {
if (!(this instanceof SunGraphicsEnvironment)) {
return;
}
sun.font.FontManager.preferLocaleFonts();
FontManager fm = FontManagerFactory.getInstance();
fm.preferLocaleFonts();
}
/**
......@@ -400,10 +402,8 @@ public abstract class GraphicsEnvironment {
* @since 1.5
*/
public void preferProportionalFonts() {
if (!(this instanceof SunGraphicsEnvironment)) {
return;
}
sun.font.FontManager.preferProportionalFonts();
FontManager fm = FontManagerFactory.getInstance();
fm.preferProportionalFonts();
}
/**
......
......@@ -26,7 +26,7 @@ package ${PACKAGE};
import javax.swing.Painter;
import java.awt.Graphics;
import sun.font.FontManager;
import sun.font.FontUtilities;
import sun.swing.plaf.synth.DefaultSynthStyle;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
......@@ -138,7 +138,7 @@ final class ${LAF_NAME}Defaults {
//regions and their states that this class will use for later lookup.
//Additional regions can be registered later by 3rd party components.
//These are simply the default registrations.
defaultFont = FontManager.getFontConfigFUIR("sans", Font.PLAIN, 12);
defaultFont = FontUtilities.getFontConfigFUIR("sans", Font.PLAIN, 12);
defaultStyle = new DefaultSynthStyle();
defaultStyle.setFont(defaultFont);
......
......@@ -35,7 +35,7 @@ import javax.swing.event.ChangeEvent;
import java.lang.ref.WeakReference;
import java.util.WeakHashMap;
import sun.font.FontManager;
import sun.font.FontUtilities;
/**
* A pool of styles and their associated resources. This class determines
......@@ -263,8 +263,8 @@ public class StyleContext implements Serializable, AbstractDocument.AttributeCon
if (f == null) {
f = new Font(family, style, size);
}
if (! FontManager.fontSupportsDefaultEncoding(f)) {
f = FontManager.getCompositeFontUIResource(f);
if (! FontUtilities.fontSupportsDefaultEncoding(f)) {
f = FontUtilities.getCompositeFontUIResource(f);
}
FontKey key = new FontKey(family, style, size);
fontTable.put(key, f);
......
......@@ -30,7 +30,6 @@ import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
......@@ -49,7 +48,9 @@ import java.util.Properties;
import java.util.Set;
import java.util.Vector;
import sun.font.CompositeFontDescriptor;
import sun.java2d.SunGraphicsEnvironment;
import sun.font.SunFontManager;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
/**
* Provides the definitions of the five logical fonts: Serif, SansSerif,
......@@ -68,7 +69,7 @@ public abstract class FontConfiguration {
private static Logger logger;
protected static boolean isProperties = true;
protected SunGraphicsEnvironment environment;
protected SunFontManager fontManager;
protected boolean preferLocaleFonts;
protected boolean preferPropFonts;
......@@ -80,11 +81,11 @@ public abstract class FontConfiguration {
/* A default FontConfiguration must be created before an alternate
* one to ensure proper static initialisation takes place.
*/
public FontConfiguration(SunGraphicsEnvironment environment) {
if (SunGraphicsEnvironment.debugFonts && logger == null) {
public FontConfiguration(SunFontManager fm) {
if (FontUtilities.debugFonts() && logger == null) {
logger = Logger.getLogger("sun.awt.FontConfiguration");
}
this.environment = environment;
fontManager = fm;
setOsNameAndVersion(); /* static initialization */
setEncoding(); /* static initialization */
/* Separating out the file location from the rest of the
......@@ -106,10 +107,10 @@ public abstract class FontConfiguration {
return true;
}
public FontConfiguration(SunGraphicsEnvironment environment,
public FontConfiguration(SunFontManager fm,
boolean preferLocaleFonts,
boolean preferPropFonts) {
this.environment = environment;
fontManager = fm;
this.preferLocaleFonts = preferLocaleFonts;
this.preferPropFonts = preferPropFonts;
/* fontConfig should be initialised by default constructor, and
......@@ -198,17 +199,17 @@ public abstract class FontConfiguration {
loadBinary(in);
}
in.close();
if (SunGraphicsEnvironment.debugFonts) {
if (FontUtilities.debugFonts()) {
logger.config("Read logical font configuration from " + f);
}
} catch (IOException e) {
if (SunGraphicsEnvironment.debugFonts) {
if (FontUtilities.debugFonts()) {
logger.config("Failed to read logical font configuration from " + f);
}
}
}
String version = getVersion();
if (!"1".equals(version) && SunGraphicsEnvironment.debugFonts) {
if (!"1".equals(version) && FontUtilities.debugFonts()) {
logger.config("Unsupported fontconfig version: " + version);
}
}
......@@ -219,8 +220,8 @@ public abstract class FontConfiguration {
File fallbackDir = new File(fallbackDirName);
if (fallbackDir.exists() && fallbackDir.isDirectory()) {
String[] ttfs = fallbackDir.list(SunGraphicsEnvironment.ttFilter);
String[] t1s = fallbackDir.list(SunGraphicsEnvironment.t1Filter);
String[] ttfs = fallbackDir.list(fontManager.getTrueTypeFilter());
String[] t1s = fallbackDir.list(fontManager.getType1Filter());
int numTTFs = (ttfs == null) ? 0 : ttfs.length;
int numT1s = (t1s == null) ? 0 : t1s.length;
int len = numTTFs + numT1s;
......@@ -236,7 +237,7 @@ public abstract class FontConfiguration {
installedFallbackFontFiles[i+numTTFs] =
fallbackDir + File.separator + t1s[i];
}
environment.registerFontsInDir(fallbackDirName);
fontManager.registerFontsInDir(fallbackDirName);
}
}
......@@ -465,7 +466,7 @@ public abstract class FontConfiguration {
nameIDs[index] = getComponentFontID(coreScripts[index],
fontIndex, styleIndex);
if (preferLocaleFonts && localeMap != null &&
sun.font.FontManager.usingAlternateFontforJALocales()) {
fontManager.usingAlternateFontforJALocales()) {
nameIDs[index] = remapLocaleMap(fontIndex, styleIndex,
coreScripts[index], nameIDs[index]);
}
......@@ -480,7 +481,7 @@ public abstract class FontConfiguration {
short id = getComponentFontID(fallbackScripts[i],
fontIndex, styleIndex);
if (preferLocaleFonts && localeMap != null &&
sun.font.FontManager.usingAlternateFontforJALocales()) {
fontManager.usingAlternateFontforJALocales()) {
id = remapLocaleMap(fontIndex, styleIndex, fallbackScripts[i], id);
}
if (preferPropFonts) {
......@@ -973,8 +974,8 @@ public abstract class FontConfiguration {
public CompositeFontDescriptor[] get2DCompositeFontInfo() {
CompositeFontDescriptor[] result =
new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES];
String defaultFontFile = environment.getDefaultFontFile();
String defaultFontFaceName = environment.getDefaultFontFaceName();
String defaultFontFile = fontManager.getDefaultFontFile();
String defaultFontFaceName = fontManager.getDefaultFontFaceName();
for (int fontIndex = 0; fontIndex < NUM_FONTS; fontIndex++) {
String fontName = publicFontNames[fontIndex];
......@@ -1121,7 +1122,7 @@ public abstract class FontConfiguration {
*/
HashMap<String, Boolean> existsMap;
public boolean needToSearchForFile(String fileName) {
if (!environment.isLinux) {
if (!FontUtilities.isLinux) {
return false;
} else if (existsMap == null) {
existsMap = new HashMap<String, Boolean>();
......@@ -1139,7 +1140,7 @@ public abstract class FontConfiguration {
} else {
exists = Boolean.valueOf((new File(fileName)).exists());
existsMap.put(fileName, exists);
if (SunGraphicsEnvironment.debugFonts &&
if (FontUtilities.debugFonts() &&
exists == Boolean.FALSE) {
logger.warning("Couldn't locate font file " + fileName);
}
......@@ -2067,7 +2068,8 @@ public abstract class FontConfiguration {
throw new Exception();
}
} catch (Exception e) {
if (SunGraphicsEnvironment.debugFonts && logger != null) {
if (FontUtilities.debugFonts() &&
logger != null) {
logger.config("Failed parsing " + key +
" property of font configuration.");
......
......@@ -232,7 +232,7 @@ abstract class CMap {
* fonts are using gb2312 encoding, have to use this
* workaround to make Solaris zh_CN locale work. -sherman
*/
if (FontManager.isSolaris && font.platName != null &&
if (FontUtilities.isSolaris && font.platName != null &&
(font.platName.startsWith(
"/usr/openwin/lib/locale/zh_CN.EUC/X11/fonts/TrueType") ||
font.platName.startsWith(
......@@ -407,8 +407,8 @@ abstract class CMap {
subtableLength = buffer.getInt(offset+4) & INTMASK;
}
if (offset+subtableLength > buffer.capacity()) {
if (FontManager.logging) {
FontManager.logger.warning("Cmap subtable overflows buffer.");
if (FontUtilities.isLogging()) {
FontUtilities.getLogger().warning("Cmap subtable overflows buffer.");
}
}
switch (subtableFormat) {
......
......@@ -60,7 +60,7 @@ public final class CompositeFont extends Font2D {
public CompositeFont(String name, String[] compFileNames,
String[] compNames, int metricsSlotCnt,
int[] exclRanges, int[] maxIndexes,
boolean defer) {
boolean defer, SunFontManager fm) {
handle = new Font2DHandle(this);
fullName = name;
......@@ -85,13 +85,13 @@ public final class CompositeFont extends Font2D {
* The caller could be responsible for this, but for now it seems
* better that it is handled internally to the CompositeFont class.
*/
if (FontManager.eudcFont != null) {
if (fm.getEUDCFont() != null) {
numSlots++;
if (componentNames != null) {
componentNames = new String[numSlots];
System.arraycopy(compNames, 0, componentNames, 0, numSlots-1);
componentNames[numSlots-1] =
FontManager.eudcFont.getFontName(null);
fm.getEUDCFont().getFontName(null);
}
if (componentFileNames != null) {
componentFileNames = new String[numSlots];
......@@ -99,7 +99,7 @@ public final class CompositeFont extends Font2D {
componentFileNames, 0, numSlots-1);
}
components = new PhysicalFont[numSlots];
components[numSlots-1] = FontManager.eudcFont;
components[numSlots-1] = fm.getEUDCFont();
deferredInitialisation = new boolean[numSlots];
if (defer) {
for (int i=0; i<numSlots-1; i++) {
......@@ -165,7 +165,7 @@ public final class CompositeFont extends Font2D {
* it is harmless that we do not know a slot is already initialised
* and just need to discover that and mark it so.
*/
synchronized (FontManager.class) {
synchronized (FontManagerFactory.getInstance()) {
components = new PhysicalFont[numSlots];
components[0] = physFont;
System.arraycopy(compFont.components, 0,
......@@ -235,7 +235,8 @@ public final class CompositeFont extends Font2D {
* This global lock is rarely likely to be an issue as there
* are only going to be a few calls into this code.
*/
synchronized (FontManager.class) {
SunFontManager fm = SunFontManager.getInstance();
synchronized (fm) {
if (componentNames == null) {
componentNames = new String[numSlots];
}
......@@ -251,20 +252,19 @@ public final class CompositeFont extends Font2D {
*/
if (componentFileNames != null &&
componentFileNames[slot] != null) {
components[slot] = FontManager.initialiseDeferredFont
(componentFileNames[slot]);
components[slot] =
fm.initialiseDeferredFont(componentFileNames[slot]);
}
if (components[slot] == null) {
components[slot] = FontManager.getDefaultPhysicalFont();
components[slot] = fm.getDefaultPhysicalFont();
}
String name = components[slot].getFontName(null);
if (componentNames[slot] == null) {
componentNames[slot] = name;
} else if (!componentNames[slot].equalsIgnoreCase(name)) {
components[slot] =
(PhysicalFont)
FontManager.findFont2D(componentNames[slot],
(PhysicalFont) fm.findFont2D(componentNames[slot],
style,
FontManager.PHYSICAL_FALLBACK);
}
......@@ -333,21 +333,22 @@ public final class CompositeFont extends Font2D {
if (deferredInitialisation[slot]) {
doDeferredInitialisation(slot);
}
SunFontManager fm = SunFontManager.getInstance();
try {
PhysicalFont font = components[slot];
if (font == null) {
try {
font = (PhysicalFont)FontManager.
font = (PhysicalFont) fm.
findFont2D(componentNames[slot], style,
FontManager.PHYSICAL_FALLBACK);
components[slot] = font;
} catch (ClassCastException cce) {
font = FontManager.getDefaultPhysicalFont();
font = fm.getDefaultPhysicalFont();
}
}
return font;
} catch (Exception e) {
return FontManager.getDefaultPhysicalFont();
return fm.getDefaultPhysicalFont();
}
}
......
......@@ -211,10 +211,10 @@ public final class CompositeGlyphMapper extends CharToGlyphMapper {
glyphs[i] = convertToGlyph(code);
}
if (code < FontManager.MIN_LAYOUT_CHARCODE) {
if (code < FontUtilities.MIN_LAYOUT_CHARCODE) {
continue;
}
else if (FontManager.isComplexCharCode(code)) {
else if (FontUtilities.isComplexCharCode(code)) {
return true;
}
else if (code >= 0x10000) {
......
......@@ -158,7 +158,8 @@ public abstract class FileFont extends PhysicalFont {
* rare maybe it is not worth doing this last part.
*/
synchronized void deregisterFontAndClearStrikeCache() {
FontManager.deRegisterBadFont(this);
SunFontManager fm = SunFontManager.getInstance();
fm.deRegisterBadFont(this);
for (Reference strikeRef : strikeCache.values()) {
if (strikeRef != null) {
......@@ -172,14 +173,14 @@ public abstract class FileFont extends PhysicalFont {
}
}
scaler.dispose();
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
}
StrikeMetrics getFontMetrics(long pScalerContext) {
try {
return getScaler().getFontMetrics(pScalerContext);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
return getFontMetrics(pScalerContext);
}
}
......@@ -188,7 +189,7 @@ public abstract class FileFont extends PhysicalFont {
try {
return getScaler().getGlyphAdvance(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
return getGlyphAdvance(pScalerContext, glyphCode);
}
}
......@@ -197,7 +198,7 @@ public abstract class FileFont extends PhysicalFont {
try {
getScaler().getGlyphMetrics(pScalerContext, glyphCode, metrics);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
getGlyphMetrics(pScalerContext, glyphCode, metrics);
}
}
......@@ -206,7 +207,7 @@ public abstract class FileFont extends PhysicalFont {
try {
return getScaler().getGlyphImage(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
return getGlyphImage(pScalerContext, glyphCode);
}
}
......@@ -215,7 +216,7 @@ public abstract class FileFont extends PhysicalFont {
try {
return getScaler().getGlyphOutlineBounds(pScalerContext, glyphCode);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
return getGlyphOutlineBounds(pScalerContext, glyphCode);
}
}
......@@ -224,7 +225,7 @@ public abstract class FileFont extends PhysicalFont {
try {
return getScaler().getGlyphOutline(pScalerContext, glyphCode, x, y);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
return getGlyphOutline(pScalerContext, glyphCode, x, y);
}
}
......@@ -233,7 +234,7 @@ public abstract class FileFont extends PhysicalFont {
try {
return getScaler().getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
} catch (FontScalerException fe) {
scaler = FontManager.getNullScaler();
scaler = FontScaler.getNullScaler();
return getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
}
}
......@@ -275,7 +276,8 @@ public abstract class FileFont extends PhysicalFont {
*/
fontFile.delete();
/* remove from delete on exit hook list : */
FontManager.tmpFontFiles.remove(fontFile);
// FIXME: still need to be refactored
SunFontManager.getInstance().tmpFontFiles.remove(fontFile);
} catch (Exception e) {
}
}
......
......@@ -114,7 +114,7 @@ public class FileFontStrike extends PhysicalStrike {
private static native boolean initNative();
private static boolean isXPorLater = false;
static {
if (FontManager.isWindows && !FontManager.useT2K &&
if (FontUtilities.isWindows && !FontUtilities.useT2K &&
!GraphicsEnvironment.isHeadless()) {
isXPorLater = initNative();
}
......@@ -201,7 +201,7 @@ public class FileFontStrike extends PhysicalStrike {
this.disposer = new FontStrikeDisposer(fileFont, desc);
initGlyphCache();
pScalerContext = NullFontScaler.getNullScalerContext();
FontManager.deRegisterBadFont(fileFont);
SunFontManager.getInstance().deRegisterBadFont(fileFont);
return;
}
/* First, see if native code should be used to create the glyph.
......@@ -211,8 +211,8 @@ public class FileFontStrike extends PhysicalStrike {
* except that the advance returned by GDI is always overwritten by
* the JDK rasteriser supplied one (see getGlyphImageFromWindows()).
*/
if (FontManager.isWindows && isXPorLater &&
!FontManager.useT2K &&
if (FontUtilities.isWindows && isXPorLater &&
!FontUtilities.useT2K &&
!GraphicsEnvironment.isHeadless() &&
!fileFont.useJavaRasterizer &&
(desc.aaHint == INTVAL_TEXT_ANTIALIAS_LCD_HRGB ||
......@@ -241,8 +241,8 @@ public class FileFontStrike extends PhysicalStrike {
}
}
}
if (FontManager.logging && FontManager.isWindows) {
FontManager.logger.info
if (FontUtilities.isLogging() && FontUtilities.isWindows) {
FontUtilities.getLogger().info
("Strike for " + fileFont + " at size = " + intPtSize +
" use natives = " + useNatives +
" useJavaRasteriser = " + fileFont.useJavaRasterizer +
......@@ -298,7 +298,7 @@ public class FileFontStrike extends PhysicalStrike {
}
long getGlyphImageFromNative(int glyphCode) {
if (FontManager.isWindows) {
if (FontUtilities.isWindows) {
return getGlyphImageFromWindows(glyphCode);
} else {
return getGlyphImageFromX11(glyphCode);
......@@ -366,8 +366,8 @@ public class FileFontStrike extends PhysicalStrike {
} else {
if (useNatives) {
glyphPtr = getGlyphImageFromNative(glyphCode);
if (glyphPtr == 0L && FontManager.logging) {
FontManager.logger.info
if (glyphPtr == 0L && FontUtilities.isLogging()) {
FontUtilities.getLogger().info
("Strike for " + fileFont +
" at size = " + intPtSize +
" couldn't get native glyph for code = " + glyphCode);
......@@ -528,7 +528,7 @@ public class FileFontStrike extends PhysicalStrike {
if (segmentedCache) {
int numSegments = (numGlyphs + SEGSIZE-1)/SEGSIZE;
if (FontManager.longAddresses) {
if (longAddresses) {
glyphCacheFormat = SEGLONGARRAY;
segLongGlyphImages = new long[numSegments][];
this.disposer.segLongGlyphImages = segLongGlyphImages;
......@@ -538,7 +538,7 @@ public class FileFontStrike extends PhysicalStrike {
this.disposer.segIntGlyphImages = segIntGlyphImages;
}
} else {
if (FontManager.longAddresses) {
if (longAddresses) {
glyphCacheFormat = LONGARRAY;
longGlyphImages = new long[numGlyphs];
this.disposer.longGlyphImages = longGlyphImages;
......
......@@ -261,8 +261,9 @@ public final class FontDesignMetrics extends FontMetrics {
* Note that currently Swing native L&F composites are not handled
* by this code as they use the metrics of the physical anyway.
*/
if (FontManager.maybeUsingAlternateCompositeFonts() &&
FontManager.getFont2D(font) instanceof CompositeFont) {
SunFontManager fm = SunFontManager.getInstance();
if (fm.maybeUsingAlternateCompositeFonts() &&
FontUtilities.getFont2D(font) instanceof CompositeFont) {
return new FontDesignMetrics(font, frc);
}
......@@ -353,7 +354,7 @@ public final class FontDesignMetrics extends FontMetrics {
private void initMatrixAndMetrics() {
Font2D font2D = FontManager.getFont2D(font);
Font2D font2D = FontUtilities.getFont2D(font);
fontStrike = font2D.getStrike(font, frc);
StrikeMetrics metrics = fontStrike.getFontMetrics();
this.ascent = metrics.getAscent();
......@@ -473,7 +474,7 @@ public final class FontDesignMetrics extends FontMetrics {
char ch = str.charAt(i);
if (ch < 0x100) {
width += getLatinCharWidth(ch);
} else if (FontManager.isNonSimpleChar(ch)) {
} else if (FontUtilities.isNonSimpleChar(ch)) {
width = new TextLayout(str, font, frc).getAdvance();
break;
} else {
......@@ -504,7 +505,7 @@ public final class FontDesignMetrics extends FontMetrics {
char ch = data[i];
if (ch < 0x100) {
width += getLatinCharWidth(ch);
} else if (FontManager.isNonSimpleChar(ch)) {
} else if (FontUtilities.isNonSimpleChar(ch)) {
String str = new String(data, off, len);
width = new TextLayout(str, font, frc).getAdvance();
break;
......
......@@ -107,8 +107,9 @@ public class FontFamily {
public void setFont(Font2D font, int style) {
if (font.getRank() > familyRank) {
if (FontManager.logging) {
FontManager.logger.warning("Rejecting adding " + font +
if (FontUtilities.isLogging()) {
FontUtilities.getLogger()
.warning("Rejecting adding " + font +
" of lower rank " + font.getRank() +
" to family " + this +
" of rank " + familyRank);
......
......@@ -34,7 +34,7 @@ public class FontManagerNativeLibrary {
public Object run() {
/* REMIND do we really have to load awt here? */
System.loadLibrary("awt");
if (SunGraphicsEnvironment.isOpenJDK() &&
if (FontUtilities.isOpenJDK &&
System.getProperty("os.name").startsWith("Windows")) {
/* Ideally fontmanager library should not depend on
particular implementation of the font scaler.
......
......@@ -114,7 +114,7 @@ public final class FontResolver {
for (int i=0; i<getAllFonts().length; i++) {
Font font = allFonts[i];
Font2D font2D = FontManager.getFont2D(font);
Font2D font2D = FontUtilities.getFont2D(font);
if (font2D.hasSupplementaryChars()) {
fonts.add(font);
indices.add(Integer.valueOf(i));
......
......@@ -29,6 +29,9 @@ import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.lang.ref.WeakReference;
import java.lang.reflect.Constructor;
import sun.java2d.Disposer;
import sun.java2d.DisposerRecord;
/* FontScaler is "internal interface" to font rasterizer library.
......@@ -77,6 +80,79 @@ import sun.java2d.DisposerRecord;
* this (and this is probably more important for Type1 fonts).
*/
public abstract class FontScaler implements DisposerRecord {
private static FontScaler nullScaler = null;
private static Constructor<FontScaler> scalerConstructor = null;
//Find preferred font scaler
//
//NB: we can allow property based preferences
// (theoretically logic can be font type specific)
static {
Class scalerClass = null;
Class arglst[] = new Class[] {Font2D.class, int.class,
boolean.class, int.class};
try {
if (FontUtilities.isOpenJDK) {
scalerClass = Class.forName("sun.font.FreetypeFontScaler");
} else {
scalerClass = Class.forName("sun.font.T2KFontScaler");
}
} catch (ClassNotFoundException e) {
scalerClass = NullFontScaler.class;
}
//NB: rewrite using factory? constructor is ugly way
try {
scalerConstructor = scalerClass.getConstructor(arglst);
} catch (NoSuchMethodException e) {
//should not happen
}
}
/* This is the only place to instantiate new FontScaler.
* Therefore this is very convinient place to register
* scaler with Disposer as well as trigger deregistring bad font
* in case when scaler reports this.
*/
public static FontScaler getScaler(Font2D font,
int indexInCollection,
boolean supportsCJK,
int filesize) {
FontScaler scaler = null;
try {
Object args[] = new Object[] {font, indexInCollection,
supportsCJK, filesize};
scaler = scalerConstructor.newInstance(args);
Disposer.addObjectRecord(font, scaler);
} catch (Throwable e) {
scaler = nullScaler;
//if we can not instantiate scaler assume bad font
//NB: technically it could be also because of internal scaler
// error but here we are assuming scaler is ok.
FontManager fm = FontManagerFactory.getInstance();
fm.deRegisterBadFont(font);
}
return scaler;
}
/*
* At the moment it is harmless to create 2 null scalers so, technically,
* syncronized keyword is not needed.
*
* But it is safer to keep it to avoid subtle problems if we will be adding
* checks like whether scaler is null scaler.
*/
public static synchronized FontScaler getNullScaler() {
if (nullScaler == null) {
nullScaler = new NullFontScaler();
}
return nullScaler;
}
protected WeakReference<Font2D> font = null;
protected long nativeScaler = 0; //used by decendants
//that have native state
......
......@@ -79,7 +79,7 @@ class FreetypeFontScaler extends FontScaler {
pScalerContext,
nativeScaler);
}
return FontManager.getNullScaler().getFontMetrics(0L);
return FontScaler.getNullScaler().getFontMetrics(0L);
}
synchronized float getGlyphAdvance(long pScalerContext, int glyphCode)
......@@ -90,7 +90,8 @@ class FreetypeFontScaler extends FontScaler {
nativeScaler,
glyphCode);
}
return FontManager.getNullScaler().getGlyphAdvance(0L, glyphCode);
return FontScaler.getNullScaler().
getGlyphAdvance(0L, glyphCode);
}
synchronized void getGlyphMetrics(long pScalerContext,
......@@ -104,7 +105,8 @@ class FreetypeFontScaler extends FontScaler {
metrics);
return;
}
FontManager.getNullScaler().getGlyphMetrics(0L, glyphCode, metrics);
FontScaler.getNullScaler().
getGlyphMetrics(0L, glyphCode, metrics);
}
synchronized long getGlyphImage(long pScalerContext, int glyphCode)
......@@ -115,7 +117,8 @@ class FreetypeFontScaler extends FontScaler {
nativeScaler,
glyphCode);
}
return FontManager.getNullScaler().getGlyphImage(0L, glyphCode);
return FontScaler.getNullScaler().
getGlyphImage(0L, glyphCode);
}
synchronized Rectangle2D.Float getGlyphOutlineBounds(
......@@ -127,7 +130,8 @@ class FreetypeFontScaler extends FontScaler {
nativeScaler,
glyphCode);
}
return FontManager.getNullScaler().getGlyphOutlineBounds(0L,glyphCode);
return FontScaler.getNullScaler().
getGlyphOutlineBounds(0L,glyphCode);
}
synchronized GeneralPath getGlyphOutline(
......@@ -140,7 +144,8 @@ class FreetypeFontScaler extends FontScaler {
glyphCode,
x, y);
}
return FontManager.getNullScaler().getGlyphOutline(0L, glyphCode, x,y);
return FontScaler.getNullScaler().
getGlyphOutline(0L, glyphCode, x,y);
}
synchronized GeneralPath getGlyphVectorOutline(
......@@ -154,8 +159,8 @@ class FreetypeFontScaler extends FontScaler {
numGlyphs,
x, y);
}
return FontManager.getNullScaler().getGlyphVectorOutline(
0L, glyphs, numGlyphs, x, y);
return FontScaler
.getNullScaler().getGlyphVectorOutline(0L, glyphs, numGlyphs, x, y);
}
synchronized long getLayoutTableCache() throws FontScalerException {
......@@ -173,21 +178,21 @@ class FreetypeFontScaler extends FontScaler {
if (nativeScaler != 0L) {
return getNumGlyphsNative(nativeScaler);
}
return FontManager.getNullScaler().getNumGlyphs();
return FontScaler.getNullScaler().getNumGlyphs();
}
synchronized int getMissingGlyphCode() throws FontScalerException {
if (nativeScaler != 0L) {
return getMissingGlyphCodeNative(nativeScaler);
}
return FontManager.getNullScaler().getMissingGlyphCode();
return FontScaler.getNullScaler().getMissingGlyphCode();
}
synchronized int getGlyphCode(char charCode) throws FontScalerException {
if (nativeScaler != 0L) {
return getGlyphCodeNative(nativeScaler, charCode);
}
return FontManager.getNullScaler().getGlyphCode(charCode);
return FontScaler.getNullScaler().getGlyphCode(charCode);
}
synchronized Point2D.Float getGlyphPoint(long pScalerContext,
......@@ -197,7 +202,7 @@ class FreetypeFontScaler extends FontScaler {
return getGlyphPointNative(font.get(), pScalerContext,
nativeScaler, glyphCode, ptNumber);
}
return FontManager.getNullScaler().getGlyphPoint(
return FontScaler.getNullScaler().getGlyphPoint(
pScalerContext, glyphCode, ptNumber);
}
......
......@@ -259,7 +259,7 @@ public final class GlyphLayout {
*/
int aa =
FontStrikeDesc.getAAHintIntVal(frc.getAntiAliasingHint(),
FontManager.getFont2D(font),
FontUtilities.getFont2D(font),
(int)Math.abs(ptSize));
int fm = FontStrikeDesc.getFMHintIntVal
(frc.getFractionalMetricsHint());
......@@ -407,7 +407,7 @@ public final class GlyphLayout {
int lang = -1; // default for now
Font2D font2D = FontManager.getFont2D(font);
Font2D font2D = FontUtilities.getFont2D(font);
_textRecord.init(text, offset, lim, min, max);
int start = offset;
......
......@@ -36,6 +36,14 @@ import java.util.concurrent.ConcurrentHashMap;
public abstract class PhysicalStrike extends FontStrike {
static final long INTMASK = 0xffffffffL;
static boolean longAddresses;
static {
switch (StrikeCache.nativeAddressSize) {
case 8: longAddresses = true; break;
case 4: longAddresses = false; break;
default: throw new RuntimeException("Unexpected address size");
}
}
private PhysicalFont physicalFont;
protected CharToGlyphMapper mapper;
......
......@@ -197,7 +197,7 @@ public class StandardGlyphVector extends GlyphVector {
// how do we know its a base glyph
// for now, it is if the natural advance of the glyph is non-zero
Font2D f2d = FontManager.getFont2D(font);
Font2D f2d = FontUtilities.getFont2D(font);
FontStrike strike = f2d.getStrike(font, frc);
float[] deltas = { trackPt.x, trackPt.y };
......@@ -1116,7 +1116,7 @@ public class StandardGlyphVector extends GlyphVector {
}
private void initFontData() {
font2D = FontManager.getFont2D(font);
font2D = FontUtilities.getFont2D(font);
float s = font.getSize2D();
if (font.isTransformed()) {
ftx = font.getTransform();
......
此差异已折叠。
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册