QPA/Mac: Fix resources leaking
Having static QFont instance leads to a resources leaking, since QFontCache is unable to clean-up font engines when the application exits. Relates to QTBUG-25434 Change-Id: I71d91094de27c07ab2434c415e4c28b6acab3646 Reviewed-by: David Faure (KDE) <faure@kde.org> Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
This commit is contained in:
parent
8b99445755
commit
680d8aa6c5
@ -74,6 +74,8 @@ QCocoaTheme::QCocoaTheme()
|
||||
QCocoaTheme::~QCocoaTheme()
|
||||
{
|
||||
delete m_systemPalette;
|
||||
qDeleteAll(m_palettes);
|
||||
qDeleteAll(m_fonts);
|
||||
}
|
||||
|
||||
bool QCocoaTheme::usePlatformNativeDialog(DialogType dialogType) const
|
||||
|
@ -42,6 +42,7 @@
|
||||
#ifndef QIOSTHEME_H
|
||||
#define QIOSTHEME_H
|
||||
|
||||
#include <QtCore/QHash>
|
||||
#include <qpa/qplatformtheme.h>
|
||||
|
||||
QT_BEGIN_NAMESPACE
|
||||
@ -57,6 +58,9 @@ public:
|
||||
const QFont *font(Font type = SystemFont) const;
|
||||
|
||||
static const char *name;
|
||||
|
||||
private:
|
||||
mutable QHash<QPlatformTheme::Font, QFont *> m_fonts;
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -59,6 +59,7 @@ QIOSTheme::QIOSTheme()
|
||||
|
||||
QIOSTheme::~QIOSTheme()
|
||||
{
|
||||
qDeleteAll(m_fonts);
|
||||
}
|
||||
|
||||
QVariant QIOSTheme::themeHint(ThemeHint hint) const
|
||||
@ -73,8 +74,7 @@ QVariant QIOSTheme::themeHint(ThemeHint hint) const
|
||||
|
||||
const QFont *QIOSTheme::font(Font type) const
|
||||
{
|
||||
static QHash<QPlatformTheme::Font, QFont *> fonts;
|
||||
if (fonts.isEmpty()) {
|
||||
if (m_fonts.isEmpty()) {
|
||||
// The real system font on iOS is '.Helvetica Neue UI', as returned by both [UIFont systemFontOfSize]
|
||||
// and CTFontCreateUIFontForLanguage(kCTFontSystemFontType, ...), but this font is not included when
|
||||
// populating the available fonts in QCoreTextFontDatabase::populateFontDatabase(), since the font
|
||||
@ -84,13 +84,13 @@ const QFont *QIOSTheme::font(Font type) const
|
||||
// For now we hard-code the font to Helvetica, which should be very close to the actual
|
||||
// system font.
|
||||
QLatin1String systemFontFamilyName("Helvetica");
|
||||
fonts.insert(QPlatformTheme::SystemFont, new QFont(systemFontFamilyName, [UIFont systemFontSize]));
|
||||
fonts.insert(QPlatformTheme::SmallFont, new QFont(systemFontFamilyName, [UIFont smallSystemFontSize]));
|
||||
fonts.insert(QPlatformTheme::LabelFont, new QFont(systemFontFamilyName, [UIFont labelFontSize]));
|
||||
fonts.insert(QPlatformTheme::PushButtonFont, new QFont(systemFontFamilyName, [UIFont buttonFontSize]));
|
||||
m_fonts.insert(QPlatformTheme::SystemFont, new QFont(systemFontFamilyName, [UIFont systemFontSize]));
|
||||
m_fonts.insert(QPlatformTheme::SmallFont, new QFont(systemFontFamilyName, [UIFont smallSystemFontSize]));
|
||||
m_fonts.insert(QPlatformTheme::LabelFont, new QFont(systemFontFamilyName, [UIFont labelFontSize]));
|
||||
m_fonts.insert(QPlatformTheme::PushButtonFont, new QFont(systemFontFamilyName, [UIFont buttonFontSize]));
|
||||
}
|
||||
|
||||
return fonts.value(type, 0);
|
||||
return m_fonts.value(type, 0);
|
||||
}
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
Loading…
Reference in New Issue
Block a user