1 /*
2  * Copyright (c) 2011, 2014, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 package com.apple.laf;
27 
28 import java.awt.Font;
29 import java.awt.geom.AffineTransform;
30 import java.text.AttributedCharacterIterator.Attribute;
31 import java.util.Map;
32 
33 import javax.swing.plaf.*;
34 
35 import com.apple.laf.AquaUtils.RecyclableSingleton;
36 
37 @SuppressWarnings("serial") // JDK implementation class
38 public class AquaFonts {
39     private static final String MAC_DEFAULT_FONT_NAME = "Lucida Grande";
40 
41     private static final RecyclableSingleton<FontUIResource> lucida9Pt = new RecyclableSingleton<FontUIResource>() {
42         @Override
43         protected FontUIResource getInstance() {
44             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.PLAIN, 9);
45         }
46     };
47     //private static final FontUIResource lucida10Pt = new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.PLAIN, 10);
48     private static final RecyclableSingleton<FontUIResource> lucida11Pt = new RecyclableSingleton<FontUIResource>() {
49         @Override
50         protected FontUIResource getInstance() {
51             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.PLAIN, 11);
52         }
53     };
54     private static final RecyclableSingleton<FontUIResource> lucida12Pt = new RecyclableSingleton<FontUIResource>() {
55         @Override
56         protected FontUIResource getInstance() {
57             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.PLAIN, 12);
58         }
59     };
60     private static final RecyclableSingleton<FontUIResource> lucida13Pt = new RecyclableSingleton<FontUIResource>() {
61         @Override
62         protected FontUIResource getInstance() {
63             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.PLAIN, 13);
64         }
65     };
66     private static final RecyclableSingleton<FontUIResource> lucida14Pt = new RecyclableSingleton<FontUIResource>() {
67         @Override
68         protected FontUIResource getInstance() {
69             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.PLAIN, 14);
70         }
71     };
72 
73     private static final RecyclableSingleton<FontUIResource> lucida13PtBold = new RecyclableSingleton<FontUIResource>() {
74         @Override
75         protected FontUIResource getInstance() {
76             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.BOLD, 13);
77         }
78     };
79     private static final RecyclableSingleton<FontUIResource> lucida14PtBold = new RecyclableSingleton<FontUIResource>() {
80         @Override
81         protected FontUIResource getInstance() {
82             return new DerivedUIResourceFont(MAC_DEFAULT_FONT_NAME, Font.BOLD, 14);
83         }
84     };
85 
getMiniControlTextFont()86     protected static FontUIResource getMiniControlTextFont() {
87         return lucida9Pt.get();
88     }
89 
getSmallControlTextFont()90     protected static FontUIResource getSmallControlTextFont() {
91         return lucida11Pt.get();
92     }
93 
getControlTextFont()94     public static FontUIResource getControlTextFont() {
95         return lucida13Pt.get();
96     }
97 
getControlTextSmallFont()98     public static FontUIResource getControlTextSmallFont() {
99         return lucida11Pt.get();
100     }
101 
getMenuFont()102     public static FontUIResource getMenuFont() {
103         return lucida14Pt.get();
104     }
105 
getDockIconFont()106     public static Font getDockIconFont() {
107         return lucida14PtBold.get();
108     }
109 
getAlertHeaderFont()110     public static FontUIResource getAlertHeaderFont() {
111         return lucida13PtBold.get();
112     }
113 
getAlertMessageFont()114     public static FontUIResource getAlertMessageFont() {
115         return lucida11Pt.get();
116     }
117 
getViewFont()118     public static FontUIResource getViewFont() {
119         return lucida12Pt.get();
120     }
121 
122     /**
123      * All fonts derived from this type will also be of this type, and not a plain java.awt.Font
124      */
125     static class DerivedUIResourceFont extends FontUIResource implements UIResource {
DerivedUIResourceFont(final Font font)126         public DerivedUIResourceFont(final Font font) {
127             super(font);
128         }
129 
DerivedUIResourceFont(final String name, final int style, final int size)130         public DerivedUIResourceFont(final String name, final int style, final int size) {
131             super(name, style, size);
132         }
133 
deriveFont(final AffineTransform trans)134         public Font deriveFont(final AffineTransform trans) {
135             return new DerivedUIResourceFont(super.deriveFont(trans));
136         }
137 
deriveFont(final float derivedSize)138         public Font deriveFont(final float derivedSize) {
139             return new DerivedUIResourceFont(super.deriveFont(derivedSize));
140         }
141 
deriveFont(final int derivedStyle)142         public Font deriveFont(final int derivedStyle) {
143             return new DerivedUIResourceFont(super.deriveFont(derivedStyle));
144         }
145 
deriveFont(final int derivedStyle, final AffineTransform trans)146         public Font deriveFont(final int derivedStyle, final AffineTransform trans) {
147             return new DerivedUIResourceFont(super.deriveFont(derivedStyle, trans));
148         }
149 
deriveFont(final int derivedStyle, final float derivedSize)150         public Font deriveFont(final int derivedStyle, final float derivedSize) {
151             return new DerivedUIResourceFont(super.deriveFont(derivedStyle, derivedSize));
152         }
153 
deriveFont(final Map<? extends Attribute, ?> attributes)154         public Font deriveFont(final Map<? extends Attribute, ?> attributes) {
155             return new DerivedUIResourceFont(super.deriveFont(attributes));
156         }
157     }
158 }
159