diff options
author | Daria Volvenkova <d.volvenkova@corp.mail.ru> | 2018-01-18 14:48:03 +0300 |
---|---|---|
committer | Roman Kuznetsov <r.kuznetsow@gmail.com> | 2018-01-18 15:44:15 +0300 |
commit | 6762ff38674c8f2f187d8219982d58a2170ef444 (patch) | |
tree | 9f2a87c45d73088bc3fb5e76b780e4ca9db48225 /drape_frontend | |
parent | 3a83cf6ffff91a78b409df2d8b663af28137a22b (diff) |
New displaying of transfer titles.
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/apply_feature_functors.cpp | 2 | ||||
-rw-r--r-- | drape_frontend/drape_engine.cpp | 1 | ||||
-rw-r--r-- | drape_frontend/rule_drawer.cpp | 5 | ||||
-rw-r--r-- | drape_frontend/text_shape.cpp | 8 | ||||
-rw-r--r-- | drape_frontend/text_shape.hpp | 5 | ||||
-rw-r--r-- | drape_frontend/user_mark_shapes.cpp | 22 | ||||
-rw-r--r-- | drape_frontend/user_mark_shapes.hpp | 1 | ||||
-rw-r--r-- | drape_frontend/user_marks_provider.hpp | 2 |
8 files changed, 36 insertions, 10 deletions
diff --git a/drape_frontend/apply_feature_functors.cpp b/drape_frontend/apply_feature_functors.cpp index a72e62562b..98dc2929aa 100644 --- a/drape_frontend/apply_feature_functors.cpp +++ b/drape_frontend/apply_feature_functors.cpp @@ -604,6 +604,7 @@ void ApplyPointFeature::Finish(ref_ptr<dp::TextureManager> texMng) textParams.m_specialPriority = specialModePriority; textParams.m_startOverlayRank = hasPOI ? dp::OverlayRank1 : dp::OverlayRank0; m_insertShape(make_unique_dp<TextShape>(m_centerPoint, textParams, m_tileKey, symbolSize, + m2::PointF(0.0f, 0.0f) /* symbolOffset */, dp::Center /* symbolAnchor */, 0 /* textIndex */)); } } @@ -1190,6 +1191,7 @@ void ApplyLineFeatureAdditional::Finish(ref_ptr<dp::TextureManager> texMng, m_insertShape(make_unique_dp<TextShape>(shieldPos, textParams, m_tileKey, m2::PointF(0.0f, 0.0f) /* symbolSize */, + m2::PointF(0.0f, 0.0f) /* symbolOffset */, dp::Center /* symbolAnchor */, textIndex)); if (IsColoredRoadShield(shield)) m_insertShape(make_unique_dp<ColoredSymbolShape>(shieldPos, symbolParams, m_tileKey, textIndex)); diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index 0388493d8e..81ca0a183e 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -249,6 +249,7 @@ void DrapeEngine::UpdateUserMarksGroup(MarkGroupID groupId, UserMarksProvider * renderInfo->m_symbolNames = mark->GetSymbolNames(); renderInfo->m_coloredSymbols = mark->GetColoredSymbols(); renderInfo->m_symbolSizes = mark->GetSymbolSizes(); + renderInfo->m_symbolOffsets = mark->GetSymbolOffsets(); renderInfo->m_hasSymbolPriority = mark->HasSymbolPriority(); renderInfo->m_hasTitlePriority = mark->HasTitlePriority(); renderInfo->m_priority = mark->GetPriority(); diff --git a/drape_frontend/rule_drawer.cpp b/drape_frontend/rule_drawer.cpp index eb1dea1dd3..d85396a90f 100644 --- a/drape_frontend/rule_drawer.cpp +++ b/drape_frontend/rule_drawer.cpp @@ -555,9 +555,10 @@ void RuleDrawer::DrawTileNet(TInsertShapeFn const & insertShape) strings::to_string(key.m_zoomLevel); tp.m_titleDecl.m_primaryTextFont = dp::FontDecl(dp::Color::Red(), 30); - tp.m_titleDecl.m_primaryOffset = {0.f, 0.f}; + tp.m_titleDecl.m_primaryOffset = {0.0f, 0.0f}; drape_ptr<TextShape> textShape = make_unique_dp<TextShape>(r.Center(), tp, key, - m2::PointF(0.0, 0.0) /* symbolSize */, + m2::PointF(0.0f, 0.0f) /* symbolSize */, + m2::PointF(0.0f, 0.0f) /* symbolOffset */, dp::Anchor::Center, 0 /* textIndex */); textShape->DisableDisplacing(); diff --git a/drape_frontend/text_shape.cpp b/drape_frontend/text_shape.cpp index f64b9bd1c5..906c617189 100644 --- a/drape_frontend/text_shape.cpp +++ b/drape_frontend/text_shape.cpp @@ -151,12 +151,13 @@ private: TextShape::TextShape(m2::PointD const & basePoint, TextViewParams const & params, TileKey const & tileKey, - m2::PointF const & symbolSize, dp::Anchor symbolAnchor, + m2::PointF const & symbolSize, m2::PointF const & symbolOffset, dp::Anchor symbolAnchor, uint32_t textIndex) : m_basePoint(basePoint) , m_params(params) , m_tileCoords(tileKey.GetTileCoords()) , m_symbolAnchor(symbolAnchor) + , m_symbolOffset(symbolOffset) , m_textIndex(textIndex) { m_symbolSizes.push_back(symbolSize); @@ -164,12 +165,13 @@ TextShape::TextShape(m2::PointD const & basePoint, TextViewParams const & params TextShape::TextShape(m2::PointD const & basePoint, TextViewParams const & params, TileKey const & tileKey, std::vector<m2::PointF> const & symbolSizes, - dp::Anchor symbolAnchor, uint32_t textIndex) + m2::PointF const & symbolOffset, dp::Anchor symbolAnchor, uint32_t textIndex) : m_basePoint(basePoint) , m_params(params) , m_tileCoords(tileKey.GetTileCoords()) , m_symbolSizes(symbolSizes) , m_symbolAnchor(symbolAnchor) + , m_symbolOffset(symbolOffset) , m_textIndex(textIndex) { ASSERT_GREATER(m_symbolSizes.size(), 0, ()); @@ -260,6 +262,8 @@ void TextShape::Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureManager> t CalculateTextOffsets(titleDecl, primaryLayout.GetPixelSize(), secondaryLayout != nullptr ? secondaryLayout->GetPixelSize() : m2::PointF(0.0f, 0.0f), primaryOffset, secondaryOffset); + primaryOffset += glsl::vec2(m_symbolOffset.x, m_symbolOffset.y); + secondaryOffset += glsl::vec2(m_symbolOffset.x, m_symbolOffset.y); if (primaryLayout.GetGlyphCount() > 0) { diff --git a/drape_frontend/text_shape.hpp b/drape_frontend/text_shape.hpp index f6244c9cab..47ae779137 100644 --- a/drape_frontend/text_shape.hpp +++ b/drape_frontend/text_shape.hpp @@ -18,12 +18,12 @@ class TextShape : public MapShape { public: TextShape(m2::PointD const & basePoint, TextViewParams const & params, - TileKey const & tileKey, m2::PointF const & symbolSize, + TileKey const & tileKey, m2::PointF const & symbolSize, m2::PointF const & symbolOffset, dp::Anchor symbolAnchor, uint32_t textIndex); TextShape(m2::PointD const & basePoint, TextViewParams const & params, TileKey const & tileKey, std::vector<m2::PointF> const & symbolSizes, - dp::Anchor symbolAnchor, uint32_t textIndex); + m2::PointF const & symbolOffset, dp::Anchor symbolAnchor, uint32_t textIndex); void Draw(ref_ptr<dp::Batcher> batcher, ref_ptr<dp::TextureManager> textures) const override; MapShapeType GetType() const override { return MapShapeType::OverlayType; } @@ -50,6 +50,7 @@ private: m2::PointI m_tileCoords; std::vector<m2::PointF> m_symbolSizes; dp::Anchor m_symbolAnchor; + m2::PointF m_symbolOffset; uint32_t m_textIndex; bool m_disableDisplacing = false; diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp index ea232ddba3..f7bcd56165 100644 --- a/drape_frontend/user_mark_shapes.cpp +++ b/drape_frontend/user_mark_shapes.cpp @@ -15,6 +15,7 @@ #include "drape/batcher.hpp" #include "indexer/feature_decl.hpp" +#include "indexer/scales.hpp" #include "geometry/clipping.hpp" #include "geometry/mercator.hpp" @@ -119,7 +120,8 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture m2::PointD const tileCenter = tileKey.GetGlobalRect().Center(); depthLayer = renderInfo.m_depthLayer; - m2::PointF symbolSize; + m2::PointF symbolSize(0.0f, 0.0f); + m2::PointF symbolOffset(0.0f, 0.0f); std::string symbolName; if (renderInfo.m_symbolNames != nullptr) { @@ -178,7 +180,18 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture params.m_specialDisplacement = SpecialDisplacement::UserMark; 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; + 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<size_t>(min(tileKey.m_zoomLevel - 1, scales::UPPER_STYLE_SCALE)); + symbolOffset = renderInfo.m_symbolOffsets->at(offsetIndex); + params.m_offset = symbolOffset; + } PoiSymbolShape(renderInfo.m_pivot, params, tileKey, kStartUserMarkOverlayIndex + renderInfo.m_index).Draw(&batcher, textures); } @@ -263,13 +276,14 @@ void CacheUserMarks(TileKey const & tileKey, ref_ptr<dp::TextureManager> texture if (renderInfo.m_symbolSizes != nullptr) { - TextShape(renderInfo.m_pivot, params, tileKey, - *renderInfo.m_symbolSizes.get(), renderInfo.m_anchor, overlayIndex).Draw(&batcher, textures); + TextShape(renderInfo.m_pivot, params, tileKey, *renderInfo.m_symbolSizes.get(), + m2::PointF(0.0f, 0.0f) /* symbolOffset */, renderInfo.m_anchor, + overlayIndex).Draw(&batcher, textures); } else { TextShape(renderInfo.m_pivot, params, tileKey, - symbolSize, renderInfo.m_anchor, overlayIndex).Draw(&batcher, textures); + symbolSize, symbolOffset, renderInfo.m_anchor, overlayIndex).Draw(&batcher, textures); } } } diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp index 99ebc73e80..f649dc5400 100644 --- a/drape_frontend/user_mark_shapes.hpp +++ b/drape_frontend/user_mark_shapes.hpp @@ -24,6 +24,7 @@ struct UserMarkRenderParams drape_ptr<UserPointMark::SymbolNameZoomInfo> m_symbolNames; drape_ptr<UserPointMark::TitlesInfo> m_titleDecl; drape_ptr<UserPointMark::SymbolSizes> m_symbolSizes; + drape_ptr<UserPointMark::SymbolOffsets> m_symbolOffsets; 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 a31329c260..3ee85681ca 100644 --- a/drape_frontend/user_marks_provider.hpp +++ b/drape_frontend/user_marks_provider.hpp @@ -43,6 +43,7 @@ public: using SymbolNameZoomInfo = std::map<int, std::string>; using TitlesInfo = std::vector<dp::TitleDecl>; using SymbolSizes = std::vector<m2::PointF>; + using SymbolOffsets = std::vector<m2::PointF>; UserPointMark(); virtual ~UserPointMark() {} @@ -62,6 +63,7 @@ public: virtual drape_ptr<SymbolNameZoomInfo> GetSymbolNames() const = 0; virtual drape_ptr<ColoredSymbolZoomInfo> GetColoredSymbols() const = 0; virtual drape_ptr<SymbolSizes> GetSymbolSizes() const = 0; + virtual drape_ptr<SymbolOffsets> GetSymbolOffsets() const = 0; virtual uint16_t GetPriority() const = 0; virtual uint32_t GetIndex() const = 0; virtual bool HasSymbolPriority() const = 0; |