Source Code (Use browser search to find items of interest.)
Class Index
qt'QFontDatabasePrivate (./qt-2.1.0/src/kernel/qfontdatabase.cpp:334)
class QFontDatabasePrivate {
public:
QFontDatabasePrivate(){
namesDirty = TRUE;
familiesDirty = TRUE;
foundryDict.setAutoDelete( TRUE );
}
const QStringList &families( bool onlyForLocale ) const;
const QtFontFamily *family( const QString &name ) const;
const QStringList &foundries() const;
const QtFontFoundry *foundry( const QString foundryName ) const;
private:
QStringList foundryNames;
QDict<QtFontFoundry> foundryDict;
QStringList familyNames;
QDict<QtFontFamily> bestFamilyDict;
bool namesDirty;
bool familiesDirty;
void addFoundry( QtFontFoundry *f )
{ foundryDict.insert( f->name(), f ); }
friend void QFontDatabase::createDatabase();
#ifdef _WS_WIN_
friend void newWinFont( void * p );
#endif
};
qt'QFontDatabasePrivate::families() (./qt-2.1.0/src/kernel/qfontdatabase.cpp:756)
const QStringList &QFontDatabasePrivate::families( bool onlyForLocale ) const
{
QFontDatabasePrivate *that = (QFontDatabasePrivate*)this; // Mutable
if ( familiesDirty ) {
QDict<QtFontFoundry> firstFoundryForFamily;
QDict<int> doubles;
QtFontFoundry *foundry;
QString s;
QDictIterator<QtFontFoundry> iter( foundryDict );
for( ; (foundry = iter.current()) ; ++iter ) {
QStringList l = foundry->families();
for ( QStringList::Iterator it = l.begin(); it != l.end(); ++it ) {
if ( onlyForLocale ) {
const QtFontFamily *tmp = foundry->family( *it );
if ( !tmp ) {
qWarning( "QFontDatabasePrivate::families:"
"Internal error, %s not found.",
(const char*)*it );
continue;
}
if ( !localeNeedsSet() && !tmp->hasLocaleCharSet() )
continue;
}
if ( !firstFoundryForFamily.find( *it ) ) {
that->familyNames.append( *it );
firstFoundryForFamily.insert( *it, foundry );
} else {
QString s;
if ( !doubles.find(*it) ) { // 2nd foundry for family?
doubles.insert( *it, (int*)1 );
QtFontFoundry *tmp = firstFoundryForFamily.find(*it);
QString firstFoundryName;
if ( tmp )
firstFoundryName = tmp->name();
else
qWarning( "QFontDatabasePrivate::families:"
"Internal error, Cannot find first foundry");
that->familyNames.remove( *it );
s = firstFoundryName + "-" + *it;
that->familyNames.append( s );
}
s = foundry->name() + "-" + *it;
that->familyNames.append( s );
}
}
}
that->familyNames.sort();
that->familiesDirty = FALSE;
}
return familyNames;
}
qt'QFontDatabasePrivate::family() (./qt-2.1.0/src/kernel/qfontdatabase.cpp:810)
const QtFontFamily *QFontDatabasePrivate::family( const QString &name ) const
{
if ( name.isEmpty() )
return 0;
QFontDatabasePrivate *that = (QFontDatabasePrivate*)this; // Mutable
const QtFontFamily *result = bestFamilyDict.find(name);
if ( !result ) {
const QtFontFoundry *fndry;
const QtFontFamily *fam;
if ( name.contains('-') ) {
int i = name.find('-');
QString foundryName = name.left( i );
QString familyName = name.right( name.length() - i - 1 );
fndry = foundry( foundryName );
if ( fndry ) {
fam = fndry->family( familyName );
if ( fam ) {
that->bestFamilyDict.insert( name, fam );
return fam;
}
}
}
QList<QtFontFamily> list;
QDictIterator<QtFontFoundry> iter( foundryDict );
const QtFontFamily *nonScalable = 0;
const QtFontFamily *bitmapScalable = 0;
QString s;
for( ; (fndry = iter.current()) ; ++iter ) {
fam = fndry->family( name );
if ( fam ) {
if ( fam->isSmoothlyScalable() ) {
result = fam;
break;
}
if ( fam->isBitmapScalable() )
bitmapScalable = fam;
else
nonScalable = fam;
}
}
if ( !result )
result = bitmapScalable ? bitmapScalable : nonScalable;
if ( result )
that->bestFamilyDict.insert( name, result );
}
return result;
}
qt'QFontDatabasePrivate::foundries() (./qt-2.1.0/src/kernel/qfontdatabase.cpp:859)
const QStringList &QFontDatabasePrivate::foundries() const
{
if ( namesDirty ) {
QFontDatabasePrivate *that = (QFontDatabasePrivate*) this; // Mutable
QDictIterator<QtFontFoundry> iter( foundryDict );
QtFontFoundry *tmp;
for( ; (tmp = iter.current()) ; ++iter )
that->foundryNames.append( tmp->name() );
that->foundryNames.sort();
that->namesDirty = FALSE;
}
return foundryNames;
}
qt'QFontDatabasePrivate::foundry() (./qt-2.1.0/src/kernel/qfontdatabase.cpp:874)
const QtFontFoundry *QFontDatabasePrivate::foundry( const QString foundryName ) const
{
return foundryDict.find( foundryName );
}