summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJuha Alanen <juha.alanen@mapbox.com>2019-10-30 11:57:20 +0200
committerJuha Alanen <juha.alanen@mapbox.com>2019-11-21 12:31:34 +0200
commit2ae8e1782b503cefa798c3c2e80b44687b19bdbb (patch)
tree32abfe9e7dec7b2a765b33184b75d48dd32e536c
parent18bf745049e1df650cbd40dcfb5f36361678c7c7 (diff)
downloadqtlocation-mapboxgl-2ae8e1782b503cefa798c3c2e80b44687b19bdbb.tar.gz
[glfw] Update feature state only when the layer is visible
-rw-r--r--platform/glfw/glfw_view.cpp70
-rw-r--r--platform/glfw/glfw_view.hpp1
2 files changed, 38 insertions, 33 deletions
diff --git a/platform/glfw/glfw_view.cpp b/platform/glfw/glfw_view.cpp
index 9a2fefaade..bf235300a5 100644
--- a/platform/glfw/glfw_view.cpp
+++ b/platform/glfw/glfw_view.cpp
@@ -130,6 +130,7 @@ GLFWView::GLFWView(bool fullscreen_, bool benchmark_)
printf("- Press `B` to cycle through the color, stencil, and depth buffer\n");
printf("- Press `D` to cycle through camera bounds: inside, crossing IDL at left, crossing IDL at right, and disabled\n");
printf("- Press `T` to add custom geometry source\n");
+ printf("- Press `F` to enable feature-state demo\n");
printf("\n");
printf("- Press `1` through `6` to add increasing numbers of point annotations for testing\n");
printf("- Press `7` through `0` to add increasing numbers of shape annotations for testing\n");
@@ -606,39 +607,9 @@ void GLFWView::onMouseMove(GLFWwindow *window, double x, double y) {
view->lastX = x;
view->lastY = y;
- auto &style = view->map->getStyle();
- if (style.getLayer("state-fills")) {
- auto screenCoordinate = mbgl::ScreenCoordinate{view->lastX, view->lastY};
- const mbgl::RenderedQueryOptions queryOptions({{{"state-fills"}}, {}});
- auto result = view->rendererFrontend->getRenderer()->queryRenderedFeatures(screenCoordinate, queryOptions);
- using namespace mbgl;
- FeatureState newState;
-
- if (result.size() > 0) {
- FeatureIdentifier id = result[0].id;
- optional<std::string> idStr = featureIDtoString(id);
-
- if (idStr) {
- if (view->featureID && (*view->featureID != *idStr)) {
- newState["hover"] = false;
- view->rendererFrontend->getRenderer()->setFeatureState("states", {}, *view->featureID, newState);
- view->featureID = nullopt;
- }
-
- if (!view->featureID) {
- newState["hover"] = true;
- view->featureID = featureIDtoString(id);
- view->rendererFrontend->getRenderer()->setFeatureState("states", {}, *view->featureID, newState);
- }
- }
- } else {
- if (view->featureID) {
- newState["hover"] = false;
- view->rendererFrontend->getRenderer()->setFeatureState("states", {}, *view->featureID, newState);
- view->featureID = nullopt;
- }
- }
- view->invalidate();
+ auto layer = view->map->getStyle().getLayer("state-fills");
+ if (layer && layer->getVisibility() == mbgl::style::VisibilityType::Visible) {
+ view->updateFeatureState(window);
}
}
@@ -810,3 +781,36 @@ void GLFWView::toggleCustomSource() {
mbgl::style::VisibilityType::None : mbgl::style::VisibilityType::Visible);
}
}
+
+void GLFWView::updateFeatureState(GLFWwindow *window_) {
+ auto *view = reinterpret_cast<GLFWView *>(glfwGetWindowUserPointer(window_));
+ auto screenCoordinate = mbgl::ScreenCoordinate{view->lastX, view->lastY};
+ const mbgl::RenderedQueryOptions queryOptions({{{"state-fills"}}, {}});
+ auto result = view->rendererFrontend->getRenderer()->queryRenderedFeatures(screenCoordinate, queryOptions);
+ using namespace mbgl;
+ FeatureState newState;
+
+ if (!result.empty()) {
+ FeatureIdentifier id = result[0].id;
+ optional<std::string> idStr = featureIDtoString(id);
+
+ if (idStr) {
+ if (view->featureID && (*view->featureID != *idStr)) {
+ newState["hover"] = false;
+ view->rendererFrontend->getRenderer()->setFeatureState("states", {}, *view->featureID, newState);
+ view->featureID = nullopt;
+ }
+
+ if (!view->featureID) {
+ newState["hover"] = true;
+ view->featureID = featureIDtoString(id);
+ view->rendererFrontend->getRenderer()->setFeatureState("states", {}, *view->featureID, newState);
+ }
+ }
+ } else if (view->featureID) {
+ newState["hover"] = false;
+ view->rendererFrontend->getRenderer()->setFeatureState("states", {}, *view->featureID, newState);
+ view->featureID = nullopt;
+ }
+ view->invalidate();
+}
diff --git a/platform/glfw/glfw_view.hpp b/platform/glfw/glfw_view.hpp
index dbe6ceb046..015c67aee0 100644
--- a/platform/glfw/glfw_view.hpp
+++ b/platform/glfw/glfw_view.hpp
@@ -87,6 +87,7 @@ private:
void addAnimatedAnnotation();
void updateAnimatedAnnotations();
void toggleCustomSource();
+ void updateFeatureState(GLFWwindow *window);
void clearAnnotations();
void popAnnotation();