diff options
author | vng <viktor.govako@gmail.com> | 2011-11-15 18:43:27 +0400 |
---|---|---|
committer | Alex Zolotarev <alex@maps.me> | 2015-09-23 01:27:58 +0300 |
commit | ea292c3106a73c287cd84429ffabf718f3464dcb (patch) | |
tree | a15fb92541756d0ee7d80982c3e12c1701e07a04 /indexer/drawing_rules.cpp | |
parent | 7eac53c6c361bf6a52111c96197b24487f31a6f5 (diff) |
Proto drawing rules store width in pixels now.
Left compatibility with binary drawing rules.
Diffstat (limited to 'indexer/drawing_rules.cpp')
-rw-r--r-- | indexer/drawing_rules.cpp | 46 |
1 files changed, 33 insertions, 13 deletions
diff --git a/indexer/drawing_rules.cpp b/indexer/drawing_rules.cpp index dbdef7405f..3b39fb2c9f 100644 --- a/indexer/drawing_rules.cpp +++ b/indexer/drawing_rules.cpp @@ -1086,6 +1086,13 @@ namespace RulesHolder & m_rules; ContainerProto & m_cont; + double m_factor; + + double ToPixels(double d) const + { + return d * m_factor; + } + static int32_t GetStoringAlpha(BaseRule const * pSrc) { // 255 is default value for BaseRule - completely visible @@ -1104,38 +1111,43 @@ namespace return (pSrc->GetFillColor() | GetStoringAlpha(pSrc)); } - static void ConvertImpl(BaseRule const * pSrc, LineRuleProto * pDest) + void ConvertImpl(BaseRule const * pSrc, LineRuleProto * pDest) const { - pDest->set_width(pSrc->GetWidth()); + pDest->set_width(ToPixels(pSrc->GetWidth())); pDest->set_color(GetColor(pSrc)); vector<double> dd; - double dummy; - pSrc->GetPattern(dd, dummy); + double offset; + pSrc->GetPattern(dd, offset); if (!dd.empty()) { DashDotProto * p = pDest->mutable_dashdot(); - for_each(dd.begin(), dd.end(), bind(&DashDotProto::add_dd, p, _1)); + + for (size_t i = 0; i < dd.size(); ++i) + p->add_dd(ToPixels(dd[i])); + + if (offset != 0.0) + p->set_offset(ToPixels(offset)); } } - static void ConvertImpl(BaseRule const * pSrc, AreaRuleProto * pDest) + void ConvertImpl(BaseRule const * pSrc, AreaRuleProto * pDest) const { pDest->set_color(GetFillColor(pSrc)); if (pSrc->GetColor() != -1) ConvertImpl(pSrc, pDest->mutable_border()); } - static void ConvertImpl(BaseRule const * pSrc, SymbolRuleProto * pDest) + void ConvertImpl(BaseRule const * pSrc, SymbolRuleProto * pDest) const { string s; pSrc->GetSymbol(s); pDest->set_name(s); } - static void ConvertImpl(BaseRule const * pSrc, CaptionRuleProto * pDest) + void ConvertImpl(BaseRule const * pSrc, CaptionRuleProto * pDest) const { - pDest->set_height(pSrc->GetTextHeight()); + pDest->set_height(ToPixels(pSrc->GetTextHeight())); if (pSrc->GetFillColor() != -1) pDest->set_color(GetFillColor(pSrc)); @@ -1143,14 +1155,14 @@ namespace pDest->set_stroke_color(GetColor(pSrc)); } - static void ConvertImpl(BaseRule const * pSrc, CircleRuleProto * pDest) + void ConvertImpl(BaseRule const * pSrc, CircleRuleProto * pDest) const { - pDest->set_radius(pSrc->GetRadius()); + pDest->set_radius(ToPixels(pSrc->GetRadius())); pDest->set_color(GetFillColor(pSrc)); } template <class T> - static void Convert(BaseRule const * pSrc, int priority, T * pDest) + void Convert(BaseRule const * pSrc, int priority, T * pDest) const { pDest->set_priority(priority); ConvertImpl(pSrc, pDest); @@ -1197,6 +1209,7 @@ namespace { pDE = pCE->add_element(); pDE->set_scale(keys[i].m_scale); + m_factor = scales::GetM2PFactor(keys[i].m_scale); } BaseRule const * pRule = m_rules.Find(keys[i]); @@ -1260,6 +1273,9 @@ namespace v.reserve(count); for (int i = 0; i < count; ++i) v.push_back(dd.dd(i)); + + if (dd.has_offset()) + offset = dd.offset(); } } @@ -1332,7 +1348,11 @@ namespace { SymbolRuleProto m_symbol; public: - Symbol(SymbolRuleProto const & r) : m_symbol(r) {} + Symbol(SymbolRuleProto const & r) : m_symbol(r) + { + if (r.has_apply_for_type()) + SetType(r.apply_for_type()); + } virtual void GetSymbol(string & name) const { |