summaryrefslogtreecommitdiffstats
path: root/tqtinterface/qt4/src/kernel/tqpixmapcache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tqtinterface/qt4/src/kernel/tqpixmapcache.cpp')
-rw-r--r--tqtinterface/qt4/src/kernel/tqpixmapcache.cpp336
1 files changed, 0 insertions, 336 deletions
diff --git a/tqtinterface/qt4/src/kernel/tqpixmapcache.cpp b/tqtinterface/qt4/src/kernel/tqpixmapcache.cpp
deleted file mode 100644
index e42ec38..0000000
--- a/tqtinterface/qt4/src/kernel/tqpixmapcache.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/****************************************************************************
-**
-** Implementation of TQPixmapCache class
-**
-** Created : 950504
-**
-** 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.
-**
-**********************************************************************/
-
-#include "tqpixmapcache.h"
-#include "tqcache.h"
-#include "tqobject.h"
-#include "tqcleanuphandler.h"
-
-
-// REVISED: paul
-/*!
- \class TQPixmapCache tqpixmapcache.h
-
- \brief The TQPixmapCache class provides an application-global cache for
- pixmaps.
-
- \ingroup environment
- \ingroup graphics
- \ingroup images
-
- This class is a tool for optimized drawing with TQPixmap. You can
- use it to store temporary pixmaps that are expensive to generate
- without using more storage space than cacheLimit(). Use insert()
- to insert pixmaps, find() to find them and clear() to empty the
- cache.
-
- For example, TQRadioButton has a non-trivial visual representation
- so we don't want to regenerate a pixmap whenever a radio button is
- displayed or changes state. In the function
- TQRadioButton::drawButton(), we do not draw the radio button
- directly. Instead, we first check the global pixmap cache for a
- pixmap with the key "$qt_radio_nnn_", where \c nnn is a numerical
- value that specifies the the radio button state. If a pixmap is
- found, we bitBlt() it onto the widget and return. Otherwise, we
- create a new pixmap, draw the radio button in the pixmap, and
- finally insert the pixmap in the global pixmap cache, using the
- key above. The bitBlt() is ten times faster than drawing the
- radio button. All radio buttons in the program share the cached
- pixmap since TQPixmapCache is application-global.
-
- TQPixmapCache contains no member data, only static functions to
- access the global pixmap cache. It creates an internal TQCache for
- caching the pixmaps.
-
- The cache associates a pixmap with a string (key). If two pixmaps
- are inserted into the cache using equal keys, then the last pixmap
- will hide the first pixmap. The TQDict and TQCache classes do
- exactly the same.
-
- The cache becomes full when the total size of all pixmaps in the
- cache exceeds cacheLimit(). The initial cache limit is 1024 KByte
- (1 MByte); it is changed with setCacheLimit(). A pixmap takes
- roughly width*height*depth/8 bytes of memory.
-
- See the \l TQCache documentation for more details about the cache
- mechanism.
-*/
-
-
-static const int cache_size = 149; // size of internal hash array
-#ifdef TQ_WS_MAC9
-static int cache_limit = 256; // 256 KB cache limit
-#else
-static int cache_limit = 1024; // 1024 KB cache limit
-#endif
-
-class TQPMCache: public TQObject, public TQCache<TQPixmap>
-{
-public:
- TQPMCache():
- TQObject( 0, "global pixmap cache" ),
- TQCache<TQPixmap>( cache_limit * 1024, cache_size ),
- id( 0 ), ps( 0 ), t( FALSE )
- {
- setAutoDelete( TRUE );
- }
- ~TQPMCache() {}
- void timerEvent( TQTimerEvent * );
- bool insert( const TQString& k, const TQPixmap *d, int c, int p = 0 );
-private:
- int id;
- int ps;
- bool t;
-};
-
-
-/*
- This is supposed to cut the cache size down by about 80-90% in a
- minute once the application becomes idle, to let any inserted pixmap
- remain in the cache for some time before it becomes a candidate for
- cleaning-up, and to not cut down the size of the cache while the
- cache is in active use.
-
- When the last pixmap has been deleted from the cache, kill the
- timer so TQt won't keep the CPU from going into sleep mode.
-*/
-
-void TQPMCache::timerEvent( TQTimerEvent * )
-{
- int mc = maxCost();
- bool nt = totalCost() == ps;
- setMaxCost( nt ? totalCost() * 3 / 4 : totalCost() -1 );
- setMaxCost( mc );
- ps = totalCost();
-
- if ( !count() ) {
- killTimer( id );
- id = 0;
- } else if ( nt != t ) {
- killTimer( id );
- id = startTimer( nt ? 10000 : 30000 );
- t = nt;
- }
-}
-
-bool TQPMCache::insert( const TQString& k, const TQPixmap *d, int c, int p )
-{
- bool r = TQCache<TQPixmap>::insert( k, d, c, p );
- if ( r && !id ) {
- id = startTimer( 30000 );
- t = FALSE;
- }
- return r;
-}
-
-static TQPMCache *pm_cache = 0; // global pixmap cache
-
-static TQSingleCleanupHandler<TQPMCache> qpm_cleanup_cache;
-
-/*!
- Returns the pixmap associated with the \a key in the cache, or
- null if there is no such pixmap.
-
- \warning If valid, you should copy the pixmap immediately (this is
- fast). Subsequent insertions into the cache could cause the
- pointer to become invalid. For this reason, we recommend you use
- find(const TQString&, TQPixmap&) instead.
-
- Example:
- \code
- TQPixmap* pp;
- TQPixmap p;
- if ( (pp=TQPixmapCache::find("my_big_image", pm)) ) {
- p = *pp;
- } else {
- p.load("bigimage.png");
- TQPixmapCache::insert("my_big_image", new TQPixmap(p));
- }
- painter->drawPixmap(0, 0, p);
- \endcode
-*/
-
-TQPixmap *TQPixmapCache::find( const TQString &key )
-{
- return pm_cache ? pm_cache->find(key) : 0;
-}
-
-
-/*!
- \overload
-
- Looks for a cached pixmap associated with the \a key in the cache.
- If a pixmap is found, the function sets \a pm to that pixmap and
- returns TRUE; otherwise leaves \a pm alone and returns FALSE.
-
- Example:
- \code
- TQPixmap p;
- if ( !TQPixmapCache::find("my_big_image", pm) ) {
- pm.load("bigimage.png");
- TQPixmapCache::insert("my_big_image", pm);
- }
- painter->drawPixmap(0, 0, p);
- \endcode
-*/
-
-bool TQPixmapCache::find( const TQString &key, TQPixmap& pm )
-{
- TQPixmap* p = pm_cache ? pm_cache->find(key) : 0;
- if ( p ) pm = *p;
- return !!p;
-}
-
-
-/*!
- \obsolete
- Inserts the pixmap \a pm associated with \a key into the cache.
- Returns TRUE if successful, or FALSE if the pixmap is too big for the cache.
-
- <strong>
- Note: \a pm must be allocated on the heap (using \c new).
-
- If this function returns FALSE, you must delete \a pm yourself.
-
- If this function returns TRUE, do not use \a pm afterwards or
- keep references to it because any other insertions into the cache,
- whether from anywhere in the application or within TQt itself, could cause
- the pixmap to be discarded from the cache and the pointer to
- become invalid.
-
- Due to these dangers, we strongly recommend that you use
- insert(const TQString&, const TQPixmap&) instead.
- </strong>
-*/
-
-bool TQPixmapCache::insert( const TQString &key, TQPixmap *pm )
-{
- if ( !pm_cache ) { // create pixmap cache
- pm_cache = new TQPMCache;
- TQ_CHECK_PTR( pm_cache );
- qpm_cleanup_cache.set( &pm_cache );
- }
- return pm_cache->insert( key, pm, pm->width()*pm->height()*pm->depth()/8 );
-}
-
-/*!
- Inserts a copy of the pixmap \a pm associated with the \a key into
- the cache.
-
- All pixmaps inserted by the TQt library have a key starting with
- "$qt", so your own pixmap keys should never begin "$qt".
-
- When a pixmap is inserted and the cache is about to exceed its
- limit, it removes pixmaps until there is enough room for the
- pixmap to be inserted.
-
- The oldest pixmaps (least recently accessed in the cache) are
- deleted when more space is needed.
-
- \sa setCacheLimit().
-*/
-
-bool TQPixmapCache::insert( const TQString &key, const TQPixmap& pm )
-{
- if ( !pm_cache ) { // create pixmap cache
- pm_cache = new TQPMCache;
- TQ_CHECK_PTR( pm_cache );
- qpm_cleanup_cache.set( &pm_cache );
- }
- TQPixmap *p = new TQPixmap(pm);
- bool rt = pm_cache->insert( key, p, p->width()*p->height()*p->depth()/8 );
- if ( !rt )
- delete p;
-
- return rt;
-}
-
-/*!
- Returns the cache limit (in kilobytes).
-
- The default setting is 1024 kilobytes.
-
- \sa setCacheLimit().
-*/
-
-int TQPixmapCache::cacheLimit()
-{
- return cache_limit;
-}
-
-/*!
- Sets the cache limit to \a n kilobytes.
-
- The default setting is 1024 kilobytes.
-
- \sa cacheLimit()
-*/
-
-void TQPixmapCache::setCacheLimit( int n )
-{
-#ifdef TQ_WS_MAC9
- if(n > 256)
- qWarning("TQPixmapCache::setCacheLimit: Setting cache limits high is harmfull to mac9's health");
-#endif
- cache_limit = n;
- if ( pm_cache )
- pm_cache->setMaxCost( 1024*cache_limit );
-}
-
-
-/*!
- Removes the pixmap associated with \a key from the cache.
-*/
-void TQPixmapCache::remove( const TQString &key )
-{
- if ( pm_cache )
- pm_cache->remove( key );
-}
-
-
-/*!
- Removes all pixmaps from the cache.
-*/
-
-void TQPixmapCache::clear()
-{
- if ( pm_cache )
- pm_cache->clear();
-}