Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-11-24 03:57:09 +0300
committerRoman Kuznetsov <r.kuznetsow@gmail.com>2017-11-28 16:47:49 +0300
commit1966d21f914b1655840459ac9a501494e0ce0563 (patch)
treeadc0e793fd3264c145bb164b134e3f383a6b2332 /drape_frontend
parent6482843cb0afec52d8cfd057b21788b6008666cc (diff)
New transit mark implementation.
Diffstat (limited to 'drape_frontend')
-rw-r--r--drape_frontend/apply_feature_functors.cpp7
-rw-r--r--drape_frontend/colored_symbol_shape.cpp5
-rw-r--r--drape_frontend/drape_engine.cpp3
-rw-r--r--drape_frontend/poi_symbol_shape.cpp1
-rwxr-xr-xdrape_frontend/render_group.cpp2
-rw-r--r--drape_frontend/route_renderer.cpp1
-rw-r--r--drape_frontend/route_renderer.hpp1
-rw-r--r--drape_frontend/rule_drawer.cpp1
-rw-r--r--drape_frontend/shaders/shader_index.txt2
-rw-r--r--drape_frontend/shape_view_params.hpp2
-rw-r--r--drape_frontend/text_shape.cpp17
-rw-r--r--drape_frontend/text_shape.hpp3
-rw-r--r--drape_frontend/user_mark_shapes.cpp148
-rw-r--r--drape_frontend/user_mark_shapes.hpp7
-rw-r--r--drape_frontend/user_marks_provider.hpp13
15 files changed, 146 insertions, 67 deletions
diff --git a/drape_frontend/apply_feature_functors.cpp b/drape_frontend/apply_feature_functors.cpp
index 13b1c95244..fa55f4dfd2 100644
--- a/drape_frontend/apply_feature_functors.cpp
+++ b/drape_frontend/apply_feature_functors.cpp
@@ -603,8 +603,8 @@ void ApplyPointFeature::Finish(ref_ptr<dp::TextureManager> texMng)
textParams.m_specialDisplacement = specialDisplacementMode ? SpecialDisplacement::SpecialMode
: SpecialDisplacement::None;
textParams.m_specialPriority = specialModePriority;
- m_insertShape(make_unique_dp<TextShape>(m_centerPoint, textParams, m_tileKey,
- hasPOI, symbolSize,
+ textParams.m_startOverlayRank = hasPOI ? dp::OverlayRank1 : dp::OverlayRank0;
+ m_insertShape(make_unique_dp<TextShape>(m_centerPoint, textParams, m_tileKey, symbolSize,
dp::Center /* symbolAnchor */, 0 /* textIndex */));
}
}
@@ -989,6 +989,7 @@ void ApplyLineFeatureAdditional::GetRoadShieldsViewParams(ref_ptr<dp::TextureMan
textParams.m_titleDecl.m_primaryOptional = false;
textParams.m_titleDecl.m_secondaryOptional = false;
textParams.m_extendingSize = 0;
+ textParams.m_startOverlayRank = dp::OverlayRank1;
TextLayout textLayout;
textLayout.Init(strings::MakeUniString(roadNumber), font.m_size, font.m_isSdf, texMng);
@@ -1188,7 +1189,7 @@ void ApplyLineFeatureAdditional::Finish(ref_ptr<dp::TextureManager> texMng,
if (!CheckShieldsNearby(shieldPos, shieldPixelSize, scaledMinDistance, generatedShieldRects))
continue;
- m_insertShape(make_unique_dp<TextShape>(shieldPos, textParams, m_tileKey, true /* hasPOI */,
+ m_insertShape(make_unique_dp<TextShape>(shieldPos, textParams, m_tileKey,
m2::PointF(0.0f, 0.0f) /* symbolSize */,
dp::Center /* symbolAnchor */, textIndex));
if (IsColoredRoadShield(shield))
diff --git a/drape_frontend/colored_symbol_shape.cpp b/drape_frontend/colored_symbol_shape.cpp
index 82b2453099..7ba174faef 100644
--- a/drape_frontend/colored_symbol_shape.cpp
+++ b/drape_frontend/colored_symbol_shape.cpp
@@ -235,6 +235,8 @@ void ColoredSymbolShape::Draw(ref_ptr<dp::Batcher> batcher,
make_unique_dp<dp::SquareHandle>(overlayId, m_params.m_anchor, m_point, pixelSize,
m_params.m_offset, GetOverlayPriority(), true /* isBound */,
debugName, true /* isBillboard */) : nullptr;
+ if (m_needOverlay && m_params.m_specialDisplacement == SpecialDisplacement::UserMark)
+ handle->SetUserMarkOverlay(true);
auto state = CreateGLState(gpu::COLORED_SYMBOL_PROGRAM, m_params.m_depthLayer);
state.SetProgram3dIndex(gpu::COLORED_SYMBOL_BILLBOARD_PROGRAM);
@@ -252,6 +254,9 @@ uint64_t ColoredSymbolShape::GetOverlayPriority() const
if (m_params.m_specialDisplacement == SpecialDisplacement::SpecialMode)
return dp::CalculateSpecialModePriority(m_params.m_specialPriority);
+ if (m_params.m_specialDisplacement == SpecialDisplacement::UserMark)
+ return dp::CalculateUserMarkPriority(m_params.m_minVisibleScale, m_params.m_specialPriority);
+
return dp::CalculateOverlayPriority(m_params.m_minVisibleScale, m_params.m_rank, m_params.m_depth);
}
} // namespace df
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index e0b4d183a2..c2c311fa06 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -239,9 +239,10 @@ void DrapeEngine::UpdateUserMarksGroup(MarkGroupID groupId, UserMarksProvider *
renderInfo->m_isVisible = mark->IsVisible();
renderInfo->m_pivot = mark->GetPivot();
renderInfo->m_pixelOffset = mark->GetPixelOffset();
- renderInfo->m_symbolName = mark->GetSymbolName();
renderInfo->m_titleDecl = mark->GetTitleDecl();
renderInfo->m_symbolSizes = mark->GetSymbolSizes();
+ renderInfo->m_symbolNames = mark->GetSymbolNames();
+ renderInfo->m_coloredSymbols = mark->GetColoredSymbols();
renderInfo->m_hasSymbolPriority = mark->HasSymbolPriority();
renderInfo->m_hasTitlePriority = mark->HasTitlePriority();
renderInfo->m_priority = mark->GetPriority();
diff --git a/drape_frontend/poi_symbol_shape.cpp b/drape_frontend/poi_symbol_shape.cpp
index 792babdf29..fb4ec6ea79 100644
--- a/drape_frontend/poi_symbol_shape.cpp
+++ b/drape_frontend/poi_symbol_shape.cpp
@@ -157,6 +157,7 @@ drape_ptr<dp::OverlayHandle> PoiSymbolShape::CreateOverlayHandle(m2::PointF cons
handle->SetExtendingSize(m_params.m_extendingSize);
if (m_params.m_specialDisplacement == SpecialDisplacement::UserMark)
handle->SetUserMarkOverlay(true);
+ handle->SetOverlayRank(m_params.m_startOverlayRank);
return handle;
}
diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp
index 5f807984c7..64e16d9931 100755
--- a/drape_frontend/render_group.cpp
+++ b/drape_frontend/render_group.cpp
@@ -101,7 +101,7 @@ void RenderGroup::Render(ScreenBase const & screen)
int const programIndex = m_state.GetProgramIndex();
int const program3dIndex = m_state.GetProgram3dIndex();
- if (IsOverlay())
+ if (IsOverlay() || GetDepthLayer(m_state) == RenderState::TransitMarkLayer)
{
if (programIndex == gpu::COLORED_SYMBOL_PROGRAM ||
programIndex == gpu::COLORED_SYMBOL_BILLBOARD_PROGRAM)
diff --git a/drape_frontend/route_renderer.cpp b/drape_frontend/route_renderer.cpp
index 8f1e86e219..38880f61b8 100644
--- a/drape_frontend/route_renderer.cpp
+++ b/drape_frontend/route_renderer.cpp
@@ -29,7 +29,6 @@ std::string const kRouteArrowsMaskBicycle = "RouteArrowsMaskBicycle";
std::string const kRouteMaskPedestrian = "RouteMaskPedestrian";
// TODO(@darina) Use separate colors.
-std::string const kGateColor = "Route";
std::string const kTransitOutlineColor = "RouteMarkPrimaryTextOutline";
namespace
diff --git a/drape_frontend/route_renderer.hpp b/drape_frontend/route_renderer.hpp
index f197e92a3d..bf49fd1707 100644
--- a/drape_frontend/route_renderer.hpp
+++ b/drape_frontend/route_renderer.hpp
@@ -22,7 +22,6 @@ extern std::string const kRouteColor;
extern std::string const kRouteOutlineColor;
extern std::string const kRoutePedestrian;
extern std::string const kRouteBicycle;
-extern std::string const kGateColor;
extern std::string const kTransitOutlineColor;
class RouteRenderer final
diff --git a/drape_frontend/rule_drawer.cpp b/drape_frontend/rule_drawer.cpp
index c81caa07d6..eb1dea1dd3 100644
--- a/drape_frontend/rule_drawer.cpp
+++ b/drape_frontend/rule_drawer.cpp
@@ -557,7 +557,6 @@ void RuleDrawer::DrawTileNet(TInsertShapeFn const & insertShape)
tp.m_titleDecl.m_primaryTextFont = dp::FontDecl(dp::Color::Red(), 30);
tp.m_titleDecl.m_primaryOffset = {0.f, 0.f};
drape_ptr<TextShape> textShape = make_unique_dp<TextShape>(r.Center(), tp, key,
- false /* hasPOI */,
m2::PointF(0.0, 0.0) /* symbolSize */,
dp::Anchor::Center,
0 /* textIndex */);
diff --git a/drape_frontend/shaders/shader_index.txt b/drape_frontend/shaders/shader_index.txt
index f6de9a5d5b..2541fb8f58 100644
--- a/drape_frontend/shaders/shader_index.txt
+++ b/drape_frontend/shaders/shader_index.txt
@@ -1,6 +1,6 @@
+COLORED_SYMBOL_PROGRAM colored_symbol.vsh.glsl colored_symbol.fsh.glsl
TEXTURING_PROGRAM texturing.vsh.glsl texturing.fsh.glsl
MASKED_TEXTURING_PROGRAM masked_texturing.vsh.glsl masked_texturing.fsh.glsl
-COLORED_SYMBOL_PROGRAM colored_symbol.vsh.glsl colored_symbol.fsh.glsl
TEXT_OUTLINED_PROGRAM text_outlined.vsh.glsl text.fsh.glsl
TEXT_PROGRAM text.vsh.glsl text.fsh.glsl
TEXT_FIXED_PROGRAM text.vsh.glsl text_fixed.fsh.glsl
diff --git a/drape_frontend/shape_view_params.hpp b/drape_frontend/shape_view_params.hpp
index 8e8418e1d9..904d24017e 100644
--- a/drape_frontend/shape_view_params.hpp
+++ b/drape_frontend/shape_view_params.hpp
@@ -17,6 +17,7 @@ namespace df
{
double const kShapeCoordScalar = 1000;
int constexpr kBuildingOutlineSize = 16;
+uint32_t constexpr kStartUserMarkOverlayIndex = 1000;
struct CommonViewParams
{
@@ -38,6 +39,7 @@ struct CommonOverlayViewParams : public CommonViewParams
{
SpecialDisplacement m_specialDisplacement = SpecialDisplacement::None;
uint16_t m_specialPriority = std::numeric_limits<uint16_t>::max();
+ int m_startOverlayRank = 0;
};
struct PoiSymbolViewParams : CommonOverlayViewParams
diff --git a/drape_frontend/text_shape.cpp b/drape_frontend/text_shape.cpp
index cf23901959..b71cb633d8 100644
--- a/drape_frontend/text_shape.cpp
+++ b/drape_frontend/text_shape.cpp
@@ -110,13 +110,12 @@ private:
} // namespace
TextShape::TextShape(m2::PointD const & basePoint, TextViewParams const & params,
- TileKey const & tileKey, bool hasPOI,
+ TileKey const & tileKey,
m2::PointF const & symbolSize, dp::Anchor symbolAnchor,
uint32_t textIndex)
: m_basePoint(basePoint)
, m_params(params)
, m_tileCoords(tileKey.GetTileCoords())
- , m_hasPOI(hasPOI)
, m_symbolSize(symbolSize)
, m_symbolAnchor(symbolAnchor)
, m_textIndex(textIndex)
@@ -298,8 +297,10 @@ void TextShape::DrawSubStringPlain(StraightTextLayout const & layout, dp::FontDe
std::move(dynamicBuffer),
true);
handle->SetPivotZ(m_params.m_posZ);
- handle->SetOverlayRank(m_hasPOI ? (isPrimary ? dp::OverlayRank1 : dp::OverlayRank2)
- : (isPrimary ? dp::OverlayRank0 : dp::OverlayRank1));
+
+ ASSERT_LESS(m_params.m_startOverlayRank + 1, dp::OverlayRanksCount, ());
+ handle->SetOverlayRank(isPrimary ? m_params.m_startOverlayRank : m_params.m_startOverlayRank + 1);
+
handle->SetExtendingSize(m_params.m_extendingSize);
if (m_params.m_specialDisplacement == SpecialDisplacement::UserMark)
handle->SetUserMarkOverlay(true);
@@ -349,9 +350,13 @@ void TextShape::DrawSubStringOutlined(StraightTextLayout const & layout, dp::Fon
std::move(dynamicBuffer),
true);
handle->SetPivotZ(m_params.m_posZ);
- handle->SetOverlayRank(m_hasPOI ? (isPrimary ? dp::OverlayRank1 : dp::OverlayRank2)
- : (isPrimary ? dp::OverlayRank0 : dp::OverlayRank1));
+
+ ASSERT_LESS(m_params.m_startOverlayRank + 1, dp::OverlayRanksCount, ());
+ handle->SetOverlayRank(isPrimary ? m_params.m_startOverlayRank : m_params.m_startOverlayRank + 1);
+
handle->SetExtendingSize(m_params.m_extendingSize);
+ if (m_params.m_specialDisplacement == SpecialDisplacement::UserMark)
+ handle->SetUserMarkOverlay(true);
dp::AttributeProvider provider(2, static_cast<uint32_t>(staticBuffer.size()));
provider.InitStream(0, gpu::TextOutlinedStaticVertex::GetBindingInfo(), make_ref(staticBuffer.data()));
diff --git a/drape_frontend/text_shape.hpp b/drape_frontend/text_shape.hpp
index f520dcd783..89c4b5da54 100644
--- a/drape_frontend/text_shape.hpp
+++ b/drape_frontend/text_shape.hpp
@@ -16,7 +16,7 @@ class TextShape : public MapShape
{
public:
TextShape(m2::PointD const & basePoint, TextViewParams const & params,
- TileKey const & tileKey, bool hasPOI, m2::PointF const & symbolSize,
+ TileKey const & tileKey, m2::PointF const & symbolSize,
dp::Anchor symbolAnchor, uint32_t textIndex);
void Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureManager> textures) const override;
@@ -42,7 +42,6 @@ private:
m2::PointD m_basePoint;
TextViewParams m_params;
m2::PointI m_tileCoords;
- bool m_hasPOI;
m2::PointF m_symbolSize;
dp::Anchor m_symbolAnchor;
uint32_t m_textIndex;
diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp
index d593e2f76a..2c3a28b373 100644
--- a/drape_frontend/user_mark_shapes.cpp
+++ b/drape_frontend/user_mark_shapes.cpp
@@ -1,5 +1,6 @@
#include "drape_frontend/user_mark_shapes.hpp"
+#include "drape_frontend/colored_symbol_shape.hpp"
#include "drape_frontend/line_shape.hpp"
#include "drape_frontend/map_shape.hpp"
#include "drape_frontend/poi_symbol_shape.hpp"
@@ -117,24 +118,67 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
m2::PointD const tileCenter = tileKey.GetGlobalRect().Center();
depthLayer = renderInfo.m_depthLayer;
+ m2::PointF symbolSize;
+ std::string symbolName;
+ if (renderInfo.m_symbolNames != nullptr)
+ {
+ for (auto itName = renderInfo.m_symbolNames->rbegin(); itName != renderInfo.m_symbolNames->rend(); ++itName)
+ {
+ if (itName->first <= tileKey.m_zoomLevel)
+ {
+ symbolName = itName->second;
+ break;
+ }
+ }
+ }
+
if (renderInfo.m_hasSymbolPriority)
{
- PoiSymbolViewParams params(renderInfo.m_featureId);
- params.m_tileCenter = tileCenter;
- params.m_depth = renderInfo.m_depth;
- params.m_depthLayer = renderInfo.m_depthLayer;
- params.m_minVisibleScale = renderInfo.m_minZoom;
- params.m_specialDisplacement = SpecialDisplacement::UserMark;
- params.m_specialPriority = renderInfo.m_priority;
- params.m_symbolName = renderInfo.m_symbolName;
- PoiSymbolShape(renderInfo.m_pivot, params, tileKey,
- 0 /* textIndex */).Draw(&batcher, textures);
+ if (renderInfo.m_coloredSymbols != nullptr)
+ {
+ for (auto itSym = renderInfo.m_coloredSymbols->rbegin(); itSym != renderInfo.m_coloredSymbols->rend(); ++itSym)
+ {
+ if (itSym->first <= tileKey.m_zoomLevel)
+ {
+ ColoredSymbolViewParams params = itSym->second;
+ if (params.m_shape == ColoredSymbolViewParams::Shape::Circle)
+ symbolSize = m2::PointF(params.m_radiusInPixels, params.m_radiusInPixels);
+ else
+ symbolSize = params.m_sizeInPixels;
+
+ params.m_featureID = renderInfo.m_featureId;
+ params.m_tileCenter = tileCenter;
+ params.m_depth = renderInfo.m_depth;
+ params.m_depthLayer = renderInfo.m_depthLayer;
+ params.m_minVisibleScale = renderInfo.m_minZoom;
+ params.m_specialDisplacement = SpecialDisplacement::UserMark;
+ params.m_specialPriority = renderInfo.m_priority;
+ ColoredSymbolShape(renderInfo.m_pivot, params, tileKey,
+ kStartUserMarkOverlayIndex).Draw(&batcher, textures);
+ break;
+ }
+ }
+ }
+ if (renderInfo.m_symbolNames != nullptr)
+ {
+ PoiSymbolViewParams params(renderInfo.m_featureId);
+ params.m_tileCenter = tileCenter;
+ params.m_depth = renderInfo.m_depth;
+ params.m_depthLayer = renderInfo.m_depthLayer;
+ params.m_minVisibleScale = renderInfo.m_minZoom;
+ params.m_specialDisplacement = SpecialDisplacement::UserMark;
+ params.m_specialPriority = renderInfo.m_priority;
+ params.m_symbolName = symbolName;
+ params.m_startOverlayRank = renderInfo.m_coloredSymbols != nullptr ? dp::OverlayRank1 : dp::OverlayRank0;
+ PoiSymbolShape(renderInfo.m_pivot, params, tileKey,
+ kStartUserMarkOverlayIndex).Draw(&batcher, textures);
+ }
}
- else if (!renderInfo.m_symbolName.empty())
+ else if (renderInfo.m_symbolNames != nullptr)
{
buffer.reserve(vertexCount);
- textures->GetSymbolRegion(renderInfo.m_symbolName, region);
+ textures->GetSymbolRegion(symbolName, region);
m2::RectF const & texRect = region.GetTexRect();
m2::PointF const pxSize = region.GetPixelSize();
dp::Anchor const anchor = renderInfo.m_anchor;
@@ -157,42 +201,58 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture
buffer.emplace_back(pos, right + up + offset, glsl::ToVec2(texRect.RightBottom()), runAnim);
}
- if (renderInfo.m_titleDecl != nullptr && !renderInfo.m_titleDecl->m_primaryText.empty())
+ if (renderInfo.m_symbolSizes != nullptr)
{
- TextViewParams params;
- params.m_featureID = renderInfo.m_featureId;
- params.m_tileCenter = tileCenter;
- params.m_titleDecl = *renderInfo.m_titleDecl;
-
- // Here we use visual scale to adapt texts sizes and offsets
- // to different screen resolutions and DPI.
- params.m_titleDecl.m_primaryTextFont.m_size *= vs;
- params.m_titleDecl.m_secondaryTextFont.m_size *= vs;
- params.m_titleDecl.m_primaryOffset *= vs;
- params.m_titleDecl.m_secondaryOffset *= vs;
-
- params.m_depth = renderInfo.m_depth;
- params.m_depthLayer = renderInfo.m_depthLayer;
- params.m_minVisibleScale = renderInfo.m_minZoom;
- if (renderInfo.m_hasTitlePriority)
- {
- params.m_specialDisplacement = SpecialDisplacement::UserMark;
- params.m_specialPriority = renderInfo.m_priority;
- }
+ symbolSize = renderInfo.m_symbolSizes->at(static_cast<size_t>(tileKey.m_zoomLevel - 1)) * vs;
+ }
+ else
+ {
+ textures->GetSymbolRegion(symbolName, region);
+ symbolSize.x = max(region.GetPixelSize().x, symbolSize.x);
+ symbolSize.y = max(region.GetPixelSize().y, symbolSize.y);
+ }
- m2::PointF symbolSize;
- if (renderInfo.m_symbolSizes != nullptr)
- {
- symbolSize = renderInfo.m_symbolSizes->at(static_cast<size_t>(tileKey.m_zoomLevel)) * vs;
- }
- else
+ if (renderInfo.m_titleDecl != nullptr)
+ {
+ for (auto const & titleDecl : *renderInfo.m_titleDecl)
{
- textures->GetSymbolRegion(renderInfo.m_symbolName, region);
- symbolSize = region.GetPixelSize();
- }
+ if (titleDecl.m_primaryText.empty())
+ continue;
+
+ TextViewParams params;
+ params.m_featureID = renderInfo.m_featureId;
+ params.m_tileCenter = tileCenter;
+ params.m_titleDecl = titleDecl;
+
+ // Here we use visual scale to adapt texts sizes and offsets
+ // to different screen resolutions and DPI.
+ params.m_titleDecl.m_primaryTextFont.m_size *= vs;
+ params.m_titleDecl.m_secondaryTextFont.m_size *= vs;
+ params.m_titleDecl.m_primaryOffset *= vs;
+ params.m_titleDecl.m_secondaryOffset *= vs;
+
+ params.m_depth = renderInfo.m_depth;
+ params.m_depthLayer = renderInfo.m_depthLayer;
+ params.m_minVisibleScale = renderInfo.m_minZoom;
- TextShape(renderInfo.m_pivot, params, tileKey, renderInfo.m_hasSymbolPriority /* hasPOI */,
- symbolSize, renderInfo.m_anchor, 0 /* textIndex */).Draw(&batcher, textures);
+ uint32_t overlayIndex = 0;
+ if (renderInfo.m_hasTitlePriority)
+ {
+ params.m_specialDisplacement = SpecialDisplacement::UserMark;
+ params.m_specialPriority = renderInfo.m_priority;
+ overlayIndex = kStartUserMarkOverlayIndex;
+
+ params.m_startOverlayRank = dp::OverlayRank0;
+ if (renderInfo.m_symbolNames != nullptr)
+ params.m_startOverlayRank++;
+ if (renderInfo.m_coloredSymbols != nullptr)
+ params.m_startOverlayRank++;
+ ASSERT_LESS(params.m_startOverlayRank, dp::OverlayRanksCount, ());
+ }
+
+ TextShape(renderInfo.m_pivot, params, tileKey,
+ symbolSize, renderInfo.m_anchor, overlayIndex).Draw(&batcher, textures);
+ }
}
renderInfo.m_justCreated = false;
diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp
index a35e72ab9d..1686065234 100644
--- a/drape_frontend/user_mark_shapes.hpp
+++ b/drape_frontend/user_mark_shapes.hpp
@@ -18,10 +18,11 @@ struct UserMarkRenderParams
int m_minZoom = 1;
m2::PointD m_pivot = m2::PointD(0.0, 0.0);
m2::PointD m_pixelOffset = m2::PointD(0.0, 0.0);
- std::string m_symbolName;
dp::Anchor m_anchor = dp::Center;
- drape_ptr<std::vector<m2::PointF>> m_symbolSizes;
- drape_ptr<dp::TitleDecl> m_titleDecl;
+ drape_ptr<UserPointMark::SymbolSizesZoomInfo> m_symbolSizes;
+ drape_ptr<UserPointMark::ColoredSymbolZoomInfo> m_coloredSymbols;
+ drape_ptr<UserPointMark::SymbolNameZoomInfo> m_symbolNames;
+ drape_ptr<UserPointMark::TitlesInfo> m_titleDecl;
bool m_hasSymbolPriority = false;
bool m_hasTitlePriority = false;
uint16_t m_priority = 0;
diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp
index df14bf0a7a..8685c764c2 100644
--- a/drape_frontend/user_marks_provider.hpp
+++ b/drape_frontend/user_marks_provider.hpp
@@ -1,6 +1,7 @@
#pragma once
#include "drape_frontend/render_state.hpp"
+#include "drape_frontend/shape_view_params.hpp"
#include "drape/drape_global.hpp"
#include "drape/pointers.hpp"
@@ -38,6 +39,11 @@ struct MarkIDCollection
class UserPointMark
{
public:
+ using ColoredSymbolZoomInfo = std::map<int, df::ColoredSymbolViewParams>;
+ using SymbolNameZoomInfo = std::map<int, std::string>;
+ using SymbolSizesZoomInfo = std::vector<m2::PointF>;
+ using TitlesInfo = std::vector<dp::TitleDecl>;
+
UserPointMark();
virtual ~UserPointMark() {}
@@ -48,13 +54,14 @@ public:
virtual m2::PointD const & GetPivot() const = 0;
virtual m2::PointD GetPixelOffset() const = 0;
- virtual std::string GetSymbolName() const = 0;
virtual dp::Anchor GetAnchor() const = 0;
virtual float GetDepth() const = 0;
virtual RenderState::DepthLayer GetDepthLayer() const = 0;
virtual bool IsVisible() const = 0;
- virtual drape_ptr<dp::TitleDecl> GetTitleDecl() const = 0;
- virtual drape_ptr<std::vector<m2::PointF>> GetSymbolSizes() const = 0;
+ virtual drape_ptr<TitlesInfo> GetTitleDecl() const = 0;
+ virtual drape_ptr<SymbolSizesZoomInfo> GetSymbolSizes() const = 0;
+ virtual drape_ptr<SymbolNameZoomInfo> GetSymbolNames() const = 0;
+ virtual drape_ptr<ColoredSymbolZoomInfo> GetColoredSymbols() const = 0;
virtual uint16_t GetPriority() const = 0;
virtual bool HasSymbolPriority() const = 0;
virtual bool HasTitlePriority() const = 0;