summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-10 21:56:24 +0300
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-06-20 13:01:59 +0300
commit22aa22c99c63b8a52746db1b757885e7feea7e26 (patch)
tree1ade0d12eef5a0d79d1a5c57428c1ef0875d95c3
parent350d015cc2f70d96c08285ee358def8f0a24419e (diff)
downloadqtlocation-mapboxgl-22aa22c99c63b8a52746db1b757885e7feea7e26.tar.gz
[core] UnitBezier ctor is now constexpr
-rw-r--r--include/mbgl/util/unitbezier.hpp39
-rwxr-xr-xplatform/android/src/jni.cpp4
-rw-r--r--platform/ios/src/MGLMapView.mm12
-rw-r--r--platform/macos/src/MGLMapView.mm4
4 files changed, 29 insertions, 30 deletions
diff --git a/include/mbgl/util/unitbezier.hpp b/include/mbgl/util/unitbezier.hpp
index ce3e78f3cc..3a4994917b 100644
--- a/include/mbgl/util/unitbezier.hpp
+++ b/include/mbgl/util/unitbezier.hpp
@@ -31,32 +31,31 @@ namespace mbgl {
namespace util {
struct UnitBezier {
- UnitBezier(double p1x, double p1y, double p2x, double p2y) {
- // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).
- cx = 3.0 * p1x;
- bx = 3.0 * (p2x - p1x) - cx;
- ax = 1.0 - cx - bx;
-
- cy = 3.0 * p1y;
- by = 3.0 * (p2y - p1y) - cy;
- ay = 1.0 - cy - by;
+ // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).
+ constexpr UnitBezier(double p1x, double p1y, double p2x, double p2y)
+ : cx(3.0 * p1x)
+ , bx(3.0 * (p2x - p1x) - cx)
+ , ax(1.0 - cx - bx)
+ , cy(3.0 * p1y)
+ , by(3.0 * (p2y - p1y) - cy)
+ , ay(1.0 - cy - by) {
}
- double sampleCurveX(double t) {
+ double sampleCurveX(double t) const {
// `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.
return ((ax * t + bx) * t + cx) * t;
}
- double sampleCurveY(double t) {
+ double sampleCurveY(double t) const {
return ((ay * t + by) * t + cy) * t;
}
- double sampleCurveDerivativeX(double t) {
+ double sampleCurveDerivativeX(double t) const {
return (3.0 * ax * t + 2.0 * bx) * t + cx;
}
// Given an x value, find a parametric value it came from.
- double solveCurveX(double x, double epsilon) {
+ double solveCurveX(double x, double epsilon) const {
double t0;
double t1;
double t2;
@@ -100,18 +99,18 @@ struct UnitBezier {
return t2;
}
- double solve(double x, double epsilon) {
+ double solve(double x, double epsilon) const {
return sampleCurveY(solveCurveX(x, epsilon));
}
private:
- double ax;
- double bx;
- double cx;
+ const double cx;
+ const double bx;
+ const double ax;
- double ay;
- double by;
- double cy;
+ const double cy;
+ const double by;
+ const double ay;
};
} // namespace util
diff --git a/platform/android/src/jni.cpp b/platform/android/src/jni.cpp
index a790064d53..ef92d0112e 100755
--- a/platform/android/src/jni.cpp
+++ b/platform/android/src/jni.cpp
@@ -889,7 +889,7 @@ void nativeSetVisibleCoordinateBounds(JNIEnv *env, jni::jobject* obj, jlong nati
if (duration > 0) {
animationOptions.duration.emplace(mbgl::Milliseconds(duration));
// equivalent to kCAMediaTimingFunctionDefault in iOS
- animationOptions.easing = mbgl::util::UnitBezier(0.25, 0.1, 0.25, 0.1);
+ animationOptions.easing.emplace(mbgl::util::UnitBezier { 0.25, 0.1, 0.25, 0.1 });
}
nativeMapView->getMap().easeTo(cameraOptions, animationOptions);
@@ -1054,7 +1054,7 @@ void nativeEaseTo(JNIEnv *env, jni::jobject* obj, jlong nativeMapViewPtr, jdoubl
if (!easing) {
// add a linear interpolator instead of easing
- animationOptions.easing = mbgl::util::UnitBezier(0, 0, 1, 1);
+ animationOptions.easing.emplace(mbgl::util::UnitBezier { 0, 0, 1, 1 });
}
nativeMapView->getMap().easeTo(cameraOptions, animationOptions);
diff --git a/platform/ios/src/MGLMapView.mm b/platform/ios/src/MGLMapView.mm
index 4c09894a11..b9d44a9a05 100644
--- a/platform/ios/src/MGLMapView.mm
+++ b/platform/ios/src/MGLMapView.mm
@@ -2196,8 +2196,8 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
mbgl::AnimationOptions animationOptions;
if (duration)
{
- animationOptions.duration = MGLDurationInSeconds(duration);
- animationOptions.easing = MGLUnitBezierForMediaTimingFunction(function);
+ animationOptions.duration.emplace(MGLDurationInSeconds(duration));
+ animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function));
}
if (completion)
{
@@ -2349,8 +2349,8 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
mbgl::AnimationOptions animationOptions;
if (duration > 0)
{
- animationOptions.duration = MGLDurationInSeconds(duration);
- animationOptions.easing = MGLUnitBezierForMediaTimingFunction(function);
+ animationOptions.duration.emplace(MGLDurationInSeconds(duration));
+ animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function));
}
if (completion)
{
@@ -2456,8 +2456,8 @@ mbgl::Duration MGLDurationInSeconds(NSTimeInterval duration)
mbgl::AnimationOptions animationOptions;
if (duration > 0)
{
- animationOptions.duration = MGLDurationInSeconds(duration);
- animationOptions.easing = MGLUnitBezierForMediaTimingFunction(function);
+ animationOptions.duration.emplace(MGLDurationInSeconds(duration));
+ animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function));
}
if (completion)
{
diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm
index 07b5259c7e..e330116d0a 100644
--- a/platform/macos/src/MGLMapView.mm
+++ b/platform/macos/src/MGLMapView.mm
@@ -1037,8 +1037,8 @@ public:
mbgl::CameraOptions cameraOptions = [self cameraOptionsObjectForAnimatingToCamera:camera];
mbgl::AnimationOptions animationOptions;
if (duration > 0) {
- animationOptions.duration = MGLDurationInSeconds(duration);
- animationOptions.easing = MGLUnitBezierForMediaTimingFunction(function);
+ animationOptions.duration.emplace(MGLDurationInSeconds(duration));
+ animationOptions.easing.emplace(MGLUnitBezierForMediaTimingFunction(function));
}
if (completion) {
animationOptions.transitionFinishFn = [completion]() {