From 725ad4eb72d319fb60e037408d6d345c86e881f0 Mon Sep 17 00:00:00 2001 From: "S. Kozyr" Date: Tue, 2 May 2023 10:00:39 +0300 Subject: [PATCH] [drape] Introduced new style parameters to adjust route arrow colors Signed-off-by: S. Kozyr --- data/styles/clear/style-clear/style.mapcss | 4 ++ data/styles/clear/style-night/style.mapcss | 4 ++ data/styles/vehicle/style-clear/style.mapcss | 4 ++ data/styles/vehicle/style-night/style.mapcss | 4 ++ drape_frontend/route_renderer.cpp | 57 +++++++++++++++----- drape_frontend/route_renderer.hpp | 3 +- 6 files changed, 61 insertions(+), 15 deletions(-) diff --git a/data/styles/clear/style-clear/style.mapcss b/data/styles/clear/style-clear/style.mapcss index 776f2c7404..338e3c114a 100644 --- a/data/styles/clear/style-clear/style.mapcss +++ b/data/styles/clear/style-clear/style.mapcss @@ -40,10 +40,14 @@ colors RoutePreview-opacity: 0.3; RouteMaskCar-color: #000000; RouteMaskCar-opacity: 0.3; + RouteFirstSegmentArrowsMaskCar-color: #033B80; + RouteFirstSegmentArrowsMaskCar-opacity: 0.0; RouteArrowsMaskCar-color: #033B80; RouteArrowsMaskCar-opacity: 0.2; RouteMaskBicycle-color: #000000; RouteMaskBicycle-opacity: 0.5; + RouteFirstSegmentArrowsMaskBicycle-color: #9C27B0; + RouteFirstSegmentArrowsMaskBicycle-opacity: 0.0; RouteArrowsMaskBicycle-color: #9C27B0; RouteArrowsMaskBicycle-opacity: 0.2; RouteMaskPedestrian-color: #000000; diff --git a/data/styles/clear/style-night/style.mapcss b/data/styles/clear/style-night/style.mapcss index 378b96eca1..dc1da1d58e 100644 --- a/data/styles/clear/style-night/style.mapcss +++ b/data/styles/clear/style-night/style.mapcss @@ -40,10 +40,14 @@ colors RoutePreview-opacity: 0.3; RouteMaskCar-color: #000000; RouteMaskCar-opacity: 0.5; + RouteFirstSegmentArrowsMaskCar-color: #055FCD; + RouteFirstSegmentArrowsMaskCar-opacity: 0.0; RouteArrowsMaskCar-color: #055FCD; RouteArrowsMaskCar-opacity: 0.3; RouteMaskBicycle-color: #000000; RouteMaskBicycle-opacity: 0.5; + RouteFirstSegmentArrowsMaskBicycle-color: #FF4B8C; + RouteFirstSegmentArrowsMaskBicycle-opacity: 0.0; RouteArrowsMaskBicycle-color: #FF4B8C; RouteArrowsMaskBicycle-opacity: 0.5; RouteMaskPedestrian-color: #000000; diff --git a/data/styles/vehicle/style-clear/style.mapcss b/data/styles/vehicle/style-clear/style.mapcss index 69400d2db2..1c7bc14404 100644 --- a/data/styles/vehicle/style-clear/style.mapcss +++ b/data/styles/vehicle/style-clear/style.mapcss @@ -40,10 +40,14 @@ colors RoutePreview-opacity: 0.3; RouteMaskCar-color: #000000; RouteMaskCar-opacity: 0.3; + RouteFirstSegmentArrowsMaskCar-color: #033B80; + RouteFirstSegmentArrowsMaskCar-opacity: 0.0; RouteArrowsMaskCar-color: #033B80; RouteArrowsMaskCar-opacity: 0.2; RouteMaskBicycle-color: #000000; RouteMaskBicycle-opacity: 0.5; + RouteFirstSegmentArrowsMaskBicycle-color: #9C27B0; + RouteFirstSegmentArrowsMaskBicycle-opacity: 0.0; RouteArrowsMaskBicycle-color: #9C27B0; RouteArrowsMaskBicycle-opacity: 0.2; RouteMaskPedestrian-color: #000000; diff --git a/data/styles/vehicle/style-night/style.mapcss b/data/styles/vehicle/style-night/style.mapcss index 69c025afc9..fd3fa97c52 100644 --- a/data/styles/vehicle/style-night/style.mapcss +++ b/data/styles/vehicle/style-night/style.mapcss @@ -40,10 +40,14 @@ colors RoutePreview-opacity: 0.3; RouteMaskCar-color: #000000; RouteMaskCar-opacity: 0.5; + RouteFirstSegmentArrowsMaskCar-color: #055FCD; + RouteFirstSegmentArrowsMaskCar-opacity: 0.0; RouteArrowsMaskCar-color: #055FCD; RouteArrowsMaskCar-opacity: 0.3; RouteMaskBicycle-color: #000000; RouteMaskBicycle-opacity: 0.5; + RouteFirstSegmentArrowsMaskBicycle-color: #FF4B8C; + RouteFirstSegmentArrowsMaskBicycle-opacity: 0.0; RouteArrowsMaskBicycle-color: #FF4B8C; RouteArrowsMaskBicycle-opacity: 0.5; RouteMaskPedestrian-color: #000000; diff --git a/drape_frontend/route_renderer.cpp b/drape_frontend/route_renderer.cpp index 8c486c25f3..86cd564b66 100644 --- a/drape_frontend/route_renderer.cpp +++ b/drape_frontend/route_renderer.cpp @@ -19,8 +19,10 @@ std::string const kRoutePedestrian = "RoutePedestrian"; std::string const kRouteBicycle = "RouteBicycle"; std::string const kRoutePreview = "RoutePreview"; std::string const kRouteMaskCar = "RouteMaskCar"; +std::string const kRouteFirstSegmentArrowsMaskCar = "RouteFirstSegmentArrowsMaskCar"; std::string const kRouteArrowsMaskCar = "RouteArrowsMaskCar"; std::string const kRouteMaskBicycle = "RouteMaskBicycle"; +std::string const kRouteFirstSegmentArrowsMaskBicycle = "RouteFirstSegmentArrowsMaskBicycle"; std::string const kRouteArrowsMaskBicycle = "RouteArrowsMaskBicycle"; std::string const kRouteMaskPedestrian = "RouteMaskPedestrian"; std::string const kTransitStopInnerMarkerColor = "TransitStopInnerMarker"; @@ -383,19 +385,43 @@ CirclesPackHandle * RouteRenderer::GetPreviewHandle(size_t & index) return nullptr; } -dp::Color RouteRenderer::GetMaskColor(RouteType routeType, double baseDistance, - bool arrows) const +// Route mask is used to adjust line color for subroutes after the first stop. So subroute to the first stop +// point has default color, while subsequent subroutes color is adjusted with RouteArrowsMaskCar, +// RouteArrowsMaskBicycle and RouteMaskPedestrian properties. +dp::Color RouteRenderer::GetRouteMaskColor(RouteType routeType, double baseDistance) const { if (baseDistance != 0.0 && m_distanceFromBegin < baseDistance) { if (routeType == RouteType::Car) - return GetColorConstant(arrows ? kRouteArrowsMaskCar : kRouteMaskCar); + return GetColorConstant(kRouteMaskCar); if (routeType == RouteType::Bicycle) - return GetColorConstant(arrows ? kRouteArrowsMaskBicycle : kRouteMaskBicycle); + return GetColorConstant(kRouteMaskBicycle); if (routeType == RouteType::Pedestrian) return GetColorConstant(kRouteMaskPedestrian); } - return {0, 0, 0, 0}; + return dp::Color::Transparent(); +} + +// Arrow mask is used to adjust route arrow color. First subroute arrows color is defined +// by RouteFirstSegmentArrowsMaskCar and RouteFirstSegmentArrowsMaskBicycle properties. +// All following subroutes have arrow color defined by RouteArrowsMaskCar, RouteArrowsMaskBicycle. +dp::Color RouteRenderer::GetArrowMaskColor(RouteType routeType, double baseDistance) const +{ + if (baseDistance == 0.0) + { + if (routeType == RouteType::Car) + return GetColorConstant(kRouteFirstSegmentArrowsMaskCar); + if (routeType == RouteType::Bicycle) + return GetColorConstant(kRouteFirstSegmentArrowsMaskBicycle); + } + else if (m_distanceFromBegin < baseDistance) + { + if (routeType == RouteType::Car) + return GetColorConstant(kRouteArrowsMaskCar); + if (routeType == RouteType::Bicycle) + return GetColorConstant(kRouteArrowsMaskBicycle); + } + return dp::Color::Transparent(); } void RouteRenderer::RenderSubroute(ref_ptr context, ref_ptr mng, @@ -433,9 +459,11 @@ void RouteRenderer::RenderSubroute(ref_ptr context, ref_ptr params.m_modelView = glsl::make_mat4(mv.m_data); params.m_color = glsl::ToVec4(df::GetColorConstant(style.m_color)); params.m_routeParams = glsl::vec4(currentHalfWidth, screenHalfWidth, dist, trafficShown ? 1.0f : 0.0f); - params.m_maskColor = glsl::ToVec4(GetMaskColor(subrouteData->m_subroute->m_routeType, - subrouteData->m_subroute->m_baseDistance, - false /* arrows */)); + + // Adjust line color depending on route type and subroute distance. After the first stop point + // route color is adjusted according to RouteMaskCar, RouteMaskBicycle or RouteMaskPedestrian properties. + params.m_maskColor = glsl::ToVec4(GetRouteMaskColor(subrouteData->m_subroute->m_routeType, + subrouteData->m_subroute->m_baseDistance)); if (style.m_pattern.m_isDashed) { params.m_pattern = glsl::vec2(static_cast(screenHalfWidth * style.m_pattern.m_dashLength), @@ -490,9 +518,9 @@ void RouteRenderer::RenderSubrouteArrows(ref_ptr context, r auto const arrowHalfWidth = static_cast(currentHalfWidth * kArrowHeightFactor); params.m_arrowHalfWidth = arrowHalfWidth; - params.m_maskColor = glsl::ToVec4(GetMaskColor(subrouteInfo.m_subroute->m_routeType, - subrouteInfo.m_subroute->m_baseDistance, - true /* arrows */)); + // Adjust arrow color depending on route type and subroute distance + params.m_maskColor = glsl::ToVec4(GetArrowMaskColor(subrouteInfo.m_subroute->m_routeType, + subrouteInfo.m_subroute->m_baseDistance)); ref_ptr prg = mng->GetProgram(gpu::Program::RouteArrow); prg->Bind(); @@ -537,9 +565,10 @@ void RouteRenderer::RenderSubrouteMarkers(ref_ptr context, params.m_angleCosSin = glsl::vec2(static_cast(cos(screen.GetAngle())), static_cast(sin(screen.GetAngle()))); - params.m_maskColor = glsl::ToVec4(GetMaskColor(subrouteInfo.m_subroute->m_routeType, - subrouteInfo.m_subroute->m_baseDistance, - false /* arrows */)); + // Adjust color depending on route type and subroute distance. After the first stop point + // marker color is adjusted according to RouteMaskCar, RouteMaskBicycle or RouteMaskPedestrian properties. + params.m_maskColor = glsl::ToVec4(GetRouteMaskColor(subrouteInfo.m_subroute->m_routeType, + subrouteInfo.m_subroute->m_baseDistance)); ref_ptr prg = mng->GetProgram(gpu::Program::RouteMarker); prg->Bind(); diff --git a/drape_frontend/route_renderer.hpp b/drape_frontend/route_renderer.hpp index c2e83cd757..5a1b2ab7ce 100644 --- a/drape_frontend/route_renderer.hpp +++ b/drape_frontend/route_renderer.hpp @@ -115,7 +115,8 @@ private: ScreenBase const & screen, FrameValues const & frameValues); void ClearPreviewHandles(); CirclesPackHandle * GetPreviewHandle(size_t & index); - dp::Color GetMaskColor(RouteType routeType, double baseDistance, bool arrows) const; + dp::Color GetRouteMaskColor(RouteType routeType, double baseDistance) const; + dp::Color GetArrowMaskColor(RouteType routeType, double baseDistance) const; double m_distanceFromBegin; bool m_followingEnabled;