QString QFontProto::lastResortFamily() const { QFont *item = qscriptvalue_cast<QFont*>(thisObject()); if (item) return item->lastResortFamily(); return QString(); }
void QFontDialogPrivate::updateFamilies() { Q_Q(QFontDialog); enum match_t { MATCH_NONE = 0, MATCH_LAST_RESORT = 1, MATCH_APP = 2, MATCH_FAMILY = 3 }; QStringList familyNames = fdb.families(writingSystem); familyList->model()->setStringList(familyNames); QString foundryName1, familyName1, foundryName2, familyName2; int bestFamilyMatch = -1; match_t bestFamilyType = MATCH_NONE; QFont f; // ##### do the right thing for a list of family names in the font. QFontDatabase::parseFontName(family, foundryName1, familyName1); QStringList::const_iterator it = familyNames.constBegin(); int i = 0; for(; it != familyNames.constEnd(); ++it, ++i) { QFontDatabase::parseFontName(*it, foundryName2, familyName2); //try to match... if (familyName1 == familyName2) { bestFamilyType = MATCH_FAMILY; if (foundryName1 == foundryName2) { bestFamilyMatch = i; break; } if (bestFamilyMatch < MATCH_FAMILY) bestFamilyMatch = i; } //and try some fall backs match_t type = MATCH_NONE; if (bestFamilyType <= MATCH_NONE && familyName2 == f.lastResortFamily()) type = MATCH_LAST_RESORT; if (bestFamilyType <= MATCH_LAST_RESORT && familyName2 == f.family()) type = MATCH_APP; // ### add fallback for writingSystem if (type != MATCH_NONE) { bestFamilyType = type; bestFamilyMatch = i; } } if (i != -1 && bestFamilyType != MATCH_NONE) familyList->setCurrentItem(bestFamilyMatch); else familyList->setCurrentItem(0); familyEdit->setText(familyList->currentText()); if (q->style()->styleHint(QStyle::SH_FontDialog_SelectAssociatedText, 0, q) && familyList->hasFocus()) familyEdit->selectAll(); updateStyles(); }
void QFontDialog::updateFamilies() { d->familyList->blockSignals( TRUE ); enum match_t { MATCH_NONE=0, MATCH_LAST_RESORT=1, MATCH_APP=2, MATCH_FALLBACK, MATCH_FAMILY=3 }; QStringList familyNames = d->fdb.families(d->script); { // merge the unicode/unknown family list with the above list. QStringList l = d->fdb.families(QFont::Unicode) + d->fdb.families(QFont::UnknownScript); QStringList::ConstIterator it = l.begin(), end = l.end(); for (; it != end; ++it) { if (! familyNames.contains(*it)) familyNames << *it; } } familyNames.sort(); d->familyList->clear(); #ifdef SHOW_FONTS_IN_FAMILIES QStringList::Iterator it = familyNames.begin(); int idx = 0; for( ; it != familyNames.end() ; ++it ) d->familyList->insertItem(new QListBoxFontText(*it), idx++); #else d->familyList->insertStringList( familyNames ); #endif QString foundryName1, familyName1, foundryName2, familyName2; int bestFamilyMatch = -1; match_t bestFamilyType = MATCH_NONE; QFont f; // ##### do the right thing for a list of family names in the font. QFontDatabase::parseFontName(d->family, foundryName1, familyName1); QStringList::Iterator it = familyNames.begin(); int i = 0; for( ; it != familyNames.end(); ++it, ++i ) { QFontDatabase::parseFontName(*it, foundryName2, familyName2); //try to match.. if ( familyName1 == familyName2 ) { bestFamilyType = MATCH_FAMILY; if ( foundryName1 == foundryName2 ) { bestFamilyMatch = i; break; } if ( bestFamilyMatch < MATCH_FAMILY ) bestFamilyMatch = i; } //and try some fall backs match_t type = MATCH_NONE; if ( bestFamilyType <= MATCH_NONE && familyName2 == f.lastResortFamily() ) type = MATCH_LAST_RESORT; if ( bestFamilyType <= MATCH_LAST_RESORT && familyName2 == f.family() ) type = MATCH_APP; // ### add fallback for script if ( type != MATCH_NONE ) { bestFamilyType = type; bestFamilyMatch = i; } } if (i != -1 && bestFamilyType != MATCH_NONE) d->familyList->setCurrentItem(bestFamilyMatch); else d->familyList->setCurrentItem( 0 ); d->familyEdit->setText( d->familyList->currentText() ); if ( style().styleHint(QStyle::SH_FontDialog_SelectAssociatedText, this) && d->familyList->hasFocus() ) d->familyEdit->selectAll(); d->familyList->blockSignals( FALSE ); updateStyles(); }
void QFontDialogPrivate::updateFamilies() { Q_Q(QFontDialog); enum match_t { MATCH_NONE = 0, MATCH_LAST_RESORT = 1, MATCH_APP = 2, MATCH_FAMILY = 3 }; const QFontDialog::FontDialogOptions scalableMask = (QFontDialog::ScalableFonts | QFontDialog::NonScalableFonts); const QFontDialog::FontDialogOptions spacingMask = (QFontDialog::ProportionalFonts | QFontDialog::MonospacedFonts); const QFontDialog::FontDialogOptions options = q->options(); QFontDatabase fdb; QStringList familyNames; foreach (const QString &family, fdb.families(writingSystem)) { if (fdb.isPrivateFamily(family)) continue; if ((options & scalableMask) && (options & scalableMask) != scalableMask) { if (bool(options & QFontDialog::ScalableFonts) != fdb.isSmoothlyScalable(family)) continue; } if ((options & spacingMask) && (options & spacingMask) != spacingMask) { if (bool(options & QFontDialog::MonospacedFonts) != fdb.isFixedPitch(family)) continue; } familyNames << family; } familyList->model()->setStringList(familyNames); QString foundryName1, familyName1, foundryName2, familyName2; int bestFamilyMatch = -1; match_t bestFamilyType = MATCH_NONE; QFont f; // ##### do the right thing for a list of family names in the font. QFontDatabase::parseFontName(family, foundryName1, familyName1); QStringList::const_iterator it = familyNames.constBegin(); int i = 0; for(; it != familyNames.constEnd(); ++it, ++i) { QFontDatabase::parseFontName(*it, foundryName2, familyName2); //try to match... if (familyName1 == familyName2) { bestFamilyType = MATCH_FAMILY; if (foundryName1 == foundryName2) { bestFamilyMatch = i; break; } if (bestFamilyMatch < MATCH_FAMILY) bestFamilyMatch = i; } //and try some fall backs match_t type = MATCH_NONE; if (bestFamilyType <= MATCH_NONE && familyName2 == f.lastResortFamily()) type = MATCH_LAST_RESORT; if (bestFamilyType <= MATCH_LAST_RESORT && familyName2 == f.family()) type = MATCH_APP; // ### add fallback for writingSystem if (type != MATCH_NONE) { bestFamilyType = type; bestFamilyMatch = i; } } if (i != -1 && bestFamilyType != MATCH_NONE) familyList->setCurrentItem(bestFamilyMatch); else familyList->setCurrentItem(0); familyEdit->setText(familyList->currentText()); if (q->style()->styleHint(QStyle::SH_FontDialog_SelectAssociatedText, 0, q) && familyList->hasFocus()) familyEdit->selectAll(); updateStyles(); }