diff options
author | Konstantin Käfer <mail@kkaefer.com> | 2014-01-16 13:53:10 +0100 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2014-01-16 13:53:10 +0100 |
commit | c01719bc04c759d66be32d534d03057366c7f1b1 (patch) | |
tree | d361458f6e1a8b4eda86a509f244dd52f243119b /src | |
parent | 8fd762b5f3c437beee60c7124e30f6994a6fcb3a (diff) | |
download | qtlocation-mapboxgl-c01719bc04c759d66be32d534d03057366c7f1b1.tar.gz |
make bundle on mac os x and persist settings
Diffstat (limited to 'src')
-rw-r--r-- | src/map/map.cpp | 62 | ||||
-rw-r--r-- | src/map/transform.cpp | 22 |
2 files changed, 61 insertions, 23 deletions
diff --git a/src/map/map.cpp b/src/map/map.cpp index 5f9e0b7eda..4c05b8f3dc 100644 --- a/src/map/map.cpp +++ b/src/map/map.cpp @@ -10,14 +10,12 @@ using namespace llmr; -map::map() - : transform(new class transform()), +map::map(class settings *settings) + : settings(settings), + transform(new class transform()), painter(new class painter(transform)), min_zoom(0), max_zoom(14) { - - // transform->setLonLat(13, 50); - // transform->setZoom(3); } map::~map() { @@ -28,45 +26,77 @@ void map::setup() { painter->setup(); } +void map::loadSettings() { + transform->setAngle(settings->angle); + transform->setScale(settings->scale); + transform->setLonLat(settings->longitude, settings->latitude); + update(); +} + void map::resize(uint32_t width, uint32_t height) { transform->width = width; transform->height = height; - updateTiles(); - platform::restart(this); + update(); } void map::moveBy(double dx, double dy) { transform->moveBy(dx, dy); - updateTiles(); - platform::restart(this); + update(); + + transform->getLonLat(settings->longitude, settings->latitude); + settings->save(); } void map::scaleBy(double ds, double cx, double cy) { transform->scaleBy(ds, cx, cy); - updateTiles(); - platform::restart(this); + update(); + + transform->getLonLat(settings->longitude, settings->latitude); + settings->scale = transform->getScale(); + settings->save(); } void map::rotateBy(double cx, double cy, double sx, double sy, double ex, double ey) { transform->rotateBy(cx, cy, sx, sy, ex, ey); - updateTiles(); - platform::restart(this); + update(); + + settings->angle = transform->getAngle(); + settings->save(); } void map::resetNorth() { transform->setAngle(0); - updateTiles(); - platform::restart(this); + update(); + + settings->angle = transform->getAngle(); + settings->save(); } void map::resetPosition() { transform->setAngle(0); transform->setLonLat(0, 0); transform->setZoom(0); + update(); + + transform->getLonLat(settings->longitude, settings->latitude); + settings->scale = transform->getScale(); + settings->angle = transform->getAngle(); + settings->save(); +} + +void map::toggleDebug() { + settings->debug = !settings->debug; + update(); + + settings->save(); +} + +void map::update() { updateTiles(); platform::restart(this); } + tile::ptr map::hasTile(const tile_id& id) { for (tile::ptr& tile : tiles) { if (tile->id == id) { @@ -238,7 +268,7 @@ bool map::render() { void map::tileLoaded(tile::ptr tile) { // std::cerr << "loaded " << tile->toString() << std::endl; - platform::restart(this); + update(); } void map::tileFailed(tile::ptr tile) { diff --git a/src/map/transform.cpp b/src/map/transform.cpp index d7c189003b..3c028be149 100644 --- a/src/map/transform.cpp +++ b/src/map/transform.cpp @@ -36,21 +36,22 @@ void transform::moveBy(double dx, double dy) { void transform::scaleBy(double ds, double cx, double cy) { // clamp scale to min/max values - const double new_scale = scale * ds; + double new_scale = scale * ds; if (new_scale < min_scale) { ds = min_scale / scale; + new_scale = min_scale; } else if (new_scale > max_scale) { ds = max_scale / scale; + new_scale = max_scale; } + setScale(new_scale); + + // Correct for non-center scaling location. const double dx = (cx - width / 2) * (1.0 - ds); const double dy = (cy - height / 2) * (1.0 - ds); - const double fx = cos(angle) * dx + sin(angle) * dy; - const double fy = cos(angle) * dy + sin(-angle) * dx; - - scale *= ds; - x = (x * ds) + fx; - y = (y * ds) + fy; + x += cos(angle) * dx + sin(angle) * dy; + y += cos(angle) * dy + sin(-angle) * dx; } @@ -154,6 +155,13 @@ int32_t transform::getZoom() const { return floor(log(scale) / M_LN2); } +double transform::getScale() const { + return scale; +} + +double transform::getAngle() const { + return angle; +} void transform::mapCornersToBox(uint32_t z, box& b) const { const double ref_scale = pow(2, z); |