author | ohair |
Tue, 28 Dec 2010 15:53:50 -0800 | |
changeset 7668 | d4a77089c587 |
parent 3938 | ef327bd847c0 |
child 7932 | f4ec6ef455c3 |
permissions | -rw-r--r-- |
3929
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
1 |
package sun.awt; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
2 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
3 |
import java.awt.GraphicsEnvironment; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
4 |
import java.io.BufferedReader; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
5 |
import java.io.File; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
6 |
import java.io.FileReader; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
7 |
import java.io.IOException; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
8 |
import java.io.StreamTokenizer; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
9 |
import java.util.HashMap; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
10 |
import java.util.HashSet; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
11 |
import java.util.Locale; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
12 |
import java.util.Map; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
13 |
import java.util.NoSuchElementException; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
14 |
import java.util.StringTokenizer; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
15 |
import java.util.Vector; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
16 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
17 |
import javax.swing.plaf.FontUIResource; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
18 |
import sun.awt.motif.MFontConfiguration; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
19 |
import sun.font.CompositeFont; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
20 |
import sun.font.FontManager; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
21 |
import sun.font.SunFontManager; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
22 |
import sun.font.FontConfigManager; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
23 |
import sun.font.FcFontConfiguration; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
24 |
import sun.font.FontAccess; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
25 |
import sun.font.FontUtilities; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
26 |
import sun.font.NativeFont; |
3938
ef327bd847c0
6879044: Eliminate the dependency on logging from the AWT/2D/Swing classes
mchung
parents:
3929
diff
changeset
|
27 |
import sun.util.logging.PlatformLogger; |
3929
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
28 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
29 |
/** |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
30 |
* The X11 implementation of {@link FontManager}. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
31 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
32 |
public class X11FontManager extends SunFontManager { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
33 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
34 |
// constants identifying XLFD and font ID fields |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
35 |
private static final int FOUNDRY_FIELD = 1; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
36 |
private static final int FAMILY_NAME_FIELD = 2; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
37 |
private static final int WEIGHT_NAME_FIELD = 3; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
38 |
private static final int SLANT_FIELD = 4; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
39 |
private static final int SETWIDTH_NAME_FIELD = 5; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
40 |
private static final int ADD_STYLE_NAME_FIELD = 6; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
41 |
private static final int PIXEL_SIZE_FIELD = 7; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
42 |
private static final int POINT_SIZE_FIELD = 8; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
43 |
private static final int RESOLUTION_X_FIELD = 9; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
44 |
private static final int RESOLUTION_Y_FIELD = 10; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
45 |
private static final int SPACING_FIELD = 11; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
46 |
private static final int AVERAGE_WIDTH_FIELD = 12; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
47 |
private static final int CHARSET_REGISTRY_FIELD = 13; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
48 |
private static final int CHARSET_ENCODING_FIELD = 14; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
49 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
50 |
/* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
51 |
* fontNameMap is a map from a fontID (which is a substring of an XLFD like |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
52 |
* "-monotype-arial-bold-r-normal-iso8859-7") |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
53 |
* to font file path like |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
54 |
* /usr/openwin/lib/locale/iso_8859_7/X11/fonts/TrueType/ArialBoldItalic.ttf |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
55 |
* It's used in a couple of methods like |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
56 |
* getFileNameFomPlatformName(..) to help locate the font file. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
57 |
* We use this substring of a full XLFD because the font configuration files |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
58 |
* define the XLFDs in a way that's easier to make into a request. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
59 |
* E.g., the -0-0-0-0-p-0- reported by X is -*-%d-*-*-p-*- in the font |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
60 |
* configuration files. We need to remove that part for comparisons. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
61 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
62 |
private static Map fontNameMap = new HashMap(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
63 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
64 |
/* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
65 |
* xlfdMap is a map from a platform path like |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
66 |
* /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-GothicB.ttf to an XLFD like |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
67 |
* "-ricoh-hg gothic b-medium-r-normal--0-0-0-0-m-0-jisx0201.1976-0" |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
68 |
* Because there may be multiple native names, because the font is used |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
69 |
* to support multiple X encodings for example, the value of an entry in |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
70 |
* this map is always a vector where we store all the native names. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
71 |
* For fonts which we don't understand the key isn't a pathname, its |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
72 |
* the full XLFD string like :- |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
73 |
* "-ricoh-hg gothic b-medium-r-normal--0-0-0-0-m-0-jisx0201.1976-0" |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
74 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
75 |
private static Map xlfdMap = new HashMap(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
76 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
77 |
/* xFontDirsMap is also a map from a font ID to a font filepath. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
78 |
* The difference from fontNameMap is just that it does not have |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
79 |
* resolved symbolic links. Normally this is not interesting except |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
80 |
* that we need to know the directory in which a font was found to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
81 |
* add it to the X font server path, since although the files may |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
82 |
* be linked, the fonts.dir is different and specific to the encoding |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
83 |
* handled by that directory. This map is nulled out after use to free |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
84 |
* heap space. If the optimal path is taken, such that all fonts in |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
85 |
* font configuration files are referenced by filename, then the font |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
86 |
* dir can be directly derived as its parent directory. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
87 |
* If a font is used by two XLFDs, each corresponding to a different |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
88 |
* X11 font directory, then precautions must be taken to include both |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
89 |
* directories. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
90 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
91 |
private static Map xFontDirsMap; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
92 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
93 |
/* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
94 |
* This is the set of font directories needed to be on the X font path |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
95 |
* to enable AWT heavyweights to find all of the font configuration fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
96 |
* It is populated by : |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
97 |
* - awtfontpath entries in the fontconfig.properties |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
98 |
* - parent directories of "core" fonts used in the fontconfig.properties |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
99 |
* - looking up font dirs in the xFontDirsMap where the key is a fontID |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
100 |
* (cut down version of the XLFD read from the font configuration file). |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
101 |
* This set is nulled out after use to free heap space. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
102 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
103 |
private static HashSet<String> fontConfigDirs = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
104 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
105 |
/* These maps are used on Linux where we reference the Lucida oblique |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
106 |
* fonts in fontconfig files even though they aren't in the standard |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
107 |
* font directory. This explicitly remaps the XLFDs for these to the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
108 |
* correct base font. This is needed to prevent composite fonts from |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
109 |
* defaulting to the Lucida Sans which is a bad substitute for the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
110 |
* monospaced Lucida Sans Typewriter. Also these maps prevent the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
111 |
* JRE from doing wasted work at start up. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
112 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
113 |
HashMap<String, String> oblmap = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
114 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
115 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
116 |
/* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
117 |
* Used to eliminate redundant work. When a font directory is |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
118 |
* registered it added to this list. Subsequent registrations for the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
119 |
* same directory can then be skipped by checking this Map. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
120 |
* Access to this map is not synchronised here since creation |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
121 |
* of the singleton GE instance is already synchronised and that is |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
122 |
* the only code path that accesses this map. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
123 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
124 |
private static HashMap registeredDirs = new HashMap(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
125 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
126 |
/* Array of directories to be added to the X11 font path. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
127 |
* Used by static method called from Toolkits which use X11 fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
128 |
* Specifically this means MToolkit |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
129 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
130 |
private static String[] fontdirs = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
131 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
132 |
private static String[] defaultPlatformFont = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
133 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
134 |
private FontConfigManager fcManager = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
135 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
136 |
public static X11FontManager getInstance() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
137 |
return (X11FontManager) SunFontManager.getInstance(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
138 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
139 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
140 |
/** |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
141 |
* Takes family name property in the following format: |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
142 |
* "-linotype-helvetica-medium-r-normal-sans-*-%d-*-*-p-*-iso8859-1" |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
143 |
* and returns the name of the corresponding physical font. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
144 |
* This code is used to resolve font configuration fonts, and expects |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
145 |
* only to get called for these fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
146 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
147 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
148 |
public String getFileNameFromPlatformName(String platName) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
149 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
150 |
/* If the FontConfig file doesn't use xlfds, or its |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
151 |
* FcFontConfiguration, this may be already a file name. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
152 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
153 |
if (platName.startsWith("/")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
154 |
return platName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
155 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
156 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
157 |
String fileName = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
158 |
String fontID = specificFontIDForName(platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
159 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
160 |
/* If the font filename has been explicitly assigned in the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
161 |
* font configuration file, use it. This avoids accessing |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
162 |
* the wrong fonts on Linux, where different fonts (some |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
163 |
* of which may not be usable by 2D) may share the same |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
164 |
* specific font ID. It may also speed up the lookup. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
165 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
166 |
fileName = super.getFileNameFromPlatformName(platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
167 |
if (fileName != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
168 |
if (isHeadless() && fileName.startsWith("-")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
169 |
/* if it's headless, no xlfd should be used */ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
170 |
return null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
171 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
172 |
if (fileName.startsWith("/")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
173 |
/* If a path is assigned in the font configuration file, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
174 |
* it is required that the config file also specify using the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
175 |
* new awtfontpath key the X11 font directories |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
176 |
* which must be added to the X11 font path to support |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
177 |
* AWT access to that font. For that reason we no longer |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
178 |
* have code here to add the parent directory to the list |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
179 |
* of font config dirs, since the parent directory may not |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
180 |
* be sufficient if fonts are symbolically linked to a |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
181 |
* different directory. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
182 |
* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
183 |
* Add this XLFD (platform name) to the list of known |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
184 |
* ones for this file. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
185 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
186 |
Vector xVal = (Vector) xlfdMap.get(fileName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
187 |
if (xVal == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
188 |
/* Try to be robust on Linux distros which move fonts |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
189 |
* around by verifying that the fileName represents a |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
190 |
* file that exists. If it doesn't, set it to null |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
191 |
* to trigger a search. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
192 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
193 |
if (getFontConfiguration().needToSearchForFile(fileName)) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
194 |
fileName = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
195 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
196 |
if (fileName != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
197 |
xVal = new Vector(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
198 |
xVal.add(platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
199 |
xlfdMap.put(fileName, xVal); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
200 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
201 |
} else { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
202 |
if (!xVal.contains(platName)) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
203 |
xVal.add(platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
204 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
205 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
206 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
207 |
if (fileName != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
208 |
fontNameMap.put(fontID, fileName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
209 |
return fileName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
210 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
211 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
212 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
213 |
if (fontID != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
214 |
fileName = (String)fontNameMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
215 |
/* On Linux check for the Lucida Oblique fonts */ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
216 |
if (fileName == null && FontUtilities.isLinux && !isOpenJDK()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
217 |
if (oblmap == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
218 |
initObliqueLucidaFontMap(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
219 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
220 |
String oblkey = getObliqueLucidaFontID(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
221 |
if (oblkey != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
222 |
fileName = oblmap.get(oblkey); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
223 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
224 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
225 |
if (fontPath == null && |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
226 |
(fileName == null || !fileName.startsWith("/"))) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
227 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
228 |
FontUtilities.getLogger() |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
229 |
.warning("** Registering all font paths because " + |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
230 |
"can't find file for " + platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
231 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
232 |
fontPath = getPlatformFontPath(noType1Font); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
233 |
registerFontDirs(fontPath); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
234 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
235 |
FontUtilities.getLogger() |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
236 |
.warning("** Finished registering all font paths"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
237 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
238 |
fileName = (String)fontNameMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
239 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
240 |
if (fileName == null && !isHeadless()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
241 |
/* Query X11 directly to see if this font is available |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
242 |
* as a native font. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
243 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
244 |
fileName = getX11FontName(platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
245 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
246 |
if (fileName == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
247 |
fontID = switchFontIDForName(platName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
248 |
fileName = (String)fontNameMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
249 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
250 |
if (fileName != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
251 |
fontNameMap.put(fontID, fileName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
252 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
253 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
254 |
return fileName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
255 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
256 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
257 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
258 |
protected String[] getNativeNames(String fontFileName, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
259 |
String platformName) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
260 |
Vector nativeNames; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
261 |
if ((nativeNames=(Vector)xlfdMap.get(fontFileName))==null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
262 |
if (platformName == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
263 |
return null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
264 |
} else { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
265 |
/* back-stop so that at least the name used in the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
266 |
* font configuration file is known as a native name |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
267 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
268 |
String []natNames = new String[1]; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
269 |
natNames[0] = platformName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
270 |
return natNames; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
271 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
272 |
} else { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
273 |
int len = nativeNames.size(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
274 |
return (String[])nativeNames.toArray(new String[len]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
275 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
276 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
277 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
278 |
/* NOTE: this method needs to be executed in a privileged context. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
279 |
* The superclass constructor which is the primary caller of |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
280 |
* this method executes entirely in such a context. Additionally |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
281 |
* the loadFonts() method does too. So all should be well. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
282 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
283 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
284 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
285 |
protected void registerFontDir(String path) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
286 |
/* fonts.dir file format looks like :- |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
287 |
* 47 |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
288 |
* Arial.ttf -monotype-arial-regular-r-normal--0-0-0-0-p-0-iso8859-1 |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
289 |
* Arial-Bold.ttf -monotype-arial-bold-r-normal--0-0-0-0-p-0-iso8859-1 |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
290 |
* ... |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
291 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
292 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
293 |
FontUtilities.getLogger().info("ParseFontDir " + path); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
294 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
295 |
File fontsDotDir = new File(path + File.separator + "fonts.dir"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
296 |
FileReader fr = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
297 |
try { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
298 |
if (fontsDotDir.canRead()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
299 |
fr = new FileReader(fontsDotDir); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
300 |
BufferedReader br = new BufferedReader(fr, 8192); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
301 |
StreamTokenizer st = new StreamTokenizer(br); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
302 |
st.eolIsSignificant(true); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
303 |
int ttype = st.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
304 |
if (ttype == StreamTokenizer.TT_NUMBER) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
305 |
int numEntries = (int)st.nval; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
306 |
ttype = st.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
307 |
if (ttype == StreamTokenizer.TT_EOL) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
308 |
st.resetSyntax(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
309 |
st.wordChars(32, 127); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
310 |
st.wordChars(128 + 32, 255); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
311 |
st.whitespaceChars(0, 31); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
312 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
313 |
for (int i=0; i < numEntries; i++) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
314 |
ttype = st.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
315 |
if (ttype == StreamTokenizer.TT_EOF) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
316 |
break; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
317 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
318 |
if (ttype != StreamTokenizer.TT_WORD) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
319 |
break; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
320 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
321 |
int breakPos = st.sval.indexOf(' '); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
322 |
if (breakPos <= 0) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
323 |
/* On TurboLinux 8.0 a fonts.dir file had |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
324 |
* a line with integer value "24" which |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
325 |
* appeared to be the number of remaining |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
326 |
* entries in the file. This didn't add to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
327 |
* the value on the first line of the file. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
328 |
* Seemed like XFree86 didn't like this line |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
329 |
* much either. It failed to parse the file. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
330 |
* Ignore lines like this completely, and |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
331 |
* don't let them count as an entry. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
332 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
333 |
numEntries++; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
334 |
ttype = st.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
335 |
if (ttype != StreamTokenizer.TT_EOL) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
336 |
break; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
337 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
338 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
339 |
continue; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
340 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
341 |
if (st.sval.charAt(0) == '!') { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
342 |
/* TurboLinux 8.0 comment line: ignore. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
343 |
* can't use st.commentChar('!') to just |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
344 |
* skip because this line mustn't count |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
345 |
* against numEntries. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
346 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
347 |
numEntries++; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
348 |
ttype = st.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
349 |
if (ttype != StreamTokenizer.TT_EOL) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
350 |
break; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
351 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
352 |
continue; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
353 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
354 |
String fileName = st.sval.substring(0, breakPos); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
355 |
/* TurboLinux 8.0 uses some additional syntax to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
356 |
* indicate algorithmic styling values. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
357 |
* Ignore ':' separated files at the beginning |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
358 |
* of the fileName |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
359 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
360 |
int lastColon = fileName.lastIndexOf(':'); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
361 |
if (lastColon > 0) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
362 |
if (lastColon+1 >= fileName.length()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
363 |
continue; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
364 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
365 |
fileName = fileName.substring(lastColon+1); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
366 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
367 |
String fontPart = st.sval.substring(breakPos+1); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
368 |
String fontID = specificFontIDForName(fontPart); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
369 |
String sVal = (String) fontNameMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
370 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
371 |
if (FontUtilities.debugFonts()) { |
3938
ef327bd847c0
6879044: Eliminate the dependency on logging from the AWT/2D/Swing classes
mchung
parents:
3929
diff
changeset
|
372 |
PlatformLogger logger = FontUtilities.getLogger(); |
3929
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
373 |
logger.info("file=" + fileName + |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
374 |
" xlfd=" + fontPart); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
375 |
logger.info("fontID=" + fontID + |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
376 |
" sVal=" + sVal); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
377 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
378 |
String fullPath = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
379 |
try { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
380 |
File file = new File(path,fileName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
381 |
/* we may have a resolved symbolic link |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
382 |
* this becomes important for an xlfd we |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
383 |
* still need to know the location it was |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
384 |
* found to update the X server font path |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
385 |
* for use by AWT heavyweights - and when 2D |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
386 |
* wants to use the native rasteriser. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
387 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
388 |
if (xFontDirsMap == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
389 |
xFontDirsMap = new HashMap(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
390 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
391 |
xFontDirsMap.put(fontID, path); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
392 |
fullPath = file.getCanonicalPath(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
393 |
} catch (IOException e) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
394 |
fullPath = path + File.separator + fileName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
395 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
396 |
Vector xVal = (Vector) xlfdMap.get(fullPath); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
397 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
398 |
FontUtilities.getLogger() |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
399 |
.info("fullPath=" + fullPath + |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
400 |
" xVal=" + xVal); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
401 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
402 |
if ((xVal == null || !xVal.contains(fontPart)) && |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
403 |
(sVal == null) || !sVal.startsWith("/")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
404 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
405 |
FontUtilities.getLogger() |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
406 |
.info("Map fontID:"+fontID + |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
407 |
"to file:" + fullPath); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
408 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
409 |
fontNameMap.put(fontID, fullPath); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
410 |
if (xVal == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
411 |
xVal = new Vector(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
412 |
xlfdMap.put (fullPath, xVal); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
413 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
414 |
xVal.add(fontPart); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
415 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
416 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
417 |
ttype = st.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
418 |
if (ttype != StreamTokenizer.TT_EOL) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
419 |
break; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
420 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
421 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
422 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
423 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
424 |
fr.close(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
425 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
426 |
} catch (IOException ioe1) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
427 |
} finally { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
428 |
if (fr != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
429 |
try { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
430 |
fr.close(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
431 |
} catch (IOException ioe2) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
432 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
433 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
434 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
435 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
436 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
437 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
438 |
public void loadFonts() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
439 |
super.loadFonts(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
440 |
/* These maps are greatly expanded during a loadFonts but |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
441 |
* can be reset to their initial state afterwards. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
442 |
* Since preferLocaleFonts() and preferProportionalFonts() will |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
443 |
* trigger a partial repopulating from the FontConfiguration |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
444 |
* it has to be the inital (empty) state for the latter two, not |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
445 |
* simply nulling out. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
446 |
* xFontDirsMap is a special case in that the implementation |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
447 |
* will typically not ever need to initialise it so it can be null. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
448 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
449 |
xFontDirsMap = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
450 |
xlfdMap = new HashMap(1); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
451 |
fontNameMap = new HashMap(1); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
452 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
453 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
454 |
private String getObliqueLucidaFontID(String fontID) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
455 |
if (fontID.startsWith("-lucidasans-medium-i-normal") || |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
456 |
fontID.startsWith("-lucidasans-bold-i-normal") || |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
457 |
fontID.startsWith("-lucidatypewriter-medium-i-normal") || |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
458 |
fontID.startsWith("-lucidatypewriter-bold-i-normal")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
459 |
return fontID.substring(0, fontID.indexOf("-i-")); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
460 |
} else { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
461 |
return null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
462 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
463 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
464 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
465 |
private static String getX11FontName(String platName) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
466 |
String xlfd = platName.replaceAll("%d", "*"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
467 |
if (NativeFont.fontExists(xlfd)) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
468 |
return xlfd; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
469 |
} else { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
470 |
return null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
471 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
472 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
473 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
474 |
private void initObliqueLucidaFontMap() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
475 |
oblmap = new HashMap<String, String>(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
476 |
oblmap.put("-lucidasans-medium", |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
477 |
jreLibDirName+"/fonts/LucidaSansRegular.ttf"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
478 |
oblmap.put("-lucidasans-bold", |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
479 |
jreLibDirName+"/fonts/LucidaSansDemiBold.ttf"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
480 |
oblmap.put("-lucidatypewriter-medium", |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
481 |
jreLibDirName+"/fonts/LucidaTypewriterRegular.ttf"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
482 |
oblmap.put("-lucidatypewriter-bold", |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
483 |
jreLibDirName+"/fonts/LucidaTypewriterBold.ttf"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
484 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
485 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
486 |
private boolean isHeadless() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
487 |
GraphicsEnvironment ge = |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
488 |
GraphicsEnvironment.getLocalGraphicsEnvironment(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
489 |
return GraphicsEnvironment.isHeadless(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
490 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
491 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
492 |
private String specificFontIDForName(String name) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
493 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
494 |
int[] hPos = new int[14]; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
495 |
int hyphenCnt = 1; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
496 |
int pos = 1; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
497 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
498 |
while (pos != -1 && hyphenCnt < 14) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
499 |
pos = name.indexOf('-', pos); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
500 |
if (pos != -1) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
501 |
hPos[hyphenCnt++] = pos; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
502 |
pos++; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
503 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
504 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
505 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
506 |
if (hyphenCnt != 14) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
507 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
508 |
FontUtilities.getLogger() |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
509 |
.severe("Font Configuration Font ID is malformed:" + name); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
510 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
511 |
return name; // what else can we do? |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
512 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
513 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
514 |
StringBuffer sb = |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
515 |
new StringBuffer(name.substring(hPos[FAMILY_NAME_FIELD-1], |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
516 |
hPos[SETWIDTH_NAME_FIELD])); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
517 |
sb.append(name.substring(hPos[CHARSET_REGISTRY_FIELD-1])); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
518 |
String retval = sb.toString().toLowerCase (Locale.ENGLISH); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
519 |
return retval; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
520 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
521 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
522 |
private String switchFontIDForName(String name) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
523 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
524 |
int[] hPos = new int[14]; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
525 |
int hyphenCnt = 1; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
526 |
int pos = 1; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
527 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
528 |
while (pos != -1 && hyphenCnt < 14) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
529 |
pos = name.indexOf('-', pos); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
530 |
if (pos != -1) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
531 |
hPos[hyphenCnt++] = pos; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
532 |
pos++; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
533 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
534 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
535 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
536 |
if (hyphenCnt != 14) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
537 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
538 |
FontUtilities.getLogger() |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
539 |
.severe("Font Configuration Font ID is malformed:" + name); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
540 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
541 |
return name; // what else can we do? |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
542 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
543 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
544 |
String slant = name.substring(hPos[SLANT_FIELD-1]+1, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
545 |
hPos[SLANT_FIELD]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
546 |
String family = name.substring(hPos[FAMILY_NAME_FIELD-1]+1, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
547 |
hPos[FAMILY_NAME_FIELD]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
548 |
String registry = name.substring(hPos[CHARSET_REGISTRY_FIELD-1]+1, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
549 |
hPos[CHARSET_REGISTRY_FIELD]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
550 |
String encoding = name.substring(hPos[CHARSET_ENCODING_FIELD-1]+1); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
551 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
552 |
if (slant.equals("i")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
553 |
slant = "o"; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
554 |
} else if (slant.equals("o")) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
555 |
slant = "i"; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
556 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
557 |
// workaround for #4471000 |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
558 |
if (family.equals("itc zapfdingbats") |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
559 |
&& registry.equals("sun") |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
560 |
&& encoding.equals("fontspecific")){ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
561 |
registry = "adobe"; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
562 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
563 |
StringBuffer sb = |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
564 |
new StringBuffer(name.substring(hPos[FAMILY_NAME_FIELD-1], |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
565 |
hPos[SLANT_FIELD-1]+1)); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
566 |
sb.append(slant); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
567 |
sb.append(name.substring(hPos[SLANT_FIELD], |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
568 |
hPos[SETWIDTH_NAME_FIELD]+1)); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
569 |
sb.append(registry); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
570 |
sb.append(name.substring(hPos[CHARSET_ENCODING_FIELD-1])); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
571 |
String retval = sb.toString().toLowerCase (Locale.ENGLISH); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
572 |
return retval; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
573 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
574 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
575 |
/** |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
576 |
* Returns the face name for the given XLFD. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
577 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
578 |
public String getFileNameFromXLFD(String name) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
579 |
String fileName = null; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
580 |
String fontID = specificFontIDForName(name); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
581 |
if (fontID != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
582 |
fileName = (String)fontNameMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
583 |
if (fileName == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
584 |
fontID = switchFontIDForName(name); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
585 |
fileName = (String)fontNameMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
586 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
587 |
if (fileName == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
588 |
fileName = getDefaultFontFile(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
589 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
590 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
591 |
return fileName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
592 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
593 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
594 |
/* Register just the paths, (it doesn't register the fonts). |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
595 |
* If a font configuration file has specified a baseFontPath |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
596 |
* fontPath is just those directories, unless on usage we |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
597 |
* find it doesn't contain what we need for the logical fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
598 |
* Otherwise, we register all the paths on Solaris, because |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
599 |
* the fontPath we have here is the complete one from |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
600 |
* parsing /var/sadm/install/contents, not just |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
601 |
* what's on the X font path (may be this should be |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
602 |
* changed). |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
603 |
* But for now what it means is that if we didn't do |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
604 |
* this then if the font weren't listed anywhere on the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
605 |
* less complete font path we'd trigger loadFonts which |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
606 |
* actually registers the fonts. This may actually be |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
607 |
* the right thing tho' since that would also set up |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
608 |
* the X font path without which we wouldn't be able to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
609 |
* display some "native" fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
610 |
* So something to revisit is that probably fontPath |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
611 |
* here ought to be only the X font path + jre font dir. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
612 |
* loadFonts should have a separate native call to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
613 |
* get the rest of the platform font path. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
614 |
* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
615 |
* Registering the directories can now be avoided in the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
616 |
* font configuration initialisation when filename entries |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
617 |
* exist in the font configuration file for all fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
618 |
* (Perhaps a little confusingly a filename entry is |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
619 |
* actually keyed using the XLFD used in the font entries, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
620 |
* and it maps *to* a real filename). |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
621 |
* In the event any are missing, registration of all |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
622 |
* directories will be invoked to find the real files. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
623 |
* |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
624 |
* But registering the directory performed other |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
625 |
* functions such as filling in the map of all native names |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
626 |
* for the font. So when this method isn't invoked, they still |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
627 |
* must be found. This is mitigated by getNativeNames now |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
628 |
* being able to return at least the platform name, but mostly |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
629 |
* by ensuring that when a filename key is found, that |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
630 |
* xlfd key is stored as one of the set of platform names |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
631 |
* for the font. Its a set because typical font configuration |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
632 |
* files reference the same CJK font files using multiple |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
633 |
* X11 encodings. For the code that adds this to the map |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
634 |
* see X11GE.getFileNameFromPlatformName(..) |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
635 |
* If you don't get all of these then some code points may |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
636 |
* not use the Xserver, and will not get the PCF bitmaps |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
637 |
* that are available for some point sizes. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
638 |
* So, in the event that there is such a problem, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
639 |
* unconditionally making this call may be necessary, at |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
640 |
* some cost to JRE start-up |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
641 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
642 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
643 |
protected void registerFontDirs(String pathName) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
644 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
645 |
StringTokenizer parser = new StringTokenizer(pathName, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
646 |
File.pathSeparator); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
647 |
try { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
648 |
while (parser.hasMoreTokens()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
649 |
String dirPath = parser.nextToken(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
650 |
if (dirPath != null && !registeredDirs.containsKey(dirPath)) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
651 |
registeredDirs.put(dirPath, null); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
652 |
registerFontDir(dirPath); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
653 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
654 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
655 |
} catch (NoSuchElementException e) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
656 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
657 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
658 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
659 |
// An X font spec (xlfd) includes an encoding. The same TrueType font file |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
660 |
// may be referenced from different X font directories in font.dir files |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
661 |
// to support use in multiple encodings by X apps. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
662 |
// So for the purposes of font configuration logical fonts where AWT |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
663 |
// heavyweights need to access the font via X APIs we need to ensure that |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
664 |
// the directory for precisely the encodings needed by this are added to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
665 |
// the x font path. This requires that we note the platform names |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
666 |
// specified in font configuration files and use that to identify the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
667 |
// X font directory that contains a font.dir file for that platform name |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
668 |
// and add it to the X font path (if display is local) |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
669 |
// Here we make use of an already built map of xlfds to font locations |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
670 |
// to add the font location to the set of those required to build the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
671 |
// x font path needed by AWT. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
672 |
// These are added to the x font path later. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
673 |
// All this is necessary because on Solaris the font.dir directories |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
674 |
// may contain not real font files, but symbolic links to the actual |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
675 |
// location but that location is not suitable for the x font path, since |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
676 |
// it probably doesn't have a font.dir at all and certainly not one |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
677 |
// with the required encodings |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
678 |
// If the fontconfiguration file is properly set up so that all fonts |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
679 |
// are mapped to files then we will never trigger initialising |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
680 |
// xFontDirsMap (it will be null). In this case the awtfontpath entries |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
681 |
// must specify all the X11 directories needed by AWT. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
682 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
683 |
protected void addFontToPlatformFontPath(String platformName) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
684 |
// Lazily initialize fontConfigDirs. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
685 |
getPlatformFontPathFromFontConfig(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
686 |
if (xFontDirsMap != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
687 |
String fontID = specificFontIDForName(platformName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
688 |
String dirName = (String)xFontDirsMap.get(fontID); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
689 |
if (dirName != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
690 |
fontConfigDirs.add(dirName); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
691 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
692 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
693 |
return; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
694 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
695 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
696 |
private void getPlatformFontPathFromFontConfig() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
697 |
if (fontConfigDirs == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
698 |
fontConfigDirs = getFontConfiguration().getAWTFontPathSet(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
699 |
if (FontUtilities.debugFonts() && fontConfigDirs != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
700 |
String[] names = fontConfigDirs.toArray(new String[0]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
701 |
for (int i=0;i<names.length;i++) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
702 |
FontUtilities.getLogger().info("awtfontpath : " + names[i]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
703 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
704 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
705 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
706 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
707 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
708 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
709 |
protected void registerPlatformFontsUsedByFontConfiguration() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
710 |
// Lazily initialize fontConfigDirs. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
711 |
getPlatformFontPathFromFontConfig(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
712 |
if (fontConfigDirs == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
713 |
return; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
714 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
715 |
if (FontUtilities.isLinux) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
716 |
fontConfigDirs.add(jreLibDirName+File.separator+"oblique-fonts"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
717 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
718 |
fontdirs = (String[])fontConfigDirs.toArray(new String[0]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
719 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
720 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
721 |
/* Called by MToolkit to set the X11 font path */ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
722 |
public static void setNativeFontPath() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
723 |
if (fontdirs == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
724 |
return; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
725 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
726 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
727 |
// need to register these individually rather than by one call |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
728 |
// to ensure that one bad directory doesn't cause all to be rejected |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
729 |
for (int i=0; i<fontdirs.length; i++) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
730 |
if (FontUtilities.debugFonts()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
731 |
FontUtilities.getLogger().info("Add " + fontdirs[i] + " to X11 fontpath"); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
732 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
733 |
setNativeFontPath(fontdirs[i]); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
734 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
735 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
736 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
737 |
private synchronized static native void setNativeFontPath(String fontPath); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
738 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
739 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
740 |
// Implements SunGraphicsEnvironment.createFontConfiguration. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
741 |
protected FontConfiguration createFontConfiguration() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
742 |
/* The logic here decides whether to use a preconfigured |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
743 |
* fontconfig.properties file, or synthesise one using platform APIs. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
744 |
* On Solaris (as opposed to OpenSolaris) we try to use the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
745 |
* pre-configured ones, but if the files it specifies are missing |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
746 |
* we fail-safe to synthesising one. This might happen if Solaris |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
747 |
* changes its fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
748 |
* For OpenSolaris I don't expect us to ever create fontconfig files, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
749 |
* so it will always synthesise. Note that if we misidentify |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
750 |
* OpenSolaris as Solaris, then the test for the presence of |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
751 |
* Solaris-only font files will correct this. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
752 |
* For Linux we require an exact match of distro and version to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
753 |
* use the preconfigured file, and also that it points to |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
754 |
* existent fonts. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
755 |
* If synthesising fails, we fall back to any preconfigured file |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
756 |
* and do the best we can. For the commercial JDK this will be |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
757 |
* fine as it includes the Lucida fonts. OpenJDK should not hit |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
758 |
* this as the synthesis should always work on its platforms. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
759 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
760 |
FontConfiguration mFontConfig = new MFontConfiguration(this); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
761 |
if (FontUtilities.isOpenSolaris || |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
762 |
(FontUtilities.isLinux && |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
763 |
(!mFontConfig.foundOsSpecificFile() || |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
764 |
!mFontConfig.fontFilesArePresent()) || |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
765 |
(FontUtilities.isSolaris && !mFontConfig.fontFilesArePresent()))) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
766 |
FcFontConfiguration fcFontConfig = |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
767 |
new FcFontConfiguration(this); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
768 |
if (fcFontConfig.init()) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
769 |
return fcFontConfig; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
770 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
771 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
772 |
mFontConfig.init(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
773 |
return mFontConfig; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
774 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
775 |
public FontConfiguration |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
776 |
createFontConfiguration(boolean preferLocaleFonts, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
777 |
boolean preferPropFonts) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
778 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
779 |
return new MFontConfiguration(this, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
780 |
preferLocaleFonts, preferPropFonts); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
781 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
782 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
783 |
public synchronized native String getFontPath(boolean noType1Fonts); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
784 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
785 |
public String[] getDefaultPlatformFont() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
786 |
if (defaultPlatformFont != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
787 |
return defaultPlatformFont; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
788 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
789 |
String[] info = new String[2]; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
790 |
getFontConfigManager().initFontConfigFonts(false); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
791 |
FontConfigManager.FcCompFont[] fontConfigFonts = |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
792 |
getFontConfigManager().getFontConfigFonts(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
793 |
for (int i=0; i<fontConfigFonts.length; i++) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
794 |
if ("sans".equals(fontConfigFonts[i].fcFamily) && |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
795 |
0 == fontConfigFonts[i].style) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
796 |
info[0] = fontConfigFonts[i].firstFont.familyName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
797 |
info[1] = fontConfigFonts[i].firstFont.fontFile; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
798 |
break; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
799 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
800 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
801 |
/* Absolute last ditch attempt in the face of fontconfig problems. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
802 |
* If we didn't match, pick the first, or just make something |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
803 |
* up so we don't NPE. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
804 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
805 |
if (info[0] == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
806 |
if (fontConfigFonts.length > 0 && |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
807 |
fontConfigFonts[0].firstFont.fontFile != null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
808 |
info[0] = fontConfigFonts[0].firstFont.familyName; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
809 |
info[1] = fontConfigFonts[0].firstFont.fontFile; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
810 |
} else { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
811 |
info[0] = "Dialog"; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
812 |
info[1] = "/dialog.ttf"; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
813 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
814 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
815 |
defaultPlatformFont = info; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
816 |
return defaultPlatformFont; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
817 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
818 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
819 |
public synchronized FontConfigManager getFontConfigManager() { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
820 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
821 |
if (fcManager == null) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
822 |
fcManager = new FontConfigManager(); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
823 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
824 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
825 |
return fcManager; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
826 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
827 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
828 |
@Override |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
829 |
protected FontUIResource getFontConfigFUIR(String family, int style, int size) { |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
830 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
831 |
CompositeFont font2D = getFontConfigManager().getFontConfigFont(family, style); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
832 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
833 |
if (font2D == null) { // Not expected, just a precaution. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
834 |
return new FontUIResource(family, style, size); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
835 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
836 |
|
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
837 |
/* The name of the font will be that of the physical font in slot, |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
838 |
* but by setting the handle to that of the CompositeFont it |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
839 |
* renders as that CompositeFont. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
840 |
* It also needs to be marked as a created font which is the |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
841 |
* current mechanism to signal that deriveFont etc must copy |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
842 |
* the handle from the original font. |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
843 |
*/ |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
844 |
FontUIResource fuir = |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
845 |
new FontUIResource(font2D.getFamilyName(null), style, size); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
846 |
FontAccess.getFontAccess().setFont2D(fuir, font2D.handle); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
847 |
FontAccess.getFontAccess().setCreatedFont(fuir); |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
848 |
return fuir; |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
849 |
} |
de1a48b7aa41
6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff
changeset
|
850 |
} |