diff --git a/map/bookmark.cpp b/map/bookmark.cpp
index 5edb36f926..f42292aff2 100644
--- a/map/bookmark.cpp
+++ b/map/bookmark.cpp
@@ -404,7 +404,10 @@ namespace
{
Track track(m_points);
track.SetName(m_name);
- track.SetColor(m_trackColor);
+
+ Track::TrackOutline trackOutline { 5.0f, m_trackColor };
+ track.AddOutline(&trackOutline, 1);
+
/// @todo Add description, style, timestamp
m_category.AddTrack(track);
}
@@ -749,7 +752,7 @@ void BookmarkCategory::SaveToKML(ostream & s)
s << "\n";
s << "\n";
diff --git a/map/framework.cpp b/map/framework.cpp
index 008901f3b1..7030118b85 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -1885,15 +1885,14 @@ void Framework::InsertRoute(routing::Route const & route)
else
cat->ClearTracks();
- float visScale = GetVisualScale();
+ float const visScale = GetVisualScale();
Track track(route.GetPoly());
track.SetName(route.GetName());
- track.SetColor(graphics::Color(0x73, 0xCC,0xFF, 0xFF));
- track.SetWidth(6.0f * visScale);
Track::TrackOutline outlines[]
{
+ { 6.0f * visScale, graphics::Color(0x73, 0xCC,0xFF, 0xFF) },
{ 12.0f * visScale, graphics::Color(0x40, 0xB9, 0xFF, 0xFF) },
{ 16.0f * visScale, graphics::Color::White() }
};
diff --git a/map/map_tests/bookmarks_test.cpp b/map/map_tests/bookmarks_test.cpp
index 12a5e6f49b..9239117178 100644
--- a/map/map_tests/bookmarks_test.cpp
+++ b/map/map_tests/bookmarks_test.cpp
@@ -664,7 +664,7 @@ UNIT_TEST(TrackParsingTest_1)
Track const * track = cat->GetTrack(i);
TEST_EQUAL(names[i], track->GetName(), ());
TEST(AlmostEqual(track->GetLengthMeters(), length[i]), (track->GetLengthMeters(), length[i]));
- TEST_EQUAL(col[i], track->GetColor(), ());
+ TEST_EQUAL(col[i], track->GetMainColor(), ());
}
}
@@ -678,6 +678,6 @@ UNIT_TEST(TrackParsingTest_2)
TEST_EQUAL(cat->GetTracksCount(), 1, ());
Track const * track = cat->GetTrack(0);
TEST_EQUAL(track->GetName(), "XY", ());
- TEST_EQUAL(track->GetColor(), graphics::Color(57, 255, 32, 255), ());
+ TEST_EQUAL(track->GetMainColor(), graphics::Color(57, 255, 32, 255), ());
}
diff --git a/map/track.cpp b/map/track.cpp
index 284df948f0..ea0ca5a590 100644
--- a/map/track.cpp
+++ b/map/track.cpp
@@ -27,18 +27,30 @@ Track * Track::CreatePersistent()
return p;
}
+float Track::GetMainWidth() const
+{
+ ASSERT(!m_outlines.empty(), ());
+ return m_outlines.back().m_lineWidth;
+}
+
+const graphics::Color & Track::GetMainColor() const
+{
+ ASSERT(!m_outlines.empty(), ());
+ return m_outlines.back().m_color;
+}
+
void Track::DeleteDisplayList() const
{
if (m_dList)
{
delete m_dList;
- m_dList = 0;
+ m_dList = nullptr;
}
}
-void Track::AddOutline(TrackOutline const * outline, int arraySize)
+void Track::AddOutline(TrackOutline const * outline, size_t arraySize)
{
- m_outlines.reserve(arraySize);
+ m_outlines.reserve(m_outlines.size() + arraySize);
for_each(outline, outline + arraySize, MakeBackInsertFunctor(m_outlines));
sort(m_outlines.begin(), m_outlines.end(), [](TrackOutline const & l, TrackOutline const & r)
{
@@ -81,9 +93,6 @@ void Track::CreateDisplayList(graphics::Screen * dlScreen, MatrixT const & matri
dlScreen->beginFrame();
dlScreen->setDisplayList(m_dList);
- graphics::Pen::Info info(m_color, m_width);
- uint32_t resId = dlScreen->mapInfo(info);
-
typedef buffer_vector PointContainerT;
size_t const count = m_polyline.GetSize();
@@ -92,10 +101,10 @@ void Track::CreateDisplayList(graphics::Screen * dlScreen, MatrixT const & matri
PointContainerT pts2;
pts2.reserve(count);
- SimplifyDP(pts1.begin(), pts1.end(), math::sqr(m_width),
+ SimplifyDP(pts1.begin(), pts1.end(), math::sqr(GetMainWidth()),
m2::DistanceToLineSquare(), MakeBackInsertFunctor(pts2));
- double baseDepth = graphics::tracksOutlineDepth - 10 * m_outlines.size();
+ double baseDepth = graphics::tracksDepth - 10 * m_outlines.size();
for (TrackOutline const & outline : m_outlines)
{
graphics::Pen::Info const outlineInfo(outline.m_color, outline.m_lineWidth);
@@ -104,8 +113,6 @@ void Track::CreateDisplayList(graphics::Screen * dlScreen, MatrixT const & matri
baseDepth += 10;
}
- dlScreen->drawPath(pts2.data(), pts2.size(), 0, resId, graphics::tracksDepth);
-
if (!m_beginSymbols.empty() || !m_endSymbols.empty())
{
m2::PointD pivot = pts2.front();
@@ -151,8 +158,6 @@ double Track::GetShortestSquareDistance(m2::PointD const & point) const
void Track::Swap(Track & rhs)
{
swap(m_isVisible, rhs.m_isVisible);
- swap(m_width, rhs.m_width);
- swap(m_color, rhs.m_color);
swap(m_rect, rhs.m_rect);
swap(m_outlines, rhs.m_outlines);
swap(m_beginSymbols, rhs.m_beginSymbols);
diff --git a/map/track.hpp b/map/track.hpp
index d6aceac20f..11fa61e86b 100644
--- a/map/track.hpp
+++ b/map/track.hpp
@@ -20,21 +20,14 @@ class Track : private noncopyable
typedef math::Matrix MatrixT;
public:
+ Track() {}
~Track();
typedef m2::PolylineD PolylineD;
- Track()
- : m_isVisible(true), m_width(5),
- m_color(graphics::Color::fromARGB(0xFFFF0000)),
- m_dList(0)
- {}
-
explicit Track(PolylineD const & polyline)
- : m_isVisible(true), m_width(5),
- m_color(graphics::Color::fromARGB(0xFFFF0000)),
- m_polyline(polyline),
- m_dList(0)
+ : m_isVisible(true),
+ m_polyline(polyline)
{
ASSERT_GREATER(polyline.GetSize(), 1, ());
@@ -43,6 +36,8 @@ public:
/// @note Move semantics is used here.
Track * CreatePersistent();
+ float GetMainWidth() const;
+ graphics::Color const & GetMainColor() const;
void Draw(graphics::Screen * pScreen, MatrixT const & matrix) const;
void CreateDisplayList(graphics::Screen * dlScreen, MatrixT const & matrix) const;
@@ -54,19 +49,13 @@ public:
bool IsVisible() const { return m_isVisible; }
void SetVisible(bool visible) { m_isVisible = visible; }
- float GetWidth() const { return m_width; }
- void SetWidth(float width) { m_width = width; }
-
- graphics::Color const & GetColor() const { return m_color; }
- void SetColor(graphics::Color const & color) { m_color = color; }
-
struct TrackOutline
{
float m_lineWidth;
graphics::Color m_color;
};
- void AddOutline(TrackOutline const * outline, int arraySize);
+ void AddOutline(TrackOutline const * outline, size_t arraySize);
string const & GetName() const { return m_name; }
void SetName(string const & name) { m_name = name; }
@@ -84,10 +73,8 @@ public:
void Swap(Track & rhs);
private:
- bool m_isVisible;
+ bool m_isVisible = false;
string m_name;
- float m_width;
- graphics::Color m_color;
vector m_outlines;
@@ -106,5 +93,5 @@ private:
PolylineD m_polyline;
m2::RectD m_rect;
- mutable graphics::DisplayList * m_dList;
+ mutable graphics::DisplayList * m_dList = nullptr;
};