summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/mbgl/map/map.hpp2
-rw-r--r--include/mbgl/util/geo.hpp24
-rw-r--r--include/mbgl/util/vec.hpp17
-rw-r--r--platform/android/jni.cpp5
-rw-r--r--platform/ios/MGLMapView.mm14
-rw-r--r--src/mbgl/map/map.cpp4
-rw-r--r--src/mbgl/map/transform.cpp18
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;
}