Add constants for the CoreText font weights.

Incidentally, this corrects two small errors in the values of the
Medium and Heavy font weights.

Change-Id: I17d4410890f1f3bd1ed72e94f5ca0d43c21484e1
Reviewed-by: Konstantin Ritt <ritt.ks@gmail.com>
This commit is contained in:
Jake Petroules 2016-05-05 02:12:31 -07:00
parent e1d0da6526
commit 9ba296cc4c

View File

@ -41,6 +41,49 @@
#include <cmath>
#if defined(Q_OS_OSX) && !QT_OSX_DEPLOYMENT_TARGET_BELOW(__MAC_10_11)
#import <AppKit/AppKit.h>
#endif
#if defined(Q_OS_IOS) && !QT_IOS_DEPLOYMENT_TARGET_BELOW(__IPHONE_8_2)
#import <UIKit/UIKit.h>
#endif
// These are available cross platform, exported as kCTFontWeightXXX from CoreText.framework,
// but they are not documented and are not in public headers so are private API and exposed
// only through the NSFontWeightXXX and UIFontWeightXXX aliases in AppKit and UIKit (rdar://26109857)
#if QT_MAC_DEPLOYMENT_TARGET_BELOW(__MAC_10_11, __IPHONE_8_2)
#define kCTFontWeightUltraLight -0.8
#define kCTFontWeightThin -0.6
#define kCTFontWeightLight -0.4
#define kCTFontWeightRegular 0
#define kCTFontWeightMedium 0.23
#define kCTFontWeightSemibold 0.3
#define kCTFontWeightBold 0.4
#define kCTFontWeightHeavy 0.56
#define kCTFontWeightBlack 0.62
#elif defined(Q_OS_OSX)
#define kCTFontWeightUltraLight NSFontWeightUltraLight
#define kCTFontWeightThin NSFontWeightThin
#define kCTFontWeightLight NSFontWeightLight
#define kCTFontWeightRegular NSFontWeightRegular
#define kCTFontWeightMedium NSFontWeightMedium
#define kCTFontWeightSemibold NSFontWeightSemibold
#define kCTFontWeightBold NSFontWeightBold
#define kCTFontWeightHeavy NSFontWeightHeavy
#define kCTFontWeightBlack NSFontWeightBlack
#elif defined(Q_OS_IOS)
#define kCTFontWeightUltraLight UIFontWeightUltraLight
#define kCTFontWeightThin UIFontWeightThin
#define kCTFontWeightLight UIFontWeightLight
#define kCTFontWeightRegular UIFontWeightRegular
#define kCTFontWeightMedium UIFontWeightMedium
#define kCTFontWeightSemibold UIFontWeightSemibold
#define kCTFontWeightBold UIFontWeightBold
#define kCTFontWeightHeavy UIFontWeightHeavy
#define kCTFontWeightBlack UIFontWeightBlack
#endif
QT_BEGIN_NAMESPACE
static float SYNTHETIC_ITALIC_SKEW = std::tan(14.f * std::acos(0.f) / 90.f);
@ -63,23 +106,23 @@ bool QCoreTextFontEngine::ct_getSfntTable(void *user_data, uint tag, uchar *buff
QFont::Weight QCoreTextFontEngine::qtWeightFromCFWeight(float value)
{
if (value >= 0.62)
if (value >= kCTFontWeightBlack)
return QFont::Black;
if (value >= 0.5)
if (value >= kCTFontWeightHeavy)
return QFont::ExtraBold;
if (value >= 0.4)
if (value >= kCTFontWeightBold)
return QFont::Bold;
if (value >= 0.3)
if (value >= kCTFontWeightSemibold)
return QFont::DemiBold;
if (value >= 0.2)
if (value >= kCTFontWeightMedium)
return QFont::Medium;
if (value == 0.0)
if (value == kCTFontWeightRegular)
return QFont::Normal;
if (value <= -0.8)
if (value <= kCTFontWeightUltraLight)
return QFont::Thin;
if (value <= -0.6)
if (value <= kCTFontWeightThin)
return QFont::ExtraLight;
if (value <= -0.4)
if (value <= kCTFontWeightLight)
return QFont::Light;
return QFont::Normal;
}