diff options
| author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-02-10 15:10:13 +0900 | 
|---|---|---|
| committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-02-10 15:10:13 +0900 | 
| commit | 203fcb8d90752b546c672c625927a136b959fcfb (patch) | |
| tree | a899621e4cb63e2cdd9b94f889ee9d0ae8561bf0 /src/sq_pixmapcache.cpp | |
| parent | 98c274834c63c7fa4a9a494fdf7cd483336714d5 (diff) | |
| download | ksquirrel-203fcb8d90752b546c672c625927a136b959fcfb.tar.gz ksquirrel-203fcb8d90752b546c672c625927a136b959fcfb.zip | |
Rename 'ksquirrel' folder to 'src'
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'src/sq_pixmapcache.cpp')
| -rw-r--r-- | src/sq_pixmapcache.cpp | 167 | 
1 files changed, 167 insertions, 0 deletions
| diff --git a/src/sq_pixmapcache.cpp b/src/sq_pixmapcache.cpp new file mode 100644 index 0000000..6710420 --- /dev/null +++ b/src/sq_pixmapcache.cpp @@ -0,0 +1,167 @@ +/*************************************************************************** +                          sq_pixmapcache.cpp  -  description +                             ------------------- +    begin                :  Sep 28 2004 +    copyright            : (C) 2004 by Baryshev Dmitry +    email                : ksquirrel.iv@gmail.com + ***************************************************************************/ + +/*************************************************************************** + *                                                                         * + *   This program is free software; you can redistribute it and/or modify  * + *   it under the terms of the GNU General Public License as published by  * + *   the Free Software Foundation; either version 2 of the License, or     * + *   (at your option) any later version.                                   * + *                                                                         * + ***************************************************************************/ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "sq_pixmapcache.h" +#include "sq_thumbnailsize.h" +#include "sq_dirthumbs.h" + +SQ_PixmapCache * SQ_PixmapCache::m_instance = 0; + +SQ_PixmapCache::SQ_PixmapCache(TQObject *parent, int limit)  +    : TQObject(parent), TQMap<KURL, SQ_Thumbnail>() +{ +    m_instance = this; +    cache_limit = limit << 10; + +    dir = new SQ_DirThumbs; + +    valid_full = false; +} + +SQ_PixmapCache::~SQ_PixmapCache() +{ +    delete dir; +} + +/* + *  Write all entries to disk and clear cache. + */ +void SQ_PixmapCache::sync() +{ +    // nothing to sync +    if(empty()) +        return; + +    iterator itEnd = end(); + +    // go through array and sync each entry +    for(iterator it = begin();it != itEnd;++it) +        syncEntry(it.key(), it.data()); + +    // remove all entries from cache +    clear(); +} + +/* + *  Write one entry to disk and remove it from cache. + */ +void SQ_PixmapCache::syncEntry(const KURL &key, SQ_Thumbnail &thumb) +{ +    // let SQ_DirThumbs save thumbnail +    dir->saveThumbnail(key, thumb); +} + +/* + *  Insert new entry to cache + */ +void SQ_PixmapCache::insert(const KURL &key, const SQ_Thumbnail &thumb) +{ +    // thumbnail is null ? +    if(thumb.thumbnail.isNull()) +        return; + +    // calc new cache size +    last_full += entrySize(thumb); + +    // add new entry +    TQMap<KURL, SQ_Thumbnail>::insert(key, thumb); +} + +/* + *  Remove entry from cache. + */ +void SQ_PixmapCache::removeEntry(const KURL &key) +{ +    iterator it = find(key); + +    // no item to remove ? +    if(it == end()) +        return; + +    last_full -= entrySize(it.data()); + +    TQMap<KURL, SQ_Thumbnail>::remove(key); +} + +/* + *  Remove entry from cache and from disk. + */ +void SQ_PixmapCache::removeEntryFull(const KURL &key) +{ +    // remove from memory +    removeEntry(key); + +    // remove from disk +    dir->removeFile(key); +} + +/* + *  Check if pixmap, represented by 'key', is already in cache. + */ +bool SQ_PixmapCache::contains2(const KURL &key, SQ_Thumbnail &th) +{ +    iterator it = find(key); + +    // item found +    if(it != end()) +    { +        th = it.data(); +        return true; +    } + +    // not found +    return false; +} + +/* + *  Calculate total size used by cache (not exact!) + */ +int SQ_PixmapCache::totalSize() +{ +    if(valid_full) +        return last_full; + +    int total = 0; + +    iterator itEnd = end(); + +    for(iterator it = begin();it != itEnd;++it) +    { +        total += entrySize(it.data()); +    } + +    last_full = total; +    valid_full = true; + +    return total; +} + +void SQ_PixmapCache::clear() +{ +    valid_full = false; + +    TQMap<KURL, SQ_Thumbnail>::clear(); +} + +int SQ_PixmapCache::entrySize(const SQ_Thumbnail &th) const +{ +    return th.thumbnail.width() * th.thumbnail.height() * 4; +} | 
