diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index b44f493de3..5f1b23e92c 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -863,7 +863,7 @@ drape_ptr DrapeEngine::GenerateMarkRenderInfo(UserPointMar renderInfo->m_symbolSizes = mark->GetSymbolSizes(); renderInfo->m_symbolOffsets = mark->GetSymbolOffsets(); renderInfo->m_color = mark->GetColorConstant(); - renderInfo->m_hasSymbolShapes = mark->HasSymbolShapes(); + renderInfo->m_symbolIsPOI = mark->SymbolIsPOI(); renderInfo->m_hasTitlePriority = mark->HasTitlePriority(); renderInfo->m_priority = mark->GetPriority(); renderInfo->m_displacement = mark->GetDisplacement(); diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp index af7d88c359..fc6426a959 100755 --- a/drape_frontend/frontend_renderer.cpp +++ b/drape_frontend/frontend_renderer.cpp @@ -1405,7 +1405,7 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView, bool activeFram { StencilWriterGuard guard(make_ref(m_postprocessRenderer), m_context); RenderUserMarksLayer(modelView, DepthLayer::UserMarkLayer); - RenderUserMarksLayer(modelView, DepthLayer::TransitMarkLayer); + RenderUserMarksLayer(modelView, DepthLayer::RoutingBottomMarkLayer); RenderUserMarksLayer(modelView, DepthLayer::RoutingMarkLayer); RenderSearchMarksLayer(modelView); } @@ -1765,7 +1765,7 @@ void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView) static std::vector layers = {DepthLayer::OverlayLayer, DepthLayer::LocalAdsMarkLayer, DepthLayer::NavigationLayer, - DepthLayer::TransitMarkLayer, + DepthLayer::RoutingBottomMarkLayer, DepthLayer::RoutingMarkLayer}; BeginUpdateOverlayTree(modelView); for (auto const & layerId : layers) diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp index 8a018cb7bc..4240fbc95e 100755 --- a/drape_frontend/render_group.cpp +++ b/drape_frontend/render_group.cpp @@ -147,7 +147,7 @@ bool RenderGroup::IsUserMark() const auto const depthLayer = GetDepthLayer(m_state); return depthLayer == DepthLayer::UserLineLayer || depthLayer == DepthLayer::UserMarkLayer || - depthLayer == DepthLayer::TransitMarkLayer || + depthLayer == DepthLayer::RoutingBottomMarkLayer || depthLayer == DepthLayer::RoutingMarkLayer || depthLayer == DepthLayer::LocalAdsMarkLayer || depthLayer == DepthLayer::SearchMarkLayer; diff --git a/drape_frontend/render_state_extension.hpp b/drape_frontend/render_state_extension.hpp index 68afd0966c..8e56aa5d9a 100644 --- a/drape_frontend/render_state_extension.hpp +++ b/drape_frontend/render_state_extension.hpp @@ -20,7 +20,7 @@ enum class DepthLayer : uint8_t TransitSchemeLayer, UserMarkLayer, NavigationLayer, - TransitMarkLayer, + RoutingBottomMarkLayer, RoutingMarkLayer, SearchMarkLayer, GuiLayer, @@ -62,7 +62,7 @@ inline std::string DebugPrint(DepthLayer layer) case DepthLayer::TransitSchemeLayer: return "TransitSchemeLayer"; case DepthLayer::UserMarkLayer: return "UserMarkLayer"; case DepthLayer::NavigationLayer: return "NavigationLayer"; - case DepthLayer::TransitMarkLayer: return "TransitMarkLayer"; + case DepthLayer::RoutingBottomMarkLayer: return "RoutingBottomMarkLayer"; case DepthLayer::RoutingMarkLayer: return "RoutingMarkLayer"; case DepthLayer::SearchMarkLayer: return "SearchMarkLayer"; case DepthLayer::GuiLayer: return "GuiLayer"; diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp index ada8a24dc3..8f2b075c83 100644 --- a/drape_frontend/user_mark_shapes.cpp +++ b/drape_frontend/user_mark_shapes.cpp @@ -95,8 +95,7 @@ struct UserPointVertex : public gpu::BaseVertex TColorAndAnimate m_colorAndAnimate; }; -std::string GetSymbolNameForZoomLevel(drape_ptr const & symbolNames, - TileKey const & tileKey) +std::string GetSymbolNameForZoomLevel(ref_ptr symbolNames, TileKey const & tileKey) { if (!symbolNames) return {}; @@ -109,9 +108,21 @@ std::string GetSymbolNameForZoomLevel(drape_ptr context, +m2::PointF GetSymbolOffsetForZoomLevel(ref_ptr symbolOffsets, TileKey const & tileKey) +{ + if (!symbolOffsets) + return m2::PointF::Zero(); + + CHECK_GREATER(tileKey.m_zoomLevel, 0, ()); + CHECK_LESS_OR_EQUAL(tileKey.m_zoomLevel, scales::UPPER_STYLE_SCALE, ()); + + auto const offsetIndex = static_cast(tileKey.m_zoomLevel - 1); + return symbolOffsets->at(offsetIndex); +} + +void GenerateColoredSymbolShapes(ref_ptr context, ref_ptr textures, UserMarkRenderParams const & renderInfo, TileKey const & tileKey, - m2::PointD const & tileCenter, ref_ptr textures, + m2::PointD const & tileCenter, m2::PointF const & symbolOffset, m2::PointF & symbolSize, dp::Batcher & batcher) { m2::PointF sizeInc(0.0f, 0.0f); @@ -143,59 +154,71 @@ void GenerateColoredSymbolShapes(ref_ptr context, offset = StraightTextLayout::GetSymbolBasedTextOffset(symbolSize, titleDecl.m_anchor, renderInfo.m_anchor); } - for (auto itSym = renderInfo.m_coloredSymbols->m_zoomInfo.rbegin(); - itSym != renderInfo.m_coloredSymbols->m_zoomInfo.rend(); ++itSym) + ColoredSymbolViewParams params; + + if (renderInfo.m_coloredSymbols->m_isSymbolStub) { - if (itSym->first <= tileKey.m_zoomLevel) + params.m_anchor = renderInfo.m_anchor; + params.m_color = dp::Color::Transparent(); + params.m_shape = ColoredSymbolViewParams::Shape::Rectangle; + params.m_sizeInPixels = symbolSize; + params.m_offset = symbolOffset; + } + else + { + for (auto itSym = renderInfo.m_coloredSymbols->m_zoomInfo.rbegin(); + itSym != renderInfo.m_coloredSymbols->m_zoomInfo.rend(); ++itSym) { - ColoredSymbolViewParams params = itSym->second; - - m2::PointF coloredSize(0.0f, 0.0f); - if (params.m_shape == ColoredSymbolViewParams::Shape::Circle) + if (itSym->first <= tileKey.m_zoomLevel) { - params.m_radiusInPixels = params.m_radiusInPixels + std::max(sizeInc.x, sizeInc.y) / 2.0f; - coloredSize = m2::PointF(params.m_radiusInPixels * 2.0f, params.m_radiusInPixels * 2.0f); + params = itSym->second; + break; } - else - { - params.m_sizeInPixels = params.m_sizeInPixels + sizeInc; - coloredSize = params.m_sizeInPixels; - } - if (!isTextBg) - symbolSize = m2::PointF(std::max(coloredSize.x, symbolSize.x), std::max(coloredSize.y, symbolSize.y)); - - params.m_featureID = renderInfo.m_featureId; - params.m_tileCenter = tileCenter; - params.m_depthTestEnabled = renderInfo.m_depthTestEnabled; - params.m_depth = renderInfo.m_depth; - params.m_depthLayer = renderInfo.m_depthLayer; - params.m_minVisibleScale = renderInfo.m_minZoom; - params.m_specialDisplacement = renderInfo.m_displacement; - params.m_specialPriority = renderInfo.m_priority; - params.m_offset += offset; - if (renderInfo.m_symbolSizes != nullptr) - { - ColoredSymbolShape(renderInfo.m_pivot, params, tileKey, - kStartUserMarkOverlayIndex + renderInfo.m_index, - isTextBg ? symbolSizesInc : *renderInfo.m_symbolSizes.get()) - .Draw(context, &batcher, textures); - } - else - { - ColoredSymbolShape(renderInfo.m_pivot, params, tileKey, - kStartUserMarkOverlayIndex + renderInfo.m_index, renderInfo.m_coloredSymbols->m_needOverlay) - .Draw(context, &batcher, textures); - } - break; } } + + m2::PointF coloredSize(0.0f, 0.0f); + if (params.m_shape == ColoredSymbolViewParams::Shape::Circle) + { + params.m_radiusInPixels = params.m_radiusInPixels + std::max(sizeInc.x, sizeInc.y) / 2.0f; + coloredSize = m2::PointF(params.m_radiusInPixels * 2.0f, params.m_radiusInPixels * 2.0f); + } + else + { + params.m_sizeInPixels = params.m_sizeInPixels + sizeInc; + coloredSize = params.m_sizeInPixels; + } + if (!isTextBg) + symbolSize = m2::PointF(std::max(coloredSize.x, symbolSize.x), std::max(coloredSize.y, symbolSize.y)); + + params.m_featureID = renderInfo.m_featureId; + params.m_tileCenter = tileCenter; + params.m_depthTestEnabled = renderInfo.m_depthTestEnabled; + params.m_depth = renderInfo.m_depth; + params.m_depthLayer = renderInfo.m_depthLayer; + params.m_minVisibleScale = renderInfo.m_minZoom; + params.m_specialDisplacement = renderInfo.m_displacement; + params.m_specialPriority = renderInfo.m_priority; + params.m_offset += offset; + if (renderInfo.m_symbolSizes != nullptr) + { + ColoredSymbolShape(renderInfo.m_pivot, params, tileKey, + kStartUserMarkOverlayIndex + renderInfo.m_index, + isTextBg ? symbolSizesInc : *renderInfo.m_symbolSizes.get()) + .Draw(context, &batcher, textures); + } + else + { + ColoredSymbolShape(renderInfo.m_pivot, params, tileKey, + kStartUserMarkOverlayIndex + renderInfo.m_index, renderInfo.m_coloredSymbols->m_needOverlay) + .Draw(context, &batcher, textures); + } } -void GeneratePoiSymbolShape(ref_ptr context, +void GeneratePoiSymbolShape(ref_ptr context, ref_ptr textures, UserMarkRenderParams const & renderInfo, TileKey const & tileKey, m2::PointD const & tileCenter, std::string const & symbolName, - ref_ptr textures, m2::PointF & symbolOffset, - dp::Batcher & batcher) + m2::PointF const & symbolOffset, dp::Batcher & batcher) { PoiSymbolViewParams params(renderInfo.m_featureId); params.m_tileCenter = tileCenter; @@ -207,29 +230,19 @@ void GeneratePoiSymbolShape(ref_ptr context, params.m_specialPriority = renderInfo.m_priority; params.m_symbolName = symbolName; params.m_anchor = renderInfo.m_anchor; + params.m_offset = symbolOffset; 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, ()); - ASSERT_LESS_OR_EQUAL(tileKey.m_zoomLevel, scales::UPPER_STYLE_SCALE, ()); - size_t offsetIndex = 0; - if (tileKey.m_zoomLevel > 0) - offsetIndex = static_cast(std::min(tileKey.m_zoomLevel, scales::UPPER_STYLE_SCALE) - 1); - symbolOffset = renderInfo.m_symbolOffsets->at(offsetIndex); - params.m_offset = symbolOffset; - } PoiSymbolShape(renderInfo.m_pivot, params, tileKey, kStartUserMarkOverlayIndex + renderInfo.m_index) .Draw(context, &batcher, textures); } -void GenerateTextShapes(ref_ptr context, +void GenerateTextShapes(ref_ptr context, ref_ptr textures, UserMarkRenderParams const & renderInfo, TileKey const & tileKey, - m2::PointD const & tileCenter, m2::PointF const & symbolSize, - m2::PointF const & symbolOffset, ref_ptr textures, + m2::PointD const & tileCenter,m2::PointF const & symbolOffset, m2::PointF const & symbolSize, dp::Batcher & batcher) { if (renderInfo.m_minTitleZoom > tileKey.m_zoomLevel) @@ -270,14 +283,14 @@ void GenerateTextShapes(ref_ptr context, params.m_specialDisplacement = renderInfo.m_displacement; params.m_specialPriority = renderInfo.m_priority; params.m_startOverlayRank = dp::OverlayRank0; - if (renderInfo.m_hasSymbolShapes) - { - if (renderInfo.m_symbolNames != nullptr) - params.m_startOverlayRank++; - if (renderInfo.m_coloredSymbols != nullptr && renderInfo.m_coloredSymbols->m_needOverlay) - params.m_startOverlayRank++; - ASSERT_LESS(params.m_startOverlayRank, dp::OverlayRanksCount, ()); - } + + if (renderInfo.m_symbolNames != nullptr && renderInfo.m_symbolIsPOI) + params.m_startOverlayRank++; + + if (renderInfo.m_coloredSymbols != nullptr && renderInfo.m_coloredSymbols->m_needOverlay) + params.m_startOverlayRank++; + + ASSERT_LESS(params.m_startOverlayRank, dp::OverlayRanksCount, ()); } if (renderInfo.m_symbolSizes != nullptr) @@ -355,9 +368,7 @@ void CacheUserMarks(ref_ptr context, TileKey const & tileKe m2::PointD const tileCenter = tileKey.GetGlobalRect().Center(); m2::PointF symbolSize(0.0f, 0.0f); - m2::PointF symbolOffset(0.0f, 0.0f); - - auto const symbolName = GetSymbolNameForZoomLevel(renderInfo.m_symbolNames, tileKey); + auto const symbolName = GetSymbolNameForZoomLevel(make_ref(renderInfo.m_symbolNames), tileKey); if (!symbolName.empty()) { dp::TextureManager::SymbolRegion region; @@ -365,111 +376,110 @@ void CacheUserMarks(ref_ptr context, TileKey const & tileKe symbolSize = region.GetPixelSize(); } - dp::Color color = dp::Color::White(); - if (!renderInfo.m_color.empty()) - color = df::GetColorConstant(renderInfo.m_color); + m2::PointF symbolOffset = GetSymbolOffsetForZoomLevel(make_ref(renderInfo.m_symbolOffsets), tileKey); - if (renderInfo.m_hasSymbolShapes) + if (renderInfo.m_coloredSymbols != nullptr) { - if (renderInfo.m_coloredSymbols != nullptr) - { - GenerateColoredSymbolShapes(context, renderInfo, tileKey, tileCenter, textures, symbolSize, - batcher); - } - - if (renderInfo.m_symbolNames != nullptr) - { - GeneratePoiSymbolShape(context, renderInfo, tileKey, tileCenter, symbolName, textures, - symbolOffset, batcher); - } + GenerateColoredSymbolShapes(context, textures, renderInfo, tileKey, tileCenter, symbolOffset, symbolSize, + batcher); } - else if (renderInfo.m_symbolNames != nullptr) + + if (renderInfo.m_symbolNames != nullptr) { - dp::TextureManager::SymbolRegion region; - dp::TextureManager::SymbolRegion backgroundRegion; - - buffer.clear(); - textures->GetSymbolRegion(symbolName, region); - auto const backgroundSymbol = GetBackgroundForSymbol(symbolName, textures); - if (!backgroundSymbol.empty()) - textures->GetSymbolRegion(backgroundSymbol, backgroundRegion); - - m2::RectF const & texRect = region.GetTexRect(); - m2::RectF const & bgTexRect = backgroundRegion.GetTexRect(); - m2::PointF const pxSize = region.GetPixelSize(); - dp::Anchor const anchor = renderInfo.m_anchor; - m2::PointD const pt = MapShape::ConvertToLocal(renderInfo.m_pivot, tileCenter, - kShapeCoordScalar); - glsl::vec3 const pos = glsl::vec3(glsl::ToVec2(pt), renderInfo.m_depth); - bool const runAnim = renderInfo.m_hasCreationAnimation && renderInfo.m_justCreated; - - glsl::vec2 left, right, up, down; - AlignHorizontal(pxSize.x * 0.5f, anchor, left, right); - AlignVertical(pxSize.y * 0.5f, anchor, up, down); - - m2::PointD const pixelOffset = renderInfo.m_pixelOffset; - glsl::vec2 const offset(pixelOffset.x, pixelOffset.y); - up += offset; - down += offset; - - glsl::vec4 colorAndAnimate(color.GetRedF(), color.GetGreenF(), color.GetBlueF(), - runAnim ? 1.0f : -1.0f); - buffer.emplace_back(pos, left + down, - glsl::ToVec4(m2::PointD(texRect.LeftTop()), m2::PointD(bgTexRect.LeftTop())), - colorAndAnimate); - buffer.emplace_back(pos, left + up, - glsl::ToVec4(m2::PointD(texRect.LeftBottom()), m2::PointD(bgTexRect.LeftBottom())), - colorAndAnimate); - buffer.emplace_back(pos, right + down, - glsl::ToVec4(m2::PointD(texRect.RightTop()), m2::PointD(bgTexRect.RightTop())), - colorAndAnimate); - buffer.emplace_back(pos, right + up, - glsl::ToVec4(m2::PointD(texRect.RightBottom()), m2::PointD(bgTexRect.RightBottom())), - colorAndAnimate); - - gpu::Program program; - gpu::Program program3d; - if (renderInfo.m_isMarkAboveText) + if (renderInfo.m_symbolIsPOI) { - program = runAnim ? gpu::Program::BookmarkAnimAboveText - : gpu::Program::BookmarkAboveText; - program3d = runAnim ? gpu::Program::BookmarkAnimAboveTextBillboard - : gpu::Program::BookmarkAboveTextBillboard; + GeneratePoiSymbolShape(context, textures, renderInfo, tileKey, tileCenter, symbolName, symbolOffset, batcher); } - else + else if (renderInfo.m_symbolNames != nullptr) { - program = runAnim ? gpu::Program::BookmarkAnim - : gpu::Program::Bookmark; - program3d = runAnim ? gpu::Program::BookmarkAnimBillboard - : gpu::Program::BookmarkBillboard; + dp::TextureManager::SymbolRegion region; + dp::TextureManager::SymbolRegion backgroundRegion; + + buffer.clear(); + textures->GetSymbolRegion(symbolName, region); + auto const backgroundSymbol = GetBackgroundForSymbol(symbolName, textures); + if (!backgroundSymbol.empty()) + textures->GetSymbolRegion(backgroundSymbol, backgroundRegion); + + m2::RectF const & texRect = region.GetTexRect(); + m2::RectF const & bgTexRect = backgroundRegion.GetTexRect(); + m2::PointF const pxSize = region.GetPixelSize(); + dp::Anchor const anchor = renderInfo.m_anchor; + m2::PointD const pt = MapShape::ConvertToLocal(renderInfo.m_pivot, tileCenter, + kShapeCoordScalar); + glsl::vec3 const pos = glsl::vec3(glsl::ToVec2(pt), renderInfo.m_depth); + bool const runAnim = renderInfo.m_hasCreationAnimation && renderInfo.m_justCreated; + + glsl::vec2 left, right, up, down; + AlignHorizontal(pxSize.x * 0.5f, anchor, left, right); + AlignVertical(pxSize.y * 0.5f, anchor, up, down); + + m2::PointD const pixelOffset = renderInfo.m_pixelOffset; + glsl::vec2 const offset(pixelOffset.x, pixelOffset.y); + up += offset; + down += offset; + + dp::Color color = dp::Color::White(); + if (!renderInfo.m_color.empty()) + color = df::GetColorConstant(renderInfo.m_color); + + glsl::vec4 colorAndAnimate(color.GetRedF(), color.GetGreenF(), color.GetBlueF(), + runAnim ? 1.0f : -1.0f); + buffer.emplace_back(pos, left + down, + glsl::ToVec4(m2::PointD(texRect.LeftTop()), m2::PointD(bgTexRect.LeftTop())), + colorAndAnimate); + buffer.emplace_back(pos, left + up, + glsl::ToVec4(m2::PointD(texRect.LeftBottom()), m2::PointD(bgTexRect.LeftBottom())), + colorAndAnimate); + buffer.emplace_back(pos, right + down, + glsl::ToVec4(m2::PointD(texRect.RightTop()), m2::PointD(bgTexRect.RightTop())), + colorAndAnimate); + buffer.emplace_back(pos, right + up, + glsl::ToVec4(m2::PointD(texRect.RightBottom()), m2::PointD(bgTexRect.RightBottom())), + colorAndAnimate); + + gpu::Program program; + gpu::Program program3d; + if (renderInfo.m_isMarkAboveText) + { + program = runAnim ? gpu::Program::BookmarkAnimAboveText + : gpu::Program::BookmarkAboveText; + program3d = runAnim ? gpu::Program::BookmarkAnimAboveTextBillboard + : gpu::Program::BookmarkAboveTextBillboard; + } + else + { + program = runAnim ? gpu::Program::BookmarkAnim + : gpu::Program::Bookmark; + program3d = runAnim ? gpu::Program::BookmarkAnimBillboard + : gpu::Program::BookmarkBillboard; + } + auto state = CreateRenderState(program, renderInfo.m_depthLayer); + state.SetProgram3d(program3d); + state.SetColorTexture(region.GetTexture()); + state.SetTextureFilter(dp::TextureFilter::Nearest); + state.SetDepthTestEnabled(renderInfo.m_depthTestEnabled); + + dp::AttributeProvider attribProvider(1, static_cast(buffer.size())); + attribProvider.InitStream(0, UPV::GetBinding(), make_ref(buffer.data())); + + batcher.InsertListOfStrip(context, state, make_ref(&attribProvider), dp::Batcher::VertexPerQuad); } - auto state = CreateRenderState(program, renderInfo.m_depthLayer); - state.SetProgram3d(program3d); - state.SetColorTexture(region.GetTexture()); - state.SetTextureFilter(dp::TextureFilter::Nearest); - state.SetDepthTestEnabled(renderInfo.m_depthTestEnabled); - - dp::AttributeProvider attribProvider(1, static_cast(buffer.size())); - attribProvider.InitStream(0, UPV::GetBinding(), make_ref(buffer.data())); - - batcher.InsertListOfStrip(context, state, make_ref(&attribProvider), dp::Batcher::VertexPerQuad); } if (renderInfo.m_titleDecl != nullptr) { - GenerateTextShapes(context, renderInfo, tileKey, tileCenter, symbolSize, symbolOffset, - textures, batcher); + GenerateTextShapes(context, textures, renderInfo, tileKey, tileCenter, symbolOffset, symbolSize, batcher); } if (renderInfo.m_badgeNames != nullptr) { - ASSERT(!renderInfo.m_hasSymbolShapes || renderInfo.m_symbolNames == nullptr, + ASSERT(!renderInfo.m_symbolIsPOI || renderInfo.m_symbolNames == nullptr, ("Multiple POI shapes in an usermark are not supported yet")); - auto const badgeName = GetSymbolNameForZoomLevel(renderInfo.m_badgeNames, tileKey); + auto const badgeName = GetSymbolNameForZoomLevel(make_ref(renderInfo.m_badgeNames), tileKey); if (!badgeName.empty()) { - GeneratePoiSymbolShape(context, renderInfo, tileKey, tileCenter, badgeName, textures, - symbolOffset, batcher); + GeneratePoiSymbolShape(context, textures, renderInfo, tileKey, tileCenter, badgeName, symbolOffset, batcher); } } @@ -511,8 +521,8 @@ void CacheUserLines(ref_ptr context, TileKey const & tileKe ref_ptr textures, kml::TrackIdCollection const & linesId, UserLinesRenderCollection & renderParams, dp::Batcher & batcher) { - ASSERT_GREATER(tileKey.m_zoomLevel, 0, ()); - ASSERT_LESS_OR_EQUAL(tileKey.m_zoomLevel, scales::GetUpperStyleScale(), ()); + CHECK_GREATER(tileKey.m_zoomLevel, 0, ()); + CHECK_LESS_OR_EQUAL(tileKey.m_zoomLevel, scales::GetUpperStyleScale(), ()); auto const vs = static_cast(df::VisualParams::Instance().GetVisualScale()); bool const simplify = tileKey.m_zoomLevel <= kLineSimplifyLevelEnd; diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp index 38ca36b7e1..184a52d52c 100644 --- a/drape_frontend/user_mark_shapes.hpp +++ b/drape_frontend/user_mark_shapes.hpp @@ -28,7 +28,7 @@ struct UserMarkRenderParams drape_ptr m_symbolOffsets; drape_ptr m_badgeNames; df::ColorConstant m_color; - bool m_hasSymbolShapes = false; + bool m_symbolIsPOI = false; bool m_hasTitlePriority = false; uint16_t m_priority = 0; SpecialDisplacement m_displacement = SpecialDisplacement::UserMark; diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp index 9fa4f6fba6..2740495bd9 100644 --- a/drape_frontend/user_marks_provider.hpp +++ b/drape_frontend/user_marks_provider.hpp @@ -40,6 +40,7 @@ public: struct ColoredSymbolZoomInfo { std::map m_zoomInfo; + bool m_isSymbolStub = false; bool m_needOverlay = true; bool m_addTextSize = false; }; @@ -74,7 +75,7 @@ public: virtual uint16_t GetPriority() const = 0; virtual df::SpecialDisplacement GetDisplacement() const = 0; virtual uint32_t GetIndex() const = 0; - virtual bool HasSymbolShapes() const = 0; + virtual bool SymbolIsPOI() const = 0; virtual bool HasTitlePriority() const = 0; virtual int GetMinZoom() const = 0; virtual int GetMinTitleZoom() const = 0; diff --git a/map/local_ads_mark.hpp b/map/local_ads_mark.hpp index 85ec206534..8c23f7e825 100644 --- a/map/local_ads_mark.hpp +++ b/map/local_ads_mark.hpp @@ -27,7 +27,7 @@ public: drape_ptr GetTitleDecl() const override; uint16_t GetPriority() const override { return m_data.m_priority; } - bool HasSymbolShapes() const override { return true; } + bool SymbolIsPOI() const override { return true; } bool HasTitlePriority() const override { return true; } int GetMinZoom() const override { return static_cast(m_data.m_minZoomLevel); } FeatureID GetFeatureID() const override { return m_featureId; } diff --git a/map/routing_mark.cpp b/map/routing_mark.cpp index ff6bd25c0c..c063e4f0e0 100644 --- a/map/routing_mark.cpp +++ b/map/routing_mark.cpp @@ -161,6 +161,14 @@ drape_ptr RouteMarkPoint::GetTitleDecl() const return titles; } + +drape_ptr RouteMarkPoint::GetColoredSymbols() const +{ + auto coloredSymbol = make_unique_dp(); + coloredSymbol->m_isSymbolStub = true; + return coloredSymbol; +} + void RouteMarkPoint::SetFollowingMode(bool enabled) { if (m_followingMode == enabled) @@ -659,6 +667,13 @@ drape_ptr RoadWarningMark::GetSymbolNames return symbol; } +drape_ptr RoadWarningMark::GetColoredSymbols() const +{ + auto coloredSymbol = make_unique_dp(); + coloredSymbol->m_isSymbolStub = true; + return coloredSymbol; +} + // static std::string RoadWarningMark::GetLocalizedRoadWarningType(RoadWarningMarkType type) { diff --git a/map/routing_mark.hpp b/map/routing_mark.hpp index 0b2ee3d85d..3cd725c1a6 100644 --- a/map/routing_mark.hpp +++ b/map/routing_mark.hpp @@ -62,7 +62,8 @@ public: drape_ptr GetTitleDecl() const override; - bool HasSymbolShapes() const override { return false; } + drape_ptr GetColoredSymbols() const override; + bool HasTitlePriority() const override { return true; } df::SpecialDisplacement GetDisplacement() const override { return df::SpecialDisplacement::SpecialModeUserMark; } @@ -108,9 +109,9 @@ class TransitMark : public UserMark public: explicit TransitMark(m2::PointD const & ptOrg); - df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::TransitMarkLayer; } + df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::RoutingBottomMarkLayer; } - bool HasSymbolShapes() const override { return !m_symbolNames.empty() || !m_coloredSymbols.m_zoomInfo.empty(); } + bool SymbolIsPOI() const override { return true; } bool HasTitlePriority() const override { return true; } df::SpecialDisplacement GetDisplacement() const override { return df::SpecialDisplacement::SpecialModeUserMark; } @@ -173,7 +174,7 @@ public: uint32_t GetIndex() const override { return m_index; } df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::RoutingMarkLayer; } - bool HasSymbolShapes() const override { return true; } + bool SymbolIsPOI() const override { return true; } bool HasTitlePriority() const override { return true; } uint16_t GetPriority() const override { return static_cast(Priority::SpeedCamera); } df::SpecialDisplacement GetDisplacement() const override { return df::SpecialDisplacement::SpecialModeUserMark; } @@ -211,6 +212,9 @@ public: explicit RoadWarningMark(m2::PointD const & ptOrg); dp::Anchor GetAnchor() const override { return dp::Anchor::Bottom; } + df::DepthLayer GetDepthLayer() const override { return df::DepthLayer::RoutingBottomMarkLayer; } + uint16_t GetPriority() const override { return static_cast(Priority::RoadWarning); } + df::SpecialDisplacement GetDisplacement() const override { return df::SpecialDisplacement::SpecialModeUserMark; } void SetIndex(uint32_t index); uint32_t GetIndex() const override { return m_index; } @@ -229,6 +233,8 @@ public: drape_ptr GetSymbolNames() const override; + drape_ptr GetColoredSymbols() const override; + int GetAutoVisibleMinZoom() const override { return kAutoVisibleMinZoom; } static std::string GetLocalizedRoadWarningType(RoadWarningMarkType type); diff --git a/map/user_mark.cpp b/map/user_mark.cpp index 4e5d043702..51337c9c42 100644 --- a/map/user_mark.cpp +++ b/map/user_mark.cpp @@ -71,7 +71,7 @@ ColoredDebugMarkPoint::ColoredDebugMarkPoint(m2::PointD const & ptOrg) params.m_radiusInPixels = 7.0f * vs; params.m_color = dp::Color::Green(); m_coloredSymbols.m_needOverlay = false; - m_coloredSymbols.m_zoomInfo.insert(make_pair(1, params)); + m_coloredSymbols.m_zoomInfo.insert(std::make_pair(1, params)); } void ColoredDebugMarkPoint::SetColor(dp::Color const & color) diff --git a/map/user_mark.hpp b/map/user_mark.hpp index 7f4785c08b..a20b8a44a5 100644 --- a/map/user_mark.hpp +++ b/map/user_mark.hpp @@ -30,6 +30,7 @@ public: TransitTransfer, TransitKeyStop, SpeedCamera, + RoadWarning, }; enum Type: uint32_t @@ -75,7 +76,7 @@ public: uint16_t GetPriority() const override { return static_cast(Priority::Default); } df::SpecialDisplacement GetDisplacement() const override { return df::SpecialDisplacement::UserMark; } uint32_t GetIndex() const override { return 0; } - bool HasSymbolShapes() const override { return false; } + bool SymbolIsPOI() const override { return false; } bool HasTitlePriority() const override { return false; } int GetMinZoom() const override { return 1; } int GetMinTitleZoom() const override { return GetMinZoom(); } @@ -139,7 +140,7 @@ public: ColoredDebugMarkPoint(m2::PointD const & ptOrg); void SetColor(dp::Color const & color); - bool HasSymbolShapes() const override { return true; } + bool SymbolIsPOI() const override { return true; } drape_ptr GetSymbolNames() const override { return nullptr; } drape_ptr GetColoredSymbols() const override;