⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 qfontdatabase_x11.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 5 页
字号:
/******************************************************************************** Copyright (C) 1992-2007 Trolltech ASA. All rights reserved.**** This file is part of the QtGui module of the Qt Toolkit.**** This file may be used under the terms of the GNU General Public** License version 2.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 GNU** General Public Licensing requirements will be met:** http://trolltech.com/products/qt/licenses/licensing/opensource/**** If you are unsure which license is appropriate for your use, please** review the following information:** http://trolltech.com/products/qt/licenses/licensing/licensingoverview** or contact the sales department at sales@trolltech.com.**** In addition, as a special exception, Trolltech gives you certain** additional rights. These rights are described in the Trolltech GPL** Exception version 1.0, which can be found at** http://www.trolltech.com/products/qt/gplexception/ and in the file** GPL_EXCEPTION.txt in this package.**** In addition, as a special exception, Trolltech, as the sole copyright** holder for Qt Designer, grants users of the Qt/Eclipse Integration** plug-in the right for the Qt/Eclipse Integration to link to** functionality provided by Qt Designer and its related libraries.**** Trolltech reserves all rights not expressly granted herein.**** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.******************************************************************************/#include <qplatformdefs.h>#include <qdatetime.h>#include <qdebug.h>#include <qpaintdevice.h>#include <private/qt_x11_p.h>#include "qx11info_x11.h"#include <qdebug.h>#include <qfile.h>#include <qtemporaryfile.h>#include <qabstractfileengine.h>#include <ctype.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <sys/mman.h>#include <private/qfontengine_x11_p.h>#ifndef QT_NO_FONTCONFIG#include <ft2build.h>#include FT_FREETYPE_H#if FC_VERSION >= 20402#include <fontconfig/fcfreetype.h>#endif#endif// from qfont_x11.cppextern double qt_pointSize(double pixelSize, int dpi);extern double qt_pixelSize(double pointSize, int dpi);static inline void capitalize (char *s){    bool space = true;    while(*s) {        if (space)            *s = toupper(*s);        space = (*s == ' ');        ++s;    }}/*  To regenerate the writingSystems_for_xlfd_encoding table, run  'util/unicode/x11/makeencodings' and paste the generated  'encodings.c' here.*/// ----- begin of generated code -----#define make_tag( c1, c2, c3, c4 )                              \    ((((unsigned int)c1)<<24) | (((unsigned int)c2)<<16) |      \     (((unsigned int)c3)<<8) | ((unsigned int)c4))struct XlfdEncoding {    const char *name;    int id;    int mib;    unsigned int hash1;    unsigned int hash2;};static const XlfdEncoding xlfd_encoding[] = {    { "iso8859-1", 0, 4, make_tag('i','s','o','8'), make_tag('5','9','-','1') },    { "iso8859-2", 1, 5, make_tag('i','s','o','8'), make_tag('5','9','-','2') },    { "iso8859-3", 2, 6, make_tag('i','s','o','8'), make_tag('5','9','-','3') },    { "iso8859-4", 3, 7, make_tag('i','s','o','8'), make_tag('5','9','-','4') },    { "iso8859-9", 4, 12, make_tag('i','s','o','8'), make_tag('5','9','-','9') },    { "iso8859-10", 5, 13, make_tag('i','s','o','8'), make_tag('9','-','1','0') },    { "iso8859-13", 6, 109, make_tag('i','s','o','8'), make_tag('9','-','1','3') },    { "iso8859-14", 7, 110, make_tag('i','s','o','8'), make_tag('9','-','1','4') },    { "iso8859-15", 8, 111, make_tag('i','s','o','8'), make_tag('9','-','1','5') },    { "hp-roman8", 9, 2004, make_tag('h','p','-','r'), make_tag('m','a','n','8') },    { "iso8859-5", 10, 8, make_tag('i','s','o','8'), make_tag('5','9','-','5') },    { "*-cp1251", 11, 2251, 0, make_tag('1','2','5','1') },    { "koi8-ru", 12, 2084, make_tag('k','o','i','8'), make_tag('8','-','r','u') },    { "koi8-u", 13, 2088, make_tag('k','o','i','8'), make_tag('i','8','-','u') },    { "koi8-r", 14, 2084, make_tag('k','o','i','8'), make_tag('i','8','-','r') },    { "iso8859-7", 15, 10, make_tag('i','s','o','8'), make_tag('5','9','-','7') },    { "iso8859-8", 16, 85, make_tag('i','s','o','8'), make_tag('5','9','-','8') },    { "gb18030-0", 17, -114, make_tag('g','b','1','8'), make_tag('3','0','-','0') },    { "gb18030.2000-0", 18, -113, make_tag('g','b','1','8'), make_tag('0','0','-','0') },    { "gbk-0", 19, -113, make_tag('g','b','k','-'), make_tag('b','k','-','0') },    { "gb2312.*-0", 20, 57, make_tag('g','b','2','3'), 0 },    { "jisx0201*-0", 21, 15, make_tag('j','i','s','x'), 0 },    { "jisx0208*-0", 22, 63, make_tag('j','i','s','x'), 0 },    { "ksc5601*-*", 23, 36, make_tag('k','s','c','5'), 0 },    { "big5hkscs-0", 24, -2101, make_tag('b','i','g','5'), make_tag('c','s','-','0') },    { "hkscs-1", 25, -2101, make_tag('h','k','s','c'), make_tag('c','s','-','1') },    { "big5*-*", 26, -2026, make_tag('b','i','g','5'), 0 },    { "tscii-*", 27, 2028, make_tag('t','s','c','i'), 0 },    { "tis620*-*", 28, 2259, make_tag('t','i','s','6'), 0 },    { "iso8859-11", 29, 2259, make_tag('i','s','o','8'), make_tag('9','-','1','1') },    { "mulelao-1", 30, -4242, make_tag('m','u','l','e'), make_tag('a','o','-','1') },    { "ethiopic-unicode", 31, 0, make_tag('e','t','h','i'), make_tag('c','o','d','e') },    { "iso10646-1", 32, 0, make_tag('i','s','o','1'), make_tag('4','6','-','1') },    { "unicode-*", 33, 0, make_tag('u','n','i','c'), 0 },    { "*-symbol", 34, 0, 0, make_tag('m','b','o','l') },    { "*-fontspecific", 35, 0, 0, make_tag('i','f','i','c') },    { "fontspecific-*", 36, 0, make_tag('f','o','n','t'), 0 },    { 0, 0, 0, 0, 0 }};static const char writingSystems_for_xlfd_encoding[sizeof(xlfd_encoding)][QFontDatabase::WritingSystemsCount] = {    // iso8859-1    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-2    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-3    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-4    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-9    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-10    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-13    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-14    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-15    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // hp-roman8    { 0, 1, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-5    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // *-cp1251    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // koi8-ru    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // koi8-u    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // koi8-r    { 0, 0, 0, 1, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-7    { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-8    { 0, 0, 0, 0, 0, 1, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // gb18030-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 1, 0, 0, 0, 0,      0 },    // gb18030.2000-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 1, 0, 0, 0, 0,      0 },    // gbk-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 1, 0, 0, 0, 0,      0 },    // gb2312.*-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 1, 0, 0, 0, 0,      0 },    // jisx0201*-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 1, 0, 0,      0 },    // jisx0208*-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 1, 0, 0,      0 },    // ksc5601*-*    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 1, 0,      0 },    // big5hkscs-0    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 1, 0, 0, 0,      0 },    // hkscs-1    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 1, 0, 0, 0,      0 },    // big5*-*    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 1, 0, 0, 0,      0 },    // tscii-*    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 1, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // tis620*-*    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 1,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso8859-11    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 1,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // mulelao-1    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      1, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // ethiopic-unicode    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0 },    // iso10646-1    { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 1,      1, 1, 0, 1, 0, 1, 1, 0, 0, 0,      0 },    // unicode-*    { 0, 1, 1, 1, 1, 1, 1, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 1,      1, 1, 0, 1, 0, 1, 1, 0, 0, 0,      0 },    // *-symbol    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      1 },    // *-fontspecific    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      1 },    // fontspecific-*    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      0, 0, 0, 0, 0, 0, 0, 0, 0, 0,      1 }};// ----- end of generated code -----const int numEncodings = sizeof(xlfd_encoding) / sizeof(XlfdEncoding) - 1;int qt_xlfd_encoding_id(const char *encoding){    // qDebug("looking for encoding id for '%s'", encoding);    int len = strlen(encoding);    if (len < 4)        return -1;    unsigned int hash1 = make_tag(encoding[0], encoding[1], encoding[2], encoding[3]);    const char *ch = encoding + len - 4;    unsigned int hash2 = make_tag(ch[0], ch[1], ch[2], ch[3]);    const XlfdEncoding *enc = xlfd_encoding;    for (; enc->name; ++enc) {        if ((enc->hash1 && enc->hash1 != hash1) ||            (enc->hash2 && enc->hash2 != hash2))            continue;        // hashes match, do a compare if strings match        // the enc->name can contain '*'s we have to interpret correctly        const char *n = enc->name;        const char *e = encoding;        while (1) {            // qDebug("bol: *e='%c', *n='%c'", *e, *n);            if (*e == '\0') {                if (*n)                    break;                // qDebug("found encoding id %d", enc->id);                return enc->id;            }            if (*e == *n) {                ++e;                ++n;                continue;            }            if (*n != '*')                break;            ++n;            // qDebug("skip: *e='%c', *n='%c'", *e, *n);            while (*e && *e != *n)                ++e;        }    }    // qDebug("couldn't find encoding %s", encoding);    return -1;}int qt_mib_for_xlfd_encoding(const char *encoding){    int id = qt_xlfd_encoding_id(encoding);    if (id != -1) return xlfd_encoding[id].mib;    return 0;};int qt_encoding_id_for_mib(int mib){    const XlfdEncoding *enc = xlfd_encoding;    for (; enc->name; ++enc) {        if (enc->mib == mib)            return enc->id;    }    return -1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -