MapView scale less detailed levels on current level feature
This commit is contained in:
@@ -66,6 +66,7 @@ QPointF MapView::center() const {
|
||||
|
||||
void MapView::setCenter(QPointF c) {
|
||||
center_ = OSM::geo2xy(c);
|
||||
checkCenter();
|
||||
updateViewRect();
|
||||
drawBackground();
|
||||
}
|
||||
@@ -100,6 +101,7 @@ void MapView::mouseMoveEvent(QMouseEvent * e) {
|
||||
if (is_pan) {
|
||||
double mins = qMin(width(), height());
|
||||
center_ -= QPointF(e->pos() - press_point) / scale_ / mins;
|
||||
checkCenter();
|
||||
press_point = e->pos();
|
||||
updateViewRect();
|
||||
drawBackground();
|
||||
@@ -133,7 +135,7 @@ void MapView::paintEvent(QPaintEvent *) {
|
||||
|
||||
|
||||
void MapView::resizeEvent(QResizeEvent *) {
|
||||
cache->setMinimumCacheSize((width() + tileSize) * (height() + tileSize) * 4);
|
||||
cache->setMinimumCacheSize((width() + tileSize) * (height() + tileSize) * 4 * 3);
|
||||
checkZoom();
|
||||
updateZoomLevel();
|
||||
updateViewRect();
|
||||
@@ -158,9 +160,10 @@ void MapView::drawBackground() {
|
||||
for (int iy = sy; iy < ey; ++iy) {
|
||||
QRectF r((ix)*ts, (iy)*ts, ts, ts);
|
||||
r.translate(-offset);
|
||||
auto tile = cache->getTile((OSM::TileIndex){zoom_level, ix, iy});
|
||||
QRectF px_rct(QPointF(), QSizeF(tileSize, tileSize));
|
||||
auto tile = cache->getTile((OSM::TileIndex){zoom_level, ix, iy}, px_rct);
|
||||
if (!tile.isEmpty()) {
|
||||
p.drawPixmap(r, tile.pixmap, QRectF(tile.pixmap.rect()));
|
||||
p.drawPixmap(r, tile.pixmap, px_rct);
|
||||
} else {
|
||||
p.fillRect(r, brush_tr);
|
||||
}
|
||||
@@ -212,6 +215,14 @@ void MapView::checkZoom() {
|
||||
}
|
||||
|
||||
|
||||
void MapView::checkCenter() {
|
||||
if (center_.x() < 0.) center_.setX(0.);
|
||||
if (center_.x() > 1.) center_.setX(1.);
|
||||
if (center_.y() < 0.) center_.setY(0.);
|
||||
if (center_.y() > 1.) center_.setY(1.);
|
||||
}
|
||||
|
||||
|
||||
void MapView::zoomLevelChanged(int new_level) {
|
||||
zoom_level = qBound(0, new_level, max_level);
|
||||
// qDebug() << "level changed" << new_level << zoom_level;
|
||||
@@ -296,7 +307,8 @@ void MapView::zoom(double factor, QPoint anchor) {
|
||||
checkZoom();
|
||||
QPointF new_center = mapToNorm(anchor);
|
||||
center_ += prev_center - new_center;
|
||||
view_rect.translate(prev_center - new_center);
|
||||
checkCenter();
|
||||
view_rect.moveCenter(center_);
|
||||
updateZoomLevel();
|
||||
drawBackground();
|
||||
}
|
||||
@@ -312,6 +324,7 @@ void MapView::zoomTo(double level) {
|
||||
|
||||
void MapView::centerTo(QPointF coord) {
|
||||
center_ = OSM::geo2xy(coord);
|
||||
checkCenter();
|
||||
updateViewRect();
|
||||
drawBackground();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user