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>2018-10-05 20:02:29 +0300
committerRoman Kuznetsov <r.kuznetsow@gmail.com>2018-10-30 10:56:15 +0300
commit833bd37e7e71ccd02c77045a32b853725046d655 (patch)
tree5ce2ea0aabc7222e42370586758b8ee454bf03a5 /drape_frontend
parent444cde73d4c9062e8c7be16d17637b8d79a97ccd (diff)
SpeedCameraMark and ColoredDebugMark added.
Diffstat (limited to 'drape_frontend')
-rw-r--r--drape_frontend/drape_engine.cpp2
-rw-r--r--drape_frontend/user_mark_shapes.cpp61
-rw-r--r--drape_frontend/user_mark_shapes.hpp2
-rw-r--r--drape_frontend/user_marks_provider.hpp9
4 files changed, 58 insertions, 16 deletions
diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp
index a2974dac95..faea275bb6 100644
--- a/drape_frontend/drape_engine.cpp
+++ b/drape_frontend/drape_engine.cpp
@@ -855,7 +855,7 @@ drape_ptr<UserMarkRenderParams> DrapeEngine::GenerateMarkRenderInfo(UserPointMar
renderInfo->m_symbolSizes = mark->GetSymbolSizes();
renderInfo->m_symbolOffsets = mark->GetSymbolOffsets();
renderInfo->m_color = mark->GetColorConstant();
- renderInfo->m_hasSymbolPriority = mark->HasSymbolPriority();
+ renderInfo->m_hasSymbolShapes = mark->HasSymbolShapes();
renderInfo->m_hasTitlePriority = mark->HasTitlePriority();
renderInfo->m_priority = mark->GetPriority();
renderInfo->m_index = mark->GetIndex();
diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp
index 25f2a90f81..e02ee9e672 100644
--- a/drape_frontend/user_mark_shapes.cpp
+++ b/drape_frontend/user_mark_shapes.cpp
@@ -5,6 +5,7 @@
#include "drape_frontend/map_shape.hpp"
#include "drape_frontend/poi_symbol_shape.hpp"
#include "drape_frontend/shape_view_params.hpp"
+#include "drape_frontend/text_layout.hpp"
#include "drape_frontend/text_shape.hpp"
#include "drape_frontend/tile_utils.hpp"
#include "drape_frontend/visual_params.hpp"
@@ -113,16 +114,50 @@ void GenerateColoredSymbolShapes(ref_ptr<dp::GraphicsContext> context,
m2::PointD const & tileCenter, ref_ptr<dp::TextureManager> textures,
m2::PointF & symbolSize, dp::Batcher & batcher)
{
- for (auto itSym = renderInfo.m_coloredSymbols->rbegin();
- itSym != renderInfo.m_coloredSymbols->rend(); ++itSym)
+ auto const needOverlay = renderInfo.m_coloredSymbols->m_needOverlay;
+ m2::PointF sizeInc(0.0, 0.0);
+ UserPointMark::SymbolSizes symbolSizesInc;
+ auto const isTextBg = renderInfo.m_coloredSymbols->m_addTextSize;
+ if (isTextBg)
+ {
+ auto const & titleDecl = renderInfo.m_titleDecl->at(0);
+ dp::FontDecl const & fontDecl = titleDecl.m_primaryTextFont;
+ auto isSdf = df::VisualParams::Instance().IsSdfPrefered();
+ isSdf = fontDecl.m_outlineColor != dp::Color::Transparent() ? true : isSdf;
+ auto const vs = static_cast<float>(df::VisualParams::Instance().GetVisualScale());
+
+ TextLayout textLayout;
+ textLayout.Init(strings::MakeUniString(titleDecl.m_primaryText), fontDecl.m_size * vs, isSdf, textures);
+ sizeInc.x = textLayout.GetPixelLength();
+ sizeInc.y = textLayout.GetPixelHeight();
+
+ if (renderInfo.m_symbolSizes != nullptr)
+ {
+ symbolSizesInc.reserve(renderInfo.m_symbolSizes->size());
+ for (auto const & sz : *renderInfo.m_symbolSizes)
+ symbolSizesInc.push_back(sz + sizeInc);
+ }
+ }
+
+ for (auto itSym = renderInfo.m_coloredSymbols->m_zoomInfo.rbegin();
+ itSym != renderInfo.m_coloredSymbols->m_zoomInfo.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 * 2.0f, params.m_radiusInPixels * 2.0f);
+ {
+ params.m_radiusInPixels = params.m_radiusInPixels + std::max(sizeInc.x, sizeInc.y) / 2.0f;
+ if (!isTextBg)
+ symbolSize = m2::PointF(params.m_radiusInPixels * 2.0f, params.m_radiusInPixels * 2.0f);
+ }
else
- symbolSize = params.m_sizeInPixels;
+ {
+ params.m_sizeInPixels = params.m_sizeInPixels + sizeInc;
+ if (!isTextBg)
+ symbolSize = params.m_sizeInPixels;
+ }
params.m_featureID = renderInfo.m_featureId;
params.m_tileCenter = tileCenter;
@@ -136,13 +171,13 @@ void GenerateColoredSymbolShapes(ref_ptr<dp::GraphicsContext> context,
{
ColoredSymbolShape(renderInfo.m_pivot, params, tileKey,
kStartUserMarkOverlayIndex + renderInfo.m_index,
- *renderInfo.m_symbolSizes.get())
+ isTextBg ? symbolSizesInc : *renderInfo.m_symbolSizes.get())
.Draw(context, &batcher, textures);
}
else
{
ColoredSymbolShape(renderInfo.m_pivot, params, tileKey,
- kStartUserMarkOverlayIndex + renderInfo.m_index)
+ kStartUserMarkOverlayIndex + renderInfo.m_index, needOverlay)
.Draw(context, &batcher, textures);
}
break;
@@ -166,8 +201,10 @@ void GeneratePoiSymbolShape(ref_ptr<dp::GraphicsContext> context,
params.m_specialPriority = renderInfo.m_priority;
params.m_symbolName = symbolName;
params.m_anchor = renderInfo.m_anchor;
- params.m_startOverlayRank =
- renderInfo.m_coloredSymbols != nullptr ? dp::OverlayRank1 : dp::OverlayRank0;
+
+ bool const hasColoredOverlay = renderInfo.m_coloredSymbols != nullptr && renderInfo.m_coloredSymbols->m_needOverlay;
+ params.m_startOverlayRank = hasColoredOverlay ? dp::OverlayRank1 : dp::OverlayRank0;
+
if (renderInfo.m_symbolOffsets != nullptr)
{
ASSERT_GREATER(tileKey.m_zoomLevel, 0, ());
@@ -227,11 +264,11 @@ void GenerateTextShapes(ref_ptr<dp::GraphicsContext> context,
params.m_specialDisplacement = SpecialDisplacement::UserMark;
params.m_specialPriority = renderInfo.m_priority;
params.m_startOverlayRank = dp::OverlayRank0;
- if (renderInfo.m_hasSymbolPriority)
+ if (renderInfo.m_hasSymbolShapes)
{
if (renderInfo.m_symbolNames != nullptr)
params.m_startOverlayRank++;
- if (renderInfo.m_coloredSymbols != nullptr)
+ if (renderInfo.m_coloredSymbols != nullptr && renderInfo.m_coloredSymbols->m_needOverlay)
params.m_startOverlayRank++;
ASSERT_LESS(params.m_startOverlayRank, dp::OverlayRanksCount, ());
}
@@ -327,7 +364,7 @@ void CacheUserMarks(ref_ptr<dp::GraphicsContext> context, TileKey const & tileKe
if (!renderInfo.m_color.empty())
color = df::GetColorConstant(renderInfo.m_color);
- if (renderInfo.m_hasSymbolPriority)
+ if (renderInfo.m_hasSymbolShapes)
{
if (renderInfo.m_coloredSymbols != nullptr)
{
@@ -400,7 +437,7 @@ void CacheUserMarks(ref_ptr<dp::GraphicsContext> context, TileKey const & tileKe
if (renderInfo.m_badgeNames != nullptr)
{
- ASSERT(!renderInfo.m_hasSymbolPriority || renderInfo.m_symbolNames == nullptr,
+ ASSERT(!renderInfo.m_hasSymbolShapes || renderInfo.m_symbolNames == nullptr,
("Multiple POI shapes in an usermark are not supported yet"));
auto const badgeName = GetSymbolNameForZoomLevel(renderInfo.m_badgeNames, tileKey);
if (!badgeName.empty())
diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp
index 90b48c82ff..f13ec6737a 100644
--- a/drape_frontend/user_mark_shapes.hpp
+++ b/drape_frontend/user_mark_shapes.hpp
@@ -27,7 +27,7 @@ struct UserMarkRenderParams
drape_ptr<UserPointMark::SymbolOffsets> m_symbolOffsets;
drape_ptr<UserPointMark::SymbolNameZoomInfo> m_badgeNames;
df::ColorConstant m_color;
- bool m_hasSymbolPriority = false;
+ bool m_hasSymbolShapes = false;
bool m_hasTitlePriority = false;
uint16_t m_priority = 0;
uint32_t m_index = 0;
diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp
index 857dc7a725..31a6bf3a3b 100644
--- a/drape_frontend/user_marks_provider.hpp
+++ b/drape_frontend/user_marks_provider.hpp
@@ -37,7 +37,12 @@ struct IDCollections
class UserPointMark
{
public:
- using ColoredSymbolZoomInfo = std::map<int, df::ColoredSymbolViewParams>;
+ struct ColoredSymbolZoomInfo
+ {
+ std::map<int, df::ColoredSymbolViewParams> m_zoomInfo;
+ bool m_needOverlay = true;
+ bool m_addTextSize = false;
+ };
using SymbolNameZoomInfo = std::map<int, std::string>;
using TitlesInfo = std::vector<dp::TitleDecl>;
using SymbolSizes = std::vector<m2::PointF>;
@@ -67,7 +72,7 @@ public:
virtual drape_ptr<SymbolOffsets> GetSymbolOffsets() const = 0;
virtual uint16_t GetPriority() const = 0;
virtual uint32_t GetIndex() const = 0;
- virtual bool HasSymbolPriority() const = 0;
+ virtual bool HasSymbolShapes() const = 0;
virtual bool HasTitlePriority() const = 0;
virtual int GetMinZoom() const = 0;
virtual int GetMinTitleZoom() const = 0;