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

📄 qfontdatabase_qws.cpp

📁 奇趣公司比较新的qt/emd版本
💻 CPP
📖 第 1 页 / 共 3 页
字号:
        } else if (QFile::exists(file) || privateDb()->isApplicationFont(file)) {            QFontEngine::FaceId faceId;            faceId.filename = file.toLocal8Bit();            faceId.index = size->fileIndex;            QFontEngineFT *fte = new QFontEngineFT(def);            if (fte->init(faceId, style->antialiased,                          style->antialiased ? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono)) {#ifdef QT_NO_QWS_QPF2                return fte;#else                engine = fte;                // try to distinguish between bdf and ttf fonts we can pre-render                // and don't try to share outline fonts                shareFonts = shareFonts                             && !fte->drawAsOutline()                             && !fte->getSfntTable(MAKE_TAG('h', 'e', 'a', 'd')).isEmpty();#endif            } else {                delete fte;            }        }        if (engine) {#ifndef QT_NO_QWS_QPF2            if (shareFonts) {                QFontEngineQPF *fe = new QFontEngineQPF(def, -1, engine);                engine = 0;                if (fe->isValid())                    return fe;                qWarning("Initializing QFontEngineQPF failed for %s", qPrintable(file));                engine = fe->takeRenderingEngine();                delete fe;            }#endif            return engine;        }    } else#endif // QT_NO_FREETYPE    {#ifndef QT_NO_QWS_QPF        QString fn = qwsFontPath();        fn += QLatin1Char('/');        fn += family->name.toLower()              + QLatin1String("_") + QString::number(pixelSize*10)              + QLatin1String("_") + QString::number(style->key.weight)              + (style->key.style == QFont::StyleItalic ?                 QLatin1String("i.qpf") : QLatin1String(".qpf"));        //###rotation ###        QFontEngine *fe = new QFontEngineQPF1(request, fn);        return fe;#endif // QT_NO_QWS_QPF    }    return new QFontEngineBox(pixelSize);}staticQFontEngine *loadEngine(int script, const QFontPrivate *fp,                        const QFontDef &request,                        QtFontFamily *family, QtFontFoundry *foundry,                        QtFontStyle *style, QtFontSize *size){    QFontEngine *fe = loadSingleEngine(script, fp, request, family, foundry,                                       style, size);    if (fe        && script == QUnicodeTables::Common        && !(request.styleStrategy & QFont::NoFontMerging) && !fe->symbol) {        QStringList fallbacks = privateDb()->fallbackFamilies;        if (family && !family->fallbackFamilies.isEmpty())            fallbacks = family->fallbackFamilies;        fe = new QFontEngineMultiQWS(fe, script, fallbacks);    }    return fe;}static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt){    QFontDatabasePrivate *db = privateDb();#ifdef QT_NO_FREETYPE    Q_UNUSED(fnt);#else    fnt->families = db->addTTFile(QFile::encodeName(fnt->fileName), fnt->data);#endif    db->reregisterAppFonts = true;}bool QFontDatabase::removeApplicationFont(int handle){    QFontDatabasePrivate *db = privateDb();    if (handle < 0 || handle >= db->applicationFonts.count())        return false;    db->applicationFonts[handle] = QFontDatabasePrivate::ApplicationFont();    db->reregisterAppFonts = true;    db->invalidate();    return true;}bool QFontDatabase::removeAllApplicationFonts(){    QFontDatabasePrivate *db = privateDb();    if (db->applicationFonts.isEmpty())        return false;    db->applicationFonts.clear();    db->invalidate();    return true;}/*!    \internal*/QFontEngine *QFontDatabase::findFont(int script, const QFontPrivate *fp,                        const QFontDef &request){    const int force_encoding_id = -1;    if (!privateDb()->count)        initializeDb();    QFontEngine *fe = 0;    if (fp) {        if (fp->rawMode) {            fe = loadEngine(script, fp, request, 0, 0, 0, 0                );            // if we fail to load the rawmode font, use a 12pixel box engine instead            if (! fe) fe = new QFontEngineBox(12);            return fe;        }        QFontCache::Key key(request, script);        fe = QFontCache::instance->findEngine(key);        if (fe)            return fe;    }    QString family_name, foundry_name;    QtFontStyle::Key styleKey;    styleKey.style = request.style;    styleKey.weight = request.weight;    styleKey.stretch = request.stretch;    char pitch = request.ignorePitch ? '*' : request.fixedPitch ? 'm' : 'p';    parseFontName(request.family, foundry_name, family_name);    FM_DEBUG("QFontDatabase::findFont\n"             "  request:\n"             "    family: %s [%s], script: %d\n"             "    weight: %d, style: %d\n"             "    stretch: %d\n"             "    pixelSize: %d\n"             "    pitch: %c",             family_name.isEmpty() ? "-- first in script --" : family_name.toLatin1().constData(),             foundry_name.isEmpty() ? "-- any --" : foundry_name.toLatin1().constData(),             script, request.weight, request.style, request.stretch, request.pixelSize, pitch);    if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) {        fe = new QTestFontEngine(request.pixelSize);        fe->fontDef = request;    }    if (!fe)    {        QtFontDesc desc;        match(script, request, family_name, foundry_name, force_encoding_id, &desc);        if (desc.family != 0 && desc.foundry != 0 && desc.style != 0            ) {            FM_DEBUG("  BEST:\n"                     "    family: %s [%s]\n"                     "    weight: %d, style: %d\n"                     "    stretch: %d\n"                     "    pixelSize: %d\n"                     "    pitch: %c\n"                     "    encoding: %d\n",                     desc.family->name.toLatin1().constData(),                     desc.foundry->name.isEmpty() ? "-- none --" : desc.foundry->name.toLatin1().constData(),                     desc.style->key.weight, desc.style->key.style,                     desc.style->key.stretch, desc.size ? desc.size->pixelSize : 0xffff,                     'p', 0                );            fe = loadEngine(script, fp, request, desc.family, desc.foundry, desc.style, desc.size                );        } else {            FM_DEBUG("  NO MATCH FOUND\n");        }        if (fe)            initFontDef(desc, request, &fe->fontDef);    }    if (fe) {        if (fp) {            QFontDef def = request;            if (def.family.isEmpty()) {                def.family = fp->request.family;                def.family = def.family.left(def.family.indexOf(QLatin1Char(',')));            }            QFontCache::Key key(def, script);            QFontCache::instance->insertEngine(key, fe);        }        if (scriptRequiresOpenType(script)) {#ifndef QT_NO_FREETYPE            QOpenType *ot = fe->openType();            if (!ot || !ot->supportsScript(script))#endif            {                FM_DEBUG("  OpenType support missing for script");                fe = 0;            }        }    }    if (!fe) {        if (!request.family.isEmpty())            return 0;        FM_DEBUG("returning box engine");        fe = new QFontEngineBox(request.pixelSize);        if (fp) {            QFontCache::Key key(request, script);            QFontCache::instance->insertEngine(key, fe);        }    }    if (fp && fp->dpi > 0) {        fe->fontDef.pointSize = qreal(double((fe->fontDef.pixelSize * 72) / fp->dpi));    } else {        fe->fontDef.pointSize = request.pointSize;    }    return fe;}void QFontDatabase::load(const QFontPrivate *d, int script){    QFontDef req = d->request;    if (req.pixelSize == -1)        req.pixelSize = qRound(req.pointSize*d->dpi/72);    if (req.pointSize < 0)        req.pointSize = req.pixelSize*72.0/d->dpi;    if (!d->engineData) {        QFontCache::Key key(req, script);        // look for the requested font in the engine data cache        d->engineData = QFontCache::instance->findEngineData(key);        if (!d->engineData) {            // create a new one            d->engineData = new QFontEngineData;            QFontCache::instance->insertEngineData(key, d->engineData);        } else {            d->engineData->ref.ref();        }    }    // the cached engineData could have already loaded the engine we want    if (d->engineData->engines[script]) return;    // load the font    QFontEngine *engine = 0;    //    double scale = 1.0; // ### TODO: fix the scale calculations    // list of families to try    QStringList family_list;    if (!req.family.isEmpty()) {        family_list = req.family.split(QLatin1Char(','));        // append the substitute list for each family in family_list        QStringList subs_list;        QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd();        for (; it != end; ++it)            subs_list += QFont::substitutes(*it);        family_list += subs_list;        // append the default fallback font for the specified script        // family_list << ... ; ###########        // add the default family        QString defaultFamily = QApplication::font().family();        if (! family_list.contains(defaultFamily))            family_list << defaultFamily;        // add QFont::defaultFamily() to the list, for compatibility with        // previous versions        family_list << QApplication::font().defaultFamily();    }    // null family means find the first font matching the specified script    family_list << QString();    QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd();    for (; ! engine && it != end; ++it) {        req.family = *it;        engine = QFontDatabase::findFont(script, d, req);        if (engine) {            if (engine->type() != QFontEngine::Box)                break;            if (! req.family.isEmpty())                engine = 0;            continue;        }    }    engine->ref.ref();    d->engineData->engines[script] = engine;}

⌨️ 快捷键说明

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