mirror of
https://codeberg.org/comaps/comaps
synced 2025-12-19 04:53:36 +00:00
[drape] Refactor VisualParams.
Signed-off-by: Viktor Govako <viktor.govako@gmail.com>
This commit is contained in:
@@ -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<uint32_t>(vp.GetVisualScale() * symbolRule->min_distance() * vp.GetPoiExtendScale());
|
||||
params.m_extendingSize = static_cast<uint32_t>(vp.GetVisualScale() * symbolRule->min_distance() * 0.1);
|
||||
|
||||
params.m_posZ = m_posZ;
|
||||
params.m_hasArea = HasArea();
|
||||
params.m_prioritized = createdByEditor;
|
||||
|
||||
@@ -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 <algorithm>
|
||||
#include <cmath>
|
||||
#include <limits>
|
||||
#include <utility>
|
||||
|
||||
namespace df
|
||||
{
|
||||
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()
|
||||
{
|
||||
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<uint32_t>(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<int>(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();
|
||||
|
||||
@@ -1,15 +1,10 @@
|
||||
#pragma once
|
||||
#include "indexer/scales.hpp"
|
||||
|
||||
#include "geometry/rect2d.hpp"
|
||||
#include "geometry/screenbase.hpp"
|
||||
|
||||
#include "base/macros.hpp"
|
||||
|
||||
#include <atomic>
|
||||
#include <cstdint>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
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<double> 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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user