diff options
Diffstat (limited to 'src/platformsupport/fontdatabases')
6 files changed, 44 insertions, 17 deletions
diff --git a/src/platformsupport/fontdatabases/basic/basic.pri b/src/platformsupport/fontdatabases/basic/basic.pri index 31a416971f..5cd08fec45 100644 --- a/src/platformsupport/fontdatabases/basic/basic.pri +++ b/src/platformsupport/fontdatabases/basic/basic.pri @@ -75,6 +75,7 @@ contains(QT_CONFIG, freetype) { DEFINES += FT2_BUILD_LIBRARY contains(QT_CONFIG, system-zlib) { DEFINES += FT_CONFIG_OPTION_SYSTEM_ZLIB + include($$PWD/../../../3rdparty/zlib_dependency.pri) } } else:contains(QT_CONFIG, system-freetype) { diff --git a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri index af9bd0a01c..bd7294b818 100644 --- a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri +++ b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri @@ -3,3 +3,4 @@ HEADERS += $$PWD/qfontconfigdatabase_p.h \ SOURCES += $$PWD/qfontconfigdatabase.cpp \ $$PWD/qfontenginemultifontconfig.cpp DEFINES -= QT_NO_FONTCONFIG +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_FONTCONFIG diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index a4d2778ba6..279a1fbc22 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -453,9 +453,8 @@ void QFontconfigDatabase::populateFontDatabase() QSupportedWritingSystems ws; ws.setSupported(QFontDatabase::Latin); - - QString familyQtName = QString::fromLatin1(f->qtname); while (f->qtname) { + QString familyQtName = QString::fromLatin1(f->qtname); registerFont(familyQtName,QString(),QFont::Normal,QFont::StyleNormal,QFont::Unstretched,true,true,0,f->fixed,ws,0); registerFont(familyQtName,QString(),QFont::Normal,QFont::StyleItalic,QFont::Unstretched,true,true,0,f->fixed,ws,0); registerFont(familyQtName,QString(),QFont::Normal,QFont::StyleOblique,QFont::Unstretched,true,true,0,f->fixed,ws,0); @@ -671,7 +670,6 @@ static FcPattern *queryFont(const FcChar8 *file, const QByteArray &data, int id, if (data.isEmpty()) return FcFreeTypeQuery(file, id, blanks, count); - extern FT_Library qt_getFreetype(); FT_Library lib = qt_getFreetype(); FcPattern *pattern = 0; diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm index 1eb1cbeece..c42320889a 100644 --- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm +++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm @@ -39,10 +39,12 @@ ** ****************************************************************************/ +#import <Cocoa/Cocoa.h> +#import <IOKit/graphics/IOGraphicsLib.h> + #include "qcoretextfontdatabase_p.h" #include "qfontengine_coretext_p.h" #include <QtCore/QSettings> -#import <Foundation/Foundation.h> QT_BEGIN_NAMESPACE @@ -86,9 +88,6 @@ static const char *languageForWritingSystem[] = { }; enum { LanguageCount = sizeof(languageForWritingSystem) / sizeof(const char *) }; -int qt_antialiasing_threshold = 0; -bool qt_enable_font_smoothing = true; - QFont::StyleHint styleHintFromNSString(NSString *style) { if ([style isEqual: @"sans-serif"]) @@ -122,13 +121,37 @@ QCoreTextFontDatabase::QCoreTextFontDatabase() QSettings appleSettings(QLatin1String("apple.com")); QVariant appleValue = appleSettings.value(QLatin1String("AppleAntiAliasingThreshold")); if (appleValue.isValid()) - qt_antialiasing_threshold = appleValue.toInt(); - + QCoreTextFontEngine::antialiasingThreshold = appleValue.toInt(); + + /* + font_smoothing = 0 means no smoothing, while 1-3 means subpixel + antialiasing with different hinting styles (but we don't care about the + exact value, only if subpixel rendering is available or not) + */ + int font_smoothing = 0; appleValue = appleSettings.value(QLatin1String("AppleFontSmoothing")); - // Only disable font smoothing when AppleFontSmoothing is set to 0, - // empty or non-zero means enabled - if (appleValue.isValid() && appleValue.toInt() == 0) - qt_enable_font_smoothing = false; + if (appleValue.isValid()) { + font_smoothing = appleValue.toInt(); + } else { + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + + // find the primary display (which is always the first NSScreen + // according to the documentation) + NSScreen *defaultScreen = [[NSScreen screens] objectAtIndex:0]; + CGDirectDisplayID displayId = [[[defaultScreen deviceDescription] objectForKey:@"NSScreenNumber"] unsignedIntValue]; + io_service_t iodisplay = CGDisplayIOServicePort(displayId); + + // determine if font smoothing is available based on the subpixel + // layout of the primary display + NSDictionary *d = (NSDictionary *) IODisplayCreateInfoDictionary(iodisplay, kIODisplayOnlyPreferredName); + uint displaySubpixelLayout = [[d objectForKey:@kDisplaySubPixelLayout] unsignedIntValue]; + font_smoothing = (displaySubpixelLayout == kDisplaySubPixelLayoutUndefined ? 0 : 1); + + [pool release]; + } + QCoreTextFontEngine::defaultGlyphFormat = (font_smoothing > 0 + ? QFontEngineGlyphCache::Raster_RGBMask + : QFontEngineGlyphCache::Raster_A8); } QCoreTextFontDatabase::~QCoreTextFontDatabase() diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm index a51ffb77ea..a02361be21 100644 --- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm +++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm @@ -77,7 +77,9 @@ static void loadAdvancesForGlyphs(CTFontRef ctfont, } } -extern int qt_antialiasing_threshold, qt_enable_font_smoothing; + +int QCoreTextFontEngine::antialiasingThreshold = 0; +QFontEngineGlyphCache::Type QCoreTextFontEngine::defaultGlyphFormat = QFontEngineGlyphCache::Raster_RGBMask; CGAffineTransform qt_transform_from_fontdef(const QFontDef &fontDef) { @@ -147,8 +149,7 @@ void QCoreTextFontEngine::init() Q_ASSERT(ctfont != NULL); Q_ASSERT(cgFont != NULL); - glyphFormat = qt_enable_font_smoothing ? QFontEngineGlyphCache::Raster_RGBMask - : QFontEngineGlyphCache::Raster_A8; + glyphFormat = defaultGlyphFormat; QCFString family = CTFontCopyFamilyName(ctfont); fontDef.family = family; @@ -421,7 +422,7 @@ QImage QCoreTextFontEngine::imageForGlyph(glyph_t glyph, QFixed subPixelPosition 8, im.bytesPerLine(), colorspace, cgflags); CGContextSetFontSize(ctx, fontDef.pixelSize); - CGContextSetShouldAntialias(ctx, (aa || fontDef.pointSize > qt_antialiasing_threshold) + CGContextSetShouldAntialias(ctx, (aa || fontDef.pointSize > antialiasingThreshold) && !(fontDef.styleStrategy & QFont::NoAntialias)); CGContextSetShouldSmoothFonts(ctx, aa); CGAffineTransform oldTextMatrix = CGContextGetTextMatrix(ctx); diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h index d32f05022e..02c8d926fd 100644 --- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h +++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h @@ -100,6 +100,9 @@ public: virtual QFontEngine *cloneWithSize(qreal pixelSize) const; virtual int glyphMargin(QFontEngineGlyphCache::Type type) { return 0; } + static int antialiasingThreshold; + static QFontEngineGlyphCache::Type defaultGlyphFormat; + private: friend class QRawFontPrivate; |