Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/map
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2015-07-31 09:24:44 +0300
committerAlex Zolotarev <alex@maps.me>2015-09-23 02:59:35 +0300
commit8c9f87e66ac5bc12b082493dd638aa72c70ab101 (patch)
treea4a6647bdedc0355b42f66d68fcdb038bb3838d1 /map
parent6b014d1414ab893e3934cb3d1a1296621ebc0ef4 (diff)
Integration routing rendering in old engine
Diffstat (limited to 'map')
-rw-r--r--map/bookmark_manager.cpp27
-rw-r--r--map/bookmark_manager.hpp8
-rw-r--r--map/framework.cpp39
3 files changed, 36 insertions, 38 deletions
diff --git a/map/bookmark_manager.cpp b/map/bookmark_manager.cpp
index b87c4378af..bc2a440dbb 100644
--- a/map/bookmark_manager.cpp
+++ b/map/bookmark_manager.cpp
@@ -4,6 +4,8 @@
#include "graphics/depth_constants.hpp"
+#include "render/route_renderer.hpp"
+
#include "platform/platform.hpp"
#include "platform/settings.hpp"
@@ -24,6 +26,7 @@ BookmarkManager::BookmarkManager(Framework & f)
, m_lastScale(1.0)
, m_cache(NULL)
, m_selection(f)
+ , m_routeRenderer(new rg::RouteRenderer())
{
m_userMarkLayers.reserve(3);
m_userMarkLayers.push_back(new SearchUserMarkContainer(graphics::activePinDepth, m_framework));
@@ -305,12 +308,7 @@ void BookmarkManager::DrawItems(Drawer * drawer) const
PaintOverlayEvent event(drawer, screen);
for_each(m_userMarkLayers.begin(), m_userMarkLayers.end(), bind(&UserMarkContainer::Draw, _1, event, m_cache));
for_each(m_categories.begin(), m_categories.end(), bind(&BookmarkManager::DrawCategory, this, _1, event));
- if (m_routeTrack != nullptr)
- {
- trackUpdateFn(m_routeTrack.get());
- if (m_routeTrack->HasDisplayLists())
- m_routeTrack->Draw(pScreen, LazyMatrixCalc(screen, m_lastScale).GetFinalG2P());
- }
+ m_routeRenderer->Render(pScreen, screen);
m_selection.Draw(event, m_cache);
pScreen->endFrame();
@@ -462,22 +460,25 @@ void BookmarkManager::ResetScreen()
{
// Delete display lists for all tracks
for_each(m_categories.begin(), m_categories.end(), dlDeleteFn);
- if (m_routeTrack != nullptr)
- m_routeTrack->CleanUp();
-
+ m_routeRenderer->Clear();
m_bmScreen = 0;
}
}
-void BookmarkManager::SetRouteTrack(RouteTrack & track)
+void BookmarkManager::SetRouteTrack(m2::PolylineD const & routePolyline, vector<double> const & turns,
+ graphics::Color const & color)
{
- m_routeTrack.reset();
- m_routeTrack.reset(track.CreatePersistent());
+ m_routeRenderer->Setup(routePolyline, turns, color);
}
void BookmarkManager::ResetRouteTrack()
{
- m_routeTrack.reset();
+ m_routeRenderer->Clear();
+}
+
+void BookmarkManager::UpdateRouteDistanceFromBegin(double distance)
+{
+ m_routeRenderer->UpdateDistanceFromBegin(distance);
}
UserMarkContainer const * BookmarkManager::FindUserMarksContainer(UserMarkContainer::Type type) const
diff --git a/map/bookmark_manager.hpp b/map/bookmark_manager.hpp
index 70fd6f6d00..92de1d1ce9 100644
--- a/map/bookmark_manager.hpp
+++ b/map/bookmark_manager.hpp
@@ -11,10 +11,10 @@
class Framework;
class PaintEvent;
namespace graphics { class Screen; }
+namespace rg { class RouteRenderer; }
class BookmarkManager : private noncopyable
{
- unique_ptr<RouteTrack> m_routeTrack;
vector<BookmarkCategory *> m_categories;
string m_lastCategoryUrl;
string m_lastType;
@@ -86,8 +86,10 @@ public:
void SetScreen(graphics::Screen * screen);
void ResetScreen();
- void SetRouteTrack(RouteTrack & track);
+ void SetRouteTrack(m2::PolylineD const & routePolyline, vector<double> const & turns,
+ graphics::Color const & color);
void ResetRouteTrack();
+ void UpdateRouteDistanceFromBegin(double distance);
private:
UserMarkContainer const * FindUserMarksContainer(UserMarkContainer::Type type) const;
@@ -96,4 +98,6 @@ private:
UserMarkDLCache * m_cache;
SelectionContainer m_selection;
+
+ unique_ptr<rg::RouteRenderer> m_routeRenderer;
};
diff --git a/map/framework.cpp b/map/framework.cpp
index c2b5ea0e44..ec9e54a153 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -145,6 +145,8 @@ void Framework::OnLocationUpdate(GpsInfo const & info)
if (state->IsModeChangeViewport())
UpdateUserViewportChanged();
+
+ m_bmManager.UpdateRouteDistanceFromBegin(hasDistanceFromBegin ? distanceFromBegin : 0.0);
}
void Framework::OnCompassUpdate(CompassInfo const & info)
@@ -2220,36 +2222,27 @@ void Framework::InsertRoute(Route const & route)
return;
}
- float const visScale = GetVisualScale();
-
- RouteTrack track(route.GetPoly());
- track.SetName(route.GetName());
- track.SetTurnsGeometry(route.GetTurnsGeometry());
+ vector<double> turns;
+ if (m_currentRouterType == RouterType::Vehicle)
+ {
+ turns::TTurnsGeom const & turnsGeom = route.GetTurnsGeometry();
+ if (!turnsGeom.empty())
+ {
+ turns.reserve(turnsGeom.size());
+ for (size_t i = 0; i < turnsGeom.size(); i++)
+ turns.push_back(turnsGeom[i].m_mercatorDistance);
+ }
+ }
/// @todo Consider a style parameter for the route color.
graphics::Color routeColor;
- graphics::Color arrowColor;
if (m_currentRouterType == RouterType::Pedestrian)
- {
- routeColor = graphics::Color(5, 105, 175, 255);
- arrowColor = graphics::Color(110, 180, 240, 255);
- }
+ routeColor = graphics::Color(5, 105, 175, 204);
else
- {
- routeColor = graphics::Color(110, 180, 240, 255);
- arrowColor = graphics::Color(40, 70, 160, 255);
- }
-
- Track::TrackOutline outlines[]
- {
- { 10.0f * visScale, routeColor }
- };
+ routeColor = graphics::Color(30, 150, 240, 204);
- track.SetArrowColor(arrowColor);
- track.AddOutline(outlines, ARRAY_SIZE(outlines));
- track.AddClosingSymbol(false, "route_to", graphics::EPosCenter, graphics::routingFinishDepth);
+ m_bmManager.SetRouteTrack(route.GetPoly(), turns, routeColor);
- m_bmManager.SetRouteTrack(track);
m_informationDisplay.ResetRouteMatchingInfo();
Invalidate();
}