提交 e43dcf4d 编写于 作者: R rkennke

6795908: Refactor FontManager

Reviewed-by: prr, igor
上级 09e86cab
# #
# Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved. # Copyright 2000-2009 Sun Microsystems, Inc. All Rights Reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. # DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
# #
# This code is free software; you can redistribute it and/or modify it # 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 # under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation. Sun designates this # published by the Free Software Foundation. Sun designates this
# particular file as subject to the "Classpath" exception as provided # particular file as subject to the "Classpath" exception as provided
# by Sun in the LICENSE file that accompanied this code. # by Sun in the LICENSE file that accompanied this code.
# #
# This code is distributed in the hope that it will be useful, but WITHOUT # This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License # 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 # version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code). # accompanied this code).
# #
# You should have received a copy of the GNU General Public License version # 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, # 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. # Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
# #
# Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, # Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
# CA 95054 USA or visit www.sun.com if you need additional information or # CA 95054 USA or visit www.sun.com if you need additional information or
# have any questions. # have any questions.
# #
# FILES_export definitions for Win32 # FILES_export definitions for Win32
FILES_export = \ FILES_export = \
java/awt/AlphaComposite.java \ java/awt/AlphaComposite.java \
java/awt/MouseInfo.java \ java/awt/MouseInfo.java \
java/awt/Graphics.java \ java/awt/Graphics.java \
java/awt/Color.java \ java/awt/Color.java \
java/awt/Image.java \ java/awt/Image.java \
java/awt/Rectangle.java \ java/awt/Rectangle.java \
java/awt/Event.java \ java/awt/Event.java \
java/awt/Font.java \ java/awt/Font.java \
java/awt/FontMetrics.java \ java/awt/FontMetrics.java \
java/awt/Toolkit.java \ java/awt/Toolkit.java \
java/awt/Component.java \ java/awt/Component.java \
java/awt/Container.java \ java/awt/Container.java \
java/awt/Canvas.java \ java/awt/Canvas.java \
java/awt/Button.java \ java/awt/Button.java \
java/awt/List.java \ java/awt/List.java \
java/awt/Adjustable.java \ java/awt/Adjustable.java \
java/awt/Scrollbar.java \ java/awt/Scrollbar.java \
java/awt/ScrollPane.java \ java/awt/ScrollPane.java \
java/awt/ScrollPaneAdjustable.java \ java/awt/ScrollPaneAdjustable.java \
java/awt/Transparency.java \ java/awt/Transparency.java \
java/awt/Window.java \ java/awt/Window.java \
java/awt/TextField.java \ java/awt/TextField.java \
java/awt/Label.java \ java/awt/Label.java \
java/awt/Choice.java \ java/awt/Choice.java \
java/awt/TextComponent.java \ java/awt/TextComponent.java \
java/awt/TextArea.java \ java/awt/TextArea.java \
java/awt/MenuBar.java \ java/awt/MenuBar.java \
java/awt/Menu.java \ java/awt/Menu.java \
java/awt/Dialog.java \ java/awt/Dialog.java \
java/awt/FileDialog.java \ java/awt/FileDialog.java \
java/awt/MenuItem.java \ java/awt/MenuItem.java \
java/awt/MenuComponent.java \ java/awt/MenuComponent.java \
java/awt/Checkbox.java \ java/awt/Checkbox.java \
java/awt/CheckboxGroup.java \ java/awt/CheckboxGroup.java \
java/awt/CheckboxMenuItem.java \ java/awt/CheckboxMenuItem.java \
java/awt/Frame.java \ java/awt/Frame.java \
java/awt/Insets.java \ java/awt/Insets.java \
java/awt/Cursor.java \ java/awt/Cursor.java \
java/awt/Dimension.java \ java/awt/Dimension.java \
java/awt/PopupMenu.java \ java/awt/PopupMenu.java \
java/awt/AWTEvent.java \ java/awt/AWTEvent.java \
java/awt/AWTException.java \ java/awt/AWTException.java \
java/awt/AWTKeyStroke.java \ java/awt/AWTKeyStroke.java \
java/awt/KeyboardFocusManager.java \ java/awt/KeyboardFocusManager.java \
java/awt/DisplayMode.java \ java/awt/DisplayMode.java \
java/awt/TrayIcon.java \ java/awt/TrayIcon.java \
java/awt/datatransfer/StringSelection.java \ java/awt/datatransfer/StringSelection.java \
java/awt/datatransfer/Transferable.java \ java/awt/datatransfer/Transferable.java \
java/awt/dnd/DnDConstants.java \ java/awt/dnd/DnDConstants.java \
java/awt/event/ActionEvent.java \ java/awt/event/ActionEvent.java \
java/awt/event/AdjustmentEvent.java \ java/awt/event/AdjustmentEvent.java \
java/awt/event/ComponentEvent.java \ java/awt/event/ComponentEvent.java \
java/awt/event/FocusEvent.java \ java/awt/event/FocusEvent.java \
java/awt/event/ItemEvent.java \ java/awt/event/ItemEvent.java \
java/awt/event/InputEvent.java \ java/awt/event/InputEvent.java \
java/awt/event/InvocationEvent.java \ java/awt/event/InvocationEvent.java \
java/awt/event/KeyEvent.java \ java/awt/event/KeyEvent.java \
java/awt/event/MouseEvent.java \ java/awt/event/MouseEvent.java \
java/awt/event/MouseWheelEvent.java \ java/awt/event/MouseWheelEvent.java \
java/awt/event/WindowEvent.java \ java/awt/event/WindowEvent.java \
java/awt/event/InputMethodEvent.java \ java/awt/event/InputMethodEvent.java \
java/awt/im/InputMethodHighlight.java \ java/awt/im/InputMethodHighlight.java \
java/awt/im/spi/InputMethod.java \ java/awt/im/spi/InputMethod.java \
java/awt/font/TextHitInfo.java \ java/awt/font/TextHitInfo.java \
java/text/AttributedCharacterIterator.java \ java/text/AttributedCharacterIterator.java \
java/text/AttributedString.java \ java/text/AttributedString.java \
java/awt/geom/PathIterator.java \ java/awt/geom/PathIterator.java \
java/awt/image/AffineTransformOp.java \ java/awt/image/AffineTransformOp.java \
java/awt/image/ImageConsumer.java \ java/awt/image/ImageConsumer.java \
java/awt/image/ImageObserver.java \ java/awt/image/ImageObserver.java \
java/awt/image/BufferedImage.java \ java/awt/image/BufferedImage.java \
java/awt/image/ColorModel.java \ java/awt/image/ColorModel.java \
java/awt/image/ConvolveOp.java \ java/awt/image/ConvolveOp.java \
java/awt/image/DirectColorModel.java \ java/awt/image/DirectColorModel.java \
java/awt/image/IndexColorModel.java \ java/awt/image/IndexColorModel.java \
java/awt/image/Raster.java \ java/awt/image/Raster.java \
java/awt/color/ColorSpace.java \ java/awt/color/ColorSpace.java \
java/awt/color/ICC_Profile.java \ java/awt/color/ICC_Profile.java \
java/awt/peer/ComponentPeer.java \ java/awt/peer/ComponentPeer.java \
java/awt/peer/MenuComponentPeer.java \ java/awt/peer/MenuComponentPeer.java \
java/io/InputStream.java java/io/InputStream.java
FILES_export2 = \ FILES_export2 = \
sun/awt/im/InputMethodContext.java \ sun/awt/im/InputMethodContext.java \
sun/awt/EmbeddedFrame.java \ sun/awt/EmbeddedFrame.java \
sun/awt/KeyboardFocusManagerPeerImpl.java \ sun/awt/KeyboardFocusManagerPeerImpl.java \
sun/awt/windows/WEmbeddedFrame.java \ sun/awt/windows/WEmbeddedFrame.java \
sun/awt/windows/WEmbeddedFramePeer.java \ sun/awt/windows/WEmbeddedFramePeer.java \
sun/awt/Win32GraphicsEnvironment.java \ sun/awt/Win32FontManager.java \
sun/awt/Win32GraphicsDevice.java \ sun/awt/Win32GraphicsEnvironment.java \
sun/awt/Win32GraphicsConfig.java \ sun/awt/Win32GraphicsDevice.java \
sun/java2d/SunGraphicsEnvironment.java \ sun/awt/Win32GraphicsConfig.java \
sun/java2d/SunGraphics2D.java \ sun/java2d/SunGraphicsEnvironment.java \
sun/java2d/SurfaceData.java \ sun/java2d/SunGraphics2D.java \
sun/awt/image/IntegerComponentRaster.java \ sun/java2d/SurfaceData.java \
sun/awt/image/ImagingLib.java \ sun/awt/image/IntegerComponentRaster.java \
sun/awt/image/BufImgSurfaceData.java \ sun/awt/image/ImagingLib.java \
sun/awt/image/DataBufferNative.java \ sun/awt/image/BufImgSurfaceData.java \
sun/awt/shell/Win32ShellFolder2.java \ sun/awt/image/DataBufferNative.java \
sun/java2d/windows/GDIBlitLoops.java \ sun/awt/shell/Win32ShellFolder2.java \
sun/java2d/windows/GDIRenderer.java \ sun/java2d/windows/GDIBlitLoops.java \
sun/java2d/windows/GDIWindowSurfaceData.java \ sun/java2d/windows/GDIRenderer.java \
sun/java2d/windows/WindowsFlags.java \ sun/java2d/windows/GDIWindowSurfaceData.java \
sun/java2d/loops/Blit.java \ sun/java2d/windows/WindowsFlags.java \
sun/java2d/loops/BlitBg.java \ sun/java2d/loops/Blit.java \
sun/java2d/loops/ScaledBlit.java \ sun/java2d/loops/BlitBg.java \
sun/java2d/loops/FillRect.java \ sun/java2d/loops/ScaledBlit.java \
sun/java2d/loops/FillSpans.java \ sun/java2d/loops/FillRect.java \
sun/java2d/loops/DrawGlyphList.java \ sun/java2d/loops/FillSpans.java \
sun/java2d/loops/DrawGlyphListAA.java \ sun/java2d/loops/DrawGlyphList.java \
sun/java2d/loops/DrawGlyphListLCD.java \ sun/java2d/loops/DrawGlyphListAA.java \
sun/java2d/loops/DrawLine.java \ sun/java2d/loops/DrawGlyphListLCD.java \
sun/java2d/loops/DrawRect.java \ sun/java2d/loops/DrawLine.java \
sun/java2d/loops/DrawPolygons.java \ sun/java2d/loops/DrawRect.java \
sun/java2d/loops/DrawPath.java \ sun/java2d/loops/DrawPolygons.java \
sun/java2d/loops/FillPath.java \ sun/java2d/loops/DrawPath.java \
sun/java2d/loops/MaskBlit.java \ sun/java2d/loops/FillPath.java \
sun/java2d/loops/MaskFill.java \ sun/java2d/loops/MaskBlit.java \
sun/java2d/loops/TransformHelper.java \ sun/java2d/loops/MaskFill.java \
sun/java2d/loops/GraphicsPrimitiveMgr.java \ sun/java2d/loops/TransformHelper.java \
sun/java2d/loops/GraphicsPrimitive.java \ sun/java2d/loops/GraphicsPrimitiveMgr.java \
sun/java2d/cmm/CMSManager.java \ sun/java2d/loops/GraphicsPrimitive.java \
sun/java2d/cmm/PCMM.java \ sun/java2d/cmm/CMSManager.java \
sun/java2d/cmm/ColorTransform.java \ sun/java2d/cmm/PCMM.java \
sun/awt/ScrollPaneWheelScroller.java \ sun/java2d/cmm/ColorTransform.java \
sun/awt/datatransfer/DataTransferer.java \ sun/awt/ScrollPaneWheelScroller.java \
sun/awt/datatransfer/SunClipboard.java \ sun/awt/datatransfer/DataTransferer.java \
sun/awt/dnd/SunDragSourceContextPeer.java \ sun/awt/datatransfer/SunClipboard.java \
sun/awt/windows/WToolkitThreadBlockedHandler.java sun/awt/dnd/SunDragSourceContextPeer.java \
sun/awt/windows/WToolkitThreadBlockedHandler.java
FILES_export3 = \
java/awt/CheckboxMenuItem.java \ FILES_export3 = \
java/awt/Menu.java \ java/awt/CheckboxMenuItem.java \
java/awt/MenuBar.java \ java/awt/Menu.java \
java/awt/MenuComponent.java \ java/awt/MenuBar.java \
java/awt/MenuItem.java \ java/awt/MenuComponent.java \
sun/awt/PlatformFont.java \ java/awt/MenuItem.java \
sun/awt/FontDescriptor.java \ sun/awt/PlatformFont.java \
sun/awt/CharsetString.java \ sun/awt/FontDescriptor.java \
java/awt/image/DataBuffer.java \ sun/awt/CharsetString.java \
sun/awt/image/GifImageDecoder.java \ java/awt/image/DataBuffer.java \
sun/awt/image/ImageRepresentation.java \ sun/awt/image/GifImageDecoder.java \
sun/awt/windows/WCustomCursor.java \ sun/awt/image/ImageRepresentation.java \
sun/awt/windows/WDefaultFontCharset.java \ sun/awt/windows/WCustomCursor.java \
sun/awt/windows/WButtonPeer.java \ sun/awt/windows/WDefaultFontCharset.java \
sun/awt/windows/WCanvasPeer.java \ sun/awt/windows/WButtonPeer.java \
sun/awt/windows/WCheckboxPeer.java \ sun/awt/windows/WCanvasPeer.java \
sun/awt/windows/WCheckboxMenuItemPeer.java \ sun/awt/windows/WCheckboxPeer.java \
sun/awt/windows/WChoicePeer.java \ sun/awt/windows/WCheckboxMenuItemPeer.java \
sun/awt/windows/WClipboard.java \ sun/awt/windows/WChoicePeer.java \
sun/awt/windows/WColor.java \ sun/awt/windows/WClipboard.java \
sun/awt/windows/WDataTransferer.java \ sun/awt/windows/WColor.java \
sun/awt/windows/WDesktopPeer.java \ sun/awt/windows/WDataTransferer.java \
sun/awt/windows/WDesktopProperties.java \ sun/awt/windows/WDesktopPeer.java \
sun/awt/windows/WDialogPeer.java \ sun/awt/windows/WDesktopProperties.java \
sun/awt/windows/WDragSourceContextPeer.java \ sun/awt/windows/WDialogPeer.java \
sun/awt/windows/WDropTargetContextPeer.java \ sun/awt/windows/WDragSourceContextPeer.java \
sun/awt/windows/WFileDialogPeer.java \ sun/awt/windows/WDropTargetContextPeer.java \
sun/awt/windows/WFontPeer.java \ sun/awt/windows/WFileDialogPeer.java \
sun/awt/windows/WFontMetrics.java \ sun/awt/windows/WFontPeer.java \
sun/awt/windows/WFramePeer.java \ sun/awt/windows/WFontMetrics.java \
sun/awt/windows/WGlobalCursorManager.java \ sun/awt/windows/WFramePeer.java \
sun/awt/windows/WInputMethod.java \ sun/awt/windows/WGlobalCursorManager.java \
sun/awt/windows/WInputMethodDescriptor.java \ sun/awt/windows/WInputMethod.java \
sun/awt/windows/WComponentPeer.java \ sun/awt/windows/WInputMethodDescriptor.java \
sun/awt/windows/WLabelPeer.java \ sun/awt/windows/WComponentPeer.java \
sun/awt/windows/WListPeer.java \ sun/awt/windows/WLabelPeer.java \
sun/awt/windows/WMenuBarPeer.java \ sun/awt/windows/WListPeer.java \
sun/awt/windows/WMenuItemPeer.java \ sun/awt/windows/WMenuBarPeer.java \
sun/awt/windows/WMenuPeer.java \ sun/awt/windows/WMenuItemPeer.java \
sun/awt/windows/WObjectPeer.java \ sun/awt/windows/WMenuPeer.java \
sun/awt/windows/WPopupMenuPeer.java \ sun/awt/windows/WObjectPeer.java \
sun/awt/windows/WPrintDialog.java \ sun/awt/windows/WPopupMenuPeer.java \
sun/awt/windows/WPrintDialogPeer.java \ sun/awt/windows/WPrintDialog.java \
sun/awt/windows/WPrinterJob.java \ sun/awt/windows/WPrintDialogPeer.java \
sun/awt/windows/WRobotPeer.java \ sun/awt/windows/WPrinterJob.java \
sun/awt/windows/WScrollbarPeer.java \ sun/awt/windows/WRobotPeer.java \
sun/awt/windows/WScrollPanePeer.java \ sun/awt/windows/WScrollbarPeer.java \
sun/awt/windows/WTextAreaPeer.java \ sun/awt/windows/WScrollPanePeer.java \
sun/awt/windows/WTextComponentPeer.java \ sun/awt/windows/WTextAreaPeer.java \
sun/awt/windows/WTextFieldPeer.java \ sun/awt/windows/WTextComponentPeer.java \
sun/awt/windows/WPanelPeer.java \ sun/awt/windows/WTextFieldPeer.java \
sun/awt/windows/WToolkit.java \ sun/awt/windows/WPanelPeer.java \
sun/awt/windows/WWindowPeer.java \ sun/awt/windows/WToolkit.java \
sun/awt/windows/ThemeReader.java \ sun/awt/windows/WWindowPeer.java \
sun/awt/windows/WBufferStrategy.java \ sun/awt/windows/ThemeReader.java \
sun/awt/windows/WTrayIconPeer.java \ sun/awt/windows/WBufferStrategy.java \
sun/awt/image/ImagingLib.java \ sun/awt/windows/WTrayIconPeer.java \
sun/awt/ExtendedKeyCodes.java \ sun/awt/image/ImagingLib.java \
sun/java2d/pipe/hw/AccelSurface.java \ sun/awt/ExtendedKeyCodes.java \
sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \ sun/java2d/pipe/hw/AccelSurface.java \
sun/java2d/pipe/hw/ContextCapabilities.java \ sun/java2d/pipe/hw/AccelDeviceEventNotifier.java \
sun/java2d/pipe/BufferedContext.java \ sun/java2d/pipe/hw/ContextCapabilities.java \
sun/java2d/pipe/BufferedMaskBlit.java \ sun/java2d/pipe/BufferedContext.java \
sun/java2d/pipe/BufferedOpCodes.java \ sun/java2d/pipe/BufferedMaskBlit.java \
sun/java2d/pipe/BufferedPaints.java \ sun/java2d/pipe/BufferedOpCodes.java \
sun/java2d/pipe/BufferedRenderPipe.java \ sun/java2d/pipe/BufferedPaints.java \
sun/java2d/pipe/BufferedTextPipe.java \ sun/java2d/pipe/BufferedRenderPipe.java \
sun/java2d/pipe/RenderBuffer.java \ sun/java2d/pipe/BufferedTextPipe.java \
sun/java2d/pipe/ShapeSpanIterator.java \ sun/java2d/pipe/RenderBuffer.java \
sun/java2d/pipe/SpanClipRenderer.java \ sun/java2d/pipe/ShapeSpanIterator.java \
sun/java2d/pipe/RegionIterator.java \ sun/java2d/pipe/SpanClipRenderer.java \
sun/java2d/opengl/OGLBlitLoops.java \ sun/java2d/pipe/RegionIterator.java \
sun/java2d/opengl/OGLContext.java \ sun/java2d/opengl/OGLBlitLoops.java \
sun/java2d/opengl/OGLMaskFill.java \ sun/java2d/opengl/OGLContext.java \
sun/java2d/opengl/OGLPaints.java \ sun/java2d/opengl/OGLMaskFill.java \
sun/java2d/opengl/OGLRenderQueue.java \ sun/java2d/opengl/OGLPaints.java \
sun/java2d/opengl/OGLRenderer.java \ sun/java2d/opengl/OGLRenderQueue.java \
sun/java2d/opengl/OGLSurfaceData.java \ sun/java2d/opengl/OGLRenderer.java \
sun/java2d/opengl/OGLTextRenderer.java \ sun/java2d/opengl/OGLSurfaceData.java \
sun/java2d/opengl/WGLGraphicsConfig.java \ sun/java2d/opengl/OGLTextRenderer.java \
sun/java2d/opengl/WGLSurfaceData.java \ sun/java2d/opengl/WGLGraphicsConfig.java \
sun/java2d/d3d/D3DBlitLoops.java \ sun/java2d/opengl/WGLSurfaceData.java \
sun/java2d/d3d/D3DGraphicsDevice.java \ sun/java2d/d3d/D3DBlitLoops.java \
sun/java2d/d3d/D3DSurfaceData.java \ sun/java2d/d3d/D3DGraphicsDevice.java \
sun/java2d/d3d/D3DMaskFill.java \ sun/java2d/d3d/D3DSurfaceData.java \
sun/java2d/d3d/D3DPaints.java \ sun/java2d/d3d/D3DMaskFill.java \
sun/java2d/d3d/D3DRenderQueue.java \ sun/java2d/d3d/D3DPaints.java \
sun/java2d/d3d/D3DRenderer.java \ sun/java2d/d3d/D3DRenderQueue.java \
sun/java2d/d3d/D3DTextRenderer.java \ sun/java2d/d3d/D3DRenderer.java \
sun/java2d/d3d/D3DContext.java sun/java2d/d3d/D3DTextRenderer.java \
sun/java2d/d3d/D3DContext.java
此差异已折叠。
...@@ -477,11 +477,11 @@ SUNWprivate_1.1 { ...@@ -477,11 +477,11 @@ SUNWprivate_1.1 {
X11SurfaceData_GetOps; X11SurfaceData_GetOps;
getDefaultConfig; getDefaultConfig;
Java_sun_font_FontManager_getFontConfig; Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigAASettings; Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontPath; Java_sun_awt_X11FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath; Java_sun_awt_X11FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap; Java_sun_font_SunFontManager_populateFontFileNameMap;
# CDE private entry point # CDE private entry point
Java_sun_awt_motif_XsessionWMcommand; Java_sun_awt_motif_XsessionWMcommand;
......
...@@ -533,11 +533,11 @@ SUNWprivate_1.1 { ...@@ -533,11 +533,11 @@ SUNWprivate_1.1 {
X11SurfaceData_GetOps; X11SurfaceData_GetOps;
getDefaultConfig; getDefaultConfig;
Java_sun_font_FontManager_getFontConfig; Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigAASettings; Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontPath; Java_sun_awt_X11FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath; Java_sun_awt_X11FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap; Java_sun_font_SunFontManager_populateFontFileNameMap;
# CDE private entry point # CDE private entry point
Java_sun_awt_motif_XsessionWMcommand; Java_sun_awt_motif_XsessionWMcommand;
......
...@@ -33,12 +33,7 @@ SUNWprivate_1.1 { ...@@ -33,12 +33,7 @@ SUNWprivate_1.1 {
isNullScalerContext; isNullScalerContext;
Java_sun_font_NullFontScaler_getNullScalerContext; Java_sun_font_NullFontScaler_getNullScalerContext;
Java_sun_font_NullFontScaler_getGlyphImage; Java_sun_font_NullFontScaler_getGlyphImage;
Java_sun_font_FontManager_getPlatformFontVar; Java_sun_font_SunFontManager_initIDs;
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_StrikeCache_getGlyphCacheDescription; Java_sun_font_StrikeCache_getGlyphCacheDescription;
Java_sun_font_StrikeCache_freeIntPointer; Java_sun_font_StrikeCache_freeIntPointer;
Java_sun_font_StrikeCache_freeLongPointer; Java_sun_font_StrikeCache_freeLongPointer;
......
...@@ -35,12 +35,7 @@ SUNWprivate_1.1 { ...@@ -35,12 +35,7 @@ SUNWprivate_1.1 {
isNullScalerContext; isNullScalerContext;
Java_sun_font_NullFontScaler_getNullScalerContext; Java_sun_font_NullFontScaler_getNullScalerContext;
Java_sun_font_NullFontScaler_getGlyphImage; Java_sun_font_NullFontScaler_getGlyphImage;
Java_sun_font_FontManager_getPlatformFontVar; Java_sun_font_SunFontManager_initIDs;
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_StrikeCache_getGlyphCacheDescription; Java_sun_font_StrikeCache_getGlyphCacheDescription;
Java_sun_font_StrikeCache_freeIntPointer; Java_sun_font_StrikeCache_freeIntPointer;
Java_sun_font_StrikeCache_freeLongPointer; Java_sun_font_StrikeCache_freeLongPointer;
......
...@@ -59,12 +59,10 @@ SUNWprivate_1.1 { ...@@ -59,12 +59,10 @@ SUNWprivate_1.1 {
X11SurfaceData_GetOps; X11SurfaceData_GetOps;
Java_java_awt_Font_initIDs; Java_java_awt_Font_initIDs;
Java_sun_font_FontManager_getFontConfig; Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigVersion; Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontConfigAASettings; Java_sun_font_FontConfigManager_getFontConfigVersion;
Java_sun_font_FontManager_getFontPath; Java_sun_awt_X11FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap;
Java_sun_awt_FontDescriptor_initIDs; Java_sun_awt_FontDescriptor_initIDs;
Java_sun_awt_PlatformFont_initIDs; Java_sun_awt_PlatformFont_initIDs;
......
...@@ -182,12 +182,11 @@ SUNWprivate_1.1 { ...@@ -182,12 +182,11 @@ SUNWprivate_1.1 {
Java_java_awt_ScrollPane_initIDs; Java_java_awt_ScrollPane_initIDs;
Java_java_awt_TextField_initIDs; Java_java_awt_TextField_initIDs;
Java_java_awt_TrayIcon_initIDs; Java_java_awt_TrayIcon_initIDs;
Java_sun_font_FontManager_getFontConfig; Java_sun_font_FontConfigManager_getFontConfig;
Java_sun_font_FontManager_getFontConfigVersion; Java_sun_font_FontConfigManager_getFontConfigAASettings;
Java_sun_font_FontManager_getFontConfigAASettings; Java_sun_font_FontConfigManager_getFontConfigVersion;
Java_sun_font_FontManager_getFontPath; Java_sun_awt_X11FontManager_getFontPath;
Java_sun_font_FontManager_setNativeFontPath; Java_sun_font_X11FontManager_setNativeFontPath;
Java_sun_font_FontManager_populateFontFileNameMap;
Java_sun_awt_X11GraphicsEnvironment_initDisplay; Java_sun_awt_X11GraphicsEnvironment_initDisplay;
Java_sun_awt_X11GraphicsEnvironment_initGLX; Java_sun_awt_X11GraphicsEnvironment_initGLX;
Java_sun_awt_X11GraphicsEnvironment_checkShmExt; Java_sun_awt_X11GraphicsEnvironment_checkShmExt;
......
...@@ -29,7 +29,9 @@ import java.awt.*; ...@@ -29,7 +29,9 @@ import java.awt.*;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import javax.swing.plaf.FontUIResource; import javax.swing.plaf.FontUIResource;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import sun.font.FontManager;
import sun.font.FontConfigManager;
import sun.font.FontUtilities;
/** /**
* @author Shannon Hickey * @author Shannon Hickey
...@@ -193,13 +195,13 @@ class PangoFonts { ...@@ -193,13 +195,13 @@ class PangoFonts {
} }
String fcFamilyLC = family.toLowerCase(); 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. */ /* 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 { } else {
/* It's a physical font which we will create with a fallback */ /* It's a physical font which we will create with a fallback */
Font font = new FontUIResource(family, style, size); Font font = new FontUIResource(family, style, size);
return FontManager.getCompositeFontUIResource(font); return FontUtilities.getCompositeFontUIResource(font);
} }
} }
......
...@@ -63,7 +63,7 @@ import java.security.AccessController; ...@@ -63,7 +63,7 @@ import java.security.AccessController;
import sun.awt.SunToolkit; import sun.awt.SunToolkit;
import sun.awt.OSInfo; import sun.awt.OSInfo;
import sun.awt.shell.ShellFolder; import sun.awt.shell.ShellFolder;
import sun.font.FontManager; import sun.font.FontUtilities;
import sun.security.action.GetPropertyAction; import sun.security.action.GetPropertyAction;
import sun.swing.DefaultLayoutStyle; import sun.swing.DefaultLayoutStyle;
...@@ -2347,13 +2347,14 @@ public class WindowsLookAndFeel extends BasicLookAndFeel ...@@ -2347,13 +2347,14 @@ public class WindowsLookAndFeel extends BasicLookAndFeel
font.getStyle(), size); font.getStyle(), size);
} }
} }
if (FontManager.fontSupportsDefaultEncoding(font)) {
if (FontUtilities.fontSupportsDefaultEncoding(font)) {
if (!(font instanceof UIResource)) { if (!(font instanceof UIResource)) {
font = new FontUIResource(font); font = new FontUIResource(font);
} }
} }
else { else {
font = FontManager.getCompositeFontUIResource(font); font = FontUtilities.getCompositeFontUIResource(font);
} }
return font; return font;
......
...@@ -74,6 +74,9 @@ import sun.awt.CausedFocusEvent; ...@@ -74,6 +74,9 @@ import sun.awt.CausedFocusEvent;
import sun.awt.EmbeddedFrame; import sun.awt.EmbeddedFrame;
import sun.awt.dnd.SunDropTargetEvent; import sun.awt.dnd.SunDropTargetEvent;
import sun.awt.im.CompositionArea; import sun.awt.im.CompositionArea;
import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.SunFontManager;
import sun.java2d.SunGraphics2D; import sun.java2d.SunGraphics2D;
import sun.java2d.pipe.Region; import sun.java2d.pipe.Region;
import sun.awt.image.VSyncedBSManager; import sun.awt.image.VSyncedBSManager;
...@@ -2848,8 +2851,12 @@ public abstract class Component implements ImageObserver, MenuContainer, ...@@ -2848,8 +2851,12 @@ public abstract class Component implements ImageObserver, MenuContainer,
* @since JDK1.0 * @since JDK1.0
*/ */
public FontMetrics getFontMetrics(Font font) { public FontMetrics getFontMetrics(Font font) {
// REMIND: PlatformFont flag should be obsolete soon... // This is an unsupported hack, but left in for a customer.
if (sun.font.FontManager.usePlatformFontMetrics()) { // Do not remove.
FontManager fm = FontManagerFactory.getInstance();
if (fm instanceof SunFontManager
&& ((SunFontManager) fm).usePlatformFontMetrics()) {
if (peer != null && if (peer != null &&
!(peer instanceof LightweightPeer)) { !(peer instanceof LightweightPeer)) {
return peer.getFontMetrics(font); return peer.getFontMetrics(font);
......
...@@ -30,7 +30,6 @@ import java.awt.font.GlyphVector; ...@@ -30,7 +30,6 @@ import java.awt.font.GlyphVector;
import java.awt.font.LineMetrics; import java.awt.font.LineMetrics;
import java.awt.font.TextAttribute; import java.awt.font.TextAttribute;
import java.awt.font.TextLayout; import java.awt.font.TextLayout;
import java.awt.font.TransformAttribute;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
...@@ -42,21 +41,21 @@ import java.security.PrivilegedExceptionAction; ...@@ -42,21 +41,21 @@ import java.security.PrivilegedExceptionAction;
import java.text.AttributedCharacterIterator.Attribute; import java.text.AttributedCharacterIterator.Attribute;
import java.text.CharacterIterator; import java.text.CharacterIterator;
import java.text.StringCharacterIterator; import java.text.StringCharacterIterator;
import java.util.HashMap;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import sun.font.StandardGlyphVector; import sun.font.StandardGlyphVector;
import sun.java2d.FontSupport;
import sun.font.AttributeMap; import sun.font.AttributeMap;
import sun.font.AttributeValues; import sun.font.AttributeValues;
import sun.font.EAttribute;
import sun.font.CompositeFont; import sun.font.CompositeFont;
import sun.font.CreatedFontTracker; import sun.font.CreatedFontTracker;
import sun.font.Font2D; import sun.font.Font2D;
import sun.font.Font2DHandle; import sun.font.Font2DHandle;
import sun.font.FontAccess;
import sun.font.FontManager; import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
import sun.font.GlyphLayout; import sun.font.GlyphLayout;
import sun.font.FontLineMetrics; import sun.font.FontLineMetrics;
import sun.font.CoreMetrics; import sun.font.CoreMetrics;
...@@ -223,10 +222,29 @@ import static sun.font.EAttribute.*; ...@@ -223,10 +222,29 @@ import static sun.font.EAttribute.*;
*/ */
public class Font implements java.io.Serializable 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 { static {
/* ensure that the necessary native libraries are loaded */ /* ensure that the necessary native libraries are loaded */
Toolkit.loadLibraries(); Toolkit.loadLibraries();
initIDs(); initIDs();
FontAccess.setFontAccess(new FontAccessImpl());
} }
/** /**
...@@ -464,16 +482,17 @@ public class Font implements java.io.Serializable ...@@ -464,16 +482,17 @@ public class Font implements java.io.Serializable
} }
private Font2D getFont2D() { private Font2D getFont2D() {
if (FontManager.usingPerAppContextComposites && FontManager fm = FontManagerFactory.getInstance();
if (fm.usingPerAppContextComposites() &&
font2DHandle != null && font2DHandle != null &&
font2DHandle.font2D instanceof CompositeFont && font2DHandle.font2D instanceof CompositeFont &&
((CompositeFont)(font2DHandle.font2D)).isStdComposite()) { ((CompositeFont)(font2DHandle.font2D)).isStdComposite()) {
return FontManager.findFont2D(name, style, return fm.findFont2D(name, style,
FontManager.LOGICAL_FALLBACK); FontManager.LOGICAL_FALLBACK);
} else if (font2DHandle == null) { } else if (font2DHandle == null) {
font2DHandle = font2DHandle =
FontManager.findFont2D(name, style, fm.findFont2D(name, style,
FontManager.LOGICAL_FALLBACK).handle; FontManager.LOGICAL_FALLBACK).handle;
} }
/* Do not cache the de-referenced font2D. It must be explicitly /* Do not cache the de-referenced font2D. It must be explicitly
* de-referenced to pick up a valid font in the event that the * de-referenced to pick up a valid font in the event that the
...@@ -570,8 +589,8 @@ public class Font implements java.io.Serializable ...@@ -570,8 +589,8 @@ public class Font implements java.io.Serializable
if (created) { if (created) {
if (handle.font2D instanceof CompositeFont && if (handle.font2D instanceof CompositeFont &&
handle.font2D.getStyle() != style) { handle.font2D.getStyle() != style) {
this.font2DHandle = FontManager fm = FontManagerFactory.getInstance();
FontManager.getNewComposite(null, style, handle); this.font2DHandle = fm.getNewComposite(null, style, handle);
} else { } else {
this.font2DHandle = handle; this.font2DHandle = handle;
} }
...@@ -586,9 +605,9 @@ public class Font implements java.io.Serializable ...@@ -586,9 +605,9 @@ public class Font implements java.io.Serializable
/* Font2D instances created by this method track their font file /* Font2D instances created by this method track their font file
* so that when the Font2D is GC'd it can also remove the file. * so that when the Font2D is GC'd it can also remove the file.
*/ */
this.font2DHandle = FontManager fm = FontManagerFactory.getInstance();
FontManager.createFont2D(fontFile, fontFormat, this.font2DHandle = fm.createFont2D(fontFile, fontFormat, isCopy,
isCopy, tracker).handle; tracker).handle;
this.name = this.font2DHandle.font2D.getFontName(Locale.getDefault()); this.name = this.font2DHandle.font2D.getFontName(Locale.getDefault());
this.style = Font.PLAIN; this.style = Font.PLAIN;
this.size = 1; this.size = 1;
...@@ -640,8 +659,9 @@ public class Font implements java.io.Serializable ...@@ -640,8 +659,9 @@ public class Font implements java.io.Serializable
} }
if (handle.font2D instanceof CompositeFont) { if (handle.font2D instanceof CompositeFont) {
if (newStyle != -1 || newName != null) { if (newStyle != -1 || newName != null) {
FontManager fm = FontManagerFactory.getInstance();
this.font2DHandle = this.font2DHandle =
FontManager.getNewComposite(newName, newStyle, handle); fm.getNewComposite(newName, newStyle, handle);
} }
} else if (newName != null) { } else if (newName != null) {
this.createdFont = false; this.createdFont = false;
...@@ -852,7 +872,6 @@ public class Font implements java.io.Serializable ...@@ -852,7 +872,6 @@ public class Font implements java.io.Serializable
throw new IllegalArgumentException ("font format not recognized"); throw new IllegalArgumentException ("font format not recognized");
} }
boolean copiedFontData = false; boolean copiedFontData = false;
try { try {
final File tFile = AccessController.doPrivileged( final File tFile = AccessController.doPrivileged(
new PrivilegedExceptionAction<File>() { new PrivilegedExceptionAction<File>() {
...@@ -2320,7 +2339,7 @@ public class Font implements java.io.Serializable ...@@ -2320,7 +2339,7 @@ public class Font implements java.io.Serializable
(values.getKerning() == 0 && values.getLigatures() == 0 && (values.getKerning() == 0 && values.getLigatures() == 0 &&
values.getBaselineTransform() == null); values.getBaselineTransform() == null);
if (simple) { if (simple) {
simple = !FontManager.isComplexText(chars, beginIndex, limit); simple = ! FontUtilities.isComplexText(chars, beginIndex, limit);
} }
if (simple) { if (simple) {
......
...@@ -29,6 +29,9 @@ package java.awt; ...@@ -29,6 +29,9 @@ package java.awt;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.security.AccessController; import java.security.AccessController;
import java.util.Locale; import java.util.Locale;
import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.java2d.HeadlessGraphicsEnvironment; import sun.java2d.HeadlessGraphicsEnvironment;
import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SunGraphicsEnvironment;
import sun.security.action.GetPropertyAction; import sun.security.action.GetPropertyAction;
...@@ -353,7 +356,8 @@ public abstract class GraphicsEnvironment { ...@@ -353,7 +356,8 @@ public abstract class GraphicsEnvironment {
if (font == null) { if (font == null) {
throw new NullPointerException("font cannot be 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 { ...@@ -377,10 +381,8 @@ public abstract class GraphicsEnvironment {
* @since 1.5 * @since 1.5
*/ */
public void preferLocaleFonts() { public void preferLocaleFonts() {
if (!(this instanceof SunGraphicsEnvironment)) { FontManager fm = FontManagerFactory.getInstance();
return; fm.preferLocaleFonts();
}
sun.font.FontManager.preferLocaleFonts();
} }
/** /**
...@@ -400,10 +402,8 @@ public abstract class GraphicsEnvironment { ...@@ -400,10 +402,8 @@ public abstract class GraphicsEnvironment {
* @since 1.5 * @since 1.5
*/ */
public void preferProportionalFonts() { public void preferProportionalFonts() {
if (!(this instanceof SunGraphicsEnvironment)) { FontManager fm = FontManagerFactory.getInstance();
return; fm.preferProportionalFonts();
}
sun.font.FontManager.preferProportionalFonts();
} }
/** /**
......
...@@ -26,7 +26,7 @@ package ${PACKAGE}; ...@@ -26,7 +26,7 @@ package ${PACKAGE};
import javax.swing.Painter; import javax.swing.Painter;
import java.awt.Graphics; import java.awt.Graphics;
import sun.font.FontManager; import sun.font.FontUtilities;
import sun.swing.plaf.synth.DefaultSynthStyle; import sun.swing.plaf.synth.DefaultSynthStyle;
import javax.swing.BorderFactory; import javax.swing.BorderFactory;
import javax.swing.JComponent; import javax.swing.JComponent;
...@@ -138,7 +138,7 @@ final class ${LAF_NAME}Defaults { ...@@ -138,7 +138,7 @@ final class ${LAF_NAME}Defaults {
//regions and their states that this class will use for later lookup. //regions and their states that this class will use for later lookup.
//Additional regions can be registered later by 3rd party components. //Additional regions can be registered later by 3rd party components.
//These are simply the default registrations. //These are simply the default registrations.
defaultFont = FontManager.getFontConfigFUIR("sans", Font.PLAIN, 12); defaultFont = FontUtilities.getFontConfigFUIR("sans", Font.PLAIN, 12);
defaultStyle = new DefaultSynthStyle(); defaultStyle = new DefaultSynthStyle();
defaultStyle.setFont(defaultFont); defaultStyle.setFont(defaultFont);
......
...@@ -35,7 +35,7 @@ import javax.swing.event.ChangeEvent; ...@@ -35,7 +35,7 @@ import javax.swing.event.ChangeEvent;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.WeakHashMap; import java.util.WeakHashMap;
import sun.font.FontManager; import sun.font.FontUtilities;
/** /**
* A pool of styles and their associated resources. This class determines * A pool of styles and their associated resources. This class determines
...@@ -263,8 +263,8 @@ public class StyleContext implements Serializable, AbstractDocument.AttributeCon ...@@ -263,8 +263,8 @@ public class StyleContext implements Serializable, AbstractDocument.AttributeCon
if (f == null) { if (f == null) {
f = new Font(family, style, size); f = new Font(family, style, size);
} }
if (! FontManager.fontSupportsDefaultEncoding(f)) { if (! FontUtilities.fontSupportsDefaultEncoding(f)) {
f = FontManager.getCompositeFontUIResource(f); f = FontUtilities.getCompositeFontUIResource(f);
} }
FontKey key = new FontKey(family, style, size); FontKey key = new FontKey(family, style, size);
fontTable.put(key, f); fontTable.put(key, f);
......
...@@ -30,7 +30,6 @@ import java.io.DataInputStream; ...@@ -30,7 +30,6 @@ import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream; import java.io.InputStream;
import java.io.IOException; import java.io.IOException;
import java.io.OutputStream; import java.io.OutputStream;
...@@ -49,7 +48,9 @@ import java.util.Properties; ...@@ -49,7 +48,9 @@ import java.util.Properties;
import java.util.Set; import java.util.Set;
import java.util.Vector; import java.util.Vector;
import sun.font.CompositeFontDescriptor; 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, * Provides the definitions of the five logical fonts: Serif, SansSerif,
...@@ -68,7 +69,7 @@ public abstract class FontConfiguration { ...@@ -68,7 +69,7 @@ public abstract class FontConfiguration {
private static Logger logger; private static Logger logger;
protected static boolean isProperties = true; protected static boolean isProperties = true;
protected SunGraphicsEnvironment environment; protected SunFontManager fontManager;
protected boolean preferLocaleFonts; protected boolean preferLocaleFonts;
protected boolean preferPropFonts; protected boolean preferPropFonts;
...@@ -80,11 +81,11 @@ public abstract class FontConfiguration { ...@@ -80,11 +81,11 @@ public abstract class FontConfiguration {
/* A default FontConfiguration must be created before an alternate /* A default FontConfiguration must be created before an alternate
* one to ensure proper static initialisation takes place. * one to ensure proper static initialisation takes place.
*/ */
public FontConfiguration(SunGraphicsEnvironment environment) { public FontConfiguration(SunFontManager fm) {
if (SunGraphicsEnvironment.debugFonts && logger == null) { if (FontUtilities.debugFonts() && logger == null) {
logger = Logger.getLogger("sun.awt.FontConfiguration"); logger = Logger.getLogger("sun.awt.FontConfiguration");
} }
this.environment = environment; fontManager = fm;
setOsNameAndVersion(); /* static initialization */ setOsNameAndVersion(); /* static initialization */
setEncoding(); /* static initialization */ setEncoding(); /* static initialization */
/* Separating out the file location from the rest of the /* Separating out the file location from the rest of the
...@@ -106,10 +107,10 @@ public abstract class FontConfiguration { ...@@ -106,10 +107,10 @@ public abstract class FontConfiguration {
return true; return true;
} }
public FontConfiguration(SunGraphicsEnvironment environment, public FontConfiguration(SunFontManager fm,
boolean preferLocaleFonts, boolean preferLocaleFonts,
boolean preferPropFonts) { boolean preferPropFonts) {
this.environment = environment; fontManager = fm;
this.preferLocaleFonts = preferLocaleFonts; this.preferLocaleFonts = preferLocaleFonts;
this.preferPropFonts = preferPropFonts; this.preferPropFonts = preferPropFonts;
/* fontConfig should be initialised by default constructor, and /* fontConfig should be initialised by default constructor, and
...@@ -198,17 +199,17 @@ public abstract class FontConfiguration { ...@@ -198,17 +199,17 @@ public abstract class FontConfiguration {
loadBinary(in); loadBinary(in);
} }
in.close(); in.close();
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
logger.config("Read logical font configuration from " + f); logger.config("Read logical font configuration from " + f);
} }
} catch (IOException e) { } catch (IOException e) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
logger.config("Failed to read logical font configuration from " + f); logger.config("Failed to read logical font configuration from " + f);
} }
} }
} }
String version = getVersion(); String version = getVersion();
if (!"1".equals(version) && SunGraphicsEnvironment.debugFonts) { if (!"1".equals(version) && FontUtilities.debugFonts()) {
logger.config("Unsupported fontconfig version: " + version); logger.config("Unsupported fontconfig version: " + version);
} }
} }
...@@ -219,8 +220,8 @@ public abstract class FontConfiguration { ...@@ -219,8 +220,8 @@ public abstract class FontConfiguration {
File fallbackDir = new File(fallbackDirName); File fallbackDir = new File(fallbackDirName);
if (fallbackDir.exists() && fallbackDir.isDirectory()) { if (fallbackDir.exists() && fallbackDir.isDirectory()) {
String[] ttfs = fallbackDir.list(SunGraphicsEnvironment.ttFilter); String[] ttfs = fallbackDir.list(fontManager.getTrueTypeFilter());
String[] t1s = fallbackDir.list(SunGraphicsEnvironment.t1Filter); String[] t1s = fallbackDir.list(fontManager.getType1Filter());
int numTTFs = (ttfs == null) ? 0 : ttfs.length; int numTTFs = (ttfs == null) ? 0 : ttfs.length;
int numT1s = (t1s == null) ? 0 : t1s.length; int numT1s = (t1s == null) ? 0 : t1s.length;
int len = numTTFs + numT1s; int len = numTTFs + numT1s;
...@@ -236,7 +237,7 @@ public abstract class FontConfiguration { ...@@ -236,7 +237,7 @@ public abstract class FontConfiguration {
installedFallbackFontFiles[i+numTTFs] = installedFallbackFontFiles[i+numTTFs] =
fallbackDir + File.separator + t1s[i]; fallbackDir + File.separator + t1s[i];
} }
environment.registerFontsInDir(fallbackDirName); fontManager.registerFontsInDir(fallbackDirName);
} }
} }
...@@ -465,7 +466,7 @@ public abstract class FontConfiguration { ...@@ -465,7 +466,7 @@ public abstract class FontConfiguration {
nameIDs[index] = getComponentFontID(coreScripts[index], nameIDs[index] = getComponentFontID(coreScripts[index],
fontIndex, styleIndex); fontIndex, styleIndex);
if (preferLocaleFonts && localeMap != null && if (preferLocaleFonts && localeMap != null &&
sun.font.FontManager.usingAlternateFontforJALocales()) { fontManager.usingAlternateFontforJALocales()) {
nameIDs[index] = remapLocaleMap(fontIndex, styleIndex, nameIDs[index] = remapLocaleMap(fontIndex, styleIndex,
coreScripts[index], nameIDs[index]); coreScripts[index], nameIDs[index]);
} }
...@@ -480,7 +481,7 @@ public abstract class FontConfiguration { ...@@ -480,7 +481,7 @@ public abstract class FontConfiguration {
short id = getComponentFontID(fallbackScripts[i], short id = getComponentFontID(fallbackScripts[i],
fontIndex, styleIndex); fontIndex, styleIndex);
if (preferLocaleFonts && localeMap != null && if (preferLocaleFonts && localeMap != null &&
sun.font.FontManager.usingAlternateFontforJALocales()) { fontManager.usingAlternateFontforJALocales()) {
id = remapLocaleMap(fontIndex, styleIndex, fallbackScripts[i], id); id = remapLocaleMap(fontIndex, styleIndex, fallbackScripts[i], id);
} }
if (preferPropFonts) { if (preferPropFonts) {
...@@ -973,8 +974,8 @@ public abstract class FontConfiguration { ...@@ -973,8 +974,8 @@ public abstract class FontConfiguration {
public CompositeFontDescriptor[] get2DCompositeFontInfo() { public CompositeFontDescriptor[] get2DCompositeFontInfo() {
CompositeFontDescriptor[] result = CompositeFontDescriptor[] result =
new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES]; new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES];
String defaultFontFile = environment.getDefaultFontFile(); String defaultFontFile = fontManager.getDefaultFontFile();
String defaultFontFaceName = environment.getDefaultFontFaceName(); String defaultFontFaceName = fontManager.getDefaultFontFaceName();
for (int fontIndex = 0; fontIndex < NUM_FONTS; fontIndex++) { for (int fontIndex = 0; fontIndex < NUM_FONTS; fontIndex++) {
String fontName = publicFontNames[fontIndex]; String fontName = publicFontNames[fontIndex];
...@@ -1121,7 +1122,7 @@ public abstract class FontConfiguration { ...@@ -1121,7 +1122,7 @@ public abstract class FontConfiguration {
*/ */
HashMap<String, Boolean> existsMap; HashMap<String, Boolean> existsMap;
public boolean needToSearchForFile(String fileName) { public boolean needToSearchForFile(String fileName) {
if (!environment.isLinux) { if (!FontUtilities.isLinux) {
return false; return false;
} else if (existsMap == null) { } else if (existsMap == null) {
existsMap = new HashMap<String, Boolean>(); existsMap = new HashMap<String, Boolean>();
...@@ -1139,7 +1140,7 @@ public abstract class FontConfiguration { ...@@ -1139,7 +1140,7 @@ public abstract class FontConfiguration {
} else { } else {
exists = Boolean.valueOf((new File(fileName)).exists()); exists = Boolean.valueOf((new File(fileName)).exists());
existsMap.put(fileName, exists); existsMap.put(fileName, exists);
if (SunGraphicsEnvironment.debugFonts && if (FontUtilities.debugFonts() &&
exists == Boolean.FALSE) { exists == Boolean.FALSE) {
logger.warning("Couldn't locate font file " + fileName); logger.warning("Couldn't locate font file " + fileName);
} }
...@@ -2067,7 +2068,8 @@ public abstract class FontConfiguration { ...@@ -2067,7 +2068,8 @@ public abstract class FontConfiguration {
throw new Exception(); throw new Exception();
} }
} catch (Exception e) { } catch (Exception e) {
if (SunGraphicsEnvironment.debugFonts && logger != null) { if (FontUtilities.debugFonts() &&
logger != null) {
logger.config("Failed parsing " + key + logger.config("Failed parsing " + key +
" property of font configuration."); " property of font configuration.");
......
...@@ -232,7 +232,7 @@ abstract class CMap { ...@@ -232,7 +232,7 @@ abstract class CMap {
* fonts are using gb2312 encoding, have to use this * fonts are using gb2312 encoding, have to use this
* workaround to make Solaris zh_CN locale work. -sherman * workaround to make Solaris zh_CN locale work. -sherman
*/ */
if (FontManager.isSolaris && font.platName != null && if (FontUtilities.isSolaris && font.platName != null &&
(font.platName.startsWith( (font.platName.startsWith(
"/usr/openwin/lib/locale/zh_CN.EUC/X11/fonts/TrueType") || "/usr/openwin/lib/locale/zh_CN.EUC/X11/fonts/TrueType") ||
font.platName.startsWith( font.platName.startsWith(
...@@ -407,8 +407,8 @@ abstract class CMap { ...@@ -407,8 +407,8 @@ abstract class CMap {
subtableLength = buffer.getInt(offset+4) & INTMASK; subtableLength = buffer.getInt(offset+4) & INTMASK;
} }
if (offset+subtableLength > buffer.capacity()) { if (offset+subtableLength > buffer.capacity()) {
if (FontManager.logging) { if (FontUtilities.isLogging()) {
FontManager.logger.warning("Cmap subtable overflows buffer."); FontUtilities.getLogger().warning("Cmap subtable overflows buffer.");
} }
} }
switch (subtableFormat) { switch (subtableFormat) {
......
...@@ -60,7 +60,7 @@ public final class CompositeFont extends Font2D { ...@@ -60,7 +60,7 @@ public final class CompositeFont extends Font2D {
public CompositeFont(String name, String[] compFileNames, public CompositeFont(String name, String[] compFileNames,
String[] compNames, int metricsSlotCnt, String[] compNames, int metricsSlotCnt,
int[] exclRanges, int[] maxIndexes, int[] exclRanges, int[] maxIndexes,
boolean defer) { boolean defer, SunFontManager fm) {
handle = new Font2DHandle(this); handle = new Font2DHandle(this);
fullName = name; fullName = name;
...@@ -85,13 +85,13 @@ public final class CompositeFont extends Font2D { ...@@ -85,13 +85,13 @@ public final class CompositeFont extends Font2D {
* The caller could be responsible for this, but for now it seems * The caller could be responsible for this, but for now it seems
* better that it is handled internally to the CompositeFont class. * better that it is handled internally to the CompositeFont class.
*/ */
if (FontManager.eudcFont != null) { if (fm.getEUDCFont() != null) {
numSlots++; numSlots++;
if (componentNames != null) { if (componentNames != null) {
componentNames = new String[numSlots]; componentNames = new String[numSlots];
System.arraycopy(compNames, 0, componentNames, 0, numSlots-1); System.arraycopy(compNames, 0, componentNames, 0, numSlots-1);
componentNames[numSlots-1] = componentNames[numSlots-1] =
FontManager.eudcFont.getFontName(null); fm.getEUDCFont().getFontName(null);
} }
if (componentFileNames != null) { if (componentFileNames != null) {
componentFileNames = new String[numSlots]; componentFileNames = new String[numSlots];
...@@ -99,7 +99,7 @@ public final class CompositeFont extends Font2D { ...@@ -99,7 +99,7 @@ public final class CompositeFont extends Font2D {
componentFileNames, 0, numSlots-1); componentFileNames, 0, numSlots-1);
} }
components = new PhysicalFont[numSlots]; components = new PhysicalFont[numSlots];
components[numSlots-1] = FontManager.eudcFont; components[numSlots-1] = fm.getEUDCFont();
deferredInitialisation = new boolean[numSlots]; deferredInitialisation = new boolean[numSlots];
if (defer) { if (defer) {
for (int i=0; i<numSlots-1; i++) { for (int i=0; i<numSlots-1; i++) {
...@@ -165,7 +165,7 @@ public final class CompositeFont extends Font2D { ...@@ -165,7 +165,7 @@ public final class CompositeFont extends Font2D {
* it is harmless that we do not know a slot is already initialised * it is harmless that we do not know a slot is already initialised
* and just need to discover that and mark it so. * and just need to discover that and mark it so.
*/ */
synchronized (FontManager.class) { synchronized (FontManagerFactory.getInstance()) {
components = new PhysicalFont[numSlots]; components = new PhysicalFont[numSlots];
components[0] = physFont; components[0] = physFont;
System.arraycopy(compFont.components, 0, System.arraycopy(compFont.components, 0,
...@@ -235,7 +235,8 @@ public final class CompositeFont extends Font2D { ...@@ -235,7 +235,8 @@ public final class CompositeFont extends Font2D {
* This global lock is rarely likely to be an issue as there * This global lock is rarely likely to be an issue as there
* are only going to be a few calls into this code. * are only going to be a few calls into this code.
*/ */
synchronized (FontManager.class) { SunFontManager fm = SunFontManager.getInstance();
synchronized (fm) {
if (componentNames == null) { if (componentNames == null) {
componentNames = new String[numSlots]; componentNames = new String[numSlots];
} }
...@@ -251,22 +252,21 @@ public final class CompositeFont extends Font2D { ...@@ -251,22 +252,21 @@ public final class CompositeFont extends Font2D {
*/ */
if (componentFileNames != null && if (componentFileNames != null &&
componentFileNames[slot] != null) { componentFileNames[slot] != null) {
components[slot] = FontManager.initialiseDeferredFont components[slot] =
(componentFileNames[slot]); fm.initialiseDeferredFont(componentFileNames[slot]);
} }
if (components[slot] == null) { if (components[slot] == null) {
components[slot] = FontManager.getDefaultPhysicalFont(); components[slot] = fm.getDefaultPhysicalFont();
} }
String name = components[slot].getFontName(null); String name = components[slot].getFontName(null);
if (componentNames[slot] == null) { if (componentNames[slot] == null) {
componentNames[slot] = name; componentNames[slot] = name;
} else if (!componentNames[slot].equalsIgnoreCase(name)) { } else if (!componentNames[slot].equalsIgnoreCase(name)) {
components[slot] = components[slot] =
(PhysicalFont) (PhysicalFont) fm.findFont2D(componentNames[slot],
FontManager.findFont2D(componentNames[slot], style,
style, FontManager.PHYSICAL_FALLBACK);
FontManager.PHYSICAL_FALLBACK);
} }
} }
deferredInitialisation[slot] = false; deferredInitialisation[slot] = false;
...@@ -333,21 +333,22 @@ public final class CompositeFont extends Font2D { ...@@ -333,21 +333,22 @@ public final class CompositeFont extends Font2D {
if (deferredInitialisation[slot]) { if (deferredInitialisation[slot]) {
doDeferredInitialisation(slot); doDeferredInitialisation(slot);
} }
SunFontManager fm = SunFontManager.getInstance();
try { try {
PhysicalFont font = components[slot]; PhysicalFont font = components[slot];
if (font == null) { if (font == null) {
try { try {
font = (PhysicalFont)FontManager. font = (PhysicalFont) fm.
findFont2D(componentNames[slot], style, findFont2D(componentNames[slot], style,
FontManager.PHYSICAL_FALLBACK); FontManager.PHYSICAL_FALLBACK);
components[slot] = font; components[slot] = font;
} catch (ClassCastException cce) { } catch (ClassCastException cce) {
font = FontManager.getDefaultPhysicalFont(); font = fm.getDefaultPhysicalFont();
} }
} }
return font; return font;
} catch (Exception e) { } catch (Exception e) {
return FontManager.getDefaultPhysicalFont(); return fm.getDefaultPhysicalFont();
} }
} }
......
...@@ -211,10 +211,10 @@ public final class CompositeGlyphMapper extends CharToGlyphMapper { ...@@ -211,10 +211,10 @@ public final class CompositeGlyphMapper extends CharToGlyphMapper {
glyphs[i] = convertToGlyph(code); glyphs[i] = convertToGlyph(code);
} }
if (code < FontManager.MIN_LAYOUT_CHARCODE) { if (code < FontUtilities.MIN_LAYOUT_CHARCODE) {
continue; continue;
} }
else if (FontManager.isComplexCharCode(code)) { else if (FontUtilities.isComplexCharCode(code)) {
return true; return true;
} }
else if (code >= 0x10000) { else if (code >= 0x10000) {
......
...@@ -158,7 +158,8 @@ public abstract class FileFont extends PhysicalFont { ...@@ -158,7 +158,8 @@ public abstract class FileFont extends PhysicalFont {
* rare maybe it is not worth doing this last part. * rare maybe it is not worth doing this last part.
*/ */
synchronized void deregisterFontAndClearStrikeCache() { synchronized void deregisterFontAndClearStrikeCache() {
FontManager.deRegisterBadFont(this); SunFontManager fm = SunFontManager.getInstance();
fm.deRegisterBadFont(this);
for (Reference strikeRef : strikeCache.values()) { for (Reference strikeRef : strikeCache.values()) {
if (strikeRef != null) { if (strikeRef != null) {
...@@ -172,14 +173,14 @@ public abstract class FileFont extends PhysicalFont { ...@@ -172,14 +173,14 @@ public abstract class FileFont extends PhysicalFont {
} }
} }
scaler.dispose(); scaler.dispose();
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
} }
StrikeMetrics getFontMetrics(long pScalerContext) { StrikeMetrics getFontMetrics(long pScalerContext) {
try { try {
return getScaler().getFontMetrics(pScalerContext); return getScaler().getFontMetrics(pScalerContext);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getFontMetrics(pScalerContext); return getFontMetrics(pScalerContext);
} }
} }
...@@ -188,7 +189,7 @@ public abstract class FileFont extends PhysicalFont { ...@@ -188,7 +189,7 @@ public abstract class FileFont extends PhysicalFont {
try { try {
return getScaler().getGlyphAdvance(pScalerContext, glyphCode); return getScaler().getGlyphAdvance(pScalerContext, glyphCode);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getGlyphAdvance(pScalerContext, glyphCode); return getGlyphAdvance(pScalerContext, glyphCode);
} }
} }
...@@ -197,7 +198,7 @@ public abstract class FileFont extends PhysicalFont { ...@@ -197,7 +198,7 @@ public abstract class FileFont extends PhysicalFont {
try { try {
getScaler().getGlyphMetrics(pScalerContext, glyphCode, metrics); getScaler().getGlyphMetrics(pScalerContext, glyphCode, metrics);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
getGlyphMetrics(pScalerContext, glyphCode, metrics); getGlyphMetrics(pScalerContext, glyphCode, metrics);
} }
} }
...@@ -206,7 +207,7 @@ public abstract class FileFont extends PhysicalFont { ...@@ -206,7 +207,7 @@ public abstract class FileFont extends PhysicalFont {
try { try {
return getScaler().getGlyphImage(pScalerContext, glyphCode); return getScaler().getGlyphImage(pScalerContext, glyphCode);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getGlyphImage(pScalerContext, glyphCode); return getGlyphImage(pScalerContext, glyphCode);
} }
} }
...@@ -215,7 +216,7 @@ public abstract class FileFont extends PhysicalFont { ...@@ -215,7 +216,7 @@ public abstract class FileFont extends PhysicalFont {
try { try {
return getScaler().getGlyphOutlineBounds(pScalerContext, glyphCode); return getScaler().getGlyphOutlineBounds(pScalerContext, glyphCode);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getGlyphOutlineBounds(pScalerContext, glyphCode); return getGlyphOutlineBounds(pScalerContext, glyphCode);
} }
} }
...@@ -224,7 +225,7 @@ public abstract class FileFont extends PhysicalFont { ...@@ -224,7 +225,7 @@ public abstract class FileFont extends PhysicalFont {
try { try {
return getScaler().getGlyphOutline(pScalerContext, glyphCode, x, y); return getScaler().getGlyphOutline(pScalerContext, glyphCode, x, y);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getGlyphOutline(pScalerContext, glyphCode, x, y); return getGlyphOutline(pScalerContext, glyphCode, x, y);
} }
} }
...@@ -233,7 +234,7 @@ public abstract class FileFont extends PhysicalFont { ...@@ -233,7 +234,7 @@ public abstract class FileFont extends PhysicalFont {
try { try {
return getScaler().getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y); return getScaler().getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y); return getGlyphVectorOutline(pScalerContext, glyphs, numGlyphs, x, y);
} }
} }
...@@ -275,7 +276,8 @@ public abstract class FileFont extends PhysicalFont { ...@@ -275,7 +276,8 @@ public abstract class FileFont extends PhysicalFont {
*/ */
fontFile.delete(); fontFile.delete();
/* remove from delete on exit hook list : */ /* 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) { } catch (Exception e) {
} }
} }
......
...@@ -114,7 +114,7 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -114,7 +114,7 @@ public class FileFontStrike extends PhysicalStrike {
private static native boolean initNative(); private static native boolean initNative();
private static boolean isXPorLater = false; private static boolean isXPorLater = false;
static { static {
if (FontManager.isWindows && !FontManager.useT2K && if (FontUtilities.isWindows && !FontUtilities.useT2K &&
!GraphicsEnvironment.isHeadless()) { !GraphicsEnvironment.isHeadless()) {
isXPorLater = initNative(); isXPorLater = initNative();
} }
...@@ -201,7 +201,7 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -201,7 +201,7 @@ public class FileFontStrike extends PhysicalStrike {
this.disposer = new FontStrikeDisposer(fileFont, desc); this.disposer = new FontStrikeDisposer(fileFont, desc);
initGlyphCache(); initGlyphCache();
pScalerContext = NullFontScaler.getNullScalerContext(); pScalerContext = NullFontScaler.getNullScalerContext();
FontManager.deRegisterBadFont(fileFont); SunFontManager.getInstance().deRegisterBadFont(fileFont);
return; return;
} }
/* First, see if native code should be used to create the glyph. /* First, see if native code should be used to create the glyph.
...@@ -211,8 +211,8 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -211,8 +211,8 @@ public class FileFontStrike extends PhysicalStrike {
* except that the advance returned by GDI is always overwritten by * except that the advance returned by GDI is always overwritten by
* the JDK rasteriser supplied one (see getGlyphImageFromWindows()). * the JDK rasteriser supplied one (see getGlyphImageFromWindows()).
*/ */
if (FontManager.isWindows && isXPorLater && if (FontUtilities.isWindows && isXPorLater &&
!FontManager.useT2K && !FontUtilities.useT2K &&
!GraphicsEnvironment.isHeadless() && !GraphicsEnvironment.isHeadless() &&
!fileFont.useJavaRasterizer && !fileFont.useJavaRasterizer &&
(desc.aaHint == INTVAL_TEXT_ANTIALIAS_LCD_HRGB || (desc.aaHint == INTVAL_TEXT_ANTIALIAS_LCD_HRGB ||
...@@ -241,8 +241,8 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -241,8 +241,8 @@ public class FileFontStrike extends PhysicalStrike {
} }
} }
} }
if (FontManager.logging && FontManager.isWindows) { if (FontUtilities.isLogging() && FontUtilities.isWindows) {
FontManager.logger.info FontUtilities.getLogger().info
("Strike for " + fileFont + " at size = " + intPtSize + ("Strike for " + fileFont + " at size = " + intPtSize +
" use natives = " + useNatives + " use natives = " + useNatives +
" useJavaRasteriser = " + fileFont.useJavaRasterizer + " useJavaRasteriser = " + fileFont.useJavaRasterizer +
...@@ -298,7 +298,7 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -298,7 +298,7 @@ public class FileFontStrike extends PhysicalStrike {
} }
long getGlyphImageFromNative(int glyphCode) { long getGlyphImageFromNative(int glyphCode) {
if (FontManager.isWindows) { if (FontUtilities.isWindows) {
return getGlyphImageFromWindows(glyphCode); return getGlyphImageFromWindows(glyphCode);
} else { } else {
return getGlyphImageFromX11(glyphCode); return getGlyphImageFromX11(glyphCode);
...@@ -366,8 +366,8 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -366,8 +366,8 @@ public class FileFontStrike extends PhysicalStrike {
} else { } else {
if (useNatives) { if (useNatives) {
glyphPtr = getGlyphImageFromNative(glyphCode); glyphPtr = getGlyphImageFromNative(glyphCode);
if (glyphPtr == 0L && FontManager.logging) { if (glyphPtr == 0L && FontUtilities.isLogging()) {
FontManager.logger.info FontUtilities.getLogger().info
("Strike for " + fileFont + ("Strike for " + fileFont +
" at size = " + intPtSize + " at size = " + intPtSize +
" couldn't get native glyph for code = " + glyphCode); " couldn't get native glyph for code = " + glyphCode);
...@@ -528,7 +528,7 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -528,7 +528,7 @@ public class FileFontStrike extends PhysicalStrike {
if (segmentedCache) { if (segmentedCache) {
int numSegments = (numGlyphs + SEGSIZE-1)/SEGSIZE; int numSegments = (numGlyphs + SEGSIZE-1)/SEGSIZE;
if (FontManager.longAddresses) { if (longAddresses) {
glyphCacheFormat = SEGLONGARRAY; glyphCacheFormat = SEGLONGARRAY;
segLongGlyphImages = new long[numSegments][]; segLongGlyphImages = new long[numSegments][];
this.disposer.segLongGlyphImages = segLongGlyphImages; this.disposer.segLongGlyphImages = segLongGlyphImages;
...@@ -538,7 +538,7 @@ public class FileFontStrike extends PhysicalStrike { ...@@ -538,7 +538,7 @@ public class FileFontStrike extends PhysicalStrike {
this.disposer.segIntGlyphImages = segIntGlyphImages; this.disposer.segIntGlyphImages = segIntGlyphImages;
} }
} else { } else {
if (FontManager.longAddresses) { if (longAddresses) {
glyphCacheFormat = LONGARRAY; glyphCacheFormat = LONGARRAY;
longGlyphImages = new long[numGlyphs]; longGlyphImages = new long[numGlyphs];
this.disposer.longGlyphImages = longGlyphImages; this.disposer.longGlyphImages = longGlyphImages;
......
...@@ -261,8 +261,9 @@ public final class FontDesignMetrics extends FontMetrics { ...@@ -261,8 +261,9 @@ public final class FontDesignMetrics extends FontMetrics {
* Note that currently Swing native L&F composites are not handled * Note that currently Swing native L&F composites are not handled
* by this code as they use the metrics of the physical anyway. * by this code as they use the metrics of the physical anyway.
*/ */
if (FontManager.maybeUsingAlternateCompositeFonts() && SunFontManager fm = SunFontManager.getInstance();
FontManager.getFont2D(font) instanceof CompositeFont) { if (fm.maybeUsingAlternateCompositeFonts() &&
FontUtilities.getFont2D(font) instanceof CompositeFont) {
return new FontDesignMetrics(font, frc); return new FontDesignMetrics(font, frc);
} }
...@@ -353,7 +354,7 @@ public final class FontDesignMetrics extends FontMetrics { ...@@ -353,7 +354,7 @@ public final class FontDesignMetrics extends FontMetrics {
private void initMatrixAndMetrics() { private void initMatrixAndMetrics() {
Font2D font2D = FontManager.getFont2D(font); Font2D font2D = FontUtilities.getFont2D(font);
fontStrike = font2D.getStrike(font, frc); fontStrike = font2D.getStrike(font, frc);
StrikeMetrics metrics = fontStrike.getFontMetrics(); StrikeMetrics metrics = fontStrike.getFontMetrics();
this.ascent = metrics.getAscent(); this.ascent = metrics.getAscent();
...@@ -473,7 +474,7 @@ public final class FontDesignMetrics extends FontMetrics { ...@@ -473,7 +474,7 @@ public final class FontDesignMetrics extends FontMetrics {
char ch = str.charAt(i); char ch = str.charAt(i);
if (ch < 0x100) { if (ch < 0x100) {
width += getLatinCharWidth(ch); width += getLatinCharWidth(ch);
} else if (FontManager.isNonSimpleChar(ch)) { } else if (FontUtilities.isNonSimpleChar(ch)) {
width = new TextLayout(str, font, frc).getAdvance(); width = new TextLayout(str, font, frc).getAdvance();
break; break;
} else { } else {
...@@ -504,7 +505,7 @@ public final class FontDesignMetrics extends FontMetrics { ...@@ -504,7 +505,7 @@ public final class FontDesignMetrics extends FontMetrics {
char ch = data[i]; char ch = data[i];
if (ch < 0x100) { if (ch < 0x100) {
width += getLatinCharWidth(ch); width += getLatinCharWidth(ch);
} else if (FontManager.isNonSimpleChar(ch)) { } else if (FontUtilities.isNonSimpleChar(ch)) {
String str = new String(data, off, len); String str = new String(data, off, len);
width = new TextLayout(str, font, frc).getAdvance(); width = new TextLayout(str, font, frc).getAdvance();
break; break;
......
...@@ -107,8 +107,9 @@ public class FontFamily { ...@@ -107,8 +107,9 @@ public class FontFamily {
public void setFont(Font2D font, int style) { public void setFont(Font2D font, int style) {
if (font.getRank() > familyRank) { if (font.getRank() > familyRank) {
if (FontManager.logging) { if (FontUtilities.isLogging()) {
FontManager.logger.warning("Rejecting adding " + font + FontUtilities.getLogger()
.warning("Rejecting adding " + font +
" of lower rank " + font.getRank() + " of lower rank " + font.getRank() +
" to family " + this + " to family " + this +
" of rank " + familyRank); " of rank " + familyRank);
......
...@@ -34,7 +34,7 @@ public class FontManagerNativeLibrary { ...@@ -34,7 +34,7 @@ public class FontManagerNativeLibrary {
public Object run() { public Object run() {
/* REMIND do we really have to load awt here? */ /* REMIND do we really have to load awt here? */
System.loadLibrary("awt"); System.loadLibrary("awt");
if (SunGraphicsEnvironment.isOpenJDK() && if (FontUtilities.isOpenJDK &&
System.getProperty("os.name").startsWith("Windows")) { System.getProperty("os.name").startsWith("Windows")) {
/* Ideally fontmanager library should not depend on /* Ideally fontmanager library should not depend on
particular implementation of the font scaler. particular implementation of the font scaler.
......
...@@ -114,7 +114,7 @@ public final class FontResolver { ...@@ -114,7 +114,7 @@ public final class FontResolver {
for (int i=0; i<getAllFonts().length; i++) { for (int i=0; i<getAllFonts().length; i++) {
Font font = allFonts[i]; Font font = allFonts[i];
Font2D font2D = FontManager.getFont2D(font); Font2D font2D = FontUtilities.getFont2D(font);
if (font2D.hasSupplementaryChars()) { if (font2D.hasSupplementaryChars()) {
fonts.add(font); fonts.add(font);
indices.add(Integer.valueOf(i)); indices.add(Integer.valueOf(i));
......
...@@ -29,6 +29,9 @@ import java.awt.geom.GeneralPath; ...@@ -29,6 +29,9 @@ import java.awt.geom.GeneralPath;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.lang.reflect.Constructor;
import sun.java2d.Disposer;
import sun.java2d.DisposerRecord; import sun.java2d.DisposerRecord;
/* FontScaler is "internal interface" to font rasterizer library. /* FontScaler is "internal interface" to font rasterizer library.
...@@ -77,6 +80,79 @@ import sun.java2d.DisposerRecord; ...@@ -77,6 +80,79 @@ import sun.java2d.DisposerRecord;
* this (and this is probably more important for Type1 fonts). * this (and this is probably more important for Type1 fonts).
*/ */
public abstract class FontScaler implements DisposerRecord { 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 WeakReference<Font2D> font = null;
protected long nativeScaler = 0; //used by decendants protected long nativeScaler = 0; //used by decendants
//that have native state //that have native state
......
...@@ -79,7 +79,7 @@ class FreetypeFontScaler extends FontScaler { ...@@ -79,7 +79,7 @@ class FreetypeFontScaler extends FontScaler {
pScalerContext, pScalerContext,
nativeScaler); nativeScaler);
} }
return FontManager.getNullScaler().getFontMetrics(0L); return FontScaler.getNullScaler().getFontMetrics(0L);
} }
synchronized float getGlyphAdvance(long pScalerContext, int glyphCode) synchronized float getGlyphAdvance(long pScalerContext, int glyphCode)
...@@ -90,7 +90,8 @@ class FreetypeFontScaler extends FontScaler { ...@@ -90,7 +90,8 @@ class FreetypeFontScaler extends FontScaler {
nativeScaler, nativeScaler,
glyphCode); glyphCode);
} }
return FontManager.getNullScaler().getGlyphAdvance(0L, glyphCode); return FontScaler.getNullScaler().
getGlyphAdvance(0L, glyphCode);
} }
synchronized void getGlyphMetrics(long pScalerContext, synchronized void getGlyphMetrics(long pScalerContext,
...@@ -104,7 +105,8 @@ class FreetypeFontScaler extends FontScaler { ...@@ -104,7 +105,8 @@ class FreetypeFontScaler extends FontScaler {
metrics); metrics);
return; return;
} }
FontManager.getNullScaler().getGlyphMetrics(0L, glyphCode, metrics); FontScaler.getNullScaler().
getGlyphMetrics(0L, glyphCode, metrics);
} }
synchronized long getGlyphImage(long pScalerContext, int glyphCode) synchronized long getGlyphImage(long pScalerContext, int glyphCode)
...@@ -115,7 +117,8 @@ class FreetypeFontScaler extends FontScaler { ...@@ -115,7 +117,8 @@ class FreetypeFontScaler extends FontScaler {
nativeScaler, nativeScaler,
glyphCode); glyphCode);
} }
return FontManager.getNullScaler().getGlyphImage(0L, glyphCode); return FontScaler.getNullScaler().
getGlyphImage(0L, glyphCode);
} }
synchronized Rectangle2D.Float getGlyphOutlineBounds( synchronized Rectangle2D.Float getGlyphOutlineBounds(
...@@ -127,7 +130,8 @@ class FreetypeFontScaler extends FontScaler { ...@@ -127,7 +130,8 @@ class FreetypeFontScaler extends FontScaler {
nativeScaler, nativeScaler,
glyphCode); glyphCode);
} }
return FontManager.getNullScaler().getGlyphOutlineBounds(0L,glyphCode); return FontScaler.getNullScaler().
getGlyphOutlineBounds(0L,glyphCode);
} }
synchronized GeneralPath getGlyphOutline( synchronized GeneralPath getGlyphOutline(
...@@ -140,7 +144,8 @@ class FreetypeFontScaler extends FontScaler { ...@@ -140,7 +144,8 @@ class FreetypeFontScaler extends FontScaler {
glyphCode, glyphCode,
x, y); x, y);
} }
return FontManager.getNullScaler().getGlyphOutline(0L, glyphCode, x,y); return FontScaler.getNullScaler().
getGlyphOutline(0L, glyphCode, x,y);
} }
synchronized GeneralPath getGlyphVectorOutline( synchronized GeneralPath getGlyphVectorOutline(
...@@ -154,8 +159,8 @@ class FreetypeFontScaler extends FontScaler { ...@@ -154,8 +159,8 @@ class FreetypeFontScaler extends FontScaler {
numGlyphs, numGlyphs,
x, y); x, y);
} }
return FontManager.getNullScaler().getGlyphVectorOutline( return FontScaler
0L, glyphs, numGlyphs, x, y); .getNullScaler().getGlyphVectorOutline(0L, glyphs, numGlyphs, x, y);
} }
synchronized long getLayoutTableCache() throws FontScalerException { synchronized long getLayoutTableCache() throws FontScalerException {
...@@ -173,21 +178,21 @@ class FreetypeFontScaler extends FontScaler { ...@@ -173,21 +178,21 @@ class FreetypeFontScaler extends FontScaler {
if (nativeScaler != 0L) { if (nativeScaler != 0L) {
return getNumGlyphsNative(nativeScaler); return getNumGlyphsNative(nativeScaler);
} }
return FontManager.getNullScaler().getNumGlyphs(); return FontScaler.getNullScaler().getNumGlyphs();
} }
synchronized int getMissingGlyphCode() throws FontScalerException { synchronized int getMissingGlyphCode() throws FontScalerException {
if (nativeScaler != 0L) { if (nativeScaler != 0L) {
return getMissingGlyphCodeNative(nativeScaler); return getMissingGlyphCodeNative(nativeScaler);
} }
return FontManager.getNullScaler().getMissingGlyphCode(); return FontScaler.getNullScaler().getMissingGlyphCode();
} }
synchronized int getGlyphCode(char charCode) throws FontScalerException { synchronized int getGlyphCode(char charCode) throws FontScalerException {
if (nativeScaler != 0L) { if (nativeScaler != 0L) {
return getGlyphCodeNative(nativeScaler, charCode); return getGlyphCodeNative(nativeScaler, charCode);
} }
return FontManager.getNullScaler().getGlyphCode(charCode); return FontScaler.getNullScaler().getGlyphCode(charCode);
} }
synchronized Point2D.Float getGlyphPoint(long pScalerContext, synchronized Point2D.Float getGlyphPoint(long pScalerContext,
...@@ -197,7 +202,7 @@ class FreetypeFontScaler extends FontScaler { ...@@ -197,7 +202,7 @@ class FreetypeFontScaler extends FontScaler {
return getGlyphPointNative(font.get(), pScalerContext, return getGlyphPointNative(font.get(), pScalerContext,
nativeScaler, glyphCode, ptNumber); nativeScaler, glyphCode, ptNumber);
} }
return FontManager.getNullScaler().getGlyphPoint( return FontScaler.getNullScaler().getGlyphPoint(
pScalerContext, glyphCode, ptNumber); pScalerContext, glyphCode, ptNumber);
} }
......
...@@ -259,7 +259,7 @@ public final class GlyphLayout { ...@@ -259,7 +259,7 @@ public final class GlyphLayout {
*/ */
int aa = int aa =
FontStrikeDesc.getAAHintIntVal(frc.getAntiAliasingHint(), FontStrikeDesc.getAAHintIntVal(frc.getAntiAliasingHint(),
FontManager.getFont2D(font), FontUtilities.getFont2D(font),
(int)Math.abs(ptSize)); (int)Math.abs(ptSize));
int fm = FontStrikeDesc.getFMHintIntVal int fm = FontStrikeDesc.getFMHintIntVal
(frc.getFractionalMetricsHint()); (frc.getFractionalMetricsHint());
...@@ -407,7 +407,7 @@ public final class GlyphLayout { ...@@ -407,7 +407,7 @@ public final class GlyphLayout {
int lang = -1; // default for now int lang = -1; // default for now
Font2D font2D = FontManager.getFont2D(font); Font2D font2D = FontUtilities.getFont2D(font);
_textRecord.init(text, offset, lim, min, max); _textRecord.init(text, offset, lim, min, max);
int start = offset; int start = offset;
......
...@@ -36,6 +36,14 @@ import java.util.concurrent.ConcurrentHashMap; ...@@ -36,6 +36,14 @@ import java.util.concurrent.ConcurrentHashMap;
public abstract class PhysicalStrike extends FontStrike { public abstract class PhysicalStrike extends FontStrike {
static final long INTMASK = 0xffffffffL; 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; private PhysicalFont physicalFont;
protected CharToGlyphMapper mapper; protected CharToGlyphMapper mapper;
......
...@@ -197,7 +197,7 @@ public class StandardGlyphVector extends GlyphVector { ...@@ -197,7 +197,7 @@ public class StandardGlyphVector extends GlyphVector {
// how do we know its a base glyph // how do we know its a base glyph
// for now, it is if the natural advance of the glyph is non-zero // 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); FontStrike strike = f2d.getStrike(font, frc);
float[] deltas = { trackPt.x, trackPt.y }; float[] deltas = { trackPt.x, trackPt.y };
...@@ -1116,7 +1116,7 @@ public class StandardGlyphVector extends GlyphVector { ...@@ -1116,7 +1116,7 @@ public class StandardGlyphVector extends GlyphVector {
} }
private void initFontData() { private void initFontData() {
font2D = FontManager.getFont2D(font); font2D = FontUtilities.getFont2D(font);
float s = font.getSize2D(); float s = font.getSize2D();
if (font.isTransformed()) { if (font.isTransformed()) {
ftx = font.getTransform(); ftx = font.getTransform();
......
...@@ -237,7 +237,7 @@ public final class StrikeCache { ...@@ -237,7 +237,7 @@ public final class StrikeCache {
* any glyphs. In this case we still want to free the scaler * any glyphs. In this case we still want to free the scaler
* context. * context.
*/ */
if (FontManager.longAddresses) { if (longAddresses()) {
freeLongMemory(new long[0], disposer.pScalerContext); freeLongMemory(new long[0], disposer.pScalerContext);
} else { } else {
freeIntMemory(new int[0], disposer.pScalerContext); freeIntMemory(new int[0], disposer.pScalerContext);
...@@ -245,6 +245,10 @@ public final class StrikeCache { ...@@ -245,6 +245,10 @@ public final class StrikeCache {
} }
} }
private static boolean longAddresses() {
return nativeAddressSize == 8;
}
static void disposeStrike(final FontStrikeDisposer disposer) { static void disposeStrike(final FontStrikeDisposer disposer) {
// we need to execute the strike disposal on the rendering thread // we need to execute the strike disposal on the rendering thread
// because they may be accessed on that thread at the time of the // because they may be accessed on that thread at the time of the
......
...@@ -60,9 +60,9 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper { ...@@ -60,9 +60,9 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper {
missingGlyph = 0; /* standard for TrueType fonts */ missingGlyph = 0; /* standard for TrueType fonts */
ByteBuffer buffer = font.getTableBuffer(TrueTypeFont.maxpTag); ByteBuffer buffer = font.getTableBuffer(TrueTypeFont.maxpTag);
numGlyphs = buffer.getChar(4); // offset 4 bytes in MAXP table. numGlyphs = buffer.getChar(4); // offset 4 bytes in MAXP table.
if (FontManager.isSolaris && isJAlocale && font.supportsJA()) { if (FontUtilities.isSolaris && isJAlocale && font.supportsJA()) {
needsJAremapping = true; needsJAremapping = true;
if (FontManager.isSolaris8 && if (FontUtilities.isSolaris8 &&
getGlyphFromCMAP(JA_WAVE_DASH_CHAR) == missingGlyph) { getGlyphFromCMAP(JA_WAVE_DASH_CHAR) == missingGlyph) {
remapJAWaveDash = true; remapJAWaveDash = true;
} }
...@@ -82,8 +82,8 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper { ...@@ -82,8 +82,8 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper {
glyphCode >= FileFontStrike.INVISIBLE_GLYPHS) { glyphCode >= FileFontStrike.INVISIBLE_GLYPHS) {
return glyphCode; return glyphCode;
} else { } else {
if (FontManager.logging) { if (FontUtilities.isLogging()) {
FontManager.logger.warning FontUtilities.getLogger().warning
(font + " out of range glyph id=" + (font + " out of range glyph id=" +
Integer.toHexString((int)glyphCode) + Integer.toHexString((int)glyphCode) +
" for char " + Integer.toHexString(charCode)); " for char " + Integer.toHexString(charCode));
...@@ -97,11 +97,11 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper { ...@@ -97,11 +97,11 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper {
} }
private void handleBadCMAP() { private void handleBadCMAP() {
if (FontManager.logging) { if (FontUtilities.isLogging()) {
FontManager.logger.severe("Null Cmap for " + font + FontUtilities.getLogger().severe("Null Cmap for " + font +
"substituting for this font"); "substituting for this font");
} }
FontManager.deRegisterBadFont(font); SunFontManager.getInstance().deRegisterBadFont(font);
/* The next line is not really a solution, but might /* The next line is not really a solution, but might
* reduce the exceptions until references to this font2D * reduce the exceptions until references to this font2D
* are gone. * are gone.
...@@ -242,10 +242,10 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper { ...@@ -242,10 +242,10 @@ public class TrueTypeGlyphMapper extends CharToGlyphMapper {
font.glyphToCharMap[glyphs[i]] = (char)code; font.glyphToCharMap[glyphs[i]] = (char)code;
} }
if (code < FontManager.MIN_LAYOUT_CHARCODE) { if (code < FontUtilities.MIN_LAYOUT_CHARCODE) {
continue; continue;
} }
else if (FontManager.isComplexCharCode(code)) { else if (FontUtilities.isComplexCharCode(code)) {
return true; return true;
} }
else if (code >= 0x10000) { else if (code >= 0x10000) {
......
...@@ -635,7 +635,7 @@ public class Type1Font extends FileFont { ...@@ -635,7 +635,7 @@ public class Type1Font extends FileFont {
protected synchronized FontScaler getScaler() { protected synchronized FontScaler getScaler() {
if (scaler == null) { if (scaler == null) {
scaler = FontManager.getScaler(this, 0, false, fileSize); scaler = FontScaler.getScaler(this, 0, false, fileSize);
} }
return scaler; return scaler;
...@@ -652,7 +652,7 @@ public class Type1Font extends FileFont { ...@@ -652,7 +652,7 @@ public class Type1Font extends FileFont {
try { try {
return getScaler().getNumGlyphs(); return getScaler().getNumGlyphs();
} catch (FontScalerException e) { } catch (FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getNumGlyphs(); return getNumGlyphs();
} }
} }
...@@ -661,7 +661,7 @@ public class Type1Font extends FileFont { ...@@ -661,7 +661,7 @@ public class Type1Font extends FileFont {
try { try {
return getScaler().getMissingGlyphCode(); return getScaler().getMissingGlyphCode();
} catch (FontScalerException e) { } catch (FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getMissingGlyphCode(); return getMissingGlyphCode();
} }
} }
...@@ -670,7 +670,7 @@ public class Type1Font extends FileFont { ...@@ -670,7 +670,7 @@ public class Type1Font extends FileFont {
try { try {
return getScaler().getGlyphCode(charCode); return getScaler().getGlyphCode(charCode);
} catch (FontScalerException e) { } catch (FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getGlyphCode(charCode); return getGlyphCode(charCode);
} }
} }
...@@ -679,5 +679,4 @@ public class Type1Font extends FileFont { ...@@ -679,5 +679,4 @@ public class Type1Font extends FileFont {
return "** Type1 Font: Family="+familyName+ " Name="+fullName+ return "** Type1 Font: Family="+familyName+ " Name="+fullName+
" style="+style+" fileName="+platName; " style="+style+" fileName="+platName;
} }
} }
...@@ -46,7 +46,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper { ...@@ -46,7 +46,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper {
try { try {
missingGlyph = scaler.getMissingGlyphCode(); missingGlyph = scaler.getMissingGlyphCode();
} catch (FontScalerException fe) { } catch (FontScalerException fe) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
try { try {
missingGlyph = scaler.getMissingGlyphCode(); missingGlyph = scaler.getMissingGlyphCode();
} catch (FontScalerException e) { //should not happen } catch (FontScalerException e) { //should not happen
...@@ -59,7 +59,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper { ...@@ -59,7 +59,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper {
try { try {
return scaler.getNumGlyphs(); return scaler.getNumGlyphs();
} catch (FontScalerException e) { } catch (FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return getNumGlyphs(); return getNumGlyphs();
} }
} }
...@@ -72,7 +72,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper { ...@@ -72,7 +72,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper {
try { try {
return scaler.getGlyphCode(ch) != missingGlyph; return scaler.getGlyphCode(ch) != missingGlyph;
} catch(FontScalerException e) { } catch(FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return canDisplay(ch); return canDisplay(ch);
} }
} }
...@@ -81,7 +81,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper { ...@@ -81,7 +81,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper {
try { try {
return scaler.getGlyphCode(ch); return scaler.getGlyphCode(ch);
} catch (FontScalerException e) { } catch (FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return charToGlyph(ch); return charToGlyph(ch);
} }
} }
...@@ -93,7 +93,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper { ...@@ -93,7 +93,7 @@ public final class Type1GlyphMapper extends CharToGlyphMapper {
try { try {
return scaler.getGlyphCode((char)ch); return scaler.getGlyphCode((char)ch);
} catch (FontScalerException e) { } catch (FontScalerException e) {
scaler = FontManager.getNullScaler(); scaler = FontScaler.getNullScaler();
return charToGlyph(ch); return charToGlyph(ch);
} }
} }
...@@ -160,10 +160,10 @@ public final class Type1GlyphMapper extends CharToGlyphMapper { ...@@ -160,10 +160,10 @@ public final class Type1GlyphMapper extends CharToGlyphMapper {
glyphs[i] = charToGlyph(code); glyphs[i] = charToGlyph(code);
if (code < FontManager.MIN_LAYOUT_CHARCODE) { if (code < FontUtilities.MIN_LAYOUT_CHARCODE) {
continue; continue;
} }
else if (FontManager.isComplexCharCode(code)) { else if (FontUtilities.isComplexCharCode(code)) {
return true; return true;
} }
else if (code >= 0x10000) { else if (code >= 0x10000) {
......
...@@ -66,6 +66,7 @@ import java.awt.Transparency; ...@@ -66,6 +66,7 @@ import java.awt.Transparency;
import java.awt.font.GlyphVector; import java.awt.font.GlyphVector;
import java.awt.font.TextLayout; import java.awt.font.TextLayout;
import sun.font.FontDesignMetrics; import sun.font.FontDesignMetrics;
import sun.font.FontUtilities;
import sun.java2d.pipe.PixelDrawPipe; import sun.java2d.pipe.PixelDrawPipe;
import sun.java2d.pipe.PixelFillPipe; import sun.java2d.pipe.PixelFillPipe;
import sun.java2d.pipe.ShapeDrawPipe; import sun.java2d.pipe.ShapeDrawPipe;
...@@ -592,7 +593,7 @@ public final class SunGraphics2D ...@@ -592,7 +593,7 @@ public final class SunGraphics2D
} }
} }
info.font2D = FontManager.getFont2D(font); info.font2D = FontUtilities.getFont2D(font);
int fmhint = fractionalMetricsHint; int fmhint = fractionalMetricsHint;
if (fmhint == SunHints.INTVAL_FRACTIONALMETRICS_DEFAULT) { if (fmhint == SunHints.INTVAL_FRACTIONALMETRICS_DEFAULT) {
...@@ -741,7 +742,8 @@ public final class SunGraphics2D ...@@ -741,7 +742,8 @@ public final class SunGraphics2D
font.isTransformed() || font.isTransformed() ||
fontInfo == null || // Precaution, if true shouldn't get here fontInfo == null || // Precaution, if true shouldn't get here
(fontInfo.aaHint == SunHints.INTVAL_TEXT_ANTIALIAS_ON) != (fontInfo.aaHint == SunHints.INTVAL_TEXT_ANTIALIAS_ON) !=
FontManager.getFont2D(font).useAAForPtSize(font.getSize()))) { FontUtilities.getFont2D(font).
useAAForPtSize(font.getSize()))) {
textpipe = invalidpipe; textpipe = invalidpipe;
} }
this.font = font; this.font = font;
......
...@@ -87,6 +87,8 @@ import sun.awt.FontConfiguration; ...@@ -87,6 +87,8 @@ import sun.awt.FontConfiguration;
import sun.awt.FontDescriptor; import sun.awt.FontDescriptor;
import sun.awt.PlatformFont; import sun.awt.PlatformFont;
import sun.awt.SunToolkit; import sun.awt.SunToolkit;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
import java.nio.charset.*; import java.nio.charset.*;
import java.nio.CharBuffer; import java.nio.CharBuffer;
...@@ -1077,7 +1079,7 @@ public class PSPrinterJob extends RasterPrinterJob { ...@@ -1077,7 +1079,7 @@ public class PSPrinterJob extends RasterPrinterJob {
} }
int styleMask = font.getStyle() | int styleMask = font.getStyle() |
sun.font.FontManager.getFont2D(font).getStyle(); FontUtilities.getFont2D(font).getStyle();
String style = FontConfiguration.getStyleString(styleMask); String style = FontConfiguration.getStyleString(styleMask);
......
...@@ -32,6 +32,8 @@ import sun.font.CompositeFont; ...@@ -32,6 +32,8 @@ import sun.font.CompositeFont;
import sun.font.Font2D; import sun.font.Font2D;
import sun.font.Font2DHandle; import sun.font.Font2DHandle;
import sun.font.FontManager; import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
import java.awt.Color; import java.awt.Color;
import java.awt.Font; import java.awt.Font;
...@@ -698,7 +700,7 @@ public abstract class PathGraphics extends ProxyGraphics2D { ...@@ -698,7 +700,7 @@ public abstract class PathGraphics extends ProxyGraphics2D {
} }
Font font = g.getFont(); Font font = g.getFont();
Font2D font2D = FontManager.getFont2D(font); Font2D font2D = FontUtilities.getFont2D(font);
if (font2D.handle.font2D != font2D) { if (font2D.handle.font2D != font2D) {
/* suspicious, may be a bad font. lets bail */ /* suspicious, may be a bad font. lets bail */
return false; return false;
...@@ -933,7 +935,7 @@ public abstract class PathGraphics extends ProxyGraphics2D { ...@@ -933,7 +935,7 @@ public abstract class PathGraphics extends ProxyGraphics2D {
* The logic here is erring on the side of caution, in particular * The logic here is erring on the side of caution, in particular
* in including supplementary characters. * in including supplementary characters.
*/ */
if (FontManager.isComplexText(chars, 0, chars.length)) { if (FontUtilities.isComplexText(chars, 0, chars.length)) {
return printGlyphVector(g, x, y); return printGlyphVector(g, x, y);
} }
......
...@@ -54,7 +54,7 @@ import sun.security.util.SecurityConstants; ...@@ -54,7 +54,7 @@ import sun.security.util.SecurityConstants;
import java.io.*; import java.io.*;
import java.util.*; import java.util.*;
import sun.font.FontDesignMetrics; import sun.font.FontDesignMetrics;
import sun.font.FontManager; import sun.font.FontUtilities;
import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SunGraphicsEnvironment;
import java.util.concurrent.Callable; import java.util.concurrent.Callable;
...@@ -193,7 +193,7 @@ public class SwingUtilities2 { ...@@ -193,7 +193,7 @@ public class SwingUtilities2 {
* <tt>false</tt> if TextLayout is not required * <tt>false</tt> if TextLayout is not required
*/ */
public static final boolean isComplexLayout(char[] text, int start, int limit) { public static final boolean isComplexLayout(char[] text, int start, int limit) {
return FontManager.isComplexText(text, start, limit); return FontUtilities.isComplexText(text, start, limit);
} }
// //
......
...@@ -71,41 +71,14 @@ JNIEXPORT jlong JNICALL Java_sun_font_NullFontScaler_getGlyphImage ...@@ -71,41 +71,14 @@ JNIEXPORT jlong JNICALL Java_sun_font_NullFontScaler_getGlyphImage
void initLCDGammaTables(); void initLCDGammaTables();
/*
* Class: sun_font_FontManager
* Method: getPlatformFontVar
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL
Java_sun_font_FontManager_getPlatformFontVar(JNIEnv *env, jclass cl) {
char *c = getenv("JAVA2D_USEPLATFORMFONT");
if (c) {
return JNI_TRUE;
} else {
return JNI_FALSE;
}
}
/* placeholder for extern variable */ /* placeholder for extern variable */
FontManagerNativeIDs sunFontIDs; FontManagerNativeIDs sunFontIDs;
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_font_FontManager_initIDs Java_sun_font_SunFontManager_initIDs
(JNIEnv *env, jclass cls) { (JNIEnv *env, jclass cls) {
jclass tmpClass = (*env)->FindClass(env, "java/awt/Font"); jclass tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont");
sunFontIDs.getFont2DMID =
(*env)->GetMethodID(env, tmpClass, "getFont2D",
"()Lsun/font/Font2D;");
sunFontIDs.font2DHandle =
(*env)->GetFieldID(env, tmpClass,
"font2DHandle", "Lsun/font/Font2DHandle;");
sunFontIDs.createdFont =
(*env)->GetFieldID(env, tmpClass, "createdFont", "Z");
tmpClass = (*env)->FindClass(env, "sun/font/TrueTypeFont");
sunFontIDs.ttReadBlockMID = sunFontIDs.ttReadBlockMID =
(*env)->GetMethodID(env, tmpClass, "readBlock", (*env)->GetMethodID(env, tmpClass, "readBlock",
"(Ljava/nio/ByteBuffer;II)I"); "(Ljava/nio/ByteBuffer;II)I");
...@@ -207,40 +180,6 @@ JNIEXPORT FontManagerNativeIDs getSunFontIDs() { ...@@ -207,40 +180,6 @@ JNIEXPORT FontManagerNativeIDs getSunFontIDs() {
return sunFontIDs; return sunFontIDs;
} }
JNIEXPORT jobject JNICALL
Java_sun_font_FontManager_getFont2D(
JNIEnv *env,
jclass clsFM,
jobject javaFont) {
return (*env)->CallObjectMethod(env, javaFont, sunFontIDs.getFont2DMID);
}
JNIEXPORT void JNICALL
Java_sun_font_FontManager_setFont2D(
JNIEnv *env,
jclass clsFM,
jobject javaFont,
jobject fontHandle) {
(*env)->SetObjectField(env, javaFont, sunFontIDs.font2DHandle, fontHandle);
}
JNIEXPORT void JNICALL
Java_sun_font_FontManager_setCreatedFont(
JNIEnv *env,
jclass clsFM,
jobject javaFont) {
(*env)->SetBooleanField(env, javaFont, sunFontIDs.createdFont, JNI_TRUE);
}
JNIEXPORT jboolean JNICALL
Java_sun_font_FontManager_isCreatedFont(
JNIEnv *env,
jclass clsFM,
jobject javaFont) {
return (*env)->GetBooleanField(env, javaFont, sunFontIDs.createdFont);
}
/* /*
* Class: sun_font_StrikeCache * Class: sun_font_StrikeCache
* Method: freeIntPointer * Method: freeIntPointer
......
...@@ -34,11 +34,6 @@ extern "C" { ...@@ -34,11 +34,6 @@ extern "C" {
typedef struct FontManagerNativeIDs { typedef struct FontManagerNativeIDs {
/* java/awt/Font methods & fields */
jmethodID getFont2DMID;
jfieldID font2DHandle;
jfieldID createdFont;
/* sun/font/Font2D methods */ /* sun/font/Font2D methods */
jmethodID getMapperMID; jmethodID getMapperMID;
jmethodID getTableBytesMID; jmethodID getTableBytesMID;
......
...@@ -51,6 +51,7 @@ import java.util.logging.Logger; ...@@ -51,6 +51,7 @@ import java.util.logging.Logger;
import javax.swing.LookAndFeel; import javax.swing.LookAndFeel;
import javax.swing.UIDefaults; import javax.swing.UIDefaults;
import sun.awt.*; import sun.awt.*;
import sun.font.FontConfigManager;
import sun.font.FontManager; import sun.font.FontManager;
import sun.misc.PerformanceLogger; import sun.misc.PerformanceLogger;
import sun.print.PrintJob2D; import sun.print.PrintJob2D;
...@@ -95,6 +96,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable { ...@@ -95,6 +96,8 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
*/ */
private XSettings xs; private XSettings xs;
private FontConfigManager fcManager = new FontConfigManager();
static int arrowCursor; static int arrowCursor;
static TreeMap winMap = new TreeMap(); static TreeMap winMap = new TreeMap();
static HashMap specialPeerMap = new HashMap(); static HashMap specialPeerMap = new HashMap();
...@@ -1527,7 +1530,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable { ...@@ -1527,7 +1530,7 @@ public final class XToolkit extends UNIXToolkit implements Runnable {
*/ */
if (desktopProperties.get(SunToolkit.DESKTOPFONTHINTS) == null) { if (desktopProperties.get(SunToolkit.DESKTOPFONTHINTS) == null) {
if (XWM.isKDE2()) { if (XWM.isKDE2()) {
Object hint = FontManager.getFontConfigAAHint(); Object hint = fcManager.getFontConfigAAHint();
if (hint != null) { if (hint != null) {
/* set the fontconfig/KDE property so that /* set the fontconfig/KDE property so that
* getDesktopHints() below will see it * getDesktopHints() below will see it
......
...@@ -37,7 +37,12 @@ import java.util.logging.Logger; ...@@ -37,7 +37,12 @@ import java.util.logging.Logger;
import java.util.Properties; import java.util.Properties;
import java.util.Scanner; import java.util.Scanner;
import sun.awt.FontConfiguration; import sun.awt.FontConfiguration;
import sun.awt.X11FontManager;
import sun.awt.X11GraphicsEnvironment; import sun.awt.X11GraphicsEnvironment;
import sun.font.FontManager;
import sun.font.SunFontManager;
import sun.font.FontManagerFactory;
import sun.font.FontUtilities;
import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SunGraphicsEnvironment;
import java.nio.charset.Charset; import java.nio.charset.Charset;
...@@ -46,20 +51,20 @@ public class MFontConfiguration extends FontConfiguration { ...@@ -46,20 +51,20 @@ public class MFontConfiguration extends FontConfiguration {
private static FontConfiguration fontConfig = null; private static FontConfiguration fontConfig = null;
private static Logger logger; private static Logger logger;
public MFontConfiguration(SunGraphicsEnvironment environment) { public MFontConfiguration(SunFontManager fm) {
super(environment); super(fm);
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
logger = Logger.getLogger("sun.awt.FontConfiguration"); logger = Logger.getLogger("sun.awt.FontConfiguration");
} }
initTables(); initTables();
} }
public MFontConfiguration(SunGraphicsEnvironment environment, public MFontConfiguration(SunFontManager fm,
boolean preferLocaleFonts, boolean preferLocaleFonts,
boolean preferPropFonts) { boolean preferPropFonts) {
super(environment, preferLocaleFonts, preferPropFonts); super(fm, preferLocaleFonts, preferPropFonts);
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
logger = Logger.getLogger("sun.awt.FontConfiguration"); logger = Logger.getLogger("sun.awt.FontConfiguration");
} }
initTables(); initTables();
...@@ -90,7 +95,7 @@ public class MFontConfiguration extends FontConfiguration { ...@@ -90,7 +95,7 @@ public class MFontConfiguration extends FontConfiguration {
reorderMap.put("UTF-8.th", "thai"); reorderMap.put("UTF-8.th", "thai");
reorderMap.put("UTF-8.zh.TW", "chinese-big5"); reorderMap.put("UTF-8.zh.TW", "chinese-big5");
reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs")); reorderMap.put("UTF-8.zh.HK", split("chinese-big5,chinese-hkscs"));
if (sun.font.FontManager.isSolaris8) { if (FontUtilities.isSolaris8) {
reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5")); reorderMap.put("UTF-8.zh.CN", split("chinese-gb2312,chinese-big5"));
} else { } else {
reorderMap.put("UTF-8.zh.CN", reorderMap.put("UTF-8.zh.CN",
...@@ -100,7 +105,7 @@ public class MFontConfiguration extends FontConfiguration { ...@@ -100,7 +105,7 @@ public class MFontConfiguration extends FontConfiguration {
split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1")); split("chinese-big5,chinese-hkscs,chinese-gb18030-0,chinese-gb18030-1"));
reorderMap.put("Big5", "chinese-big5"); reorderMap.put("Big5", "chinese-big5");
reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs")); reorderMap.put("Big5-HKSCS", split("chinese-big5,chinese-hkscs"));
if (! sun.font.FontManager.isSolaris8 && ! sun.font.FontManager.isSolaris9) { if (! FontUtilities.isSolaris8 && ! FontUtilities.isSolaris9) {
reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312")); reorderMap.put("GB2312", split("chinese-gbk,chinese-gb2312"));
} else { } else {
reorderMap.put("GB2312","chinese-gb2312"); reorderMap.put("GB2312","chinese-gb2312");
...@@ -209,7 +214,7 @@ public class MFontConfiguration extends FontConfiguration { ...@@ -209,7 +214,7 @@ public class MFontConfiguration extends FontConfiguration {
protected String mapFileName(String fileName) { protected String mapFileName(String fileName) {
if (fileName != null && fileName.startsWith(fontsDirPrefix)) { if (fileName != null && fileName.startsWith(fontsDirPrefix)) {
return SunGraphicsEnvironment.jreFontDirName return SunFontManager.jreFontDirName
+ fileName.substring(fontsDirPrefix.length()); + fileName.substring(fontsDirPrefix.length());
} }
return fileName; return fileName;
...@@ -310,7 +315,7 @@ public class MFontConfiguration extends FontConfiguration { ...@@ -310,7 +315,7 @@ public class MFontConfiguration extends FontConfiguration {
!needToSearchForFile(fileName)) { !needToSearchForFile(fileName)) {
return fileName; return fileName;
} }
return ((X11GraphicsEnvironment) environment).getFileNameFromXLFD(componentFontName); return ((X11FontManager) fontManager).getFileNameFromXLFD(componentFontName);
} }
/** /**
......
...@@ -61,6 +61,7 @@ import java.awt.dnd.InvalidDnDOperationException; ...@@ -61,6 +61,7 @@ import java.awt.dnd.InvalidDnDOperationException;
import java.awt.dnd.peer.DragSourceContextPeer; import java.awt.dnd.peer.DragSourceContextPeer;
//import sun.awt.motif.MInputMethod; //import sun.awt.motif.MInputMethod;
import sun.awt.X11FontManager;
import sun.awt.X11GraphicsConfig; import sun.awt.X11GraphicsConfig;
import sun.awt.X11GraphicsEnvironment; import sun.awt.X11GraphicsEnvironment;
import sun.awt.XSettings; import sun.awt.XSettings;
...@@ -124,7 +125,7 @@ public class MToolkit extends UNIXToolkit implements Runnable { ...@@ -124,7 +125,7 @@ public class MToolkit extends UNIXToolkit implements Runnable {
* and when we know that MToolkit is the one that will be used, * and when we know that MToolkit is the one that will be used,
* since XToolkit doesn't need the X11 font path set * since XToolkit doesn't need the X11 font path set
*/ */
X11GraphicsEnvironment.setNativeFontPath(); X11FontManager.getInstance().setNativeFontPath();
motifdnd = ((Boolean)java.security.AccessController.doPrivileged( motifdnd = ((Boolean)java.security.AccessController.doPrivileged(
new GetBooleanAction("awt.dnd.motifdnd"))).booleanValue(); new GetBooleanAction("awt.dnd.motifdnd"))).booleanValue();
......
...@@ -41,11 +41,12 @@ import java.util.Scanner; ...@@ -41,11 +41,12 @@ import java.util.Scanner;
import sun.awt.FontConfiguration; import sun.awt.FontConfiguration;
import sun.awt.FontDescriptor; import sun.awt.FontDescriptor;
import sun.awt.SunToolkit; import sun.awt.SunToolkit;
import sun.awt.X11FontManager;
import sun.font.CompositeFontDescriptor; import sun.font.CompositeFontDescriptor;
import sun.font.FontManager; import sun.font.FontManager;
import sun.font.FontManager.FontConfigInfo; import sun.font.FontConfigManager.FontConfigInfo;
import sun.font.FontManager.FcCompFont; import sun.font.FontConfigManager.FcCompFont;
import sun.font.FontManager.FontConfigFont; import sun.font.FontConfigManager.FontConfigFont;
import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SunGraphicsEnvironment;
public class FcFontConfiguration extends FontConfiguration { public class FcFontConfiguration extends FontConfiguration {
...@@ -68,16 +69,16 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -68,16 +69,16 @@ public class FcFontConfiguration extends FontConfiguration {
private FcCompFont[] fcCompFonts = null; private FcCompFont[] fcCompFonts = null;
public FcFontConfiguration(SunGraphicsEnvironment environment) { public FcFontConfiguration(SunFontManager fm) {
super(environment); super(fm);
init(); init();
} }
/* This isn't called but is needed to satisfy super-class contract. */ /* This isn't called but is needed to satisfy super-class contract. */
public FcFontConfiguration(SunGraphicsEnvironment environment, public FcFontConfiguration(SunFontManager fm,
boolean preferLocaleFonts, boolean preferLocaleFonts,
boolean preferPropFonts) { boolean preferPropFonts) {
super(environment, preferLocaleFonts, preferPropFonts); super(fm, preferLocaleFonts, preferPropFonts);
init(); init();
} }
...@@ -89,24 +90,26 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -89,24 +90,26 @@ public class FcFontConfiguration extends FontConfiguration {
setFontConfiguration(); setFontConfiguration();
readFcInfo(); readFcInfo();
X11FontManager fm = X11FontManager.getInstance();
FontConfigManager fcm = fm.getFontConfigManager();
if (fcCompFonts == null) { if (fcCompFonts == null) {
fcCompFonts = FontManager.loadFontConfig(); fcCompFonts = fcm.loadFontConfig();
if (fcCompFonts != null) { if (fcCompFonts != null) {
try { try {
writeFcInfo(); writeFcInfo();
} catch (Exception e) { } catch (Exception e) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
Logger logger = Logger logger =
Logger.getLogger("sun.awt.FontConfiguration"); Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("Exception writing fcInfo " + e); logger.warning("Exception writing fcInfo " + e);
} }
} }
} else if (SunGraphicsEnvironment.debugFonts) { } else if (FontUtilities.debugFonts()) {
Logger logger = Logger.getLogger("sun.awt.FontConfiguration"); Logger logger = Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("Failed to get info from libfontconfig"); logger.warning("Failed to get info from libfontconfig");
} }
} else { } else {
FontManager.populateFontConfig(fcCompFonts); fcm.populateFontConfig(fcCompFonts);
} }
if (fcCompFonts == null) { if (fcCompFonts == null) {
...@@ -184,7 +187,9 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -184,7 +187,9 @@ public class FcFontConfiguration extends FontConfiguration {
@Override @Override
public String[] getPlatformFontNames() { public String[] getPlatformFontNames() {
HashSet<String> nameSet = new HashSet<String>(); HashSet<String> nameSet = new HashSet<String>();
FcCompFont[] fcCompFonts = FontManager.loadFontConfig(); X11FontManager fm = X11FontManager.getInstance();
FontConfigManager fcm = fm.getFontConfigManager();
FcCompFont[] fcCompFonts = fcm.loadFontConfig();
for (int i=0; i<fcCompFonts.length; i++) { for (int i=0; i<fcCompFonts.length; i++) {
for (int j=0; j<fcCompFonts[i].allFonts.length; j++) { for (int j=0; j<fcCompFonts[i].allFonts.length; j++) {
nameSet.add(fcCompFonts[i].allFonts[j].fontFile); nameSet.add(fcCompFonts[i].allFonts[j].fontFile);
...@@ -223,7 +228,9 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -223,7 +228,9 @@ public class FcFontConfiguration extends FontConfiguration {
@Override @Override
public CompositeFontDescriptor[] get2DCompositeFontInfo() { public CompositeFontDescriptor[] get2DCompositeFontInfo() {
FcCompFont[] fcCompFonts = FontManager.loadFontConfig(); X11FontManager fm = X11FontManager.getInstance();
FontConfigManager fcm = fm.getFontConfigManager();
FcCompFont[] fcCompFonts = fcm.loadFontConfig();
CompositeFontDescriptor[] result = CompositeFontDescriptor[] result =
new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES]; new CompositeFontDescriptor[NUM_FONTS * NUM_STYLES];
...@@ -321,7 +328,7 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -321,7 +328,7 @@ public class FcFontConfiguration extends FontConfiguration {
osVersion = getVersionString(f); osVersion = getVersionString(f);
} }
} catch (Exception e) { } catch (Exception e) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
Logger logger = Logger.getLogger("sun.awt.FontConfiguration"); Logger logger = Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("Exception identifying Linux distro."); logger.warning("Exception identifying Linux distro.");
} }
...@@ -356,7 +363,9 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -356,7 +363,9 @@ public class FcFontConfiguration extends FontConfiguration {
private void writeFcInfo() { private void writeFcInfo() {
Properties props = new Properties(); Properties props = new Properties();
props.setProperty("version", fileVersion); props.setProperty("version", fileVersion);
FontConfigInfo fcInfo = FontManager.getFontConfigInfo(); X11FontManager fm = X11FontManager.getInstance();
FontConfigManager fcm = fm.getFontConfigManager();
FontConfigInfo fcInfo = fcm.getFontConfigInfo();
props.setProperty("fcversion", Integer.toString(fcInfo.fcVersion)); props.setProperty("fcversion", Integer.toString(fcInfo.fcVersion));
if (fcInfo.cacheDirs != null) { if (fcInfo.cacheDirs != null) {
for (int i=0;i<fcInfo.cacheDirs.length;i++) { for (int i=0;i<fcInfo.cacheDirs.length;i++) {
...@@ -391,13 +400,13 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -391,13 +400,13 @@ public class FcFontConfiguration extends FontConfiguration {
"JDK Font Configuration Generated File: *Do Not Edit*"); "JDK Font Configuration Generated File: *Do Not Edit*");
fos.close(); fos.close();
boolean renamed = tempFile.renameTo(fcInfoFile); boolean renamed = tempFile.renameTo(fcInfoFile);
if (!renamed && SunGraphicsEnvironment.debugFonts) { if (!renamed && FontUtilities.debugFonts()) {
System.out.println("rename failed"); System.out.println("rename failed");
Logger logger = Logger.getLogger("sun.awt.FontConfiguration"); Logger logger = Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("Failed renaming file to "+ getFcInfoFile()); logger.warning("Failed renaming file to "+ getFcInfoFile());
} }
} catch (Exception e) { } catch (Exception e) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
Logger logger = Logger.getLogger("sun.awt.FontConfiguration"); Logger logger = Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("IOException writing to "+ getFcInfoFile()); logger.warning("IOException writing to "+ getFcInfoFile());
} }
...@@ -415,12 +424,14 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -415,12 +424,14 @@ public class FcFontConfiguration extends FontConfiguration {
return; return;
} }
Properties props = new Properties(); Properties props = new Properties();
X11FontManager fm = X11FontManager.getInstance();
FontConfigManager fcm = fm.getFontConfigManager();
try { try {
FileInputStream fis = new FileInputStream(fcFile); FileInputStream fis = new FileInputStream(fcFile);
props.load(fis); props.load(fis);
fis.close(); fis.close();
} catch (IOException e) { } catch (IOException e) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
Logger logger = Logger.getLogger("sun.awt.FontConfiguration"); Logger logger = Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("IOException reading from "+fcFile.toString()); logger.warning("IOException reading from "+fcFile.toString());
} }
...@@ -439,11 +450,11 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -439,11 +450,11 @@ public class FcFontConfiguration extends FontConfiguration {
try { try {
fcVersion = Integer.parseInt(fcVersionStr); fcVersion = Integer.parseInt(fcVersionStr);
if (fcVersion != 0 && if (fcVersion != 0 &&
fcVersion != FontManager.getFontConfigVersion()) { fcVersion != fcm.getFontConfigVersion()) {
return; return;
} }
} catch (Exception e) { } catch (Exception e) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
Logger logger = Logger logger =
Logger.getLogger("sun.awt.FontConfiguration"); Logger.getLogger("sun.awt.FontConfiguration");
logger.warning("Exception parsing version " + logger.warning("Exception parsing version " +
...@@ -509,7 +520,7 @@ public class FcFontConfiguration extends FontConfiguration { ...@@ -509,7 +520,7 @@ public class FcFontConfiguration extends FontConfiguration {
} }
fcCompFonts = fci; fcCompFonts = fci;
} catch (Throwable t) { } catch (Throwable t) {
if (SunGraphicsEnvironment.debugFonts) { if (FontUtilities.debugFonts()) {
Logger logger = Logger.getLogger("sun.awt.FontConfiguration"); Logger logger = Logger.getLogger("sun.awt.FontConfiguration");
logger.warning(t.toString()); logger.warning(t.toString());
} }
......
...@@ -242,7 +242,8 @@ public class NativeFont extends PhysicalFont { ...@@ -242,7 +242,8 @@ public class NativeFont extends PhysicalFont {
mapper = new NativeGlyphMapper(this); mapper = new NativeGlyphMapper(this);
} else { } else {
/* we need to delegate */ /* we need to delegate */
delegateFont = FontManager.getDefaultPhysicalFont(); SunFontManager fm = SunFontManager.getInstance();
delegateFont = fm.getDefaultPhysicalFont();
mapper = delegateFont.getMapper(); mapper = delegateFont.getMapper();
} }
} }
...@@ -254,7 +255,8 @@ public class NativeFont extends PhysicalFont { ...@@ -254,7 +255,8 @@ public class NativeFont extends PhysicalFont {
return new NativeStrike(this, desc); return new NativeStrike(this, desc);
} else { } else {
if (delegateFont == null) { if (delegateFont == null) {
delegateFont = FontManager.getDefaultPhysicalFont(); SunFontManager fm = SunFontManager.getInstance();
delegateFont = fm.getDefaultPhysicalFont();
} }
/* If no FileFont's are found, delegate font may be /* If no FileFont's are found, delegate font may be
* a NativeFont, so we need to avoid recursing here. * a NativeFont, so we need to avoid recursing here.
...@@ -314,7 +316,8 @@ public class NativeFont extends PhysicalFont { ...@@ -314,7 +316,8 @@ public class NativeFont extends PhysicalFont {
PhysicalFont getDelegateFont() { PhysicalFont getDelegateFont() {
if (delegateFont == null) { if (delegateFont == null) {
delegateFont = FontManager.getDefaultPhysicalFont(); SunFontManager fm = SunFontManager.getInstance();
delegateFont = fm.getDefaultPhysicalFont();
} }
return delegateFont; return delegateFont;
} }
......
...@@ -112,11 +112,12 @@ import java.awt.geom.NoninvertibleTransformException; ...@@ -112,11 +112,12 @@ import java.awt.geom.NoninvertibleTransformException;
double scale = Math.abs(desc.devTx.getScaleX()); double scale = Math.abs(desc.devTx.getScaleX());
pScalerContext = createScalerContext(nameBytes, ptSize, scale); pScalerContext = createScalerContext(nameBytes, ptSize, scale);
if (pScalerContext == 0L) { if (pScalerContext == 0L) {
FontManager.deRegisterBadFont(nativeFont); SunFontManager.getInstance().deRegisterBadFont(nativeFont);
pScalerContext = createNullScalerContext(); pScalerContext = createNullScalerContext();
numGlyphs = 0; numGlyphs = 0;
if (FontManager.logging) { if (FontUtilities.isLogging()) {
FontManager.logger.severe("Could not create native strike " + FontUtilities.getLogger()
.severe("Could not create native strike " +
new String(nameBytes)); new String(nameBytes));
} }
return; return;
...@@ -134,7 +135,7 @@ import java.awt.geom.NoninvertibleTransformException; ...@@ -134,7 +135,7 @@ import java.awt.geom.NoninvertibleTransformException;
private boolean usingIntGlyphImages() { private boolean usingIntGlyphImages() {
if (intGlyphImages != null) { if (intGlyphImages != null) {
return true; return true;
} else if (FontManager.longAddresses) { } else if (longAddresses) {
return false; return false;
} else { } else {
/* We could obtain minGlyphIndex and index relative to that /* We could obtain minGlyphIndex and index relative to that
...@@ -153,7 +154,7 @@ import java.awt.geom.NoninvertibleTransformException; ...@@ -153,7 +154,7 @@ import java.awt.geom.NoninvertibleTransformException;
} }
private long[] getLongGlyphImages() { private long[] getLongGlyphImages() {
if (longGlyphImages == null && FontManager.longAddresses) { if (longGlyphImages == null && longAddresses) {
/* We could obtain minGlyphIndex and index relative to that /* We could obtain minGlyphIndex and index relative to that
* if we need to save space. * if we need to save space.
......
...@@ -150,15 +150,26 @@ jboolean isDisplayLocal(JNIEnv *env) { ...@@ -150,15 +150,26 @@ jboolean isDisplayLocal(JNIEnv *env) {
static jboolean isLocalSet = False; static jboolean isLocalSet = False;
jboolean ret; jboolean ret;
if (isLocalSet) { if (! isLocalSet) {
return isLocal; jclass geCls = (*env)->FindClass(env, "java/awt/GraphicsEnvironment");
jmethodID getLocalGE = (*env)->GetStaticMethodID(env, geCls,
"getLocalGraphicsEnvironment",
"()Ljava/awt/GraphicsEnvironment;");
jobject ge = (*env)->CallStaticObjectMethod(env, geCls, getLocalGE);
jclass sgeCls = (*env)->FindClass(env,
"sun/java2d/SunGraphicsEnvironment");
if ((*env)->IsInstanceOf(env, ge, sgeCls)) {
jmethodID isDisplayLocal = (*env)->GetMethodID(env, sgeCls,
"isDisplayLocal",
"()Z");
isLocal = (*env)->CallBooleanMethod(env, ge, isDisplayLocal);
} else {
isLocal = True;
}
isLocalSet = True;
} }
isLocal = JNU_CallStaticMethodByName(env, NULL,
"sun/awt/X11GraphicsEnvironment",
"_isDisplayLocal",
"()Z").z;
isLocalSet = True;
return isLocal; return isLocal;
} }
...@@ -516,8 +527,8 @@ static char *getPlatformFontPathChars(JNIEnv *env, jboolean noType1) { ...@@ -516,8 +527,8 @@ static char *getPlatformFontPathChars(JNIEnv *env, jboolean noType1) {
return path; return path;
} }
JNIEXPORT jstring JNICALL Java_sun_font_FontManager_getFontPath JNIEXPORT jstring JNICALL Java_sun_awt_X11FontManager_getFontPath
(JNIEnv *env, jclass obj, jboolean noType1) { (JNIEnv *env, jobject thiz, jboolean noType1) {
jstring ret; jstring ret;
static char *ptr = NULL; /* retain result across calls */ static char *ptr = NULL; /* retain result across calls */
...@@ -564,7 +575,7 @@ static int shouldSetXFontPath(JNIEnv *env) { ...@@ -564,7 +575,7 @@ static int shouldSetXFontPath(JNIEnv *env) {
} }
#endif /* !HEADLESS */ #endif /* !HEADLESS */
JNIEXPORT void JNICALL Java_sun_font_FontManager_setNativeFontPath JNIEXPORT void JNICALL Java_sun_font_X11FontManager_setNativeFontPath
(JNIEnv *env, jclass obj, jstring theString) { (JNIEnv *env, jclass obj, jstring theString) {
#ifdef HEADLESS #ifdef HEADLESS
return; return;
...@@ -592,21 +603,6 @@ JNIEXPORT void JNICALL Java_sun_font_FontManager_setNativeFontPath ...@@ -592,21 +603,6 @@ JNIEXPORT void JNICALL Java_sun_font_FontManager_setNativeFontPath
#endif #endif
} }
/* This isn't yet used on unix, the implementation is added since shared
* code calls this method in preparation for future use.
*/
/* Obtain all the fontname -> filename mappings.
* This is called once and the results returned to Java code which can
* use it for lookups to reduce or avoid the need to search font files.
*/
JNIEXPORT void JNICALL
Java_sun_font_FontManager_populateFontFileNameMap
(JNIEnv *env, jclass obj, jobject fontToFileMap,
jobject fontToFamilyMap, jobject familyToFontListMap, jobject locale)
{
return;
}
#include <dlfcn.h> #include <dlfcn.h>
#ifndef __linux__ /* i.e. is solaris */ #ifndef __linux__ /* i.e. is solaris */
#include <link.h> #include <link.h>
...@@ -865,7 +861,7 @@ static char **getFontConfigLocations() { ...@@ -865,7 +861,7 @@ static char **getFontConfigLocations() {
#define TEXT_AA_LCD_VBGR 7 #define TEXT_AA_LCD_VBGR 7
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_sun_font_FontManager_getFontConfigAASettings Java_sun_font_FontConfigManager_getFontConfigAASettings
(JNIEnv *env, jclass obj, jstring localeStr, jstring fcNameStr) { (JNIEnv *env, jclass obj, jstring localeStr, jstring fcNameStr) {
FcNameParseFuncType FcNameParse; FcNameParseFuncType FcNameParse;
...@@ -975,7 +971,7 @@ Java_sun_font_FontManager_getFontConfigAASettings ...@@ -975,7 +971,7 @@ Java_sun_font_FontManager_getFontConfigAASettings
} }
JNIEXPORT jint JNICALL JNIEXPORT jint JNICALL
Java_sun_font_FontManager_getFontConfigVersion Java_sun_font_FontConfigManager_getFontConfigVersion
(JNIEnv *env, jclass obj) { (JNIEnv *env, jclass obj) {
void* libfontconfig; void* libfontconfig;
...@@ -1000,7 +996,7 @@ Java_sun_font_FontManager_getFontConfigVersion ...@@ -1000,7 +996,7 @@ Java_sun_font_FontManager_getFontConfigVersion
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_font_FontManager_getFontConfig Java_sun_font_FontConfigManager_getFontConfig
(JNIEnv *env, jclass obj, jstring localeStr, jobject fcInfoObj, (JNIEnv *env, jclass obj, jstring localeStr, jobject fcInfoObj,
jobjectArray fcCompFontArray, jboolean includeFallbacks) { jobjectArray fcCompFontArray, jboolean includeFallbacks) {
...@@ -1034,11 +1030,11 @@ Java_sun_font_FontManager_getFontConfig ...@@ -1034,11 +1030,11 @@ Java_sun_font_FontManager_getFontConfig
char* debugMinGlyphsStr = getenv("J2D_DEBUG_MIN_GLYPHS"); char* debugMinGlyphsStr = getenv("J2D_DEBUG_MIN_GLYPHS");
jclass fcInfoClass = jclass fcInfoClass =
(*env)->FindClass(env, "sun/font/FontManager$FontConfigInfo"); (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigInfo");
jclass fcCompFontClass = jclass fcCompFontClass =
(*env)->FindClass(env, "sun/font/FontManager$FcCompFont"); (*env)->FindClass(env, "sun/font/FontConfigManager$FcCompFont");
jclass fcFontClass = jclass fcFontClass =
(*env)->FindClass(env, "sun/font/FontManager$FontConfigFont"); (*env)->FindClass(env, "sun/font/FontConfigManager$FontConfigFont");
if (fcInfoObj == NULL || fcCompFontArray == NULL || fcInfoClass == NULL || if (fcInfoObj == NULL || fcCompFontArray == NULL || fcInfoClass == NULL ||
fcCompFontClass == NULL || fcFontClass == NULL) { fcCompFontClass == NULL || fcFontClass == NULL) {
...@@ -1054,11 +1050,11 @@ Java_sun_font_FontManager_getFontConfig ...@@ -1054,11 +1050,11 @@ Java_sun_font_FontManager_getFontConfig
"fcName", "Ljava/lang/String;"); "fcName", "Ljava/lang/String;");
fcFirstFontID = fcFirstFontID =
(*env)->GetFieldID(env, fcCompFontClass, "firstFont", (*env)->GetFieldID(env, fcCompFontClass, "firstFont",
"Lsun/font/FontManager$FontConfigFont;"); "Lsun/font/FontConfigManager$FontConfigFont;");
fcAllFontsID = fcAllFontsID =
(*env)->GetFieldID(env, fcCompFontClass, "allFonts", (*env)->GetFieldID(env, fcCompFontClass, "allFonts",
"[Lsun/font/FontManager$FontConfigFont;"); "[Lsun/font/FontConfigManager$FontConfigFont;");
fcFontCons = (*env)->GetMethodID(env, fcFontClass, "<init>", "()V"); fcFontCons = (*env)->GetMethodID(env, fcFontClass, "<init>", "()V");
......
...@@ -43,6 +43,8 @@ import sun.awt.windows.WFontConfiguration; ...@@ -43,6 +43,8 @@ import sun.awt.windows.WFontConfiguration;
import sun.awt.windows.WPrinterJob; import sun.awt.windows.WPrinterJob;
import sun.awt.windows.WToolkit; import sun.awt.windows.WToolkit;
import sun.font.FontManager; import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.SunFontManager;
import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SunGraphicsEnvironment;
import sun.java2d.SurfaceManagerFactory; import sun.java2d.SurfaceManagerFactory;
import sun.java2d.WindowsSurfaceManagerFactory; import sun.java2d.WindowsSurfaceManagerFactory;
...@@ -68,7 +70,6 @@ public class Win32GraphicsEnvironment ...@@ -68,7 +70,6 @@ public class Win32GraphicsEnvironment
// setup flags before initializing native layer // setup flags before initializing native layer
WindowsFlags.initFlags(); WindowsFlags.initFlags();
initDisplayWrapper(); initDisplayWrapper();
eudcFontFileName = getEUDCFontFile();
// Install correct surface manager factory. // Install correct surface manager factory.
SurfaceManagerFactory.setInstance(new WindowsSurfaceManagerFactory()); SurfaceManagerFactory.setInstance(new WindowsSurfaceManagerFactory());
...@@ -211,14 +212,6 @@ public class Win32GraphicsEnvironment ...@@ -211,14 +212,6 @@ public class Win32GraphicsEnvironment
* ----END DISPLAY CHANGE SUPPORT---- * ----END DISPLAY CHANGE SUPPORT----
*/ */
/* Used on Windows to obtain from the windows registry the name
* of a file containing the system EUFC font. If running in one of
* the locales for which this applies, and one is defined, the font
* defined by this file is appended to all composite fonts as a
* fallback component.
*/
private static native String getEUDCFontFile();
/** /**
* Whether registerFontFile expects absolute or relative * Whether registerFontFile expects absolute or relative
* font file names. * font file names.
...@@ -227,114 +220,6 @@ public class Win32GraphicsEnvironment ...@@ -227,114 +220,6 @@ public class Win32GraphicsEnvironment
return false; return false;
} }
/* Unlike the shared code version, this expects a base file name -
* not a full path name.
* The font configuration file has base file names and the FontConfiguration
* class reports these back to the GraphicsEnvironment, so these
* are the componentFileNames of CompositeFonts.
*/
protected void registerFontFile(String fontFileName, String[] nativeNames,
int fontRank, boolean defer) {
// REMIND: case compare depends on platform
if (registeredFontFiles.contains(fontFileName)) {
return;
}
registeredFontFiles.add(fontFileName);
int fontFormat;
if (ttFilter.accept(null, fontFileName)) {
fontFormat = FontManager.FONTFORMAT_TRUETYPE;
} else if (t1Filter.accept(null, fontFileName)) {
fontFormat = FontManager.FONTFORMAT_TYPE1;
} else {
/* on windows we don't use/register native fonts */
return;
}
if (fontPath == null) {
fontPath = getPlatformFontPath(noType1Font);
}
/* Look in the JRE font directory first.
* This is playing it safe as we would want to find fonts in the
* JRE font directory ahead of those in the system directory
*/
String tmpFontPath = jreFontDirName+File.pathSeparator+fontPath;
StringTokenizer parser = new StringTokenizer(tmpFontPath,
File.pathSeparator);
boolean found = false;
try {
while (!found && parser.hasMoreTokens()) {
String newPath = parser.nextToken();
boolean ujr = newPath.equals(jreFontDirName);
File theFile = new File(newPath, fontFileName);
if (theFile.canRead()) {
found = true;
String path = theFile.getAbsolutePath();
if (defer) {
FontManager.registerDeferredFont(fontFileName, path,
nativeNames,
fontFormat, ujr,
fontRank);
} else {
FontManager.registerFontFile(path, nativeNames,
fontFormat, ujr,
fontRank);
}
break;
}
}
} catch (NoSuchElementException e) {
System.err.println(e);
}
if (!found) {
addToMissingFontFileList(fontFileName);
}
}
/* register only TrueType/OpenType fonts
* Because these need to be registed just for use when printing,
* we defer the actual registration and the static initialiser
* for the printing class makes the call to registerJREFontsForPrinting()
*/
static String fontsForPrinting = null;
protected void registerJREFontsWithPlatform(String pathName) {
fontsForPrinting = pathName;
}
public static void registerJREFontsForPrinting() {
final String pathName;
synchronized (Win32GraphicsEnvironment.class) {
GraphicsEnvironment.getLocalGraphicsEnvironment();
if (fontsForPrinting == null) {
return;
}
pathName = fontsForPrinting;
fontsForPrinting = null;
}
java.security.AccessController.doPrivileged(
new java.security.PrivilegedAction() {
public Object run() {
File f1 = new File(pathName);
String[] ls = f1.list(new TTFilter());
if (ls == null) {
return null;
}
for (int i=0; i <ls.length; i++ ) {
File fontFile = new File(f1, ls[i]);
registerFontWithPlatform(fontFile.getAbsolutePath());
}
return null;
}
});
}
protected static native void registerFontWithPlatform(String fontName);
protected static native void deRegisterFontWithPlatform(String fontName);
protected GraphicsDevice makeScreenDevice(int screennum) { protected GraphicsDevice makeScreenDevice(int screennum) {
GraphicsDevice device = null; GraphicsDevice device = null;
if (WindowsFlags.isD3DEnabled()) { if (WindowsFlags.isD3DEnabled()) {
...@@ -348,7 +233,7 @@ public class Win32GraphicsEnvironment ...@@ -348,7 +233,7 @@ public class Win32GraphicsEnvironment
// Implements SunGraphicsEnvironment.createFontConfiguration. // Implements SunGraphicsEnvironment.createFontConfiguration.
protected FontConfiguration createFontConfiguration() { protected FontConfiguration createFontConfiguration() {
FontConfiguration fc = new WFontConfiguration(this); FontConfiguration fc = new WFontConfiguration(SunFontManager.getInstance());
fc.init(); fc.init();
return fc; return fc;
} }
...@@ -356,7 +241,12 @@ public class Win32GraphicsEnvironment ...@@ -356,7 +241,12 @@ public class Win32GraphicsEnvironment
public FontConfiguration createFontConfiguration(boolean preferLocaleFonts, public FontConfiguration createFontConfiguration(boolean preferLocaleFonts,
boolean preferPropFonts) { boolean preferPropFonts) {
return new WFontConfiguration(this, preferLocaleFonts,preferPropFonts); return new WFontConfiguration(SunFontManager.getInstance(),
preferLocaleFonts,preferPropFonts);
}
public boolean isDisplayLocal() {
return true;
} }
@Override @Override
...@@ -394,11 +284,6 @@ public class Win32GraphicsEnvironment ...@@ -394,11 +284,6 @@ public class Win32GraphicsEnvironment
isDWMCompositionEnabled = enabled; isDWMCompositionEnabled = enabled;
} }
@Override
public boolean isDisplayLocal() {
return true;
}
/** /**
* Used to find out if the OS is Windows Vista or later. * Used to find out if the OS is Windows Vista or later.
* *
......
...@@ -29,6 +29,8 @@ import java.util.HashMap; ...@@ -29,6 +29,8 @@ import java.util.HashMap;
import java.util.Hashtable; import java.util.Hashtable;
import sun.awt.FontDescriptor; import sun.awt.FontDescriptor;
import sun.awt.FontConfiguration; import sun.awt.FontConfiguration;
import sun.font.FontManager;
import sun.font.SunFontManager;
import sun.java2d.SunGraphicsEnvironment; import sun.java2d.SunGraphicsEnvironment;
import java.nio.charset.*; import java.nio.charset.*;
...@@ -37,16 +39,16 @@ public class WFontConfiguration extends FontConfiguration { ...@@ -37,16 +39,16 @@ public class WFontConfiguration extends FontConfiguration {
// whether compatibility fallbacks for TimesRoman and Co. are used // whether compatibility fallbacks for TimesRoman and Co. are used
private boolean useCompatibilityFallbacks; private boolean useCompatibilityFallbacks;
public WFontConfiguration(SunGraphicsEnvironment environment) { public WFontConfiguration(SunFontManager fm) {
super(environment); super(fm);
useCompatibilityFallbacks = "windows-1252".equals(encoding); useCompatibilityFallbacks = "windows-1252".equals(encoding);
initTables(encoding); initTables(encoding);
} }
public WFontConfiguration(SunGraphicsEnvironment environment, public WFontConfiguration(SunFontManager fm,
boolean preferLocaleFonts, boolean preferLocaleFonts,
boolean preferPropFonts) { boolean preferPropFonts) {
super(environment, preferLocaleFonts, preferPropFonts); super(fm, preferLocaleFonts, preferPropFonts);
useCompatibilityFallbacks = "windows-1252".equals(encoding); useCompatibilityFallbacks = "windows-1252".equals(encoding);
} }
......
...@@ -98,6 +98,8 @@ import javax.print.attribute.standard.PageRanges; ...@@ -98,6 +98,8 @@ import javax.print.attribute.standard.PageRanges;
import javax.print.attribute.Size2DSyntax; import javax.print.attribute.Size2DSyntax;
import javax.print.StreamPrintService; import javax.print.StreamPrintService;
import sun.awt.Win32FontManager;
import sun.print.RasterPrinterJob; import sun.print.RasterPrinterJob;
import sun.print.SunAlternateMedia; import sun.print.SunAlternateMedia;
import sun.print.SunPageSelection; import sun.print.SunPageSelection;
...@@ -359,7 +361,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget { ...@@ -359,7 +361,7 @@ public class WPrinterJob extends RasterPrinterJob implements DisposerTarget {
initIDs(); initIDs();
Win32GraphicsEnvironment.registerJREFontsForPrinting(); Win32FontManager.registerJREFontsForPrinting();
} }
/* Constructors */ /* Constructors */
......
...@@ -60,6 +60,9 @@ import java.util.Properties; ...@@ -60,6 +60,9 @@ import java.util.Properties;
import java.util.logging.*; import java.util.logging.*;
import sun.font.FontManager;
import sun.font.FontManagerFactory;
import sun.font.SunFontManager;
import sun.misc.PerformanceLogger; import sun.misc.PerformanceLogger;
public class WToolkit extends SunToolkit implements Runnable { public class WToolkit extends SunToolkit implements Runnable {
...@@ -572,8 +575,11 @@ public class WToolkit extends SunToolkit implements Runnable { ...@@ -572,8 +575,11 @@ public class WToolkit extends SunToolkit implements Runnable {
public FontMetrics getFontMetrics(Font font) { public FontMetrics getFontMetrics(Font font) {
// REMIND: platform font flag should be removed post-merlin. // This is an unsupported hack, but left in for a customer.
if (sun.font.FontManager.usePlatformFontMetrics()) { // Do not remove.
FontManager fm = FontManagerFactory.getInstance();
if (fm instanceof SunFontManager
&& ((SunFontManager) fm).usePlatformFontMetrics()) {
return WFontMetrics.getFontMetrics(font); return WFontMetrics.getFontMetrics(font);
} }
return super.getFontMetrics(font); return super.getFontMetrics(font);
......
...@@ -28,12 +28,12 @@ ...@@ -28,12 +28,12 @@
#include <jni.h> #include <jni.h>
#include <jni_util.h> #include <jni_util.h>
#include <sun_font_FontManager.h> #include <sun_awt_Win32FontManager.h>
#define BSIZE (max(512, MAX_PATH+1)) #define BSIZE (max(512, MAX_PATH+1))
JNIEXPORT jstring JNICALL Java_sun_font_FontManager_getFontPath(JNIEnv *env, jclass obj, jboolean noType1) JNIEXPORT jstring JNICALL Java_sun_awt_Win32FontManager_getFontPath(JNIEnv *env, jobject thiz, jboolean noType1)
{ {
char windir[BSIZE]; char windir[BSIZE];
char sysdir[BSIZE]; char sysdir[BSIZE];
...@@ -68,15 +68,6 @@ JNIEXPORT jstring JNICALL Java_sun_font_FontManager_getFontPath(JNIEnv *env, jcl ...@@ -68,15 +68,6 @@ JNIEXPORT jstring JNICALL Java_sun_font_FontManager_getFontPath(JNIEnv *env, jcl
return JNU_NewStringPlatform(env, fontpath); return JNU_NewStringPlatform(env, fontpath);
} }
/* This isn't used on windows, the implementation is added in case shared
* code accidentally calls this method to prevent an UnsatisfiedLinkError
*/
JNIEXPORT void JNICALL Java_sun_font_FontManager_setNativeFontPath
(JNIEnv *env, jclass obj, jstring theString)
{
return;
}
/* The code below is used to obtain information from the windows font APIS /* The code below is used to obtain information from the windows font APIS
* and registry on which fonts are available and what font files hold those * and registry on which fonts are available and what font files hold those
* fonts. The results are used to speed font lookup. * fonts. The results are used to speed font lookup.
...@@ -546,7 +537,7 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap, ...@@ -546,7 +537,7 @@ static void registerFontW(GdiFontMapInfo *fmi, jobject fontToFileMap,
* use it for lookups to reduce or avoid the need to search font files. * use it for lookups to reduce or avoid the need to search font files.
*/ */
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_font_FontManager_populateFontFileNameMap Java_sun_awt_Win32FontManager_populateFontFileNameMap0
(JNIEnv *env, jclass obj, jobject fontToFileMap, (JNIEnv *env, jclass obj, jobject fontToFileMap,
jobject fontToFamilyMap, jobject familyToFontListMap, jobject locale) jobject fontToFamilyMap, jobject familyToFontListMap, jobject locale)
{ {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册