From 94df024da8fd687bdedb9f56def7a2c683e371fe Mon Sep 17 00:00:00 2001 From: Keith Wansbrough Date: Mon, 19 Oct 2015 22:54:24 +0100 Subject: [PATCH] Move style rendering up into StyledPoint. --- map/bookmark.cpp | 32 ++----------------------------- map/bookmark.hpp | 3 --- map/styled_point.cpp | 45 ++++++++++++++++++++++++++++++++++++++++++++ map/styled_point.hpp | 16 +++++++++++++--- 4 files changed, 60 insertions(+), 36 deletions(-) diff --git a/map/bookmark.cpp b/map/bookmark.cpp index e1ce232e75..a17c134be9 100644 --- a/map/bookmark.cpp +++ b/map/bookmark.cpp @@ -31,22 +31,6 @@ unique_ptr Bookmark::Copy() const return unique_ptr(new UserMarkCopy(this, false)); } -graphics::DisplayList * Bookmark::GetDisplayList(UserMarkDLCache * cache) const -{ - return cache->FindUserMark(UserMarkDLCache::Key(GetType(), graphics::EPosAbove, GetContainer()->GetDepth())); -} - -double Bookmark::GetAnimScaleFactor() const -{ - return m_animScaleFactor; -} - -m2::PointD const & Bookmark::GetPixelOffset() const -{ - static m2::PointD s_offset(0.0, 3.0); - return s_offset; -} - shared_ptr Bookmark::CreateAnimTask(Framework & fm) { m_animScaleFactor = 0.0; @@ -211,12 +195,6 @@ namespace LINE }; - static char const * s_arrSupportedColors[] = - { - "placemark-red", "placemark-blue", "placemark-purple", "placemark-yellow", - "placemark-pink", "placemark-brown", "placemark-green", "placemark-orange" - }; - class KMLParser { // Fixes icons which are not supported by MapsWithMe @@ -224,13 +202,7 @@ namespace { // Remove leading '#' symbol string const result = s.substr(1); - for (size_t i = 0; i < ARRAY_SIZE(s_arrSupportedColors); ++i) - if (result == s_arrSupportedColors[i]) - return result; - - // Not recognized symbols are replaced with default one - LOG(LWARNING, ("Icon", result, "for bookmark", m_name, "is not supported")); - return s_arrSupportedColors[0]; + return style::GetSupportedStyle(result, m_name); } BookmarkCategory & m_category; @@ -565,7 +537,7 @@ namespace string BookmarkCategory::GetDefaultType() { - return s_arrSupportedColors[0]; + return style::GetDefaultStyle(); } namespace diff --git a/map/bookmark.hpp b/map/bookmark.hpp index e631d1705c..8641700cf5 100644 --- a/map/bookmark.hpp +++ b/map/bookmark.hpp @@ -112,9 +112,6 @@ public: unique_ptr Copy() const override; - virtual graphics::DisplayList * GetDisplayList(UserMarkDLCache * cache) const override; - virtual double GetAnimScaleFactor() const override; - virtual m2::PointD const & GetPixelOffset() const override; shared_ptr CreateAnimTask(Framework & fm); }; diff --git a/map/styled_point.cpp b/map/styled_point.cpp index 776b2eb7b6..63c4f41368 100644 --- a/map/styled_point.cpp +++ b/map/styled_point.cpp @@ -7,3 +7,48 @@ #include "std/algorithm.hpp" #include "std/auto_ptr.hpp" + +graphics::DisplayList * StyledPoint::GetDisplayList(UserMarkDLCache * cache) const +{ + return cache->FindUserMark(UserMarkDLCache::Key(GetStyle(), graphics::EPosAbove, GetContainer()->GetDepth())); +} + +double StyledPoint::GetAnimScaleFactor() const +{ + return 1.0; +} + +m2::PointD const & StyledPoint::GetPixelOffset() const +{ + static m2::PointD s_offset(0.0, 3.0); + return s_offset; +} + +static char const * s_arrSupportedColors[] = +{ + "placemark-red", "placemark-blue", "placemark-purple", "placemark-yellow", + "placemark-pink", "placemark-brown", "placemark-green", "placemark-orange" +}; + +namespace style +{ + string GetSupportedStyle(string const & s, string const & context) + { + if (s.empty()) + return s_arrSupportedColors[0]; + + for (size_t i = 0; i < ARRAY_SIZE(s_arrSupportedColors); ++i) + if (s == s_arrSupportedColors[i]) + return s; + + // Not recognized symbols are replaced with default one + LOG(LWARNING, ("Icon", s, "for point", context, "is not supported")); + return s_arrSupportedColors[0]; + } + + string GetDefaultStyle() + { + return s_arrSupportedColors[0]; + } + +} // namespace style diff --git a/map/styled_point.hpp b/map/styled_point.hpp index 4fae354f18..9769252290 100644 --- a/map/styled_point.hpp +++ b/map/styled_point.hpp @@ -14,11 +14,20 @@ #include "std/utility.hpp" +namespace style +{ + // Fixes icons which are not supported by MapsWithMe + string GetSupportedStyle(string const & s, string const & context); + string GetDefaultStyle(); +} // namespace style + + class StyledPoint : public ICustomDrawable { public: StyledPoint(m2::PointD const & ptOrg, UserMarkContainer * container) : ICustomDrawable(ptOrg, container) + , m_style(style::GetDefaultStyle()) { } @@ -28,9 +37,9 @@ public: { } - virtual graphics::DisplayList * GetDisplayList(UserMarkDLCache * cache) const = 0; - virtual double GetAnimScaleFactor() const = 0; - virtual m2::PointD const & GetPixelOffset() const = 0; + virtual graphics::DisplayList * GetDisplayList(UserMarkDLCache * cache) const override; + virtual double GetAnimScaleFactor() const override; + virtual m2::PointD const & GetPixelOffset() const override; string const & GetStyle() const { return m_style; } void SetStyle(const string & style) { m_style = style; } @@ -38,3 +47,4 @@ public: private: string m_style; ///< Point style (name of icon). }; +