diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-10-05 20:02:29 +0300 |
---|---|---|
committer | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2018-10-30 10:56:15 +0300 |
commit | 833bd37e7e71ccd02c77045a32b853725046d655 (patch) | |
tree | 5ce2ea0aabc7222e42370586758b8ee454bf03a5 /drape_frontend | |
parent | 444cde73d4c9062e8c7be16d17637b8d79a97ccd (diff) |
SpeedCameraMark and ColoredDebugMark added.
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/drape_engine.cpp | 2 | ||||
-rw-r--r-- | drape_frontend/user_mark_shapes.cpp | 61 | ||||
-rw-r--r-- | drape_frontend/user_mark_shapes.hpp | 2 | ||||
-rw-r--r-- | drape_frontend/user_marks_provider.hpp | 9 |
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; |