diff options
author | zmiao <miao.zhao@mapbox.com> | 2019-11-14 15:21:30 +0200 |
---|---|---|
committer | zmiao <miao.zhao@mapbox.com> | 2019-11-15 15:45:07 +0200 |
commit | 179dad8b607f5d7cd1354451c0a7b4af2b088f80 (patch) | |
tree | e9c9e45ded43aef693fe8c5d6ebfbd4c5ceb45d0 | |
parent | f01969cd66196554366af1b1e02b3ef707ee0234 (diff) | |
download | qtlocation-mapboxgl-179dad8b607f5d7cd1354451c0a7b4af2b088f80.tar.gz |
update
This reverts commit 4c3a0d9259545e86598da3da6283251cf6821d7b.
-rw-r--r-- | src/mbgl/map/transform.cpp | 9 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.cpp | 61 | ||||
-rw-r--r-- | src/mbgl/map/transform_state.hpp | 26 |
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 |