Mercurial > projects > dwt-addons
annotate dwtx/jface/resource/FontRegistry.d @ 104:04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
These new wrappers now use the tango.util.containers instead of the tango.util.collections.
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Thu, 07 Aug 2008 15:01:33 +0200 |
parents | 7ffeace6c47f |
children | e4589de2eed6 |
rev | line source |
---|---|
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
1 /******************************************************************************* |
90 | 2 * Copyright (c) 2000, 2008 IBM Corporation and others. |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
3 * All rights reserved. This program and the accompanying materials |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
4 * are made available under the terms of the Eclipse Public License v1.0 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
5 * which accompanies this distribution, and is available at |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
6 * http://www.eclipse.org/legal/epl-v10.html |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
7 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
8 * Contributors: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
9 * IBM Corporation - initial API and implementation |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
10 * Port to the D programming language: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
11 * Frank Benoit <benoit@tionex.de> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
12 *******************************************************************************/ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
13 module dwtx.jface.resource.FontRegistry; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
14 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
15 import dwtx.jface.resource.ResourceRegistry; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
16 import dwtx.jface.resource.FontDescriptor; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
17 import dwtx.jface.resource.StringConverter; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
18 import dwtx.jface.resource.JFaceResources; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
19 import dwtx.jface.resource.DataFormatException; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
20 |
49 | 21 import dwtx.dwtxhelper.JHashMap; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
22 // import java.util.Arrays; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
23 // import java.util.Collections; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
24 // import java.util.Enumeration; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
25 // import java.util.HashMap; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
26 // import java.util.Iterator; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
27 // import java.util.List; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
28 // import java.util.Map; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
29 // import java.util.MissingResourceException; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
30 // import java.util.Set; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
31 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
32 import dwt.DWT; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
33 import dwt.graphics.Font; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
34 import dwt.graphics.FontData; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
35 import dwt.widgets.Display; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
36 import dwt.widgets.Shell; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
37 import dwtx.core.runtime.Assert; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
38 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
39 import dwt.dwthelper.ResourceBundle; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
40 import dwt.dwthelper.utils; |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
41 import dwtx.dwtxhelper.Collection; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
42 import dwt.dwthelper.Runnable; |
41
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
43 version(Windows) import dwt.internal.win32.OS; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
44 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
45 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
46 * A font registry maintains a mapping between symbolic font names |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
47 * and DWT fonts. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
48 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
49 * A font registry owns all of the font objects registered |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
50 * with it, and automatically disposes of them when the DWT Display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
51 * that creates the fonts is disposed. Because of this, clients do |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
52 * not need to (indeed, must not attempt to) dispose of font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
53 * objects themselves. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
54 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
55 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
56 * A special constructor is provided for populating a font registry |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
57 * from a property files using the standard Java resource bundle mechanism. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
58 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
59 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
60 * Methods are provided for registering listeners that will be kept |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
61 * apprised of changes to list of registed fonts. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
62 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
63 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
64 * Clients may instantiate this class (it was not designed to be subclassed). |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
65 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
66 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
67 * Since 3.0 this class extends ResourceRegistry. |
90 | 68 * @noextend This class is not intended to be subclassed by clients. |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
69 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
70 public class FontRegistry : ResourceRegistry { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
71 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
72 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
73 * FontRecord is a private helper class that holds onto a font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
74 * and can be used to generate its bold and italic version. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
75 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
76 private class FontRecord { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
77 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
78 Font baseFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
79 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
80 Font boldFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
81 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
82 Font italicFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
83 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
84 FontData[] baseData; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
85 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
86 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
87 * Create a new instance of the receiver based on the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
88 * plain font and the data for it. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
89 * @param plainFont The base looked up font. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
90 * @param data The data used to look it up. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
91 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
92 this(Font plainFont, FontData[] data) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
93 baseFont = plainFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
94 baseData = data; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
95 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
96 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
97 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
98 * Dispose any of the fonts created for this record. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
99 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
100 void dispose() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
101 baseFont.dispose(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
102 if (boldFont !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
103 boldFont.dispose(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
104 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
105 if (italicFont !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
106 italicFont.dispose(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
107 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
108 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
109 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
110 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
111 * Return the base Font. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
112 * @return Font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
113 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
114 public Font getBaseFont() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
115 return baseFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
116 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
117 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
118 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
119 * Return the bold Font. Create a bold version |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
120 * of the base font to get it. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
121 * @return Font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
122 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
123 public Font getBoldFont() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
124 if (boldFont !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
125 return boldFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
126 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
127 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
128 FontData[] boldData = getModifiedFontData(DWT.BOLD); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
129 boldFont = new Font(Display.getCurrent(), boldData); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
130 return boldFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
131 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
132 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
133 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
134 * Get a version of the base font data with the specified |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
135 * style. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
136 * @param style the new style |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
137 * @return the font data with the style {@link FontData#FontData(String, int, int)} |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
138 * @see DWT#ITALIC |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
139 * @see DWT#NORMAL |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
140 * @see DWT#BOLD |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
141 * @todo Generated comment |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
142 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
143 private FontData[] getModifiedFontData(int style) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
144 FontData[] styleData = new FontData[baseData.length]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
145 for (int i = 0; i < styleData.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
146 FontData base = baseData[i]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
147 styleData[i] = new FontData(base.getName(), base.getHeight(), |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
148 base.getStyle() | style); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
149 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
150 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
151 return styleData; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
152 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
153 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
154 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
155 * Return the italic Font. Create an italic version of the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
156 * base font to get it. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
157 * @return Font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
158 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
159 public Font getItalicFont() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
160 if (italicFont !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
161 return italicFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
162 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
163 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
164 FontData[] italicData = getModifiedFontData(DWT.ITALIC); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
165 italicFont = new Font(Display.getCurrent(), italicData); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
166 return italicFont; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
167 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
168 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
169 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
170 * Add any fonts that were allocated for this record to the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
171 * stale fonts. Anything that matches the default font will |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
172 * be skipped. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
173 * @param defaultFont The system default. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
174 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
175 void addAllocatedFontsToStale(Font defaultFont) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
176 //Return all of the fonts allocated by the receiver. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
177 //if any of them are the defaultFont then don't bother. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
178 if (defaultFont !is baseFont && baseFont !is null) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
179 staleFonts.add(baseFont); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
180 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
181 if (defaultFont !is boldFont && boldFont !is null) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
182 staleFonts.add(boldFont); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
183 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
184 if (defaultFont !is italicFont && italicFont !is null) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
185 staleFonts.add(italicFont); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
186 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
187 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
188 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
189 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
190 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
191 * Table of known fonts, keyed by symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
192 * (key type: <code>String</code>, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
193 * value type: <code>FontRecord</code>. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
194 */ |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
195 private Map stringToFontRecord; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
196 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
197 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
198 * Table of known font data, keyed by symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
199 * (key type: <code>String</code>, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
200 * value type: <code>dwt.graphics.FontData[]</code>). |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
201 */ |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
202 private Map stringToFontData; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
203 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
204 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
205 * Collection of Fonts that are now stale to be disposed |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
206 * when it is safe to do so (i.e. on shutdown). |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
207 * @see List |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
208 */ |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
209 private List staleFonts; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
210 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
211 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
212 * Runnable that cleans up the manager on disposal of the display. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
213 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
214 protected Runnable displayRunnable; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
215 |
90 | 216 private bool displayDisposeHooked; |
217 | |
218 private final bool cleanOnDisplayDisposal; | |
219 | |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
220 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
221 * Creates an empty font registry. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
222 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
223 * There must be an DWT Display created in the current |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
224 * thread before calling this method. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
225 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
226 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
227 public this() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
228 this(Display.getCurrent(), true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
229 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
230 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
231 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
232 * Creates a font registry and initializes its content from |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
233 * a property file. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
234 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
235 * There must be an DWT Display created in the current |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
236 * thread before calling this method. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
237 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
238 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
239 * The OS name (retrieved using <code>System.getProperty("os.name")</code>) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
240 * is converted to lowercase, purged of whitespace, and appended |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
241 * as suffix (separated by an underscore <code>'_'</code>) to the given |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
242 * location string to yield the base name of a resource bundle |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
243 * acceptable to <code>ResourceBundle.getBundle</code>. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
244 * The standard Java resource bundle mechanism is then used to locate |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
245 * and open the appropriate properties file, taking into account |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
246 * locale specific variations. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
247 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
248 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
249 * For example, on the Windows 2000 operating system the location string |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
250 * <code>"com.example.myapp.Fonts"</code> yields the base name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
251 * <code>"com.example.myapp.Fonts_windows2000"</code>. For the US English locale, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
252 * this further elaborates to the resource bundle name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
253 * <code>"com.example.myapp.Fonts_windows2000_en_us"</code>. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
254 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
255 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
256 * If no appropriate OS-specific resource bundle is found, the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
257 * process is repeated using the location as the base bundle name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
258 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
259 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
260 * The property file contains entries that look like this: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
261 * <pre> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
262 * textfont.0=MS Sans Serif-regular-10 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
263 * textfont.1=Times New Roman-regular-10 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
264 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
265 * titlefont.0=MS Sans Serif-regular-12 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
266 * titlefont.1=Times New Roman-regular-12 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
267 * </pre> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
268 * Each entry maps a symbolic font names (the font registry keys) with |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
269 * a "<code>.<it>n</it></code> suffix to standard font names |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
270 * on the right. The suffix indicated order of preference: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
271 * "<code>.0</code>" indicates the first choice, |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
272 * "<code>.1</code>" indicates the second choice, and so on. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
273 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
274 * The following example shows how to use the font registry: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
275 * <pre> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
276 * FontRegistry registry = new FontRegistry("com.example.myapp.fonts"); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
277 * Font font = registry.get("textfont"); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
278 * control.setFont(font); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
279 * ... |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
280 * </pre> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
281 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
282 * @param location the name of the resource bundle |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
283 * @param loader the ClassLoader to use to find the resource bundle |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
284 * @exception MissingResourceException if the resource bundle cannot be found |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
285 * @since 2.1 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
286 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
287 public this(String location, /+ClassLoader+/Object loader){ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
288 initInstance(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
289 Display display = Display.getCurrent(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
290 Assert.isNotNull(display); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
291 // FIXE: need to respect loader |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
292 //readResourceBundle(location, loader); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
293 readResourceBundle(location); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
294 |
90 | 295 cleanOnDisplayDisposal = true; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
296 hookDisplayDispose(display); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
297 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
298 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
299 private void initInstance(){ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
300 displayRunnable = new class Runnable { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
301 public void run() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
302 clearCaches(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
303 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
304 }; |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
305 stringToFontRecord = new HashMap(7); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
306 stringToFontData = new HashMap(7); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
307 staleFonts = new ArrayList(); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
308 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
309 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
310 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
311 * Load the FontRegistry using the ClassLoader from the PlatformUI |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
312 * plug-in |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
313 * @param location the location to read the resource bundle from |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
314 * @throws MissingResourceException Thrown if a resource is missing |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
315 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
316 public this(String location) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
317 // FIXE: |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
318 // this(location, WorkbenchPlugin.getDefault().getDescriptor().getPluginClassLoader()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
319 this(location, null); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
320 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
321 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
322 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
323 * Read the resource bundle at location. Look for a file with the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
324 * extension _os_ws first, then _os then just the name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
325 * @param location - String - the location of the file. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
326 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
327 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
328 private void readResourceBundle(String location) { |
39 | 329 // String osname = System.getProperty("os.name").trim(); //$NON-NLS-1$ |
330 // String wsname = DWT.getPlatform(); | |
331 // osname = StringConverter.removeWhiteSpaces(osname).toLowerCase(); | |
332 // wsname = StringConverter.removeWhiteSpaces(wsname).toLowerCase(); | |
333 // String OSLocation = location; | |
334 // String WSLocation = location; | |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
335 ResourceBundle bundle = null; |
39 | 336 // if (osname !is null) { |
337 // OSLocation = location ~ "_" ~ osname; //$NON-NLS-1$ | |
338 // if (wsname !is null) { | |
339 // WSLocation = OSLocation ~ "_" ~ wsname; //$NON-NLS-1$ | |
340 // } | |
341 // } | |
342 String errorLocation = "dwtx.jface.resource.FontRegistry properties"; | |
343 const char[] prefix = "dwtx.jface.resource.jfacefonts_"; | |
344 const char[] postfix = ".properties"; | |
345 version( linux ){ | |
49 | 346 ImportData propdata = getImportData!( prefix ~ "linux_gtk" ~ postfix ); |
39 | 347 } |
348 else version( Windows ){ | |
49 | 349 ImportData propdata; |
41
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
350 if( OS.IsWin95 && OS.WIN32_VERSION >= OS.VERSION (4, 10 )){ |
49 | 351 propdata = getImportData!( prefix ~ "windows98" ~ postfix ); |
41
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
352 } |
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
353 else if( OS.WIN32_VERSION >= OS.VERSION (5, 1 )){ |
49 | 354 propdata = getImportData!( prefix ~ "windowsxp" ~ postfix ); |
41
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
355 } |
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
356 else if( OS.WIN32_VERSION >= OS.VERSION (5, 0)){ |
49 | 357 propdata = getImportData!( prefix ~ "windows2000" ~ postfix ); |
41
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
358 } |
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
359 else if( OS.WIN32_VERSION >= OS.VERSION (4, 0)){ |
49 | 360 propdata = getImportData!( prefix ~ "windowsnt" ~ postfix ); |
41
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
361 } |
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
362 else{ |
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
363 assert( false, "TODO: detect windows version" ); |
1ab001d67011
implement win version detection
Frank Benoit <benoit@tionex.de>
parents:
39
diff
changeset
|
364 } |
39 | 365 } |
366 else { | |
367 static assert( false, "unknown plattform" ); | |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
368 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
369 |
39 | 370 // try { |
371 bundle = ResourceBundle.getBundle(propdata); | |
372 readResourceBundle(bundle, errorLocation); | |
373 // } catch (MissingResourceException wsException) { | |
374 // try { | |
375 // bundle = ResourceBundle.getBundle(OSLocation); | |
376 // readResourceBundle(bundle, WSLocation); | |
377 // } catch (MissingResourceException osException) { | |
378 // if (location !is OSLocation) { | |
379 // bundle = ResourceBundle.getBundle(location); | |
380 // readResourceBundle(bundle, WSLocation); | |
381 // } else { | |
382 // throw osException; | |
383 // } | |
384 // } | |
385 // } | |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
386 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
387 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
388 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
389 * Creates an empty font registry. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
390 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
391 * @param display the Display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
392 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
393 public this(Display display) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
394 this(display, true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
395 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
396 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
397 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
398 * Creates an empty font registry. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
399 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
400 * @param display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
401 * the <code>Display</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
402 * @param cleanOnDisplayDisposal |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
403 * whether all fonts allocated by this <code>FontRegistry</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
404 * should be disposed when the display is disposed |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
405 * @since 3.1 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
406 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
407 public this(Display display, bool cleanOnDisplayDisposal) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
408 initInstance(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
409 Assert.isNotNull(display); |
90 | 410 this.cleanOnDisplayDisposal = cleanOnDisplayDisposal; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
411 if (cleanOnDisplayDisposal) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
412 hookDisplayDispose(display); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
413 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
414 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
415 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
416 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
417 * Find the first valid fontData in the provided list. If none are valid |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
418 * return the first one regardless. If the list is empty return null. Return |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
419 * <code>null</code> if one cannot be found. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
420 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
421 * @param fonts the font list |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
422 * @param display the display used |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
423 * @return the font data of the like describe above |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
424 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
425 * @deprecated use bestDataArray in order to support Motif multiple entry |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
426 * fonts. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
427 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
428 public FontData bestData(FontData[] fonts, Display display) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
429 for (int i = 0; i < fonts.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
430 FontData fd = fonts[i]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
431 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
432 if (fd is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
433 break; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
434 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
435 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
436 FontData[] fixedFonts = display.getFontList(fd.getName(), false); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
437 if (isFixedFont(fixedFonts, fd)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
438 return fd; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
439 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
440 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
441 FontData[] scalableFonts = display.getFontList(fd.getName(), true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
442 if (scalableFonts.length > 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
443 return fd; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
444 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
445 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
446 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
447 //None of the provided datas are valid. Return the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
448 //first one as it is at least the first choice. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
449 if (fonts.length > 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
450 return fonts[0]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
451 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
452 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
453 //Nothing specified |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
454 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
455 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
456 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
457 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
458 * Find the first valid fontData in the provided list. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
459 * If none are valid return the first one regardless. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
460 * If the list is empty return <code>null</code>. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
461 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
462 * @param fonts list of fonts |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
463 * @param display the display |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
464 * @return font data like described above |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
465 * @deprecated use filterData in order to preserve |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
466 * multiple entry fonts on Motif |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
467 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
468 public FontData[] bestDataArray(FontData[] fonts, Display display) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
469 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
470 FontData bestData = bestData(fonts, display); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
471 if (bestData is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
472 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
473 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
474 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
475 FontData[] datas = new FontData[1]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
476 datas[0] = bestData; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
477 return datas; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
478 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
479 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
480 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
481 * Removes from the list all fonts that do not exist in this system. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
482 * If none are valid, return the first irregardless. If the list is |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
483 * empty return <code>null</code>. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
484 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
485 * @param fonts the fonts to check |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
486 * @param display the display to check against |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
487 * @return the list of fonts that have been found on this system |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
488 * @since 3.1 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
489 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
490 public FontData [] filterData(FontData [] fonts, Display display) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
491 ArrayList good = new ArrayList(fonts.length); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
492 for (int i = 0; i < fonts.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
493 FontData fd = fonts[i]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
494 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
495 if (fd is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
496 continue; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
497 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
498 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
499 FontData[] fixedFonts = display.getFontList(fd.getName(), false); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
500 if (isFixedFont(fixedFonts, fd)) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
501 good.add(fd); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
502 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
503 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
504 FontData[] scalableFonts = display.getFontList(fd.getName(), true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
505 if (scalableFonts.length > 0) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
506 good.add(fd); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
507 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
508 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
509 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
510 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
511 //None of the provided datas are valid. Return the |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
512 //first one as it is at least the first choice. |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
513 if (good.isEmpty() && fonts.length > 0) { |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
514 good.add(fonts[0]); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
515 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
516 else if (fonts.length is 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
517 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
518 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
519 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
520 return arraycast!(FontData)(good.toArray()); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
521 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
522 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
523 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
524 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
525 * Creates a new font with the given font datas or <code>null</code> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
526 * if there is no data. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
527 * @return FontRecord for the new Font or <code>null</code>. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
528 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
529 private FontRecord createFont(String symbolicName, FontData[] fonts) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
530 Display display = Display.getCurrent(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
531 if (display is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
532 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
533 } |
90 | 534 if (cleanOnDisplayDisposal && !displayDisposeHooked) { |
535 hookDisplayDispose(display); | |
536 } | |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
537 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
538 FontData[] validData = filterData(fonts, display); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
539 if (validData.length is 0) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
540 //Nothing specified |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
541 return null; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
542 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
543 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
544 //Do not fire the update from creation as it is not a property change |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
545 put(symbolicName, validData, false); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
546 Font newFont = new Font(display, validData); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
547 return new FontRecord(newFont, validData); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
548 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
549 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
550 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
551 * Calculates the default font and returns the result. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
552 * This method creates a font that must be disposed. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
553 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
554 Font calculateDefaultFont() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
555 Display current = Display.getCurrent(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
556 if (current is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
557 Shell shell = new Shell(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
558 Font font = new Font(null, shell.getFont().getFontData()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
559 shell.dispose(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
560 return font; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
561 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
562 return new Font(current, current.getSystemFont().getFontData()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
563 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
564 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
565 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
566 * Returns the default font data. Creates it if necessary. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
567 * @return Font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
568 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
569 public Font defaultFont() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
570 return defaultFontRecord().getBaseFont(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
571 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
572 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
573 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
574 * Returns the font descriptor for the font with the given symbolic |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
575 * font name. Returns the default font if there is no special value |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
576 * associated with that name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
577 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
578 * @param symbolicName symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
579 * @return the font descriptor (never null) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
580 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
581 * @since 3.3 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
582 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
583 public FontDescriptor getDescriptor(String symbolicName) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
584 Assert.isTrue(symbolicName.length > 0); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
585 return FontDescriptor.createFrom(getFontData(symbolicName)); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
586 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
587 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
588 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
589 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
590 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
591 * Returns the default font record. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
592 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
593 private FontRecord defaultFontRecord() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
594 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
595 FontRecord record = cast(FontRecord) stringToFontRecord |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
596 .get(JFaceResources.DEFAULT_FONT); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
597 if (record is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
598 Font defaultFont = calculateDefaultFont(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
599 record = createFont(JFaceResources.DEFAULT_FONT, defaultFont |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
600 .getFontData()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
601 defaultFont.dispose(); |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
602 stringToFontRecord.put(stringcast(JFaceResources.DEFAULT_FONT), record); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
603 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
604 return record; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
605 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
606 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
607 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
608 * Returns the default font data. Creates it if necessary. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
609 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
610 private FontData[] defaultFontData() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
611 return defaultFontRecord().baseData; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
612 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
613 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
614 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
615 * Returns the font data associated with the given symbolic font name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
616 * Returns the default font data if there is no special value associated |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
617 * with that name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
618 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
619 * @param symbolicName symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
620 * @return the font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
621 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
622 public FontData[] getFontData(String symbolicName) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
623 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
624 Assert.isTrue(symbolicName.length > 0); |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
625 Object result = stringToFontData.get(symbolicName); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
626 if (result is null) { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
627 return defaultFontData(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
628 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
629 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
630 return arrayFromObject!(FontData)(result); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
631 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
632 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
633 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
634 * Returns the font associated with the given symbolic font name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
635 * Returns the default font if there is no special value associated |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
636 * with that name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
637 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
638 * @param symbolicName symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
639 * @return the font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
640 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
641 public Font get(String symbolicName) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
642 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
643 return getFontRecord(symbolicName).getBaseFont(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
644 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
645 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
646 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
647 * Returns the bold font associated with the given symbolic font name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
648 * Returns the bolded default font if there is no special value associated |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
649 * with that name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
650 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
651 * @param symbolicName symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
652 * @return the font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
653 * @since 3.0 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
654 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
655 public Font getBold(String symbolicName) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
656 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
657 return getFontRecord(symbolicName).getBoldFont(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
658 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
659 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
660 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
661 * Returns the italic font associated with the given symbolic font name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
662 * Returns the italic default font if there is no special value associated |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
663 * with that name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
664 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
665 * @param symbolicName symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
666 * @return the font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
667 * @since 3.0 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
668 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
669 public Font getItalic(String symbolicName) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
670 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
671 return getFontRecord(symbolicName).getItalicFont(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
672 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
673 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
674 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
675 * Return the font record for the key. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
676 * @param symbolicName The key for the record. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
677 * @return FontRecird |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
678 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
679 private FontRecord getFontRecord(String symbolicName) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
680 Assert.isNotNull(symbolicName); |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
681 auto result = stringToFontRecord.get(symbolicName); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
682 if (result !is null) { |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
683 return cast(FontRecord) result; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
684 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
685 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
686 result = stringToFontData.get(symbolicName); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
687 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
688 FontRecord fontRecord; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
689 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
690 if (result is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
691 fontRecord = defaultFontRecord(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
692 } else { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
693 fontRecord = createFont(symbolicName, arrayFromObject!(FontData)(result)); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
694 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
695 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
696 if (fontRecord is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
697 fontRecord = defaultFontRecord(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
698 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
699 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
700 stringToFontRecord.put(symbolicName.dup, fontRecord); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
701 return fontRecord; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
702 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
703 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
704 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
705 /* (non-Javadoc) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
706 * @see dwtx.jface.resource.ResourceRegistry#getKeySet() |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
707 */ |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
708 public override Set getKeySet() { |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
709 return Collections.unmodifiableSet(stringToFontData.keySet()); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
710 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
711 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
712 /* (non-Javadoc) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
713 * @see dwtx.jface.resource.ResourceRegistry#hasValueFor(java.lang.String) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
714 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
41
diff
changeset
|
715 public override bool hasValueFor(String fontKey) { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
716 return stringToFontData.containsKey(fontKey); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
717 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
718 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
719 /* (non-Javadoc) |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
720 * @see dwtx.jface.resource.ResourceRegistry#clearCaches() |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
721 */ |
43
ea8ff534f622
Fix override and super aliases
Frank Benoit <benoit@tionex.de>
parents:
41
diff
changeset
|
722 protected override void clearCaches() { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
723 |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
724 Iterator iterator = stringToFontRecord.values().iterator(); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
725 while (iterator.hasNext()) { |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
726 Object next = iterator.next(); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
727 (cast(FontRecord) next).dispose(); |
39 | 728 } |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
729 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
730 disposeFonts(staleFonts.iterator()); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
731 stringToFontRecord.clear(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
732 staleFonts.clear(); |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
733 |
90 | 734 displayDisposeHooked = false; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
735 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
736 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
737 /** |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
738 * Dispose of all of the fonts in this iterator. |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
739 * @param iterator over Collection of Font |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
740 */ |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
741 private void disposeFonts(Iterator iterator) { |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
742 while (iterator.hasNext()) { |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
743 Object next = iterator.next(); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
744 (cast(Font) next).dispose(); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
745 } |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
746 } |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
747 |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
748 /** |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
749 * Hook a dispose listener on the DWT display. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
750 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
751 private void hookDisplayDispose(Display display) { |
90 | 752 displayDisposeHooked = true; |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
753 display.disposeExec(displayRunnable); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
754 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
755 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
756 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
757 * Checks whether the given font is in the list of fixed fonts. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
758 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
759 private bool isFixedFont(FontData[] fixedFonts, FontData fd) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
760 // Can't use FontData.equals() since some values aren't |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
761 // set if a fontdata isn't used. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
762 int height = fd.getHeight(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
763 String name = fd.getName(); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
764 for (int i = 0; i < fixedFonts.length; i++) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
765 FontData fixed = fixedFonts[i]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
766 if (fixed.getHeight() is height && fixed.getName().equals(name)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
767 return true; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
768 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
769 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
770 return false; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
771 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
772 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
773 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
774 * Converts a String into a FontData object. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
775 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
776 private FontData makeFontData(String value) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
777 try { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
778 return StringConverter.asFontData(value.trim()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
779 } catch (DataFormatException e) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
780 throw new MissingResourceException( |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
781 "Wrong font data format. Value is: \"" ~ value ~ "\"", this.classinfo.name, value); //$NON-NLS-2$//$NON-NLS-1$ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
782 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
783 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
784 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
785 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
786 * Adds (or replaces) a font to this font registry under the given |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
787 * symbolic name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
788 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
789 * A property change event is reported whenever the mapping from |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
790 * a symbolic name to a font changes. The source of the event is |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
791 * this registry; the property name is the symbolic font name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
792 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
793 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
794 * @param symbolicName the symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
795 * @param fontData an Array of FontData |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
796 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
797 public void put(String symbolicName, FontData[] fontData) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
798 put(symbolicName, fontData, true); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
799 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
800 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
801 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
802 * Adds (or replaces) a font to this font registry under the given |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
803 * symbolic name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
804 * <p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
805 * A property change event is reported whenever the mapping from |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
806 * a symbolic name to a font changes. The source of the event is |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
807 * this registry; the property name is the symbolic font name. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
808 * </p> |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
809 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
810 * @param symbolicName the symbolic font name |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
811 * @param fontData an Array of FontData |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
812 * @param update - fire a font mapping changed if true. False |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
813 * if this method is called from the get method as no setting |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
814 * has changed. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
815 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
816 private void put(String symbolicName, FontData[] fontData, bool update) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
817 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
818 Assert.isNotNull(symbolicName); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
819 Assert.isTrue(fontData.length > 0 ); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
820 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
821 FontData[] existing = arrayFromObject!(FontData)( stringToFontData.get(stringcast(symbolicName))); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
822 if (ArrayEquals(existing, fontData)) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
823 return; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
824 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
825 |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
826 FontRecord oldFont = cast(FontRecord) stringToFontRecord.remove(stringcast(symbolicName)); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
827 stringToFontData.put(symbolicName.dup, new ArrayWrapperObject(fontData)); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
828 if (update) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
829 fireMappingChanged(symbolicName, new ArrayWrapperT!(FontData)(existing), new ArrayWrapperObject(arraycast!(Object)(fontData))); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
830 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
831 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
832 if (oldFont !is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
833 oldFont.addAllocatedFontsToStale(defaultFontRecord().getBaseFont()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
834 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
835 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
836 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
837 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
838 * Reads the resource bundle. This puts FontData[] objects |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
839 * in the mapping table. These will lazily be turned into |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
840 * real Font objects when requested. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
841 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
842 private void readResourceBundle(ResourceBundle bundle, String bundleName) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
843 auto keys = bundle.getKeys(); |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
844 foreach ( key; keys ) { |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
845 int pos = key.lastIndexOf('.'); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
846 if (pos is -1) { |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
847 stringToFontData.put(stringcast(key.dup), new ArrayWrapperObject(arraycast!(Object)([ makeFontData(bundle |
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
848 .getString(key)) ]))); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
849 } else { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
850 String name = key.substring(0, pos); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
851 int i = 0; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
852 try { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
853 i = tango.text.convert.Integer.toInt(key.substring(pos + 1)); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
854 } catch (IllegalArgumentException e) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
855 //Panic the file can not be parsed. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
856 throw new MissingResourceException( |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
857 "Wrong key format ", bundleName, key); //$NON-NLS-1$ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
858 } |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
859 FontData[] elements = arrayFromObject!(FontData)( stringToFontData.get(stringcast(name))); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
860 if (elements is null) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
861 elements = new FontData[8]; |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
862 stringToFontData.put(name.dup, new ArrayWrapperObject(elements)); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
863 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
864 if (i > elements.length) { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
865 FontData[] na = new FontData[i + 8]; |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
866 System.arraycopy(elements, 0, na, 0, elements.length); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
867 elements = na; |
104
04b47443bb01
Reworked the collection uses to make use of a wrapper collection that is compatible to the Java Collections.
Frank Benoit <benoit@tionex.de>
parents:
90
diff
changeset
|
868 stringToFontData.put(name.dup, new ArrayWrapperObject(elements)); |
7
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
869 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
870 elements[i] = makeFontData(bundle.getString(key)); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
871 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
872 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
873 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
874 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
875 /** |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
876 * Returns the font descriptor for the JFace default font. |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
877 * |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
878 * @return the font descriptor for the JFace default font |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
879 * @since 3.3 |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
880 */ |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
881 public FontDescriptor defaultFontDescriptor() { |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
882 return FontDescriptor.createFrom(defaultFontData()); |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
883 } |
8a302fdb4140
Jface some window and resource classes
Frank Benoit <benoit@tionex.de>
parents:
diff
changeset
|
884 } |