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
diff options
context:
space:
mode:
authorr.kuznetsov <r.kuznetsov@corp.mail.ru>2018-08-15 16:20:37 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-08-17 15:26:10 +0300
commit515abeed2a658d13864d15c80463f53845738912 (patch)
tree8f1b718ba312ed47a60cbc64f34d9f4b2f31a8cc /drape_frontend
parent93d41ed31836c9302b4589e1f7c0521e748c87ef (diff)
[Core] Added subscription
Diffstat (limited to 'drape_frontend')
-rw-r--r--drape_frontend/map_data_provider.cpp35
-rw-r--r--drape_frontend/map_data_provider.hpp13
-rw-r--r--drape_frontend/rule_drawer.cpp7
-rw-r--r--drape_frontend/rule_drawer.hpp3
-rw-r--r--drape_frontend/tile_info.cpp4
5 files changed, 46 insertions, 16 deletions
diff --git a/drape_frontend/map_data_provider.cpp b/drape_frontend/map_data_provider.cpp
index e47d4fd112..b587392042 100644
--- a/drape_frontend/map_data_provider.cpp
+++ b/drape_frontend/map_data_provider.cpp
@@ -1,16 +1,28 @@
#include "drape_frontend/map_data_provider.hpp"
+#include "base/assert.hpp"
+
+#include <utility>
+
namespace df
{
-MapDataProvider::MapDataProvider(TReadIDsFn const & idsReader,
- TReadFeaturesFn const & featureReader,
- TIsCountryLoadedByNameFn const & isCountryLoadedByNameFn,
- TUpdateCurrentCountryFn const & updateCurrentCountryFn)
- : m_isCountryLoadedByName(isCountryLoadedByNameFn)
- , m_featureReader(featureReader)
- , m_idsReader(idsReader)
- , m_updateCurrentCountry(updateCurrentCountryFn)
-{}
+MapDataProvider::MapDataProvider(TReadIDsFn && idsReader,
+ TReadFeaturesFn && featureReader,
+ TFilterFeatureFn && filterFeatureFn,
+ TIsCountryLoadedByNameFn && isCountryLoadedByNameFn,
+ TUpdateCurrentCountryFn && updateCurrentCountryFn)
+ : m_isCountryLoadedByName(std::move(isCountryLoadedByNameFn))
+ , m_featureReader(std::move(featureReader))
+ , m_idsReader(std::move(idsReader))
+ , m_filterFeature(std::move(filterFeatureFn))
+ , m_updateCurrentCountry(std::move(updateCurrentCountryFn))
+{
+ CHECK(m_isCountryLoadedByName != nullptr, ());
+ CHECK(m_featureReader != nullptr, ());
+ CHECK(m_idsReader != nullptr, ());
+ CHECK(m_filterFeature != nullptr, ());
+ CHECK(m_updateCurrentCountry != nullptr, ());
+}
void MapDataProvider::ReadFeaturesID(TReadCallback<FeatureID const> const & fn, m2::RectD const & r,
int scale) const
@@ -24,6 +36,11 @@ void MapDataProvider::ReadFeatures(TReadCallback<FeatureType> const & fn,
m_featureReader(fn, ids);
}
+MapDataProvider::TFilterFeatureFn const & MapDataProvider::GetFilter() const
+{
+ return m_filterFeature;
+}
+
MapDataProvider::TUpdateCurrentCountryFn const & MapDataProvider::UpdateCurrentCountryFn() const
{
return m_updateCurrentCountry;
diff --git a/drape_frontend/map_data_provider.hpp b/drape_frontend/map_data_provider.hpp
index b3da94b7d2..7424d2c107 100644
--- a/drape_frontend/map_data_provider.hpp
+++ b/drape_frontend/map_data_provider.hpp
@@ -22,16 +22,20 @@ public:
using TIsCountryLoadedFn = std::function<bool(m2::PointD const &)>;
using TIsCountryLoadedByNameFn = std::function<bool(string const &)>;
using TUpdateCurrentCountryFn = std::function<void(m2::PointD const &, int)>;
+ using TFilterFeatureFn = std::function<bool(FeatureType &)>;
- MapDataProvider(TReadIDsFn const & idsReader,
- TReadFeaturesFn const & featureReader,
- TIsCountryLoadedByNameFn const & isCountryLoadedByNameFn,
- TUpdateCurrentCountryFn const & updateCurrentCountryFn);
+ MapDataProvider(TReadIDsFn && idsReader,
+ TReadFeaturesFn && featureReader,
+ TFilterFeatureFn && filterFeatureFn,
+ TIsCountryLoadedByNameFn && isCountryLoadedByNameFn,
+ TUpdateCurrentCountryFn && updateCurrentCountryFn);
void ReadFeaturesID(TReadCallback<FeatureID const> const & fn, m2::RectD const & r,
int scale) const;
void ReadFeatures(TReadCallback<FeatureType> const & fn, std::vector<FeatureID> const & ids) const;
+ TFilterFeatureFn const & GetFilter() const;
+
TUpdateCurrentCountryFn const & UpdateCurrentCountryFn() const;
TIsCountryLoadedByNameFn m_isCountryLoadedByName;
@@ -39,6 +43,7 @@ public:
private:
TReadFeaturesFn m_featureReader;
TReadIDsFn m_idsReader;
+ TFilterFeatureFn m_filterFeature;
TUpdateCurrentCountryFn m_updateCurrentCountry;
};
} // namespace df
diff --git a/drape_frontend/rule_drawer.cpp b/drape_frontend/rule_drawer.cpp
index d5ead86425..31d4243db8 100644
--- a/drape_frontend/rule_drawer.cpp
+++ b/drape_frontend/rule_drawer.cpp
@@ -173,20 +173,22 @@ bool UsePreciseFeatureCenter(FeatureType & f)
namespace df
{
-
RuleDrawer::RuleDrawer(TDrawerCallback const & drawerFn,
TCheckCancelledCallback const & checkCancelled,
TIsCountryLoadedByNameFn const & isLoadedFn,
+ TFilterFeatureFn const & filterFn,
ref_ptr<EngineContext> engineContext)
: m_callback(drawerFn)
, m_checkCancelled(checkCancelled)
, m_isLoadedFn(isLoadedFn)
+ , m_filter(filterFn)
, m_context(engineContext)
, m_customFeaturesContext(engineContext->GetCustomFeaturesContext().lock())
, m_wasCancelled(false)
{
ASSERT(m_callback != nullptr, ());
ASSERT(m_checkCancelled != nullptr, ());
+ ASSERT(m_filter != nullptr, ());
m_globalRect = m_context->GetTileKey().GetGlobalRect();
@@ -466,6 +468,9 @@ void RuleDrawer::operator()(FeatureType & f)
if (CheckCancelled())
return;
+ if (m_filter(f))
+ return;
+
Stylist s;
m_callback(f, s);
diff --git a/drape_frontend/rule_drawer.hpp b/drape_frontend/rule_drawer.hpp
index b09b990871..24222e3684 100644
--- a/drape_frontend/rule_drawer.hpp
+++ b/drape_frontend/rule_drawer.hpp
@@ -33,10 +33,12 @@ public:
using TCheckCancelledCallback = std::function<bool()>;
using TIsCountryLoadedByNameFn = std::function<bool(std::string const &)>;
using TInsertShapeFn = function<void(drape_ptr<MapShape> && shape)>;
+ using TFilterFeatureFn = std::function<bool(FeatureType &)>;
RuleDrawer(TDrawerCallback const & drawerFn,
TCheckCancelledCallback const & checkCancelled,
TIsCountryLoadedByNameFn const & isLoadedFn,
+ TFilterFeatureFn const & filterFn,
ref_ptr<EngineContext> engineContext);
~RuleDrawer();
@@ -61,6 +63,7 @@ private:
TDrawerCallback m_callback;
TCheckCancelledCallback m_checkCancelled;
TIsCountryLoadedByNameFn m_isLoadedFn;
+ TFilterFeatureFn m_filter;
ref_ptr<EngineContext> m_context;
CustomFeaturesContextPtr m_customFeaturesContext;
diff --git a/drape_frontend/tile_info.cpp b/drape_frontend/tile_info.cpp
index 2836609615..c151c9efa7 100644
--- a/drape_frontend/tile_info.cpp
+++ b/drape_frontend/tile_info.cpp
@@ -73,8 +73,8 @@ void TileInfo::ReadFeatures(MapDataProvider const & model)
std::sort(m_featureInfo.begin(), m_featureInfo.end());
auto const deviceLang = StringUtf8Multilang::GetLangIndex(languages::GetCurrentNorm());
RuleDrawer drawer(std::bind(&TileInfo::InitStylist, this, deviceLang, _1, _2),
- std::bind(&TileInfo::IsCancelled, this),
- model.m_isCountryLoadedByName, make_ref(m_context));
+ std::bind(&TileInfo::IsCancelled, this), model.m_isCountryLoadedByName,
+ model.GetFilter(), make_ref(m_context));
model.ReadFeatures(std::bind<void>(std::ref(drawer), _1), m_featureInfo);
}
#if defined(DRAPE_MEASURER) && defined(TILES_STATISTIC)