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

📄 qfontdatabase_qws.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
#else        fontpath = QLatin1String("/lib/fonts");#endif    }    return fontpath;}/*!    \internal*/static void initializeDb(){    QFontDatabasePrivate *db = privateDb();    if (!db || db->count)        return;    if (db->reregisterAppFonts) {        db->reregisterAppFonts = false;        for (int i = 0; i < db->applicationFonts.count(); ++i)            if (!db->applicationFonts.at(i).families.isEmpty()) {                registerFont(&db->applicationFonts[i]);            }    }    QString fontpath = qwsFontPath();    QString fontDirFile = fontpath + QLatin1String("/fontdir");    if(!QFile::exists(fontpath)) {        qFatal("QFontDatabase: Cannot find font directory %s - is Qt installed correctly?",               fontpath.toLocal8Bit().constData());    }    if (db->loadFromCache(fontpath))        return;    QString dbFileName = qws_fontCacheDir() + QLatin1String("/fontdb");    QFile binaryDb(dbFileName + QLatin1String(".tmp"));    binaryDb.open(QIODevice::WriteOnly | QIODevice::Truncate);    db->stream = new QDataStream(&binaryDb);    *db->stream << DatabaseVersion << quint8(db->stream->version()) << fontpath;//    qDebug() << "creating binary database at" << binaryDb.fileName();    // Load in font definition file    FILE* fontdef=fopen(fontDirFile.toLocal8Bit().constData(),"r");    if (fontdef) {        char buf[200]="";        char name[200]="";        char render[200]="";        char file[200]="";        char isitalic[10]="";        char flags[10]="";        do {            fgets(buf,200,fontdef);            if (buf[0] != '#') {                int weight=50;                int size=0;                sscanf(buf,"%s %s %s %s %d %d %s",name,file,render,isitalic,&weight,&size,flags);                QString filename;                if (file[0] != '/')                    filename.append(fontpath).append(QLatin1Char('/'));                filename += QLatin1String(file);                bool italic = isitalic[0] == 'y';                bool smooth = QByteArray(flags).contains('s');                if (file[0] && QFile::exists(filename))                    db->addFont(QString::fromUtf8(name), /*foundry*/"", weight, italic, size/10, QFile::encodeName(filename), /*fileIndex*/ 0, smooth);            }        } while (!feof(fontdef));        fclose(fontdef);    }    QDir dir(fontpath, QLatin1String("*.qpf"));    for (int i=0; i<int(dir.count()); i++) {        int u0 = dir[i].indexOf(QLatin1Char('_'));        int u1 = dir[i].indexOf(QLatin1Char('_'), u0+1);        int u2 = dir[i].indexOf(QLatin1Char('_'), u1+1);        int u3 = dir[i].indexOf(QLatin1Char('.'), u1+1);        if (u2 < 0) u2 = u3;        QString familyname = dir[i].left(u0);        int pixelSize = dir[i].mid(u0+1,u1-u0-1).toInt()/10;        bool italic = dir[i].mid(u2-1,1) == QLatin1String("i");        int weight = dir[i].mid(u1+1,u2-u1-1-(italic?1:0)).toInt();        db->addFont(familyname, /*foundry*/ "qt", weight, italic, pixelSize, QFile::encodeName(dir.absoluteFilePath(dir[i])),                    /*fileIndex*/ 0, /*antialiased*/ true);    }#ifndef QT_NO_FREETYPE    dir.setNameFilters(QStringList() << QLatin1String("*.ttf")                       << QLatin1String("*.ttc") << QLatin1String("*.pfa")                       << QLatin1String("*.pfb"));    dir.refresh();    for (int i = 0; i < int(dir.count()); ++i) {        const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i]));//        qDebug() << "looking at" << file;        db->addTTFile(file);    }#endif#ifndef QT_NO_QWS_QPF2    dir.setNameFilters(QStringList() << QLatin1String("*.qpf2"));    dir.refresh();    for (int i = 0; i < int(dir.count()); ++i) {        const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i]));//        qDebug() << "looking at" << file;        db->addQPF2File(file);    }#endif#ifdef QFONTDATABASE_DEBUG    // print the database    for (int f = 0; f < db->count; f++) {        QtFontFamily *family = db->families[f];        FD_DEBUG("'%s' %s", qPrintable(family->name), (family->fixedPitch ? "fixed" : ""));#if 0        for (int i = 0; i < QFont::LastPrivateScript; ++i) {            FD_DEBUG("\t%s: %s", qPrintable(QFontDatabase::scriptName((QFont::Script) i)),                     ((family->scripts[i] & QtFontFamily::Supported) ? "Supported" :                      (family->scripts[i] & QtFontFamily::UnSupported) == QtFontFamily::UnSupported ?                      "UnSupported" : "Unknown"));        }#endif        for (int fd = 0; fd < family->count; fd++) {            QtFontFoundry *foundry = family->foundries[fd];            FD_DEBUG("\t\t'%s'", qPrintable(foundry->name));            for (int s = 0; s < foundry->count; s++) {                QtFontStyle *style = foundry->styles[s];                FD_DEBUG("\t\t\tstyle: style=%d weight=%d\n"                         "\t\t\tstretch=%d",                         style->key.style, style->key.weight,                         style->key.stretch);                if (style->smoothScalable)                    FD_DEBUG("\t\t\t\tsmooth scalable");                else if (style->bitmapScalable)                    FD_DEBUG("\t\t\t\tbitmap scalable");                if (style->pixelSizes) {                    FD_DEBUG("\t\t\t\t%d pixel sizes",  style->count);                    for (int z = 0; z < style->count; ++z) {                        QtFontSize *size = style->pixelSizes + z;                        FD_DEBUG("\t\t\t\t  size %5d",                                  size->pixelSize);                    }                }            }        }    }#endif // QFONTDATABASE_DEBUG#ifndef QT_NO_LIBRARY    QStringList pluginFoundries = loader()->keys();//    qDebug() << "plugin foundries:" << pluginFoundries;    for (int i = 0; i < pluginFoundries.count(); ++i) {        const QString foundry(pluginFoundries.at(i));        QFontEngineFactoryInterface *factory = qobject_cast<QFontEngineFactoryInterface *>(loader()->instance(foundry));        if (!factory) {            qDebug() << "Could not load plugin for foundry" << foundry;            continue;        }        QList<QFontEngineInfo> fonts = factory->availableFontEngines();        for (int i = 0; i < fonts.count(); ++i) {            QFontEngineInfo info = fonts.at(i);            int weight = info.weight();            if (weight <= 0)                weight = QFont::Normal;            db->addFont(info.family(), foundry.toLatin1().constData(),                        weight, info.style() != QFont::StyleNormal,                        qRound(info.pixelSize()), /*file*/QByteArray(),                        /*fileIndex*/0, /*antiAliased*/true,                        info.writingSystems());        }    }#endif    // the empty string/familyname signifies the end of the font list.    *db->stream << QString();    {        bool coveredWritingSystems[QFontDatabase::WritingSystemsCount] = { 0 };        db->fallbackFamilies.clear();        for (int i = 0; i < db->count; ++i) {            QtFontFamily *family = db->families[i];            bool add = false;            if (family->count == 0)                continue;            if (family->bogusWritingSystems)                continue;            for (int ws = 1; ws < QFontDatabase::WritingSystemsCount; ++ws) {                if (coveredWritingSystems[ws])                    continue;                if (family->writingSystems[ws] & QtFontFamily::Supported) {                    coveredWritingSystems[ws] = true;                    add = true;                }            }            if (add)                db->fallbackFamilies << family->name;        }        //qDebug() << "fallbacks on the server:" << db->fallbackFamilies;        *db->stream << db->fallbackFamilies;    }    delete db->stream;    db->stream = 0;    QFile::remove(dbFileName);    binaryDb.rename(dbFileName);}// called from qwindowsystem_qws.cppvoid qt_qws_init_fontdb(){    initializeDb();}#ifndef QT_NO_SETTINGS// called from qapplication_qws.cppvoid qt_applyFontDatabaseSettings(const QSettings &settings){    initializeDb();    QFontDatabasePrivate *db = privateDb();    for (int i = 0; i < db->count; ++i) {        QtFontFamily *family = db->families[i];        if (settings.contains(family->name))            family->fallbackFamilies = settings.value(family->name).toStringList();    }    if (settings.contains(QLatin1String("Global Fallbacks")))        db->fallbackFamilies = settings.value(QLatin1String("Global Fallbacks")).toStringList();}#endif // QT_NO_SETTINGSstatic inline void load(const QString & = QString(), int = -1){    initializeDb();}#ifndef QT_NO_FREETYPE#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20105#define X_SIZE(face,i) ((face)->available_sizes[i].x_ppem)#define Y_SIZE(face,i) ((face)->available_sizes[i].y_ppem)#else#define X_SIZE(face,i) ((face)->available_sizes[i].width << 6)#define Y_SIZE(face,i) ((face)->available_sizes[i].height << 6)#endif#endif // QT_NO_FREETYPEstaticQFontEngine *loadSingleEngine(int script, const QFontPrivate *fp,                              const QFontDef &request,                              QtFontFamily *family, QtFontFoundry *foundry,                              QtFontStyle *style, QtFontSize *size){    Q_UNUSED(script);    Q_UNUSED(fp);#ifdef QT_NO_FREETYPE    Q_UNUSED(foundry);#endif#ifdef QT_NO_QWS_QPF    Q_UNUSED(family);#endif    Q_ASSERT(size);    int pixelSize = size->pixelSize;    if (!pixelSize || style->smoothScalable && pixelSize == SMOOTH_SCALABLE)        pixelSize = request.pixelSize;#ifndef QT_NO_QWS_QPF2    if (foundry->name == QLatin1String("prerendered")) {        int f = ::open(size->fileName, O_RDONLY);        if (f >= 0) {            QFontEngineQPF *fe = new QFontEngineQPF(request, f);            if (fe->isValid())                return fe;            qDebug() << "fontengine is not valid!";            delete fe; // will close f        }    } else#endif#ifndef QT_NO_FREETYPE    if ( foundry->name != QLatin1String("qt") ) { ///#### is this the best way????        QString file = QFile::decodeName(size->fileName);        QFontDef def = request;        def.pixelSize = pixelSize;        static bool dontShareFonts = !qgetenv("QWS_NO_SHARE_FONTS").isEmpty();        bool shareFonts = !dontShareFonts;        QFontEngine *engine = 0;        if (file.isEmpty()) {#ifndef QT_NO_LIBRARY            QFontEngineFactoryInterface *factory = qobject_cast<QFontEngineFactoryInterface *>(loader()->instance(foundry->name));            if (factory) {                QFontEngineInfo info;                info.setFamily(request.family);                info.setPixelSize(request.pixelSize);                info.setStyle(QFont::Style(request.style));                info.setWeight(request.weight);                // #### antialiased                QAbstractFontEngine *customEngine = factory->create(info);                if (customEngine) {                    engine = new QProxyFontEngine(customEngine, def);                    if (shareFonts) {                        QVariant hint = customEngine->fontProperty(QAbstractFontEngine::CacheGlyphsHint);                        if (hint.isValid())                            shareFonts = hint.toBool();                        else                            shareFonts = (pixelSize < 64);                    }                }            }#endif // QT_NO_LIBRARY

⌨️ 快捷键说明

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