diff --git a/drape/overlay_handle.cpp b/drape/overlay_handle.cpp index 0ad0384f8a..ec3d6b43f4 100644 --- a/drape/overlay_handle.cpp +++ b/drape/overlay_handle.cpp @@ -1,10 +1,12 @@ #include "overlay_handle.hpp" -OverlayHandle::OverlayHandle(OverlayHandle::Anchor anchor, m2::PointD const & gbPivot, - m2::PointD const & pxSize) - : m_anchor(anchor) +OverlayHandle::OverlayHandle(const FeatureID & id, OverlayHandle::Anchor anchor, m2::PointD const & gbPivot, + m2::PointD const & pxSize, double priority) + : m_id(id) + , m_anchor(anchor) , m_gbPivot(gbPivot) , m_pxHalfSize(pxSize.x / 2.0, pxSize.y / 2.0) + , m_priority(priority) , m_isVisible(false) { } @@ -55,3 +57,13 @@ void OverlayHandle::GetElementIndexes(RefPointer mutator) co ASSERT_EQUAL(m_isVisible, true, ()); mutator->AppendIndexes(&m_indexes[0], m_indexes.size()); } + +FeatureID const & OverlayHandle::GetFeatureID() const +{ + return m_id; +} + +double const & OverlayHandle::GetPriority() const +{ + return m_priority; +} diff --git a/drape/overlay_handle.hpp b/drape/overlay_handle.hpp index bfbf3b6f57..35b4b16c0b 100644 --- a/drape/overlay_handle.hpp +++ b/drape/overlay_handle.hpp @@ -1,5 +1,7 @@ #pragma once +#include "../indexer/feature_decl.hpp" + #include "../geometry/screenbase.hpp" #include "../geometry/point2d.hpp" #include "../geometry/rect2d.hpp" @@ -22,8 +24,10 @@ public: RightBottom = Right | Bottom }; - OverlayHandle(Anchor anchor, m2::PointD const & gbPivot, - m2::PointD const & pxSize); + OverlayHandle(FeatureID const & id, + Anchor anchor, m2::PointD const & gbPivot, + m2::PointD const & pxSize, + double priority); bool IsVisible() const; void SetIsVisible(bool isVisible); @@ -33,10 +37,15 @@ public: size_t GetIndexCount() const; void GetElementIndexes(RefPointer mutator) const; + FeatureID const & GetFeatureID() const; + double const & GetPriority() const; + private: + FeatureID m_id; Anchor m_anchor; m2::PointD m_gbPivot; m2::PointD m_pxHalfSize; + double m_priority; bool m_isVisible; vector m_indexes; diff --git a/drape_frontend/apply_feature_functors.cpp b/drape_frontend/apply_feature_functors.cpp index 2f4be97cf9..353853ba4e 100644 --- a/drape_frontend/apply_feature_functors.cpp +++ b/drape_frontend/apply_feature_functors.cpp @@ -56,16 +56,17 @@ namespace df } } - BaseApplyFeature::BaseApplyFeature(EngineContext & context, TileKey tileKey) + BaseApplyFeature::BaseApplyFeature(EngineContext & context, TileKey tileKey, FeatureID const & id) : m_context(context) , m_tileKey(tileKey) + , m_id(id) { } // ============================================= // - ApplyPointFeature::ApplyPointFeature(EngineContext & context, TileKey tileKey) - : base_t(context, tileKey) + ApplyPointFeature::ApplyPointFeature(EngineContext & context, TileKey tileKey, FeatureID const & id) + : base_t(context, tileKey, id) , m_hasPoint(false) , m_symbolDepth(graphics::minDepth) , m_circleDepth(graphics::minDepth) @@ -115,7 +116,7 @@ namespace df } else if (m_circleRule) { - CircleViewParams params; + CircleViewParams params(m_id); params.m_depth = m_circleDepth; params.m_color = ToDrapeColor(m_circleRule->color()); params.m_radius = m_circleRule->radius(); @@ -125,7 +126,7 @@ namespace df } else if (m_symbolRule) { - PoiSymbolViewParams params; + PoiSymbolViewParams params(m_id); params.m_depth = m_symbolDepth; params.m_symbolName = m_symbolRule->name(); @@ -136,8 +137,8 @@ namespace df // ============================================= // - ApplyAreaFeature::ApplyAreaFeature(EngineContext & context, TileKey tileKey) - : base_t(context, tileKey) + ApplyAreaFeature::ApplyAreaFeature(EngineContext & context, TileKey tileKey, FeatureID const & id) + : base_t(context, tileKey, id) { } @@ -170,8 +171,8 @@ namespace df // ============================================= // - ApplyLineFeature::ApplyLineFeature(EngineContext & context, TileKey tileKey) - : base_t(context, tileKey) + ApplyLineFeature::ApplyLineFeature(EngineContext & context, TileKey tileKey, FeatureID const & id) + : base_t(context, tileKey, id) { } diff --git a/drape_frontend/apply_feature_functors.hpp b/drape_frontend/apply_feature_functors.hpp index e75fcde45f..1b317d7905 100644 --- a/drape_frontend/apply_feature_functors.hpp +++ b/drape_frontend/apply_feature_functors.hpp @@ -19,18 +19,22 @@ namespace df { public: BaseApplyFeature(EngineContext & context, - TileKey tileKey); + TileKey tileKey, + FeatureID const & id); protected: EngineContext & m_context; TileKey m_tileKey; + FeatureID m_id; }; class ApplyPointFeature : public BaseApplyFeature { typedef BaseApplyFeature base_t; public: - ApplyPointFeature(EngineContext & context, TileKey tileKey); + ApplyPointFeature(EngineContext & context, + TileKey tileKey, + FeatureID const & id); void operator()(CoordPointT const & point); void operator()(m2::PointD const & point); @@ -50,7 +54,9 @@ namespace df { typedef ApplyPointFeature base_t; public: - ApplyAreaFeature(EngineContext & context, TileKey tileKey); + ApplyAreaFeature(EngineContext & context, + TileKey tileKey, + FeatureID const & id); using base_t::operator (); @@ -65,7 +71,9 @@ namespace df { typedef BaseApplyFeature base_t; public: - ApplyLineFeature(EngineContext & context, TileKey tileKey); + ApplyLineFeature(EngineContext & context, + TileKey tileKey, + FeatureID const & id); void operator ()(CoordPointT const & point); void ProcessRule(Stylist::rule_wrapper_t const & rule); diff --git a/drape_frontend/circle_shape.cpp b/drape_frontend/circle_shape.cpp index d48c0d16c5..a6e6b9be8a 100644 --- a/drape_frontend/circle_shape.cpp +++ b/drape_frontend/circle_shape.cpp @@ -71,8 +71,10 @@ namespace df normalDecl.m_offset = 3 * sizeof(float); normalDecl.m_stride = 5 * sizeof(float); - OverlayHandle * overlay = new OverlayHandle(OverlayHandle::Center, m_pt, - m2::PointD(m_params.m_radius, m_params.m_radius)); + OverlayHandle * overlay = new OverlayHandle(m_params.m_id, + OverlayHandle::Center, m_pt, + m2::PointD(m_params.m_radius, m_params.m_radius), + m_params.m_depth); provider.InitStream(0, info, MakeStackRefPointer(&stream[0])); batcher->InsertTriangleFan(state, MakeStackRefPointer(&provider), MovePointer(overlay)); diff --git a/drape_frontend/poi_symbol_shape.cpp b/drape_frontend/poi_symbol_shape.cpp index b5f4e4102d..fb46070b4a 100644 --- a/drape_frontend/poi_symbol_shape.cpp +++ b/drape_frontend/poi_symbol_shape.cpp @@ -61,7 +61,11 @@ namespace df texDecl.m_offset = (3 + 2) * sizeof(float); texDecl.m_stride = 8 * sizeof(float); - OverlayHandle * handle = new OverlayHandle(OverlayHandle::Center, m_pt, region.m_pixelSize); + OverlayHandle * handle = new OverlayHandle(m_params.m_id, + OverlayHandle::Center, + m_pt, + region.m_pixelSize, + m_params.m_depth); provider.InitStream(0, info, MakeStackRefPointer(stream)); batcher->InsertTriangleStrip(state, MakeStackRefPointer(&provider), MovePointer(handle)); diff --git a/drape_frontend/rule_drawer.cpp b/drape_frontend/rule_drawer.cpp index 7e180bedee..375c6d96ce 100644 --- a/drape_frontend/rule_drawer.cpp +++ b/drape_frontend/rule_drawer.cpp @@ -47,7 +47,7 @@ namespace df if (s.AreaStyleExists()) { - ApplyAreaFeature apply(m_context, m_tileKey); + ApplyAreaFeature apply(m_context, m_tileKey, f.GetID()); f.ForEachTriangleRef(apply, m_tileKey.m_zoomLevel); if (s.PointStyleExists()) @@ -58,7 +58,7 @@ namespace df } else if (s.LineStyleExists()) { - ApplyLineFeature apply(m_context, m_tileKey); + ApplyLineFeature apply(m_context, m_tileKey, f.GetID()); f.ForEachPointRef(apply, m_tileKey.m_zoomLevel); s.ForEachRule(bind(&ApplyLineFeature::ProcessRule, &apply, _1)); @@ -67,7 +67,7 @@ namespace df else { ASSERT(s.PointStyleExists(), ()); - ApplyPointFeature apply(m_context, m_tileKey); + ApplyPointFeature apply(m_context, m_tileKey, f.GetID()); f.ForEachPointRef(apply, m_tileKey.m_zoomLevel); s.ForEachRule(bind(&ApplyPointFeature::ProcessRule, &apply, _1)); apply.Finish(); diff --git a/drape_frontend/shape_view_params.hpp b/drape_frontend/shape_view_params.hpp index 119c06914a..d79eebf4ad 100644 --- a/drape_frontend/shape_view_params.hpp +++ b/drape_frontend/shape_view_params.hpp @@ -1,5 +1,7 @@ #pragma once +#include "../indexer/feature_decl.hpp" + #include "../drape/color.hpp" #include "../std/string.hpp" @@ -27,11 +29,17 @@ namespace df struct PoiSymbolViewParams : CommonViewParams { + PoiSymbolViewParams(FeatureID const & id) : m_id(id) {} + + FeatureID m_id; string m_symbolName; }; struct CircleViewParams : CommonViewParams { + CircleViewParams(FeatureID const & id) : m_id(id) {} + + FeatureID m_id; Color m_color; float m_radius; };