Thread: [Kde-cygwin-cvs] CVS: qt-3/src/kernel qfont_win.cpp,1.1.2.16.2.14,1.1.2.16.2.15
Status: Inactive
Brought to you by:
habacker
From: Christian E. <che...@us...> - 2005-10-28 14:12:07
|
Update of /cvsroot/kde-cygwin/qt-3/src/kernel In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24304/src/kernel Modified Files: Tag: QT_WIN32_3_3_BRANCH qfont_win.cpp Log Message: should be fine now - compared to qt4 and found no significant differences removed unneded code astyle'd Index: qfont_win.cpp =================================================================== RCS file: /cvsroot/kde-cygwin/qt-3/src/kernel/Attic/qfont_win.cpp,v retrieving revision 1.1.2.16.2.14 retrieving revision 1.1.2.16.2.15 diff -u -r1.1.2.16.2.14 -r1.1.2.16.2.15 --- qfont_win.cpp 27 Oct 2005 19:15:29 -0000 1.1.2.16.2.14 +++ qfont_win.cpp 28 Oct 2005 14:11:59 -0000 1.1.2.16.2.15 @@ -76,44 +76,44 @@ #define QT_CHECK_STATE -extern HDC shared_dc; // common dc for all fonts +extern HDC shared_dc; // common dc for all fonts // ### maybe move to qapplication_win -QFont qt_LOGFONTtoQFont(LOGFONT& lf, bool /*scale*/) +QFont qt_LOGFONTtoQFont( LOGFONT& lf, bool /*scale*/ ) { - QString family = QT_WA_INLINE(QString::fromUcs2((ushort*)lf.lfFaceName), - QString::fromLocal8Bit((char*)lf.lfFaceName)); - QFont qf(family); - qf.setItalic(lf.lfItalic); - if (lf.lfWeight != FW_DONTCARE) { + QString family = QT_WA_INLINE( QString::fromUcs2( ( ushort* ) lf.lfFaceName ), + QString::fromLocal8Bit( ( char* ) lf.lfFaceName ) ); + QFont qf( family ); + qf.setItalic( lf.lfItalic ); + if ( lf.lfWeight != FW_DONTCARE ) { int weight; - if (lf.lfWeight < 400) + if ( lf.lfWeight < 400 ) weight = QFont::Light; - else if (lf.lfWeight < 600) + else if ( lf.lfWeight < 600 ) weight = QFont::Normal; - else if (lf.lfWeight < 700) + else if ( lf.lfWeight < 700 ) weight = QFont::DemiBold; - else if (lf.lfWeight < 800) + else if ( lf.lfWeight < 800 ) weight = QFont::Bold; else weight = QFont::Black; - qf.setWeight(weight); + qf.setWeight( weight ); } - int lfh = QABS(lf.lfHeight); - Q_ASSERT(shared_dc); - qf.setPointSize(lfh * 72.0 / GetDeviceCaps(shared_dc,LOGPIXELSY)); - qf.setUnderline(false); - qf.setOverline(false); - qf.setStrikeOut(false); + int lfh = QABS( lf.lfHeight ); + Q_ASSERT( shared_dc ); + qf.setPointSize( lfh * 72.0 / GetDeviceCaps( shared_dc, LOGPIXELSY ) ); + qf.setUnderline( false ); + qf.setOverline( false ); + qf.setStrikeOut( false ); return qf; } static inline double pixelSize( const QFontDef &request, QPaintDevice *paintdevice ) { double pSize; - int dpi = GetDeviceCaps(qt_display_dc(),LOGPIXELSY); - if (request.pointSize != -1) - pSize = request.pointSize * dpi/ 72.; + int dpi = GetDeviceCaps( qt_display_dc(), LOGPIXELSY ); + if ( request.pointSize != -1 ) + pSize = request.pointSize * dpi / 72.; else pSize = request.pixelSize; return pSize / 10; @@ -122,9 +122,9 @@ static inline double pointSize( const QFontDef &fd, QPaintDevice *paintdevice ) { double pSize; - int dpi = GetDeviceCaps(qt_display_dc(),LOGPIXELSY); - if (fd.pointSize < 0) - pSize = fd.pixelSize * 72. / ((float)dpi); + int dpi = GetDeviceCaps( qt_display_dc(), LOGPIXELSY ); + if ( fd.pointSize < 0 ) + pSize = fd.pixelSize * 72. / ( ( float ) dpi ); else pSize = fd.pointSize; return pSize / 10; @@ -159,19 +159,6 @@ return ret; } -//333 -// Sets the fallback family for the specified script. -void qt_set_fallback_font_family( QFont::Script script, const QString &family ) -{ - ensure_fallback_map(); - - if ( ! family.isEmpty() ) - fallbackMap->insert( script, family ); - else - fallbackMap->remove - ( script ); -} - QFont::Script QFontPrivate::defaultScript = QFont::UnknownScript; //int QFontPrivate::defaultEncodingID = -1; @@ -185,12 +172,59 @@ */ void QFont::initialize() { - if (QFontCache::instance) - return; - shared_dc = CreateCompatibleDC(qt_display_dc()); - if (!shared_dc) - qWarning("QFont::initialize: CreateCompatibleDC failed"); + if ( QFontCache::instance ) + return ; + shared_dc = CreateCompatibleDC( qt_display_dc() ); + if ( !shared_dc ) + qWarning( "QFont::initialize: CreateCompatibleDC failed" ); new QFontCache(); + + // get some sample text based on the users locale. we use this to determine the + // default script for the font system + QTextCodec *codec = QTextCodec::codecForLocale(); + QCString oldlctime = setlocale( LC_TIME, 0 ); + QCString lctime = setlocale( LC_TIME, "" ); + + time_t ttmp = time( 0 ); + struct tm *tt = 0; + char samp[ 64 ]; + QString sample; + + if ( ttmp != -1 ) { +#if defined(QT_THREAD_SUPPORT) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) + // use the reentrant versions of localtime() where available + tm res; + tt = localtime_r( &ttmp, &res ); +#else + + tt = localtime( &ttmp ); +#endif // QT_THREAD_SUPPORT && _POSIX_THREAD_SAFE_FUNCTIONS + + if ( tt != 0 && strftime( samp, 64, "%A%B", tt ) > 0 ) + if ( codec ) + sample = codec->toUnicode( samp ); + } + + if ( ! sample.isNull() && ! sample.isEmpty() ) { + QFont::Script cs = QFont::NoScript, tmp; + const QChar *uc = sample.unicode(); + QFontPrivate *priv = new QFontPrivate; + + for ( uint i = 0; i < sample.length(); i++ ) { + SCRIPT_FOR_CHAR( tmp, *uc ); + uc++; + if ( tmp != cs && tmp != QFont::UnknownScript ) { + cs = tmp; + break; + } + } + delete priv; + + if ( cs != QFont::UnknownScript ) + QFontPrivate::defaultScript = cs; + } + + setlocale( LC_TIME, oldlctime.data() ); } /*! \internal @@ -200,7 +234,7 @@ void QFont::cleanup() { delete QFontCache::instance; - DeleteDC(shared_dc); + DeleteDC( shared_dc ); shared_dc = 0; } @@ -293,7 +327,7 @@ QStringList::ConstIterator it = family_list.begin(), end = family_list.end(); for ( ; ! engine && it != end; ++it ) { req.family = *it; - //qDebug("calling findFont with %s for %d",req.family.latin1(),script); + //qDebug("calling findFont with %s for %d",req.family.latin1(),script); engine = QFontDatabase::findFont( script, this, req ); if ( engine ) { if ( engine->type() != QFontEngine::Box ) @@ -315,7 +349,6 @@ Returns TRUE if the font attributes have been changed and the font has to be (re)loaded; otherwise returns FALSE. */ -//333 bool QFont::dirty() const { return d->engineData == 0; @@ -343,217 +376,47 @@ return 0; } -/*! - Returns the name of the font within the underlying window system. - - On Windows, this is usually just the family name of a TrueType - font. - - On X11, it is an XLFD (X Logical Font Description). When Qt is - build with Xft support on X11, the return value can be an Xft - pattern or an XLFD. - - Using the return value of this function is usually \e not \e - portable. - - \sa setRawName() -*/ QString QFont::rawName() const { - QFontEngine * engine = d->engineForScript( QFontPrivate::defaultScript ); -#ifdef QT_CHECK_STATE - - Q_ASSERT( engine != 0 ); -#endif // QT_CHECK_STATE - - return QString::fromLatin1( engine->name() ); - //return family(); + return family(); } -/*! - Sets a font by its system specific name. The function is - particularly useful under X, where system font settings (for - example X resources) are usually available in XLFD (X Logical Font - Description) form only. You can pass an XLFD as \a name to this - function. - - A font set with setRawName() is still a full-featured QFont. It can - be queried (for example with italic()) or modified (for example with - setItalic()) and is therefore also suitable for rendering rich text. - - If Qt's internal font database cannot resolve the raw name, the - font becomes a raw font with \a name as its family. - - Note that the present implementation does not handle wildcards in - XLFDs well, and that font aliases (file \c fonts.alias in the font - directory on X11) are not supported. - - \sa rawName(), setRawMode(), setFamily() -*/ void QFont::setRawName( const QString &name ) { - detach(); - - // from qfontdatabase_x11.cpp - /* - extern bool qt_fillFontDef( const QCString &xlfd, QFontDef *fd, int screen ); - - if ( ! qt_fillFontDef( qt_fixXLFD( name.latin1() ), &d->request, d->screen ) ) { - #ifdef QT_CHECK_STATE - qWarning("QFont::setRawMode(): Invalid XLFD: \"%s\"", name.latin1()); - #endif // QT_CHECK_STATE - */ setFamily( name ); - setRawMode( TRUE ); - /* - } else { - d->mask = QFontPrivate::Complete; - } - */ } - -/*! - Returns the "last resort" font family name. - - The current implementation tries a wide variety of common fonts, - returning the first one it finds. Is is possible that no family is - found in which case a null string is returned. - - \sa lastResortFont() -*/ -//333 -QString QFont::lastResortFamily() const -{ - return QString::fromLatin1( "Helvetica" ); -} - -/*! - Returns the family name that corresponds to the current style - hint. - - \sa StyleHint styleHint() setStyleHint() -*/ -//333 QString QFont::defaultFamily() const { switch ( d->request.styleHint ) { case QFont::Times: - return QString::fromLatin1( "Times" ); - + return QString::fromLatin1( "Times New Roman" ); case QFont::Courier: - return QString::fromLatin1( "Courier" ); - + return QString::fromLatin1( "Courier New" ); case QFont::Decorative: - return QString::fromLatin1( "Old English" ); - + return QString::fromLatin1( "Bookman Old Style" ); case QFont::Helvetica: + return QString::fromLatin1( "Arial" ); case QFont::System: default: - return QString::fromLatin1( "Helvetica" ); + return QString::fromLatin1( "MS Sans Serif" ); } } -/* - Returns a last resort raw font name for the font matching algorithm. - This is used if even the last resort family is not available. It - returns \e something, almost no matter what. The current - implementation tries a wide variety of common fonts, returning the - first one it finds. The implementation may change at any time. -*/ -//333 -static const char * const tryFonts[] = - { - "-*-helvetica-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-courier-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-times-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-lucida-medium-r-*-*-*-120-*-*-*-*-*-*", - "-*-helvetica-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-courier-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-times-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-lucida-*-*-*-*-*-120-*-*-*-*-*-*", - "-*-helvetica-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-courier-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-times-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-lucida-*-*-*-*-*-*-*-*-*-*-*-*", - "-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*", - "6x13", - "7x13", - "8x13", - "9x15", - "fixed", - 0 - }; - -// Returns TRUE if the font exists, FALSE otherwise -static bool fontExists( const QString &fontName ) -{ - /* - int count; - char **fontNames = XListFonts( QPaintDevice::x11AppDisplay(), - (char*)fontName.latin1(), 32768, &count ); - if ( fontNames ) XFreeFontNames( fontNames ); - - return count != 0; - */ - return true; +QString QFont::lastResortFamily() const +{ + return QString::fromLatin1( "helvetica" ); } - -/*! - Returns a "last resort" font name for the font matching algorithm. - This is used if the last resort family is not available. It will - always return a name, if necessary returning something like - "fixed" or "system". - - The current implementation tries a wide variety of common fonts, - returning the first one it finds. The implementation may change - at any time, but this function will always return a string - containing something. - - It is theoretically possible that there really isn't a - lastResortFont() in which case Qt will abort with an error - message. We have not been able to identify a case where this - happens. Please \link bughowto.html report it as a bug\endlink if - it does, preferably with a list of the fonts you have installed. - - \sa lastResortFamily() rawName() -*/ -//333 QString QFont::lastResortFont() const { - static QString last; - - // already found - if ( ! last.isNull() ) - return last; - - int i = 0; - const char* f; - - while ( ( f = tryFonts[ i ] ) ) { - last = QString::fromLatin1( f ); - - if ( fontExists( last ) ) - return last; - - i++; - } - -#if defined(CHECK_NULL) - qFatal( "QFontPrivate::lastResortFont: Cannot find any reasonable font" ); -#endif - - return last; - // return "Arial"; + return QString::fromLatin1( "arial" ); } - // ********************************************************************** // QFontMetrics member methods // ********************************************************************** -//333 int QFontMetrics::width( QChar ch ) const { unsigned short uc = ch.unicode(); @@ -585,7 +448,6 @@ return advances[ 0 ]; } -//333 int QFontMetrics::charWidth( const QString &str, int pos ) const { if ( pos < 0 || pos > ( int ) str.length() ) @@ -654,8 +516,6 @@ return gi.x; } - - int QFontMetrics::rightBearing( QChar ch ) const { QFont::Script script; |