[drape] Refactor VisualParams.

Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
Viktor Govako
2025-09-19 15:16:15 -03:00
committed by Konstantin Pastbin
parent 4cb6e65e81
commit c968d79f4f
3 changed files with 51 additions and 60 deletions

View File

@@ -525,9 +525,11 @@ void ApplyPointFeature::ProcessPointRules(SymbolRuleProto const * symbolRule, Ca
params.m_depth = PriorityToDepth(symbolRule->priority(), drule::symbol, 0); params.m_depth = PriorityToDepth(symbolRule->priority(), drule::symbol, 0);
params.m_symbolName = symbolRule->name(); params.m_symbolName = symbolRule->name();
ASSERT_GREATER_OR_EQUAL(symbolRule->min_distance(), 0, ()); 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(); auto const & vp = df::VisualParams::Instance();
params.m_extendingSize = params.m_extendingSize = static_cast<uint32_t>(vp.GetVisualScale() * symbolRule->min_distance() * 0.1);
static_cast<uint32_t>(vp.GetVisualScale() * symbolRule->min_distance() * vp.GetPoiExtendScale());
params.m_posZ = m_posZ; params.m_posZ = m_posZ;
params.m_hasArea = HasArea(); params.m_hasArea = HasArea();
params.m_prioritized = createdByEditor; params.m_prioritized = createdByEditor;

View File

@@ -1,5 +1,9 @@
#include "drape_frontend/visual_params.hpp" #include "drape_frontend/visual_params.hpp"
#include "indexer/scales.hpp"
#include "coding/point_coding.hpp" // kMwmPointAccuracy
#include "geometry/mercator.hpp" #include "geometry/mercator.hpp"
#include "base/assert.hpp" #include "base/assert.hpp"
@@ -12,21 +16,11 @@
#include <algorithm> #include <algorithm>
#include <cmath> #include <cmath>
#include <limits> #include <limits>
#include <utility>
namespace df namespace df
{ {
using VisualScale = std::pair<std::string, double>; using VisualScale = std::pair<std::string, double>;
#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() VisualParams & VisualParams::Instance()
{ {
static VisualParams vizParams; static VisualParams vizParams;
@@ -35,7 +29,8 @@ VisualParams & VisualParams::Instance()
void VisualParams::Init(double vs, uint32_t tileSize) 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(); VisualParams & vizParams = Instance();
vizParams.m_tileSize = tileSize; vizParams.m_tileSize = tileSize;
@@ -47,35 +42,34 @@ void VisualParams::Init(double vs, uint32_t tileSize)
else else
vizParams.m_glyphVisualParams = {0.5f, 0.06f, 0.2f, 0.01f, 0.49f, 0.04f}; 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))); LOG(LINFO, ("Visual scale =", vs, "; Tile size =", tileSize, "; Resources =", GetResourcePostfix(vs)));
} }
double VisualParams::GetFontScale() const double VisualParams::GetFontScale() const
{ {
ASSERT_INITED; ASSERT(m_isInited, ());
return m_fontScale; return m_fontScale;
} }
void VisualParams::SetFontScale(double fontScale) void VisualParams::SetFontScale(double fontScale)
{ {
ASSERT_INITED; ASSERT(m_isInited, ());
m_fontScale = math::Clamp(fontScale, 0.5, 2.0); m_fontScale = math::Clamp(fontScale, 0.5, 2.0);
} }
void VisualParams::SetVisualScale(double visualScale) void VisualParams::SetVisualScale(double vs)
{ {
ASSERT_INITED; ASSERT(m_isInited, ());
ASSERT_LESS_OR_EQUAL(visualScale, kMaxVisualScale, ()); CHECK(vs >= 1.0 && vs <= kMaxVisualScale, (vs));
m_visualScale = visualScale; m_visualScale = vs;
LOG(LINFO, ("Visual scale =", visualScale)); LOG(LINFO, ("Visual scale =", vs));
} }
std::string const & VisualParams::GetResourcePostfix(double visualScale) std::string const & VisualParams::GetResourcePostfix(double visualScale)
{ {
ASSERT_INITED;
static VisualScale postfixes[] = { static VisualScale postfixes[] = {
/// @todo Not used in mobile because of minimal visual scale (@see visual_scale.hpp) /// @todo Not used in mobile because of minimal visual scale (@see visual_scale.hpp)
{"mdpi", kMdpiScale}, {"mdpi", kMdpiScale},
@@ -103,52 +97,61 @@ std::string const & VisualParams::GetResourcePostfix(double visualScale)
std::string const & VisualParams::GetResourcePostfix() const std::string const & VisualParams::GetResourcePostfix() const
{ {
ASSERT_INITED; ASSERT(m_isInited, ());
return VisualParams::GetResourcePostfix(m_visualScale); return VisualParams::GetResourcePostfix(m_visualScale);
} }
double VisualParams::GetVisualScale() const double VisualParams::GetVisualScale() const
{ {
ASSERT_INITED; ASSERT(m_isInited, ());
return m_visualScale; return m_visualScale;
} }
double VisualParams::GetPoiExtendScale() const
{
ASSERT_INITED;
return m_poiExtendScale;
}
uint32_t VisualParams::GetTileSize() const uint32_t VisualParams::GetTileSize() const
{ {
ASSERT_INITED; CHECK(m_isInited, ());
return m_tileSize; return m_tileSize;
} }
uint32_t VisualParams::GetTouchRectRadius() const uint32_t VisualParams::GetTouchRectRadius() const
{ {
<<<<<<< HEAD
ASSERT_INITED; ASSERT_INITED;
float constexpr kRadiusInPixels = 20.0f; float constexpr kRadiusInPixels = 20.0f;
=======
ASSERT(m_isInited, ());
float const kRadiusInPixels = 20.0f;
>>>>>>> 9cff373c8 ([drape] Refactor VisualParams.)
return static_cast<uint32_t>(kRadiusInPixels * GetVisualScale()); return static_cast<uint32_t>(kRadiusInPixels * GetVisualScale());
} }
double VisualParams::GetDragThreshold() const double VisualParams::GetDragThreshold() const
{ {
<<<<<<< HEAD
ASSERT_INITED; ASSERT_INITED;
double constexpr kDragThresholdInPixels = 10.0; double constexpr kDragThresholdInPixels = 10.0;
=======
ASSERT(m_isInited, ());
double const kDragThresholdInPixels = 10.0;
>>>>>>> 9cff373c8 ([drape] Refactor VisualParams.)
return kDragThresholdInPixels * GetVisualScale(); return kDragThresholdInPixels * GetVisualScale();
} }
double VisualParams::GetScaleThreshold() const double VisualParams::GetScaleThreshold() const
{ {
<<<<<<< HEAD
ASSERT_INITED; ASSERT_INITED;
double constexpr kScaleThresholdInPixels = 2.0; double constexpr kScaleThresholdInPixels = 2.0;
=======
ASSERT(m_isInited, ());
double const kScaleThresholdInPixels = 2.0;
>>>>>>> 9cff373c8 ([drape] Refactor VisualParams.)
return kScaleThresholdInPixels * GetVisualScale(); return kScaleThresholdInPixels * GetVisualScale();
} }
VisualParams::GlyphVisualParams const & VisualParams::GetGlyphVisualParams() const VisualParams::GlyphVisualParams const & VisualParams::GetGlyphVisualParams() const
{ {
ASSERT_INITED; ASSERT(m_isInited, ());
return m_glyphVisualParams; return m_glyphVisualParams;
} }
@@ -178,8 +181,7 @@ int GetTileScaleBase(ScreenBase const & s)
int GetTileScaleBase(m2::RectD const & r) int GetTileScaleBase(m2::RectD const & r)
{ {
double const sz = std::max(r.SizeX(), r.SizeY()); double const sz = std::max(std::max(r.SizeX(), r.SizeY()), kMwmPointAccuracy);
ASSERT_GREATER(sz, 0., ("Rect should not be a point:", r));
return std::max(1, math::iround(std::log2(mercator::Bounds::kRangeX / sz))); return std::max(1, math::iround(std::log2(mercator::Bounds::kRangeX / sz)));
} }
@@ -190,7 +192,7 @@ double GetTileScaleBase(double drawScale)
int GetTileScaleIncrement(uint32_t tileSize, double visualScale) int GetTileScaleIncrement(uint32_t tileSize, double visualScale)
{ {
return static_cast<int>(std::log2(tileSize / 256.0 / visualScale)); return math::iround(std::log2(tileSize / 256.0 / visualScale));
} }
int GetTileScaleIncrement() int GetTileScaleIncrement()
@@ -257,10 +259,18 @@ uint32_t CalculateTileSize(uint32_t screenWidth, uint32_t screenHeight)
#endif #endif
} }
namespace
{
double GetDrawTileScale(double baseScale)
{
return baseScale + GetTileScaleIncrement();
}
int GetDrawTileScale(int baseScale, uint32_t tileSize, double visualScale) 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) int GetDrawTileScale(ScreenBase const & s, uint32_t tileSize, double visualScale)
{ {
@@ -272,17 +282,6 @@ int GetDrawTileScale(m2::RectD const & r, uint32_t tileSize, double visualScale)
return GetDrawTileScale(GetTileScaleBase(r), tileSize, 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) int GetDrawTileScale(ScreenBase const & s)
{ {
VisualParams const & p = VisualParams::Instance(); VisualParams const & p = VisualParams::Instance();

View File

@@ -1,15 +1,10 @@
#pragma once #pragma once
#include "indexer/scales.hpp"
#include "geometry/rect2d.hpp" #include "geometry/rect2d.hpp"
#include "geometry/screenbase.hpp" #include "geometry/screenbase.hpp"
#include "base/macros.hpp" #include "base/macros.hpp"
#include <atomic>
#include <cstdint>
#include <string> #include <string>
#include <vector>
namespace df namespace df
{ {
@@ -36,8 +31,6 @@ public:
std::string const & GetResourcePostfix() const; std::string const & GetResourcePostfix() const;
double GetVisualScale() 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; uint32_t GetTileSize() const;
/// How many pixels around touch point are used to get bookmark or POI in consideration of visual scale. /// 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); void SetFontScale(double fontScale);
// This method can be called ONLY if rendering is disabled. // This method can be called ONLY if rendering is disabled.
void SetVisualScale(double visualScale); void SetVisualScale(double vs);
private: private:
VisualParams() = default; VisualParams() = default;
@@ -71,8 +64,8 @@ private:
uint32_t m_tileSize = 0; uint32_t m_tileSize = 0;
double m_visualScale = 0.0; double m_visualScale = 0.0;
double m_poiExtendScale = 0.1; // Found empirically. double m_fontScale = 1.0;
std::atomic<double> m_fontScale = 1.0; bool m_isInited = false;
DISALLOW_COPY_AND_MOVE(VisualParams); DISALLOW_COPY_AND_MOVE(VisualParams);
}; };
@@ -89,11 +82,8 @@ double GetTileScaleBase(double drawScale);
int GetTileScaleIncrement(uint32_t tileSize, double visualScale); int GetTileScaleIncrement(uint32_t tileSize, double visualScale);
int GetTileScaleIncrement(); int GetTileScaleIncrement();
int GetDrawTileScale(int baseScale, uint32_t tileSize, double visualScale);
int GetDrawTileScale(ScreenBase const & s, 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(m2::RectD const & r, uint32_t tileSize, double visualScale);
int GetDrawTileScale(int baseScale);
double GetDrawTileScale(double baseScale);
int GetDrawTileScale(ScreenBase const & s); int GetDrawTileScale(ScreenBase const & s);
int GetDrawTileScale(m2::RectD const & r); int GetDrawTileScale(m2::RectD const & r);