Qt::HANDLE QFont::handle() const { QFontEngine *engine = d->engineForScript( QFontPrivate::defaultScript ); #ifdef QT_CHECK_STATE Q_ASSERT( engine != 0 ); #endif // QT_CHECK_STATE return engine->handle(); }
/*! \overload Returns the width of the first \a len characters of string \a str. */ int QFontMetrics::width( const QString &str, int len ) const { if ( len < 0 ) len = str.length(); int ret=0; QFontEngine *engine = d->engineForScript( QFont::NoScript ); for (int i=0; i<len; i++) ret += memorymanager->lockGlyphMetrics( engine->handle(), str[i].unicode() )->advance; return (ret*engine->scale)>>8; }
int QFontMetrics::width( QChar ch ) const { unsigned short uc = ch.unicode(); QFontEngine *engine = d->engineForScript( QFont::NoScript ); if ( uc < QFontEngineData::widthCacheSize && d->engineData && d->engineData->widthCache[ uc ] ) return (d->engineData->widthCache[ uc ]*engine->scale)>>8; if ( ::category( ch ) == QChar::Mark_NonSpacing || qIsZeroWidthChar(ch.unicode())) return 0; int width = memorymanager->lockGlyphMetrics( engine->handle(), ch.unicode() )->advance; if ( ch.unicode() < QFontEngineData::widthCacheSize && width > 0 && width < 0x100 ) d->engineData->widthCache[ ch.unicode() ] = width; return (width*engine->scale)>>8; }
int QFontMetrics::rightBearing(QChar ch) const { QFontEngine *engine = d->engineForScript( QFont::NoScript ); QGlyphMetrics *metrics = memorymanager->lockGlyphMetrics( engine->handle(), ch.unicode() ); return ((metrics->advance - metrics->width - metrics->bearingx)*engine->scale)>>8; }
int QFontMetrics::leftBearing(QChar ch) const { QFontEngine *engine = d->engineForScript( QFont::NoScript ); return (memorymanager->lockGlyphMetrics( engine->handle(), ch.unicode() )->bearingx*engine->scale)>>8; }