jdk/src/java.desktop/share/classes/sun/font/SunFontManager.java
author alanb
Thu, 01 Dec 2016 08:57:53 +0000
changeset 42338 a60f280f803c
parent 37689 c69dbc15e4bd
permissions -rw-r--r--
8169069: Module system implementation refresh (11/2016) Reviewed-by: plevart, chegar, psandoz, mchung, alanb, dfuchs, naoto, coffeys, weijun Contributed-by: alan.bateman@oracle.com, mandy.chung@oracle.com, claes.redestad@oracle.com, mark.reinhold@oracle.com
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
     1
/*
31653
d88ff422c7fb 8080405: Exception in thread "AWT-EventQueue-1" java.security.AccessControlException
serb
parents: 30465
diff changeset
     2
 * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
     4
 *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5275
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5275
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    10
 *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    15
 * accompanied this code).
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
 * You should have received a copy of the GNU General Public License version
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    20
 *
5506
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5275
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5275
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
202f599c92aa 6943119: Rebrand source copyright notices
ohair
parents: 5275
diff changeset
    23
 * questions.
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    24
 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    25
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    26
package sun.font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    27
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    28
import java.awt.Font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    29
import java.awt.FontFormatException;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    30
import java.io.BufferedReader;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    31
import java.io.File;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    32
import java.io.FileInputStream;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    33
import java.io.FilenameFilter;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    34
import java.io.IOException;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    35
import java.io.InputStreamReader;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    36
import java.security.AccessController;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    37
import java.security.PrivilegedAction;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    38
import java.util.ArrayList;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    39
import java.util.HashMap;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    40
import java.util.HashSet;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    41
import java.util.Hashtable;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    42
import java.util.Iterator;
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
    43
import java.util.List;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    44
import java.util.Locale;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    45
import java.util.Map;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    46
import java.util.NoSuchElementException;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    47
import java.util.StringTokenizer;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    48
import java.util.TreeMap;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    49
import java.util.Vector;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    50
import java.util.concurrent.ConcurrentHashMap;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    51
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    52
import javax.swing.plaf.FontUIResource;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    53
import sun.awt.AppContext;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    54
import sun.awt.FontConfiguration;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    55
import sun.awt.SunToolkit;
24520
e8afd90fcb69 8035169: Move ThreadGroupUtils from the sun.misc package
pchelko
parents: 23900
diff changeset
    56
import sun.awt.util.ThreadGroupUtils;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    57
import sun.java2d.FontSupport;
3938
ef327bd847c0 6879044: Eliminate the dependency on logging from the AWT/2D/Swing classes
mchung
parents: 3929
diff changeset
    58
import sun.util.logging.PlatformLogger;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    59
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    60
/**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    61
 * The base implementation of the {@link FontManager} interface. It implements
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    62
 * the platform independent, shared parts of OpenJDK's FontManager
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    63
 * implementations. The platform specific parts are declared as abstract
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    64
 * methods that have to be implemented by specific implementations.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    65
 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    66
public abstract class SunFontManager implements FontSupport, FontManagerForSGE {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    67
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    68
    private static class TTFilter implements FilenameFilter {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    69
        public boolean accept(File dir,String name) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    70
            /* all conveniently have the same suffix length */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    71
            int offset = name.length()-4;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    72
            if (offset <= 0) { /* must be at least A.ttf */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    73
                return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    74
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    75
                return(name.startsWith(".ttf", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    76
                       name.startsWith(".TTF", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    77
                       name.startsWith(".ttc", offset) ||
5578
c25ebb5bc2d6 6954424: Support OpenType/CFF fonts in JDK 7
prr
parents: 5275
diff changeset
    78
                       name.startsWith(".TTC", offset) ||
c25ebb5bc2d6 6954424: Support OpenType/CFF fonts in JDK 7
prr
parents: 5275
diff changeset
    79
                       name.startsWith(".otf", offset) ||
c25ebb5bc2d6 6954424: Support OpenType/CFF fonts in JDK 7
prr
parents: 5275
diff changeset
    80
                       name.startsWith(".OTF", offset));
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    81
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    82
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    83
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    84
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    85
    private static class T1Filter implements FilenameFilter {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    86
        public boolean accept(File dir,String name) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    87
            if (noType1Font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    88
                return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    89
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    90
            /* all conveniently have the same suffix length */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    91
            int offset = name.length()-4;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    92
            if (offset <= 0) { /* must be at least A.pfa */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    93
                return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    94
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    95
                return(name.startsWith(".pfa", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    96
                       name.startsWith(".pfb", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    97
                       name.startsWith(".PFA", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    98
                       name.startsWith(".PFB", offset));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
    99
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   100
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   101
    }
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 class TTorT1Filter implements FilenameFilter {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   104
        public boolean accept(File dir, String name) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   105
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   106
            /* all conveniently have the same suffix length */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   107
            int offset = name.length()-4;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   108
            if (offset <= 0) { /* must be at least A.ttf or A.pfa */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   109
                return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   110
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   111
                boolean isTT =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   112
                    name.startsWith(".ttf", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   113
                    name.startsWith(".TTF", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   114
                    name.startsWith(".ttc", offset) ||
5578
c25ebb5bc2d6 6954424: Support OpenType/CFF fonts in JDK 7
prr
parents: 5275
diff changeset
   115
                    name.startsWith(".TTC", offset) ||
c25ebb5bc2d6 6954424: Support OpenType/CFF fonts in JDK 7
prr
parents: 5275
diff changeset
   116
                    name.startsWith(".otf", offset) ||
c25ebb5bc2d6 6954424: Support OpenType/CFF fonts in JDK 7
prr
parents: 5275
diff changeset
   117
                    name.startsWith(".OTF", offset);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   118
                if (isTT) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   119
                    return true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   120
                } else if (noType1Font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   121
                    return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   122
                } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   123
                    return(name.startsWith(".pfa", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   124
                           name.startsWith(".pfb", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   125
                           name.startsWith(".PFA", offset) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   126
                           name.startsWith(".PFB", offset));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   127
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   128
            }
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
    }
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
     public static final int FONTFORMAT_NONE = -1;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   133
     public static final int FONTFORMAT_TRUETYPE = 0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   134
     public static final int FONTFORMAT_TYPE1 = 1;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   135
     public static final int FONTFORMAT_T2K = 2;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   136
     public static final int FONTFORMAT_TTC = 3;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   137
     public static final int FONTFORMAT_COMPOSITE = 4;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   138
     public static final int FONTFORMAT_NATIVE = 5;
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
     /* Pool of 20 font file channels chosen because some UTF-8 locale
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   141
      * composite fonts can use up to 16 platform fonts (including the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   142
      * Lucida fall back). This should prevent channel thrashing when
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   143
      * dealing with one of these fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   144
      * The pool array stores the fonts, rather than directly referencing
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   145
      * the channels, as the font needs to do the open/close work.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   146
      */
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   147
     // MACOSX begin -- need to access these in subclass
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   148
     protected static final int CHANNELPOOLSIZE = 20;
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   149
     protected FileFont fontFileCache[] = new FileFont[CHANNELPOOLSIZE];
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   150
     // MACOSX end
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   151
     private int lastPoolIndex = 0;
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
    /* Need to implement a simple linked list scheme for fast
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   154
     * traversal and lookup.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   155
     * Also want to "fast path" dialog so there's minimal overhead.
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
    /* There are at exactly 20 composite fonts: 5 faces (but some are not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   158
     * usually different), in 4 styles. The array may be auto-expanded
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   159
     * later if more are needed, eg for user-defined composites or locale
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   160
     * variants.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   161
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   162
    private int maxCompFont = 0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   163
    private CompositeFont [] compFonts = new CompositeFont[20];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   164
    private ConcurrentHashMap<String, CompositeFont>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   165
        compositeFonts = new ConcurrentHashMap<String, CompositeFont>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   166
    private ConcurrentHashMap<String, PhysicalFont>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   167
        physicalFonts = new ConcurrentHashMap<String, PhysicalFont>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   168
    private ConcurrentHashMap<String, PhysicalFont>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   169
        registeredFonts = new ConcurrentHashMap<String, PhysicalFont>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   170
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   171
    /* given a full name find the Font. Remind: there's duplication
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   172
     * here in that this contains the content of compositeFonts +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   173
     * physicalFonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   174
     */
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   175
    // MACOSX begin -- need to access this in subclass
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   176
    protected ConcurrentHashMap<String, Font2D>
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   177
        fullNameToFont = new ConcurrentHashMap<String, Font2D>();
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   178
    // MACOSX end
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   179
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   180
    /* TrueType fonts have localised names. Support searching all
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   181
     * of these before giving up on a name.
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
    private HashMap<String, TrueTypeFont> localeFullNamesToFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   184
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   185
    private PhysicalFont defaultPhysicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   186
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   187
    static boolean longAddresses;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   188
    private boolean loaded1dot0Fonts = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   189
    boolean loadedAllFonts = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   190
    boolean loadedAllFontFiles = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   191
    HashMap<String,String> jreFontMap;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   192
    HashSet<String> jreLucidaFontFiles;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   193
    String[] jreOtherFontFiles;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   194
    boolean noOtherJREFontFiles = false; // initial assumption.
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
    public static final String lucidaFontName = "Lucida Sans Regular";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   197
    public static String jreLibDirName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   198
    public static String jreFontDirName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   199
    private static HashSet<String> missingFontFiles = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   200
    private String defaultFontName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   201
    private String defaultFontFileName;
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
   202
    protected HashSet<String> registeredFontFiles = new HashSet<>();
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
   203
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
   204
    private ArrayList<String> badFonts;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   205
    /* fontPath is the location of all fonts on the system, excluding the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   206
     * JRE's own font directory but including any path specified using the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   207
     * sun.java2d.fontpath property. Together with that property,  it is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   208
     * initialised by the getPlatformFontPath() method
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   209
     * This call must be followed by a call to registerFontDirs(fontPath)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   210
     * once any extra debugging path has been appended.
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
    protected String fontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   213
    private FontConfiguration fontConfig;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   214
    /* discoveredAllFonts is set to true when all fonts on the font path are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   215
     * discovered. This usually also implies opening, validating and
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   216
     * registering, but an implementation may be optimized to avold this.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   217
     * So see also "loadedAllFontFiles"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   218
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   219
    private boolean discoveredAllFonts = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   220
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   221
    /* No need to keep consing up new instances - reuse a singleton.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   222
     * The trade-off is that these objects don't get GC'd.
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
    private static final FilenameFilter ttFilter = new TTFilter();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   225
    private static final FilenameFilter t1Filter = new T1Filter();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   226
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   227
    private Font[] allFonts;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   228
    private String[] allFamilies; // cache for default locale only
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   229
    private Locale lastDefaultLocale;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   230
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   231
    public static boolean noType1Font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   232
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   233
    /* Used to indicate required return type from toArray(..); */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   234
    private static String[] STR_ARRAY = new String[0];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   235
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   236
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   237
     * Deprecated, unsupported hack - actually invokes a bug!
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   238
     * Left in for a customer, don't remove.
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
    private boolean usePlatformFontMetrics = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   241
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   242
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   243
     * Returns the global SunFontManager instance. This is similar to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   244
     * {@link FontManagerFactory#getInstance()} but it returns a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   245
     * SunFontManager instance instead. This is only used in internal classes
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   246
     * where we can safely assume that a SunFontManager is to be used.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   247
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   248
     * @return the global SunFontManager instance
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
    public static SunFontManager getInstance() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   251
        FontManager fm = FontManagerFactory.getInstance();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   252
        return (SunFontManager) fm;
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
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   255
    public FilenameFilter getTrueTypeFilter() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   256
        return ttFilter;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   257
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   258
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   259
    public FilenameFilter getType1Filter() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   260
        return t1Filter;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   261
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   262
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   263
    @Override
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   264
    public boolean usingPerAppContextComposites() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   265
        return _usingPerAppContextComposites;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   266
    }
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
    private void initJREFontMap() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   269
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   270
        /* Key is familyname+style value as an int.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   271
         * Value is filename containing the font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   272
         * If no mapping exists, it means there is no font file for the style
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   273
         * If the mapping exists but the file doesn't exist in the deferred
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   274
         * list then it means its not installed.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   275
         * This looks like a lot of code and strings but if it saves even
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   276
         * a single file being opened at JRE start-up there's a big payoff.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   277
         * Lucida Sans is probably the only important case as the others
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   278
         * are rarely used. Consider removing the other mappings if there's
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   279
         * no evidence they are useful in practice.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   280
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   281
        jreFontMap = new HashMap<String,String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   282
        jreLucidaFontFiles = new HashSet<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   283
        if (isOpenJDK()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   284
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   285
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   286
        /* Lucida Sans Family */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   287
        jreFontMap.put("lucida sans0",   "LucidaSansRegular.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   288
        jreFontMap.put("lucida sans1",   "LucidaSansDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   289
        /* Lucida Sans full names (map Bold and DemiBold to same file) */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   290
        jreFontMap.put("lucida sans regular0", "LucidaSansRegular.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   291
        jreFontMap.put("lucida sans regular1", "LucidaSansDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   292
        jreFontMap.put("lucida sans bold1", "LucidaSansDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   293
        jreFontMap.put("lucida sans demibold1", "LucidaSansDemiBold.ttf");
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
        /* Lucida Sans Typewriter Family */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   296
        jreFontMap.put("lucida sans typewriter0",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   297
                       "LucidaTypewriterRegular.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   298
        jreFontMap.put("lucida sans typewriter1", "LucidaTypewriterBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   299
        /* Typewriter full names (map Bold and DemiBold to same file) */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   300
        jreFontMap.put("lucida sans typewriter regular0",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   301
                       "LucidaTypewriter.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   302
        jreFontMap.put("lucida sans typewriter regular1",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   303
                       "LucidaTypewriterBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   304
        jreFontMap.put("lucida sans typewriter bold1",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   305
                       "LucidaTypewriterBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   306
        jreFontMap.put("lucida sans typewriter demibold1",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   307
                       "LucidaTypewriterBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   308
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   309
        /* Lucida Bright Family */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   310
        jreFontMap.put("lucida bright0", "LucidaBrightRegular.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   311
        jreFontMap.put("lucida bright1", "LucidaBrightDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   312
        jreFontMap.put("lucida bright2", "LucidaBrightItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   313
        jreFontMap.put("lucida bright3", "LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   314
        /* Lucida Bright full names (map Bold and DemiBold to same file) */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   315
        jreFontMap.put("lucida bright regular0", "LucidaBrightRegular.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   316
        jreFontMap.put("lucida bright regular1", "LucidaBrightDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   317
        jreFontMap.put("lucida bright regular2", "LucidaBrightItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   318
        jreFontMap.put("lucida bright regular3", "LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   319
        jreFontMap.put("lucida bright bold1", "LucidaBrightDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   320
        jreFontMap.put("lucida bright bold3", "LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   321
        jreFontMap.put("lucida bright demibold1", "LucidaBrightDemiBold.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   322
        jreFontMap.put("lucida bright demibold3","LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   323
        jreFontMap.put("lucida bright italic2", "LucidaBrightItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   324
        jreFontMap.put("lucida bright italic3", "LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   325
        jreFontMap.put("lucida bright bold italic3",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   326
                       "LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   327
        jreFontMap.put("lucida bright demibold italic3",
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   328
                       "LucidaBrightDemiItalic.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   329
        for (String ffile : jreFontMap.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   330
            jreLucidaFontFiles.add(ffile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   331
        }
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
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   334
    static {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   335
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   336
        java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
   337
                                    new java.security.PrivilegedAction<Object>() {
3929
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
           public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   340
               FontManagerNativeLibrary.load();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   341
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   342
               // JNI throws an exception if a class/method/field is not found,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   343
               // so there's no need to do anything explicit here.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   344
               initIDs();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   345
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   346
               switch (StrikeCache.nativeAddressSize) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   347
               case 8: longAddresses = true; break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   348
               case 4: longAddresses = false; break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   349
               default: throw new RuntimeException("Unexpected address size");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   350
               }
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
               noType1Font =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   353
                   "true".equals(System.getProperty("sun.java2d.noType1Font"));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   354
               jreLibDirName =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   355
                   System.getProperty("java.home","") + File.separator + "lib";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   356
               jreFontDirName = jreLibDirName + File.separator + "fonts";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   357
               File lucidaFile =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   358
                   new File(jreFontDirName + File.separator + FontUtilities.LUCIDA_FILE_NAME);
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
               return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   361
           }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   362
        });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   363
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   364
42338
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   365
    /**
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   366
     * If the module image layout changes the location of JDK fonts,
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   367
     * this will be updated to reflect that.
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   368
     */
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   369
    public static final String getJDKFontDir() {
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   370
        return jreFontDirName;
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   371
    }
a60f280f803c 8169069: Module system implementation refresh (11/2016)
alanb
parents: 37689
diff changeset
   372
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   373
    public TrueTypeFont getEUDCFont() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   374
        // Overridden in Windows.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   375
        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   376
    }
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
    /* Initialise ptrs used by JNI methods */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   379
    private static native void initIDs();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   380
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   381
    @SuppressWarnings("unchecked")
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   382
    protected SunFontManager() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   383
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   384
        initJREFontMap();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   385
        java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
   386
                new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   387
                    public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   388
                        File badFontFile =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   389
                            new File(jreFontDirName + File.separator +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   390
                                     "badfonts.txt");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   391
                        if (badFontFile.exists()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   392
                            FileInputStream fis = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   393
                            try {
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
   394
                                badFonts = new ArrayList<>();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   395
                                fis = new FileInputStream(badFontFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   396
                                InputStreamReader isr = new InputStreamReader(fis);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   397
                                BufferedReader br = new BufferedReader(isr);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   398
                                while (true) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   399
                                    String name = br.readLine();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   400
                                    if (name == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   401
                                        break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   402
                                    } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   403
                                        if (FontUtilities.debugFonts()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   404
                                            FontUtilities.getLogger().warning("read bad font: " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   405
                                                           name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   406
                                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   407
                                        badFonts.add(name);
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
                                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   410
                            } catch (IOException e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   411
                                try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   412
                                    if (fis != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   413
                                        fis.close();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   414
                                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   415
                                } catch (IOException ioe) {
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
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   418
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   419
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   420
                        /* Here we get the fonts in jre/lib/fonts and register
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   421
                         * them so they are always available and preferred over
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   422
                         * other fonts. This needs to be registered before the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   423
                         * composite fonts as otherwise some native font that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   424
                         * corresponds may be found as we don't have a way to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   425
                         * handle two fonts of the same name, so the JRE one
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   426
                         * must be the first one registered. Pass "true" to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   427
                         * registerFonts method as on-screen these JRE fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   428
                         * always go through the T2K rasteriser.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   429
                         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   430
                        if (FontUtilities.isLinux) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   431
                            /* Linux font configuration uses these fonts */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   432
                            registerFontDir(jreFontDirName);
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
                        registerFontsInDir(jreFontDirName, true, Font2D.JRE_RANK,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   435
                                           true, false);
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
                        /* Create the font configuration and get any font path
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   438
                         * that might be specified.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   439
                         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   440
                        fontConfig = createFontConfiguration();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   441
                        if (isOpenJDK()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   442
                            String[] fontInfo = getDefaultPlatformFont();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   443
                            defaultFontName = fontInfo[0];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   444
                            defaultFontFileName = fontInfo[1];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   445
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   446
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   447
                        String extraFontPath = fontConfig.getExtraFontPath();
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
                        /* In prior releases the debugging font path replaced
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   450
                         * all normally located font directories except for the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   451
                         * JRE fonts dir. This directory is still always located
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   452
                         * and placed at the head of the path but as an
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   453
                         * augmentation to the previous behaviour the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   454
                         * changes below allow you to additionally append to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   455
                         * the font path by starting with append: or prepend by
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   456
                         * starting with a prepend: sign. Eg: to append
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   457
                         * -Dsun.java2d.fontpath=append:/usr/local/myfonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   458
                         * and to prepend
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   459
                         * -Dsun.java2d.fontpath=prepend:/usr/local/myfonts Disp
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   460
                         *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   461
                         * If there is an appendedfontpath it in the font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   462
                         * configuration it is used instead of searching the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   463
                         * system for dirs.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   464
                         * The behaviour of append and prepend is then similar
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   465
                         * to the normal case. ie it goes after what
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   466
                         * you prepend and * before what you append. If the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   467
                         * sun.java2d.fontpath property is used, but it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   468
                         * neither the append or prepend syntaxes is used then
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   469
                         * as except for the JRE dir the path is replaced and it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   470
                         * is up to you to make sure that all the right
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   471
                         * directories are located. This is platform and
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   472
                         * locale-specific so its almost impossible to get
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   473
                         * right, so it should be used with caution.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   474
                         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   475
                        boolean prependToPath = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   476
                        boolean appendToPath = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   477
                        String dbgFontPath =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   478
                            System.getProperty("sun.java2d.fontpath");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   479
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   480
                        if (dbgFontPath != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   481
                            if (dbgFontPath.startsWith("prepend:")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   482
                                prependToPath = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   483
                                dbgFontPath =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   484
                                    dbgFontPath.substring("prepend:".length());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   485
                            } else if (dbgFontPath.startsWith("append:")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   486
                                appendToPath = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   487
                                dbgFontPath =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   488
                                    dbgFontPath.substring("append:".length());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   489
                            }
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
                        if (FontUtilities.debugFonts()) {
3938
ef327bd847c0 6879044: Eliminate the dependency on logging from the AWT/2D/Swing classes
mchung
parents: 3929
diff changeset
   493
                            PlatformLogger logger = FontUtilities.getLogger();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   494
                            logger.info("JRE font directory: " + jreFontDirName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   495
                            logger.info("Extra font path: " + extraFontPath);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   496
                            logger.info("Debug font path: " + dbgFontPath);
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
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   499
                        if (dbgFontPath != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   500
                            /* In debugging mode we register all the paths
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   501
                             * Caution: this is a very expensive call on Solaris:-
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   502
                             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   503
                            fontPath = getPlatformFontPath(noType1Font);
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
                            if (extraFontPath != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   506
                                fontPath =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   507
                                    extraFontPath + File.pathSeparator + fontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   508
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   509
                            if (appendToPath) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   510
                                fontPath =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   511
                                    fontPath + File.pathSeparator + dbgFontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   512
                            } else if (prependToPath) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   513
                                fontPath =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   514
                                    dbgFontPath + File.pathSeparator + fontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   515
                            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   516
                                fontPath = dbgFontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   517
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   518
                            registerFontDirs(fontPath);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   519
                        } else if (extraFontPath != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   520
                            /* If the font configuration contains an
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   521
                             * "appendedfontpath" entry, it is interpreted as a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   522
                             * set of locations that should always be registered.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   523
                             * It may be additional to locations normally found
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   524
                             * for that place, or it may be locations that need
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   525
                             * to have all their paths registered to locate all
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   526
                             * the needed platform names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   527
                             * This is typically when the same .TTF file is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   528
                             * referenced from multiple font.dir files and all
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   529
                             * of these must be read to find all the native
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   530
                             * (XLFD) names for the font, so that X11 font APIs
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   531
                             * can be used for as many code points as possible.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   532
                             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   533
                            registerFontDirs(extraFontPath);
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
                        /* On Solaris, we need to register the Japanese TrueType
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   537
                         * directory so that we can find the corresponding
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   538
                         * bitmap fonts. This could be done by listing the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   539
                         * directory in the font configuration file, but we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   540
                         * don't want to confuse users with this quirk. There
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   541
                         * are no bitmap fonts for other writing systems that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   542
                         * correspond to TrueType fonts and have matching XLFDs.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   543
                         * We need to register the bitmap fonts only in
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   544
                         * environments where they're on the X font path, i.e.,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   545
                         * in the Japanese locale. Note that if the X Toolkit
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   546
                         * is in use the font path isn't set up by JDK, but
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   547
                         * users of a JA locale should have it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   548
                         * set up already by their login environment.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   549
                         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   550
                        if (FontUtilities.isSolaris && Locale.JAPAN.equals(Locale.getDefault())) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   551
                            registerFontDir("/usr/openwin/lib/locale/ja/X11/fonts/TT");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   552
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   553
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   554
                        initCompositeFonts(fontConfig, null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   555
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   556
                        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   557
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   558
                });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   559
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   560
        boolean platformFont = AccessController.doPrivileged(
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   561
                        new PrivilegedAction<Boolean>() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   562
                                public Boolean run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   563
                                        String prop =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   564
                                                System.getProperty("java2d.font.usePlatformFont");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   565
                                        String env = System.getenv("JAVA2D_USEPLATFORMFONT");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   566
                                        return "true".equals(prop) || env != null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   567
                                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   568
                        });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   569
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   570
        if (platformFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   571
            usePlatformFontMetrics = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   572
            System.out.println("Enabling platform font metrics for win32. This is an unsupported option.");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   573
            System.out.println("This yields incorrect composite font metrics as reported by 1.1.x releases.");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   574
            System.out.println("It is appropriate only for use by applications which do not use any Java 2");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   575
            System.out.println("functionality. This property will be removed in a later release.");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   576
        }
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
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   579
    public Font2DHandle getNewComposite(String family, int style,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   580
                                        Font2DHandle handle) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   581
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   582
        if (!(handle.font2D instanceof CompositeFont)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   583
            return handle;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   584
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   585
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   586
        CompositeFont oldComp = (CompositeFont)handle.font2D;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   587
        PhysicalFont oldFont = oldComp.getSlotFont(0);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   588
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   589
        if (family == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   590
            family = oldFont.getFamilyName(null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   591
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   592
        if (style == -1) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   593
            style = oldComp.getStyle();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   594
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   595
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   596
        Font2D newFont = findFont2D(family, style, NO_FALLBACK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   597
        if (!(newFont instanceof PhysicalFont)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   598
            newFont = oldFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   599
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   600
        PhysicalFont physicalFont = (PhysicalFont)newFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   601
        CompositeFont dialog2D =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   602
            (CompositeFont)findFont2D("dialog", style, NO_FALLBACK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   603
        if (dialog2D == null) { /* shouldn't happen */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   604
            return handle;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   605
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   606
        CompositeFont compFont = new CompositeFont(physicalFont, dialog2D);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   607
        Font2DHandle newHandle = new Font2DHandle(compFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   608
        return newHandle;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   609
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   610
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   611
    protected void registerCompositeFont(String compositeName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   612
                                      String[] componentFileNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   613
                                      String[] componentNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   614
                                      int numMetricsSlots,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   615
                                      int[] exclusionRanges,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   616
                                      int[] exclusionMaxIndex,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   617
                                      boolean defer) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   618
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   619
        CompositeFont cf = new CompositeFont(compositeName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   620
                                             componentFileNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   621
                                             componentNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   622
                                             numMetricsSlots,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   623
                                             exclusionRanges,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   624
                                             exclusionMaxIndex, defer, this);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   625
        addCompositeToFontList(cf, Font2D.FONT_CONFIG_RANK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   626
        synchronized (compFonts) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   627
            compFonts[maxCompFont++] = cf;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   628
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   629
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   630
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   631
    /* This variant is used only when the application specifies
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   632
     * a variant of composite fonts which prefers locale specific or
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   633
     * proportional fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   634
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   635
    protected static void registerCompositeFont(String compositeName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   636
                                                String[] componentFileNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   637
                                                String[] componentNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   638
                                                int numMetricsSlots,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   639
                                                int[] exclusionRanges,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   640
                                                int[] exclusionMaxIndex,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   641
                                                boolean defer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   642
                                                ConcurrentHashMap<String, Font2D>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   643
                                                altNameCache) {
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
        CompositeFont cf = new CompositeFont(compositeName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   646
                                             componentFileNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   647
                                             componentNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   648
                                             numMetricsSlots,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   649
                                             exclusionRanges,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   650
                                             exclusionMaxIndex, defer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   651
                                             SunFontManager.getInstance());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   652
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   653
        /* if the cache has an existing composite for this case, make
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   654
         * its handle point to this new font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   655
         * This ensures that when the altNameCache that is passed in
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   656
         * is the global mapNameCache - ie we are running as an application -
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   657
         * that any statically created java.awt.Font instances which already
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   658
         * have a Font2D instance will have that re-directed to the new Font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   659
         * on subsequent uses. This is particularly important for "the"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   660
         * default font instance, or similar cases where a UI toolkit (eg
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   661
         * Swing) has cached a java.awt.Font. Note that if Swing is using
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   662
         * a custom composite APIs which update the standard composites have
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   663
         * no effect - this is typically the case only when using the Windows
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   664
         * L&F where these APIs would conflict with that L&F anyway.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   665
         */
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21278
diff changeset
   666
        Font2D oldFont =altNameCache.get(compositeName.toLowerCase(Locale.ENGLISH));
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   667
        if (oldFont instanceof CompositeFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   668
            oldFont.handle.font2D = cf;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   669
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   670
        altNameCache.put(compositeName.toLowerCase(Locale.ENGLISH), cf);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   671
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   672
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   673
    private void addCompositeToFontList(CompositeFont f, int rank) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   674
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   675
        if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   676
            FontUtilities.getLogger().info("Add to Family "+ f.familyName +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   677
                        ", Font " + f.fullName + " rank="+rank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   678
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   679
        f.setRank(rank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   680
        compositeFonts.put(f.fullName, f);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   681
        fullNameToFont.put(f.fullName.toLowerCase(Locale.ENGLISH), f);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   682
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   683
        FontFamily family = FontFamily.getFamily(f.familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   684
        if (family == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   685
            family = new FontFamily(f.familyName, true, rank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   686
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   687
        family.setFont(f, f.style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   688
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   689
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   690
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   691
     * Systems may have fonts with the same name.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   692
     * We want to register only one of such fonts (at least until
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   693
     * such time as there might be APIs which can accommodate > 1).
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   694
     * Rank is 1) font configuration fonts, 2) JRE fonts, 3) OT/TT fonts,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   695
     * 4) Type1 fonts, 5) native fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   696
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   697
     * If the new font has the same name as the old font, the higher
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   698
     * ranked font gets added, replacing the lower ranked one.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   699
     * If the fonts are of equal rank, then make a special case of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   700
     * font configuration rank fonts, which are on closer inspection,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   701
     * OT/TT fonts such that the larger font is registered. This is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   702
     * a heuristic since a font may be "larger" in the sense of more
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   703
     * code points, or be a larger "file" because it has more bitmaps.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   704
     * So it is possible that using filesize may lead to less glyphs, and
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   705
     * using glyphs may lead to lower quality display. Probably number
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   706
     * of glyphs is the ideal, but filesize is information we already
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   707
     * have and is good enough for the known cases.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   708
     * Also don't want to register fonts that match JRE font families
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   709
     * but are coming from a source other than the JRE.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   710
     * This will ensure that we will algorithmically style the JRE
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   711
     * plain font and get the same set of glyphs for all styles.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   712
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   713
     * Note that this method returns a value
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   714
     * if it returns the same object as its argument that means this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   715
     * font was newly registered.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   716
     * If it returns a different object it means this font already exists,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   717
     * and you should use that one.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   718
     * If it returns null means this font was not registered and none
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   719
     * in that name is registered. The caller must find a substitute
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   720
     */
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   721
    // MACOSX begin -- need to access this in subclass
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   722
    protected PhysicalFont addToFontList(PhysicalFont f, int rank) {
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
   723
    // MACOSX end
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   724
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   725
        String fontName = f.fullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   726
        String familyName = f.familyName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   727
        if (fontName == null || "".equals(fontName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   728
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   729
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   730
        if (compositeFonts.containsKey(fontName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   731
            /* Don't register any font that has the same name as a composite */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   732
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   733
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   734
        f.setRank(rank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   735
        if (!physicalFonts.containsKey(fontName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   736
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   737
                FontUtilities.getLogger().info("Add to Family "+familyName +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   738
                            ", Font " + fontName + " rank="+rank);
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
            physicalFonts.put(fontName, f);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   741
            FontFamily family = FontFamily.getFamily(familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   742
            if (family == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   743
                family = new FontFamily(familyName, false, rank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   744
                family.setFont(f, f.style);
23290
6d992283f608 8012351: Bold fonts everywhere in GTK L&F on Ubuntu with JDK 7
prr
parents: 23288
diff changeset
   745
            } else {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   746
                family.setFont(f, f.style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   747
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   748
            fullNameToFont.put(fontName.toLowerCase(Locale.ENGLISH), f);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   749
            return f;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   750
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   751
            PhysicalFont newFont = f;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   752
            PhysicalFont oldFont = physicalFonts.get(fontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   753
            if (oldFont == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   754
                return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   755
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   756
            /* If the new font is of an equal or higher rank, it is a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   757
             * candidate to replace the current one, subject to further tests.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   758
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   759
            if (oldFont.getRank() >= rank) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   760
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   761
                /* All fonts initialise their mapper when first
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   762
                 * used. If the mapper is non-null then this font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   763
                 * has been accessed at least once. In that case
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   764
                 * do not replace it. This may be overly stringent,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   765
                 * but its probably better not to replace a font that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   766
                 * someone is already using without a compelling reason.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   767
                 * Additionally the primary case where it is known
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   768
                 * this behaviour is important is in certain composite
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   769
                 * fonts, and since all the components of a given
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   770
                 * composite are usually initialised together this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   771
                 * is unlikely. For this to be a problem, there would
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   772
                 * have to be a case where two different composites used
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   773
                 * different versions of the same-named font, and they
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   774
                 * were initialised and used at separate times.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   775
                 * In that case we continue on and allow the new font to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   776
                 * be installed, but replaceFont will continue to allow
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   777
                 * the original font to be used in Composite fonts.
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
                if (oldFont.mapper != null && rank > Font2D.FONT_CONFIG_RANK) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   780
                    return oldFont;
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
                /* Normally we require a higher rank to replace a font,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   784
                 * but as a special case, if the two fonts are the same rank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   785
                 * and are instances of TrueTypeFont we want the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   786
                 * more complete (larger) one.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   787
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   788
                if (oldFont.getRank() == rank) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   789
                    if (oldFont instanceof TrueTypeFont &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   790
                        newFont instanceof TrueTypeFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   791
                        TrueTypeFont oldTTFont = (TrueTypeFont)oldFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   792
                        TrueTypeFont newTTFont = (TrueTypeFont)newFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   793
                        if (oldTTFont.fileSize >= newTTFont.fileSize) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   794
                            return oldFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   795
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   796
                    } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   797
                        return oldFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   798
                    }
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
                /* Don't replace ever JRE fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   801
                 * This test is in case a font configuration references
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   802
                 * a Lucida font, which has been mapped to a Lucida
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   803
                 * from the host O/S. The assumption here is that any
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   804
                 * such font configuration file is probably incorrect, or
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   805
                 * the host O/S version is for the use of AWT.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   806
                 * In other words if we reach here, there's a possible
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   807
                 * problem with our choice of font configuration fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   808
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   809
                if (oldFont.platName.startsWith(jreFontDirName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   810
                    if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   811
                        FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   812
                              .warning("Unexpected attempt to replace a JRE " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   813
                                       " font " + fontName + " from " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   814
                                        oldFont.platName +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   815
                                       " with " + newFont.platName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   816
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   817
                    return oldFont;
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
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   820
                if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   821
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   822
                          .info("Replace in Family " + familyName +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   823
                                ",Font " + fontName + " new rank="+rank +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   824
                                " from " + oldFont.platName +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   825
                                " with " + newFont.platName);
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
                replaceFont(oldFont, newFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   828
                physicalFonts.put(fontName, newFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   829
                fullNameToFont.put(fontName.toLowerCase(Locale.ENGLISH),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   830
                                   newFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   831
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   832
                FontFamily family = FontFamily.getFamily(familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   833
                if (family == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   834
                    family = new FontFamily(familyName, false, rank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   835
                    family.setFont(newFont, newFont.style);
23290
6d992283f608 8012351: Bold fonts everywhere in GTK L&F on Ubuntu with JDK 7
prr
parents: 23288
diff changeset
   836
                } else {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   837
                    family.setFont(newFont, newFont.style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   838
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   839
                return newFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   840
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   841
                return oldFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   842
            }
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
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   845
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   846
    public Font2D[] getRegisteredFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   847
        PhysicalFont[] physFonts = getPhysicalFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   848
        int mcf = maxCompFont; /* for MT-safety */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   849
        Font2D[] regFonts = new Font2D[physFonts.length+mcf];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   850
        System.arraycopy(compFonts, 0, regFonts, 0, mcf);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   851
        System.arraycopy(physFonts, 0, regFonts, mcf, physFonts.length);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   852
        return regFonts;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   853
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   854
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   855
    protected PhysicalFont[] getPhysicalFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   856
        return physicalFonts.values().toArray(new PhysicalFont[0]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   857
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   858
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   859
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   860
    /* The class FontRegistrationInfo is used when a client says not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   861
     * to register a font immediately. This mechanism is used to defer
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   862
     * initialisation of all the components of composite fonts at JRE
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   863
     * start-up. The CompositeFont class is "aware" of this and when it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   864
     * is first used it asks for the registration of its components.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   865
     * Also in the event that any physical font is requested the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   866
     * deferred fonts are initialised before triggering a search of the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   867
     * system.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   868
     * Two maps are used. One to track the deferred fonts. The
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   869
     * other to track the fonts that have been initialised through this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   870
     * mechanism.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   871
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   872
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   873
    private static final class FontRegistrationInfo {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   874
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   875
        String fontFilePath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   876
        String[] nativeNames;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   877
        int fontFormat;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   878
        boolean javaRasterizer;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   879
        int fontRank;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   880
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   881
        FontRegistrationInfo(String fontPath, String[] names, int format,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   882
                             boolean useJavaRasterizer, int rank) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   883
            this.fontFilePath = fontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   884
            this.nativeNames = names;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   885
            this.fontFormat = format;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   886
            this.javaRasterizer = useJavaRasterizer;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   887
            this.fontRank = rank;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   888
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   889
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   890
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   891
    private final ConcurrentHashMap<String, FontRegistrationInfo>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   892
        deferredFontFiles =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   893
        new ConcurrentHashMap<String, FontRegistrationInfo>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   894
    private final ConcurrentHashMap<String, Font2DHandle>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   895
        initialisedFonts = new ConcurrentHashMap<String, Font2DHandle>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   896
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   897
    /* Remind: possibly enhance initialiseDeferredFonts() to be
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   898
     * optionally given a name and a style and it could stop when it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   899
     * finds that font - but this would be a problem if two of the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   900
     * fonts reference the same font face name (cf the Solaris
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   901
     * euro fonts).
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   902
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   903
    protected synchronized void initialiseDeferredFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   904
        for (String fileName : deferredFontFiles.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   905
            initialiseDeferredFont(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   906
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   907
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   908
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   909
    protected synchronized void registerDeferredJREFonts(String jreDir) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   910
        for (FontRegistrationInfo info : deferredFontFiles.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   911
            if (info.fontFilePath != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   912
                info.fontFilePath.startsWith(jreDir)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   913
                initialiseDeferredFont(info.fontFilePath);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   914
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   915
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   916
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   917
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   918
    public boolean isDeferredFont(String fileName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   919
        return deferredFontFiles.containsKey(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   920
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   921
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   922
    /* We keep a map of the files which contain the Lucida fonts so we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   923
     * don't need to search for them.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   924
     * But since we know what fonts these files contain, we can also avoid
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   925
     * opening them to look for a font name we don't recognise - see
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   926
     * findDeferredFont().
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   927
     * For typical cases where the font isn't a JRE one the overhead is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   928
     * this method call, HashMap.get() and null reference test, then
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   929
     * a boolean test of noOtherJREFontFiles.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   930
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   931
    public
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   932
    /*private*/ PhysicalFont findJREDeferredFont(String name, int style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   933
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   934
        PhysicalFont physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   935
        String nameAndStyle = name.toLowerCase(Locale.ENGLISH) + style;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   936
        String fileName = jreFontMap.get(nameAndStyle);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   937
        if (fileName != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   938
            fileName = jreFontDirName + File.separator + fileName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   939
            if (deferredFontFiles.get(fileName) != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   940
                physicalFont = initialiseDeferredFont(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   941
                if (physicalFont != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   942
                    (physicalFont.getFontName(null).equalsIgnoreCase(name) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   943
                     physicalFont.getFamilyName(null).equalsIgnoreCase(name))
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   944
                    && physicalFont.style == style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   945
                    return physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   946
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   947
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   948
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   949
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   950
        /* Iterate over the deferred font files looking for any in the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   951
         * jre directory that we didn't recognise, open each of these.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   952
         * In almost all installations this will quickly fall through
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   953
         * because only the Lucidas will be present and jreOtherFontFiles
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   954
         * will be empty.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   955
         * noOtherJREFontFiles is used so we can skip this block as soon
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   956
         * as its determined that its not needed - almost always after the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   957
         * very first time through.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   958
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   959
        if (noOtherJREFontFiles) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   960
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   961
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   962
        synchronized (jreLucidaFontFiles) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   963
            if (jreOtherFontFiles == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   964
                HashSet<String> otherFontFiles = new HashSet<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   965
                for (String deferredFile : deferredFontFiles.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   966
                    File file = new File(deferredFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   967
                    String dir = file.getParent();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   968
                    String fname = file.getName();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   969
                    /* skip names which aren't absolute, aren't in the JRE
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   970
                     * directory, or are known Lucida fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   971
                     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   972
                    if (dir == null ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   973
                        !dir.equals(jreFontDirName) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   974
                        jreLucidaFontFiles.contains(fname)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   975
                        continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   976
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   977
                    otherFontFiles.add(deferredFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   978
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   979
                jreOtherFontFiles = otherFontFiles.toArray(STR_ARRAY);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   980
                if (jreOtherFontFiles.length == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   981
                    noOtherJREFontFiles = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   982
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   983
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   984
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   985
            for (int i=0; i<jreOtherFontFiles.length;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   986
                fileName = jreOtherFontFiles[i];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   987
                if (fileName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   988
                    continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   989
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   990
                jreOtherFontFiles[i] = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   991
                physicalFont = initialiseDeferredFont(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   992
                if (physicalFont != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   993
                    (physicalFont.getFontName(null).equalsIgnoreCase(name) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   994
                     physicalFont.getFamilyName(null).equalsIgnoreCase(name))
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   995
                    && physicalFont.style == style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   996
                    return physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   997
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   998
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
   999
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1000
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1001
        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1002
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1003
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1004
    /* This skips JRE installed fonts. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1005
    private PhysicalFont findOtherDeferredFont(String name, int style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1006
        for (String fileName : deferredFontFiles.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1007
            File file = new File(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1008
            String dir = file.getParent();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1009
            String fname = file.getName();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1010
            if (dir != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1011
                dir.equals(jreFontDirName) &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1012
                jreLucidaFontFiles.contains(fname)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1013
                continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1014
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1015
            PhysicalFont physicalFont = initialiseDeferredFont(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1016
            if (physicalFont != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1017
                (physicalFont.getFontName(null).equalsIgnoreCase(name) ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1018
                physicalFont.getFamilyName(null).equalsIgnoreCase(name)) &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1019
                physicalFont.style == style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1020
                return physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1021
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1022
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1023
        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1024
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1025
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1026
    private PhysicalFont findDeferredFont(String name, int style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1027
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1028
        PhysicalFont physicalFont = findJREDeferredFont(name, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1029
        if (physicalFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1030
            return physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1031
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1032
            return findOtherDeferredFont(name, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1033
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1034
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1035
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1036
    public void registerDeferredFont(String fileNameKey,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1037
                                     String fullPathName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1038
                                     String[] nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1039
                                     int fontFormat,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1040
                                     boolean useJavaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1041
                                     int fontRank) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1042
        FontRegistrationInfo regInfo =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1043
            new FontRegistrationInfo(fullPathName, nativeNames, fontFormat,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1044
                                     useJavaRasterizer, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1045
        deferredFontFiles.put(fileNameKey, regInfo);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1046
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1047
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1048
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1049
    public synchronized
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1050
         PhysicalFont initialiseDeferredFont(String fileNameKey) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1051
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1052
        if (fileNameKey == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1053
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1054
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1055
        if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1056
            FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1057
                            .info("Opening deferred font file " + fileNameKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1058
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1059
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1060
        PhysicalFont physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1061
        FontRegistrationInfo regInfo = deferredFontFiles.get(fileNameKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1062
        if (regInfo != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1063
            deferredFontFiles.remove(fileNameKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1064
            physicalFont = registerFontFile(regInfo.fontFilePath,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1065
                                            regInfo.nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1066
                                            regInfo.fontFormat,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1067
                                            regInfo.javaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1068
                                            regInfo.fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1069
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1070
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1071
            if (physicalFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1072
                /* Store the handle, so that if a font is bad, we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1073
                 * retrieve the substituted font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1074
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1075
                initialisedFonts.put(fileNameKey, physicalFont.handle);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1076
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1077
                initialisedFonts.put(fileNameKey,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1078
                                     getDefaultPhysicalFont().handle);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1079
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1080
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1081
            Font2DHandle handle = initialisedFonts.get(fileNameKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1082
            if (handle == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1083
                /* Probably shouldn't happen, but just in case */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1084
                physicalFont = getDefaultPhysicalFont();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1085
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1086
                physicalFont = (PhysicalFont)(handle.font2D);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1087
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1088
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1089
        return physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1090
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1091
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1092
    public boolean isRegisteredFontFile(String name) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1093
        return registeredFonts.containsKey(name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1094
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1095
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1096
    public PhysicalFont getRegisteredFontFile(String name) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1097
        return registeredFonts.get(name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1098
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1099
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1100
    /* Note that the return value from this method is not always
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1101
     * derived from this file, and may be null. See addToFontList for
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1102
     * some explanation of this.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1103
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1104
    public PhysicalFont registerFontFile(String fileName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1105
                                         String[] nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1106
                                         int fontFormat,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1107
                                         boolean useJavaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1108
                                         int fontRank) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1109
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1110
        PhysicalFont regFont = registeredFonts.get(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1111
        if (regFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1112
            return regFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1113
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1114
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1115
        PhysicalFont physicalFont = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1116
        try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1117
            String name;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1118
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1119
            switch (fontFormat) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1120
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1121
            case FONTFORMAT_TRUETYPE:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1122
                int fn = 0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1123
                TrueTypeFont ttf;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1124
                do {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1125
                    ttf = new TrueTypeFont(fileName, nativeNames, fn++,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1126
                                           useJavaRasterizer);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1127
                    PhysicalFont pf = addToFontList(ttf, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1128
                    if (physicalFont == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1129
                        physicalFont = pf;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1130
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1131
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1132
                while (fn < ttf.getFontCount());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1133
                break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1134
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1135
            case FONTFORMAT_TYPE1:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1136
                Type1Font t1f = new Type1Font(fileName, nativeNames);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1137
                physicalFont = addToFontList(t1f, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1138
                break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1139
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1140
            case FONTFORMAT_NATIVE:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1141
                NativeFont nf = new NativeFont(fileName, false);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1142
                physicalFont = addToFontList(nf, fontRank);
24527
779f94d50411 8039862: Fix fallthrough lint warnings in 2d
darcy
parents: 24520
diff changeset
  1143
                break;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1144
            default:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1145
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1146
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1147
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1148
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1149
                      .info("Registered file " + fileName + " as font " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1150
                            physicalFont + " rank="  + fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1151
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1152
        } catch (FontFormatException ffe) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1153
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1154
                FontUtilities.getLogger().warning("Unusable font: " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1155
                               fileName + " " + ffe.toString());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1156
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1157
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1158
        if (physicalFont != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1159
            fontFormat != FONTFORMAT_NATIVE) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1160
            registeredFonts.put(fileName, physicalFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1161
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1162
        return physicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1163
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1164
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1165
    public void registerFonts(String[] fileNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1166
                              String[][] nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1167
                              int fontCount,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1168
                              int fontFormat,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1169
                              boolean useJavaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1170
                              int fontRank, boolean defer) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1171
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1172
        for (int i=0; i < fontCount; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1173
            if (defer) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1174
                registerDeferredFont(fileNames[i],fileNames[i], nativeNames[i],
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1175
                                     fontFormat, useJavaRasterizer, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1176
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1177
                registerFontFile(fileNames[i], nativeNames[i],
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1178
                                 fontFormat, useJavaRasterizer, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1179
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1180
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1181
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1182
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1183
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1184
     * This is the Physical font used when some other font on the system
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1185
     * can't be located. There has to be at least one font or the font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1186
     * system is not useful and the graphics environment cannot sustain
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1187
     * the Java platform.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1188
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1189
    public PhysicalFont getDefaultPhysicalFont() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1190
        if (defaultPhysicalFont == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1191
            /* findFont2D will load all fonts before giving up the search.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1192
             * If the JRE Lucida isn't found (eg because the JRE fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1193
             * directory is missing), it could find another version of Lucida
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1194
             * from the host system. This is OK because at that point we are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1195
             * trying to gracefully handle/recover from a system
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1196
             * misconfiguration and this is probably a reasonable substitution.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1197
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1198
            defaultPhysicalFont = (PhysicalFont)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1199
                findFont2D("Lucida Sans Regular", Font.PLAIN, NO_FALLBACK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1200
            if (defaultPhysicalFont == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1201
                defaultPhysicalFont = (PhysicalFont)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1202
                    findFont2D("Arial", Font.PLAIN, NO_FALLBACK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1203
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1204
            if (defaultPhysicalFont == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1205
                /* Because of the findFont2D call above, if we reach here, we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1206
                 * know all fonts have already been loaded, just accept any
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1207
                 * match at this point. If this fails we are in real trouble
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1208
                 * and I don't know how to recover from there being absolutely
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1209
                 * no fonts anywhere on the system.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1210
                 */
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  1211
                Iterator<PhysicalFont> i = physicalFonts.values().iterator();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1212
                if (i.hasNext()) {
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  1213
                    defaultPhysicalFont = i.next();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1214
                } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1215
                    throw new Error("Probable fatal error:No fonts found.");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1216
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1217
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1218
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1219
        return defaultPhysicalFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1220
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1221
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  1222
    public Font2D getDefaultLogicalFont(int style) {
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  1223
        return findFont2D("dialog", style, NO_FALLBACK);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1224
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1225
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1226
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1227
     * return String representation of style prepended with "."
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1228
     * This is useful for performance to avoid unnecessary string operations.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1229
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1230
    private static String dotStyleStr(int num) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1231
        switch(num){
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1232
          case Font.BOLD:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1233
            return ".bold";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1234
          case Font.ITALIC:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1235
            return ".italic";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1236
          case Font.ITALIC | Font.BOLD:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1237
            return ".bolditalic";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1238
          default:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1239
            return ".plain";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1240
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1241
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1242
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1243
    /* This is implemented only on windows and is called from code that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1244
     * executes only on windows. This isn't pretty but its not a precedent
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1245
     * in this file. This very probably should be cleaned up at some point.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1246
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1247
    protected void
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1248
        populateFontFileNameMap(HashMap<String,String> fontToFileMap,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1249
                                HashMap<String,String> fontToFamilyNameMap,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1250
                                HashMap<String,ArrayList<String>>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1251
                                familyToFontListMap,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1252
                                Locale locale) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1253
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1254
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1255
    /* Obtained from Platform APIs (windows only)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1256
     * Map from lower-case font full name to basename of font file.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1257
     * Eg "arial bold" -> ARIALBD.TTF.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1258
     * For TTC files, there is a mapping for each font in the file.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1259
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1260
    private HashMap<String,String> fontToFileMap = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1261
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1262
    /* Obtained from Platform APIs (windows only)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1263
     * Map from lower-case font full name to the name of its font family
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1264
     * Eg "arial bold" -> "Arial"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1265
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1266
    private HashMap<String,String> fontToFamilyNameMap = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1267
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1268
    /* Obtained from Platform APIs (windows only)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1269
     * Map from a lower-case family name to a list of full names of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1270
     * the member fonts, eg:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1271
     * "arial" -> ["Arial", "Arial Bold", "Arial Italic","Arial Bold Italic"]
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1272
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1273
    private HashMap<String,ArrayList<String>> familyToFontListMap= null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1274
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1275
    /* The directories which contain platform fonts */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1276
    private String[] pathDirs = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1277
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1278
    private boolean haveCheckedUnreferencedFontFiles;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1279
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1280
    private String[] getFontFilesFromPath(boolean noType1) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1281
        final FilenameFilter filter;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1282
        if (noType1) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1283
            filter = ttFilter;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1284
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1285
            filter = new TTorT1Filter();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1286
        }
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  1287
        return (String[])AccessController.doPrivileged(new PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1288
            public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1289
                if (pathDirs.length == 1) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1290
                    File dir = new File(pathDirs[0]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1291
                    String[] files = dir.list(filter);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1292
                    if (files == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1293
                        return new String[0];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1294
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1295
                    for (int f=0; f<files.length; f++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1296
                        files[f] = files[f].toLowerCase();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1297
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1298
                    return files;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1299
                } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1300
                    ArrayList<String> fileList = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1301
                    for (int i = 0; i< pathDirs.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1302
                        File dir = new File(pathDirs[i]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1303
                        String[] files = dir.list(filter);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1304
                        if (files == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1305
                            continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1306
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1307
                        for (int f=0; f<files.length ; f++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1308
                            fileList.add(files[f].toLowerCase());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1309
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1310
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1311
                    return fileList.toArray(STR_ARRAY);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1312
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1313
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1314
        });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1315
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1316
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1317
    /* This is needed since some windows registry names don't match
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1318
     * the font names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1319
     * - UPC styled font names have a double space, but the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1320
     * registry entry mapping to a file doesn't.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1321
     * - Marlett is in a hidden file not listed in the registry
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1322
     * - The registry advertises that the file david.ttf contains a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1323
     * font with the full name "David Regular" when in fact its
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1324
     * just "David".
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1325
     * Directly fix up these known cases as this is faster.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1326
     * If a font which doesn't match these known cases has no file,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1327
     * it may be a font that has been temporarily added to the known set
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1328
     * or it may be an installed font with a missing registry entry.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1329
     * Installed fonts are those in the windows font directories.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1330
     * Make a best effort attempt to locate these.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1331
     * We obtain the list of TrueType fonts in these directories and
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1332
     * filter out all the font files we already know about from the registry.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1333
     * What remains may be "bad" fonts, duplicate fonts, or perhaps the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1334
     * missing font(s) we are looking for.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1335
     * Open each of these files to find out.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1336
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1337
    private void resolveWindowsFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1338
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1339
        ArrayList<String> unmappedFontNames = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1340
        for (String font : fontToFamilyNameMap.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1341
            String file = fontToFileMap.get(font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1342
            if (file == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1343
                if (font.indexOf("  ") > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1344
                    String newName = font.replaceFirst("  ", " ");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1345
                    file = fontToFileMap.get(newName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1346
                    /* If this name exists and isn't for a valid name
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1347
                     * replace the mapping to the file with this font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1348
                     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1349
                    if (file != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1350
                        !fontToFamilyNameMap.containsKey(newName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1351
                        fontToFileMap.remove(newName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1352
                        fontToFileMap.put(font, file);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1353
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1354
                } else if (font.equals("marlett")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1355
                    fontToFileMap.put(font, "marlett.ttf");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1356
                } else if (font.equals("david")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1357
                    file = fontToFileMap.get("david regular");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1358
                    if (file != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1359
                        fontToFileMap.remove("david regular");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1360
                        fontToFileMap.put("david", file);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1361
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1362
                } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1363
                    if (unmappedFontNames == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1364
                        unmappedFontNames = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1365
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1366
                    unmappedFontNames.add(font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1367
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1368
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1369
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1370
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1371
        if (unmappedFontNames != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1372
            HashSet<String> unmappedFontFiles = new HashSet<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1373
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1374
            /* Every font key in fontToFileMap ought to correspond to a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1375
             * font key in fontToFamilyNameMap. Entries that don't seem
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1376
             * to correspond are likely fonts that were named differently
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1377
             * by GDI than in the registry. One known cause of this is when
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1378
             * Windows has had its regional settings changed so that from
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1379
             * GDI we get a localised (eg Chinese or Japanese) name for the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1380
             * font, but the registry retains the English version of the name
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1381
             * that corresponded to the "install" locale for windows.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1382
             * Since we are in this code block because there are unmapped
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1383
             * font names, we can look to find unused font->file mappings
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1384
             * and then open the files to read the names. We don't generally
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1385
             * want to open font files, as its a performance hit, but this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1386
             * occurs only for a small number of fonts on specific system
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1387
             * configs - ie is believed that a "true" Japanese windows would
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1388
             * have JA names in the registry too.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1389
             * Clone fontToFileMap and remove from the clone all keys which
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1390
             * match a fontToFamilyNameMap key. What remains maps to the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1391
             * files we want to open to find the fonts GDI returned.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1392
             * A font in such a file is added to the fontToFileMap after
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1393
             * checking its one of the unmappedFontNames we are looking for.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1394
             * The original name that didn't map is removed from fontToFileMap
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1395
             * so essentially this "fixes up" fontToFileMap to use the same
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1396
             * name as GDI.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1397
             * Also note that typically the fonts for which this occurs in
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1398
             * CJK locales are TTC fonts and not all fonts in a TTC may have
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1399
             * localised names. Eg MSGOTHIC.TTC contains 3 fonts and one of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1400
             * them "MS UI Gothic" has no JA name whereas the other two do.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1401
             * So not every font in these files is unmapped or new.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1402
             */
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  1403
            @SuppressWarnings("unchecked")
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1404
            HashMap<String,String> ffmapCopy =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1405
                (HashMap<String,String>)(fontToFileMap.clone());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1406
            for (String key : fontToFamilyNameMap.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1407
                ffmapCopy.remove(key);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1408
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1409
            for (String key : ffmapCopy.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1410
                unmappedFontFiles.add(ffmapCopy.get(key));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1411
                fontToFileMap.remove(key);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1412
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1413
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1414
            resolveFontFiles(unmappedFontFiles, unmappedFontNames);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1415
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1416
            /* If there are still unmapped font names, this means there's
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1417
             * something that wasn't in the registry. We need to get all
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1418
             * the font files directly and look at the ones that weren't
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1419
             * found in the registry.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1420
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1421
            if (unmappedFontNames.size() > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1422
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1423
                /* getFontFilesFromPath() returns all lower case names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1424
                 * To compare we also need lower case
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1425
                 * versions of the names from the registry.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1426
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1427
                ArrayList<String> registryFiles = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1428
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1429
                for (String regFile : fontToFileMap.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1430
                    registryFiles.add(regFile.toLowerCase());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1431
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1432
                /* We don't look for Type1 files here as windows will
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1433
                 * not enumerate these, so aren't useful in reconciling
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1434
                 * GDI's unmapped files. We do find these later when
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1435
                 * we enumerate all fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1436
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1437
                for (String pathFile : getFontFilesFromPath(true)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1438
                    if (!registryFiles.contains(pathFile)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1439
                        unmappedFontFiles.add(pathFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1440
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1441
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1442
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1443
                resolveFontFiles(unmappedFontFiles, unmappedFontNames);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1444
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1445
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1446
            /* remove from the set of names that will be returned to the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1447
             * user any fonts that can't be mapped to files.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1448
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1449
            if (unmappedFontNames.size() > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1450
                int sz = unmappedFontNames.size();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1451
                for (int i=0; i<sz; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1452
                    String name = unmappedFontNames.get(i);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1453
                    String familyName = fontToFamilyNameMap.get(name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1454
                    if (familyName != null) {
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  1455
                        ArrayList<String> family = familyToFontListMap.get(familyName);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1456
                        if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1457
                            if (family.size() <= 1) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1458
                                familyToFontListMap.remove(familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1459
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1460
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1461
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1462
                    fontToFamilyNameMap.remove(name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1463
                    if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1464
                        FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1465
                                             .info("No file for font:" + name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1466
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1467
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1468
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1469
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1470
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1471
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1472
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1473
     * In some cases windows may have fonts in the fonts folder that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1474
     * don't show up in the registry or in the GDI calls to enumerate fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1475
     * The only way to find these is to list the directory. We invoke this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1476
     * only in getAllFonts/Families, so most searches for a specific
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1477
     * font that is satisfied by the GDI/registry calls don't take the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1478
     * additional hit of listing the directory. This hit is small enough
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1479
     * that its not significant in these 'enumerate all the fonts' cases.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1480
     * The basic approach is to cross-reference the files windows found
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1481
     * with the ones in the directory listing approach, and for each
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1482
     * in the latter list that is missing from the former list, register it.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1483
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1484
    private synchronized void checkForUnreferencedFontFiles() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1485
        if (haveCheckedUnreferencedFontFiles) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1486
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1487
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1488
        haveCheckedUnreferencedFontFiles = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1489
        if (!FontUtilities.isWindows) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1490
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1491
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1492
        /* getFontFilesFromPath() returns all lower case names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1493
         * To compare we also need lower case
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1494
         * versions of the names from the registry.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1495
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1496
        ArrayList<String> registryFiles = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1497
        for (String regFile : fontToFileMap.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1498
            registryFiles.add(regFile.toLowerCase());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1499
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1500
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1501
        /* To avoid any issues with concurrent modification, create
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1502
         * copies of the existing maps, add the new fonts into these
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1503
         * and then replace the references to the old ones with the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1504
         * new maps. ConcurrentHashmap is another option but its a lot
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1505
         * more changes and with this exception, these maps are intended
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1506
         * to be static.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1507
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1508
        HashMap<String,String> fontToFileMap2 = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1509
        HashMap<String,String> fontToFamilyNameMap2 = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1510
        HashMap<String,ArrayList<String>> familyToFontListMap2 = null;;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1511
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1512
        for (String pathFile : getFontFilesFromPath(false)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1513
            if (!registryFiles.contains(pathFile)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1514
                if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1515
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1516
                                 .info("Found non-registry file : " + pathFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1517
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1518
                PhysicalFont f = registerFontFile(getPathName(pathFile));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1519
                if (f == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1520
                    continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1521
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1522
                if (fontToFileMap2 == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1523
                    fontToFileMap2 = new HashMap<String,String>(fontToFileMap);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1524
                    fontToFamilyNameMap2 =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1525
                        new HashMap<String,String>(fontToFamilyNameMap);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1526
                    familyToFontListMap2 = new
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1527
                        HashMap<String,ArrayList<String>>(familyToFontListMap);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1528
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1529
                String fontName = f.getFontName(null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1530
                String family = f.getFamilyName(null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1531
                String familyLC = family.toLowerCase();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1532
                fontToFamilyNameMap2.put(fontName, family);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1533
                fontToFileMap2.put(fontName, pathFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1534
                ArrayList<String> fonts = familyToFontListMap2.get(familyLC);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1535
                if (fonts == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1536
                    fonts = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1537
                } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1538
                    fonts = new ArrayList<String>(fonts);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1539
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1540
                fonts.add(fontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1541
                familyToFontListMap2.put(familyLC, fonts);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1542
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1543
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1544
        if (fontToFileMap2 != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1545
            fontToFileMap = fontToFileMap2;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1546
            familyToFontListMap = familyToFontListMap2;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1547
            fontToFamilyNameMap = fontToFamilyNameMap2;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1548
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1549
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1550
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1551
    private void resolveFontFiles(HashSet<String> unmappedFiles,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1552
                                  ArrayList<String> unmappedFonts) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1553
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1554
        Locale l = SunToolkit.getStartupLocale();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1555
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1556
        for (String file : unmappedFiles) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1557
            try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1558
                int fn = 0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1559
                TrueTypeFont ttf;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1560
                String fullPath = getPathName(file);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1561
                if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1562
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1563
                                   .info("Trying to resolve file " + fullPath);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1564
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1565
                do {
7937
3de0a7f48b19 6989370: Windows platform fonts may be incorrectly marked as ineligible for the native rasteriser
prr
parents: 7668
diff changeset
  1566
                    ttf = new TrueTypeFont(fullPath, null, fn++, false);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1567
                    //  prefer the font's locale name.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1568
                    String fontName = ttf.getFontName(l).toLowerCase();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1569
                    if (unmappedFonts.contains(fontName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1570
                        fontToFileMap.put(fontName, file);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1571
                        unmappedFonts.remove(fontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1572
                        if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1573
                            FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1574
                                  .info("Resolved absent registry entry for " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1575
                                        fontName + " located in " + fullPath);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1576
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1577
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1578
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1579
                while (fn < ttf.getFontCount());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1580
            } catch (Exception e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1581
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1582
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1583
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1584
7950
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1585
    /* Hardwire the English names and expected file names of fonts
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1586
     * commonly used at start up. Avoiding until later even the small
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1587
     * cost of calling platform APIs to locate these can help.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1588
     * The code that registers these fonts needs to "bail" if any
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1589
     * of the files do not exist, so it will verify the existence of
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1590
     * all non-null file names first.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1591
     * They are added in to a map with nominally the first
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1592
     * word in the name of the family as the key. In all the cases
28059
e576535359cc 8067377: My hobby: caning, then then canning, the the can-can
martin
parents: 26037
diff changeset
  1593
     * we are using the family name is a single word, and as is
7950
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1594
     * more or less required the family name is the initial sequence
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1595
     * in a full name. So lookup first finds the matching description,
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1596
     * then registers the whole family, returning the right font.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1597
     */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1598
    public static class FamilyDescription {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1599
        public String familyName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1600
        public String plainFullName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1601
        public String boldFullName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1602
        public String italicFullName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1603
        public String boldItalicFullName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1604
        public String plainFileName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1605
        public String boldFileName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1606
        public String italicFileName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1607
        public String boldItalicFileName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1608
    }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1609
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1610
    static HashMap<String, FamilyDescription> platformFontMap;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1611
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1612
    /**
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1613
     * default implementation does nothing.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1614
     */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1615
    public HashMap<String, FamilyDescription> populateHardcodedFileNameMap() {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1616
        return new HashMap<String, FamilyDescription>(0);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1617
    }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1618
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1619
    Font2D findFontFromPlatformMap(String lcName, int style) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1620
        if (platformFontMap == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1621
            platformFontMap = populateHardcodedFileNameMap();
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1622
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1623
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1624
        if (platformFontMap == null || platformFontMap.size() == 0) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1625
            return null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1626
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1627
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1628
        int spaceIndex = lcName.indexOf(' ');
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1629
        String firstWord = lcName;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1630
        if (spaceIndex > 0) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1631
            firstWord = lcName.substring(0, spaceIndex);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1632
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1633
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1634
        FamilyDescription fd = platformFontMap.get(firstWord);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1635
        if (fd == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1636
            return null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1637
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1638
        /* Once we've established that its at least the first word,
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1639
         * we need to dig deeper to make sure its a match for either
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1640
         * a full name, or the family name, to make sure its not
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1641
         * a request for some other font that just happens to start
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1642
         * with the same first word.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1643
         */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1644
        int styleIndex = -1;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1645
        if (lcName.equalsIgnoreCase(fd.plainFullName)) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1646
            styleIndex = 0;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1647
        } else if (lcName.equalsIgnoreCase(fd.boldFullName)) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1648
            styleIndex = 1;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1649
        } else if (lcName.equalsIgnoreCase(fd.italicFullName)) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1650
            styleIndex = 2;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1651
        } else if (lcName.equalsIgnoreCase(fd.boldItalicFullName)) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1652
            styleIndex = 3;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1653
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1654
        if (styleIndex == -1 && !lcName.equalsIgnoreCase(fd.familyName)) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1655
            return null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1656
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1657
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1658
        String plainFile = null, boldFile = null,
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1659
            italicFile = null, boldItalicFile = null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1660
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1661
        boolean failure = false;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1662
        /* In a terminal server config, its possible that getPathName()
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1663
         * will return null, if the file doesn't exist, hence the null
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1664
         * checks on return. But in the normal client config we need to
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1665
         * follow this up with a check to see if all the files really
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1666
         * exist for the non-null paths.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1667
         */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1668
         getPlatformFontDirs(noType1Font);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1669
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1670
        if (fd.plainFileName != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1671
            plainFile = getPathName(fd.plainFileName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1672
            if (plainFile == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1673
                failure = true;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1674
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1675
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1676
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1677
        if (fd.boldFileName != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1678
            boldFile = getPathName(fd.boldFileName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1679
            if (boldFile == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1680
                failure = true;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1681
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1682
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1683
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1684
        if (fd.italicFileName != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1685
            italicFile = getPathName(fd.italicFileName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1686
            if (italicFile == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1687
                failure = true;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1688
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1689
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1690
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1691
        if (fd.boldItalicFileName != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1692
            boldItalicFile = getPathName(fd.boldItalicFileName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1693
            if (boldItalicFile == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1694
                failure = true;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1695
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1696
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1697
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1698
        if (failure) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1699
            if (FontUtilities.isLogging()) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1700
                FontUtilities.getLogger().
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1701
                    info("Hardcoded file missing looking for " + lcName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1702
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1703
            platformFontMap.remove(firstWord);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1704
            return null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1705
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1706
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1707
        /* Some of these may be null,as not all styles have to exist */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1708
        final String[] files = {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1709
            plainFile, boldFile, italicFile, boldItalicFile } ;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1710
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1711
        failure = java.security.AccessController.doPrivileged(
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1712
                 new java.security.PrivilegedAction<Boolean>() {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1713
                     public Boolean run() {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1714
                         for (int i=0; i<files.length; i++) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1715
                             if (files[i] == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1716
                                 continue;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1717
                             }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1718
                             File f = new File(files[i]);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1719
                             if (!f.exists()) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1720
                                 return Boolean.TRUE;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1721
                             }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1722
                         }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1723
                         return Boolean.FALSE;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1724
                     }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1725
                 });
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1726
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1727
        if (failure) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1728
            if (FontUtilities.isLogging()) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1729
                FontUtilities.getLogger().
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1730
                    info("Hardcoded file missing looking for " + lcName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1731
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1732
            platformFontMap.remove(firstWord);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1733
            return null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1734
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1735
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1736
        /* If we reach here we know that we have all the files we
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1737
         * expect, so all should be fine so long as the contents
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1738
         * are what we'd expect. Now on to registering the fonts.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1739
         * Currently this code only looks for TrueType fonts, so format
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1740
         * and rank can be specified without looking at the filename.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1741
         */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1742
        Font2D font = null;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1743
        for (int f=0;f<files.length;f++) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1744
            if (files[f] == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1745
                continue;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1746
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1747
            PhysicalFont pf =
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1748
                registerFontFile(files[f], null,
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1749
                                 FONTFORMAT_TRUETYPE, false, Font2D.TTF_RANK);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1750
            if (f == styleIndex) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1751
                font = pf;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1752
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1753
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1754
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1755
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1756
        /* Two general cases need a bit more work here.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1757
         * 1) If font is null, then it was perhaps a request for a
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1758
         * non-existent font, such as "Tahoma Italic", or a family name -
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1759
         * where family and full name of the plain font differ.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1760
         * Fall back to finding the closest one in the family.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1761
         * This could still fail if a client specified "Segoe" instead of
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1762
         * "Segoe UI".
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1763
         * 2) The request is of the form "MyFont Bold", style=Font.ITALIC,
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1764
         * and so we want to see if there's a Bold Italic font, or
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1765
         * "MyFamily", style=Font.BOLD, and we may have matched the plain,
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1766
         * but now need to revise that to the BOLD font.
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1767
         */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1768
        FontFamily fontFamily = FontFamily.getFamily(fd.familyName);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1769
        if (fontFamily != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1770
            if (font == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1771
                font = fontFamily.getFont(style);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1772
                if (font == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1773
                    font = fontFamily.getClosestStyle(style);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1774
                }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1775
            } else if (style > 0 && style != font.style) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1776
                style |= font.style;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1777
                font = fontFamily.getFont(style);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1778
                if (font == null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1779
                    font = fontFamily.getClosestStyle(style);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1780
                }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1781
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1782
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1783
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1784
        return font;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  1785
    }
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1786
    private synchronized HashMap<String,String> getFullNameToFileMap() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1787
        if (fontToFileMap == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1788
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1789
            pathDirs = getPlatformFontDirs(noType1Font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1790
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1791
            fontToFileMap = new HashMap<String,String>(100);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1792
            fontToFamilyNameMap = new HashMap<String,String>(100);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1793
            familyToFontListMap = new HashMap<String,ArrayList<String>>(50);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1794
            populateFontFileNameMap(fontToFileMap,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1795
                                    fontToFamilyNameMap,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1796
                                    familyToFontListMap,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1797
                                    Locale.ENGLISH);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1798
            if (FontUtilities.isWindows) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1799
                resolveWindowsFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1800
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1801
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1802
                logPlatformFontInfo();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1803
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1804
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1805
        return fontToFileMap;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1806
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1807
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1808
    private void logPlatformFontInfo() {
3938
ef327bd847c0 6879044: Eliminate the dependency on logging from the AWT/2D/Swing classes
mchung
parents: 3929
diff changeset
  1809
        PlatformLogger logger = FontUtilities.getLogger();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1810
        for (int i=0; i< pathDirs.length;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1811
            logger.info("fontdir="+pathDirs[i]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1812
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1813
        for (String keyName : fontToFileMap.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1814
            logger.info("font="+keyName+" file="+ fontToFileMap.get(keyName));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1815
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1816
        for (String keyName : fontToFamilyNameMap.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1817
            logger.info("font="+keyName+" family="+
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1818
                        fontToFamilyNameMap.get(keyName));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1819
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1820
        for (String keyName : familyToFontListMap.keySet()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1821
            logger.info("family="+keyName+ " fonts="+
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1822
                        familyToFontListMap.get(keyName));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1823
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1824
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1825
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1826
    /* Note this return list excludes logical fonts and JRE fonts */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1827
    protected String[] getFontNamesFromPlatform() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1828
        if (getFullNameToFileMap().size() == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1829
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1830
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1831
        checkForUnreferencedFontFiles();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1832
        /* This odd code with TreeMap is used to preserve a historical
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1833
         * behaviour wrt the sorting order .. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1834
        ArrayList<String> fontNames = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1835
        for (ArrayList<String> a : familyToFontListMap.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1836
            for (String s : a) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1837
                fontNames.add(s);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1838
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1839
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1840
        return fontNames.toArray(STR_ARRAY);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1841
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1842
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1843
    public boolean gotFontsFromPlatform() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1844
        return getFullNameToFileMap().size() != 0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1845
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1846
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1847
    public String getFileNameForFontName(String fontName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1848
        String fontNameLC = fontName.toLowerCase(Locale.ENGLISH);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1849
        return fontToFileMap.get(fontNameLC);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1850
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1851
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1852
    private PhysicalFont registerFontFile(String file) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1853
        if (new File(file).isAbsolute() &&
37689
c69dbc15e4bd 8134986: Incorrect use of ConcurrentHashMap.contains in SunFontManager.java
prr
parents: 37550
diff changeset
  1854
            !registeredFonts.containsKey(file)) {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1855
            int fontFormat = FONTFORMAT_NONE;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1856
            int fontRank = Font2D.UNKNOWN_RANK;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1857
            if (ttFilter.accept(null, file)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1858
                fontFormat = FONTFORMAT_TRUETYPE;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1859
                fontRank = Font2D.TTF_RANK;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1860
            } else if
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1861
                (t1Filter.accept(null, file)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1862
                fontFormat = FONTFORMAT_TYPE1;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1863
                fontRank = Font2D.TYPE1_RANK;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1864
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1865
            if (fontFormat == FONTFORMAT_NONE) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1866
                return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1867
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1868
            return registerFontFile(file, null, fontFormat, false, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1869
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1870
        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1871
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1872
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1873
    /* Used to register any font files that are found by platform APIs
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1874
     * that weren't previously found in the standard font locations.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1875
     * the isAbsolute() check is needed since that's whats stored in the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1876
     * set, and on windows, the fonts in the system font directory that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1877
     * are in the fontToFileMap are just basenames. We don't want to try
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1878
     * to register those again, but we do want to register other registry
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1879
     * installed fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1880
     */
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  1881
    protected void registerOtherFontFiles(HashSet<String> registeredFontFiles) {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1882
        if (getFullNameToFileMap().size() == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1883
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1884
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1885
        for (String file : fontToFileMap.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1886
            registerFontFile(file);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1887
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1888
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1889
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1890
    public boolean
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1891
        getFamilyNamesFromPlatform(TreeMap<String,String> familyNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1892
                                   Locale requestedLocale) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1893
        if (getFullNameToFileMap().size() == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1894
            return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1895
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1896
        checkForUnreferencedFontFiles();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1897
        for (String name : fontToFamilyNameMap.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1898
            familyNames.put(name.toLowerCase(requestedLocale), name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1899
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1900
        return true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1901
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1902
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1903
    /* Path may be absolute or a base file name relative to one of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1904
     * the platform font directories
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1905
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1906
    private String getPathName(final String s) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1907
        File f = new File(s);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1908
        if (f.isAbsolute()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1909
            return s;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1910
        } else if (pathDirs.length==1) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1911
            return pathDirs[0] + File.separator + s;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1912
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1913
            String path = java.security.AccessController.doPrivileged(
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1914
                 new java.security.PrivilegedAction<String>() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1915
                     public String run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1916
                         for (int p=0; p<pathDirs.length; p++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1917
                             File f = new File(pathDirs[p] +File.separator+ s);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1918
                             if (f.exists()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1919
                                 return f.getAbsolutePath();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1920
                             }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1921
                         }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1922
                         return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1923
                     }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1924
                });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1925
            if (path != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1926
                return path;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1927
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1928
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1929
        return s; // shouldn't happen, but harmless
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1930
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1931
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1932
    /* lcName is required to be lower case for use as a key.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1933
     * lcName may be a full name, or a family name, and style may
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1934
     * be specified in addition to either of these. So be sure to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1935
     * get the right one. Since an app *could* ask for "Foo Regular"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1936
     * and later ask for "Foo Italic", if we don't register all the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1937
     * styles, then logic in findFont2D may try to style the original
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1938
     * so we register the entire family if we get a match here.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1939
     * This is still a big win because this code is invoked where
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1940
     * otherwise we would register all fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1941
     * It's also useful for the case where "Foo Bold" was specified with
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1942
     * style Font.ITALIC, as we would want in that case to try to return
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1943
     * "Foo Bold Italic" if it exists, and it is only by locating "Foo Bold"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1944
     * and opening it that we really "know" it's Bold, and can look for
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1945
     * a font that supports that and the italic style.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1946
     * The code in here is not overtly windows-specific but in fact it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1947
     * is unlikely to be useful as is on other platforms. It is maintained
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1948
     * in this shared source file to be close to its sole client and
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1949
     * because so much of the logic is intertwined with the logic in
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1950
     * findFont2D.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1951
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1952
    private Font2D findFontFromPlatform(String lcName, int style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1953
        if (getFullNameToFileMap().size() == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1954
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1955
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1956
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1957
        ArrayList<String> family = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1958
        String fontFile = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1959
        String familyName = fontToFamilyNameMap.get(lcName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1960
        if (familyName != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1961
            fontFile = fontToFileMap.get(lcName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1962
            family = familyToFontListMap.get
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1963
                (familyName.toLowerCase(Locale.ENGLISH));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1964
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1965
            family = familyToFontListMap.get(lcName); // is lcName is a family?
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1966
            if (family != null && family.size() > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1967
                String lcFontName = family.get(0).toLowerCase(Locale.ENGLISH);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1968
                if (lcFontName != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1969
                    familyName = fontToFamilyNameMap.get(lcFontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1970
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1971
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1972
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1973
        if (family == null || familyName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1974
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1975
        }
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21278
diff changeset
  1976
        String [] fontList = family.toArray(STR_ARRAY);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1977
        if (fontList.length == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1978
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1979
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1980
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1981
        /* first check that for every font in this family we can find
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1982
         * a font file. The specific reason for doing this is that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1983
         * in at least one case on Windows a font has the face name "David"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1984
         * but the registry entry is "David Regular". That is the "unique"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1985
         * name of the font but in other cases the registry contains the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1986
         * "full" name. See the specifications of name ids 3 and 4 in the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1987
         * TrueType 'name' table.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1988
         * In general this could cause a problem that we fail to register
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1989
         * if we all members of a family that we may end up mapping to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1990
         * the wrong font member: eg return Bold when Plain is needed.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1991
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1992
        for (int f=0;f<fontList.length;f++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1993
            String fontNameLC = fontList[f].toLowerCase(Locale.ENGLISH);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1994
            String fileName = fontToFileMap.get(fontNameLC);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1995
            if (fileName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1996
                if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1997
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1998
                          .info("Platform lookup : No file for font " +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  1999
                                fontList[f] + " in family " +familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2000
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2001
                return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2002
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2003
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2004
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2005
        /* Currently this code only looks for TrueType fonts, so format
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2006
         * and rank can be specified without looking at the filename.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2007
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2008
        PhysicalFont physicalFont = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2009
        if (fontFile != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2010
            physicalFont = registerFontFile(getPathName(fontFile), null,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2011
                                            FONTFORMAT_TRUETYPE, false,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2012
                                            Font2D.TTF_RANK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2013
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2014
        /* Register all fonts in this family. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2015
        for (int f=0;f<fontList.length;f++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2016
            String fontNameLC = fontList[f].toLowerCase(Locale.ENGLISH);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2017
            String fileName = fontToFileMap.get(fontNameLC);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2018
            if (fontFile != null && fontFile.equals(fileName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2019
                continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2020
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2021
            /* Currently this code only looks for TrueType fonts, so format
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2022
             * and rank can be specified without looking at the filename.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2023
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2024
            registerFontFile(getPathName(fileName), null,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2025
                             FONTFORMAT_TRUETYPE, false, Font2D.TTF_RANK);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2026
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2027
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2028
        Font2D font = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2029
        FontFamily fontFamily = FontFamily.getFamily(familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2030
        /* Handle case where request "MyFont Bold", style=Font.ITALIC */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2031
        if (physicalFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2032
            style |= physicalFont.style;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2033
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2034
        if (fontFamily != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2035
            font = fontFamily.getFont(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2036
            if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2037
                font = fontFamily.getClosestStyle(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2038
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2039
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2040
        return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2041
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2042
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2043
    private ConcurrentHashMap<String, Font2D> fontNameCache =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2044
        new ConcurrentHashMap<String, Font2D>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2045
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2046
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2047
     * The client supplies a name and a style.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2048
     * The name could be a family name, or a full name.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2049
     * A font may exist with the specified style, or it may
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2050
     * exist only in some other style. For non-native fonts the scaler
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2051
     * may be able to emulate the required style.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2052
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2053
    public Font2D findFont2D(String name, int style, int fallback) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2054
        String lowerCaseName = name.toLowerCase(Locale.ENGLISH);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2055
        String mapName = lowerCaseName + dotStyleStr(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2056
        Font2D font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2057
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2058
        /* If preferLocaleFonts() or preferProportionalFonts() has been
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2059
         * called we may be using an alternate set of composite fonts in this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2060
         * app context. The presence of a pre-built name map indicates whether
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2061
         * this is so, and gives access to the alternate composite for the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2062
         * name.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2063
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2064
        if (_usingPerAppContextComposites) {
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2065
            @SuppressWarnings("unchecked")
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2066
            ConcurrentHashMap<String, Font2D> altNameCache =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2067
                (ConcurrentHashMap<String, Font2D>)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2068
                AppContext.getAppContext().get(CompositeFont.class);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2069
            if (altNameCache != null) {
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21278
diff changeset
  2070
                font = altNameCache.get(mapName);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2071
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2072
                font = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2073
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2074
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2075
            font = fontNameCache.get(mapName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2076
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2077
        if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2078
            return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2079
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2080
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2081
        if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2082
            FontUtilities.getLogger().info("Search for font: " + name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2083
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2084
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2085
        // The check below is just so that the bitmap fonts being set by
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2086
        // AWT and Swing thru the desktop properties do not trigger the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2087
        // the load fonts case. The two bitmap fonts are now mapped to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2088
        // appropriate equivalents for serif and sansserif.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2089
        // Note that the cost of this comparison is only for the first
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2090
        // call until the map is filled.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2091
        if (FontUtilities.isWindows) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2092
            if (lowerCaseName.equals("ms sans serif")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2093
                name = "sansserif";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2094
            } else if (lowerCaseName.equals("ms serif")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2095
                name = "serif";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2096
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2097
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2098
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2099
        /* This isn't intended to support a client passing in the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2100
         * string default, but if a client passes in null for the name
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2101
         * the java.awt.Font class internally substitutes this name.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2102
         * So we need to recognise it here to prevent a loadFonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2103
         * on the unrecognised name. The only potential problem with
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2104
         * this is it would hide any real font called "default"!
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2105
         * But that seems like a potential problem we can ignore for now.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2106
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2107
        if (lowerCaseName.equals("default")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2108
            name = "dialog";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2109
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2110
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2111
        /* First see if its a family name. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2112
        FontFamily family = FontFamily.getFamily(name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2113
        if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2114
            font = family.getFontWithExactStyleMatch(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2115
            if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2116
                font = findDeferredFont(name, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2117
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2118
            if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2119
                font = family.getFont(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2120
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2121
            if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2122
                font = family.getClosestStyle(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2123
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2124
            if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2125
                fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2126
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2127
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2128
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2129
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2130
        /* If it wasn't a family name, it should be a full name of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2131
         * either a composite, or a physical font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2132
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2133
        font = fullNameToFont.get(lowerCaseName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2134
        if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2135
            /* Check that the requested style matches the matched font's style.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2136
             * But also match style automatically if the requested style is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2137
             * "plain". This because the existing behaviour is that the fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2138
             * listed via getAllFonts etc always list their style as PLAIN.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2139
             * This does lead to non-commutative behaviours where you might
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2140
             * start with "Lucida Sans Regular" and ask for a BOLD version
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2141
             * and get "Lucida Sans DemiBold" but if you ask for the PLAIN
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2142
             * style of "Lucida Sans DemiBold" you get "Lucida Sans DemiBold".
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2143
             * This consistent however with what happens if you have a bold
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2144
             * version of a font and no plain version exists - alg. styling
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2145
             * doesn't "unbolden" the font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2146
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2147
            if (font.style == style || style == Font.PLAIN) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2148
                fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2149
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2150
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2151
                /* If it was a full name like "Lucida Sans Regular", but
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2152
                 * the style requested is "bold", then we want to see if
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2153
                 * there's the appropriate match against another font in
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2154
                 * that family before trying to load all fonts, or applying a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2155
                 * algorithmic styling
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2156
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2157
                family = FontFamily.getFamily(font.getFamilyName(null));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2158
                if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2159
                    Font2D familyFont = family.getFont(style|font.style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2160
                    /* We exactly matched the requested style, use it! */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2161
                    if (familyFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2162
                        fontNameCache.put(mapName, familyFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2163
                        return familyFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2164
                    } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2165
                        /* This next call is designed to support the case
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2166
                         * where bold italic is requested, and if we must
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2167
                         * style, then base it on either bold or italic -
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2168
                         * not on plain!
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2169
                         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2170
                        familyFont = family.getClosestStyle(style|font.style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2171
                        if (familyFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2172
                            /* The next check is perhaps one
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2173
                             * that shouldn't be done. ie if we get this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2174
                             * far we have probably as close a match as we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2175
                             * are going to get. We could load all fonts to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2176
                             * see if somehow some parts of the family are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2177
                             * loaded but not all of it.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2178
                             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2179
                            if (familyFont.canDoStyle(style|font.style)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2180
                                fontNameCache.put(mapName, familyFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2181
                                return familyFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2182
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2183
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2184
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2185
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2186
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2187
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2188
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2189
        if (FontUtilities.isWindows) {
7950
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2190
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2191
            font = findFontFromPlatformMap(lowerCaseName, style);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2192
            if (FontUtilities.isLogging()) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2193
                FontUtilities.getLogger()
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2194
                    .info("findFontFromPlatformMap returned " + font);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2195
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2196
            if (font != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2197
                fontNameCache.put(mapName, font);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2198
                return font;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2199
            }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  2200
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2201
            /* Don't want Windows to return a Lucida Sans font from
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2202
             * C:\Windows\Fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2203
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2204
            if (deferredFontFiles.size() > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2205
                font = findJREDeferredFont(lowerCaseName, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2206
                if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2207
                    fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2208
                    return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2209
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2210
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2211
            font = findFontFromPlatform(lowerCaseName, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2212
            if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2213
                if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2214
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2215
                          .info("Found font via platform API for request:\"" +
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2216
                                name + "\":, style="+style+
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2217
                                " found font: " + font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2218
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2219
                fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2220
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2221
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2222
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2223
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2224
        /* If reach here and no match has been located, then if there are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2225
         * uninitialised deferred fonts, load as many of those as needed
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2226
         * to find the deferred font. If none is found through that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2227
         * search continue on.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2228
         * There is possibly a minor issue when more than one
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2229
         * deferred font implements the same font face. Since deferred
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2230
         * fonts are only those in font configuration files, this is a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2231
         * controlled situation, the known case being Solaris euro_fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2232
         * versions of Arial, Times New Roman, Courier New. However
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2233
         * the larger font will transparently replace the smaller one
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2234
         *  - see addToFontList() - when it is needed by the composite font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2235
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2236
        if (deferredFontFiles.size() > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2237
            font = findDeferredFont(name, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2238
            if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2239
                fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2240
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2241
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2242
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2243
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2244
        /* Some apps use deprecated 1.0 names such as helvetica and courier. On
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2245
         * Solaris these are Type1 fonts in /usr/openwin/lib/X11/fonts/Type1.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2246
         * If running on Solaris will register all the fonts in this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2247
         * directory.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2248
         * May as well register the whole directory without actually testing
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2249
         * the font name is one of the deprecated names as the next step would
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2250
         * load all fonts which are in this directory anyway.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2251
         * In the event that this lookup is successful it potentially "hides"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2252
         * TrueType versions of such fonts that are elsewhere but since they
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2253
         * do not exist on Solaris this is not a problem.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2254
         * Set a flag to indicate we've done this registration to avoid
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2255
         * repetition and more seriously, to avoid recursion.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2256
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2257
        if (FontUtilities.isSolaris &&!loaded1dot0Fonts) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2258
            /* "timesroman" is a special case since that's not the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2259
             * name of any known font on Solaris or elsewhere.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2260
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2261
            if (lowerCaseName.equals("timesroman")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2262
                font = findFont2D("serif", style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2263
                fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2264
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2265
            register1dot0Fonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2266
            loaded1dot0Fonts = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2267
            Font2D ff = findFont2D(name, style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2268
            return ff;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2269
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2270
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2271
        /* We check for application registered fonts before
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2272
         * explicitly loading all fonts as if necessary the registration
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2273
         * code will have done so anyway. And we don't want to needlessly
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2274
         * load the actual files for all fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2275
         * Just as for installed fonts we check for family before fullname.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2276
         * We do not add these fonts to fontNameCache for the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2277
         * app context case which eliminates the overhead of a per context
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2278
         * cache for these.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2279
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2280
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2281
        if (fontsAreRegistered || fontsAreRegisteredPerAppContext) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2282
            Hashtable<String, FontFamily> familyTable = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2283
            Hashtable<String, Font2D> nameTable;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2284
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2285
            if (fontsAreRegistered) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2286
                familyTable = createdByFamilyName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2287
                nameTable = createdByFullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2288
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2289
                AppContext appContext = AppContext.getAppContext();
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2290
                @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2291
                Hashtable<String,FontFamily> tmp1 =
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2292
                    (Hashtable<String,FontFamily>)appContext.get(regFamilyKey);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2293
                familyTable = tmp1;
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2294
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2295
                @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2296
                Hashtable<String, Font2D> tmp2 =
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2297
                    (Hashtable<String,Font2D>)appContext.get(regFullNameKey);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2298
                nameTable = tmp2;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2299
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2300
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2301
            family = familyTable.get(lowerCaseName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2302
            if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2303
                font = family.getFontWithExactStyleMatch(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2304
                if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2305
                    font = family.getFont(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2306
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2307
                if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2308
                    font = family.getClosestStyle(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2309
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2310
                if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2311
                    if (fontsAreRegistered) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2312
                        fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2313
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2314
                    return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2315
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2316
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2317
            font = nameTable.get(lowerCaseName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2318
            if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2319
                if (fontsAreRegistered) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2320
                    fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2321
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2322
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2323
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2324
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2325
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2326
        /* If reach here and no match has been located, then if all fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2327
         * are not yet loaded, do so, and then recurse.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2328
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2329
        if (!loadedAllFonts) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2330
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2331
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2332
                                       .info("Load fonts looking for:" + name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2333
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2334
            loadFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2335
            loadedAllFonts = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2336
            return findFont2D(name, style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2337
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2338
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2339
        if (!loadedAllFontFiles) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2340
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2341
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2342
                                  .info("Load font files looking for:" + name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2343
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2344
            loadFontFiles();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2345
            loadedAllFontFiles = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2346
            return findFont2D(name, style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2347
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2348
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2349
        /* The primary name is the locale default - ie not US/English but
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2350
         * whatever is the default in this locale. This is the way it always
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2351
         * has been but may be surprising to some developers if "Arial Regular"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2352
         * were hard-coded in their app and yet "Arial Regular" was not the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2353
         * default name. Fortunately for them, as a consequence of the JDK
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2354
         * supporting returning names and family names for arbitrary locales,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2355
         * we also need to support searching all localised names for a match.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2356
         * But because this case of the name used to reference a font is not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2357
         * the same as the default for this locale is rare, it makes sense to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2358
         * search a much shorter list of default locale names and only go to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2359
         * a longer list of names in the event that no match was found.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2360
         * So add here code which searches localised names too.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2361
         * As in 1.4.x this happens only after loading all fonts, which
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2362
         * is probably the right order.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2363
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2364
        if ((font = findFont2DAllLocales(name, style)) != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2365
            fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2366
            return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2367
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2368
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2369
        /* Perhaps its a "compatibility" name - timesroman, helvetica,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2370
         * or courier, which 1.0 apps used for logical fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2371
         * We look for these "late" after a loadFonts as we must not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2372
         * hide real fonts of these names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2373
         * Map these appropriately:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2374
         * On windows this means according to the rules specified by the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2375
         * FontConfiguration : do it only for encoding==Cp1252
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2376
         *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2377
         * REMIND: this is something we plan to remove.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2378
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2379
        if (FontUtilities.isWindows) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2380
            String compatName =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2381
                getFontConfiguration().getFallbackFamilyName(name, null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2382
            if (compatName != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2383
                font = findFont2D(compatName, style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2384
                fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2385
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2386
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2387
        } else if (lowerCaseName.equals("timesroman")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2388
            font = findFont2D("serif", style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2389
            fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2390
            return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2391
        } else if (lowerCaseName.equals("helvetica")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2392
            font = findFont2D("sansserif", style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2393
            fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2394
            return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2395
        } else if (lowerCaseName.equals("courier")) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2396
            font = findFont2D("monospaced", style, fallback);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2397
            fontNameCache.put(mapName, font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2398
            return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2399
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2400
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2401
        if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2402
            FontUtilities.getLogger().info("No font found for:" + name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2403
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2404
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2405
        switch (fallback) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2406
        case PHYSICAL_FALLBACK: return getDefaultPhysicalFont();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2407
        case LOGICAL_FALLBACK: return getDefaultLogicalFont(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2408
        default: return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2409
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2410
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2411
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2412
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2413
     * Workaround for apps which are dependent on a font metrics bug
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2414
     * in JDK 1.1. This is an unsupported win32 private setting.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2415
     * Left in for a customer - do not remove.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2416
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2417
    public boolean usePlatformFontMetrics() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2418
        return usePlatformFontMetrics;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2419
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2420
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2421
    public int getNumFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2422
        return physicalFonts.size()+maxCompFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2423
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2424
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2425
    private static boolean fontSupportsEncoding(Font font, String encoding) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2426
        return FontUtilities.getFont2D(font).supportsEncoding(encoding);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2427
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2428
7944
26b96bf47c49 6983037: closed/java/awt/font/FontNames/Type1Fonts.java failed due to missed font
prr
parents: 7937
diff changeset
  2429
    protected abstract String getFontPath(boolean noType1Fonts);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2430
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2431
    Thread fileCloser = null;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2432
    Vector<File> tmpFontFiles = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2433
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2434
    public Font2D[] createFont2D(File fontFile, int fontFormat, boolean all,
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2435
                                 boolean isCopy, CreatedFontTracker tracker)
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2436
    throws FontFormatException {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2437
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2438
        List<Font2D> fList = new ArrayList<Font2D>();
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2439
        int cnt = 1;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2440
        String fontFilePath = fontFile.getPath();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2441
        FileFont font2D = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2442
        final File fFile = fontFile;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2443
        final CreatedFontTracker _tracker = tracker;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2444
        try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2445
            switch (fontFormat) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2446
            case Font.TRUETYPE_FONT:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2447
                font2D = new TrueTypeFont(fontFilePath, null, 0, true);
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2448
                fList.add(font2D);
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2449
                if (!all) {
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2450
                    break;
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2451
                }
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2452
                cnt = ((TrueTypeFont)font2D).getFontCount();
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2453
                int index = 1;
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2454
                while (index < cnt) {
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2455
                    fList.add(new TrueTypeFont(fontFilePath, null, index++, true));
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2456
                }
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2457
                break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2458
            case Font.TYPE1_FONT:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2459
                font2D = new Type1Font(fontFilePath, null, isCopy);
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2460
                fList.add(font2D);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2461
                break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2462
            default:
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2463
                throw new FontFormatException("Unrecognised Font Format");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2464
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2465
        } catch (FontFormatException e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2466
            if (isCopy) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2467
                java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2468
                     new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2469
                          public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2470
                              if (_tracker != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2471
                                  _tracker.subBytes((int)fFile.length());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2472
                              }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2473
                              fFile.delete();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2474
                              return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2475
                          }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2476
                });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2477
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2478
            throw(e);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2479
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2480
        if (isCopy) {
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2481
            FileFont.setFileToRemove(fList, fontFile, cnt, tracker);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2482
            synchronized (FontManager.class) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2483
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2484
                if (tmpFontFiles == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2485
                    tmpFontFiles = new Vector<File>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2486
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2487
                tmpFontFiles.add(fontFile);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2488
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2489
                if (fileCloser == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2490
                    final Runnable fileCloserRunnable = new Runnable() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2491
                      public void run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2492
                         java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2493
                         new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2494
                         public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2495
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2496
                            for (int i=0;i<CHANNELPOOLSIZE;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2497
                                if (fontFileCache[i] != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2498
                                    try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2499
                                        fontFileCache[i].close();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2500
                                    } catch (Exception e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2501
                                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2502
                                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2503
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2504
                            if (tmpFontFiles != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2505
                                File[] files = new File[tmpFontFiles.size()];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2506
                                files = tmpFontFiles.toArray(files);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2507
                                for (int f=0; f<files.length;f++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2508
                                    try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2509
                                        files[f].delete();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2510
                                    } catch (Exception e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2511
                                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2512
                                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2513
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2514
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2515
                            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2516
                          }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2517
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2518
                          });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2519
                      }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2520
                    };
29922
7b9c1e1532cf 8027771: Enhance thread contexts
serb
parents: 28059
diff changeset
  2521
                    AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
31653
d88ff422c7fb 8080405: Exception in thread "AWT-EventQueue-1" java.security.AccessControlException
serb
parents: 30465
diff changeset
  2522
                        ThreadGroup rootTG = ThreadGroupUtils.getRootThreadGroup();
37550
c8252b8fea3d 8147544: Remove sun.misc.ManagedLocalsThread from java.desktop
prr
parents: 36899
diff changeset
  2523
                        fileCloser = new Thread(rootTG, fileCloserRunnable,
c8252b8fea3d 8147544: Remove sun.misc.ManagedLocalsThread from java.desktop
prr
parents: 36899
diff changeset
  2524
                                                "FileCloser", 0, false);
29922
7b9c1e1532cf 8027771: Enhance thread contexts
serb
parents: 28059
diff changeset
  2525
                        fileCloser.setContextClassLoader(null);
7b9c1e1532cf 8027771: Enhance thread contexts
serb
parents: 28059
diff changeset
  2526
                        Runtime.getRuntime().addShutdownHook(fileCloser);
7b9c1e1532cf 8027771: Enhance thread contexts
serb
parents: 28059
diff changeset
  2527
                        return null;
7b9c1e1532cf 8027771: Enhance thread contexts
serb
parents: 28059
diff changeset
  2528
                    });
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2529
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2530
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2531
        }
36899
e766024a0873 8055463: Need public API allowing full access to font collections in Font.createFont()
prr
parents: 35786
diff changeset
  2532
        return fList.toArray(new Font2D[0]);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2533
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2534
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2535
    /* remind: used in X11GraphicsEnvironment and called often enough
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2536
     * that we ought to obsolete this code
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2537
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2538
    public synchronized String getFullNameByFileName(String fileName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2539
        PhysicalFont[] physFonts = getPhysicalFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2540
        for (int i=0;i<physFonts.length;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2541
            if (physFonts[i].platName.equals(fileName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2542
                return (physFonts[i].getFontName(null));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2543
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2544
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2545
        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2546
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2547
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2548
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2549
     * This is called when font is determined to be invalid/bad.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2550
     * It designed to be called (for example) by the font scaler
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2551
     * when in processing a font file it is discovered to be incorrect.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2552
     * This is different than the case where fonts are discovered to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2553
     * be incorrect during initial verification, as such fonts are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2554
     * never registered.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2555
     * Handles to this font held are re-directed to a default font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2556
     * This default may not be an ideal substitute buts it better than
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2557
     * crashing This code assumes a PhysicalFont parameter as it doesn't
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2558
     * make sense for a Composite to be "bad".
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2559
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2560
    public synchronized void deRegisterBadFont(Font2D font2D) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2561
        if (!(font2D instanceof PhysicalFont)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2562
            /* We should never reach here, but just in case */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2563
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2564
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2565
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2566
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2567
                                     .severe("Deregister bad font: " + font2D);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2568
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2569
            replaceFont((PhysicalFont)font2D, getDefaultPhysicalFont());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2570
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2571
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2572
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2573
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2574
     * This encapsulates all the work that needs to be done when a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2575
     * Font2D is replaced by a different Font2D.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2576
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2577
    public synchronized void replaceFont(PhysicalFont oldFont,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2578
                                         PhysicalFont newFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2579
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2580
        if (oldFont.handle.font2D != oldFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2581
            /* already done */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2582
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2583
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2584
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2585
        /* If we try to replace the font with itself, that won't work,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2586
         * so pick any alternative physical font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2587
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2588
        if (oldFont == newFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2589
            if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2590
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2591
                      .severe("Can't replace bad font with itself " + oldFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2592
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2593
            PhysicalFont[] physFonts = getPhysicalFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2594
            for (int i=0; i<physFonts.length;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2595
                if (physFonts[i] != newFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2596
                    newFont = physFonts[i];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2597
                    break;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2598
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2599
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2600
            if (oldFont == newFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2601
                if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2602
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2603
                           .severe("This is bad. No good physicalFonts found.");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2604
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2605
                return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2606
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2607
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2608
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2609
        /* eliminate references to this font, so it won't be located
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2610
         * by future callers, and will be eligible for GC when all
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2611
         * references are removed
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2612
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2613
        oldFont.handle.font2D = newFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2614
        physicalFonts.remove(oldFont.fullName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2615
        fullNameToFont.remove(oldFont.fullName.toLowerCase(Locale.ENGLISH));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2616
        FontFamily.remove(oldFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2617
        if (localeFullNamesToFont != null) {
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2618
            Map.Entry<?, ?>[] mapEntries = localeFullNamesToFont.entrySet().
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2619
                toArray(new Map.Entry<?, ?>[0]);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2620
            /* Should I be replacing these, or just I just remove
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2621
             * the names from the map?
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2622
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2623
            for (int i=0; i<mapEntries.length;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2624
                if (mapEntries[i].getValue() == oldFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2625
                    try {
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2626
                        @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2627
                        Map.Entry<String, PhysicalFont> tmp = (Map.Entry<String, PhysicalFont>)mapEntries[i];
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2628
                        tmp.setValue(newFont);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2629
                    } catch (Exception e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2630
                        /* some maps don't support this operation.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2631
                         * In this case just give up and remove the entry.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2632
                         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2633
                        localeFullNamesToFont.remove(mapEntries[i].getKey());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2634
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2635
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2636
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2637
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2638
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2639
        for (int i=0; i<maxCompFont; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2640
            /* Deferred initialization of composites shouldn't be
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2641
             * a problem for this case, since a font must have been
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2642
             * initialised to be discovered to be bad.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2643
             * Some JRE composites on Solaris use two versions of the same
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2644
             * font. The replaced font isn't bad, just "smaller" so there's
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2645
             * no need to make the slot point to the new font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2646
             * Since composites have a direct reference to the Font2D (not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2647
             * via a handle) making this substitution is not safe and could
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2648
             * cause an additional problem and so this substitution is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2649
             * warranted only when a font is truly "bad" and could cause
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2650
             * a crash. So we now replace it only if its being substituted
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2651
             * with some font other than a fontconfig rank font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2652
             * Since in practice a substitution will have the same rank
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2653
             * this may never happen, but the code is safer even if its
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2654
             * also now a no-op.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2655
             * The only obvious "glitch" from this stems from the current
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2656
             * implementation that when asked for the number of glyphs in a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2657
             * composite it lies and returns the number in slot 0 because
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2658
             * composite glyphs aren't contiguous. Since we live with that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2659
             * we can live with the glitch that depending on how it was
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2660
             * initialised a composite may return different values for this.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2661
             * Fixing the issues with composite glyph ids is tricky as
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2662
             * there are exclusion ranges and unlike other fonts even the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2663
             * true "numGlyphs" isn't a contiguous range. Likely the only
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2664
             * solution is an API that returns an array of glyph ranges
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2665
             * which takes precedence over the existing API. That might
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2666
             * also need to address excluding ranges which represent a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2667
             * code point supported by an earlier component.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2668
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2669
            if (newFont.getRank() > Font2D.FONT_CONFIG_RANK) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2670
                compFonts[i].replaceComponentFont(oldFont, newFont);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2671
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2672
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2673
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2674
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2675
    private synchronized void loadLocaleNames() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2676
        if (localeFullNamesToFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2677
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2678
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2679
        localeFullNamesToFont = new HashMap<String, TrueTypeFont>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2680
        Font2D[] fonts = getRegisteredFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2681
        for (int i=0; i<fonts.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2682
            if (fonts[i] instanceof TrueTypeFont) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2683
                TrueTypeFont ttf = (TrueTypeFont)fonts[i];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2684
                String[] fullNames = ttf.getAllFullNames();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2685
                for (int n=0; n<fullNames.length; n++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2686
                    localeFullNamesToFont.put(fullNames[n], ttf);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2687
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2688
                FontFamily family = FontFamily.getFamily(ttf.familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2689
                if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2690
                    FontFamily.addLocaleNames(family, ttf.getAllFamilyNames());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2691
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2692
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2693
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2694
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2695
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2696
    /* This replicate the core logic of findFont2D but operates on
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2697
     * all the locale names. This hasn't been merged into findFont2D to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2698
     * keep the logic simpler and reduce overhead, since this case is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2699
     * almost never used. The main case in which it is called is when
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2700
     * a bogus font name is used and we need to check all possible names
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2701
     * before returning the default case.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2702
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2703
    private Font2D findFont2DAllLocales(String name, int style) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2704
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2705
        if (FontUtilities.isLogging()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2706
            FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2707
                           .info("Searching localised font names for:" + name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2708
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2709
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2710
        /* If reach here and no match has been located, then if we have
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2711
         * not yet built the map of localeFullNamesToFont for TT fonts, do so
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2712
         * now. This method must be called after all fonts have been loaded.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2713
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2714
        if (localeFullNamesToFont == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2715
            loadLocaleNames();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2716
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2717
        String lowerCaseName = name.toLowerCase();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2718
        Font2D font = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2719
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2720
        /* First see if its a family name. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2721
        FontFamily family = FontFamily.getLocaleFamily(lowerCaseName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2722
        if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2723
          font = family.getFont(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2724
          if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2725
            font = family.getClosestStyle(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2726
          }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2727
          if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2728
              return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2729
          }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2730
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2731
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2732
        /* If it wasn't a family name, it should be a full name. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2733
        synchronized (this) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2734
            font = localeFullNamesToFont.get(name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2735
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2736
        if (font != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2737
            if (font.style == style || style == Font.PLAIN) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2738
                return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2739
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2740
                family = FontFamily.getFamily(font.getFamilyName(null));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2741
                if (family != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2742
                    Font2D familyFont = family.getFont(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2743
                    /* We exactly matched the requested style, use it! */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2744
                    if (familyFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2745
                        return familyFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2746
                    } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2747
                        familyFont = family.getClosestStyle(style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2748
                        if (familyFont != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2749
                            /* The next check is perhaps one
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2750
                             * that shouldn't be done. ie if we get this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2751
                             * far we have probably as close a match as we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2752
                             * are going to get. We could load all fonts to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2753
                             * see if somehow some parts of the family are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2754
                             * loaded but not all of it.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2755
                             * This check is commented out for now.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2756
                             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2757
                            if (!familyFont.canDoStyle(style)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2758
                                familyFont = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2759
                            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2760
                            return familyFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2761
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2762
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2763
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2764
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2765
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2766
        return font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2767
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2768
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2769
    /* Supporting "alternate" composite fonts on 2D graphics objects
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2770
     * is accessed by the application by calling methods on the local
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2771
     * GraphicsEnvironment. The overall implementation is described
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2772
     * in one place, here, since otherwise the implementation is spread
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2773
     * around it may be difficult to track.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2774
     * The methods below call into SunGraphicsEnvironment which creates a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2775
     * new FontConfiguration instance. The FontConfiguration class,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2776
     * and its platform sub-classes are updated to take parameters requesting
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2777
     * these behaviours. This is then used to create new composite font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2778
     * instances. Since this calls the initCompositeFont method in
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2779
     * SunGraphicsEnvironment it performs the same initialization as is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2780
     * performed normally. There may be some duplication of effort, but
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2781
     * that code is already written to be able to perform properly if called
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2782
     * to duplicate work. The main difference is that if we detect we are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2783
     * running in an applet/browser/Java plugin environment these new fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2784
     * are not placed in the "default" maps but into an AppContext instance.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2785
     * The font lookup mechanism in java.awt.Font.getFont2D() is also updated
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2786
     * so that look-up for composite fonts will in that case always
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2787
     * do a lookup rather than returning a cached result.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2788
     * This is inefficient but necessary else singleton java.awt.Font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2789
     * instances would not retrieve the correct Font2D for the appcontext.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2790
     * sun.font.FontManager.findFont2D is also updated to that it uses
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2791
     * a name map cache specific to that appcontext.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2792
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2793
     * Getting an AppContext is expensive, so there is a global variable
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2794
     * that records whether these methods have ever been called and can
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2795
     * avoid the expense for almost all applications. Once the correct
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2796
     * CompositeFont is associated with the Font, everything should work
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2797
     * through existing mechanisms.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2798
     * A special case is that GraphicsEnvironment.getAllFonts() must
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2799
     * return an AppContext specific list.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2800
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2801
     * Calling the methods below is "heavyweight" but it is expected that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2802
     * these methods will be called very rarely.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2803
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2804
     * If _usingPerAppContextComposites is true, we are in "applet"
21278
ef8a3a2a72f2 8022746: List of spelling errors in API doc
malenkov
parents: 18178
diff changeset
  2805
     * (eg browser) environment and at least one context has selected
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2806
     * an alternate composite font behaviour.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2807
     * If _usingAlternateComposites is true, we are not in an "applet"
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2808
     * environment and the (single) application has selected
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2809
     * an alternate composite font behaviour.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2810
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2811
     * - Printing: The implementation delegates logical fonts to an AWT
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2812
     * mechanism which cannot use these alternate configurations.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2813
     * We can detect that alternate fonts are in use and back-off to 2D, but
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2814
     * that uses outlines. Much of this can be fixed with additional work
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2815
     * but that may have to wait. The results should be correct, just not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2816
     * optimal.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2817
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2818
    private static final Object altJAFontKey       = new Object();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2819
    private static final Object localeFontKey       = new Object();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2820
    private static final Object proportionalFontKey = new Object();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2821
    private boolean _usingPerAppContextComposites = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2822
    private boolean _usingAlternateComposites = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2823
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2824
    /* These values are used only if we are running as a standalone
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2825
     * application, as determined by maybeMultiAppContext();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2826
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2827
    private static boolean gAltJAFont = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2828
    private boolean gLocalePref = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2829
    private boolean gPropPref = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2830
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2831
    /* This method doesn't check if alternates are selected in this app
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2832
     * context. Its used by the FontMetrics caching code which in such
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2833
     * a case cannot retrieve a cached metrics solely on the basis of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2834
     * the Font.equals() method since it needs to also check if the Font2D
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2835
     * is the same.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2836
     * We also use non-standard composites for Swing native L&F fonts on
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2837
     * Windows. In that case the policy is that the metrics reported are
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2838
     * based solely on the physical font in the first slot which is the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2839
     * visible java.awt.Font. So in that case the metrics cache which tests
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2840
     * the Font does what we want. In the near future when we expand the GTK
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2841
     * logical font definitions we may need to revisit this if GTK reports
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2842
     * combined metrics instead. For now though this test can be simple.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2843
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2844
    public boolean maybeUsingAlternateCompositeFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2845
       return _usingAlternateComposites || _usingPerAppContextComposites;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2846
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2847
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2848
    public boolean usingAlternateCompositeFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2849
        return (_usingAlternateComposites ||
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2850
                (_usingPerAppContextComposites &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2851
                AppContext.getAppContext().get(CompositeFont.class) != null));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2852
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2853
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2854
    private static boolean maybeMultiAppContext() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2855
        Boolean appletSM = (Boolean)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2856
            java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  2857
                new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2858
                        public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2859
                            SecurityManager sm = System.getSecurityManager();
25122
1ecc464c69d2 8044460: Cleanup new Boolean and single character strings
rriggs
parents: 24527
diff changeset
  2860
                            return sm instanceof sun.applet.AppletSecurity;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2861
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2862
                    });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2863
        return appletSM.booleanValue();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2864
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2865
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2866
    /* Modifies the behaviour of a subsequent call to preferLocaleFonts()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2867
     * to use Mincho instead of Gothic for dialoginput in JA locales
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2868
     * on windows. Not needed on other platforms.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2869
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2870
    public synchronized void useAlternateFontforJALocales() {
8945
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2871
        if (FontUtilities.isLogging()) {
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2872
            FontUtilities.getLogger()
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2873
                .info("Entered useAlternateFontforJALocales().");
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2874
        }
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2875
        if (!FontUtilities.isWindows) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2876
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2877
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2878
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2879
        if (!maybeMultiAppContext()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2880
            gAltJAFont = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2881
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2882
            AppContext appContext = AppContext.getAppContext();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2883
            appContext.put(altJAFontKey, altJAFontKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2884
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2885
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2886
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2887
    public boolean usingAlternateFontforJALocales() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2888
        if (!maybeMultiAppContext()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2889
            return gAltJAFont;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2890
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2891
            AppContext appContext = AppContext.getAppContext();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2892
            return appContext.get(altJAFontKey) == altJAFontKey;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2893
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2894
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2895
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2896
    public synchronized void preferLocaleFonts() {
8945
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2897
        if (FontUtilities.isLogging()) {
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2898
            FontUtilities.getLogger().info("Entered preferLocaleFonts().");
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2899
        }
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2900
        /* Test if re-ordering will have any effect */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2901
        if (!FontConfiguration.willReorderForStartupLocale()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2902
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2903
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2904
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2905
        if (!maybeMultiAppContext()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2906
            if (gLocalePref == true) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2907
                return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2908
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2909
            gLocalePref = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2910
            createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2911
            _usingAlternateComposites = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2912
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2913
            AppContext appContext = AppContext.getAppContext();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2914
            if (appContext.get(localeFontKey) == localeFontKey) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2915
                return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2916
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2917
            appContext.put(localeFontKey, localeFontKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2918
            boolean acPropPref =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2919
                appContext.get(proportionalFontKey) == proportionalFontKey;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2920
            ConcurrentHashMap<String, Font2D>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2921
                altNameCache = new ConcurrentHashMap<String, Font2D> ();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2922
            /* If there is an existing hashtable, we can drop it. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2923
            appContext.put(CompositeFont.class, altNameCache);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2924
            _usingPerAppContextComposites = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2925
            createCompositeFonts(altNameCache, true, acPropPref);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2926
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2927
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2928
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2929
    public synchronized void preferProportionalFonts() {
8945
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2930
        if (FontUtilities.isLogging()) {
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2931
            FontUtilities.getLogger()
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2932
                .info("Entered preferProportionalFonts().");
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  2933
        }
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2934
        /* If no proportional fonts are configured, there's no need
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2935
         * to take any action.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2936
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2937
        if (!FontConfiguration.hasMonoToPropMap()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2938
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2939
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2940
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2941
        if (!maybeMultiAppContext()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2942
            if (gPropPref == true) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2943
                return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2944
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2945
            gPropPref = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2946
            createCompositeFonts(fontNameCache, gLocalePref, gPropPref);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2947
            _usingAlternateComposites = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2948
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2949
            AppContext appContext = AppContext.getAppContext();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2950
            if (appContext.get(proportionalFontKey) == proportionalFontKey) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2951
                return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2952
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2953
            appContext.put(proportionalFontKey, proportionalFontKey);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2954
            boolean acLocalePref =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2955
                appContext.get(localeFontKey) == localeFontKey;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2956
            ConcurrentHashMap<String, Font2D>
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2957
                altNameCache = new ConcurrentHashMap<String, Font2D> ();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2958
            /* If there is an existing hashtable, we can drop it. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2959
            appContext.put(CompositeFont.class, altNameCache);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2960
            _usingPerAppContextComposites = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2961
            createCompositeFonts(altNameCache, acLocalePref, true);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2962
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2963
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2964
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2965
    private static HashSet<String> installedNames = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2966
    private static HashSet<String> getInstalledNames() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2967
        if (installedNames == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2968
           Locale l = getSystemStartupLocale();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2969
           SunFontManager fontManager = SunFontManager.getInstance();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2970
           String[] installedFamilies =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2971
               fontManager.getInstalledFontFamilyNames(l);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2972
           Font[] installedFonts = fontManager.getAllInstalledFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2973
           HashSet<String> names = new HashSet<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2974
           for (int i=0; i<installedFamilies.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2975
               names.add(installedFamilies[i].toLowerCase(l));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2976
           }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2977
           for (int i=0; i<installedFonts.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2978
               names.add(installedFonts[i].getFontName(l).toLowerCase(l));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2979
           }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2980
           installedNames = names;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2981
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2982
        return installedNames;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2983
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2984
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2985
    /* Keys are used to lookup per-AppContext Hashtables */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2986
    private static final Object regFamilyKey  = new Object();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2987
    private static final Object regFullNameKey = new Object();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2988
    private Hashtable<String,FontFamily> createdByFamilyName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2989
    private Hashtable<String,Font2D>     createdByFullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2990
    private boolean fontsAreRegistered = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2991
    private boolean fontsAreRegisteredPerAppContext = false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2992
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2993
    public boolean registerFont(Font font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2994
        /* This method should not be called with "null".
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2995
         * It is the caller's responsibility to ensure that.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2996
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2997
        if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2998
            return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  2999
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3000
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3001
        /* Initialise these objects only once we start to use this API */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3002
        synchronized (regFamilyKey) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3003
            if (createdByFamilyName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3004
                createdByFamilyName = new Hashtable<String,FontFamily>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3005
                createdByFullName = new Hashtable<String,Font2D>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3006
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3007
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3008
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3009
        if (! FontAccess.getFontAccess().isCreatedFont(font)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3010
            return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3011
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3012
        /* We want to ensure that this font cannot override existing
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3013
         * installed fonts. Check these conditions :
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3014
         * - family name is not that of an installed font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3015
         * - full name is not that of an installed font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3016
         * - family name is not the same as the full name of an installed font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3017
         * - full name is not the same as the family name of an installed font
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3018
         * The last two of these may initially look odd but the reason is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3019
         * that (unfortunately) Font constructors do not distinuguish these.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3020
         * An extreme example of such a problem would be a font which has
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3021
         * family name "Dialog.Plain" and full name of "Dialog".
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3022
         * The one arguably overly stringent restriction here is that if an
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3023
         * application wants to supply a new member of an existing family
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3024
         * It will get rejected. But since the JRE can perform synthetic
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3025
         * styling in many cases its not necessary.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3026
         * We don't apply the same logic to registered fonts. If apps want
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3027
         * to do this lets assume they have a reason. It won't cause problems
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3028
         * except for themselves.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3029
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3030
        HashSet<String> names = getInstalledNames();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3031
        Locale l = getSystemStartupLocale();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3032
        String familyName = font.getFamily(l).toLowerCase();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3033
        String fullName = font.getFontName(l).toLowerCase();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3034
        if (names.contains(familyName) || names.contains(fullName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3035
            return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3036
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3037
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3038
        /* Checks passed, now register the font */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3039
        Hashtable<String,FontFamily> familyTable;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3040
        Hashtable<String,Font2D> fullNameTable;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3041
        if (!maybeMultiAppContext()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3042
            familyTable = createdByFamilyName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3043
            fullNameTable = createdByFullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3044
            fontsAreRegistered = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3045
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3046
            AppContext appContext = AppContext.getAppContext();
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3047
            @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3048
            Hashtable<String,FontFamily> tmp1 =
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3049
                (Hashtable<String,FontFamily>)appContext.get(regFamilyKey);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3050
            familyTable = tmp1;
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3051
            @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3052
            Hashtable<String,Font2D> tmp2 =
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3053
                (Hashtable<String,Font2D>)appContext.get(regFullNameKey);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3054
            fullNameTable = tmp2;
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3055
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3056
            if (familyTable == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3057
                familyTable = new Hashtable<String,FontFamily>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3058
                fullNameTable = new Hashtable<String,Font2D>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3059
                appContext.put(regFamilyKey, familyTable);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3060
                appContext.put(regFullNameKey, fullNameTable);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3061
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3062
            fontsAreRegisteredPerAppContext = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3063
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3064
        /* Create the FontFamily and add font to the tables */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3065
        Font2D font2D = FontUtilities.getFont2D(font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3066
        int style = font2D.getStyle();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3067
        FontFamily family = familyTable.get(familyName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3068
        if (family == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3069
            family = new FontFamily(font.getFamily(l));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3070
            familyTable.put(familyName, family);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3071
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3072
        /* Remove name cache entries if not using app contexts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3073
         * To accommodate a case where code may have registered first a plain
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3074
         * family member and then used it and is now registering a bold family
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3075
         * member, we need to remove all members of the family, so that the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3076
         * new style can get picked up rather than continuing to synthesise.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3077
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3078
        if (fontsAreRegistered) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3079
            removeFromCache(family.getFont(Font.PLAIN));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3080
            removeFromCache(family.getFont(Font.BOLD));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3081
            removeFromCache(family.getFont(Font.ITALIC));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3082
            removeFromCache(family.getFont(Font.BOLD|Font.ITALIC));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3083
            removeFromCache(fullNameTable.get(fullName));
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3084
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3085
        family.setFont(font2D, style);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3086
        fullNameTable.put(fullName, font2D);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3087
        return true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3088
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3089
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3090
    /* Remove from the name cache all references to the Font2D */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3091
    private void removeFromCache(Font2D font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3092
        if (font == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3093
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3094
        }
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21278
diff changeset
  3095
        String[] keys = fontNameCache.keySet().toArray(STR_ARRAY);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3096
        for (int k=0; k<keys.length;k++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3097
            if (fontNameCache.get(keys[k]) == font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3098
                fontNameCache.remove(keys[k]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3099
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3100
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3101
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3102
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3103
    // It may look odd to use TreeMap but its more convenient to the caller.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3104
    public TreeMap<String, String> getCreatedFontFamilyNames() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3105
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3106
        Hashtable<String,FontFamily> familyTable;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3107
        if (fontsAreRegistered) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3108
            familyTable = createdByFamilyName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3109
        } else if (fontsAreRegisteredPerAppContext) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3110
            AppContext appContext = AppContext.getAppContext();
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3111
            @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3112
            Hashtable<String,FontFamily> tmp =
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3113
                (Hashtable<String,FontFamily>)appContext.get(regFamilyKey);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3114
            familyTable = tmp;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3115
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3116
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3117
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3118
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3119
        Locale l = getSystemStartupLocale();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3120
        synchronized (familyTable) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3121
            TreeMap<String, String> map = new TreeMap<String, String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3122
            for (FontFamily f : familyTable.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3123
                Font2D font2D = f.getFont(Font.PLAIN);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3124
                if (font2D == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3125
                    font2D = f.getClosestStyle(Font.PLAIN);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3126
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3127
                String name = font2D.getFamilyName(l);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3128
                map.put(name.toLowerCase(l), name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3129
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3130
            return map;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3131
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3132
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3133
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3134
    public Font[] getCreatedFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3135
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3136
        Hashtable<String,Font2D> nameTable;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3137
        if (fontsAreRegistered) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3138
            nameTable = createdByFullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3139
        } else if (fontsAreRegisteredPerAppContext) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3140
            AppContext appContext = AppContext.getAppContext();
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3141
            @SuppressWarnings("unchecked")
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3142
            Hashtable<String,Font2D> tmp =
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3143
                (Hashtable<String,Font2D>)appContext.get(regFullNameKey);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3144
            nameTable = tmp;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3145
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3146
            return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3147
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3148
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3149
        Locale l = getSystemStartupLocale();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3150
        synchronized (nameTable) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3151
            Font[] fonts = new Font[nameTable.size()];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3152
            int i=0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3153
            for (Font2D font2D : nameTable.values()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3154
                fonts[i++] = new Font(font2D.getFontName(l), Font.PLAIN, 1);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3155
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3156
            return fonts;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3157
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3158
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3159
7950
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3160
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3161
    protected String[] getPlatformFontDirs(boolean noType1Fonts) {
7950
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3162
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3163
        /* First check if we already initialised path dirs */
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3164
        if (pathDirs != null) {
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3165
            return pathDirs;
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3166
        }
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3167
7944
26b96bf47c49 6983037: closed/java/awt/font/FontNames/Type1Fonts.java failed due to missed font
prr
parents: 7937
diff changeset
  3168
        String path = getPlatformFontPath(noType1Fonts);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3169
        StringTokenizer parser =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3170
            new StringTokenizer(path, File.pathSeparator);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3171
        ArrayList<String> pathList = new ArrayList<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3172
        try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3173
            while (parser.hasMoreTokens()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3174
                pathList.add(parser.nextToken());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3175
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3176
        } catch (NoSuchElementException e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3177
        }
7950
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3178
        pathDirs = pathList.toArray(new String[0]);
dc8f97e15f9b 6892138: Windows GDI platform font lookup apis affect start-up for small UI apps
prr
parents: 7944
diff changeset
  3179
        return pathDirs;
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3180
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3181
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3182
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3183
     * Returns an array of two strings. The first element is the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3184
     * name of the font. The second element is the file name.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3185
     */
26007
dba8f49653ce 8035165: Expose internal representation in sun.awt.X11
serb
parents: 25122
diff changeset
  3186
    protected abstract String[] getDefaultPlatformFont();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3187
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3188
    // Begin: Refactored from SunGraphicsEnviroment.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3189
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3190
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3191
     * helper function for registerFonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3192
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3193
    private void addDirFonts(String dirName, File dirFile,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3194
                             FilenameFilter filter,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3195
                             int fontFormat, boolean useJavaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3196
                             int fontRank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3197
                             boolean defer, boolean resolveSymLinks) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3198
        String[] ls = dirFile.list(filter);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3199
        if (ls == null || ls.length == 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3200
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3201
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3202
        String[] fontNames = new String[ls.length];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3203
        String[][] nativeNames = new String[ls.length][];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3204
        int fontCount = 0;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3205
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3206
        for (int i=0; i < ls.length; i++ ) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3207
            File theFile = new File(dirFile, ls[i]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3208
            String fullName = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3209
            if (resolveSymLinks) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3210
                try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3211
                    fullName = theFile.getCanonicalPath();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3212
                } catch (IOException e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3213
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3214
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3215
            if (fullName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3216
                fullName = dirName + File.separator + ls[i];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3217
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3218
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3219
            // REMIND: case compare depends on platform
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3220
            if (registeredFontFiles.contains(fullName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3221
                continue;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3222
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3223
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3224
            if (badFonts != null && badFonts.contains(fullName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3225
                if (FontUtilities.debugFonts()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3226
                    FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3227
                                         .warning("skip bad font " + fullName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3228
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3229
                continue; // skip this font file.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3230
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3231
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3232
            registeredFontFiles.add(fullName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3233
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3234
            if (FontUtilities.debugFonts()
18178
ee71c923891d 8016747: Replace deprecated PlatformLogger isLoggable(int) with isLoggable(Level)
chegar
parents: 12052
diff changeset
  3235
                && FontUtilities.getLogger().isLoggable(PlatformLogger.Level.INFO)) {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3236
                String message = "Registering font " + fullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3237
                String[] natNames = getNativeNames(fullName, null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3238
                if (natNames == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3239
                    message += " with no native name";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3240
                } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3241
                    message += " with native name(s) " + natNames[0];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3242
                    for (int nn = 1; nn < natNames.length; nn++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3243
                        message += ", " + natNames[nn];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3244
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3245
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3246
                FontUtilities.getLogger().info(message);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3247
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3248
            fontNames[fontCount] = fullName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3249
            nativeNames[fontCount++] = getNativeNames(fullName, null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3250
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3251
        registerFonts(fontNames, nativeNames, fontCount, fontFormat,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3252
                         useJavaRasterizer, fontRank, defer);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3253
        return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3254
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3255
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3256
    protected String[] getNativeNames(String fontFileName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3257
                                      String platformName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3258
        return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3259
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3260
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3261
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3262
     * Returns a file name for the physical font represented by this platform
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3263
     * font name. The default implementation tries to obtain the file name
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3264
     * from the font configuration.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3265
     * Subclasses may override to provide information from other sources.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3266
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3267
    protected String getFileNameFromPlatformName(String platformFontName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3268
        return fontConfig.getFileNameFromPlatformName(platformFontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3269
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3270
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3271
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3272
     * Return the default font configuration.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3273
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3274
    public FontConfiguration getFontConfiguration() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3275
        return fontConfig;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3276
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3277
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3278
    /* A call to this method should be followed by a call to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3279
     * registerFontDirs(..)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3280
     */
7944
26b96bf47c49 6983037: closed/java/awt/font/FontNames/Type1Fonts.java failed due to missed font
prr
parents: 7937
diff changeset
  3281
    public String getPlatformFontPath(boolean noType1Font) {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3282
        if (fontPath == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3283
            fontPath = getFontPath(noType1Font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3284
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3285
        return fontPath;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3286
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3287
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3288
    public static boolean isOpenJDK() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3289
        return FontUtilities.isOpenJDK;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3290
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3291
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3292
    protected void loadFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3293
        if (discoveredAllFonts) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3294
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3295
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3296
        /* Use lock specific to the font system */
4954
1f09a5b49505 6892485: Deadlock in SunGraphicsEnvironment / FontManager
rkennke
parents: 3938
diff changeset
  3297
        synchronized (this) {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3298
            if (FontUtilities.debugFonts()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3299
                Thread.dumpStack();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3300
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3301
                            .info("SunGraphicsEnvironment.loadFonts() called");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3302
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3303
            initialiseDeferredFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3304
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3305
            java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3306
                                    new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3307
                public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3308
                    if (fontPath == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3309
                        fontPath = getPlatformFontPath(noType1Font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3310
                        registerFontDirs(fontPath);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3311
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3312
                    if (fontPath != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3313
                        // this will find all fonts including those already
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3314
                        // registered. But we have checks in place to prevent
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3315
                        // double registration.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3316
                        if (! gotFontsFromPlatform()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3317
                            registerFontsOnPath(fontPath, false,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3318
                                                Font2D.UNKNOWN_RANK,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3319
                                                false, true);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3320
                            loadedAllFontFiles = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3321
                        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3322
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3323
                    registerOtherFontFiles(registeredFontFiles);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3324
                    discoveredAllFonts = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3325
                    return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3326
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3327
            });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3328
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3329
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3330
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3331
    protected void registerFontDirs(String pathName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3332
        return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3333
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3334
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3335
    private void registerFontsOnPath(String pathName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3336
                                     boolean useJavaRasterizer, int fontRank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3337
                                     boolean defer, boolean resolveSymLinks) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3338
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3339
        StringTokenizer parser = new StringTokenizer(pathName,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3340
                File.pathSeparator);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3341
        try {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3342
            while (parser.hasMoreTokens()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3343
                registerFontsInDir(parser.nextToken(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3344
                        useJavaRasterizer, fontRank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3345
                        defer, resolveSymLinks);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3346
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3347
        } catch (NoSuchElementException e) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3348
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3349
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3350
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3351
    /* Called to register fall back fonts */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3352
    public void registerFontsInDir(String dirName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3353
        registerFontsInDir(dirName, true, Font2D.JRE_RANK, true, false);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3354
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3355
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3356
    // MACOSX begin -- need to access this in subclass
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3357
    protected void registerFontsInDir(String dirName, boolean useJavaRasterizer,
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3358
    // MACOSX end
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3359
                                    int fontRank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3360
                                    boolean defer, boolean resolveSymLinks) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3361
        File pathFile = new File(dirName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3362
        addDirFonts(dirName, pathFile, ttFilter,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3363
                    FONTFORMAT_TRUETYPE, useJavaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3364
                    fontRank==Font2D.UNKNOWN_RANK ?
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3365
                    Font2D.TTF_RANK : fontRank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3366
                    defer, resolveSymLinks);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3367
        addDirFonts(dirName, pathFile, t1Filter,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3368
                    FONTFORMAT_TYPE1, useJavaRasterizer,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3369
                    fontRank==Font2D.UNKNOWN_RANK ?
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3370
                    Font2D.TYPE1_RANK : fontRank,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3371
                    defer, resolveSymLinks);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3372
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3373
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3374
    protected void registerFontDir(String path) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3375
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3376
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3377
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3378
     * Returns file name for default font, either absolute
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3379
     * or relative as needed by registerFontFile.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3380
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3381
    public synchronized String getDefaultFontFile() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3382
        if (defaultFontFileName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3383
            initDefaultFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3384
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3385
        return defaultFontFileName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3386
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3387
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3388
    private void initDefaultFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3389
        if (!isOpenJDK()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3390
            defaultFontName = lucidaFontName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3391
            if (useAbsoluteFontFileNames()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3392
                defaultFontFileName =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3393
                    jreFontDirName + File.separator + FontUtilities.LUCIDA_FILE_NAME;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3394
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3395
                defaultFontFileName = FontUtilities.LUCIDA_FILE_NAME;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3396
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3397
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3398
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3399
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3400
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3401
     * Whether registerFontFile expects absolute or relative
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3402
     * font file names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3403
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3404
    protected boolean useAbsoluteFontFileNames() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3405
        return true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3406
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3407
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3408
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3409
     * Creates this environment's FontConfiguration.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3410
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3411
    protected abstract FontConfiguration createFontConfiguration();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3412
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3413
    public abstract FontConfiguration
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3414
    createFontConfiguration(boolean preferLocaleFonts,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3415
                            boolean preferPropFonts);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3416
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3417
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3418
     * Returns face name for default font, or null if
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3419
     * no face names are used for CompositeFontDescriptors
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3420
     * for this platform.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3421
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3422
    public synchronized String getDefaultFontFaceName() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3423
        if (defaultFontName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3424
            initDefaultFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3425
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3426
        return defaultFontName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3427
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3428
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3429
    public void loadFontFiles() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3430
        loadFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3431
        if (loadedAllFontFiles) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3432
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3433
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3434
        /* Use lock specific to the font system */
4954
1f09a5b49505 6892485: Deadlock in SunGraphicsEnvironment / FontManager
rkennke
parents: 3938
diff changeset
  3435
        synchronized (this) {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3436
            if (FontUtilities.debugFonts()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3437
                Thread.dumpStack();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3438
                FontUtilities.getLogger().info("loadAllFontFiles() called");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3439
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3440
            java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3441
                                    new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3442
                public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3443
                    if (fontPath == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3444
                        fontPath = getPlatformFontPath(noType1Font);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3445
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3446
                    if (fontPath != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3447
                        // this will find all fonts including those already
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3448
                        // registered. But we have checks in place to prevent
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3449
                        // double registration.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3450
                        registerFontsOnPath(fontPath, false,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3451
                                            Font2D.UNKNOWN_RANK,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3452
                                            false, true);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3453
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3454
                    loadedAllFontFiles = true;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3455
                    return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3456
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3457
            });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3458
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3459
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3460
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3461
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3462
     * This method asks the font configuration API for all platform names
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3463
     * used as components of composite/logical fonts and iterates over these
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3464
     * looking up their corresponding file name and registers these fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3465
     * It also ensures that the fonts are accessible via platform APIs.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3466
     * The composites themselves are then registered.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3467
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3468
    private void
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3469
        initCompositeFonts(FontConfiguration fontConfig,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3470
                           ConcurrentHashMap<String, Font2D>  altNameCache) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3471
8945
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  3472
        if (FontUtilities.isLogging()) {
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  3473
            FontUtilities.getLogger()
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  3474
                            .info("Initialising composite fonts");
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  3475
        }
4718885476ee 7032930: A way to specify MS Mincho to be used in dialoginput on windows JA locale
prr
parents: 7950
diff changeset
  3476
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3477
        int numCoreFonts = fontConfig.getNumberCoreFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3478
        String[] fcFonts = fontConfig.getPlatformFontNames();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3479
        for (int f=0; f<fcFonts.length; f++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3480
            String platformFontName = fcFonts[f];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3481
            String fontFileName =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3482
                getFileNameFromPlatformName(platformFontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3483
            String[] nativeNames = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3484
            if (fontFileName == null
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3485
                || fontFileName.equals(platformFontName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3486
                /* No file located, so register using the platform name,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3487
                 * i.e. as a native font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3488
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3489
                fontFileName = platformFontName;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3490
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3491
                if (f < numCoreFonts) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3492
                    /* If platform APIs also need to access the font, add it
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3493
                     * to a set to be registered with the platform too.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3494
                     * This may be used to add the parent directory to the X11
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3495
                     * font path if its not already there. See the docs for the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3496
                     * subclass implementation.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3497
                     * This is now mainly for the benefit of X11-based AWT
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3498
                     * But for historical reasons, 2D initialisation code
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3499
                     * makes these calls.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3500
                     * If the fontconfiguration file is properly set up
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3501
                     * so that all fonts are mapped to files and all their
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3502
                     * appropriate directories are specified, then this
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3503
                     * method will be low cost as it will return after
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3504
                     * a test that finds a null lookup map.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3505
                     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3506
                    addFontToPlatformFontPath(platformFontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3507
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3508
                nativeNames = getNativeNames(fontFileName, platformFontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3509
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3510
            /* Uncomment these two lines to "generate" the XLFD->filename
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3511
             * mappings needed to speed start-up on Solaris.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3512
             * Augment this with the appendedpathname and the mappings
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3513
             * for native (F3) fonts
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3514
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3515
            //String platName = platformFontName.replaceAll(" ", "_");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3516
            //System.out.println("filename."+platName+"="+fontFileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3517
            registerFontFile(fontFileName, nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3518
                             Font2D.FONT_CONFIG_RANK, true);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3519
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3520
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3521
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3522
        /* This registers accumulated paths from the calls to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3523
         * addFontToPlatformFontPath(..) and any specified by
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3524
         * the font configuration. Rather than registering
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3525
         * the fonts it puts them in a place and form suitable for
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3526
         * the Toolkit to pick up and use if a toolkit is initialised,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3527
         * and if it uses X11 fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3528
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3529
        registerPlatformFontsUsedByFontConfiguration();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3530
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3531
        CompositeFontDescriptor[] compositeFontInfo
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3532
                = fontConfig.get2DCompositeFontInfo();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3533
        for (int i = 0; i < compositeFontInfo.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3534
            CompositeFontDescriptor descriptor = compositeFontInfo[i];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3535
            String[] componentFileNames = descriptor.getComponentFileNames();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3536
            String[] componentFaceNames = descriptor.getComponentFaceNames();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3537
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3538
            /* It would be better eventually to handle this in the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3539
             * FontConfiguration code which should also remove duplicate slots
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3540
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3541
            if (missingFontFiles != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3542
                for (int ii=0; ii<componentFileNames.length; ii++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3543
                    if (missingFontFiles.contains(componentFileNames[ii])) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3544
                        componentFileNames[ii] = getDefaultFontFile();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3545
                        componentFaceNames[ii] = getDefaultFontFaceName();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3546
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3547
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3548
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3549
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3550
            /* FontConfiguration needs to convey how many fonts it has added
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3551
             * as fallback component fonts which should not affect metrics.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3552
             * The core component count will be the number of metrics slots.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3553
             * This does not preclude other mechanisms for adding
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3554
             * fall back component fonts to the composite.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3555
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3556
            if (altNameCache != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3557
                SunFontManager.registerCompositeFont(
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3558
                    descriptor.getFaceName(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3559
                    componentFileNames, componentFaceNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3560
                    descriptor.getCoreComponentCount(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3561
                    descriptor.getExclusionRanges(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3562
                    descriptor.getExclusionRangeLimits(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3563
                    true,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3564
                    altNameCache);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3565
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3566
                registerCompositeFont(descriptor.getFaceName(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3567
                                      componentFileNames, componentFaceNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3568
                                      descriptor.getCoreComponentCount(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3569
                                      descriptor.getExclusionRanges(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3570
                                      descriptor.getExclusionRangeLimits(),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3571
                                      true);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3572
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3573
            if (FontUtilities.debugFonts()) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3574
                FontUtilities.getLogger()
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3575
                               .info("registered " + descriptor.getFaceName());
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3576
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3577
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3578
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3579
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3580
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3581
     * Notifies graphics environment that the logical font configuration
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3582
     * uses the given platform font name. The graphics environment may
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3583
     * use this for platform specific initialization.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3584
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3585
    protected void addFontToPlatformFontPath(String platformFontName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3586
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3587
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3588
    protected void registerFontFile(String fontFileName, String[] nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3589
                                    int fontRank, boolean defer) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3590
//      REMIND: case compare depends on platform
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3591
        if (registeredFontFiles.contains(fontFileName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3592
            return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3593
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3594
        int fontFormat;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3595
        if (ttFilter.accept(null, fontFileName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3596
            fontFormat = FONTFORMAT_TRUETYPE;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3597
        } else if (t1Filter.accept(null, fontFileName)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3598
            fontFormat = FONTFORMAT_TYPE1;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3599
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3600
            fontFormat = FONTFORMAT_NATIVE;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3601
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3602
        registeredFontFiles.add(fontFileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3603
        if (defer) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3604
            registerDeferredFont(fontFileName, fontFileName, nativeNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3605
                                 fontFormat, false, fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3606
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3607
            registerFontFile(fontFileName, nativeNames, fontFormat, false,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3608
                             fontRank);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3609
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3610
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3611
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3612
    protected void registerPlatformFontsUsedByFontConfiguration() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3613
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3614
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3615
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3616
     * A GE may verify whether a font file used in a fontconfiguration
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3617
     * exists. If it doesn't then either we may substitute the default
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3618
     * font, or perhaps elide it altogether from the composite font.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3619
     * This makes some sense on windows where the font file is only
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3620
     * likely to be in one place. But on other OSes, eg Linux, the file
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3621
     * can move around depending. So there we probably don't want to assume
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3622
     * its missing and so won't add it to this list.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3623
     * If this list - missingFontFiles - is non-null then the composite
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3624
     * font initialisation logic tests to see if a font file is in that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3625
     * set.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3626
     * Only one thread should be able to add to this set so we don't
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3627
     * synchronize.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3628
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3629
    protected void addToMissingFontFileList(String fileName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3630
        if (missingFontFiles == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3631
            missingFontFiles = new HashSet<String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3632
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3633
        missingFontFiles.add(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3634
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3635
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3636
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3637
     * This is for use only within getAllFonts().
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3638
     * Fonts listed in the fontconfig files for windows were all
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3639
     * on the "deferred" initialisation list. They were registered
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3640
     * either in the course of the application, or in the call to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3641
     * loadFonts() within getAllFonts(). The fontconfig file specifies
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3642
     * the names of the fonts using the English names. If there's a
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3643
     * different name in the execution locale, then the platform will
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3644
     * report that, and we will construct the font with both names, and
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3645
     * thereby enumerate it twice. This happens for Japanese fonts listed
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3646
     * in the windows fontconfig, when run in the JA locale. The solution
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3647
     * is to rely (in this case) on the platform's font->file mapping to
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3648
     * determine that this name corresponds to a file we already registered.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3649
     * This works because
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3650
     * - we know when we get here all deferred fonts are already initialised
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3651
     * - when we register a font file, we register all fonts in it.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3652
     * - we know the fontconfig fonts are all in the windows registry
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3653
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3654
    private boolean isNameForRegisteredFile(String fontName) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3655
        String fileName = getFileNameForFontName(fontName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3656
        if (fileName == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3657
            return false;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3658
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3659
        return registeredFontFiles.contains(fileName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3660
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3661
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3662
    /*
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3663
     * This invocation is not in a privileged block because
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3664
     * all privileged operations (reading files and properties)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3665
     * was conducted on the creation of the GE
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3666
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3667
    public void
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3668
        createCompositeFonts(ConcurrentHashMap<String, Font2D> altNameCache,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3669
                             boolean preferLocale,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3670
                             boolean preferProportional) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3671
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3672
        FontConfiguration fontConfig =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3673
            createFontConfiguration(preferLocale, preferProportional);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3674
        initCompositeFonts(fontConfig, altNameCache);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3675
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3676
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3677
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3678
     * Returns all fonts installed in this environment.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3679
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3680
    public Font[] getAllInstalledFonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3681
        if (allFonts == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3682
            loadFonts();
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3683
            TreeMap<String, Font2D> fontMapNames = new TreeMap<>();
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3684
            /* warning: the number of composite fonts could change dynamically
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3685
             * if applications are allowed to create them. "allfonts" could
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3686
             * then be stale.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3687
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3688
            Font2D[] allfonts = getRegisteredFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3689
            for (int i=0; i < allfonts.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3690
                if (!(allfonts[i] instanceof NativeFont)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3691
                    fontMapNames.put(allfonts[i].getFontName(null),
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3692
                                     allfonts[i]);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3693
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3694
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3695
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3696
            String[] platformNames = getFontNamesFromPlatform();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3697
            if (platformNames != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3698
                for (int i=0; i<platformNames.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3699
                    if (!isNameForRegisteredFile(platformNames[i])) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3700
                        fontMapNames.put(platformNames[i], null);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3701
                    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3702
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3703
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3704
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3705
            String[] fontNames = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3706
            if (fontMapNames.size() > 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3707
                fontNames = new String[fontMapNames.size()];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3708
                Object [] keyNames = fontMapNames.keySet().toArray();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3709
                for (int i=0; i < keyNames.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3710
                    fontNames[i] = (String)keyNames[i];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3711
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3712
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3713
            Font[] fonts = new Font[fontNames.length];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3714
            for (int i=0; i < fontNames.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3715
                fonts[i] = new Font(fontNames[i], Font.PLAIN, 1);
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3716
                Font2D f2d = fontMapNames.get(fontNames[i]);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3717
                if (f2d  != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3718
                    FontAccess.getFontAccess().setFont2D(fonts[i], f2d.handle);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3719
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3720
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3721
            allFonts = fonts;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3722
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3723
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3724
        Font []copyFonts = new Font[allFonts.length];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3725
        System.arraycopy(allFonts, 0, copyFonts, 0, allFonts.length);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3726
        return copyFonts;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3727
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3728
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3729
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3730
     * Get a list of installed fonts in the requested {@link Locale}.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3731
     * The list contains the fonts Family Names.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3732
     * If Locale is null, the default locale is used.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3733
     *
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3734
     * @param requestedLocale, if null the default locale is used.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3735
     * @return list of installed fonts in the system.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3736
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3737
    public String[] getInstalledFontFamilyNames(Locale requestedLocale) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3738
        if (requestedLocale == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3739
            requestedLocale = Locale.getDefault();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3740
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3741
        if (allFamilies != null && lastDefaultLocale != null &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3742
            requestedLocale.equals(lastDefaultLocale)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3743
                String[] copyFamilies = new String[allFamilies.length];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3744
                System.arraycopy(allFamilies, 0, copyFamilies,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3745
                                 0, allFamilies.length);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3746
                return copyFamilies;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3747
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3748
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3749
        TreeMap<String,String> familyNames = new TreeMap<String,String>();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3750
        //  these names are always there and aren't localised
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3751
        String str;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3752
        str = Font.SERIF;         familyNames.put(str.toLowerCase(), str);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3753
        str = Font.SANS_SERIF;    familyNames.put(str.toLowerCase(), str);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3754
        str = Font.MONOSPACED;    familyNames.put(str.toLowerCase(), str);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3755
        str = Font.DIALOG;        familyNames.put(str.toLowerCase(), str);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3756
        str = Font.DIALOG_INPUT;  familyNames.put(str.toLowerCase(), str);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3757
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3758
        /* Platform APIs may be used to get the set of available family
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3759
         * names for the current default locale so long as it is the same
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3760
         * as the start-up system locale, rather than loading all fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3761
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3762
        if (requestedLocale.equals(getSystemStartupLocale()) &&
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3763
            getFamilyNamesFromPlatform(familyNames, requestedLocale)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3764
            /* Augment platform names with JRE font family names */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3765
            getJREFontFamilyNames(familyNames, requestedLocale);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3766
        } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3767
            loadFontFiles();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3768
            Font2D[] physicalfonts = getPhysicalFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3769
            for (int i=0; i < physicalfonts.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3770
                if (!(physicalfonts[i] instanceof NativeFont)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3771
                    String name =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3772
                        physicalfonts[i].getFamilyName(requestedLocale);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3773
                    familyNames.put(name.toLowerCase(requestedLocale), name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3774
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3775
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3776
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3777
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3778
        // Add any native font family names here
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3779
        addNativeFontFamilyNames(familyNames, requestedLocale);
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3780
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3781
        String[] retval =  new String[familyNames.size()];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3782
        Object [] keyNames = familyNames.keySet().toArray();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3783
        for (int i=0; i < keyNames.length; i++) {
22584
eed64ee05369 8032733: Fix cast lint warnings in client libraries
darcy
parents: 21278
diff changeset
  3784
            retval[i] = familyNames.get(keyNames[i]);
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3785
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3786
        if (requestedLocale.equals(Locale.getDefault())) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3787
            lastDefaultLocale = requestedLocale;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3788
            allFamilies = new String[retval.length];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3789
            System.arraycopy(retval, 0, allFamilies, 0, allFamilies.length);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3790
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3791
        return retval;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3792
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3793
12047
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3794
    // Provides an aperture to add native font family names to the map
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3795
    protected void addNativeFontFamilyNames(TreeMap<String, String> familyNames, Locale requestedLocale) { }
320a714614e9 7113349: Initial changeset for Macosx port to jdk
michaelm
parents: 11803
diff changeset
  3796
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3797
    public void register1dot0Fonts() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3798
        java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3799
                            new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3800
            public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3801
                String type1Dir = "/usr/openwin/lib/X11/fonts/Type1";
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3802
                registerFontsInDir(type1Dir, true, Font2D.TYPE1_RANK,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3803
                                   false, false);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3804
                return null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3805
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3806
        });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3807
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3808
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3809
    /* Really we need only the JRE fonts family names, but there's little
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3810
     * overhead in doing this the easy way by adding all the currently
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3811
     * known fonts.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3812
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3813
    protected void getJREFontFamilyNames(TreeMap<String,String> familyNames,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3814
                                         Locale requestedLocale) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3815
        registerDeferredJREFonts(jreFontDirName);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3816
        Font2D[] physicalfonts = getPhysicalFonts();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3817
        for (int i=0; i < physicalfonts.length; i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3818
            if (!(physicalfonts[i] instanceof NativeFont)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3819
                String name =
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3820
                    physicalfonts[i].getFamilyName(requestedLocale);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3821
                familyNames.put(name.toLowerCase(requestedLocale), name);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3822
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3823
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3824
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3825
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3826
    /**
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3827
     * Default locale can be changed but we need to know the initial locale
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3828
     * as that is what is used by native code. Changing Java default locale
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3829
     * doesn't affect that.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3830
     * Returns the locale in use when using native code to communicate
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3831
     * with platform APIs. On windows this is known as the "system" locale,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3832
     * and it is usually the same as the platform locale, but not always,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3833
     * so this method also checks an implementation property used only
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3834
     * on windows and uses that if set.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3835
     */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3836
    private static Locale systemLocale = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3837
    private static Locale getSystemStartupLocale() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3838
        if (systemLocale == null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3839
            systemLocale = (Locale)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3840
                java.security.AccessController.doPrivileged(
23288
b7183846db97 8033624: Fix raw and unchecked lint warnings in sun.font
darcy
parents: 22584
diff changeset
  3841
                                    new java.security.PrivilegedAction<Object>() {
3929
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3842
            public Object run() {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3843
                /* On windows the system locale may be different than the
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3844
                 * user locale. This is an unsupported configuration, but
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3845
                 * in that case we want to return a dummy locale that will
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3846
                 * never cause a match in the usage of this API. This is
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3847
                 * important because Windows documents that the family
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3848
                 * names of fonts are enumerated using the language of
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3849
                 * the system locale. BY returning a dummy locale in that
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3850
                 * case we do not use the platform API which would not
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3851
                 * return us the names we want.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3852
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3853
                String fileEncoding = System.getProperty("file.encoding", "");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3854
                String sysEncoding = System.getProperty("sun.jnu.encoding");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3855
                if (sysEncoding != null && !sysEncoding.equals(fileEncoding)) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3856
                    return Locale.ROOT;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3857
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3858
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3859
                String language = System.getProperty("user.language", "en");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3860
                String country  = System.getProperty("user.country","");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3861
                String variant  = System.getProperty("user.variant","");
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3862
                return new Locale(language, country, variant);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3863
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3864
        });
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3865
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3866
        return systemLocale;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3867
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3868
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3869
    void addToPool(FileFont font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3870
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3871
        FileFont fontFileToClose = null;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3872
        int freeSlot = -1;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3873
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3874
        synchronized (fontFileCache) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3875
            /* Avoid duplicate entries in the pool, and don't close() it,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3876
             * since this method is called only from within open().
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3877
             * Seeing a duplicate is most likely to happen if the thread
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3878
             * was interrupted during a read, forcing perhaps repeated
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3879
             * close and open calls and it eventually it ends up pointing
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3880
             * at the same slot.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3881
             */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3882
            for (int i=0;i<CHANNELPOOLSIZE;i++) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3883
                if (fontFileCache[i] == font) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3884
                    return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3885
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3886
                if (fontFileCache[i] == null && freeSlot < 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3887
                    freeSlot = i;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3888
                }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3889
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3890
            if (freeSlot >= 0) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3891
                fontFileCache[freeSlot] = font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3892
                return;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3893
            } else {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3894
                /* replace with new font. */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3895
                fontFileToClose = fontFileCache[lastPoolIndex];
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3896
                fontFileCache[lastPoolIndex] = font;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3897
                /* lastPoolIndex is updated so that the least recently opened
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3898
                 * file will be closed next.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3899
                 */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3900
                lastPoolIndex = (lastPoolIndex+1) % CHANNELPOOLSIZE;
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3901
            }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3902
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3903
        /* Need to close the font file outside of the synchronized block,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3904
         * since its possible some other thread is in an open() call on
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3905
         * this font file, and could be holding its lock and the pool lock.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3906
         * Releasing the pool lock allows that thread to continue, so it can
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3907
         * then release the lock on this font, allowing the close() call
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3908
         * below to proceed.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3909
         * Also, calling close() is safe because any other thread using
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3910
         * the font we are closing() synchronizes all reading, so we
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3911
         * will not close the file while its in use.
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3912
         */
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3913
        if (fontFileToClose != null) {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3914
            fontFileToClose.close();
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3915
        }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3916
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3917
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3918
    protected FontUIResource getFontConfigFUIR(String family, int style,
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3919
                                               int size)
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3920
    {
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3921
        return new FontUIResource(family, style, size);
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3922
    }
de1a48b7aa41 6869705: Missing files of CR6795908, FontManager refactoring
rkennke
parents:
diff changeset
  3923
}