diff options
author | Anatoliy Tomilov <tomilovanatoliy@gmail.com> | 2020-08-03 11:41:38 +0300 |
---|---|---|
committer | Tatiana Yan <tatiana.kondakova@gmail.com> | 2020-08-05 12:32:22 +0300 |
commit | b6cf7ee414950b836355d66c6f96d051566c1365 (patch) | |
tree | 9919a0bdd4d5a25e9c2374d218171531925c613c /drape_frontend | |
parent | b3a1b933678370c7b1b387211052aaed9ebd8ad8 (diff) |
[drape] [Booking] Make visited Booking searchmarks ethereal MAPSME-14324
Diffstat (limited to 'drape_frontend')
-rw-r--r-- | drape_frontend/apply_feature_functors.cpp | 6 | ||||
-rw-r--r-- | drape_frontend/drape_engine.cpp | 1 | ||||
-rw-r--r-- | drape_frontend/poi_symbol_shape.cpp | 16 | ||||
-rw-r--r-- | drape_frontend/shape_view_params.hpp | 2 | ||||
-rw-r--r-- | drape_frontend/user_mark_shapes.cpp | 119 | ||||
-rw-r--r-- | drape_frontend/user_mark_shapes.hpp | 1 | ||||
-rw-r--r-- | drape_frontend/user_marks_provider.hpp | 2 |
7 files changed, 80 insertions, 67 deletions
diff --git a/drape_frontend/apply_feature_functors.cpp b/drape_frontend/apply_feature_functors.cpp index 4b0ab2279b..910126205e 100644 --- a/drape_frontend/apply_feature_functors.cpp +++ b/drape_frontend/apply_feature_functors.cpp @@ -52,6 +52,7 @@ double const kMinVisibleFontSize = 8.0; std::string const kStarSymbol = "★"; std::string const kPriceSymbol = "$"; +df::ColorConstant const kPoiDeletedMaskColor = "PoiDeletedMask"; df::ColorConstant const kPoiHotelTextOutlineColor = "PoiHotelTextOutline"; df::ColorConstant const kRoadShieldBlackTextColor = "RoadShieldBlackText"; df::ColorConstant const kRoadShieldWhiteTextColor = "RoadShieldWhiteText"; @@ -592,7 +593,8 @@ void ApplyPointFeature::Finish(ref_ptr<dp::TextureManager> texMng) params.m_posZ = m_posZ; params.m_hasArea = m_hasArea; params.m_prioritized = m_createdByEditor; - params.m_obsoleteInEditor = m_obsoleteInEditor; + if (m_obsoleteInEditor) + params.m_maskColor = kPoiDeletedMaskColor; params.m_specialDisplacement = specialDisplacementMode ? SpecialDisplacement::SpecialMode : SpecialDisplacement::None; params.m_specialPriority = specialModePriority; @@ -1123,7 +1125,7 @@ void ApplyLineFeatureAdditional::GetRoadShieldsViewParams(ref_ptr<dp::TextureMan poiParams.m_posZ = 0.0f; poiParams.m_hasArea = false; poiParams.m_prioritized = false; - poiParams.m_obsoleteInEditor = false; + poiParams.m_maskColor.clear(); poiParams.m_anchor = anchor; poiParams.m_offset = GetShieldOffset(anchor, 0.5, 0.5); diff --git a/drape_frontend/drape_engine.cpp b/drape_frontend/drape_engine.cpp index eee38244ed..4f86266291 100644 --- a/drape_frontend/drape_engine.cpp +++ b/drape_frontend/drape_engine.cpp @@ -948,6 +948,7 @@ drape_ptr<UserMarkRenderParams> DrapeEngine::GenerateMarkRenderInfo(UserPointMar renderInfo->m_featureId = mark->GetFeatureID(); renderInfo->m_hasCreationAnimation = mark->HasCreationAnimation(); renderInfo->m_isMarkAboveText = mark->IsMarkAboveText(); + renderInfo->m_symbolOpacity = mark->GetSymbolOpacity(); return renderInfo; } diff --git a/drape_frontend/poi_symbol_shape.cpp b/drape_frontend/poi_symbol_shape.cpp index 33d74326f0..e40d299980 100644 --- a/drape_frontend/poi_symbol_shape.cpp +++ b/drape_frontend/poi_symbol_shape.cpp @@ -14,8 +14,6 @@ namespace { -df::ColorConstant const kPoiDeletedMaskColor = "PoiDeletedMask"; - using SV = gpu::SolidTexturingVertex; using MV = gpu::MaskedTexturingVertex; @@ -187,17 +185,17 @@ void PoiSymbolShape::Draw(ref_ptr<dp::GraphicsContext> context, ref_ptr<dp::Batc glsl::vec4 const position = glsl::vec4(pt, m_params.m_depth, -m_params.m_posZ); m2::PointF const pixelSize = region.GetPixelSize(); - if (m_params.m_obsoleteInEditor) + if (m_params.m_maskColor.empty()) { - dp::TextureManager::ColorRegion maskColorRegion; - textures->GetColorRegion(df::GetColorConstant(kPoiDeletedMaskColor), maskColorRegion); - Batch<MV>(context, batcher, CreateOverlayHandle(pixelSize), position, m_params, - region, maskColorRegion); + Batch<SV>(context, batcher, CreateOverlayHandle(pixelSize), position, m_params, region, + dp::TextureManager::ColorRegion()); } else { - Batch<SV>(context, batcher, CreateOverlayHandle(pixelSize), position, m_params, - region, dp::TextureManager::ColorRegion()); + dp::TextureManager::ColorRegion maskColorRegion; + textures->GetColorRegion(df::GetColorConstant(m_params.m_maskColor), maskColorRegion); + Batch<MV>(context, batcher, CreateOverlayHandle(pixelSize), position, m_params, region, + maskColorRegion); } } diff --git a/drape_frontend/shape_view_params.hpp b/drape_frontend/shape_view_params.hpp index df75814ca6..b1e57e97ee 100644 --- a/drape_frontend/shape_view_params.hpp +++ b/drape_frontend/shape_view_params.hpp @@ -56,7 +56,7 @@ struct PoiSymbolViewParams : CommonOverlayViewParams float m_posZ = 0.0f; bool m_hasArea = false; bool m_prioritized = false; - bool m_obsoleteInEditor = false; + std::string m_maskColor; dp::Anchor m_anchor = dp::Center; m2::PointF m_offset = m2::PointF(0.0f, 0.0f); diff --git a/drape_frontend/user_mark_shapes.cpp b/drape_frontend/user_mark_shapes.cpp index b44994bac8..8b6076ac2b 100644 --- a/drape_frontend/user_mark_shapes.cpp +++ b/drape_frontend/user_mark_shapes.cpp @@ -81,13 +81,18 @@ TextLayout MakePrimaryTextLayout(dp::TitleDecl const & titleDecl, struct UserPointVertex : public gpu::BaseVertex { + using TNormalAndAnimateOrZ = glsl::vec3; using TTexCoord = glsl::vec4; - using TColorAndAnimate = glsl::vec4; + using TColor = glsl::vec4; + using TAnimateOrZ = float; UserPointVertex() = default; - UserPointVertex(TPosition const & pos, TNormal const & normal, TTexCoord const & texCoord, - TColorAndAnimate const & colorAndAnimate) - : m_position(pos), m_normal(normal), m_texCoord(texCoord), m_colorAndAnimate(colorAndAnimate) + UserPointVertex(TPosition const & pos, TNormalAndAnimateOrZ const & normalAndAnimateOrZ, + TTexCoord const & texCoord, TColor const & color) + : m_position(pos) + , m_normalAndAnimateOrZ(normalAndAnimateOrZ) + , m_texCoord(texCoord) + , m_color(color) {} static dp::BindingInfo GetBinding() @@ -95,18 +100,18 @@ struct UserPointVertex : public gpu::BaseVertex dp::BindingInfo info(4); uint8_t offset = 0; offset += dp::FillDecl<TPosition, UserPointVertex>(0, "a_position", info, offset); - offset += dp::FillDecl<TNormal, UserPointVertex>(1, "a_normal", info, offset); + offset += dp::FillDecl<TNormalAndAnimateOrZ, UserPointVertex>(1, "a_normalAndAnimateOrZ", info, + offset); offset += dp::FillDecl<TTexCoord, UserPointVertex>(2, "a_texCoords", info, offset); - offset += dp::FillDecl<TColorAndAnimate, UserPointVertex>(3, "a_colorAndAnimateOrZ", info, - offset); + offset += dp::FillDecl<TColor, UserPointVertex>(3, "a_color", info, offset); return info; } TPosition m_position; - TNormal m_normal; + TNormalAndAnimateOrZ m_normalAndAnimateOrZ; TTexCoord m_texCoord; - TColorAndAnimate m_colorAndAnimate; + TColor m_color; }; std::string GetSymbolNameForZoomLevel(ref_ptr<UserPointMark::SymbolNameZoomInfo> symbolNames, TileKey const & tileKey) @@ -229,29 +234,6 @@ void GeneratePoiSymbolShape(ref_ptr<dp::GraphicsContext> context, ref_ptr<dp::Te m2::PointF const & symbolOffset, dp::Batcher & batcher) { PoiSymbolViewParams params(renderInfo.m_featureId); - params.m_offset = symbolOffset; - - if (renderInfo.m_badgeInfo != nullptr && renderInfo.m_badgeInfo->m_badgeTitleIndex) - { - size_t const badgeTitleIndex = *renderInfo.m_badgeInfo->m_badgeTitleIndex; - CHECK_LESS(badgeTitleIndex, renderInfo.m_titleDecl->size(), ()); - - dp::TitleDecl const & titleDecl = (*renderInfo.m_titleDecl)[badgeTitleIndex]; - TextLayout textLayout = MakePrimaryTextLayout(titleDecl, textures); - float const textWidth = textLayout.GetPixelLength(); - - dp::TextureManager::SymbolRegion region; - textures->GetSymbolRegion(symbolName, region); - float const pixelHalfWidth = 0.5f * region.GetPixelSize().x; - - float constexpr kBadgeSpecialMarginsAdjustmentMultplier = 4.0f; - float const badgeSpecialMarginsAdjustment = - kBadgeSpecialMarginsAdjustmentMultplier * titleDecl.m_primaryOffset.x; - - params.m_pixelWidth = 3.0f * pixelHalfWidth + textWidth + badgeSpecialMarginsAdjustment; - params.m_offset.x += 0.5f * (pixelHalfWidth + textWidth + badgeSpecialMarginsAdjustment); - } - params.m_tileCenter = tileCenter; params.m_depthTestEnabled = renderInfo.m_depthTestEnabled; params.m_depth = renderInfo.m_depth; @@ -261,6 +243,32 @@ void GeneratePoiSymbolShape(ref_ptr<dp::GraphicsContext> context, ref_ptr<dp::Te params.m_specialPriority = renderInfo.m_priority; params.m_symbolName = symbolName; params.m_anchor = renderInfo.m_anchor; + params.m_offset = symbolOffset; + + if (renderInfo.m_badgeInfo) + { + params.m_maskColor = renderInfo.m_badgeInfo->m_maskColor; + if (renderInfo.m_badgeInfo->m_badgeTitleIndex) + { + size_t const badgeTitleIndex = *renderInfo.m_badgeInfo->m_badgeTitleIndex; + CHECK_LESS(badgeTitleIndex, renderInfo.m_titleDecl->size(), ()); + + dp::TitleDecl const & titleDecl = (*renderInfo.m_titleDecl)[badgeTitleIndex]; + TextLayout textLayout = MakePrimaryTextLayout(titleDecl, textures); + float const textWidth = textLayout.GetPixelLength(); + + dp::TextureManager::SymbolRegion region; + textures->GetSymbolRegion(symbolName, region); + float const pixelHalfWidth = 0.5f * region.GetPixelSize().x; + + float constexpr kBadgeSpecialMarginsAdjustmentMultplier = 4.0f; + float const badgeSpecialMarginsAdjustment = + kBadgeSpecialMarginsAdjustmentMultplier * titleDecl.m_primaryOffset.x; + + params.m_pixelWidth = 3.0f * pixelHalfWidth + textWidth + badgeSpecialMarginsAdjustment; + params.m_offset.x += 0.5f * (pixelHalfWidth + textWidth + badgeSpecialMarginsAdjustment); + } + } bool const hasColoredOverlay = renderInfo.m_coloredSymbols != nullptr && renderInfo.m_coloredSymbols->m_needOverlay; params.m_startOverlayRank = hasColoredOverlay ? dp::OverlayRank1 : dp::OverlayRank0; @@ -298,9 +306,9 @@ void GenerateTextShapes(ref_ptr<dp::GraphicsContext> context, ref_ptr<dp::Textur params.m_titleDecl.m_secondaryOffset *= vs; bool const isSdf = df::VisualParams::Instance().IsSdfPrefered(); params.m_titleDecl.m_primaryTextFont.m_isSdf = - params.m_titleDecl.m_primaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf; + params.m_titleDecl.m_primaryTextFont.m_outlineColor != dp::Color::Transparent() || isSdf; params.m_titleDecl.m_secondaryTextFont.m_isSdf = - params.m_titleDecl.m_secondaryTextFont.m_outlineColor != dp::Color::Transparent() ? true : isSdf; + params.m_titleDecl.m_secondaryTextFont.m_outlineColor != dp::Color::Transparent() || isSdf; params.m_depthTestEnabled = renderInfo.m_depthTestEnabled; params.m_depth = renderInfo.m_depth; @@ -456,27 +464,28 @@ void CacheUserMarks(ref_ptr<dp::GraphicsContext> context, TileKey const & tileKe 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); - if (renderInfo.m_customDepth) - colorAndAnimate.w = 0.0f; - - buffer.emplace_back(pos, left + down + offset, - glsl::ToVec4(m2::PointD(texRect.LeftTop()), - m2::PointD(bgTexRect.LeftTop())), - colorAndAnimate); - buffer.emplace_back(pos, left + up + offset, - glsl::ToVec4(m2::PointD(texRect.LeftBottom()), - m2::PointD(bgTexRect.LeftBottom())), - colorAndAnimate); - buffer.emplace_back(pos, right + down + offset, - glsl::ToVec4(m2::PointD(texRect.RightTop()), - m2::PointD(bgTexRect.RightTop())), - colorAndAnimate); - buffer.emplace_back(pos, right + up + offset, - glsl::ToVec4(m2::PointD(texRect.RightBottom()), - m2::PointD(bgTexRect.RightBottom())), - colorAndAnimate); + glsl::vec4 maskColor(color.GetRedF(), color.GetGreenF(), color.GetBlueF(), + renderInfo.m_symbolOpacity); + float animateOrZ = 0.0f; + if (!renderInfo.m_customDepth) + animateOrZ = runAnim ? 1.0f : -1.0f; + + buffer.emplace_back( + pos, glsl::vec3(left + down + offset, animateOrZ), + glsl::ToVec4(m2::PointD(texRect.LeftTop()), m2::PointD(bgTexRect.LeftTop())), + maskColor); + buffer.emplace_back( + pos, glsl::vec3(left + up + offset, animateOrZ), + glsl::ToVec4(m2::PointD(texRect.LeftBottom()), m2::PointD(bgTexRect.LeftBottom())), + maskColor); + buffer.emplace_back( + pos, glsl::vec3(right + down + offset, animateOrZ), + glsl::ToVec4(m2::PointD(texRect.RightTop()), m2::PointD(bgTexRect.RightTop())), + maskColor); + buffer.emplace_back( + pos, glsl::vec3(right + up + offset, animateOrZ), + glsl::ToVec4(m2::PointD(texRect.RightBottom()), m2::PointD(bgTexRect.RightBottom())), + maskColor); gpu::Program program; gpu::Program program3d; diff --git a/drape_frontend/user_mark_shapes.hpp b/drape_frontend/user_mark_shapes.hpp index 9f76244190..b90e9c0664 100644 --- a/drape_frontend/user_mark_shapes.hpp +++ b/drape_frontend/user_mark_shapes.hpp @@ -42,6 +42,7 @@ struct UserMarkRenderParams bool m_isVisible = true; FeatureID m_featureId; bool m_isMarkAboveText = false; + float m_symbolOpacity = 1.0f; }; struct LineLayer diff --git a/drape_frontend/user_marks_provider.hpp b/drape_frontend/user_marks_provider.hpp index b0a0170217..c5b7c16dbc 100644 --- a/drape_frontend/user_marks_provider.hpp +++ b/drape_frontend/user_marks_provider.hpp @@ -53,6 +53,7 @@ public: { SymbolNameZoomInfo m_zoomInfo; std::optional<size_t> m_badgeTitleIndex; + std::string m_maskColor; }; static float constexpr kInvalidDepth = dp::kMinDepth - 1.0; @@ -90,6 +91,7 @@ public: virtual bool HasCreationAnimation() const = 0; virtual df::ColorConstant GetColorConstant() const = 0; virtual bool IsMarkAboveText() const = 0; + virtual float GetSymbolOpacity() const = 0; private: kml::MarkId m_id; |