diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index e160a79c73..b44f493de3 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -853,6 +853,7 @@ drape_ptr DrapeEngine::GenerateMarkRenderInfo(UserPointMar renderInfo->m_minZoom = mark->GetMinZoom(); renderInfo->m_minTitleZoom = mark->GetMinTitleZoom(); renderInfo->m_isVisible = mark->IsVisible(); + renderInfo->m_autoVisibleMinZoom = mark->GetAutoVisibleMinZoom(); renderInfo->m_pivot = mark->GetPivot(); renderInfo->m_pixelOffset = mark->GetPixelOffset(); renderInfo->m_titleDecl = mark->GetTitleDecl(); diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp index 2d15ead4c0..ada8a24dc3 100644 --- a/drape_frontend/user_mark_shapes.cpp +++ b/drape_frontend/user_mark_shapes.cpp @@ -349,7 +349,7 @@ void CacheUserMarks(ref_ptr context, TileKey const & tileKe continue; UserMarkRenderParams & renderInfo = *it->second; - if (!renderInfo.m_isVisible) + if (!renderInfo.m_isVisible && renderInfo.m_autoVisibleMinZoom > tileKey.m_zoomLevel) continue; m2::PointD const tileCenter = tileKey.GetGlobalRect().Center(); diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp index 51534d8a08..38ca36b7e1 100644 --- a/drape_frontend/user_mark_shapes.hpp +++ b/drape_frontend/user_mark_shapes.hpp @@ -8,6 +8,7 @@ #include "geometry/spline.hpp" +#include #include #include @@ -38,6 +39,7 @@ struct UserMarkRenderParams bool m_hasCreationAnimation = false; bool m_justCreated = false; bool m_isVisible = true; + int m_autoVisibleMinZoom = std::numeric_limits::max(); FeatureID m_featureId; bool m_isMarkAboveText = false; }; diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp index bd2487088d..9fa4f6fba6 100644 --- a/drape_frontend/user_marks_provider.hpp +++ b/drape_frontend/user_marks_provider.hpp @@ -64,6 +64,7 @@ public: virtual float GetDepth() const = 0; virtual DepthLayer GetDepthLayer() const = 0; virtual bool IsVisible() const = 0; + virtual int GetAutoVisibleMinZoom() const = 0; virtual drape_ptr GetTitleDecl() const = 0; virtual drape_ptr GetSymbolNames() const = 0; virtual drape_ptr GetBadgeNames() const = 0; diff --git a/map/routing_mark.hpp b/map/routing_mark.hpp index 0471394dff..0b2ee3d85d 100644 --- a/map/routing_mark.hpp +++ b/map/routing_mark.hpp @@ -205,6 +205,8 @@ enum class RoadWarningMarkType : uint8_t class RoadWarningMark : public UserMark { + int const kAutoVisibleMinZoom = 13; + public: explicit RoadWarningMark(m2::PointD const & ptOrg); @@ -227,6 +229,8 @@ public: drape_ptr GetSymbolNames() const override; + int GetAutoVisibleMinZoom() const override { return kAutoVisibleMinZoom; } + static std::string GetLocalizedRoadWarningType(RoadWarningMarkType type); private: diff --git a/map/user_mark.hpp b/map/user_mark.hpp index dc70dfa827..7f4785c08b 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -9,9 +9,10 @@ #include "base/macros.hpp" -#include "std/string.hpp" -#include "std/unique_ptr.hpp" -#include "std/utility.hpp" +#include +#include +#include +#include class UserMark : public df::UserPointMark { @@ -59,6 +60,7 @@ public: bool IsDirty() const override { return m_isDirty; } void ResetChanges() const override { m_isDirty = false; } bool IsVisible() const override { return true; } + int GetAutoVisibleMinZoom() const override { return std::numeric_limits::max(); } m2::PointD const & GetPivot() const override; m2::PointD GetPixelOffset() const override { return {}; } dp::Anchor GetAnchor() const override { return dp::Center; }