Files
qad/libs/map/osm_tile_cache_p.h
2024-02-04 13:02:19 +03:00

84 lines
2.0 KiB
C++

/*
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 <http://www.gnu.org/licenses/>.
*/
#ifndef osm_tile_cache_h
#define osm_tile_cache_h
#include "osm_types_p.h"
#include <QCache>
#include <QDir>
#include <QMutex>
#include <QQueue>
#include <QThread>
#include <QWaitCondition>
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);
bool isTileFileExists(OSM::TileIndex index) const;
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<OSM::TilePixmap> queue;
QCache<quint64, OSM::TilePixmap> tile_cache;
public slots:
private slots:
signals:
void tileReady(OSM::TilePixmap);
};
#endif