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 );
}