2010-07-14 09:47:17 +00:00
|
|
|
/**
|
|
|
|
* QuartzTextStyleAttribute.h
|
|
|
|
*
|
|
|
|
* Original Code by Evan Jones on Wed Oct 02 2002.
|
|
|
|
* Contributors:
|
|
|
|
* Shane Caraveo, ActiveState
|
|
|
|
* Bernd Paradies, Adobe
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
2021-02-21 04:53:09 +00:00
|
|
|
#ifndef QUARTZTEXTSTYLEATTRIBUTE_H
|
|
|
|
#define QUARTZTEXTSTYLEATTRIBUTE_H
|
2010-07-14 09:47:17 +00:00
|
|
|
|
2019-05-04 18:14:48 +00:00
|
|
|
class QuartzFont {
|
2010-07-14 09:47:17 +00:00
|
|
|
public:
|
2019-05-04 18:14:48 +00:00
|
|
|
/** Create a font style from a name. */
|
|
|
|
QuartzFont(const char *name, size_t length, float size, int weight, bool italic) {
|
|
|
|
assert(name != NULL && length > 0 && name[length] == '\0');
|
2010-07-14 09:47:17 +00:00
|
|
|
|
2011-07-17 22:30:49 +00:00
|
|
|
CFStringRef fontName = CFStringCreateWithCString(kCFAllocatorDefault, name, kCFStringEncodingMacRoman);
|
|
|
|
assert(fontName != NULL);
|
2019-05-04 18:14:48 +00:00
|
|
|
bool bold = weight > SC_WEIGHT_NORMAL;
|
2011-07-17 22:30:49 +00:00
|
|
|
|
2019-05-04 18:14:48 +00:00
|
|
|
if (bold || italic) {
|
2011-07-17 22:30:49 +00:00
|
|
|
CTFontSymbolicTraits desiredTrait = 0;
|
|
|
|
CTFontSymbolicTraits traitMask = 0;
|
|
|
|
|
|
|
|
// if bold was specified, add the trait
|
|
|
|
if (bold) {
|
|
|
|
desiredTrait |= kCTFontBoldTrait;
|
|
|
|
traitMask |= kCTFontBoldTrait;
|
|
|
|
}
|
|
|
|
|
|
|
|
// if italic was specified, add the trait
|
|
|
|
if (italic) {
|
|
|
|
desiredTrait |= kCTFontItalicTrait;
|
|
|
|
traitMask |= kCTFontItalicTrait;
|
|
|
|
}
|
|
|
|
|
|
|
|
// create a font and then a copy of it with the sym traits
|
|
|
|
CTFontRef iFont = ::CTFontCreateWithName(fontName, size, NULL);
|
|
|
|
fontid = ::CTFontCreateCopyWithSymbolicTraits(iFont, size, NULL, desiredTrait, traitMask);
|
2019-05-04 18:14:48 +00:00
|
|
|
if (fontid) {
|
2013-08-28 00:44:27 +00:00
|
|
|
CFRelease(iFont);
|
2019-05-04 18:14:48 +00:00
|
|
|
} else {
|
2013-08-28 00:44:27 +00:00
|
|
|
// Traits failed so use base font
|
|
|
|
fontid = iFont;
|
|
|
|
}
|
2019-05-04 18:14:48 +00:00
|
|
|
} else {
|
2011-07-17 22:30:49 +00:00
|
|
|
// create the font, no traits
|
|
|
|
fontid = ::CTFontCreateWithName(fontName, size, NULL);
|
|
|
|
}
|
2013-08-28 00:44:27 +00:00
|
|
|
|
2019-05-04 18:14:48 +00:00
|
|
|
if (!fontid) {
|
2013-08-28 00:44:27 +00:00
|
|
|
// Failed to create requested font so use font always present
|
|
|
|
fontid = ::CTFontCreateWithName((CFStringRef)@"Monaco", size, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
CFRelease(fontName);
|
2019-05-04 18:14:48 +00:00
|
|
|
}
|
2010-07-14 09:47:17 +00:00
|
|
|
|
2019-05-04 18:14:48 +00:00
|
|
|
CTFontRef getFontID() {
|
|
|
|
return fontid;
|
|
|
|
}
|
2010-07-14 09:47:17 +00:00
|
|
|
|
|
|
|
private:
|
2011-07-17 22:30:49 +00:00
|
|
|
CTFontRef fontid;
|
2010-07-14 09:47:17 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|