summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzmiao <miao.zhao@mapbox.com>2019-11-14 15:21:30 +0200
committerzmiao <miao.zhao@mapbox.com>2019-11-15 15:45:07 +0200
commit179dad8b607f5d7cd1354451c0a7b4af2b088f80 (patch)
treee9c9e45ded43aef693fe8c5d6ebfbd4c5ceb45d0
parentf01969cd66196554366af1b1e02b3ef707ee0234 (diff)
downloadqtlocation-mapboxgl-179dad8b607f5d7cd1354451c0a7b4af2b088f80.tar.gz
update
This reverts commit 4c3a0d9259545e86598da3da6283251cf6821d7b.
-rw-r--r--src/mbgl/map/transform.cpp9
-rw-r--r--src/mbgl/map/transform_state.cpp61
-rw-r--r--src/mbgl/map/transform_state.hpp26
3 files changed, 63 insertions, 33 deletions
diff --git a/src/mbgl/map/transform.cpp b/src/mbgl/map/transform.cpp
index 9d76add3f1..c9d19509f4 100644
--- a/src/mbgl/map/transform.cpp
+++ b/src/mbgl/map/transform.cpp
@@ -56,8 +56,6 @@ void Transform::resize(const Size size) {
observer.onCameraWillChange(MapObserver::CameraChangeMode::Immediate);
state.setSize(size);
- state.constrain();
- state.updateMatrix();
observer.onCameraDidChange(MapObserver::CameraChangeMode::Immediate);
}
@@ -156,7 +154,6 @@ void Transform::easeTo(const CameraOptions& camera, const AnimationOptions& anim
state.setPitch(std::min(maxPitch, util::interpolate(startPitch, pitch, t)));
}
}, duration);
- state.updateMatrix();
}
/** This method implements an “optimal path” animation, as detailed in:
@@ -328,7 +325,6 @@ void Transform::flyTo(const CameraOptions &camera, const AnimationOptions &anima
state.setPitch(std::min(maxPitch, util::interpolate(startPitch, pitch, k)));
}
}, duration);
- state.updateMatrix();
}
#pragma mark - Position
@@ -404,8 +400,6 @@ double Transform::getPitch() const {
void Transform::setNorthOrientation(NorthOrientation orientation) {
state.setNorthOrientation(orientation);
- state.constrain();
- state.updateMatrix();
}
NorthOrientation Transform::getNorthOrientation() const {
@@ -416,8 +410,6 @@ NorthOrientation Transform::getNorthOrientation() const {
void Transform::setConstrainMode(mbgl::ConstrainMode mode) {
state.setConstrainMode(mode);
- state.constrain();
- state.updateMatrix();
}
ConstrainMode Transform::getConstrainMode() const {
@@ -440,7 +432,6 @@ void Transform::setProjectionMode(const ProjectionMode& options) {
state.setAxonometric(options.axonometric.value_or(state.getAxonometric()));
state.setXSkew(options.xSkew.value_or(state.getXSkew()));
state.setYSkew(options.ySkew.value_or(state.getYSkew()));
- state.updateMatrix();
}
ProjectionMode Transform::getProjectionMode() const {
diff --git a/src/mbgl/map/transform_state.cpp b/src/mbgl/map/transform_state.cpp
index 131e9b29e7..5c2ae6abad 100644
--- a/src/mbgl/map/transform_state.cpp
+++ b/src/mbgl/map/transform_state.cpp
@@ -118,6 +118,8 @@ void TransformState::updateMatrix() {
void TransformState::setSize(const Size& size_) {
size = size_;
+ constrain();
+ updateMatrix();
}
#pragma mark - Dimensions
@@ -131,6 +133,11 @@ NorthOrientation TransformState::getNorthOrientation() const {
return orientation;
}
+void TransformState::setNorthOrientation(const NorthOrientation& val) {
+ orientation = val;
+ constrain();
+}
+
double TransformState::getNorthOrientationAngle() const {
double angleOrientation = 0;
if (orientation == NorthOrientation::Rightwards) {
@@ -149,6 +156,10 @@ ConstrainMode TransformState::getConstrainMode() const {
return constrainMode;
}
+void TransformState::setConstrainMode(const ConstrainMode& val) {
+ constrainMode = val;
+ constrain();
+}
#pragma mark - ViewportMode
ViewportMode TransformState::getViewportMode() const {
@@ -166,6 +177,15 @@ CameraOptions TransformState::getCameraOptions(optional<EdgeInsets> padding) con
.withPitch(pitch * util::RAD2DEG);
}
+#pragma mark - EdgeInsets
+
+void TransformState::setEdgeInsets(const EdgeInsets& val) {
+ if (edgeInsets != val) {
+ edgeInsets = val;
+ updateMatrix();
+ }
+}
+
#pragma mark - Position
LatLng TransformState::getLatLng(LatLng::WrapMode wrapMode) const {
@@ -244,6 +264,13 @@ float TransformState::getBearing() const {
return bearing;
}
+void TransformState::setBearing(float val) {
+ if (bearing != val) {
+ bearing = val;
+ updateMatrix();
+ }
+}
+
float TransformState::getFieldOfView() const {
return fov;
}
@@ -256,6 +283,26 @@ float TransformState::getPitch() const {
return pitch;
}
+void TransformState::setPitch(float val) {
+ if (pitch != val) {
+ pitch = val;
+ updateMatrix();
+ }
+}
+
+void TransformState::setXSkew(double val) {
+ if (xSkew != val) {
+ xSkew = val;
+ updateMatrix();
+ }
+}
+
+void TransformState::setYSkew(double val) {
+ if (ySkew != val) {
+ ySkew = val;
+ updateMatrix();
+ }
+}
#pragma mark - State
bool TransformState::isChanging() const {
@@ -293,7 +340,6 @@ ScreenCoordinate TransformState::latLngToScreenCoordinate(const LatLng& latLng)
return {};
}
- // mat4 mat = coordinatePointMatrix();
vec4 p;
Point<double> pt = Projection::project(latLng, scale) / util::tileSize;
vec4 c = {{ pt.x, pt.y, 0, 1 }};
@@ -307,12 +353,6 @@ TileCoordinate TransformState::screenCoordinateToTileCoordinate(const ScreenCoor
}
float targetZ = 0;
- mat4 mat = coordinatePointMatrix();
-
- mat4 inverted;
- bool err = matrix::invert(inverted, mat);
-
- if (err) throw std::runtime_error("failed to invert coordinatePointMatrix");
double flippedY = size.height - point.y;
@@ -371,6 +411,10 @@ bool TransformState::rotatedNorth() const {
return (orientation == NO::Leftwards || orientation == NO::Rightwards);
}
+void TransformState::constrain() {
+ constrain(scale, x, y);
+ updateMatrix();
+}
void TransformState::constrain(double& scale_, double& x_, double& y_) const {
if (constrainMode == ConstrainMode::None) {
return;
@@ -419,6 +463,7 @@ void TransformState::setLatLngZoom(const LatLng& latLng, double zoom) {
0.5 * Cc * std::log((1 + f) / (1 - f)),
};
setScalePoint(newScale, point);
+ updateMatrix();
}
void TransformState::setScalePoint(const double newScale, const ScreenCoordinate &point) {
@@ -450,7 +495,7 @@ float TransformState::maxPitchScaleFactor() const {
return {};
}
auto latLng = screenCoordinateToLatLng({ 0, static_cast<float>(getSize().height) });
- // mat4 mat = coordinatePointMatrix();
+
Point<double> pt = Projection::project(latLng, scale) / util::tileSize;
vec4 p = {{ pt.x, pt.y, 0, 1 }};
vec4 topPoint;
diff --git a/src/mbgl/map/transform_state.hpp b/src/mbgl/map/transform_state.hpp
index 1b3470dc23..8e2b4b273c 100644
--- a/src/mbgl/map/transform_state.hpp
+++ b/src/mbgl/map/transform_state.hpp
@@ -20,9 +20,6 @@ class UnwrappedTileID;
class TileCoordinate;
class TransformState {
- // friend class Transform;
- // friend class RendererState;
-
public:
TransformState(ConstrainMode = ConstrainMode::HeightOnly, ViewportMode = ViewportMode::Default);
@@ -37,11 +34,11 @@ public:
// North Orientation
NorthOrientation getNorthOrientation() const;
double getNorthOrientationAngle() const;
- void setNorthOrientation(NorthOrientation val) { orientation = val; }
+ void setNorthOrientation(const NorthOrientation&);
// Constrain mode
ConstrainMode getConstrainMode() const;
- void setConstrainMode(ConstrainMode val) { constrainMode = val; }
+ void setConstrainMode(const ConstrainMode&);
// Viewport mode
ViewportMode getViewportMode() const;
@@ -50,7 +47,7 @@ public:
CameraOptions getCameraOptions(optional<EdgeInsets>) const;
EdgeInsets getEdgeInsets() const { return edgeInsets; }
- void setEdgeInsets(const EdgeInsets& val) { edgeInsets = val; }
+ void setEdgeInsets(const EdgeInsets&);
// Position
LatLng getLatLng(LatLng::WrapMode = LatLng::Unwrapped) const;
double pixel_x() const;
@@ -75,16 +72,16 @@ public:
// Rotation
float getBearing() const;
- void setBearing(float val) { bearing = val; }
+ void setBearing(float);
float getFieldOfView() const;
float getCameraToCenterDistance() const;
float getPitch() const;
- void setPitch(float val) { pitch = val; }
+ void setPitch(float);
double getXSkew() const { return xSkew; }
- void setXSkew(double val) { xSkew = val; }
+ void setXSkew(double val);
double getYSkew() const { return ySkew; }
- void setYSkew(double val) { ySkew = val; }
+ void setYSkew(double val);
bool getAxonometric() const { return axonometric; }
void setAxonometric(bool val) { axonometric = val; }
@@ -108,22 +105,19 @@ public:
double zoomScale(double zoom) const;
double scaleZoom(double scale) const;
- bool valid() const {
- return !size.isEmpty() && (scale >= min_scale && scale <= max_scale);
- }
+ bool valid() const { return !size.isEmpty() && (scale >= min_scale && scale <= max_scale); }
float getCameraToTileDistance(const UnwrappedTileID&) const;
float maxPitchScaleFactor() const;
- void constrain() { constrain(scale, x, y); }
void moveLatLng(const LatLng&, const ScreenCoordinate&);
void setLatLngZoom(const LatLng& latLng, double zoom);
- void updateMatrix();
-
private:
+ void updateMatrix();
bool rotatedNorth() const;
+ void constrain();
void constrain(double& scale, double& x, double& y) const;
// Viewport center offset, from [size.width / 2, size.height / 2], defined