49 CPArray _availableFonts;
80 + (void)setFontManagerFactory:(Class)aClass
87 if (
self = [super
init])
89 _action =
@selector(changeFont:);
100 if (!_availableFonts)
102 _availableFonts = [];
105 _CPFontDetectSpan = document.createElement(
"span");
106 _CPFontDetectSpan.fontSize =
"24px";
107 _CPFontDetectSpan.appendChild(document.createTextNode(
"mmmmmmmmmml"));
108 var div = document.createElement(
"div");
109 div.style.position =
"absolute";
110 div.style.top =
"-1000px";
111 div.appendChild(_CPFontDetectSpan);
112 document.getElementsByTagName(
"body")[0].appendChild(div);
114 _CPFontDetectReferenceFonts = _CPFontDetectPickTwoDifferentFonts([
"monospace",
"serif",
"sans-serif",
"cursive"]);
116 for (var i = 0; i < _CPFontDetectAllFonts.length; i++)
118 var available = _CPFontDetectFontAvailable(_CPFontDetectAllFonts[i]);
120 _availableFonts.push(_CPFontDetectAllFonts[i]);
124 _availableFonts = _CPFontDetectAllFonts;
127 return _availableFonts;
134 - (CPArray)fontWithNameIsAvailable:(
CPString)aFontName
136 return _CPFontDetectFontAvailable(aFontName);
139 - (void)setSelectedFont:(
CPFont)aFont isMultiple:(BOOL)aFlag
141 _selectedFont = aFont;
149 return _selectedFont;
156 return [aFont
isBold] ? 9 : 5;
159 - (CPFontTraitMask)traitsOfFont:(
CPFont)aFont
169 var addTraits = [_activeChange valueForKey:@"addTraits"];
177 - (
CPFont)convertFont:(
CPFont)aFont toHaveTrait:(CPFontTraitMask)addTraits
184 shouldBeSize = [aFont
size];
188 aFont = [
CPFont _fontWithName:[aFont
familyName] size:shouldBeSize bold:shouldBeBold italic:shouldBeItalic] || aFont;
198 var shouldBeBold = [aFont
isBold],
200 shouldBeSize = [aFont
size];
202 aFont = [
CPFont _fontWithName:aTypeface size:shouldBeSize bold:shouldBeBold italic:shouldBeItalic] || aFont;
209 var
tag = [sender tag];
210 _activeChange =
tag === nil ? @{} : @{
@"addTraits":
tag };
217 return [CPApp sendAction:_action to:_target from:self];
222 var _CPFontDetectSpan,
223 _CPFontDetectReferenceFonts,
224 _CPFontDetectAllFonts = [
226 "American Typewriter",
228 "Apple Chancery", "Arial", "Arial Black", "Arial Narrow", "Arial Rounded MT Bold", "Arial Unicode MS",
230 "Big Caslon", "Bitstream Vera Sans", "Bitstream Vera Sans Mono", "Bitstream Vera Serif",
236 "Caslon", "Castellar", "Cataneo BT", "Centaur", "Century Gothic", "Century Schoolbook", "Century Schoolbook L",
238 "Comic Sans", "Comic Sans MS", "Consolas", "Constantia", "Cooper Black", "Copperplate", "Copperplate Gothic Bold", "Copperplate Gothic Light", "Corbel", "Courier", "Courier New",
242 "Geneva", "Georgia", "Georgia Ref", "Geeza Pro", "Gigi", "Gill Sans", "Gill Sans MT", "Gill Sans MT Condensed", "Gill Sans MT Ext Condensed Bold", "Gill Sans Ultra Bold", "Gill Sans Ultra Bold Condensed",
244 "Helvetica", "Helvetica Narrow", "Helvetica Neue", "Herculanum", "High Tower Text", "Highlight LET", "Hoefler Text", "Impact", "Imprint MT Shadow",
246 "Lucida", "Lucida Bright", "Lucida Calligraphy", "Lucida Console", "Lucida Fax", "Lucida Grande", "Lucida Handwriting", "Lucida Sans", "Lucida Sans Typewriter", "Lucida Sans Unicode",
250 "Microsoft Sans Serif", "Milano LET", "Minion Web", "MisterEarl BT", "Mistral", "Monaco", "Monotype Corsiva", "Monotype.com", "New Century Schoolbook", "New York", "News Gothic MT",
254 "Tahoma", "Techno", "Tempus Sans ITC", "Terminal", "Textile", "Times", "Times New Roman", "Tiranti Solid LET", "Trebuchet MS",
256 "Verdana", "Verdana Ref",
260 var _CPFontDetectFontAvailable =
function(font)
262 for (var i = 0; i < _CPFontDetectReferenceFonts.length; i++)
263 if (_CPFontDetectCompareFonts(_CPFontDetectReferenceFonts[i], font))
268 var _CPFontDetectCache = {};
271 var _CPFontDetectCompareFonts =
function(fontA, fontB)
274 if (_CPFontDetectCache[fontA])
275 a = _CPFontDetectCache[fontA];
279 _CPFontDetectSpan.style.fontFamily =
'"' + fontA +
'"';
280 _CPFontDetectCache[fontA] = a = { w: _CPFontDetectSpan.offsetWidth, h: _CPFontDetectSpan.offsetHeight };
283 _CPFontDetectSpan.style.fontFamily =
'"' + fontB +
'", "' + fontA +
'"';
284 var bWidth = _CPFontDetectSpan.offsetWidth,
285 bHeight = _CPFontDetectSpan.offsetHeight;
287 return (a.w != bWidth || a.h != bHeight);
291 var _CPFontDetectPickTwoDifferentFonts =
function(candidates)
293 for (var i = 0; i < candidates.length; i++)
294 for (var j = 0; j < i; j++)
295 if (_CPFontDetectCompareFonts(candidates[i], candidates[j]))
296 return [candidates[i], candidates[j]];
297 return [candidates[0]];
315 - (void)setTarget:(
id)aValue
331 - (void)setAction:(
SEL)aValue
347 - (void)setDelegate:(
id)aValue
363 - (void)setMultiple:(BOOL)aValue
A mutable key-value pair collection.
CPNonStandardCharacterSetFontMask
An immutable string (collection of characters).
global CPApp CPItalicFontMask
void setFontManagerFactory:(Class aClass)
CPFontManager sharedFontManager()
CPFont convertFont:toHaveTrait:(CPFont aFont, [toHaveTrait] CPFontTraitMask addTraits)