diff options
Diffstat (limited to 'src/platformsupport')
5 files changed, 161 insertions, 4 deletions
diff --git a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri index 7ea1c64e33..2c896ef2cc 100644 --- a/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri +++ b/src/platformsupport/fontdatabases/fontconfig/fontconfig.pri @@ -1,3 +1,5 @@ -HEADERS += $$PWD/qfontconfigdatabase_p.h -SOURCES += $$PWD/qfontconfigdatabase.cpp +HEADERS += $$PWD/qfontconfigdatabase_p.h \ + fontdatabases/fontconfig/qfontenginemultifontconfig_p.h +SOURCES += $$PWD/qfontconfigdatabase.cpp \ + fontdatabases/fontconfig/qfontenginemultifontconfig.cpp DEFINES -= QT_NO_FONTCONFIG diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp index f048ed91de..8a9670118f 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qfontconfigdatabase_p.h" +#include "qfontenginemultifontconfig_p.h" #include <QtCore/QList> #include <QtGui/private/qfont_p.h> @@ -50,8 +51,7 @@ #include <QtGui/private/qfontengine_ft_p.h> #include <QtGui/private/qfontengine_p.h> - - +#include <QtGui/private/qfontengine_qpa_p.h> #include <ft2build.h> #include FT_TRUETYPE_TABLES_H @@ -471,6 +471,13 @@ void QFontconfigDatabase::populateFontDatabase() // QApplication::setFont(font); } +QFontEngineMulti *QFontconfigDatabase::fontEngineMulti(QFontEngine *fontEngine, + QUnicodeTables::Script script, + const QStringList &fallbacks) +{ + return new QFontEngineMultiFontConfig(fontEngine, script, fallbacks); +} + QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables::Script script, void *usrPtr) { if (!usrPtr) diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h index 77509f76e5..d4742167e9 100644 --- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h +++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h @@ -51,6 +51,7 @@ class QFontconfigDatabase : public QBasicFontDatabase { public: void populateFontDatabase(); + QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QUnicodeTables::Script script, const QStringList &fallbacks); QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QFont::StyleHint &styleHint, const QUnicodeTables::Script &script) const; QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName); diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp new file mode 100644 index 0000000000..7b28b20bcb --- /dev/null +++ b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qfontenginemultifontconfig_p.h" + +#include <QtGui/private/qfontengine_ft_p.h> +#include <fontconfig/fontconfig.h> +#include <QtGui/private/qfontengine_ft_p.h> + +QT_BEGIN_NAMESPACE + +QFontEngineMultiFontConfig::QFontEngineMultiFontConfig(QFontEngine *fe, int script, + const QStringList &fallbacks) + : QFontEngineMultiQPA(fe, script, fallbacks) +{ +} + +bool QFontEngineMultiFontConfig::shouldLoadFontEngineForCharacter(int at, uint ucs4) const +{ + QFontEngineFT *fontEngine = static_cast<QFontEngineFT *>(engines.at(at)); + bool charSetHasChar = true; + if (fontEngine != 0) { + FcCharSet *charSet = fontEngine->freetype->charset; + charSetHasChar = FcCharSetHasChar(charSet, ucs4); + } else { + FcPattern *requestPattern = FcPatternCreate(); + + FcValue value; + value.type = FcTypeString; + QByteArray cs = fallbackFamilyAt(at-1).toUtf8(); + value.u.s = reinterpret_cast<const FcChar8 *>(cs.data()); + FcPatternAdd(requestPattern, FC_FAMILY, value, true); + + FcResult result; + FcPattern *matchPattern = FcFontMatch(0, requestPattern, &result); + if (matchPattern != 0) { + FcCharSet *charSet; + FcPatternGetCharSet(matchPattern, FC_CHARSET, 0, &charSet); + charSetHasChar = FcCharSetHasChar(charSet, ucs4); + FcPatternDestroy(matchPattern); + } + + FcPatternDestroy(requestPattern); + } + + return charSetHasChar; +} + +QT_END_NAMESPACE diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h new file mode 100644 index 0000000000..4323cb7d2e --- /dev/null +++ b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h @@ -0,0 +1,60 @@ +/**************************************************************************** +** +** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies). +** Contact: http://www.qt-project.org/ +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** GNU Lesser General Public License Usage +** This file may be used under the terms of the GNU Lesser General Public +** License version 2.1 as published by the Free Software Foundation and +** appearing in the file LICENSE.LGPL included in the packaging of this +** file. Please review the following information to ensure the GNU Lesser +** General Public License version 2.1 requirements will be met: +** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU General +** Public License version 3.0 as published by the Free Software Foundation +** and appearing in the file LICENSE.GPL included in the packaging of this +** file. Please review the following information to ensure the GNU General +** Public License version 3.0 requirements will be met: +** http://www.gnu.org/copyleft/gpl.html. +** +** Other Usage +** Alternatively, this file may be used in accordance with the terms and +** conditions contained in a signed written agreement between you and Nokia. +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QFONTENGINEMULTIFONTCONFIG_H +#define QFONTENGINEMULTIFONTCONFIG_H + +#include <QtGui/private/qfontengine_qpa_p.h> + +QT_BEGIN_NAMESPACE + +class QFontEngineMultiFontConfig : public QFontEngineMultiQPA +{ + Q_OBJECT +public: + explicit QFontEngineMultiFontConfig(QFontEngine *fe, int script, const QStringList &fallbacks); + + bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const; +}; + +QT_END_NAMESPACE + +#endif // QFONTENGINEMULTIFONTCONFIG_H |