From e6aa10e5a3c2b4d946656e0678d66cc9bd123b92 Mon Sep 17 00:00:00 2001 From: Konstantin Pastbin Date: Sat, 7 Oct 2023 19:50:03 +0300 Subject: [PATCH] [drape] Fix the ruler to display scales less than 10m on z20 Signed-off-by: Konstantin Pastbin --- drape_frontend/gui/ruler_helper.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/drape_frontend/gui/ruler_helper.cpp b/drape_frontend/gui/ruler_helper.cpp index ff1d02a635..d30be8591b 100644 --- a/drape_frontend/gui/ruler_helper.cpp +++ b/drape_frontend/gui/ruler_helper.cpp @@ -20,7 +20,7 @@ namespace gui namespace { int constexpr kMinPixelWidth = 60; -int constexpr kMinMetersWidth = 10; +int constexpr kMinMetersWidth = 5; int constexpr kMaxMetersWidth = 1000000; int constexpr kMinUnitValue = -1; @@ -72,6 +72,9 @@ UnitValue g_arrYards[] = { { "500 mi", 500 * 1760 } }; +// TODO: fix ruler text to the current zoom level, i.e. make it 100m for z16 always +// (ruler length will vary still). It'll make debugging and user support easier as +// we'll be able to tell zoom level of a screenshot by looking at the ruler. UnitValue g_arrMeters[] = { { "1 m", 1 }, { "2 m", 2 }, @@ -120,12 +123,12 @@ void RulerHelper::Update(ScreenBase const & screen) double metersDiff = CalcMetersDiff(distanceInMeters); bool const higherThanMax = metersDiff > kMaxMetersWidth; - bool const lessThanMin = metersDiff < kMinMetersWidth; + ASSERT_GREATER_OR_EQUAL(metersDiff, kMinMetersWidth, ()); m_pixelLength = static_cast(minPxWidth); if (higherThanMax) m_pixelLength = static_cast(minPxWidth) * 3.0f / 2.0f; - else if (!lessThanMin) + else { double const a = ang::AngleTo(pt1, pt0); pt0 = mercator::GetSmPoint(pt1, cos(a) * metersDiff, sin(a) * metersDiff); @@ -238,6 +241,7 @@ double RulerHelper::CalcMetersDiff(double value) if (arrU[0].m_i > v) { m_rangeIndex = kMinUnitValue; + // TODO: "< X" ruler text seems to be never used. m_rulerText = std::string("< ") + arrU[0].m_s; result = kMinMetersWidth - 1.0; }