summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqfontdatabase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqfontdatabase.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqfontdatabase.cpp2511
1 files changed, 0 insertions, 2511 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqfontdatabase.cpp b/tqtinterface/qt4/src/kernel/tqfontdatabase.cpp
deleted file mode 100644
index 219aa98..0000000
--- a/tqtinterface/qt4/src/kernel/tqfontdatabase.cpp
+++ /dev/null
@@ -1,2511 +0,0 @@
-/****************************************************************************
-**
-** Implementation of font database class.
-**
-** Created : 990603
-**
-** Copyright (C) 1999-2008 Trolltech ASA. All rights reserved.
-**
-** This file is part of the kernel module of the TQt GUI Toolkit.
-**
-** This file may be used under the terms of the GNU General
-** Public License versions 2.0 or 3.0 as published by the Free
-** Software Foundation and appearing in the files LICENSE.GPL2
-** and LICENSE.GPL3 included in the packaging of this file.
-** Alternatively you may (at your option) use any later version
-** of the GNU General Public License if such license has been
-** publicly approved by Trolltech ASA (or its successors, if any)
-** and the KDE Free TQt Foundation.
-**
-** Please review the following information to ensure GNU General
-** Public Licensing requirements will be met:
-** http://trolltech.com/products/qt/licenses/licensing/opensource/.
-** If you are unsure which license is appropriate for your use, please
-** review the following information:
-** http://trolltech.com/products/qt/licenses/licensing/licensingoverview
-** or contact the sales department at sales@trolltech.com.
-**
-** This file may be used under the terms of the Q Public License as
-** defined by Trolltech ASA and appearing in the file LICENSE.TQPL
-** included in the packaging of this file. Licensees holding valid TQt
-** Commercial licenses may use this file in accordance with the TQt
-** Commercial License Agreement provided with the Software.
-**
-** This file is provided "AS IS" with NO WARRANTY OF ANY KIND,
-** INCLUDING THE WARRANTIES OF DESIGN, MERCHANTABILITY AND FITNESS FOR
-** A PARTICULAR PURPOSE. Trolltech reserves all rights not granted
-** herein.
-**
-**********************************************************************/
-
-#include <tqtglobaldefines.h>
-// Nasty, nasty horrid HACK to get access to QFontDatabase's private members
-// This is TERRIBLE and I wish there was a way around it
-// This is a good example of the new, broken & irritating Qt4 API,
-// and the corresponding loss in functionality versus Qt3.
-// See also tqrect.cpp
-#define private protected
-#include <Qt/qfontdatabase.h>
-#undef private
-
-#include "tqfontdatabase.h"
-
-#ifndef TQT_NO_FONTDATABASE
-
-#include <tqtl.h>
-#include <tqapplication.h>
-
-#include <private/tqunicodetables_p.h>
-#include "tqfontengine_p.h"
-
-#include <tqcleanuphandler.h>
-
-#ifdef TQ_WS_X11
-#include <locale.h>
-#endif
-#include <stdlib.h>
-
-//#define TQFONTDATABASE_DEBUG
-#ifdef TQFONTDATABASE_DEBUG
-# define FD_DEBUG qDebug
-#else
-# define FD_DEBUG if (FALSE) qDebug
-#endif
-
-//#define FONT_MATCH_DEBUG
-#ifdef FONT_MATCH_DEBUG
-# define FM_DEBUG qDebug
-#else
-# define FM_DEBUG if (FALSE) qDebug
-#endif
-
-#if defined(TQ_CC_MSVC) && !defined(TQ_CC_MSVC_NET)
-# define for if(0){}else for
-#endif
-
-#ifdef USE_QT4
-
-void TQFontDatabase::tqparseFontName(const QString &name, QString &foundry, QString &family) {
- parseFontName(name, foundry, family);
-}
-
-#else // USE_QT4
-
-static int ucstricmp( const TQString &as, const TQString &bs )
-{
- const TQChar *a = as.tqunicode();
- const TQChar *b = bs.tqunicode();
- if ( a == b )
- return 0;
- if ( a == 0 )
- return 1;
- if ( b == 0 )
- return -1;
- int l=TQMIN(as.length(),bs.length());
- while ( l-- && ::lower( *a ) == ::lower( *b ) )
- a++,b++;
- if ( l==-1 )
- return ( as.length()-bs.length() );
- return ::lower( *a ).tqunicode() - ::lower( *b ).tqunicode();
-}
-
-static int getFontWeight( const TQString &weightString )
-{
- TQString s = weightString.lower();
-
- // Test in decreasing order of commonness
- if (s == "medium" ||
- s == "normal")
- return TQFont::Normal;
- if (s == "bold")
- return TQFont::Bold;
- if (s == "demibold" || s == "demi bold")
- return TQFont::DemiBold;
- if (s == "black")
- return TQFont::Black;
- if (s == "light")
- return TQFont::Light;
-
- if (s.contains("bold")) {
- if (s.contains("demi"))
- return (int) TQFont::DemiBold;
- return (int) TQFont::Bold;
- }
-
- if (s.contains("light"))
- return (int) TQFont::Light;
-
- if (s.contains("black"))
- return (int) TQFont::Black;
-
- return (int) TQFont::Normal;
-}
-
-#ifdef TQ_WS_X11
-struct TQtFontEncoding
-{
- signed int encoding : 16;
-
- uint xpoint : 16;
- uint xres : 8;
- uint yres : 8;
- uint avgwidth : 16;
- uchar pitch : 8;
-};
-#endif // TQ_WS_X11
-
-struct TQtFontSize
-{
- unsigned short pixelSize;
-
-#ifdef TQ_WS_X11
- int count;
- TQtFontEncoding *encodings;
- TQtFontEncoding *encodingID( int id, uint xpoint = 0, uint xres = 0,
- uint yres = 0, uint avgwidth = 0, bool add = FALSE);
-#endif // TQ_WS_X11
-};
-
-
-#ifdef TQ_WS_X11
-TQtFontEncoding *TQtFontSize::encodingID( int id, uint xpoint, uint xres,
- uint yres, uint avgwidth, bool add )
-{
- // we don't match using the xpoint, xres and yres parameters, only the id
- for ( int i = 0; i < count; ++i ) {
- if ( encodings[i].encoding == id )
- return encodings + i;
- }
-
- if ( !add ) return 0;
-
- if ( !(count % 4) )
- encodings = ( TQtFontEncoding * )
- realloc( encodings,
- (((count+4) >> 2 ) << 2 ) * sizeof( TQtFontEncoding ) );
- encodings[count].encoding = id;
- encodings[count].xpoint = xpoint;
- encodings[count].xres = xres;
- encodings[count].yres = yres;
- encodings[count].avgwidth = avgwidth;
- encodings[count].pitch = '*';
- return encodings + count++;
-}
-#endif // TQ_WS_X11
-
-struct TQtFontStyle
-{
- struct Key {
- Key( const TQString &styleString );
- Key() : italic( FALSE ), oblique( FALSE ),
- weight( TQFont::Normal ), stretch( 0 ) { }
- Key( const Key &o ) : italic( o.italic ), oblique( o.oblique ),
- weight( o.weight ), stretch( o.stretch ) { }
- uint italic : 1;
- uint oblique : 1;
- signed int weight : 8;
- signed int stretch : 12;
-
- bool operator==( const Key & other ) {
- return ( italic == other.italic &&
- oblique == other.oblique &&
- weight == other.weight &&
- (stretch == 0 || other.stretch == 0 || stretch == other.stretch) );
- }
- bool operator!=( const Key &other ) {
- return !operator==(other);
- }
- bool operator <( const Key &o ) {
- int x = (italic << 13) + (oblique << 12) + (weight << 14) + stretch;
- int y = (o.italic << 13) + (o.oblique << 12) + (o.weight << 14) + o.stretch;
- return ( x < y );
- }
- };
-
- TQtFontStyle( const Key &k )
- : key( k ), bitmapScalable( FALSE ), smoothScalable( FALSE ),
- fakeOblique( FALSE ), count( 0 ), pixelSizes( 0 )
- {
-#if defined(TQ_WS_X11)
- weightName = setwidthName = 0;
-#endif // TQ_WS_X11
- }
-
- ~TQtFontStyle() {
-#ifdef TQ_WS_X11
- delete [] weightName;
- delete [] setwidthName;
- while ( count-- )
- free(pixelSizes[count].encodings);
-#endif
- free( pixelSizes );
- }
-
- Key key;
- bool bitmapScalable : 1;
- bool smoothScalable : 1;
- bool fakeOblique : 1;
- int count : 29;
- TQtFontSize *pixelSizes;
-
-#ifdef TQ_WS_X11
- const char *weightName;
- const char *setwidthName;
-#endif // TQ_WS_X11
-
- TQtFontSize *pixelSize( unsigned short size, bool = FALSE );
-};
-
-TQtFontStyle::Key::Key( const TQString &styleString )
- : italic( FALSE ), oblique( FALSE ), weight( TQFont::Normal ), stretch( 0 )
-{
- weight = getFontWeight( styleString );
-
- if ( styleString.contains( "Italic" ) )
- italic = TRUE;
- else if ( styleString.contains( "Oblique" ) )
- oblique = TRUE;
-}
-
-TQtFontSize *TQtFontStyle::pixelSize( unsigned short size, bool add )
-{
- for ( int i = 0; i < count; i++ ) {
- if ( pixelSizes[i].pixelSize == size )
- return pixelSizes + i;
- }
- if ( !add )
- return 0;
-
- if ( !(count % 8) )
- pixelSizes = (TQtFontSize *)
- realloc( pixelSizes,
- (((count+8) >> 3 ) << 3) * sizeof(TQtFontSize) );
- pixelSizes[count].pixelSize = size;
-#ifdef TQ_WS_X11
- pixelSizes[count].count = 0;
- pixelSizes[count].encodings = 0;
-#endif
- return pixelSizes + (count++);
-}
-
-struct TQtFontFoundry
-{
- TQtFontFoundry( const TQString &n ) : name( n ), count( 0 ), styles( 0 ) {}
- ~TQtFontFoundry() {
- while ( count-- )
- delete styles[count];
- free( styles );
- }
-
- TQString name;
-
- int count;
- TQtFontStyle **styles;
- TQtFontStyle *style( const TQtFontStyle::Key &, bool = FALSE );
-};
-
-TQtFontStyle *TQtFontFoundry::style( const TQtFontStyle::Key &key, bool create )
-{
- int pos = 0;
- if ( count ) {
- int low = 0;
- int high = count;
- pos = count / 2;
- while ( high > low ) {
- if ( styles[pos]->key == key )
- return styles[pos];
- if ( styles[pos]->key < key )
- low = pos + 1;
- else
- high = pos;
- pos = (high + low) / 2;
- };
- pos = low;
- }
- if ( !create )
- return 0;
-
-// qDebug("adding key (weight=%d, italic=%d, oblique=%d stretch=%d) at %d", key.weight, key.italic, key.oblique, key.stretch, pos );
- if ( !(count % 8) )
- styles = (TQtFontStyle **)
- realloc( styles, (((count+8) >> 3 ) << 3) * sizeof( TQtFontStyle * ) );
-
- memmove( styles + pos + 1, styles + pos, (count-pos)*sizeof(TQtFontStyle *) );
- styles[pos] = new TQtFontStyle( key );
- count++;
- return styles[pos];
-}
-
-
-struct TQtFontFamily
-{
- enum ScriptqStatus { Unknown = 0, Supported = 1,
- UnSupported_Xft= 2, UnSupported_Xlfd = 4, UnSupported = 6 };
-
- TQtFontFamily(const TQString &n )
- :
-#ifdef TQ_WS_X11
- fixedPitch( TRUE ), hasXft( FALSE ), xftScriptCheck( FALSE ), xlfdLoaded( FALSE ), synthetic(FALSE),
-#else
- fixedPitch( FALSE ),
-#endif
-#ifdef TQ_WS_WIN
- scriptCheck( FALSE ),
-#endif
-#if defined(TQ_OS_MAC) && !defined(TQWS)
- fixedPitchComputed(FALSE),
-#endif
- fullyLoaded( FALSE ),
- name( n ), count( 0 ), foundries( 0 ) {
- memset( scripts, 0, sizeof( scripts ) );
- }
- ~TQtFontFamily() {
- while ( count-- )
- delete foundries[count];
- free( foundries );
- }
-
- bool fixedPitch : 1;
-#ifdef TQ_WS_X11
- bool hasXft : 1;
- bool xftScriptCheck : 1;
- bool xlfdLoaded : 1;
- bool synthetic : 1;
-#endif
-#ifdef TQ_WS_WIN
- bool scriptCheck : 1;
-#endif
-#if defined(TQ_OS_MAC) && !defined(TQWS)
- bool fixedPitchComputed : 1;
-#endif
- bool fullyLoaded : 1;
- TQString name;
- TQString rawName;
-#ifdef TQ_WS_X11
- TQCString fontFilename;
- int fontFileIndex;
-#endif
-#ifdef TQ_WS_MAC
- FMFontFamily macFamily;
-#endif
-#ifdef TQ_WS_WIN
- TQString english_name;
-#endif
- int count;
- TQtFontFoundry **foundries;
-
- unsigned char scripts[TQFont::LastPrivateScript];
-
- TQtFontFoundry *foundry( const TQString &f, bool = FALSE );
-};
-
-TQtFontFoundry *TQtFontFamily::foundry( const TQString &f, bool create )
-{
- if ( f.isNull() && count == 1 )
- return foundries[0];
-
- for ( int i = 0; i < count; i++ ) {
- if ( ucstricmp( foundries[i]->name, f ) == 0 )
- return foundries[i];
- }
- if ( !create )
- return 0;
-
- if ( !(count % 8) )
- foundries = (TQtFontFoundry **)
- realloc( foundries,
- (((count+8) >> 3 ) << 3) * sizeof( TQtFontFoundry * ) );
-
- foundries[count] = new TQtFontFoundry( f );
- return foundries[count++];
-}
-
-class TQFontDatabasePrivate {
-public:
- TQFontDatabasePrivate() : count( 0 ), families( 0 ) { }
- ~TQFontDatabasePrivate() {
- while ( count-- )
- delete families[count];
- free( families );
- }
- TQtFontFamily *family( const TQString &f, bool = FALSE );
-
- int count;
- TQtFontFamily **families;
-};
-
-TQtFontFamily *TQFontDatabasePrivate::family( const TQString &f, bool create )
-{
- int low = 0;
- int high = count;
- int pos = count / 2;
- int res = 1;
- if ( count ) {
- while ( (res = ucstricmp( families[pos]->name, f )) && pos != low ) {
- if ( res > 0 )
- high = pos;
- else
- low = pos;
- pos = (high + low) / 2;
- };
- if ( !res )
- return families[pos];
- }
- if ( !create )
- return 0;
-
- if ( res < 0 )
- pos++;
-
- // qDebug("adding family %s at %d total=%d", f.latin1(), pos, count);
- if ( !(count % 8) )
- families = (TQtFontFamily **)
- realloc( families,
- (((count+8) >> 3 ) << 3) * sizeof( TQtFontFamily * ) );
-
- memmove( families + pos + 1, families + pos, (count-pos)*sizeof(TQtFontFamily *) );
- families[pos] = new TQtFontFamily( f );
- count++;
- return families[pos];
-}
-
-
-
-
-#if defined(TQ_WS_X11) || defined(TQ_WS_WIN)
-static const unsigned short sample_chars[TQFont::LastPrivateScript][14] =
-{
- // European Alphabetic Scripts
- // Latin,
- { 0x0041, 0x0 },
- // Greek,
- { 0x0391, 0x0 },
- // Cyrillic,
- { 0x0410, 0x0 },
- // Armenian,
- { 0x0540, 0x0 },
- // Georgian,
- { 0x10d0, 0x0 },
- // Runic,
- { 0x16a0, 0x0 },
- // Ogham,
- { 0x1680, 0x0 },
- // SpacingModifiers,
- { 0x02c6, 0x0 },
- // CombiningMarks,
- { 0x0300, 0x0 },
-
- // Middle Eastern Scripts
- // Hebrew,
- { 0x05d0, 0x0 },
- // Arabic,
- { 0x0630, 0x0 },
- // Syriac,
- { 0x0710, 0x0 },
- // Thaana,
- { 0x0780, 0x0 },
-
- // South and Southeast Asian Scripts
- // Devanagari,
- { 0x0910, 0x0 },
- // Bengali,
- { 0x0990, 0x0 },
- // Gurmukhi,
- { 0x0a10, 0x0 },
- // Gujarati,
- { 0x0a90, 0x0 },
- // Oriya,
- { 0x0b10, 0x0 },
- // Tamil,
- { 0x0b90, 0x0 },
- // Telugu,
- { 0x0c10, 0x0 },
- // Kannada,
- { 0x0c90, 0x0 },
- // Malayalam,
- { 0x0d10, 0x0 },
- // Sinhala,
- { 0x0d90, 0x0 },
- // Thai,
- { 0x0e10, 0x0 },
- // Lao,
- { 0x0e81, 0x0 },
- // Tibetan,
- { 0x0f00, 0x0 },
- // Myanmar,
- { 0x1000, 0x0 },
- // Khmer,
- { 0x1780, 0x0 },
-
- // East Asian Scripts
- // Han,
- { 0x4e00, 0x0 },
- // Hiragana,
- { 0x3050, 0x4e00, 0x25EF, 0x3012, 0x3013, 0x30FB, 0x30FC, 0x5CE0, 0 },
- // Katakana,
- { 0x30b0, 0x4e00, 0x25EF, 0x3012, 0x3013, 0x30FB, 0x30FC, 0x5CE0, 0 },
- // Hangul,
- { 0xac00, 0x0 },
- // Bopomofo,
- { 0x3110, 0x0 },
- // Yi,
- { 0xa000, 0x0 },
-
- // Additional Scripts
- // Ethiopic,
- { 0x1200, 0x0 },
- // Cherokee,
- { 0x13a0, 0x0 },
- // CanadianAboriginal,
- { 0x1410, 0x0 },
- // Mongolian,
- { 0x1800, 0x0 },
-
- // Symbols
- // CurrencySymbols,
- { 0x20aa, 0x0 },
- // LetterlikeSymbols,
- { 0x2103, 0x0 },
- // NumberForms,
- { 0x2160, 0x0 },
- // MathematicalOperators,
- { 0x222b, 0x0 },
- // TechnicalSymbols,
- { 0x2312, 0x0 },
- // GeometricSymbols,
- { 0x2500, 0x0 },
- // MiscellaneousSymbols,
- { 0x2640, 0x2714, 0x0 },
- // EnclosedAndSquare,
- { 0x2460, 0x0 },
- // Braille,
- { 0x2800, 0x0 },
-
- // Unicode,
- { 0xfffd, 0x0 },
-
- // some scripts added in Unicode 3.2
- // Tagalog,
- { 0x1700, 0x0 },
- // Hanunoo,
- { 0x1720, 0x0 },
- // Buhid,
- { 0x1740, 0x0 },
- // Tagbanwa,
- { 0x1770, 0x0 },
-
- // KatakanaHalfWidth
- { 0xff65, 0x0 },
-
- // Limbu
- { 0x1901, 0x0 },
- // TaiLe
- { 0x1950, 0x0 },
-
- // NScripts
- { 0x0000, 0x0 },
- // NoScript
- { 0x0000, 0x0 },
-
- // Han_Japanese
- { 0x4e00, 0x25EF, 0x3012, 0x3013, 0x30FB, 0x5CE0, 0 },
- // Han_SimplifiedChinese, 0x3400 is optional
- { 0x4e00, 0x201C, 0x3002, 0x6237, 0x9555, 0xFFE5, 0 },
- // Han_TraditionalChinese, 0xF6B1 is optional
- // OR Han_HongkongChinese, 0x3435, 0xE000, 0xF6B1 are optional
- { 0x4e00, 0x201C, 0x3002, 0x6236, 0x9F98, 0xFFE5, 0 },
- // Han_Korean
- { 0x4e00, 0 }
- // Taiwan would be 0x201C, 0x3002, 0x4E00, 0x9F98, 0xFFE5
-};
-
-#if defined(TQ_WS_X11) && !defined(TQT_NO_XFTFREETYPE)
-static inline bool requiresOpenType(TQFont::Script s)
-{
- return (s >= TQFont::Syriac && s <= TQFont::Sinhala)
- || (s >= TQFont::Myanmar && s <= TQFont::Khmer);
-}
-#endif
-
-static inline bool canRender( TQFontEngine *fe, TQFont::Script script )
-{
- if ( !fe ) return FALSE;
-
- bool hasChar = true;
-
- if (!sample_chars[script][0])
- hasChar = false;
-
- int i = 0;
- while (hasChar && sample_chars[script][i]){
- TQChar sample(sample_chars[script][i]);
- if ( !fe->canRender( &sample, 1 ) ) {
- hasChar = false;
-#ifdef FONT_MATCH_DEBUG
- FM_DEBUG(" font has NOT char 0x%04x", sample.tqunicode() );
- } else {
- FM_DEBUG(" font has char 0x%04x", sample.tqunicode() );
-#endif
- }
- ++i;
- }
-#if defined(TQ_WS_X11) && !defined(TQT_NO_XFTFREETYPE)
- if (hasChar && requiresOpenType(script)) {
- TQOpenType *ot = fe->openType();
- if (!ot || !ot->supportsScript(script))
- return FALSE;
- }
-#endif
-
- return hasChar;
-}
-#endif // TQ_WS_X11 || TQ_WS_WIN
-
-
-static TQSingleCleanupHandler<TQFontDatabasePrivate> qfontdatabase_cleanup;
-static TQFontDatabasePrivate *db=0;
-#define SMOOTH_SCALABLE 0xffff
-
-#if defined( TQ_WS_X11 )
-# include "tqfontdatabase_x11.cpp"
-#elif defined( TQ_WS_MAC )
-# include "tqfontdatabase_mac.cpp"
-#elif defined( TQ_WS_WIN )
-# include "tqfontdatabase_win.cpp"
-#elif defined( TQ_WS_TQWS )
-# include "tqfontdatabase_qws.cpp"
-#endif
-
-static TQtFontStyle *bestStyle(TQtFontFoundry *foundry, const TQtFontStyle::Key &styleKey)
-{
- int best = 0;
- int dist = 0xffff;
-
- for ( int i = 0; i < foundry->count; i++ ) {
- TQtFontStyle *style = foundry->styles[i];
-
- int d = TQABS( styleKey.weight - style->key.weight );
-
- if ( styleKey.stretch != 0 && style->key.stretch != 0 ) {
- d += TQABS( styleKey.stretch - style->key.stretch );
- }
-
- if ( styleKey.italic ) {
- if ( !style->key.italic )
- d += style->key.oblique ? 0x0001 : 0x1000;
- } else if ( styleKey.oblique ) {
- if (!style->key.oblique )
- d += style->key.italic ? 0x0001 : 0x1000;
- } else if ( style->key.italic || style->key.oblique ) {
- d += 0x1000;
- }
-
- if ( d < dist ) {
- best = i;
- dist = d;
- }
- }
-
- FM_DEBUG( " best style has distance 0x%x", dist );
- if (!foundry->count) {
- TQtFontStyle *temp = NULL;
- return temp;
- }
- return foundry->styles[best];
-}
-
-#if defined(TQ_WS_X11)
-static TQtFontEncoding *findEncoding(TQFont::Script script, int styleStrategy,
- TQtFontSize *size, int force_encoding_id)
-{
- TQtFontEncoding *encoding = 0;
-
- if (force_encoding_id >= 0) {
- encoding = size->encodingID(force_encoding_id);
- if (!encoding)
- FM_DEBUG(" required encoding_id not available");
- return encoding;
- }
-
- if (styleStrategy & (TQFont::OpenGLCompatible | TQFont::PreferBitmap)) {
- FM_DEBUG(" PreferBitmap and/or OpenGL set, skipping Xft");
- } else {
- encoding = size->encodingID(-1); // -1 == prefer Xft
- if (encoding) return encoding;
- }
-
- // Xft not available, find an XLFD font, trying the default encoding first
- encoding = size->encodingID(TQFontPrivate::defaultEncodingID);
-
- if (!encoding || !scripts_for_xlfd_encoding[encoding->encoding][script]) {
- // find the first encoding that supports the requested script
- encoding = 0;
- for (int x = 0; !encoding && x < size->count; ++x) {
- const int enc = size->encodings[x].encoding;
- if (scripts_for_xlfd_encoding[enc][script]) {
- encoding = size->encodings + x;
- break;
- }
- }
- }
-
- return encoding;
-}
-#endif // TQ_WS_X11
-
-
-#if defined(TQ_WS_X11) || defined(TQ_WS_WIN)
-static
-unsigned int bestFoundry( TQFont::Script script, unsigned int score, int styleStrategy,
- const TQtFontFamily *family, const TQString &foundry_name,
- TQtFontStyle::Key styleKey, int pixelSize, char pitch,
- TQtFontFoundry **best_foundry, TQtFontStyle **best_style,
- TQtFontSize **best_size
-#ifdef TQ_WS_X11
- , TQtFontEncoding **best_encoding, int force_encoding_id
-#endif
- )
-{
- TQ_UNUSED( script );
- TQ_UNUSED( pitch );
-
- FM_DEBUG( " REMARK: looking for best foundry for family '%s'", family->name.latin1() );
-
- for ( int x = 0; x < family->count; ++x ) {
- TQtFontFoundry *foundry = family->foundries[x];
- if ( ! foundry_name.isEmpty() &&
- ucstricmp( foundry->name, foundry_name ) != 0 )
- continue;
-
- FM_DEBUG( " looking for matching style in foundry '%s'",
- foundry->name.isEmpty() ? "-- none --" : foundry->name.latin1() );
-
- TQtFontStyle *style = bestStyle(foundry, styleKey);
-
- if ( ! style->smoothScalable && ( styleStrategy & TQFont::ForceOutline ) ) {
- FM_DEBUG( " ForceOutline set, but not smoothly scalable" );
- continue;
- }
-
- int px = -1;
- TQtFontSize *size = 0;
-
- // 1. see if we have an exact matching size
- if (! (styleStrategy & TQFont::ForceOutline)) {
- size = style->pixelSize(pixelSize);
- if (size) {
- FM_DEBUG(" found exact size match (%d pixels)", size->pixelSize);
- px = size->pixelSize;
- }
- }
-
- // 2. see if we have a smoothly scalable font
- if (! size && style->smoothScalable && ! (styleStrategy & TQFont::PreferBitmap)) {
- size = style->pixelSize(SMOOTH_SCALABLE);
- if (size) {
- FM_DEBUG(" found smoothly scalable font (%d pixels)", pixelSize);
- px = pixelSize;
- }
- }
-
- // 3. see if we have a bitmap scalable font
- if (! size && style->bitmapScalable && (styleStrategy & TQFont::PreferMatch)) {
- size = style->pixelSize(0);
- if (size) {
- FM_DEBUG(" found bitmap scalable font (%d pixels)", pixelSize);
- px = pixelSize;
- }
- }
-
-#ifdef TQ_WS_X11
- TQtFontEncoding *encoding = 0;
-#endif
-
- // 4. find closest size match
- if (! size) {
- unsigned int distance = ~0u;
- for (int x = 0; x < style->count; ++x) {
-#ifdef TQ_WS_X11
- encoding =
- findEncoding(script, styleStrategy, style->pixelSizes + x, force_encoding_id);
- if (!encoding) {
- FM_DEBUG(" size %3d does not support the script we want",
- style->pixelSizes[x].pixelSize);
- continue;
- }
-#endif
-
- unsigned int d = TQABS(style->pixelSizes[x].pixelSize - pixelSize);
- if (d < distance) {
- distance = d;
- size = style->pixelSizes + x;
- FM_DEBUG(" best size so far: %3d (%d)", size->pixelSize, pixelSize);
- }
- }
-
- if (!size) {
- FM_DEBUG(" no size supports the script we want");
- continue;
- }
-
- if (style->bitmapScalable && ! (styleStrategy & TQFont::PreferQuality) &&
- (distance * 10 / pixelSize) >= 2) {
- // the closest size is not close enough, go ahead and
- // use a bitmap scaled font
- size = style->pixelSize(0);
- px = pixelSize;
- } else {
- px = size->pixelSize;
- }
- }
-
-#ifdef TQ_WS_X11
- if (size) {
- encoding = findEncoding(script, styleStrategy, size, force_encoding_id);
- if (!encoding) size = 0;
- }
- if ( ! encoding ) {
- FM_DEBUG( " foundry doesn't support the script we want" );
- continue;
- }
-#endif // TQ_WS_X11
-
- unsigned int this_score = 0x0000;
- enum {
- PitchMismatch = 0x4000,
- StyleMismatch = 0x2000,
- BitmapScaledPenalty = 0x1000,
- EncodingMismatch = 0x0002,
- XLFDPenalty = 0x0001
- };
-
-#ifdef TQ_WS_X11
- if ( encoding->encoding != -1 ) {
- this_score += XLFDPenalty;
- if ( encoding->encoding != TQFontPrivate::defaultEncodingID )
- this_score += EncodingMismatch;
- }
- if (pitch != '*') {
- if ( !( pitch == 'm' && encoding->pitch == 'c' ) && pitch != encoding->pitch )
- this_score += PitchMismatch;
- }
-#else
- // ignore pitch for asian fonts, some of them misreport it, and they are all
- // fixed pitch anyway.
- if (pitch != '*' && (script <= TQFont::NScripts && script != TQFont::KatakanaHalfWidth
- && (script < TQFont::Han || script > TQFont::Yi))) {
- if ((pitch == 'm' && !family->fixedPitch)
- || (pitch == 'p' && family->fixedPitch))
- this_score += PitchMismatch;
- }
-#endif
- if ( styleKey != style->key )
- this_score += StyleMismatch;
- if ( !style->smoothScalable && px != size->pixelSize ) // bitmap scaled
- this_score += BitmapScaledPenalty;
- if (px != pixelSize) // close, but not exact, size match
- this_score += TQABS(px - pixelSize);
-
- if ( this_score < score ) {
- FM_DEBUG( " found a match: score %x best score so far %x",
- this_score, score );
-
- score = this_score;
- *best_foundry = foundry;
- *best_style = style;
- *best_size = size;
-#ifdef TQ_WS_X11
- *best_encoding = encoding;
-#endif // TQ_WS_X11
- } else {
- FM_DEBUG( " score %x no better than best %x", this_score, score);
- }
- }
-
- return score;
-}
-
-/*!
- \internal
-*/
-TQFontEngine *
-TQFontDatabase::findFont( TQFont::Script script, const TQFontPrivate *fp,
- const TQFontDef &request, int force_encoding_id )
-{
-#ifndef TQ_WS_X11
- TQ_UNUSED( force_encoding_id );
-#endif
-
- if ( !db )
- initializeDb();
-
- TQFontEngine *fe = 0;
- if ( fp ) {
- if ( fp->rawMode ) {
- fe = loadEngine( script, fp, request, 0, 0, 0
-#ifdef TQ_WS_X11
- , 0, 0, FALSE
-#endif
- );
-
- // if we fail to load the rawmode font, use a 12pixel box engine instead
- if (! fe) fe = new TQFontEngineBox( 12 );
- return fe;
- }
-
- TQFontCache::Key key( request, script,
-#ifdef TQ_WS_WIN
- (int)fp->painttqdevice,
-#else
- fp->screen,
-#endif
- fp->painttqdevice
- );
- fe = TQFontCache::instance->findEngine( key );
- if ( fe ) return fe;
- }
-
-#ifdef TQ_WS_WIN
- if (request.styleStrategy & TQFont::PreferDevice) {
- TQFontEngine *fe = loadEngine(script, fp, request, 0, 0, 0);
- if(fe)
- return fe;
- }
-#endif
-
- TQString family_name, foundry_name;
- TQtFontStyle::Key styleKey;
- styleKey.italic = request.italic;
- styleKey.weight = request.weight;
- styleKey.stretch = request.stretch;
- char pitch = request.ignorePitch ? '*' : request.fixedPitch ? 'm' : 'p';
-
- parseFontName( request.family, foundry_name, family_name );
-
-#ifdef TQ_WS_X11
- if (script == TQFont::Han) {
- // modify script according to locale
- static TQFont::Script defaultHan;
- TQCString locale = setlocale(LC_ALL, NULL);
-
- if (locale.contains("ko"))
- defaultHan = TQFont::Han_Korean;
- else if (locale.contains("zh_TW") || locale.contains("zh_HK"))
- defaultHan = TQFont::Han_TraditionalChinese;
- else if (locale.contains("zh"))
- defaultHan = TQFont::Han_SimplifiedChinese;
- else if (locale.contains("ja"))
- defaultHan = TQFont::Han_Japanese;
- else
- defaultHan = TQFont::Han; // don't change
-
- script = defaultHan;
- }
-#endif
-
- FM_DEBUG( "TQFontDatabase::findFont\n"
- " request:\n"
- " family: %s [%s], script: %d (%s)\n"
- " weight: %d, italic: %d\n"
- " stretch: %d\n"
- " pixelSize: %d\n"
- " pitch: %c",
- family_name.isEmpty() ? "-- first in script --" : family_name.latin1(),
- foundry_name.isEmpty() ? "-- any --" : foundry_name.latin1(),
- script, scriptName( script ).latin1(),
- request.weight, request.italic, request.stretch, request.pixelSize, pitch );
-
- bool usesFontConfig = FALSE;
-#ifdef TQT_XFT2
- if (family_name.isEmpty()
- || family_name == "Sans Serif"
- || family_name == "Serif"
- || family_name == "Monospace") {
- fe = loadFontConfigFont(fp, request, script);
- usesFontConfig = (fe != 0);
- }
- if (!fe)
-#endif
- {
- TQtFontFamily *best_family = 0;
- TQtFontFoundry *best_foundry = 0;
- TQtFontStyle *best_style = 0;
- TQtFontSize *best_size = 0;
-#ifdef TQ_WS_X11
- TQtFontEncoding *best_encoding = 0;
-#endif // TQ_WS_X11
-
- unsigned int score = ~0;
-
- load( family_name, script );
-
- for ( int x = 0; x < db->count; ++x ) {
- TQtFontFamily *try_family = db->families[x];
-#ifdef TQ_WS_X11
- if (try_family->synthetic) // skip generated fontconfig fonts
- continue;
-#endif
-
- if ( !family_name.isEmpty() &&
- ucstricmp( try_family->name, family_name ) != 0
-#ifdef TQ_WS_WIN
- && ucstricmp( try_family->english_name, family_name ) != 0
-#endif
- )
- continue;
-
- if ( family_name.isEmpty() )
- load( try_family->name, script );
-
- uint score_adjust = 0;
- TQFont::Script override_script = script;
- if ( ! ( try_family->scripts[script] & TQtFontFamily::Supported )
- && script != TQFont::Unicode) {
- // family not supported in the script we want
-#ifdef TQ_WS_X11
- if (script >= TQFont::Han_Japanese && script <= TQFont::Han_Korean
- && try_family->scripts[TQFont::Han] == TQtFontFamily::Supported) {
- // try with the han script instead, give it a penalty
- if (override_script == TQFont::Han_TraditionalChinese
- && (try_family->scripts[TQFont::Han_SimplifiedChinese] & TQtFontFamily::Supported)) {
- override_script = TQFont::Han_SimplifiedChinese;
- score_adjust = 200;
- } else if (override_script == TQFont::Han_SimplifiedChinese
- && (try_family->scripts[TQFont::Han_TraditionalChinese] & TQtFontFamily::Supported)) {
- override_script = TQFont::Han_TraditionalChinese;
- score_adjust = 200;
- } else {
- override_script = TQFont::Han;
- score_adjust = 400;
- }
- } else
-#endif
- if (family_name.isEmpty()) {
- continue;
- } else if (try_family->scripts[TQFont::UnknownScript] & TQtFontFamily::Supported) {
- // try with the unknown script (for a symbol font)
- override_script = TQFont::UnknownScript;
-#ifndef TQT_XFT2
- } else if (try_family->scripts[TQFont::Unicode] & TQtFontFamily::Supported) {
- // try with the tqunicode script instead
- override_script = TQFont::Unicode;
-#endif
- } else {
- // family not supported by tqunicode/unknown scripts
- continue;
- }
- }
-
- TQtFontFoundry *try_foundry = 0;
- TQtFontStyle *try_style = 0;
- TQtFontSize *try_size = 0;
-#ifdef TQ_WS_X11
- TQtFontEncoding *try_encoding = 0;
-#endif // TQ_WS_X11
-
- // as we know the script is supported, we can be sure
- // to find a matching font here.
- unsigned int newscore =
- bestFoundry( override_script, score, request.styleStrategy,
- try_family, foundry_name, styleKey, request.pixelSize, pitch,
- &try_foundry, &try_style, &try_size
-#ifdef TQ_WS_X11
- , &try_encoding, force_encoding_id
-#endif
- );
- if ( try_foundry == 0 ) {
- // the specific foundry was not found, so look for
- // any foundry matching our requirements
- newscore = bestFoundry( override_script, score, request.styleStrategy, try_family,
- TQString::null, styleKey, request.pixelSize,
- pitch, &try_foundry, &try_style, &try_size
-#ifdef TQ_WS_X11
- , &try_encoding, force_encoding_id
-#endif
- );
- }
- newscore += score_adjust;
-
- if ( newscore < score ) {
- score = newscore;
- best_family = try_family;
- best_foundry = try_foundry;
- best_style = try_style;
- best_size = try_size;
-#ifdef TQ_WS_X11
- best_encoding = try_encoding;
-#endif // TQ_WS_X11
- }
- if ( newscore < 10 ) // xlfd instead of xft... just accept it
- break;
- }
-
- if ( best_family != 0 && best_foundry != 0 && best_style != 0
-#ifdef TQ_WS_X11
- && best_size != 0 && best_encoding != 0
-#endif
- ) {
- FM_DEBUG( " BEST:\n"
- " family: %s [%s]\n"
- " weight: %d, italic: %d, oblique: %d\n"
- " stretch: %d\n"
- " pixelSize: %d\n"
- " pitch: %c\n"
- " encoding: %d\n",
- best_family->name.latin1(),
- best_foundry->name.isEmpty() ? "-- none --" : best_foundry->name.latin1(),
- best_style->key.weight, best_style->key.italic, best_style->key.oblique,
- best_style->key.stretch, best_size ? best_size->pixelSize : 0xffff,
-#ifdef TQ_WS_X11
- best_encoding->pitch, best_encoding->encoding
-#else
- 'p', 0
-#endif
- );
-
- fe = loadEngine( script, fp, request, best_family, best_foundry, best_style
-#ifdef TQ_WS_X11
- , best_size, best_encoding, ( force_encoding_id >= 0 )
-#endif
- );
- }
- if (fe) {
- fe->fontDef.family = best_family->name;
- if ( ! best_foundry->name.isEmpty() ) {
- fe->fontDef.family += TQString::tqfromLatin1( " [" );
- fe->fontDef.family += best_foundry->name;
- fe->fontDef.family += TQString::tqfromLatin1( "]" );
- }
-
- if ( best_style->smoothScalable )
- fe->fontDef.pixelSize = request.pixelSize;
- else if ( best_style->bitmapScalable &&
- ( request.styleStrategy & TQFont::PreferMatch ) )
- fe->fontDef.pixelSize = request.pixelSize;
- else
- fe->fontDef.pixelSize = best_size->pixelSize;
-
- fe->fontDef.tqstyleHint = request.tqstyleHint;
- fe->fontDef.styleStrategy = request.styleStrategy;
-
- fe->fontDef.weight = best_style->key.weight;
- fe->fontDef.italic = best_style->key.italic || best_style->key.oblique;
- fe->fontDef.fixedPitch = best_family->fixedPitch;
- fe->fontDef.stretch = best_style->key.stretch;
- fe->fontDef.ignorePitch = FALSE;
- }
- }
-
- if ( fe ) {
- if ( script != TQFont::Unicode && !canRender( fe, script ) ) {
- FM_DEBUG( " WARN: font loaded cannot render a sample char" );
-
- delete fe;
- fe = 0;
- } else if ( fp ) {
- TQFontDef def = request;
- if (def.family.isEmpty()) {
- def.family = fp->request.family;
- def.family = def.family.left(def.family.find(','));
- }
- TQFontCache::Key key( def, script,
-#ifdef TQ_WS_WIN
- (int)fp->painttqdevice,
-#else
- fp->screen,
-#endif
- fp->painttqdevice
- );
- TQFontCache::instance->insertEngine( key, fe );
- if (!usesFontConfig) {
- for ( int i = 0; i < TQFont::NScripts; ++i ) {
- if ( i == script ) continue;
-
- if (!canRender(fe, (TQFont::Script) i))
- continue;
-
- key.script = i;
- TQFontCache::instance->insertEngine( key, fe );
- }
- }
- }
- }
-
- if (!fe) {
- if ( !request.family.isEmpty() )
- return 0;
-
- FM_DEBUG( "returning box engine" );
-
- fe = new TQFontEngineBox( request.pixelSize );
- fe->fontDef = request;
-
- if ( fp ) {
- TQFontCache::Key key( request, script,
-#ifdef TQ_WS_WIN
- (int)fp->painttqdevice,
-#else
- fp->screen,
-#endif
- fp->painttqdevice
- );
- TQFontCache::instance->insertEngine( key, fe );
- }
- }
-
- if ( fp ) {
-#if defined(TQ_WS_X11)
- fe->fontDef.pointSize =
- tqRound(10. * qt_pointSize(fe->fontDef.pixelSize, fp->painttqdevice, fp->screen));
-#elif defined(TQ_WS_WIN)
- fe->fontDef.pointSize = int( double( fe->fontDef.pixelSize ) * 720.0 /
- GetDeviceCaps(shared_dc,LOGPIXELSY) );
-#else
- fe->fontDef.pointSize = int( double( fe->fontDef.pixelSize ) * 720.0 /
- 96.0 );
-#endif
- } else {
- fe->fontDef.pointSize = request.pointSize;
- }
-
- return fe;
-}
-#endif // TQ_WS_X11 || TQ_WS_WIN
-
-
-
-
-static TQString styleString( int weight, bool italic, bool oblique )
-{
- TQString result;
- if ( weight >= TQFont::Black )
- result = "Black";
- else if ( weight >= TQFont::Bold )
- result = "Bold";
- else if ( weight >= TQFont::DemiBold )
- result = "Demi Bold";
- else if ( weight < TQFont::Normal )
- result = "Light";
-
- if ( italic )
- result += " Italic";
- else if ( oblique )
- result += " Oblique";
-
- if ( result.isEmpty() )
- result = "Normal";
-
- return result.simplifyWhiteSpace();
-}
-
-/*!
- Returns a string that describes the style of the font \a f. For
- example, "Bold Italic", "Bold", "Italic" or "Normal". An empty
- string may be returned.
-*/
-TQString TQFontDatabase::styleString( const TQFont &f )
-{
- // ### fix oblique here
- return ::styleString( f.weight(), f.italic(), FALSE );
-}
-
-
-/*!
- \class TQFontDatabase tqfontdatabase.h
- \brief The TQFontDatabase class provides information about the fonts available in the underlying window system.
-
- \ingroup environment
- \ingroup graphics
-
- The most common uses of this class are to query the database for
- the list of font families() and for the pointSizes() and styles()
- that are available for each family. An alternative to pointSizes()
- is smoothSizes() which returns the sizes at which a given family
- and style will look attractive.
-
- If the font family is available from two or more foundries the
- foundry name is included in the family name, e.g. "Helvetica
- [Adobe]" and "Helvetica [Cronyx]". When you specify a family you
- can either use the old hyphenated TQt 2.x "foundry-family" format,
- e.g. "Cronyx-Helvetica", or the new bracketed TQt 3.x "family
- [foundry]" format e.g. "Helvetica [Cronyx]". If the family has a
- foundry it is always returned, e.g. by families(), using the
- bracketed format.
-
- The font() function returns a TQFont given a family, style and
- point size.
-
- A family and style combination can be checked to see if it is
- italic() or bold(), and to retrieve its weight(). Similarly we can
- call isBitmapScalable(), isSmoothlyScalable(), isScalable() and
- isFixedPitch().
-
- A text version of a style is given by styleString().
-
- The TQFontDatabase class also supports some static functions, for
- example, standardSizes(). You can retrieve the Unicode 3.0
- description of a \link TQFont::Script script\endlink using
- scriptName(), and a sample of characters in a script with
- scriptSample().
-
- Example:
-\code
-#include <tqapplication.h>
-#include <tqfontdatabase.h>
-#include <else.h>
-
-int main( int argc, char **argv )
-{
- TQApplication app( argc, argv );
- TQFontDatabase fdb;
- TQStringList families = fdb.families();
- for ( TQStringList::Iterator f = families.begin(); f != families.end(); ++f ) {
- TQString family = *f;
- qDebug( family );
- TQStringList styles = fdb.styles( family );
- for ( TQStringList::Iterator s = styles.begin(); s != styles.end(); ++s ) {
- TQString style = *s;
- TQString dstyle = "\t" + style + " (";
- TQValueList<int> smoothies = fdb.smoothSizes( family, style );
- for ( TQValueList<int>::Iterator points = smoothies.begin();
- points != smoothies.end(); ++points ) {
- dstyle += TQString::number( *points ) + " ";
- }
- dstyle = dstyle.left( dstyle.length() - 1 ) + ")";
- qDebug( dstyle );
- }
- }
- return 0;
-}
-\endcode
- This example gets the list of font families, then the list of
- styles for each family and the point sizes that are available for
- each family/style combination.
-*/
-/*!
- \obsolete
- \fn inline TQStringList TQFontDatabase::families( bool ) const
-*/
-/*!
- \obsolete
- \fn inline TQStringList TQFontDatabase::styles( const TQString &family,
- const TQString & ) const
-*/
-/*!
- \obsolete
- \fn inline TQValueList<int> TQFontDatabase::pointSizes( const TQString &family,
- const TQString &style ,
- const TQString & )
-*/
-
-/*!
- \obsolete
- \fn inline TQValueList<int> TQFontDatabase::smoothSizes( const TQString &family,
- const TQString &style,
- const TQString & )
-*/
-/*!
- \obsolete
- \fn inline TQFont TQFontDatabase::font( const TQString &familyName,
- const TQString &style,
- int pointSize,
- const TQString &)
-*/
-/*!
- \obsolete
- \fn inline bool TQFontDatabase::isBitmapScalable( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-/*!
- \obsolete
- \fn inline bool TQFontDatabase::isSmoothlyScalable( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-/*!
- \obsolete
- \fn inline bool TQFontDatabase::isScalable( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-/*!
- \obsolete
- \fn inline bool TQFontDatabase::isFixedPitch( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-/*!
- \obsolete
- \fn inline bool TQFontDatabase::italic( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-/*!
- \obsolete
- \fn inline bool TQFontDatabase::bold( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-/*!
- \obsolete
- \fn inline int TQFontDatabase::weight( const TQString &family,
- const TQString &style,
- const TQString & ) const
-*/
-
-
-/*!
- Creates a font database object.
-*/
-TQFontDatabase::TQFontDatabase()
-{
- createDatabase();
-
- d = db;
-}
-
-
-/*! Returns a sorted list of the names of the available font families.
-
- If a family exists in several foundries, the returned name for
- that font is in the form "family [foundry]". Examples: "Times
- [Adobe]", "Times [Cronyx]", "Palatino".
-*/
-TQStringList TQFontDatabase::families() const
-{
- load();
-
- TQStringList flist;
- for ( int i = 0; i < d->count; i++ ) {
- TQtFontFamily *f = d->families[i];
- if ( f->count == 0 )
- continue;
- if ( f->count == 1 ) {
- flist.append( f->name );
- } else {
- for ( int j = 0; j < f->count; j++ ) {
- TQString str = f->name;
- TQString foundry = f->foundries[j]->name;
- if ( !foundry.isEmpty() ) {
- str += " [";
- str += foundry;
- str += "]";
- }
- flist.append( str );
- }
- }
- }
- return flist;
-}
-
-/*!
- \overload
-
- Returns a sorted list of the available font families which support
- the Unicode script \a script.
-
- If a family exists in several foundries, the returned name for
- that font is in the form "family [foundry]". Examples: "Times
- [Adobe]", "Times [Cronyx]", "Palatino".
-*/
-TQStringList TQFontDatabase::families( TQFont::Script script ) const
-{
- load();
-
- TQStringList flist;
- for ( int i = 0; i < d->count; i++ ) {
- TQtFontFamily *f = d->families[i];
- if ( f->count == 0 )
- continue;
- if (!(f->scripts[script] & TQtFontFamily::Supported))
- continue;
- if ( f->count == 1 ) {
- flist.append( f->name );
- } else {
- for ( int j = 0; j < f->count; j++ ) {
- TQString str = f->name;
- TQString foundry = f->foundries[j]->name;
- if ( !foundry.isEmpty() ) {
- str += " [";
- str += foundry;
- str += "]";
- }
- flist.append( str );
- }
- }
- }
- return flist;
-}
-
-/*!
- Returns a list of the styles available for the font family \a
- family. Some example styles: "Light", "Light Italic", "Bold",
- "Oblique", "Demi". The list may be empty.
-*/
-TQStringList TQFontDatabase::styles( const TQString &family ) const
-{
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQStringList l;
- TQtFontFamily *f = d->family( familyName );
- if ( !f )
- return l;
-
- TQtFontFoundry allStyles( foundryName );
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() || ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ ) {
- TQtFontStyle::Key ke( foundry->styles[k]->key );
- ke.stretch = 0;
- allStyles.style( ke, TRUE );
- }
- }
- }
-
- for ( int i = 0; i < allStyles.count; i++ )
- l.append( ::styleString( allStyles.styles[i]->key.weight,
- allStyles.styles[i]->key.italic,
- allStyles.styles[i]->key.oblique ) );
- return l;
-}
-
-/*!
- Returns TRUE if the font that has family \a family and style \a
- style is fixed pitch; otherwise returns FALSE.
-*/
-
-bool TQFontDatabase::isFixedPitch(const TQString &family,
- const TQString &style) const
-{
- TQ_UNUSED(style);
-
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontFamily *f = d->family( familyName );
-#if defined(TQ_OS_MAC) && !defined(TQWS)
- if (f) {
- if (!f->fixedPitchComputed) {
- TQFontMetrics fm(familyName);
- f->fixedPitch = fm.width('i') == fm.width('m');
- f->fixedPitchComputed = TRUE;
- }
- }
-#endif
-
- return ( f && f->fixedPitch );
-}
-
-/*!
- Returns TRUE if the font that has family \a family and style \a
- style is a scalable bitmap font; otherwise returns FALSE. Scaling
- a bitmap font usually produces an unattractive hardly readable
- result, because the pixels of the font are scaled. If you need to
- scale a bitmap font it is better to scale it to one of the fixed
- sizes returned by smoothSizes().
-
- \sa isScalable(), isSmoothlyScalable()
-*/
-bool TQFontDatabase::isBitmapScalable( const TQString &family,
- const TQString &style) const
-{
- bool bitmapScalable = FALSE;
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontStyle::Key styleKey( style );
-
- TQtFontFamily *f = d->family( familyName );
- if ( !f ) return bitmapScalable;
-
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() || ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ )
- if ((style.isEmpty() || foundry->styles[k]->key == styleKey) &&
- foundry->styles[k]->bitmapScalable && !foundry->styles[k]->smoothScalable) {
- bitmapScalable = TRUE;
- goto end;
- }
- }
- }
- end:
- return bitmapScalable;
-}
-
-
-/*!
- Returns TRUE if the font that has family \a family and style \a
- style is smoothly scalable; otherwise returns FALSE. If this
- function returns TRUE, it's safe to scale this font to any size,
- and the result will always look attractive.
-
- \sa isScalable(), isBitmapScalable()
-*/
-bool TQFontDatabase::isSmoothlyScalable( const TQString &family,
- const TQString &style) const
-{
- bool smoothScalable = FALSE;
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontStyle::Key styleKey( style );
-
- TQtFontFamily *f = d->family( familyName );
- if ( !f ) return smoothScalable;
-
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() || ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ )
- if ((style.isEmpty() || foundry->styles[k]->key == styleKey) && foundry->styles[k]->smoothScalable) {
- smoothScalable = TRUE;
- goto end;
- }
- }
- }
- end:
- return smoothScalable;
-}
-
-/*!
- Returns TRUE if the font that has family \a family and style \a
- style is scalable; otherwise returns FALSE.
-
- \sa isBitmapScalable(), isSmoothlyScalable()
-*/
-bool TQFontDatabase::isScalable( const TQString &family,
- const TQString &style) const
-{
- if ( isSmoothlyScalable( family, style) )
- return TRUE;
-
- return isBitmapScalable( family, style);
-}
-
-
-/*!
- Returns a list of the point sizes available for the font that has
- family \a family and style \a style. The list may be empty.
-
- \sa smoothSizes(), standardSizes()
-*/
-TQValueList<int> TQFontDatabase::pointSizes( const TQString &family,
- const TQString &style)
-{
-#if defined(TQ_WS_MAC)
- // windows and macosx are always smoothly scalable
- TQ_UNUSED( family );
- TQ_UNUSED( style );
- return standardSizes();
-#else
- bool smoothScalable = FALSE;
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontStyle::Key styleKey( style );
-
- TQValueList<int> sizes;
-
- TQtFontFamily *fam = d->family( familyName );
- if ( !fam ) return sizes;
-
- for ( int j = 0; j < fam->count; j++ ) {
- TQtFontFoundry *foundry = fam->foundries[j];
- if ( foundryName.isEmpty() || ucstricmp( foundry->name, foundryName ) == 0 ) {
- TQtFontStyle *style = foundry->style( styleKey );
- if ( !style ) continue;
-
- if ( style->smoothScalable ) {
- smoothScalable = TRUE;
- goto end;
- }
- for ( int l = 0; l < style->count; l++ ) {
- const TQtFontSize *size = style->pixelSizes + l;
-
- if (size->pixelSize != 0 && size->pixelSize != USHRT_MAX) {
-#ifdef TQ_WS_X11
- const uint pointSize = tqRound(qt_pointSize(size->pixelSize, 0, -1));
-#else
- const uint pointSize = size->pixelSize; // embedded uses 72dpi
-#endif
- if (! sizes.contains(pointSize))
- sizes.append(pointSize);
- }
- }
- }
- }
- end:
- if ( smoothScalable )
- return standardSizes();
-
- qHeapSort( sizes );
- return sizes;
-#endif
-}
-
-/*!
- Returns a TQFont object that has family \a family, style \a style
- and point size \a pointSize. If no matching font could be created,
- a TQFont object that uses the application's default font is
- returned.
-*/
-TQFont TQFontDatabase::font( const TQString &family, const TQString &style,
- int pointSize)
-{
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontFoundry allStyles( foundryName );
- TQtFontFamily *f = d->family( familyName );
- if ( !f ) return TQApplication::font();
-
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() || ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ )
- allStyles.style( foundry->styles[k]->key, TRUE );
- }
- }
-
- TQtFontStyle::Key styleKey( style );
- TQtFontStyle *s = bestStyle(&allStyles, styleKey);
-
- if ( !s ) // no styles found?
- return TQApplication::font();
- return TQFont( family, pointSize, s->key.weight,
- s->key.italic ? TRUE : s->key.oblique ? TRUE : FALSE );
-}
-
-
-/*!
- Returns the point sizes of a font that has family \a family and
- style \a style that will look attractive. The list may be empty.
- For non-scalable fonts and bitmap scalable fonts, this function
- is equivalent to pointSizes().
-
- \sa pointSizes(), standardSizes()
-*/
-TQValueList<int> TQFontDatabase::smoothSizes( const TQString &family,
- const TQString &style)
-{
-#ifdef TQ_WS_WIN
- TQ_UNUSED( family );
- TQ_UNUSED( style );
- return TQFontDatabase::standardSizes();
-#else
- bool smoothScalable = FALSE;
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontStyle::Key styleKey( style );
-
- TQValueList<int> sizes;
-
- TQtFontFamily *fam = d->family( familyName );
- if ( !fam )
- return sizes;
-
- for ( int j = 0; j < fam->count; j++ ) {
- TQtFontFoundry *foundry = fam->foundries[j];
- if ( foundryName.isEmpty() ||
- ucstricmp( foundry->name, foundryName ) == 0 ) {
- TQtFontStyle *style = foundry->style( styleKey );
- if ( !style ) continue;
-
- if ( style->smoothScalable ) {
- smoothScalable = TRUE;
- goto end;
- }
- for ( int l = 0; l < style->count; l++ ) {
- const TQtFontSize *size = style->pixelSizes + l;
-
- if ( size->pixelSize != 0 && size->pixelSize != USHRT_MAX ) {
-#ifdef TQ_WS_X11
- const uint pointSize = tqRound(qt_pointSize(size->pixelSize, 0, -1));
-#else
- const uint pointSize = size->pixelSize; // embedded uses 72dpi
-#endif
- if (! sizes.contains(pointSize))
- sizes.append( pointSize );
- }
- }
- }
- }
- end:
- if ( smoothScalable )
- return TQFontDatabase::standardSizes();
-
- qHeapSort( sizes );
- return sizes;
-#endif
-}
-
-
-/*!
- Returns a list of standard font sizes.
-
- \sa smoothSizes(), pointSizes()
-*/
-TQValueList<int> TQFontDatabase::standardSizes()
-{
- TQValueList<int> ret;
- static const unsigned short standard[] =
- { 6, 7, 8, 9, 10, 11, 12, 14, 16, 18, 20, 22, 24, 26, 28, 36, 48, 72, 0 };
- const unsigned short *sizes = standard;
- while ( *sizes ) ret << *sizes++;
- return ret;
-}
-
-
-/*!
- Returns TRUE if the font that has family \a family and style \a
- style is italic; otherwise returns FALSE.
-
- \sa weight(), bold()
-*/
-bool TQFontDatabase::italic( const TQString &family,
- const TQString &style) const
-{
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontFoundry allStyles( foundryName );
- TQtFontFamily *f = d->family( familyName );
- if ( !f ) return FALSE;
-
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() || ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ )
- allStyles.style( foundry->styles[k]->key, TRUE );
- }
- }
-
- TQtFontStyle::Key styleKey( style );
- TQtFontStyle *s = allStyles.style( styleKey );
- return s && s->key.italic;
-}
-
-
-/*!
- Returns TRUE if the font that has family \a family and style \a
- style is bold; otherwise returns FALSE.
-
- \sa italic(), weight()
-*/
-bool TQFontDatabase::bold( const TQString &family,
- const TQString &style) const
-{
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontFoundry allStyles( foundryName );
- TQtFontFamily *f = d->family( familyName );
- if ( !f ) return FALSE;
-
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() ||
- ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ )
- allStyles.style( foundry->styles[k]->key, TRUE );
- }
- }
-
- TQtFontStyle::Key styleKey( style );
- TQtFontStyle *s = allStyles.style( styleKey );
- return s && s->key.weight >= TQFont::Bold;
-}
-
-
-/*!
- Returns the weight of the font that has family \a family and style
- \a style. If there is no such family and style combination,
- returns -1.
-
- \sa italic(), bold()
-*/
-int TQFontDatabase::weight( const TQString &family,
- const TQString &style) const
-{
- TQString familyName, foundryName;
- parseFontName( family, foundryName, familyName );
-
- load( familyName );
-
- TQtFontFoundry allStyles( foundryName );
- TQtFontFamily *f = d->family( familyName );
- if ( !f ) return -1;
-
- for ( int j = 0; j < f->count; j++ ) {
- TQtFontFoundry *foundry = f->foundries[j];
- if ( foundryName.isEmpty() ||
- ucstricmp( foundry->name, foundryName ) == 0 ) {
- for ( int k = 0; k < foundry->count; k++ )
- allStyles.style( foundry->styles[k]->key, TRUE );
- }
- }
-
- TQtFontStyle::Key styleKey( style );
- TQtFontStyle *s = allStyles.style( styleKey );
- return s ? s->key.weight : -1;
-}
-
-
-/*!
- Returns a string that gives a default description of the \a script
- (e.g. for displaying to the user in a dialog). The name matches
- the name of the script as defined by the Unicode 3.0 standard.
-
- \sa TQFont::Script
-*/
-TQString TQFontDatabase::scriptName(TQFont::Script script)
-{
- const char *name = 0;
-
- switch (script) {
- case TQFont::Latin:
- name = TQT_TRANSLATE_NOOP("TQFont", "Latin");
- break;
- case TQFont::Greek:
- name = TQT_TRANSLATE_NOOP("TQFont", "Greek" );
- break;
- case TQFont::Cyrillic:
- name = TQT_TRANSLATE_NOOP("TQFont", "Cyrillic" );
- break;
- case TQFont::Armenian:
- name = TQT_TRANSLATE_NOOP("TQFont", "Armenian" );
- break;
- case TQFont::Georgian:
- name = TQT_TRANSLATE_NOOP("TQFont", "Georgian" );
- break;
- case TQFont::Runic:
- name = TQT_TRANSLATE_NOOP("TQFont", "Runic" );
- break;
- case TQFont::Ogham:
- name = TQT_TRANSLATE_NOOP("TQFont", "Ogham" );
- break;
- case TQFont::SpacingModifiers:
- name = TQT_TRANSLATE_NOOP("TQFont", "SpacingModifiers" );
- break;
- case TQFont::CombiningMarks:
- name = TQT_TRANSLATE_NOOP("TQFont", "CombiningMarks" );
- break;
- case TQFont::Hebrew:
- name = TQT_TRANSLATE_NOOP("TQFont", "Hebrew" );
- break;
- case TQFont::Arabic:
- name = TQT_TRANSLATE_NOOP("TQFont", "Arabic" );
- break;
- case TQFont::Syriac:
- name = TQT_TRANSLATE_NOOP("TQFont", "Syriac" );
- break;
- case TQFont::Thaana:
- name = TQT_TRANSLATE_NOOP("TQFont", "Thaana" );
- break;
- case TQFont::Devanagari:
- name = TQT_TRANSLATE_NOOP("TQFont", "Devanagari" );
- break;
- case TQFont::Bengali:
- name = TQT_TRANSLATE_NOOP("TQFont", "Bengali" );
- break;
- case TQFont::Gurmukhi:
- name = TQT_TRANSLATE_NOOP("TQFont", "Gurmukhi" );
- break;
- case TQFont::Gujarati:
- name = TQT_TRANSLATE_NOOP("TQFont", "Gujarati" );
- break;
- case TQFont::Oriya:
- name = TQT_TRANSLATE_NOOP("TQFont", "Oriya" );
- break;
- case TQFont::Tamil:
- name = TQT_TRANSLATE_NOOP("TQFont", "Tamil" );
- break;
- case TQFont::Telugu:
- name = TQT_TRANSLATE_NOOP("TQFont", "Telugu" );
- break;
- case TQFont::Kannada:
- name = TQT_TRANSLATE_NOOP("TQFont", "Kannada" );
- break;
- case TQFont::Malayalam:
- name = TQT_TRANSLATE_NOOP("TQFont", "Malayalam" );
- break;
- case TQFont::Sinhala:
- name = TQT_TRANSLATE_NOOP("TQFont", "Sinhala" );
- break;
- case TQFont::Thai:
- name = TQT_TRANSLATE_NOOP("TQFont", "Thai" );
- break;
- case TQFont::Lao:
- name = TQT_TRANSLATE_NOOP("TQFont", "Lao" );
- break;
- case TQFont::Tibetan:
- name = TQT_TRANSLATE_NOOP("TQFont", "Tibetan" );
- break;
- case TQFont::Myanmar:
- name = TQT_TRANSLATE_NOOP("TQFont", "Myanmar" );
- break;
- case TQFont::Khmer:
- name = TQT_TRANSLATE_NOOP("TQFont", "Khmer" );
- break;
- case TQFont::Han:
- name = TQT_TRANSLATE_NOOP("TQFont", "Han" );
- break;
- case TQFont::Hiragana:
- name = TQT_TRANSLATE_NOOP("TQFont", "Hiragana" );
- break;
- case TQFont::Katakana:
- name = TQT_TRANSLATE_NOOP("TQFont", "Katakana" );
- break;
- case TQFont::Hangul:
- name = TQT_TRANSLATE_NOOP("TQFont", "Hangul" );
- break;
- case TQFont::Bopomofo:
- name = TQT_TRANSLATE_NOOP("TQFont", "Bopomofo" );
- break;
- case TQFont::Yi:
- name = TQT_TRANSLATE_NOOP("TQFont", "Yi" );
- break;
- case TQFont::Ethiopic:
- name = TQT_TRANSLATE_NOOP("TQFont", "Ethiopic" );
- break;
- case TQFont::Cherokee:
- name = TQT_TRANSLATE_NOOP("TQFont", "Cherokee" );
- break;
- case TQFont::CanadianAboriginal:
- name = TQT_TRANSLATE_NOOP("TQFont", "Canadian Aboriginal" );
- break;
- case TQFont::Mongolian:
- name = TQT_TRANSLATE_NOOP("TQFont", "Mongolian" );
- break;
-
- case TQFont::CurrencySymbols:
- name = TQT_TRANSLATE_NOOP("TQFont", "Currency Symbols" );
- break;
-
- case TQFont::LetterlikeSymbols:
- name = TQT_TRANSLATE_NOOP("TQFont", "Letterlike Symbols" );
- break;
-
- case TQFont::NumberForms:
- name = TQT_TRANSLATE_NOOP("TQFont", "Number Forms" );
- break;
-
- case TQFont::MathematicalOperators:
- name = TQT_TRANSLATE_NOOP("TQFont", "Mathematical Operators" );
- break;
-
- case TQFont::TechnicalSymbols:
- name = TQT_TRANSLATE_NOOP("TQFont", "Technical Symbols" );
- break;
-
- case TQFont::GeometricSymbols:
- name = TQT_TRANSLATE_NOOP("TQFont", "Geometric Symbols" );
- break;
-
- case TQFont::MiscellaneousSymbols:
- name = TQT_TRANSLATE_NOOP("TQFont", "Miscellaneous Symbols" );
- break;
-
- case TQFont::EnclosedAndSquare:
- name = TQT_TRANSLATE_NOOP("TQFont", "Enclosed and Square" );
- break;
-
- case TQFont::Braille:
- name = TQT_TRANSLATE_NOOP("TQFont", "Braille" );
- break;
-
- case TQFont::Unicode:
- name = TQT_TRANSLATE_NOOP("TQFont", "Unicode" );
- break;
-
- case TQFont::Tagalog:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Tagalog" );
- break;
-
- case TQFont::Hanunoo:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Hanunoo" );
- break;
-
- case TQFont::Buhid:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Buhid" );
- break;
-
- case TQFont::Tagbanwa:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Tagbanwa" );
- break;
-
- case TQFont::KatakanaHalfWidth:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Katakana Half-Width Forms" );
- break;
-
- case TQFont::Han_Japanese:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Han (Japanese)" );
- break;
-
- case TQFont::Han_SimplifiedChinese:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Han (Simplified Chinese)" );
- break;
-
- case TQFont::Han_TraditionalChinese:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Han (Traditional Chinese)" );
- break;
-
- case TQFont::Han_Korean:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Han (Korean)" );
- break;
-
- default:
- name = TQT_TRANSLATE_NOOP( "TQFont", "Unknown Script" );
- break;
- }
-
- return tqApp ? tqApp->translate("TQFont", name) : TQString::tqfromLatin1(name);
-}
-
-
-/*!
- Returns a string with sample characters from \a script.
-
- \sa TQFont::Script
-*/
-TQString TQFontDatabase::scriptSample(TQFont::Script script)
-{
- TQString sample = "AaBb";
-
- switch (script) {
- case TQFont::Latin:
- // This is cheating... we only show latin-1 characters so that we don't
- // end up loading lots of fonts - at least on X11...
- sample += TQChar(0x00C3);
- sample += TQChar(0x00E1);
- sample += "Zz";
- break;
- case TQFont::Greek:
- sample += TQChar(0x0393);
- sample += TQChar(0x03B1);
- sample += TQChar(0x03A9);
- sample += TQChar(0x03C9);
- break;
- case TQFont::Cyrillic:
- sample += TQChar(0x0414);
- sample += TQChar(0x0434);
- sample += TQChar(0x0436);
- sample += TQChar(0x0402);
- break;
- case TQFont::Armenian:
- sample += TQChar(0x053f);
- sample += TQChar(0x054f);
- sample += TQChar(0x056f);
- sample += TQChar(0x057f);
- break;
- case TQFont::Georgian:
- sample += TQChar(0x10a0);
- sample += TQChar(0x10b0);
- sample += TQChar(0x10c0);
- sample += TQChar(0x10d0);
- break;
- case TQFont::Runic:
- sample += TQChar(0x16a0);
- sample += TQChar(0x16b0);
- sample += TQChar(0x16c0);
- sample += TQChar(0x16d0);
- break;
- case TQFont::Ogham:
- sample += TQChar(0x1681);
- sample += TQChar(0x1687);
- sample += TQChar(0x1693);
- sample += TQChar(0x168d);
- break;
-
-
-
- case TQFont::Hebrew:
- sample += TQChar(0x05D0);
- sample += TQChar(0x05D1);
- sample += TQChar(0x05D2);
- sample += TQChar(0x05D3);
- break;
- case TQFont::Arabic:
- sample += TQChar(0x0628);
- sample += TQChar(0x0629);
- sample += TQChar(0x062A);
- sample += TQChar(0x063A);
- break;
- case TQFont::Syriac:
- sample += TQChar(0x0715);
- sample += TQChar(0x0725);
- sample += TQChar(0x0716);
- sample += TQChar(0x0726);
- break;
- case TQFont::Thaana:
- sample += TQChar(0x0784);
- sample += TQChar(0x0794);
- sample += TQChar(0x078c);
- sample += TQChar(0x078d);
- break;
-
-
-
- case TQFont::Devanagari:
- sample += TQChar(0x0905);
- sample += TQChar(0x0915);
- sample += TQChar(0x0925);
- sample += TQChar(0x0935);
- break;
- case TQFont::Bengali:
- sample += TQChar(0x0986);
- sample += TQChar(0x0996);
- sample += TQChar(0x09a6);
- sample += TQChar(0x09b6);
- break;
- case TQFont::Gurmukhi:
- sample += TQChar(0x0a05);
- sample += TQChar(0x0a15);
- sample += TQChar(0x0a25);
- sample += TQChar(0x0a35);
- break;
- case TQFont::Gujarati:
- sample += TQChar(0x0a85);
- sample += TQChar(0x0a95);
- sample += TQChar(0x0aa5);
- sample += TQChar(0x0ab5);
- break;
- case TQFont::Oriya:
- sample += TQChar(0x0b06);
- sample += TQChar(0x0b16);
- sample += TQChar(0x0b2b);
- sample += TQChar(0x0b36);
- break;
- case TQFont::Tamil:
- sample += TQChar(0x0b89);
- sample += TQChar(0x0b99);
- sample += TQChar(0x0ba9);
- sample += TQChar(0x0bb9);
- break;
- case TQFont::Telugu:
- sample += TQChar(0x0c05);
- sample += TQChar(0x0c15);
- sample += TQChar(0x0c25);
- sample += TQChar(0x0c35);
- break;
- case TQFont::Kannada:
- sample += TQChar(0x0c85);
- sample += TQChar(0x0c95);
- sample += TQChar(0x0ca5);
- sample += TQChar(0x0cb5);
- break;
- case TQFont::Malayalam:
- sample += TQChar(0x0d05);
- sample += TQChar(0x0d15);
- sample += TQChar(0x0d25);
- sample += TQChar(0x0d35);
- break;
- case TQFont::Sinhala:
- sample += TQChar(0x0d90);
- sample += TQChar(0x0da0);
- sample += TQChar(0x0db0);
- sample += TQChar(0x0dc0);
- break;
- case TQFont::Thai:
- sample += TQChar(0x0e02);
- sample += TQChar(0x0e12);
- sample += TQChar(0x0e22);
- sample += TQChar(0x0e32);
- break;
- case TQFont::Lao:
- sample += TQChar(0x0e8d);
- sample += TQChar(0x0e9d);
- sample += TQChar(0x0ead);
- sample += TQChar(0x0ebd);
- break;
- case TQFont::Tibetan:
- sample += TQChar(0x0f00);
- sample += TQChar(0x0f01);
- sample += TQChar(0x0f02);
- sample += TQChar(0x0f03);
- break;
- case TQFont::Myanmar:
- sample += TQChar(0x1000);
- sample += TQChar(0x1001);
- sample += TQChar(0x1002);
- sample += TQChar(0x1003);
- break;
- case TQFont::Khmer:
- sample += TQChar(0x1780);
- sample += TQChar(0x1790);
- sample += TQChar(0x17b0);
- sample += TQChar(0x17c0);
- break;
-
-
-
- case TQFont::Han:
- sample += TQChar(0x6f84);
- sample += TQChar(0x820a);
- sample += TQChar(0x61a9);
- sample += TQChar(0x9781);
- break;
- case TQFont::Hiragana:
- sample += TQChar(0x3050);
- sample += TQChar(0x3060);
- sample += TQChar(0x3070);
- sample += TQChar(0x3080);
- break;
- case TQFont::Katakana:
- sample += TQChar(0x30b0);
- sample += TQChar(0x30c0);
- sample += TQChar(0x30d0);
- sample += TQChar(0x30e0);
- break;
- case TQFont::Hangul:
- sample += TQChar(0xac00);
- sample += TQChar(0xac11);
- sample += TQChar(0xac1a);
- sample += TQChar(0xac2f);
- break;
- case TQFont::Bopomofo:
- sample += TQChar(0x3105);
- sample += TQChar(0x3115);
- sample += TQChar(0x3125);
- sample += TQChar(0x3129);
- break;
- case TQFont::Yi:
- sample += TQChar(0xa1a8);
- sample += TQChar(0xa1a6);
- sample += TQChar(0xa200);
- sample += TQChar(0xa280);
- break;
-
-
-
- case TQFont::Ethiopic:
- sample += TQChar(0x1200);
- sample += TQChar(0x1240);
- sample += TQChar(0x1280);
- sample += TQChar(0x12c0);
- break;
- case TQFont::Cherokee:
- sample += TQChar(0x13a0);
- sample += TQChar(0x13b0);
- sample += TQChar(0x13c0);
- sample += TQChar(0x13d0);
- break;
- case TQFont::CanadianAboriginal:
- sample += TQChar(0x1410);
- sample += TQChar(0x1500);
- sample += TQChar(0x15f0);
- sample += TQChar(0x1650);
- break;
- case TQFont::Mongolian:
- sample += TQChar(0x1820);
- sample += TQChar(0x1840);
- sample += TQChar(0x1860);
- sample += TQChar(0x1880);
- break;
-
-
- case TQFont::CurrencySymbols:
- case TQFont::LetterlikeSymbols:
- case TQFont::NumberForms:
- case TQFont::MathematicalOperators:
- case TQFont::TechnicalSymbols:
- case TQFont::GeometricSymbols:
- case TQFont::MiscellaneousSymbols:
- case TQFont::EnclosedAndSquare:
- case TQFont::Braille:
- break;
-
-
- case TQFont::Unicode:
- sample += TQChar(0x0174);
- sample += TQChar(0x0628);
- sample += TQChar(0x0e02);
- sample += TQChar(0x263A);
- sample += TQChar(0x3129);
- sample += TQChar(0x61a9);
- sample += TQChar(0xac2f);
- break;
-
-
-
- default:
- sample += TQChar(0xfffd);
- sample += TQChar(0xfffd);
- sample += TQChar(0xfffd);
- sample += TQChar(0xfffd);
- break;
- }
-
- return sample;
-}
-
-
-
-
-/*!
- \internal
-
- This makes sense of the font family name:
-
- 1) if the family name contains a '-' (ie. "Adobe-Courier"), then we
- split at the '-', and use the string as the foundry, and the string to
- the right as the family
-
- 2) if the family name contains a '[' and a ']', then we take the text
- between the square brackets as the foundry, and the text before the
- square brackets as the family (ie. "Arial [Monotype]")
-*/
-void TQFontDatabase::parseFontName(const TQString &name, TQString &foundry, TQString &family)
-{
- if ( name.contains('-') ) {
- int i = name.find('-');
- foundry = name.left( i );
- family = name.right( name.length() - i - 1 );
- } else if ( name.contains('[') && name.contains(']')) {
- int i = name.find('[');
- int li = name.findRev(']');
-
- if (i < li) {
- foundry = name.mid(i + 1, li - i - 1);
- if (name[i - 1] == ' ')
- i--;
- family = name.left(i);
- }
- } else {
- foundry = TQString::null;
- family = name;
- }
-}
-
-#endif // USE_QT4
-
-#endif // TQT_NO_FONTDATABASE