diff --git a/map/framework.cpp b/map/framework.cpp index e112c7be83..fd0d170655 100644 --- a/map/framework.cpp +++ b/map/framework.cpp @@ -1888,12 +1888,14 @@ void Framework::InvalidateRendering() void Framework::UpdateMinBuildingsTapZoom() { - m_minBuildingsTapZoom = feature::GetDrawableScaleRange(classif().GetTypeByPath({"building"})).first + 1; + constexpr int kMinTapZoom = 16; + m_minBuildingsTapZoom = max(kMinTapZoom, + feature::GetDrawableScaleRange(classif().GetTypeByPath({"building"})).first); } -unique_ptr Framework::FindBuildingAtPoint(m2::PointD const & mercator) const +FeatureID Framework::FindBuildingAtPoint(m2::PointD const & mercator) const { - unique_ptr feature; + FeatureID featureId; if (GetDrawScale() >= m_minBuildingsTapZoom) { constexpr int kScale = scales::GetUpperScale(); @@ -1901,13 +1903,13 @@ unique_ptr Framework::FindBuildingAtPoint(m2::PointD const & mercat m2::RectD const rect = MercatorBounds::RectByCenterXYAndSizeInMeters(mercator, kSelectRectWidthInMeters); m_model.ForEachFeature(rect, [&](FeatureType & ft) { - if (feature == nullptr && + if (!featureId.IsValid() && ft.GetFeatureType() == feature::GEOM_AREA && ftypes::IsBuildingChecker::Instance()(ft) && ft.GetLimitRect(kScale).IsPointInside(mercator) && feature::GetMinDistanceMeters(ft, mercator) == 0.0) - feature.reset(new FeatureType(ft)); + featureId = ft.GetID(); }, kScale); } - return feature; + return featureId; } df::SelectionShape::ESelectedObject Framework::OnTapEventImpl(df::TapInfo const & tapInfo, @@ -1961,11 +1963,7 @@ df::SelectionShape::ESelectedObject Framework::OnTapEventImpl(df::TapInfo const FeatureID featureTapped = tapInfo.m_featureTapped; if (!featureTapped.IsValid()) - { - unique_ptr const feature = FindBuildingAtPoint(m_currentModelView.PtoG(pxPoint2d)); - if (feature != nullptr) - featureTapped = feature->GetID(); - } + featureTapped = FindBuildingAtPoint(m_currentModelView.PtoG(pxPoint2d)); bool showMapSelection = false; if (featureTapped.IsValid()) diff --git a/map/framework.hpp b/map/framework.hpp index 9ddc8e749e..23d873ebe8 100644 --- a/map/framework.hpp +++ b/map/framework.hpp @@ -291,7 +291,7 @@ private: /// outInfo is valid only if return value is not df::SelectionShape::OBJECT_EMPTY. df::SelectionShape::ESelectedObject OnTapEventImpl(df::TapInfo const & tapInfo, place_page::Info & outInfo) const; - unique_ptr FindBuildingAtPoint(m2::PointD const & mercator) const; + FeatureID FindBuildingAtPoint(m2::PointD const & mercator) const; void UpdateMinBuildingsTapZoom(); int m_minBuildingsTapZoom;