/* QAD - Qt ADvanced Ivan Pelipenko peri4ko@yandex.ru This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see . */ #ifndef osm_tile_cache_h #define osm_tile_cache_h #include "osm_types_p.h" #include #include #include #include #include #include class MapView; class OSMTileCache: public QThread { Q_OBJECT public: explicit OSMTileCache(MapView * p); ~OSMTileCache(); void setMinimumCacheSize(int bytes) { fixed_size_b = bytes; updateCacheSize(); } void setAdditionalCacheSize(int mb) { add_size_b = mb * 1024 * 1024; updateCacheSize(); } void tileDownloaded(OSM::TileIndex index, const QPixmap & pixmap); OSM::TilePixmap getTile(OSM::TileIndex index, QRectF & rect_src); QString cacheRoot() const { return cache_root; } void setCacheRoot(const QString & p); private: OSM::TilePixmap getTileFromCache(OSM::TileIndex index); void updateCacheSize(); void saveTile(OSM::TilePixmap * tile); void writeToDisk(const OSM::TilePixmap & tile); void run() override; MapView * parent; QString cache_root; QDir cache_dir; QWaitCondition cond; QMutex cond_mutex; int fixed_size_b = 0, add_size_b = 0; QQueue queue; QCache tile_cache; public slots: private slots: signals: void tileReady(OSM::TilePixmap); }; #endif