diff options
-rw-r--r-- | include/mbgl/map/map.hpp | 2 | ||||
-rw-r--r-- | include/mbgl/util/geo.hpp | 24 | ||||
-rw-r--r-- | include/mbgl/util/vec.hpp | 17 | ||||
-rw-r--r-- | platform/android/jni.cpp | 5 | ||||
-rw-r--r-- | platform/ios/MGLMapView.mm | 14 | ||||
-rw-r--r-- | src/mbgl/map/map.cpp | 4 | ||||
-rw-r--r-- | src/mbgl/map/transform.cpp | 18 |
7 files changed, 41 insertions, 43 deletions
diff --git a/include/mbgl/map/map.hpp b/include/mbgl/map/map.hpp index 823fcd4f21..f2e605141b 100644 --- a/include/mbgl/map/map.hpp +++ b/include/mbgl/map/map.hpp @@ -124,7 +124,7 @@ public: void setBearing(double degrees, const Duration& = Duration::zero()); void setBearing(double degrees, const PrecisionPoint&); double getBearing() const; - void resetNorth(); + void resetNorth(const Duration& = std::chrono::milliseconds(500)); // Pitch void setPitch(double pitch, const Duration& = Duration::zero()); diff --git a/include/mbgl/util/geo.hpp b/include/mbgl/util/geo.hpp index dd2b1567fc..98b5daa6f5 100644 --- a/include/mbgl/util/geo.hpp +++ b/include/mbgl/util/geo.hpp @@ -9,17 +9,7 @@ namespace mbgl { class TileID; -struct PrecisionPoint { - double x = 0; - double y = 0; - - inline PrecisionPoint(double x_ = 0, double y_ = 0) - : x(x_), y(y_) {} - - inline bool isValid() const { - return !(std::isnan(x) || std::isnan(y)); - } -}; +using PrecisionPoint = vec2<double>; struct LatLng { double latitude = 0; @@ -28,7 +18,7 @@ struct LatLng { inline LatLng(double lat = 0, double lon = 0) : latitude(lat), longitude(lon) {} - inline bool isValid() const { + inline operator bool() const { return !(std::isnan(latitude) || std::isnan(longitude)); } @@ -45,7 +35,7 @@ struct ProjectedMeters { inline ProjectedMeters(double n = 0, double e = 0) : northing(n), easting(e) {} - inline bool isValid() const { + inline operator bool() const { return !(std::isnan(northing) || std::isnan(easting)); } }; @@ -57,8 +47,8 @@ struct LatLngBounds { inline LatLngBounds(const LatLng& sw_ = {90, 180}, const LatLng& ne_ = {-90, -180}) : sw(sw_), ne(ne_) {} - inline bool isValid() const { - return sw.isValid() && ne.isValid(); + inline operator bool() const { + return sw && ne; } // Constructs a LatLngBounds object with the tile's exact boundaries. @@ -98,8 +88,8 @@ struct MetersBounds { inline MetersBounds(const ProjectedMeters& sw_, const ProjectedMeters& ne_) : sw(sw_), ne(ne_) {} - inline bool isValid() const { - return sw.isValid() && ne.isValid(); + inline operator bool() const { + return sw && ne; } }; diff --git a/include/mbgl/util/vec.hpp b/include/mbgl/util/vec.hpp index 052dffcfa1..4d2d6f6a74 100644 --- a/include/mbgl/util/vec.hpp +++ b/include/mbgl/util/vec.hpp @@ -41,13 +41,22 @@ struct vec2 { return {x * o, y * o}; } - template <typename O> - inline typename std::enable_if<std::is_arithmetic<O>::value, vec2>::type & - operator*=(O o) { + inline void operator*=(T o) { x *= o; y *= o; } + template <typename O> + inline typename std::enable_if<std::is_arithmetic<O>::value, vec2>::type + operator/(O o) const { + return {x / o, y / o}; + } + + inline void operator/=(T o) { + x /= o; + y /= o; + } + inline vec2<T> operator *(const std::array<float, 16>& matrix) { return { x * matrix[0] + y * matrix[4] + matrix[12], x * matrix[1] + y * matrix[5] + matrix[13] }; } @@ -111,7 +120,7 @@ struct vec4 { }; -typedef vec2<int16_t> Coordinate; +using Coordinate = vec2<int16_t>; } diff --git a/platform/android/jni.cpp b/platform/android/jni.cpp index 438dae153d..707b0ac9e2 100644 --- a/platform/android/jni.cpp +++ b/platform/android/jni.cpp @@ -777,11 +777,12 @@ void JNICALL nativeRotateBy(JNIEnv *env, jobject obj, jlong nativeMapViewPtr, jd } void JNICALL nativeSetBearing(JNIEnv *env, jobject obj, jlong nativeMapViewPtr, jdouble degrees, - jlong duration) { + jlong milliseconds) { mbgl::Log::Debug(mbgl::Event::JNI, "nativeSetBearing"); assert(nativeMapViewPtr != 0); NativeMapView *nativeMapView = reinterpret_cast<NativeMapView *>(nativeMapViewPtr); - nativeMapView->getMap().setBearing(degrees, std::chrono::milliseconds(duration)); + mbgl::Duration duration((std::chrono::milliseconds(milliseconds))); + nativeMapView->getMap().setBearing(degrees, duration); } void JNICALL nativeSetBearing(JNIEnv *env, jobject obj, jlong nativeMapViewPtr, jdouble degrees, diff --git a/platform/ios/MGLMapView.mm b/platform/ios/MGLMapView.mm index a194f4653f..cf68c9ae35 100644 --- a/platform/ios/MGLMapView.mm +++ b/platform/ios/MGLMapView.mm @@ -1039,7 +1039,7 @@ std::chrono::steady_clock::duration secondsAsDuration(float duration) CGFloat newRadians = radians + velocity * duration * 0.1; CGFloat newDegrees = MGLDegreesFromRadians(newRadians) * -1; - _mbglMap->setBearing(newDegrees, secondsAsDuration(duration)); + _mbglMap->setBearing(newDegrees, mbgl::Duration(secondsAsDuration(duration))); _mbglMap->setGestureInProgress(false); @@ -1555,9 +1555,7 @@ std::chrono::steady_clock::duration secondsAsDuration(float duration) - (void)resetNorthAnimated:(BOOL)animated { - CGFloat duration = (animated ? MGLAnimationDuration : 0); - - _mbglMap->setBearing(0, secondsAsDuration(duration)); + _mbglMap->setBearing(0, mbgl::Duration(secondsAsDuration(animated ? MGLAnimationDuration : 0))); } - (void)resetPosition @@ -1789,10 +1787,10 @@ mbgl::LatLngBounds MGLLatLngBoundsFromCoordinateBounds(MGLCoordinateBounds coord self.userTrackingMode = MGLUserTrackingModeFollow; } - CGFloat duration = (animated ? MGLAnimationDuration : 0); + CGFloat duration = animated ? MGLAnimationDuration : 0; + + _mbglMap->setBearing(direction, mbgl::Duration(secondsAsDuration(duration))); - _mbglMap->setBearing(direction, secondsAsDuration(duration)); - if (animated) { __weak MGLMapView *weakSelf = self; @@ -2820,7 +2818,7 @@ CLLocationCoordinate2D MGLLocationCoordinate2DFromLatLng(mbgl::LatLng latLng) if (headingDirection >= 0 && self.userTrackingMode == MGLUserTrackingModeFollowWithHeading) { - _mbglMap->setBearing(headingDirection, secondsAsDuration(MGLAnimationDuration)); + _mbglMap->setBearing(headingDirection, mbgl::Duration(secondsAsDuration(MGLAnimationDuration))); } } diff --git a/src/mbgl/map/map.cpp b/src/mbgl/map/map.cpp index 9845c89ae1..69931ed29d 100644 --- a/src/mbgl/map/map.cpp +++ b/src/mbgl/map/map.cpp @@ -315,8 +315,8 @@ double Map::getBearing() const { return -transform->getAngle() / M_PI * 180; } -void Map::resetNorth() { - transform->setAngle(0, std::chrono::milliseconds(500)); +void Map::resetNorth(const Duration& duration) { + transform->setAngle(0, duration); update(Update::Repaint); } diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp index dac4018627..b932c8cb38 100644 --- a/src/mbgl/map/transform.cpp +++ b/src/mbgl/map/transform.cpp @@ -71,7 +71,7 @@ void Transform::easeTo(const CameraOptions& options) { LatLng latLng = easeOptions.center ? *easeOptions.center : getLatLng(); double zoom = easeOptions.zoom ? *easeOptions.zoom : getZoom(); double angle = easeOptions.angle ? *easeOptions.angle : getAngle(); - if (!latLng.isValid() || std::isnan(zoom) || std::isnan(angle)) { + if (!latLng || std::isnan(zoom) || std::isnan(angle)) { return; } @@ -94,7 +94,7 @@ void Transform::easeTo(const CameraOptions& options) { } void Transform::moveBy(const PrecisionPoint& point, const Duration& duration) { - if (!point.isValid()) { + if (!point) { return; } @@ -113,7 +113,7 @@ void Transform::_moveBy(const PrecisionPoint& point, const Duration& duration) { } void Transform::setLatLng(const LatLng& latLng, const Duration& duration) { - if (!latLng.isValid()) { + if (!latLng) { return; } @@ -124,7 +124,7 @@ void Transform::setLatLng(const LatLng& latLng, const Duration& duration) { } void Transform::setLatLng(const LatLng& latLng, const PrecisionPoint& point, const Duration& duration) { - if (!latLng.isValid() || !point.isValid()) { + if (!latLng || !point) { return; } @@ -145,7 +145,7 @@ void Transform::setLatLng(const LatLng& latLng, const PrecisionPoint& point, con } void Transform::setLatLngZoom(const LatLng& latLng, double zoom, const Duration& duration) { - if (!latLng.isValid() || std::isnan(zoom)) { + if (!latLng || std::isnan(zoom)) { return; } @@ -160,7 +160,7 @@ void Transform::setLatLngZoom(const LatLng& latLng, double zoom, const Duration& #pragma mark - Zoom void Transform::scaleBy(const double ds, const PrecisionPoint& center, const Duration& duration) { - if (std::isnan(ds) || !center.isValid()) { + if (std::isnan(ds) || !center) { return; } @@ -176,7 +176,7 @@ void Transform::scaleBy(const double ds, const PrecisionPoint& center, const Dur } void Transform::setScale(const double scale, const PrecisionPoint& center, const Duration& duration) { - if (std::isnan(scale) || !center.isValid()) { + if (std::isnan(scale) || !center) { return; } @@ -306,7 +306,7 @@ void Transform::_easeTo(const CameraOptions& options, double new_scale, double n #pragma mark - Angle void Transform::rotateBy(const PrecisionPoint& first, const PrecisionPoint& second, const Duration& duration) { - if (!first.isValid() || !second.isValid()) { + if (!first || !second) { return; } @@ -346,7 +346,7 @@ void Transform::setAngle(const double new_angle, const Duration& duration) { } void Transform::setAngle(const double new_angle, const PrecisionPoint& center) { - if (std::isnan(new_angle) || !center.isValid()) { + if (std::isnan(new_angle) || !center) { return; } |