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:
authorDaria Volvenkova <d.volvenkova@corp.mail.ru>2017-03-17 14:59:24 +0300
committerGitHub <noreply@github.com>2017-03-17 14:59:24 +0300
commitaabef62d44264f7f40eedec5aa88cbd0820bec64 (patch)
tree83d96ed17396192adacce3c3153386d7fb527c63
parent2d2a9768ffade7873719db44df52d51dae545183 (diff)
parentae5348f4db4d9563cc38dda3292de7cab83a4263 (diff)
Merge pull request #5617 from rokuz/multiple-symbols-textures
Multiple symbols textures
-rw-r--r--data/resources-6plus_clear/symbols-ad.pngbin0 -> 4605 bytes
-rw-r--r--data/resources-6plus_clear/symbols-ad.sdf8
-rw-r--r--data/resources-6plus_dark/symbols-ad.pngbin0 -> 4605 bytes
-rw-r--r--data/resources-6plus_dark/symbols-ad.sdf8
-rw-r--r--data/resources-hdpi_clear/symbols-ad.pngbin0 -> 2211 bytes
-rw-r--r--data/resources-hdpi_clear/symbols-ad.sdf8
-rw-r--r--data/resources-hdpi_dark/symbols-ad.pngbin0 -> 2211 bytes
-rw-r--r--data/resources-hdpi_dark/symbols-ad.sdf8
-rw-r--r--data/resources-mdpi_clear/symbols-ad.pngbin0 -> 1375 bytes
-rw-r--r--data/resources-mdpi_clear/symbols-ad.sdf8
-rw-r--r--data/resources-mdpi_dark/symbols-ad.pngbin0 -> 1375 bytes
-rw-r--r--data/resources-mdpi_dark/symbols-ad.sdf8
-rw-r--r--data/resources-xhdpi_clear/symbols-ad.pngbin0 -> 3016 bytes
-rw-r--r--data/resources-xhdpi_clear/symbols-ad.sdf8
-rw-r--r--data/resources-xhdpi_dark/symbols-ad.pngbin0 -> 3016 bytes
-rw-r--r--data/resources-xhdpi_dark/symbols-ad.sdf8
-rw-r--r--data/resources-xxhdpi_clear/symbols-ad.pngbin0 -> 4605 bytes
-rw-r--r--data/resources-xxhdpi_clear/symbols-ad.sdf8
-rw-r--r--data/resources-xxhdpi_dark/symbols-ad.pngbin0 -> 4605 bytes
-rw-r--r--data/resources-xxhdpi_dark/symbols-ad.sdf8
-rw-r--r--data/styles/clear/style-clear/symbols-ad/test-l.svg7
-rw-r--r--data/styles/clear/style-clear/symbols-ad/test-m.svg7
-rw-r--r--data/styles/clear/style-clear/symbols-ad/test-s.svg7
-rw-r--r--data/styles/clear/style-night/symbols-ad/test-l.svg7
-rw-r--r--data/styles/clear/style-night/symbols-ad/test-m.svg7
-rw-r--r--data/styles/clear/style-night/symbols-ad/test-s.svg7
-rw-r--r--drape/symbols_texture.cpp34
-rw-r--r--drape/symbols_texture.hpp15
-rw-r--r--drape/texture_manager.cpp49
-rw-r--r--drape/texture_manager.hpp13
-rw-r--r--drape_frontend/watch/software_renderer.cpp4
-rwxr-xr-xtools/unix/generate_symbols.sh43
32 files changed, 235 insertions, 45 deletions
diff --git a/data/resources-6plus_clear/symbols-ad.png b/data/resources-6plus_clear/symbols-ad.png
new file mode 100644
index 0000000000..74537deaf7
--- /dev/null
+++ b/data/resources-6plus_clear/symbols-ad.png
Binary files differ
diff --git a/data/resources-6plus_clear/symbols-ad.sdf b/data/resources-6plus_clear/symbols-ad.sdf
new file mode 100644
index 0000000000..348c10bc27
--- /dev/null
+++ b/data/resources-6plus_clear/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="128" height="128">
+ <symbol minX="0" maxX="58" minY="0" maxY="58" name="test-l"/>
+ <symbol minX="58" maxX="114" minY="0" maxY="56" name="test-m"/>
+ <symbol minX="0" maxX="42" minY="58" maxY="100" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-6plus_dark/symbols-ad.png b/data/resources-6plus_dark/symbols-ad.png
new file mode 100644
index 0000000000..74537deaf7
--- /dev/null
+++ b/data/resources-6plus_dark/symbols-ad.png
Binary files differ
diff --git a/data/resources-6plus_dark/symbols-ad.sdf b/data/resources-6plus_dark/symbols-ad.sdf
new file mode 100644
index 0000000000..348c10bc27
--- /dev/null
+++ b/data/resources-6plus_dark/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="128" height="128">
+ <symbol minX="0" maxX="58" minY="0" maxY="58" name="test-l"/>
+ <symbol minX="58" maxX="114" minY="0" maxY="56" name="test-m"/>
+ <symbol minX="0" maxX="42" minY="58" maxY="100" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-hdpi_clear/symbols-ad.png b/data/resources-hdpi_clear/symbols-ad.png
new file mode 100644
index 0000000000..19ffd1d64a
--- /dev/null
+++ b/data/resources-hdpi_clear/symbols-ad.png
Binary files differ
diff --git a/data/resources-hdpi_clear/symbols-ad.sdf b/data/resources-hdpi_clear/symbols-ad.sdf
new file mode 100644
index 0000000000..909e572c57
--- /dev/null
+++ b/data/resources-hdpi_clear/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="64" height="64">
+ <symbol minX="0" maxX="31" minY="0" maxY="31" name="test-l"/>
+ <symbol minX="31" maxX="61" minY="0" maxY="30" name="test-m"/>
+ <symbol minX="0" maxX="23" minY="31" maxY="54" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-hdpi_dark/symbols-ad.png b/data/resources-hdpi_dark/symbols-ad.png
new file mode 100644
index 0000000000..19ffd1d64a
--- /dev/null
+++ b/data/resources-hdpi_dark/symbols-ad.png
Binary files differ
diff --git a/data/resources-hdpi_dark/symbols-ad.sdf b/data/resources-hdpi_dark/symbols-ad.sdf
new file mode 100644
index 0000000000..909e572c57
--- /dev/null
+++ b/data/resources-hdpi_dark/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="64" height="64">
+ <symbol minX="0" maxX="31" minY="0" maxY="31" name="test-l"/>
+ <symbol minX="31" maxX="61" minY="0" maxY="30" name="test-m"/>
+ <symbol minX="0" maxX="23" minY="31" maxY="54" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-mdpi_clear/symbols-ad.png b/data/resources-mdpi_clear/symbols-ad.png
new file mode 100644
index 0000000000..7fb264d48c
--- /dev/null
+++ b/data/resources-mdpi_clear/symbols-ad.png
Binary files differ
diff --git a/data/resources-mdpi_clear/symbols-ad.sdf b/data/resources-mdpi_clear/symbols-ad.sdf
new file mode 100644
index 0000000000..2eaf917db3
--- /dev/null
+++ b/data/resources-mdpi_clear/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="64" height="32">
+ <symbol minX="0" maxX="22" minY="0" maxY="22" name="test-l"/>
+ <symbol minX="22" maxX="43" minY="0" maxY="21" name="test-m"/>
+ <symbol minX="43" maxX="60" minY="0" maxY="17" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-mdpi_dark/symbols-ad.png b/data/resources-mdpi_dark/symbols-ad.png
new file mode 100644
index 0000000000..7fb264d48c
--- /dev/null
+++ b/data/resources-mdpi_dark/symbols-ad.png
Binary files differ
diff --git a/data/resources-mdpi_dark/symbols-ad.sdf b/data/resources-mdpi_dark/symbols-ad.sdf
new file mode 100644
index 0000000000..2eaf917db3
--- /dev/null
+++ b/data/resources-mdpi_dark/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="64" height="32">
+ <symbol minX="0" maxX="22" minY="0" maxY="22" name="test-l"/>
+ <symbol minX="22" maxX="43" minY="0" maxY="21" name="test-m"/>
+ <symbol minX="43" maxX="60" minY="0" maxY="17" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-xhdpi_clear/symbols-ad.png b/data/resources-xhdpi_clear/symbols-ad.png
new file mode 100644
index 0000000000..6db1fd1f38
--- /dev/null
+++ b/data/resources-xhdpi_clear/symbols-ad.png
Binary files differ
diff --git a/data/resources-xhdpi_clear/symbols-ad.sdf b/data/resources-xhdpi_clear/symbols-ad.sdf
new file mode 100644
index 0000000000..0e429884c1
--- /dev/null
+++ b/data/resources-xhdpi_clear/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="128" height="64">
+ <symbol minX="0" maxX="40" minY="0" maxY="40" name="test-l"/>
+ <symbol minX="40" maxX="79" minY="0" maxY="39" name="test-m"/>
+ <symbol minX="79" maxX="109" minY="0" maxY="30" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-xhdpi_dark/symbols-ad.png b/data/resources-xhdpi_dark/symbols-ad.png
new file mode 100644
index 0000000000..6db1fd1f38
--- /dev/null
+++ b/data/resources-xhdpi_dark/symbols-ad.png
Binary files differ
diff --git a/data/resources-xhdpi_dark/symbols-ad.sdf b/data/resources-xhdpi_dark/symbols-ad.sdf
new file mode 100644
index 0000000000..0e429884c1
--- /dev/null
+++ b/data/resources-xhdpi_dark/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="128" height="64">
+ <symbol minX="0" maxX="40" minY="0" maxY="40" name="test-l"/>
+ <symbol minX="40" maxX="79" minY="0" maxY="39" name="test-m"/>
+ <symbol minX="79" maxX="109" minY="0" maxY="30" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-xxhdpi_clear/symbols-ad.png b/data/resources-xxhdpi_clear/symbols-ad.png
new file mode 100644
index 0000000000..74537deaf7
--- /dev/null
+++ b/data/resources-xxhdpi_clear/symbols-ad.png
Binary files differ
diff --git a/data/resources-xxhdpi_clear/symbols-ad.sdf b/data/resources-xxhdpi_clear/symbols-ad.sdf
new file mode 100644
index 0000000000..348c10bc27
--- /dev/null
+++ b/data/resources-xxhdpi_clear/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="128" height="128">
+ <symbol minX="0" maxX="58" minY="0" maxY="58" name="test-l"/>
+ <symbol minX="58" maxX="114" minY="0" maxY="56" name="test-m"/>
+ <symbol minX="0" maxX="42" minY="58" maxY="100" name="test-s"/>
+ </file>
+</root>
diff --git a/data/resources-xxhdpi_dark/symbols-ad.png b/data/resources-xxhdpi_dark/symbols-ad.png
new file mode 100644
index 0000000000..74537deaf7
--- /dev/null
+++ b/data/resources-xxhdpi_dark/symbols-ad.png
Binary files differ
diff --git a/data/resources-xxhdpi_dark/symbols-ad.sdf b/data/resources-xxhdpi_dark/symbols-ad.sdf
new file mode 100644
index 0000000000..348c10bc27
--- /dev/null
+++ b/data/resources-xxhdpi_dark/symbols-ad.sdf
@@ -0,0 +1,8 @@
+<!DOCTYPE skin>
+<root>
+ <file width="128" height="128">
+ <symbol minX="0" maxX="58" minY="0" maxY="58" name="test-l"/>
+ <symbol minX="58" maxX="114" minY="0" maxY="56" name="test-m"/>
+ <symbol minX="0" maxX="42" minY="58" maxY="100" name="test-s"/>
+ </file>
+</root>
diff --git a/data/styles/clear/style-clear/symbols-ad/test-l.svg b/data/styles/clear/style-clear/symbols-ad/test-l.svg
new file mode 100644
index 0000000000..2f1ac91ac9
--- /dev/null
+++ b/data/styles/clear/style-clear/symbols-ad/test-l.svg
@@ -0,0 +1,7 @@
+<svg width="27" height="27" viewBox="0 0 27 27">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="13.5" cy="13.5" r="13.5" fill="#FFF" fill-opacity=".6" fill-rule="nonzero"/>
+ <circle cx="13.5" cy="13.5" r="12.5" fill="#00FF91" fill-rule="nonzero"/>
+ <polygon fill="#FFF" points="17.52 10.219 13.973 10.219 13.973 20 12.012 20 12.012 10.219 8.496 10.219 8.496 8.625 17.52 8.625"/>
+ </g>
+</svg>
diff --git a/data/styles/clear/style-clear/symbols-ad/test-m.svg b/data/styles/clear/style-clear/symbols-ad/test-m.svg
new file mode 100644
index 0000000000..0471881b12
--- /dev/null
+++ b/data/styles/clear/style-clear/symbols-ad/test-m.svg
@@ -0,0 +1,7 @@
+<svg width="23" height="23" viewBox="0 0 23 23">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="11.5" cy="11.5" r="11.5" fill="#FFF" fill-opacity=".6" fill-rule="nonzero"/>
+ <circle cx="11.5" cy="11.5" r="10.5" fill="#00FF91" fill-rule="nonzero"/>
+ <polygon fill="#FFF" points="15.955 8.441 12.851 8.441 12.851 17 11.135 17 11.135 8.441 8.059 8.441 8.059 7.047 15.955 7.047"/>
+ </g>
+</svg>
diff --git a/data/styles/clear/style-clear/symbols-ad/test-s.svg b/data/styles/clear/style-clear/symbols-ad/test-s.svg
new file mode 100644
index 0000000000..bb4d34774b
--- /dev/null
+++ b/data/styles/clear/style-clear/symbols-ad/test-s.svg
@@ -0,0 +1,7 @@
+<svg width="17" height="17" viewBox="0 0 17 17">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="8.5" cy="8.5" r="8.5" fill="#FFF" fill-opacity=".6" fill-rule="nonzero"/>
+ <circle cx="8.5" cy="8.5" r="7.5" fill="#00FF91" fill-rule="nonzero"/>
+ <polygon fill="#FFF" points="12.39 5.664 9.729 5.664 9.729 13 8.259 13 8.259 5.664 5.622 5.664 5.622 4.469 12.39 4.469"/>
+ </g>
+</svg>
diff --git a/data/styles/clear/style-night/symbols-ad/test-l.svg b/data/styles/clear/style-night/symbols-ad/test-l.svg
new file mode 100644
index 0000000000..2f1ac91ac9
--- /dev/null
+++ b/data/styles/clear/style-night/symbols-ad/test-l.svg
@@ -0,0 +1,7 @@
+<svg width="27" height="27" viewBox="0 0 27 27">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="13.5" cy="13.5" r="13.5" fill="#FFF" fill-opacity=".6" fill-rule="nonzero"/>
+ <circle cx="13.5" cy="13.5" r="12.5" fill="#00FF91" fill-rule="nonzero"/>
+ <polygon fill="#FFF" points="17.52 10.219 13.973 10.219 13.973 20 12.012 20 12.012 10.219 8.496 10.219 8.496 8.625 17.52 8.625"/>
+ </g>
+</svg>
diff --git a/data/styles/clear/style-night/symbols-ad/test-m.svg b/data/styles/clear/style-night/symbols-ad/test-m.svg
new file mode 100644
index 0000000000..0471881b12
--- /dev/null
+++ b/data/styles/clear/style-night/symbols-ad/test-m.svg
@@ -0,0 +1,7 @@
+<svg width="23" height="23" viewBox="0 0 23 23">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="11.5" cy="11.5" r="11.5" fill="#FFF" fill-opacity=".6" fill-rule="nonzero"/>
+ <circle cx="11.5" cy="11.5" r="10.5" fill="#00FF91" fill-rule="nonzero"/>
+ <polygon fill="#FFF" points="15.955 8.441 12.851 8.441 12.851 17 11.135 17 11.135 8.441 8.059 8.441 8.059 7.047 15.955 7.047"/>
+ </g>
+</svg>
diff --git a/data/styles/clear/style-night/symbols-ad/test-s.svg b/data/styles/clear/style-night/symbols-ad/test-s.svg
new file mode 100644
index 0000000000..bb4d34774b
--- /dev/null
+++ b/data/styles/clear/style-night/symbols-ad/test-s.svg
@@ -0,0 +1,7 @@
+<svg width="17" height="17" viewBox="0 0 17 17">
+ <g fill="none" fill-rule="evenodd">
+ <circle cx="8.5" cy="8.5" r="8.5" fill="#FFF" fill-opacity=".6" fill-rule="nonzero"/>
+ <circle cx="8.5" cy="8.5" r="7.5" fill="#00FF91" fill-rule="nonzero"/>
+ <polygon fill="#FFF" points="12.39 5.664 9.729 5.664 9.729 13 8.259 13 8.259 5.664 5.622 5.664 5.622 4.469 12.39 4.469"/>
+ </g>
+</svg>
diff --git a/drape/symbols_texture.cpp b/drape/symbols_texture.cpp
index 4bdad9334f..d66b2fd1f3 100644
--- a/drape/symbols_texture.cpp
+++ b/drape/symbols_texture.cpp
@@ -20,8 +20,6 @@ namespace dp
namespace
{
-string const SymbolsTextureName = "symbols";
-
using TDefinitionInserter = function<void(string const &, m2::RectF const &)>;
using TSymbolsLoadingCompletion = function<void(unsigned char *, uint32_t, uint32_t)>;
using TSymbolsLoadingFailure = function<void(string const &)>;
@@ -114,8 +112,8 @@ private:
m2::RectF m_rect;
};
-void LoadSymbols(string const & skinPathName, bool convertToUV,
- TDefinitionInserter const & definitionInserter,
+void LoadSymbols(std::string const & skinPathName, std::string const & textureName,
+ bool convertToUV, TDefinitionInserter const & definitionInserter,
TSymbolsLoadingCompletion const & completionHandler,
TSymbolsLoadingFailure const & failureHandler)
{
@@ -131,7 +129,7 @@ void LoadSymbols(string const & skinPathName, bool convertToUV,
DefinitionLoader loader(definitionInserter, convertToUV);
{
- ReaderPtr<Reader> reader = GetStyleReader().GetResourceReader(SymbolsTextureName + ".sdf", skinPathName);
+ ReaderPtr<Reader> reader = GetStyleReader().GetResourceReader(textureName + ".sdf", skinPathName);
ReaderSource<ReaderPtr<Reader> > source(reader);
if (!ParseXML(source, loader))
{
@@ -144,7 +142,7 @@ void LoadSymbols(string const & skinPathName, bool convertToUV,
}
{
- ReaderPtr<Reader> reader = GetStyleReader().GetResourceReader(SymbolsTextureName + ".png", skinPathName);
+ ReaderPtr<Reader> reader = GetStyleReader().GetResourceReader(textureName + ".png", skinPathName);
size_t const size = static_cast<size_t>(reader.Size());
rawData.resize(size);
reader.Read(0, &rawData[0], size);
@@ -201,16 +199,18 @@ Texture::ResourceType SymbolsTexture::SymbolInfo::GetType() const
return Symbol;
}
-SymbolsTexture::SymbolsTexture(string const & skinPathName, ref_ptr<HWTextureAllocator> allocator)
+SymbolsTexture::SymbolsTexture(std::string const & skinPathName, std::string const & textureName,
+ ref_ptr<HWTextureAllocator> allocator)
+ : m_name(textureName)
{
Load(skinPathName, allocator);
}
-void SymbolsTexture::Load(string const & skinPathName, ref_ptr<HWTextureAllocator> allocator)
+void SymbolsTexture::Load(std::string const & skinPathName, ref_ptr<HWTextureAllocator> allocator)
{
auto definitionInserter = [this](string const & name, m2::RectF const & rect)
{
- m_definition.insert(make_pair(name, SymbolsTexture::SymbolInfo(rect)));
+ m_definition.insert(std::make_pair(name, SymbolsTexture::SymbolInfo(rect)));
};
auto completionHandler = [this, &allocator](unsigned char * data, uint32_t width, uint32_t height)
@@ -230,7 +230,8 @@ void SymbolsTexture::Load(string const & skinPathName, ref_ptr<HWTextureAllocato
Fail();
};
- LoadSymbols(skinPathName, true /* convertToUV */, definitionInserter, completionHandler, failureHandler);
+ LoadSymbols(skinPathName, m_name, true /* convertToUV */, definitionInserter,
+ completionHandler, failureHandler);
}
void SymbolsTexture::Invalidate(string const & skinPathName, ref_ptr<HWTextureAllocator> allocator)
@@ -267,8 +268,14 @@ void SymbolsTexture::Fail()
Create(p, make_ref(&alfaTexture));
}
-bool SymbolsTexture::DecodeToMemory(string const & skinPathName, vector<uint8_t> & symbolsSkin,
- map<string, m2::RectU> & symbolsIndex,
+bool SymbolsTexture::IsSymbolContained(std::string const & symbolName) const
+{
+ return m_definition.find(symbolName) != m_definition.end();
+}
+
+bool SymbolsTexture::DecodeToMemory(std::string const & skinPathName, std::string const & textureName,
+ vector<uint8_t> & symbolsSkin,
+ std::map<string, m2::RectU> & symbolsIndex,
uint32_t & skinWidth, uint32_t & skinHeight)
{
auto definitionInserter = [&symbolsIndex](string const & name, m2::RectF const & rect)
@@ -294,7 +301,8 @@ bool SymbolsTexture::DecodeToMemory(string const & skinPathName, vector<uint8_t>
result = false;
};
- LoadSymbols(skinPathName, false /* convertToUV */, definitionInserter, completionHandler, failureHandler);
+ LoadSymbols(skinPathName, textureName, false /* convertToUV */,
+ definitionInserter, completionHandler, failureHandler);
return result;
}
diff --git a/drape/symbols_texture.hpp b/drape/symbols_texture.hpp
index 219f7f4e53..9d022d4d37 100644
--- a/drape/symbols_texture.hpp
+++ b/drape/symbols_texture.hpp
@@ -30,20 +30,25 @@ public:
virtual ResourceType GetType() const;
};
- explicit SymbolsTexture(string const & skinPathName, ref_ptr<HWTextureAllocator> allocator);
+ SymbolsTexture(std::string const & skinPathName, std::string const & textureName,
+ ref_ptr<HWTextureAllocator> allocator);
ref_ptr<ResourceInfo> FindResource(Key const & key, bool & newResource) override;
void Invalidate(string const & skinPathName, ref_ptr<HWTextureAllocator> allocator);
- static bool DecodeToMemory(string const & skinPathName, vector<uint8_t> & symbolsSkin,
- map<string, m2::RectU> & symbolsIndex,
+ bool IsSymbolContained(std::string const & symbolName) const;
+
+ static bool DecodeToMemory(std::string const & skinPathName, std::string const & textureName,
+ vector<uint8_t> & symbolsSkin,
+ std::map<string, m2::RectU> & symbolsIndex,
uint32_t & skinWidth, uint32_t & skinHeight);
private:
void Fail();
- void Load(string const & skinPathName, ref_ptr<HWTextureAllocator> allocator);
+ void Load(std::string const & skinPathName, ref_ptr<HWTextureAllocator> allocator);
- typedef map<string, SymbolInfo> TSymDefinition;
+ using TSymDefinition = map<std::string, SymbolInfo>;
+ std::string m_name;
mutable TSymDefinition m_definition;
};
diff --git a/drape/texture_manager.cpp b/drape/texture_manager.cpp
index 531e1215fc..30920845a7 100644
--- a/drape/texture_manager.cpp
+++ b/drape/texture_manager.cpp
@@ -37,6 +37,10 @@ size_t const kReservedColors = 20;
float const kGlyphAreaMultiplier = 1.2f;
float const kGlyphAreaCoverage = 0.9f;
+std::string const kDefaultSymbolsTexture = "symbols";
+std::string const kSymbolTextures[] = { kDefaultSymbolsTexture, "symbols-ad" };
+uint32_t const kDefaultSymbolsIndex = 0;
+
namespace
{
@@ -145,7 +149,9 @@ void TextureManager::BaseRegion::SetTexture(ref_ptr<Texture> texture)
m2::PointF TextureManager::BaseRegion::GetPixelSize() const
{
- ASSERT(IsValid(), ());
+ if (!IsValid())
+ return m2::PointF(0.0f, 0.0f);
+
m2::RectF const & texRect = m_info->GetTexRect();
return m2::PointF(texRect.SizeX() * m_texture->GetWidth(),
texRect.SizeY() * m_texture->GetHeight());
@@ -153,11 +159,20 @@ m2::PointF TextureManager::BaseRegion::GetPixelSize() const
float TextureManager::BaseRegion::GetPixelHeight() const
{
+ if (!IsValid())
+ return 0.0f;
+
return m_info->GetTexRect().SizeY() * m_texture->GetHeight();
}
m2::RectF const & TextureManager::BaseRegion::GetTexRect() const
{
+ if (!IsValid())
+ {
+ static m2::RectF nilRect(0.0f, 0.0f, 0.0f, 0.0f);
+ return nilRect;
+ }
+
return m_info->GetTexRect();
}
@@ -207,7 +222,7 @@ void TextureManager::Release()
m_glyphGroups.clear();
m_hybridGlyphGroups.clear();
- m_symbolTexture.reset();
+ m_symbolTextures.clear();
m_stipplePenTexture.reset();
m_colorTexture.reset();
@@ -380,7 +395,11 @@ void TextureManager::Init(Params const & params)
GLFunctions::glPixelStore(gl_const::GLUnpackAlignment, 1);
- m_symbolTexture = make_unique_dp<SymbolsTexture>(params.m_resPostfix, make_ref(m_textureAllocator));
+ for (size_t i = 0; i < ARRAY_SIZE(kSymbolTextures); ++i)
+ {
+ m_symbolTextures.push_back(make_unique_dp<SymbolsTexture>(params.m_resPostfix, kSymbolTextures[i],
+ make_ref(m_textureAllocator)));
+ }
m_trafficArrowTexture = make_unique_dp<StaticTexture>("traffic-arrow", params.m_resPostfix,
make_ref(m_textureAllocator));
@@ -454,9 +473,12 @@ void TextureManager::Init(Params const & params)
void TextureManager::Invalidate(string const & resPostfix)
{
- ASSERT(m_symbolTexture != nullptr, ());
- ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTexture);
- symbolsTexture->Invalidate(resPostfix, make_ref(m_textureAllocator));
+ for (size_t i = 0; i < m_symbolTextures.size(); ++i)
+ {
+ ASSERT(m_symbolTextures[i] != nullptr, ());
+ ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTextures[i]);
+ symbolsTexture->Invalidate(resPostfix, make_ref(m_textureAllocator));
+ }
ASSERT(m_trafficArrowTexture != nullptr, ());
ref_ptr<StaticTexture> staticTexture = make_ref(m_trafficArrowTexture);
@@ -465,7 +487,17 @@ void TextureManager::Invalidate(string const & resPostfix)
void TextureManager::GetSymbolRegion(string const & symbolName, SymbolRegion & region)
{
- GetRegionBase(make_ref(m_symbolTexture), region, SymbolsTexture::SymbolKey(symbolName));
+ for (size_t i = 0; i < m_symbolTextures.size(); ++i)
+ {
+ ASSERT(m_symbolTextures[i] != nullptr, ());
+ ref_ptr<SymbolsTexture> symbolsTexture = make_ref(m_symbolTextures[i]);
+ if (symbolsTexture->IsSymbolContained(symbolName))
+ {
+ GetRegionBase(symbolsTexture, region, SymbolsTexture::SymbolKey(symbolName));
+ return;
+ }
+ }
+ LOG(LWARNING, ("Detected using of unknown symbol ", symbolName));
}
void TextureManager::GetStippleRegion(TStipplePattern const & pen, StippleRegion & region)
@@ -515,7 +547,8 @@ bool TextureManager::AreGlyphsReady(strings::UniString const & str, int fixedHei
ref_ptr<Texture> TextureManager::GetSymbolsTexture() const
{
- return make_ref(m_symbolTexture);
+ ASSERT(!m_symbolTextures.empty(), ());
+ return make_ref(m_symbolTextures[kDefaultSymbolsIndex]);
}
ref_ptr<Texture> TextureManager::GetTrafficArrowTexture() const
diff --git a/drape/texture_manager.hpp b/drape/texture_manager.hpp
index 60d18f18a7..15e1d684db 100644
--- a/drape/texture_manager.hpp
+++ b/drape/texture_manager.hpp
@@ -8,12 +8,15 @@
#include "base/string_utils.hpp"
-#include "std/atomic.hpp"
-#include "std/unordered_set.hpp"
+#include <atomic>
+#include <list>
+#include <vector>
namespace dp
{
+extern std::string const kDefaultSymbolsTexture;
+
class HWTextureAllocator;
class TextureManager
@@ -235,10 +238,10 @@ private:
static constexpr size_t GetInvalidGlyphGroup();
private:
- drape_ptr<Texture> m_symbolTexture;
+ std::vector<drape_ptr<Texture>> m_symbolTextures;
drape_ptr<Texture> m_stipplePenTexture;
drape_ptr<Texture> m_colorTexture;
- list<drape_ptr<Texture>> m_glyphTextures;
+ std::list<drape_ptr<Texture>> m_glyphTextures;
drape_ptr<Texture> m_trafficArrowTexture;
@@ -248,7 +251,7 @@ private:
buffer_vector<GlyphGroup, 64> m_glyphGroups;
buffer_vector<HybridGlyphGroup, 4> m_hybridGlyphGroups;
- atomic_flag m_nothingToUpload;
+ std::atomic_flag m_nothingToUpload;
};
} // namespace dp
diff --git a/drape_frontend/watch/software_renderer.cpp b/drape_frontend/watch/software_renderer.cpp
index b7575c0bc2..e7d3f7ead3 100644
--- a/drape_frontend/watch/software_renderer.cpp
+++ b/drape_frontend/watch/software_renderer.cpp
@@ -2,6 +2,7 @@
#include "drape_frontend/watch/proto_to_styles.hpp"
#include "drape/symbols_texture.hpp"
+#include "drape/texture_manager.hpp"
#include "platform/platform.hpp"
@@ -165,7 +166,8 @@ SoftwareRenderer::SoftwareRenderer(GlyphCache::Params const & glyphCacheParams,
pl.GetFontNames(fonts);
m_glyphCache->addFonts(fonts);
- VERIFY(dp::SymbolsTexture::DecodeToMemory(resourcesPostfix, m_symbolsSkin, m_symbolsIndex, m_skinWidth, m_skinHeight), ());
+ VERIFY(dp::SymbolsTexture::DecodeToMemory(resourcesPostfix, dp::kDefaultSymbolsTexture,
+ m_symbolsSkin, m_symbolsIndex, m_skinWidth, m_skinHeight), ());
ASSERT_NOT_EQUAL(m_skinWidth, 0, ());
ASSERT_NOT_EQUAL(m_skinHeight, 0, ());
}
diff --git a/tools/unix/generate_symbols.sh b/tools/unix/generate_symbols.sh
index 8166d7130d..f1c499e5bc 100755
--- a/tools/unix/generate_symbols.sh
+++ b/tools/unix/generate_symbols.sh
@@ -40,13 +40,18 @@ fi
# Parameter $4 - symbol size
# Parameter $5 - does color correction required
# Parameter $6 - style suffix (none, _dark, _clear)
+# Parameter $7 - symbols folder (symbols, symbols-ad)
+# Parameter $8 - symbols suffix (none, -ad)
function BuildSkin() {
styleType=$1
styleName=$2
resourceName=$3
symbolSize=$4
colorCorrection=$5
- suffix=${6-}
+ suffix=$6
+ symbolsFolder=$7
+ symbolsSuffix=${8-}
+
echo "Building skin for $styleName/$resourceName"
# Set environment
STYLE_PATH="$DATA_PATH/styles/$styleType/style-$styleName"
@@ -59,8 +64,8 @@ function BuildSkin() {
else
COLOR_CORR=
fi
- "$SKIN_GENERATOR" --symbolWidth $symbolSize --symbolHeight $symbolSize --symbolsDir "$STYLE_PATH/symbols" \
- --skinName "$DATA_PATH/resources-$resourceName$suffix/basic" --skinSuffix="" $COLOR_CORR
+ "$SKIN_GENERATOR" --symbolWidth $symbolSize --symbolHeight $symbolSize --symbolsDir "$STYLE_PATH/$symbolsFolder" \
+ --skinName "$DATA_PATH/resources-$resourceName$suffix/basic" --skinSuffix="$symbolsSuffix" $COLOR_CORR
# Reset environment
rm -r $PNG_PATH || true
}
@@ -75,14 +80,26 @@ done
# Build styles
-BuildSkin clear night mdpi 18 false _dark
-BuildSkin clear night hdpi 27 false _dark
-BuildSkin clear night xhdpi 36 false _dark
-BuildSkin clear night xxhdpi 54 false _dark
-BuildSkin clear night 6plus 54 false _dark
+BuildSkin clear night mdpi 18 false _dark symbols
+BuildSkin clear night hdpi 27 false _dark symbols
+BuildSkin clear night xhdpi 36 false _dark symbols
+BuildSkin clear night xxhdpi 54 false _dark symbols
+BuildSkin clear night 6plus 54 false _dark symbols
+
+BuildSkin clear clear mdpi 18 false _clear symbols
+BuildSkin clear clear hdpi 27 false _clear symbols
+BuildSkin clear clear xhdpi 36 false _clear symbols
+BuildSkin clear clear xxhdpi 54 false _clear symbols
+BuildSkin clear clear 6plus 54 false _clear symbols
+
+BuildSkin clear night mdpi 18 false _dark symbols-ad -ad
+BuildSkin clear night hdpi 27 false _dark symbols-ad -ad
+BuildSkin clear night xhdpi 36 false _dark symbols-ad -ad
+BuildSkin clear night xxhdpi 54 false _dark symbols-ad -ad
+BuildSkin clear night 6plus 54 false _dark symbols-ad -ad
-BuildSkin clear clear mdpi 18 false _clear
-BuildSkin clear clear hdpi 27 false _clear
-BuildSkin clear clear xhdpi 36 false _clear
-BuildSkin clear clear xxhdpi 54 false _clear
-BuildSkin clear clear 6plus 54 false _clear
+BuildSkin clear clear mdpi 18 false _clear symbols-ad -ad
+BuildSkin clear clear hdpi 27 false _clear symbols-ad -ad
+BuildSkin clear clear xhdpi 36 false _clear symbols-ad -ad
+BuildSkin clear clear xxhdpi 54 false _clear symbols-ad -ad
+BuildSkin clear clear 6plus 54 false _clear symbols-ad -ad