diff options
| author | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:17:53 -0500 | 
|---|---|---|
| committer | Timothy Pearson <kb9vqf@pearsoncomputing.net> | 2011-07-10 15:17:53 -0500 | 
| commit | dda8474928bd7276e1fad8fb7a601e7c83ff2bc2 (patch) | |
| tree | 7f83910598b33b12730035f086df20b5a53ab99c /tqtinterface/qt4/src/kernel/tqfontdata_p.h | |
| parent | 6260b6178868c03aab1644bf93b0ef043654bdb0 (diff) | |
| download | experimental-dda8474928bd7276e1fad8fb7a601e7c83ff2bc2.tar.gz experimental-dda8474928bd7276e1fad8fb7a601e7c83ff2bc2.zip | |
Added TQt4 HEAD
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqfontdata_p.h')
| -rw-r--r-- | tqtinterface/qt4/src/kernel/tqfontdata_p.h | 278 | 
1 files changed, 278 insertions, 0 deletions
| diff --git a/tqtinterface/qt4/src/kernel/tqfontdata_p.h b/tqtinterface/qt4/src/kernel/tqfontdata_p.h new file mode 100644 index 0000000..b6d7a54 --- /dev/null +++ b/tqtinterface/qt4/src/kernel/tqfontdata_p.h @@ -0,0 +1,278 @@ +/**************************************************************************** +** +** Definition of internal TQFontData struct +** +** Created : 941229 +** +** Copyright (C) 2010 Timothy Pearson and (C) 1992-2008 Trolltech ASA. +** +** 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. +** +**********************************************************************/ + +#ifndef TQFONTDATA_P_H +#define TQFONTDATA_P_H + +// +//  W A R N I N G +//  ------------- +// +// This file is not part of the TQt API.  It exists for the convenience +// of internal files.  This header file may change from version to version +// without notice, or even be removed. +// +// We mean it. +// +// + +#include "tqobject.h" +#include "tqfont.h" +#include "tqpaintdevicemetrics.h" + +// forwards +class TQFontEngine; +class TQPaintDevice; + + +struct TQFontDef +{ +    inline TQFontDef() +	: pointSize( -1 ), pixelSize( -1 ), +	  tqstyleHint( TQFont::AnyStyle ), styleStrategy( TQFont::PreferDefault ), +	  weight( 50 ), italic( FALSE ), fixedPitch( FALSE ), stretch( 100 ), +	  ignorePitch(TRUE) +#ifdef TQ_WS_MAC +	  ,fixedPitchComputed(FALSE) +#endif +    { +    } + +    TQString family; + +#ifdef TQ_WS_X11 +    TQString addStyle; +#endif // TQ_WS_X11 + +    int pointSize; +    int pixelSize; + +    uint tqstyleHint     : 8; +    uint styleStrategy : 16; + +    uint weight     :  7; // 0-99 +    uint italic     :  1; +    uint fixedPitch :  1; +    uint stretch    : 12; // 0-400 + +    uint ignorePitch : 1; +    uint fixedPitchComputed : 1; // for Mac OS X only +    uint reserved   : 14; // for future extensions + +    bool operator==( const TQFontDef &other ) const; +    inline bool operator<( const TQFontDef &other ) const +    { +	if ( pixelSize != other.pixelSize ) return pixelSize < other.pixelSize; +	if ( weight != other.weight ) return weight < other.weight; +	if ( italic != other.italic ) return italic < other.italic; +	if ( stretch != other.stretch ) return stretch < other.stretch; +	if ( tqstyleHint != other.tqstyleHint ) return tqstyleHint < other.tqstyleHint; +	if ( styleStrategy != other.styleStrategy ) return styleStrategy < other.styleStrategy; +	if ( family != other.family ) return family < other.family; + +#ifdef TQ_WS_X11 +	if ( addStyle != other.addStyle ) return addStyle < other.addStyle; +#endif // TQ_WS_X11 + +	return FALSE; +    } +}; + +class TQFontEngineData : public TQShared +{ +public: +    TQFontEngineData(); +    ~TQFontEngineData(); + +    uint lineWidth; + +#if defined(TQ_WS_X11) || defined(TQ_WS_WIN) +    TQFontEngine *engines[TQFont::LastPrivateScript]; +#else +    TQFontEngine *engine; +#endif // TQ_WS_X11 || TQ_WS_WIN +#ifndef TQ_WS_MAC +    enum { widthCacheSize = 0x500 }; +    uchar widthCache[widthCacheSize]; +#endif +}; + + +class TQFontPrivate : public TQShared +{ +public: +    static TQFont::Script defaultScript; +#ifdef TQ_WS_X11 +    static int defaultEncodingID; +#endif // TQ_WS_X11 + +    TQFontPrivate(); +    TQFontPrivate( const TQFontPrivate &other ); +    ~TQFontPrivate(); + +    void load( TQFont::Script script ); +    TQFontEngine *engineForScript( TQFont::Script script ) const { +	if ( script == TQFont::NoScript ) +	    script = TQFontPrivate::defaultScript; +#if defined(TQ_WS_X11) || defined(TQ_WS_WIN) +	if ( ! engineData || ! engineData->engines[script] ) +	    ((TQFontPrivate *) this)->load( script ); +	return engineData->engines[script]; +#else +        if ( ! engineData || ! engineData->engine ) +	    ((TQFontPrivate *) this)->load( script ); +        return engineData->engine; +#endif // TQ_WS_X11 || TQ_WS_WIN +    } + +    TQFontDef request; +    TQFontEngineData *engineData; +    TQPaintDevice *painttqdevice; +    int screen; + +    uint rawMode    :  1; +    uint underline  :  1; +    uint overline   :  1; +    uint strikeOut  :  1; + +    enum { +	Family        = 0x0001, +	Size          = 0x0002, +	StyleHint     = 0x0004, +	StyleStrategy = 0x0008, +	Weight        = 0x0010, +	Italic        = 0x0020, +	Underline     = 0x0040, +	Overline      = 0x0080, +	StrikeOut     = 0x0100, +	FixedPitch    = 0x0200, +	Stretch       = 0x0400, +	Complete      = 0x07ff +    }; + +    uint tqmask; + +    void resolve( const TQFontPrivate *other ); +}; + + +class TQFontCache : public TQObject +{ +public: +    static TQFontCache *instance; + +    TQFontCache(); +    ~TQFontCache(); + +#ifdef TQ_WS_TQWS +    void clear(); +#endif +    // universal key structure.  TQFontEngineDatas and TQFontEngines are cached using +    // the same keys +    struct Key { +	Key() : script(0), screen( 0 ), dpi(0) { } +	Key( const TQFontDef &d, TQFont::Script c, int s, TQPaintDevice *pdev ) +            : script(c), screen(s) { +            def = d; +#ifdef TQ_WS_X11 +            dpi = pdev ? TQPaintDeviceMetrics(pdev).logicalDpiY() : 0; +#else +            TQ_UNUSED(pdev); +            dpi = 0; +#endif +        } + +	TQFontDef def; +	int script; +	int screen; +        int dpi; + +	inline bool operator<( const Key &other ) const +	{ +	    if ( script != other.script ) return script < other.script; +	    if ( screen != other.screen ) return screen < other.screen; +	    if ( dpi != other.dpi ) return dpi < other.dpi; +	    return def < other.def; +	} +	inline bool operator==( const Key &other ) const +	{ return def == other.def && script == other.script && +                screen == other.screen && dpi == other.dpi; } +    }; + +    // TQFontEngineData cache +    typedef TQMap<Key,TQFontEngineData*> EngineDataCache; +    EngineDataCache engineDataCache; + +    TQFontEngineData *tqfindEngineData( const Key &key ) const; +    void insertEngineData( const Key &key, TQFontEngineData *engineData ); + +    // TQFontEngine cache +    struct Engine { +	Engine() : data( 0 ), timestamp( 0 ), hits( 0 ) { } +	Engine( TQFontEngine *d ) : data( d ), timestamp( 0 ), hits( 0 ) { } + +	TQFontEngine *data; +	uint timestamp; +	uint hits; +    }; + +    typedef TQMap<Key,Engine> EngineCache; +    EngineCache engineCache; + +    TQFontEngine *tqfindEngine( const Key &key ); +    void insertEngine( const Key &key, TQFontEngine *engine ); + +#if defined(TQ_WS_WIN) || defined(TQ_WS_TQWS) +    void cleanupPrinterFonts(); +#endif + +    private: +    void increaseCost( uint cost ); +    void decreaseCost( uint cost ); +    void timerEvent( TQTimerEvent *event ); + +    static const uint min_cost; +    uint total_cost, max_cost; +    uint current_timestamp; +    bool fast; +    int timer_id; +}; + +#endif // TQFONTDATA_P_H | 
