From 9cff373c8b65a2e88e20471af4f589ed786693da Mon Sep 17 00:00:00 2001 From: Viktor Govako Date: Fri, 19 Sep 2025 15:16:15 -0300 Subject: [PATCH] [drape] Refactor VisualParams. Signed-off-by: Viktor Govako --- .../drape_frontend/apply_feature_functors.cpp | 6 +- libs/drape_frontend/visual_params.cpp | 80 ++++++++----------- libs/drape_frontend/visual_params.hpp | 16 +--- 3 files changed, 39 insertions(+), 63 deletions(-) diff --git a/libs/drape_frontend/apply_feature_functors.cpp b/libs/drape_frontend/apply_feature_functors.cpp index f8e1654b2..47f2953c2 100644 --- a/libs/drape_frontend/apply_feature_functors.cpp +++ b/libs/drape_frontend/apply_feature_functors.cpp @@ -445,9 +445,11 @@ void ApplyPointFeature::ProcessPointRules(SymbolRuleProto const * symbolRule, Ca params.m_depth = PriorityToDepth(symbolRule->priority(), drule::symbol, 0); params.m_symbolName = symbolRule->name(); ASSERT_GREATER_OR_EQUAL(symbolRule->min_distance(), 0, ()); + + // Where 0.1 comes from: https://github.com/organicmaps/organicmaps/pull/649 auto const & vp = df::VisualParams::Instance(); - params.m_extendingSize = - static_cast(vp.GetVisualScale() * symbolRule->min_distance() * vp.GetPoiExtendScale()); + params.m_extendingSize = static_cast(vp.GetVisualScale() * symbolRule->min_distance() * 0.1); + params.m_posZ = m_posZ; params.m_hasArea = HasArea(); params.m_prioritized = createdByEditor; diff --git a/libs/drape_frontend/visual_params.cpp b/libs/drape_frontend/visual_params.cpp index 9182520d7..dc76216bb 100644 --- a/libs/drape_frontend/visual_params.cpp +++ b/libs/drape_frontend/visual_params.cpp @@ -1,5 +1,9 @@ #include "drape_frontend/visual_params.hpp" +#include "indexer/scales.hpp" + +#include "coding/point_coding.hpp" // kMwmPointAccuracy + #include "geometry/mercator.hpp" #include "base/assert.hpp" @@ -12,21 +16,11 @@ #include #include #include -#include namespace df { using VisualScale = std::pair; -#ifdef DEBUG -static bool g_isInited = false; -#define RISE_INITED g_isInited = true -#define ASSERT_INITED ASSERT(g_isInited, ()) -#else -#define RISE_INITED -#define ASSERT_INITED -#endif - VisualParams & VisualParams::Instance() { static VisualParams vizParams; @@ -35,7 +29,8 @@ VisualParams & VisualParams::Instance() void VisualParams::Init(double vs, uint32_t tileSize) { - ASSERT_LESS_OR_EQUAL(vs, kMaxVisualScale, ()); + CHECK(vs >= 1.0 && vs <= kMaxVisualScale, (vs)); + CHECK(tileSize >= 32, (tileSize)); VisualParams & vizParams = Instance(); vizParams.m_tileSize = tileSize; @@ -47,35 +42,34 @@ void VisualParams::Init(double vs, uint32_t tileSize) else vizParams.m_glyphVisualParams = {0.5f, 0.06f, 0.2f, 0.01f, 0.49f, 0.04f}; - RISE_INITED; + vizParams.m_isInited = true; LOG(LINFO, ("Visual scale =", vs, "; Tile size =", tileSize, "; Resources =", GetResourcePostfix(vs))); } double VisualParams::GetFontScale() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); return m_fontScale; } void VisualParams::SetFontScale(double fontScale) { - ASSERT_INITED; + ASSERT(m_isInited, ()); m_fontScale = math::Clamp(fontScale, 0.5, 2.0); } -void VisualParams::SetVisualScale(double visualScale) +void VisualParams::SetVisualScale(double vs) { - ASSERT_INITED; - ASSERT_LESS_OR_EQUAL(visualScale, kMaxVisualScale, ()); - m_visualScale = visualScale; + ASSERT(m_isInited, ()); + CHECK(vs >= 1.0 && vs <= kMaxVisualScale, (vs)); + m_visualScale = vs; - LOG(LINFO, ("Visual scale =", visualScale)); + LOG(LINFO, ("Visual scale =", vs)); } std::string const & VisualParams::GetResourcePostfix(double visualScale) { - ASSERT_INITED; static VisualScale postfixes[] = { /// @todo Not used in mobile because of minimal visual scale (@see visual_scale.hpp) {"mdpi", kMdpiScale}, @@ -103,52 +97,46 @@ std::string const & VisualParams::GetResourcePostfix(double visualScale) std::string const & VisualParams::GetResourcePostfix() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); return VisualParams::GetResourcePostfix(m_visualScale); } double VisualParams::GetVisualScale() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); return m_visualScale; } -double VisualParams::GetPoiExtendScale() const -{ - ASSERT_INITED; - return m_poiExtendScale; -} - uint32_t VisualParams::GetTileSize() const { - ASSERT_INITED; + CHECK(m_isInited, ()); return m_tileSize; } uint32_t VisualParams::GetTouchRectRadius() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); float const kRadiusInPixels = 20.0f; return static_cast(kRadiusInPixels * GetVisualScale()); } double VisualParams::GetDragThreshold() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); double const kDragThresholdInPixels = 10.0; return kDragThresholdInPixels * GetVisualScale(); } double VisualParams::GetScaleThreshold() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); double const kScaleThresholdInPixels = 2.0; return kScaleThresholdInPixels * GetVisualScale(); } VisualParams::GlyphVisualParams const & VisualParams::GetGlyphVisualParams() const { - ASSERT_INITED; + ASSERT(m_isInited, ()); return m_glyphVisualParams; } @@ -178,8 +166,7 @@ int GetTileScaleBase(ScreenBase const & s) int GetTileScaleBase(m2::RectD const & r) { - double const sz = std::max(r.SizeX(), r.SizeY()); - ASSERT_GREATER(sz, 0., ("Rect should not be a point:", r)); + double const sz = std::max(std::max(r.SizeX(), r.SizeY()), kMwmPointAccuracy); return std::max(1, math::iround(std::log2(mercator::Bounds::kRangeX / sz))); } @@ -190,7 +177,7 @@ double GetTileScaleBase(double drawScale) int GetTileScaleIncrement(uint32_t tileSize, double visualScale) { - return static_cast(std::log2(tileSize / 256.0 / visualScale)); + return math::iround(std::log2(tileSize / 256.0 / visualScale)); } int GetTileScaleIncrement() @@ -257,10 +244,18 @@ uint32_t CalculateTileSize(uint32_t screenWidth, uint32_t screenHeight) #endif } +namespace +{ +double GetDrawTileScale(double baseScale) +{ + return baseScale + GetTileScaleIncrement(); +} + int GetDrawTileScale(int baseScale, uint32_t tileSize, double visualScale) { - return std::max(1, baseScale + GetTileScaleIncrement(tileSize, visualScale)); + return baseScale + GetTileScaleIncrement(tileSize, visualScale); } +} // namespace int GetDrawTileScale(ScreenBase const & s, uint32_t tileSize, double visualScale) { @@ -272,17 +267,6 @@ int GetDrawTileScale(m2::RectD const & r, uint32_t tileSize, double visualScale) return GetDrawTileScale(GetTileScaleBase(r), tileSize, visualScale); } -int GetDrawTileScale(int baseScale) -{ - VisualParams const & p = VisualParams::Instance(); - return GetDrawTileScale(baseScale, p.GetTileSize(), p.GetVisualScale()); -} - -double GetDrawTileScale(double baseScale) -{ - return std::max(1.0, baseScale + GetTileScaleIncrement()); -} - int GetDrawTileScale(ScreenBase const & s) { VisualParams const & p = VisualParams::Instance(); diff --git a/libs/drape_frontend/visual_params.hpp b/libs/drape_frontend/visual_params.hpp index 082a9de58..ad8152306 100644 --- a/libs/drape_frontend/visual_params.hpp +++ b/libs/drape_frontend/visual_params.hpp @@ -1,15 +1,10 @@ #pragma once -#include "indexer/scales.hpp" - #include "geometry/rect2d.hpp" #include "geometry/screenbase.hpp" #include "base/macros.hpp" -#include -#include #include -#include namespace df { @@ -36,8 +31,6 @@ public: std::string const & GetResourcePostfix() const; double GetVisualScale() const; - /// This is a scale factor to decrease extending of bbox for POI icons. It could be removed with new style - double GetPoiExtendScale() const; uint32_t GetTileSize() const; /// How many pixels around touch point are used to get bookmark or POI in consideration of visual scale. @@ -62,7 +55,7 @@ public: void SetFontScale(double fontScale); // This method can be called ONLY if rendering is disabled. - void SetVisualScale(double visualScale); + void SetVisualScale(double vs); private: VisualParams() = default; @@ -71,8 +64,8 @@ private: uint32_t m_tileSize = 0; double m_visualScale = 0.0; - double m_poiExtendScale = 0.1; // Found empirically. - std::atomic m_fontScale = 1.0; + double m_fontScale = 1.0; + bool m_isInited = false; DISALLOW_COPY_AND_MOVE(VisualParams); }; @@ -89,11 +82,8 @@ double GetTileScaleBase(double drawScale); int GetTileScaleIncrement(uint32_t tileSize, double visualScale); int GetTileScaleIncrement(); -int GetDrawTileScale(int baseScale, uint32_t tileSize, double visualScale); int GetDrawTileScale(ScreenBase const & s, uint32_t tileSize, double visualScale); int GetDrawTileScale(m2::RectD const & r, uint32_t tileSize, double visualScale); -int GetDrawTileScale(int baseScale); -double GetDrawTileScale(double baseScale); int GetDrawTileScale(ScreenBase const & s); int GetDrawTileScale(m2::RectD const & r);