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-04-06 19:50:27 +0300
committerDaria Volvenkova <d.volvenkova@corp.mail.ru>2018-04-09 14:28:51 +0300
commita55d0cada95ed622d27d0fb036362d0beac234a2 (patch)
tree75e4b8402c6162089575262ce04b3b7295972454
parent36902b362ed15ee41d3dfd33702a6052961f2e03 (diff)
Added new booking search visualization
-rw-r--r--drape/drape_tests/static_texture_tests.cpp2
-rw-r--r--drape/render_bucket.cpp6
-rw-r--r--drape/render_bucket.hpp1
-rwxr-xr-xdrape_frontend/frontend_renderer.cpp35
-rwxr-xr-xdrape_frontend/frontend_renderer.hpp4
-rwxr-xr-xdrape_frontend/render_group.cpp9
-rwxr-xr-xdrape_frontend/render_group.hpp1
-rw-r--r--drape_frontend/render_state.hpp1
-rw-r--r--drape_frontend/shaders/shader_index.txt8
-rw-r--r--drape_frontend/visual_params.cpp4
-rw-r--r--drape_frontend/visual_params.hpp1
-rw-r--r--iphone/Maps/Maps.xcodeproj/project.pbxproj80
-rw-r--r--map/framework.cpp4
-rw-r--r--map/search_mark.cpp71
-rw-r--r--map/search_mark.hpp11
-rw-r--r--map/style_tests/style_symbols_consistency_test.cpp2
-rw-r--r--qt/CMakeLists.txt2
-rw-r--r--qt/build_style/build_skins.cpp5
-rw-r--r--search/intermediate_result.cpp1
-rw-r--r--search/result.hpp1
-rw-r--r--skin_generator/generator.cpp423
-rw-r--r--skin_generator/generator.hpp102
-rw-r--r--skin_generator/main.cpp17
-rwxr-xr-xtizen/scripts/update_assets_for_unit_tests.sh2
-rwxr-xr-xtizen/scripts/update_assets_for_version.sh2
-rwxr-xr-xtools/python/generate_styles_override.py2
-rwxr-xr-xtools/unix/generate_symbols.sh49
27 files changed, 483 insertions, 363 deletions
diff --git a/drape/drape_tests/static_texture_tests.cpp b/drape/drape_tests/static_texture_tests.cpp
index b4bce9fd37..8cece22e10 100644
--- a/drape/drape_tests/static_texture_tests.cpp
+++ b/drape/drape_tests/static_texture_tests.cpp
@@ -10,7 +10,7 @@
UNIT_TEST(CheckTrafficArrowTextures)
{
- static std::vector<std::string> skinPaths = {"6plus", "mdpi", "hdpi", "xhdpi", "xxhdpi"};
+ static std::vector<std::string> skinPaths = {"6plus", "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi"};
static std::vector<MapStyle> styles = {MapStyle::MapStyleClear, MapStyle::MapStyleDark,
MapStyle::MapStyleVehicleClear,
MapStyle::MapStyleVehicleDark};
diff --git a/drape/render_bucket.cpp b/drape/render_bucket.cpp
index a1138d7a47..b36243d912 100644
--- a/drape/render_bucket.cpp
+++ b/drape/render_bucket.cpp
@@ -90,6 +90,12 @@ void RenderBucket::RemoveOverlayHandles(ref_ptr<OverlayTree> tree)
tree->Remove(make_ref(overlayHandle));
}
+void RenderBucket::SetOverlayVisibility(bool isVisible)
+{
+ for (auto const & overlayHandle : m_overlay)
+ overlayHandle->SetIsVisible(isVisible);
+}
+
void RenderBucket::Render(bool drawAsLine)
{
ASSERT(m_buffer != nullptr, ());
diff --git a/drape/render_bucket.hpp b/drape/render_bucket.hpp
index 95137e4dc6..a5ff46e373 100644
--- a/drape/render_bucket.hpp
+++ b/drape/render_bucket.hpp
@@ -39,6 +39,7 @@ public:
void CollectOverlayHandles(ref_ptr<OverlayTree> tree);
bool HasOverlayHandles() const;
void RemoveOverlayHandles(ref_ptr<OverlayTree> tree);
+ void SetOverlayVisibility(bool isVisible);
void Render(bool drawAsLine);
// Only for testing! Don't use this function in production code!
diff --git a/drape_frontend/frontend_renderer.cpp b/drape_frontend/frontend_renderer.cpp
index a26025efb2..cbcb592102 100755
--- a/drape_frontend/frontend_renderer.cpp
+++ b/drape_frontend/frontend_renderer.cpp
@@ -1228,6 +1228,7 @@ void FrontendRenderer::RenderScene(ScreenBase const & modelView)
RenderUserMarksLayer(modelView, RenderState::UserMarkLayer);
RenderUserMarksLayer(modelView, RenderState::TransitMarkLayer);
RenderUserMarksLayer(modelView, RenderState::RoutingMarkLayer);
+ RenderSearchMarksLayer(modelView);
}
m_myPositionController->Render(modelView, m_currentZoomLevel, make_ref(m_gpuProgramManager),
@@ -1359,17 +1360,40 @@ void FrontendRenderer::RenderRouteLayer(ScreenBase const & modelView)
GLFunctions::glDisable(gl_const::GLDepthTest);
}
-void FrontendRenderer::RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId)
+void FrontendRenderer::RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId,
+ bool enableDepthTest)
{
auto & renderGroups = m_layers[layerId].m_renderGroups;
if (renderGroups.empty())
return;
- GLFunctions::glEnable(gl_const::GLDepthTest);
- GLFunctions::glClear(gl_const::GLDepthBit);
+ if (enableDepthTest)
+ {
+ GLFunctions::glEnable(gl_const::GLDepthTest);
+ GLFunctions::glClear(gl_const::GLDepthBit);
+ }
+ else
+ {
+ GLFunctions::glDisable(gl_const::GLDepthTest);
+ }
+
for (drape_ptr<RenderGroup> & group : renderGroups)
RenderSingleGroup(modelView, make_ref(group));
- GLFunctions::glDisable(gl_const::GLDepthTest);
+
+ if (enableDepthTest)
+ GLFunctions::glDisable(gl_const::GLDepthTest);
+}
+
+void FrontendRenderer::RenderSearchMarksLayer(ScreenBase const & modelView)
+{
+ auto & layer = m_layers[RenderState::SearchMarkLayer];
+ layer.Sort(nullptr);
+ for (drape_ptr<RenderGroup> & group : layer.m_renderGroups)
+ {
+ group->SetOverlayVisibility(true);
+ group->Update(modelView);
+ }
+ RenderUserMarksLayer(modelView, RenderState::SearchMarkLayer, false /* enableDepthTest */);
}
void FrontendRenderer::BuildOverlayTree(ScreenBase const & modelView)
@@ -2148,7 +2172,8 @@ void FrontendRenderer::RenderLayer::Sort(ref_ptr<dp::OverlayTree> overlayTree)
while (!m_renderGroups.empty() && m_renderGroups.back()->CanBeDeleted())
{
- m_renderGroups.back()->RemoveOverlay(overlayTree);
+ if (overlayTree)
+ m_renderGroups.back()->RemoveOverlay(overlayTree);
m_renderGroups.pop_back();
}
}
diff --git a/drape_frontend/frontend_renderer.hpp b/drape_frontend/frontend_renderer.hpp
index 14b3201a8f..ec8db4be0e 100755
--- a/drape_frontend/frontend_renderer.hpp
+++ b/drape_frontend/frontend_renderer.hpp
@@ -160,9 +160,11 @@ private:
void Render3dLayer(ScreenBase const & modelView, bool useFramebuffer);
void RenderOverlayLayer(ScreenBase const & modelView);
void RenderNavigationOverlayLayer(ScreenBase const & modelView);
- void RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId);
+ void RenderUserMarksLayer(ScreenBase const & modelView, RenderState::DepthLayer layerId,
+ bool enableDepthTest = true);
void RenderTrafficLayer(ScreenBase const & modelView);
void RenderRouteLayer(ScreenBase const & modelView);
+ void RenderSearchMarksLayer(ScreenBase const & modelView);
bool HasTransitData();
diff --git a/drape_frontend/render_group.cpp b/drape_frontend/render_group.cpp
index 5f807984c7..8e8b58cb29 100755
--- a/drape_frontend/render_group.cpp
+++ b/drape_frontend/render_group.cpp
@@ -84,6 +84,12 @@ void RenderGroup::RemoveOverlay(ref_ptr<dp::OverlayTree> tree)
renderBucket->RemoveOverlayHandles(tree);
}
+void RenderGroup::SetOverlayVisibility(bool isVisible)
+{
+ for (auto & renderBucket : m_renderBuckets)
+ renderBucket->SetOverlayVisibility(isVisible);
+}
+
void RenderGroup::Render(ScreenBase const & screen)
{
BaseRenderGroup::Render(screen);
@@ -166,7 +172,8 @@ bool RenderGroup::IsUserMark() const
depthLayer == RenderState::UserMarkLayer ||
depthLayer == RenderState::TransitMarkLayer ||
depthLayer == RenderState::RoutingMarkLayer ||
- depthLayer == RenderState::LocalAdsMarkLayer;
+ depthLayer == RenderState::LocalAdsMarkLayer ||
+ depthLayer == RenderState::SearchMarkLayer;
}
bool RenderGroup::UpdateCanBeDeletedStatus(bool canBeDeleted, int currentZoom, ref_ptr<dp::OverlayTree> tree)
diff --git a/drape_frontend/render_group.hpp b/drape_frontend/render_group.hpp
index 4b15798df6..5e27368f68 100755
--- a/drape_frontend/render_group.hpp
+++ b/drape_frontend/render_group.hpp
@@ -61,6 +61,7 @@ public:
void CollectOverlay(ref_ptr<dp::OverlayTree> tree);
bool HasOverlayHandles() const;
void RemoveOverlay(ref_ptr<dp::OverlayTree> tree);
+ void SetOverlayVisibility(bool isVisible);
void Render(ScreenBase const & screen) override;
void AddBucket(drape_ptr<dp::RenderBucket> && bucket);
diff --git a/drape_frontend/render_state.hpp b/drape_frontend/render_state.hpp
index c095d21ad7..1f3e7ddd82 100644
--- a/drape_frontend/render_state.hpp
+++ b/drape_frontend/render_state.hpp
@@ -20,6 +20,7 @@ public:
NavigationLayer,
TransitMarkLayer,
RoutingMarkLayer,
+ SearchMarkLayer,
GuiLayer,
LayersCount
};
diff --git a/drape_frontend/shaders/shader_index.txt b/drape_frontend/shaders/shader_index.txt
index 966eec41b7..92627123b2 100644
--- a/drape_frontend/shaders/shader_index.txt
+++ b/drape_frontend/shaders/shader_index.txt
@@ -1,6 +1,8 @@
COLORED_SYMBOL_PROGRAM colored_symbol.vsh.glsl colored_symbol.fsh.glsl
TEXTURING_PROGRAM texturing.vsh.glsl texturing.fsh.glsl
MASKED_TEXTURING_PROGRAM masked_texturing.vsh.glsl masked_texturing.fsh.glsl
+BOOKMARK_PROGRAM user_mark.vsh.glsl user_mark.fsh.glsl
+BOOKMARK_ANIM_PROGRAM user_mark.vsh.glsl user_mark.fsh.glsl
TEXT_OUTLINED_PROGRAM text_outlined.vsh.glsl text.fsh.glsl
TEXT_PROGRAM text.vsh.glsl text.fsh.glsl
TEXT_FIXED_PROGRAM text.vsh.glsl text_fixed.fsh.glsl
@@ -18,8 +20,6 @@ TEXTURING_GUI_PROGRAM texturing_gui.vsh.glsl texturing.fsh.glsl
RULER_PROGRAM ruler.vsh.glsl texturing.fsh.glsl
ACCURACY_PROGRAM position_accuracy3d.vsh.glsl texturing.fsh.glsl
MY_POSITION_PROGRAM my_position.vsh.glsl texturing.fsh.glsl
-BOOKMARK_PROGRAM user_mark.vsh.glsl user_mark.fsh.glsl
-BOOKMARK_ANIM_PROGRAM user_mark.vsh.glsl user_mark.fsh.glsl
ROUTE_PROGRAM route.vsh.glsl route.fsh.glsl
ROUTE_DASH_PROGRAM route.vsh.glsl route_dash.fsh.glsl
ROUTE_ARROW_PROGRAM route_arrow.vsh.glsl route_arrow.fsh.glsl
@@ -33,11 +33,11 @@ ARROW_3D_OUTLINE_PROGRAM arrow3d_shadow.vsh.glsl arrow3d_outline.fsh.glsl
COLORED_SYMBOL_BILLBOARD_PROGRAM colored_symbol_billboard.vsh.glsl colored_symbol.fsh.glsl
TEXTURING_BILLBOARD_PROGRAM texturing_billboard.vsh.glsl texturing.fsh.glsl
MASKED_TEXTURING_BILLBOARD_PROGRAM masked_texturing_billboard.vsh.glsl masked_texturing.fsh.glsl
+BOOKMARK_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl user_mark.fsh.glsl
+BOOKMARK_ANIM_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl user_mark.fsh.glsl
TEXT_OUTLINED_BILLBOARD_PROGRAM text_outlined_billboard.vsh.glsl text.fsh.glsl
TEXT_BILLBOARD_PROGRAM text_billboard.vsh.glsl text.fsh.glsl
TEXT_FIXED_BILLBOARD_PROGRAM text_billboard.vsh.glsl text_fixed.fsh.glsl
-BOOKMARK_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl user_mark.fsh.glsl
-BOOKMARK_ANIM_BILLBOARD_PROGRAM user_mark_billboard.vsh.glsl user_mark.fsh.glsl
TRAFFIC_PROGRAM traffic.vsh.glsl traffic.fsh.glsl
TRAFFIC_LINE_PROGRAM traffic_line.vsh.glsl traffic_line.fsh.glsl
SMAA_EDGES_PROGRAM smaa_edges.vsh.glsl smaa_edges.fsh.glsl
diff --git a/drape_frontend/visual_params.cpp b/drape_frontend/visual_params.cpp
index 9f19e81729..30eaa91847 100644
--- a/drape_frontend/visual_params.cpp
+++ b/drape_frontend/visual_params.cpp
@@ -38,6 +38,7 @@ double const VisualParams::kHdpiScale = 1.5;
double const VisualParams::kXhdpiScale = 2.0;
double const VisualParams::k6plusScale = 2.4;
double const VisualParams::kXxhdpiScale = 3.0;
+double const VisualParams::kXxxhdpiScale = 3.5;
void VisualParams::Init(double vs, uint32_t tileSize)
{
@@ -91,8 +92,9 @@ string const & VisualParams::GetResourcePostfix(double visualScale)
make_pair("mdpi", kMdpiScale),
make_pair("hdpi", kHdpiScale),
make_pair("xhdpi", kXhdpiScale),
- make_pair("xxhdpi", kXxhdpiScale),
make_pair("6plus", k6plusScale),
+ make_pair("xxhdpi", kXxhdpiScale),
+ make_pair("xxxhdpi", kXxxhdpiScale),
};
// Looking for the nearest available scale.
diff --git a/drape_frontend/visual_params.hpp b/drape_frontend/visual_params.hpp
index 79b7a3a030..90541690e4 100644
--- a/drape_frontend/visual_params.hpp
+++ b/drape_frontend/visual_params.hpp
@@ -18,6 +18,7 @@ public:
static double const kXhdpiScale;
static double const k6plusScale;
static double const kXxhdpiScale;
+ static double const kXxxhdpiScale;
static void Init(double vs, uint32_t tileSize);
static VisualParams & Instance();
diff --git a/iphone/Maps/Maps.xcodeproj/project.pbxproj b/iphone/Maps/Maps.xcodeproj/project.pbxproj
index 157675f5a1..bcad354042 100644
--- a/iphone/Maps/Maps.xcodeproj/project.pbxproj
+++ b/iphone/Maps/Maps.xcodeproj/project.pbxproj
@@ -340,6 +340,8 @@
34F73FA31E08300E00AC1FD6 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 34F73FA11E08300E00AC1FD6 /* Images.xcassets */; };
34F742321E0834F400AC1FD6 /* UIViewController+Navigation.mm in Sources */ = {isa = PBXBuildFile; fileRef = 34F742301E0834F400AC1FD6 /* UIViewController+Navigation.mm */; };
34FE5A6F1F18F30F00BCA729 /* TrafficButtonArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */; };
+ 4501B1942077C35A001B9173 /* resources-xxxhdpi_clear in Resources */ = {isa = PBXBuildFile; fileRef = 4501B1922077C35A001B9173 /* resources-xxxhdpi_clear */; };
+ 4501B1952077C35A001B9173 /* resources-xxxhdpi_dark in Resources */ = {isa = PBXBuildFile; fileRef = 4501B1932077C35A001B9173 /* resources-xxxhdpi_dark */; };
4554B6EC1E55F0EF0084017F /* drules_proto_vehicle_clear.bin in Resources */ = {isa = PBXBuildFile; fileRef = 4554B6E81E55F02B0084017F /* drules_proto_vehicle_clear.bin */; };
4554B6EE1E55F0F30084017F /* drules_proto_vehicle_dark.bin in Resources */ = {isa = PBXBuildFile; fileRef = 4554B6E91E55F02B0084017F /* drules_proto_vehicle_dark.bin */; };
4586D0C41F48121A00DF9CE5 /* libbsdiff.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 4586D0C31F48121A00DF9CE5 /* libbsdiff.a */; };
@@ -1260,6 +1262,8 @@
34FE4C441BCC013500066718 /* MWMMapWidgets.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MWMMapWidgets.mm; sourceTree = "<group>"; };
34FE5A6D1F18F30F00BCA729 /* TrafficButtonArea.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = TrafficButtonArea.swift; sourceTree = "<group>"; };
3DDB4BC31DAB98F000F4D021 /* libpartners_api.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libpartners_api.a; path = "../../../omim-xcode-build/Debug-iphonesimulator/libpartners_api.a"; sourceTree = "<group>"; };
+ 4501B1922077C35A001B9173 /* resources-xxxhdpi_clear */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-xxxhdpi_clear"; path = "../../data/resources-xxxhdpi_clear"; sourceTree = "<group>"; };
+ 4501B1932077C35A001B9173 /* resources-xxxhdpi_dark */ = {isa = PBXFileReference; lastKnownFileType = folder; name = "resources-xxxhdpi_dark"; path = "../../data/resources-xxxhdpi_dark"; sourceTree = "<group>"; };
450703081E9E6CF000E8C029 /* local_ads_symbols.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = local_ads_symbols.txt; path = ../../data/local_ads_symbols.txt; sourceTree = "<group>"; };
451950391B7A3E070085DA05 /* patterns.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = patterns.txt; path = ../../data/patterns.txt; sourceTree = "<group>"; };
452FCA3A1B6A3DF7007019AB /* colors.txt */ = {isa = PBXFileReference; lastKnownFileType = text; name = colors.txt; path = ../../data/colors.txt; sourceTree = "<group>"; };
@@ -3877,55 +3881,57 @@
FA065FC61286143F00FEA989 /* External Resources */ = {
isa = PBXGroup;
children = (
- BB25B1A51FB32767007276FA /* transit_colors.txt */,
- F642D1221F0F9D1D005E3C25 /* ugc_types.csv */,
- 450703081E9E6CF000E8C029 /* local_ads_symbols.txt */,
- BB7626B41E8559980031D71C /* icudt57l.dat */,
+ EEA615E5134C4968003A9827 /* 01_dejavusans.ttf */,
+ 9DF04B231B71010E00DACAF1 /* 02_droidsans-fallback.ttf */,
+ EEA615E7134C4968003A9827 /* 03_jomolhari-id-a3d.ttf */,
+ EEA615E8134C4968003A9827 /* 04_padauk.ttf */,
+ EEA615E9134C4968003A9827 /* 05_khmeros.ttf */,
+ EE164810135CEE49003B8A3E /* 06_code2000.ttf */,
+ FAF30A94173AB23900818BF6 /* 07_roboto_medium.ttf */,
+ FAAFD696139D9BE2000AE70C /* categories.txt */,
+ EE026F0511D6AC0D00645242 /* classificator.txt */,
+ 452FCA3A1B6A3DF7007019AB /* colors.txt */,
+ 97A5967E19B9CD47007A963F /* copyright.html */,
+ 671182DE1C7F0DD400CB8177 /* countries_obsolete.txt */,
+ FA46DA2B12D4166E00968C36 /* countries.txt */,
+ 4A23D1561B8B4DD700D4EB6F /* drules_proto_clear.bin */,
+ 4A00DBDE1AB704C400113624 /* drules_proto_dark.bin */,
4554B6E81E55F02B0084017F /* drules_proto_vehicle_clear.bin */,
4554B6E91E55F02B0084017F /* drules_proto_vehicle_dark.bin */,
- F623DA6A1C9C2731006A3436 /* opening_hours_how_to_edit.html */,
6B9978341C89A316003B8AA0 /* editor.config */,
- 671182DE1C7F0DD400CB8177 /* countries_obsolete.txt */,
+ 978D4A30199A11E600D72CA7 /* faq.html */,
+ EEFE7C1212F8C9E1006AF8C3 /* fonts_blacklist.txt */,
+ EEFE7C1312F8C9E1006AF8C3 /* fonts_whitelist.txt */,
+ BB7626B41E8559980031D71C /* icudt57l.dat */,
+ 450703081E9E6CF000E8C029 /* local_ads_symbols.txt */,
+ 3495433C1EB22D9600F08F73 /* MPAdBrowserController.xib */,
+ F623DA6A1C9C2731006A3436 /* opening_hours_how_to_edit.html */,
671182DF1C7F0DD400CB8177 /* packed_polygons_obsolete.bin */,
- 671182E01C7F0DD400CB8177 /* WorldCoasts_obsolete.mwm */,
- 3476B8D51BFDD30B00874594 /* tts-how-to-set-up-voice.html */,
- 3476B8DF1BFDD33A00874594 /* tts-how-to-set-up-voice-img */,
- 4A23D1561B8B4DD700D4EB6F /* drules_proto_clear.bin */,
+ FA85F632145DDDC20090E1A0 /* packed_polygons.bin */,
+ 451950391B7A3E070085DA05 /* patterns.txt */,
4A23D1571B8B4DD700D4EB6F /* resources-6plus_clear */,
- 4A23D1581B8B4DD700D4EB6F /* resources-mdpi_clear */,
- F607C1831C032A8800B53A87 /* resources-hdpi_clear */,
- 4A23D1591B8B4DD700D4EB6F /* resources-xhdpi_clear */,
- 4A23D15A1B8B4DD700D4EB6F /* resources-xxhdpi_clear */,
4A7D89C11B2EBF3B00AC843E /* resources-6plus_dark */,
- 4A7D89C21B2EBF3B00AC843E /* resources-mdpi_dark */,
+ A367C93A1B17334800E2B6E7 /* resources-default */,
+ F607C1831C032A8800B53A87 /* resources-hdpi_clear */,
F607C1841C032A8800B53A87 /* resources-hdpi_dark */,
+ 4A23D1581B8B4DD700D4EB6F /* resources-mdpi_clear */,
+ 4A7D89C21B2EBF3B00AC843E /* resources-mdpi_dark */,
+ 4A23D1591B8B4DD700D4EB6F /* resources-xhdpi_clear */,
4A7D89C31B2EBF3B00AC843E /* resources-xhdpi_dark */,
+ 4A23D15A1B8B4DD700D4EB6F /* resources-xxhdpi_clear */,
4A7D89C41B2EBF3B00AC843E /* resources-xxhdpi_dark */,
- A367C93A1B17334800E2B6E7 /* resources-default */,
- 4A00DBDE1AB704C400113624 /* drules_proto_dark.bin */,
- 97A5967E19B9CD47007A963F /* copyright.html */,
- 978D4A30199A11E600D72CA7 /* faq.html */,
+ 4501B1922077C35A001B9173 /* resources-xxxhdpi_clear */,
+ 4501B1932077C35A001B9173 /* resources-xxxhdpi_dark */,
FAAEA7D0161BD26600CCD661 /* synonyms.txt */,
- FAAFD696139D9BE2000AE70C /* categories.txt */,
+ BB25B1A51FB32767007276FA /* transit_colors.txt */,
+ 3476B8DF1BFDD33A00874594 /* tts-how-to-set-up-voice-img */,
+ 3476B8D51BFDD30B00874594 /* tts-how-to-set-up-voice.html */,
FA64D9A813F975AD00350ECF /* types.txt */,
- 452FCA3A1B6A3DF7007019AB /* colors.txt */,
- 451950391B7A3E070085DA05 /* patterns.txt */,
- EEA615E5134C4968003A9827 /* 01_dejavusans.ttf */,
- 9DF04B231B71010E00DACAF1 /* 02_droidsans-fallback.ttf */,
- EEA615E7134C4968003A9827 /* 03_jomolhari-id-a3d.ttf */,
- EEA615E8134C4968003A9827 /* 04_padauk.ttf */,
- EEA615E9134C4968003A9827 /* 05_khmeros.ttf */,
- EE164810135CEE49003B8A3E /* 06_code2000.ttf */,
- FAF30A94173AB23900818BF6 /* 07_roboto_medium.ttf */,
+ F642D1221F0F9D1D005E3C25 /* ugc_types.csv */,
+ EE583CBA12F773F00042CBE3 /* unicode_blocks.txt */,
FAFF42291347F101009BBB14 /* World.mwm */,
+ 671182E01C7F0DD400CB8177 /* WorldCoasts_obsolete.mwm */,
FA459EB314327AF700B5BB3C /* WorldCoasts.mwm */,
- EEFE7C1212F8C9E1006AF8C3 /* fonts_blacklist.txt */,
- EEFE7C1312F8C9E1006AF8C3 /* fonts_whitelist.txt */,
- EE583CBA12F773F00042CBE3 /* unicode_blocks.txt */,
- FA46DA2B12D4166E00968C36 /* countries.txt */,
- FA85F632145DDDC20090E1A0 /* packed_polygons.bin */,
- EE026F0511D6AC0D00645242 /* classificator.txt */,
- 3495433C1EB22D9600F08F73 /* MPAdBrowserController.xib */,
);
name = "External Resources";
sourceTree = "<group>";
@@ -4126,6 +4132,7 @@
34EE25A61EFA6AD400F870AB /* ViatorElement.xib in Resources */,
F6E2FD951E097BA00083EBEC /* MWMBookmarkColorViewController.xib in Resources */,
F6E2FD9B1E097BA00083EBEC /* MWMBookmarkTitleCell.xib in Resources */,
+ 4501B1942077C35A001B9173 /* resources-xxxhdpi_clear in Resources */,
349D1AD21E2E325B004A2006 /* MWMBottomMenuCollectionViewLandscapeCell.xib in Resources */,
3467CEB7202C6FA900D3C670 /* BMCNotificationsCell.xib in Resources */,
349D1AD51E2E325B004A2006 /* MWMBottomMenuCollectionViewPortraitCell.xib in Resources */,
@@ -4224,6 +4231,7 @@
F6E2FF421E097BA00083EBEC /* MWMSearchTableViewController.xib in Resources */,
34AB66681FC5AA330078E451 /* TransportTransitPedestrian.xib in Resources */,
F6E2FEEE1E097BA00083EBEC /* MWMSearchView.xib in Resources */,
+ 4501B1952077C35A001B9173 /* resources-xxxhdpi_dark in Resources */,
F6D67CDE2062BBA60032FD38 /* MWMBCCreateCategoryAlert.xib in Resources */,
344532511F714FD70059FBCC /* UGCAddReviewController.xib in Resources */,
3490D2E31CE9DD2500D0B838 /* MWMSideButtonsView.xib in Resources */,
diff --git a/map/framework.cpp b/map/framework.cpp
index 351535b25a..e3a77810a6 100644
--- a/map/framework.cpp
+++ b/map/framework.cpp
@@ -1592,7 +1592,11 @@ void Framework::FillSearchResultsMarks(bool clear, search::Results::ConstIter be
}
if (r.m_metadata.m_isSponsoredHotel)
+ {
mark->SetMarkType(SearchMarkType::Booking);
+ mark->SetRating(r.m_metadata.m_hotelRating);
+ mark->SetPricing(r.m_metadata.m_hotelPricing);
+ }
if (fn)
fn(*mark);
diff --git a/map/search_mark.cpp b/map/search_mark.cpp
index 23175e56da..cdaf03f1b0 100644
--- a/map/search_mark.cpp
+++ b/map/search_mark.cpp
@@ -1,7 +1,9 @@
#include "map/search_mark.hpp"
#include "map/bookmark_manager.hpp"
+#include "map/place_page_info.hpp"
#include "drape_frontend/drape_engine.hpp"
+#include "drape_frontend/visual_params.hpp"
#include "platform/platform.hpp"
@@ -11,9 +13,9 @@ namespace
{
std::vector<std::string> const kSymbols =
{
- "search-result", // Default.
- "search-booking", // Booking.
- "search-adv", // LocalAds.
+ "search-result", // Default.
+ "searchbooking-default-l", // Booking.
+ "search-adv", // LocalAds.
"non-found-search-result", // NotFound.
};
@@ -21,16 +23,29 @@ std::vector<std::string> const kSymbols =
std::vector<std::string> const kPreparingSymbols =
{
"search-result", // Default.
- "search-booking-inactive", // Booking.
+ "searchbooking-inactive", // Booking.
"search-adv", // LocalAds.
"non-found-search-result", // NotFound.
};
+
+std::string const kBookingSmallIcon = "searchbooking-default-s";
+float const kRatingThreshold = 6.0f;
+
+inline bool HasNoRating(float rating)
+{
+ return fabs(rating) < 1e-5;
+}
} // namespace
SearchMarkPoint::SearchMarkPoint(m2::PointD const & ptOrg)
: UserMark(ptOrg, UserMark::Type::SEARCH)
-{}
+{
+ m_titleDecl.m_anchor = dp::Center;
+ m_titleDecl.m_primaryTextFont.m_color = df::GetColorConstant("RatingText");
+ m_titleDecl.m_primaryTextFont.m_size =
+ static_cast<float>(12.0 / df::VisualParams::Instance().GetFontScale());
+}
drape_ptr<df::UserPointMark::SymbolNameZoomInfo> SearchMarkPoint::GetSymbolNames() const
{
@@ -47,12 +62,47 @@ drape_ptr<df::UserPointMark::SymbolNameZoomInfo> SearchMarkPoint::GetSymbolNames
else
{
name = kSymbols[static_cast<size_t>(m_type)];
+ if (m_type == SearchMarkType::Booking && m_rating < kRatingThreshold)
+ name = kBookingSmallIcon;
}
auto symbol = make_unique_dp<SymbolNameZoomInfo>();
symbol->insert(std::make_pair(1 /* zoomLevel */, name));
return symbol;
}
+df::ColorConstant SearchMarkPoint::GetColorConstant() const
+{
+ if (m_type != SearchMarkType::Booking || m_isPreparing)
+ return {};
+
+ if (HasNoRating(m_rating))
+ return "RatingNone";
+ if (m_rating < 2.0f)
+ return "RatingHorrible";
+ if (m_rating < 4.0f)
+ return "RatingBad";
+ if (m_rating < 6.0f)
+ return "RatingNormal";
+ if (m_rating < 8.0f)
+ return "RatingGood";
+ return "RatingExcellent";
+}
+
+drape_ptr<df::UserPointMark::TitlesInfo> SearchMarkPoint::GetTitleDecl() const
+{
+ if (m_type != SearchMarkType::Booking || m_isPreparing || m_rating < kRatingThreshold)
+ return nullptr;
+
+ auto titles = make_unique_dp<TitlesInfo>();
+ titles->push_back(m_titleDecl);
+ return titles;
+}
+
+df::RenderState::DepthLayer SearchMarkPoint::GetDepthLayer() const
+{
+ return df::RenderState::SearchMarkLayer;
+}
+
void SearchMarkPoint::SetFoundFeature(FeatureID const & feature)
{
SetAttributeValue(m_featureID, feature);
@@ -73,6 +123,17 @@ void SearchMarkPoint::SetPreparing(bool isPreparing)
SetAttributeValue(m_isPreparing, isPreparing);
}
+void SearchMarkPoint::SetRating(float rating)
+{
+ SetAttributeValue(m_rating, rating);
+ m_titleDecl.m_primaryText = place_page::rating::GetRatingFormatted(rating);
+}
+
+void SearchMarkPoint::SetPricing(int pricing)
+{
+ SetAttributeValue(m_pricing, pricing);
+}
+
SearchMarks::SearchMarks()
: m_bmManager(nullptr)
{}
diff --git a/map/search_mark.hpp b/map/search_mark.hpp
index f501c63d1d..c28ef383a3 100644
--- a/map/search_mark.hpp
+++ b/map/search_mark.hpp
@@ -26,9 +26,12 @@ class BookmarkManager;
class SearchMarkPoint : public UserMark
{
public:
- SearchMarkPoint(m2::PointD const & ptOrg);
+ explicit SearchMarkPoint(m2::PointD const & ptOrg);
drape_ptr<SymbolNameZoomInfo> GetSymbolNames() const override;
+ df::ColorConstant GetColorConstant() const override;
+ drape_ptr<TitlesInfo> GetTitleDecl() const override;
+ df::RenderState::DepthLayer GetDepthLayer() const override;
FeatureID GetFeatureID() const override { return m_featureID; }
void SetFoundFeature(FeatureID const & feature);
@@ -37,8 +40,9 @@ public:
void SetMatchedName(std::string const & name);
void SetMarkType(SearchMarkType type);
-
void SetPreparing(bool isPreparing);
+ void SetRating(float rating);
+ void SetPricing(int pricing);
protected:
template<typename T> void SetAttributeValue(T & dst, T const & src)
@@ -55,6 +59,9 @@ protected:
// Used to pass exact search result matched string into a place page.
std::string m_matchedName;
bool m_isPreparing = false;
+ float m_rating = 0.0f;
+ int m_pricing = 0;
+ dp::TitleDecl m_titleDecl;
};
class SearchMarks
diff --git a/map/style_tests/style_symbols_consistency_test.cpp b/map/style_tests/style_symbols_consistency_test.cpp
index e0eb4f5f52..130fc24832 100644
--- a/map/style_tests/style_symbols_consistency_test.cpp
+++ b/map/style_tests/style_symbols_consistency_test.cpp
@@ -86,7 +86,7 @@ UNIT_TEST(Test_SymbolsConsistency)
bool res = true;
- string const densities[] = { "mdpi", "hdpi", "xhdpi", "xxhdpi", "6plus" };
+ string const densities[] = { "mdpi", "hdpi", "xhdpi", "xxhdpi", "xxxhdpi", "6plus" };
styles::RunForEveryMapStyle([&](MapStyle mapStyle)
{
diff --git a/qt/CMakeLists.txt b/qt/CMakeLists.txt
index 214eed865f..0664784d00 100644
--- a/qt/CMakeLists.txt
+++ b/qt/CMakeLists.txt
@@ -224,6 +224,7 @@ if (BUILD_DESIGNER)
COMMAND cp -rf ${OMIM_ROOT}/data/resources-xhdpi_clear/ ${OMIM_ROOT}/data/resources-xhdpi_design/
COMMAND cp -rf ${OMIM_ROOT}/data/resources-xxhdpi_clear/ ${OMIM_ROOT}/data/resources-xxhdpi_design/
COMMAND cp -rf ${OMIM_ROOT}/data/resources-6plus_clear/ ${OMIM_ROOT}/data/resources-6plus_design/
+ COMMAND cp -rf ${OMIM_ROOT}/data/resources-xxxhdpi_clear/ ${OMIM_ROOT}/data/resources-xxxhdpi_design/
COMMAND cp -f ${OMIM_ROOT}/data/drules_proto_clear.bin ${OMIM_ROOT}/data/drules_proto_design.bin
COMMAND cp -f ${OMIM_ROOT}/data/colors.txt ${OMIM_ROOT}/data/colors_design.txt
COMMAND cp -f ${OMIM_ROOT}/data/patterns.txt ${OMIM_ROOT}/data/patterns_design.txt
@@ -239,6 +240,7 @@ if (BUILD_DESIGNER)
resources-hdpi_design
resources-xhdpi_design
resources-xxhdpi_design
+ resources-xxxhdpi_design
resources-6plus_design
)
diff --git a/qt/build_style/build_skins.cpp b/qt/build_style/build_skins.cpp
index 82506a862f..b76ee09321 100644
--- a/qt/build_style/build_skins.cpp
+++ b/qt/build_style/build_skins.cpp
@@ -22,6 +22,7 @@ enum SkinType
SkinXHDPI,
SkinXXHDPI,
Skin6Plus,
+ SkinXXXHDPI,
// SkinCount MUST BE last
SkinCount
@@ -35,6 +36,7 @@ SkinInfo const g_skinInfo[SkinCount] =
std::make_tuple("xhdpi", 36, false),
std::make_tuple("xxhdpi", 54, false),
std::make_tuple("6plus", 54, false),
+ std::make_tuple("xxxhdpi", 64, false),
};
std::array<SkinType, SkinCount> const g_skinTypes =
@@ -43,7 +45,8 @@ std::array<SkinType, SkinCount> const g_skinTypes =
SkinHDPI,
SkinXHDPI,
SkinXXHDPI,
- Skin6Plus
+ Skin6Plus,
+ SkinXXXHDPI,
}};
inline const char * SkinSuffix(SkinType s) { return std::get<0>(g_skinInfo[s]); }
diff --git a/search/intermediate_result.cpp b/search/intermediate_result.cpp
index 411add4374..2a8dcbca6e 100644
--- a/search/intermediate_result.cpp
+++ b/search/intermediate_result.cpp
@@ -217,6 +217,7 @@ void ProcessMetadata(FeatureType const & ft, Result::Metadata & meta)
for (auto i = 0; i < pricing; i++)
pricingStr.append(kPricingSymbol);
+ meta.m_hotelPricing = pricing;
meta.m_hotelApproximatePricing = pricingStr;
}
diff --git a/search/result.hpp b/search/result.hpp
index 1a2b0dee35..877eba15c8 100644
--- a/search/result.hpp
+++ b/search/result.hpp
@@ -44,6 +44,7 @@ public:
std::string m_cuisine;
// Following fields are used for hotels only.
+ int m_hotelPricing = 0;
std::string m_hotelApproximatePricing;
float m_hotelRating = kInvalidRatingValue;
int m_stars = 0;
diff --git a/skin_generator/generator.cpp b/skin_generator/generator.cpp
index 2efc707a6d..f62441ed87 100644
--- a/skin_generator/generator.cpp
+++ b/skin_generator/generator.cpp
@@ -3,11 +3,11 @@
#include "base/logging.hpp"
#include "base/math.hpp"
-#include "std/algorithm.hpp"
-#include "std/iterator.hpp"
-#include "std/fstream.hpp"
-#include "std/iostream.hpp"
-#include "std/bind.hpp"
+#include <algorithm>
+#include <iterator>
+#include <fstream>
+#include <functional>
+#include <iostream>
#include <QtXml/QDomElement>
#include <QtXml/QDomDocument>
@@ -27,276 +27,259 @@ namespace gil = boost::gil;
namespace tools
{
- SkinGenerator::SkinGenerator(bool needColorCorrection)
- : m_needColorCorrection(needColorCorrection)
- {}
-
- struct GreaterHeight
- {
- bool operator() (SkinGenerator::SymbolInfo const & left,
- SkinGenerator::SymbolInfo const & right) const
- {
- return (left.m_size.height() > right.m_size.height());
- }
- };
-
- struct MaxDimensions
+namespace
+{
+struct GreaterHeight
+{
+ bool operator() (SkinGenerator::SymbolInfo const & left,
+ SkinGenerator::SymbolInfo const & right) const
{
- uint32_t & m_width;
- uint32_t & m_height;
+ return (left.m_size.height() > right.m_size.height());
+ }
+};
- MaxDimensions(uint32_t & width, uint32_t & height) : m_width(width), m_height(height)
- {
- m_width = 0;
- m_height = 0;
- }
+struct MaxDimensions
+{
+ uint32_t & m_width;
+ uint32_t & m_height;
- void operator()(SkinGenerator::SymbolInfo const & info)
- {
- m_width = max(max(m_width, m_height), static_cast<uint32_t>(info.m_size.width()));
- m_height = max(max(m_width, m_height), static_cast<uint32_t>(info.m_size.height()));
- }
- };
+ MaxDimensions(uint32_t & width, uint32_t & height)
+ : m_width(width), m_height(height)
+ {
+ m_width = 0;
+ m_height = 0;
+ }
- int NextPowerOf2(int n)
+ void operator()(SkinGenerator::SymbolInfo const & info)
{
- n = n - 1;
- n |= (n >> 1);
- n |= (n >> 2);
- n |= (n >> 4);
- n |= (n >> 8);
- n |= (n >> 16);
-
- return n + 1;
+ m_width = std::max(std::max(m_width, m_height), static_cast<uint32_t>(info.m_size.width()));
+ m_height = std::max(std::max(m_width, m_height), static_cast<uint32_t>(info.m_size.height()));
}
+};
+
+uint32_t NextPowerOf2(uint32_t n)
+{
+ n = n - 1;
+ n |= (n >> 1);
+ n |= (n >> 2);
+ n |= (n >> 4);
+ n |= (n >> 8);
+ n |= (n >> 16);
+
+ return n + 1;
+}
- void DoPatchSize(QString const & name, string const & skinName, QSize & size)
+void correctColors(gil::bgra8_image_t & image)
+{
+ gil::bgra8_view_t view = gil::view(image);
+ for (gil::bgra8_view_t::y_coord_t y = 0; y < view.height(); ++y)
{
- if (name.startsWith("placemark-") || name.startsWith("current-position") || name.startsWith("api_pin"))
+ for (gil::bgra8_view_t::x_coord_t x = 0; x < view.width(); ++x)
{
- if (skinName.rfind("-mdpi") != string::npos)
- size = QSize(24, 24);
- else if (skinName.rfind("-hdpi") != string::npos)
- size = QSize(36, 36);
- else if (skinName.rfind("-xhdpi") != string::npos)
- size = QSize(48, 48);
- else if (skinName.rfind("-xxhdpi") != string::npos)
- size = QSize(72, 72);
+ gil::bgra8_pixel_t pixel = view(x, y);
+ auto color = static_cast<unsigned char>(
+ my::clamp(0.07 * pixel[0] + 0.5 * pixel[1] + 0.22 * pixel[2], 0.0, 255.0));
+
+ view(x, y)[0] = color;
+ view(x, y)[1] = color;
+ view(x, y)[2] = color;
}
}
+}
+}
+
+SkinGenerator::SkinGenerator(bool needColorCorrection)
+ : m_needColorCorrection(needColorCorrection)
+{}
- void SkinGenerator::processSymbols(string const & svgDataDir,
- string const & skinName,
- vector<QSize> const & symbolSizes,
- vector<string> const & suffixes)
+void SkinGenerator::ProcessSymbols(std::string const & svgDataDir,
+ std::string const & skinName,
+ std::vector<QSize> const & symbolSizes,
+ std::vector<std::string> const & suffixes)
+{
+ for (size_t j = 0; j < symbolSizes.size(); ++j)
{
- for (size_t j = 0; j < symbolSizes.size(); ++j)
- {
- QDir dir(QString(svgDataDir.c_str()));
- QStringList fileNames = dir.entryList(QDir::Files);
+ QDir dir(QString(svgDataDir.c_str()));
+ QStringList fileNames = dir.entryList(QDir::Files);
- QDir pngDir = dir.absolutePath() + "/" + "png";
- fileNames += pngDir.entryList(QDir::Files);
+ QDir pngDir = dir.absolutePath() + "/png";
+ fileNames += pngDir.entryList(QDir::Files);
- /// separate page for symbols
- m_pages.push_back(SkinPageInfo());
- SkinPageInfo & page = m_pages.back();
+ // Separate page for symbols.
+ m_pages.emplace_back(SkinPageInfo());
+ SkinPageInfo & page = m_pages.back();
- page.m_dir = skinName.substr(0, skinName.find_last_of("/") + 1);
- page.m_suffix = suffixes[j];
- page.m_fileName = page.m_dir + "symbols" + page.m_suffix;
+ page.m_dir = skinName.substr(0, skinName.find_last_of("/") + 1);
+ page.m_suffix = suffixes[j];
+ page.m_fileName = page.m_dir + "symbols" + page.m_suffix;
- for (int i = 0; i < fileNames.size(); ++i)
+ for (int i = 0; i < fileNames.size(); ++i)
+ {
+ QString const & fileName = fileNames.at(i);
+ QString symbolID = fileName.left(fileName.lastIndexOf("."));
+ if (fileName.endsWith(".svg"))
{
- QString const & fileName = fileNames.at(i);
- QString symbolID = fileName.left(fileName.lastIndexOf("."));
- if (fileName.endsWith(".svg"))
+ QString fullFileName = QString(dir.absolutePath()) + "/" + fileName;
+ if (m_svgRenderer.load(fullFileName))
{
- QString fullFileName = QString(dir.absolutePath()) + "/" + fileName;
- if (m_svgRenderer.load(fullFileName))
- {
- QSize defaultSize = m_svgRenderer.defaultSize();
+ QSize defaultSize = m_svgRenderer.defaultSize();
- QSize symbolSize = symbolSizes[j];
- DoPatchSize(fileName, skinName, symbolSize);
+ QSize symbolSize = symbolSizes[j];
+ QSize size = defaultSize * (symbolSize.width() / 24.0);
- QSize size = defaultSize * (symbolSize.width() / 24.0);
-
- /// fitting symbol into symbolSize, saving aspect ratio
-
- if (size.width() > symbolSize.width())
- {
- size.setHeight((float)size.height() * symbolSize.width() / (float)size.width());
- size.setWidth(symbolSize.width());
- }
-
- if (size.height() > symbolSize.height())
- {
- size.setWidth((float)size.width() * symbolSize.height() / (float)size.height());
- size.setHeight(symbolSize.height());
- }
+ // Fitting symbol into symbolSize, saving aspect ratio.
+ if (size.width() > symbolSize.width())
+ {
+ auto const h = static_cast<float>(size.height()) * symbolSize.width() / size.width();
+ size.setHeight(static_cast<int>(h));
+ size.setWidth(symbolSize.width());
+ }
- page.m_symbols.push_back(SymbolInfo(size + QSize(4, 4), fullFileName, symbolID));
+ if (size.height() > symbolSize.height())
+ {
+ auto const w = static_cast<float>(size.width()) * symbolSize.height() / size.height();
+ size.setWidth(static_cast<int>(w));
+ size.setHeight(symbolSize.height());
}
- }
- else if (fileName.toLower().endsWith(".png"))
- {
- QString fullFileName = QString(pngDir.absolutePath()) + "/" + fileName;
- QPixmap pix(fullFileName);
- QSize s = pix.size();
- page.m_symbols.push_back(SymbolInfo(s + QSize(4, 4), fullFileName, symbolID));
+
+ page.m_symbols.emplace_back(size + QSize(4, 4), fullFileName, symbolID);
}
}
- }
- }
-
- namespace
- {
- void correctColors(gil::bgra8_image_t & image)
- {
- gil::bgra8_view_t view = gil::view(image);
- for (gil::bgra8_view_t::y_coord_t y = 0; y < view.height(); ++y)
+ else if (fileName.toLower().endsWith(".png"))
{
- for (gil::bgra8_view_t::x_coord_t x = 0; x < view.width(); ++x)
- {
- gil::bgra8_pixel_t pixel = view(x, y);
- unsigned char color =
- my::clamp(0.07 * pixel[0] + 0.5 * pixel[1] + 0.22 * pixel[2], 0.0, 255.0);
-
- view(x, y)[0] = color;
- view(x, y)[1] = color;
- view(x, y)[2] = color;
- }
+ QString fullFileName = QString(pngDir.absolutePath()) + "/" + fileName;
+ QPixmap pix(fullFileName);
+ QSize s = pix.size();
+ page.m_symbols.emplace_back(s + QSize(4, 4), fullFileName, symbolID);
}
}
}
+}
- bool SkinGenerator::renderPages(uint32_t maxSize)
+bool SkinGenerator::RenderPages(uint32_t maxSize)
+{
+ for (auto & page : m_pages)
{
- for (TSkinPages::iterator pageIt = m_pages.begin(); pageIt != m_pages.end(); ++pageIt)
- {
- SkinPageInfo & page = *pageIt;
- sort(page.m_symbols.begin(), page.m_symbols.end(), GreaterHeight());
+ std::sort(page.m_symbols.begin(), page.m_symbols.end(), GreaterHeight());
- MaxDimensions dim(page.m_width, page.m_height);
- for_each(page.m_symbols.begin(), page.m_symbols.end(), dim);
+ MaxDimensions dim(page.m_width, page.m_height);
+ for_each(page.m_symbols.begin(), page.m_symbols.end(), dim);
- page.m_width = NextPowerOf2(page.m_width);
- page.m_height = NextPowerOf2(page.m_height);
+ page.m_width = NextPowerOf2(page.m_width);
+ page.m_height = NextPowerOf2(page.m_height);
- /// packing until we find a suitable rect
- while (true)
- {
- page.m_packer = m2::Packer(page.m_width, page.m_height);
- page.m_packer.addOverflowFn(bind(&SkinGenerator::markOverflow, this), 10);
+ // Packing until we find a suitable rect.
+ while (true)
+ {
+ page.m_packer = m2::Packer(page.m_width, page.m_height);
+ page.m_packer.addOverflowFn(std::bind(&SkinGenerator::MarkOverflow, this), 10);
- m_overflowDetected = false;
-
- for (TSymbols::iterator it = page.m_symbols.begin(); it != page.m_symbols.end(); ++it)
- {
- it->m_handle = page.m_packer.pack(it->m_size.width(), it->m_size.height());
- if (m_overflowDetected)
- break;
- }
+ m_overflowDetected = false;
+ for (auto & s : page.m_symbols)
+ {
+ s.m_handle = page.m_packer.pack(static_cast<uint32_t>(s.m_size.width()),
+ static_cast<uint32_t>(s.m_size.height()));
if (m_overflowDetected)
- {
- /// enlarge packing area and try again
- if (page.m_width == page.m_height)
- page.m_width *= 2;
- else
- page.m_height *= 2;
+ break;
+ }
- if (page.m_width > maxSize)
- {
- page.m_width = maxSize;
- page.m_height *= 2;
- if (page.m_height > maxSize)
- return false;
- }
+ if (m_overflowDetected)
+ {
+ // Enlarge packing area and try again.
+ if (page.m_width == page.m_height)
+ page.m_width *= 2;
+ else
+ page.m_height *= 2;
- continue;
+ if (page.m_width > maxSize)
+ {
+ page.m_width = maxSize;
+ page.m_height *= 2;
+ if (page.m_height > maxSize)
+ return false;
}
-
- break;
+ continue;
}
+ break;
+ }
+ LOG(LINFO, ("Texture size =", page.m_width, "x", page.m_height));
- gil::bgra8_image_t gilImage(page.m_width, page.m_height);
- gil::fill_pixels(gil::view(gilImage), gil::rgba8_pixel_t(0, 0, 0, 0));
- QImage img((uchar*)&gil::view(gilImage)(0, 0), page.m_width, page.m_height, QImage::Format_ARGB32);
- QPainter painter(&img);
- painter.setClipping(true);
+ gil::bgra8_image_t gilImage(page.m_width, page.m_height);
+ gil::fill_pixels(gil::view(gilImage), gil::rgba8_pixel_t(0, 0, 0, 0));
+ QImage img((uchar*)&gil::view(gilImage)(0, 0), page.m_width, page.m_height, QImage::Format_ARGB32);
+ QPainter painter(&img);
+ painter.setClipping(true);
- for (TSymbols::const_iterator it = page.m_symbols.begin(); it != page.m_symbols.end(); ++it)
- {
- m2::RectU dstRect = page.m_packer.find(it->m_handle).second;
- QRect dstRectQt(dstRect.minX(), dstRect.minY(), dstRect.SizeX(), dstRect.SizeY());
+ for (auto const & s : page.m_symbols)
+ {
+ m2::RectU dstRect = page.m_packer.find(s.m_handle).second;
+ QRect dstRectQt(dstRect.minX(), dstRect.minY(), dstRect.SizeX(), dstRect.SizeY());
- painter.fillRect(dstRectQt, QColor(0, 0, 0, 0));
+ painter.fillRect(dstRectQt, QColor(0, 0, 0, 0));
- painter.setClipRect(dstRect.minX() + 2, dstRect.minY() + 2, dstRect.SizeX() - 4, dstRect.SizeY() - 4);
- QRect renderRect(dstRect.minX() + 2, dstRect.minY() + 2, dstRect.SizeX() - 4, dstRect.SizeY() - 4);
+ painter.setClipRect(dstRect.minX() + 2, dstRect.minY() + 2, dstRect.SizeX() - 4, dstRect.SizeY() - 4);
+ QRect renderRect(dstRect.minX() + 2, dstRect.minY() + 2, dstRect.SizeX() - 4, dstRect.SizeY() - 4);
- QString fullLowerCaseName = it->m_fullFileName.toLower();
- if (fullLowerCaseName.endsWith(".svg"))
- {
- m_svgRenderer.load(it->m_fullFileName);
- m_svgRenderer.render(&painter, renderRect);
- }
- else if (fullLowerCaseName.endsWith(".png"))
- {
- QPixmap pix(it->m_fullFileName);
- painter.drawPixmap(renderRect, pix);
- }
+ QString fullLowerCaseName = s.m_fullFileName.toLower();
+ if (fullLowerCaseName.endsWith(".svg"))
+ {
+ m_svgRenderer.load(s.m_fullFileName);
+ m_svgRenderer.render(&painter, renderRect);
+ }
+ else if (fullLowerCaseName.endsWith(".png"))
+ {
+ QPixmap pix(s.m_fullFileName);
+ painter.drawPixmap(renderRect, pix);
}
-
- string s = page.m_fileName + ".png";
- LOG(LINFO, ("saving skin image into: ", s));
- if (m_needColorCorrection)
- correctColors(gilImage);
- img.save(s.c_str());
}
- return true;
+ string s = page.m_fileName + ".png";
+ LOG(LINFO, ("saving skin image into: ", s));
+ if (m_needColorCorrection)
+ correctColors(gilImage);
+ img.save(s.c_str());
}
- void SkinGenerator::markOverflow()
- {
- m_overflowDetected = true;
- }
+ return true;
+}
+
+void SkinGenerator::MarkOverflow()
+{
+ m_overflowDetected = true;
+}
+
+bool SkinGenerator::WriteToFileNewStyle(std::string const &skinName)
+{
+ QDomDocument doc = QDomDocument("skin");
+ QDomElement rootElem = doc.createElement("root");
+ doc.appendChild(rootElem);
- void SkinGenerator::writeToFileNewStyle(const string & skinName)
+ for (auto const & p : m_pages)
{
- QDomDocument doc = QDomDocument("skin");
- QDomElement rootElem = doc.createElement("root");
- doc.appendChild(rootElem);
+ QDomElement fileNode = doc.createElement("file");
+ fileNode.setAttribute("width", p.m_width);
+ fileNode.setAttribute("height", p.m_height);
+ rootElem.appendChild(fileNode);
- for (vector<SkinPageInfo>::const_iterator pageIt = m_pages.begin(); pageIt != m_pages.end(); ++pageIt)
+ for (auto const & s : p.m_symbols)
{
- QDomElement fileNode = doc.createElement("file");
- fileNode.setAttribute("width", pageIt->m_width);
- fileNode.setAttribute("height", pageIt->m_height);
- rootElem.appendChild(fileNode);
-
- for (vector<SymbolInfo>::const_iterator symbolIt = pageIt->m_symbols.begin();
- symbolIt != pageIt->m_symbols.end(); ++symbolIt)
- {
- m2::RectU r = pageIt->m_packer.find(symbolIt->m_handle).second;
- QDomElement symbol = doc.createElement("symbol");
- symbol.setAttribute("minX", r.minX());
- symbol.setAttribute("minY", r.minY());
- symbol.setAttribute("maxX", r.maxX());
- symbol.setAttribute("maxY", r.maxY());
- symbol.setAttribute("name", symbolIt->m_symbolID.toLower());
- fileNode.appendChild(symbol);
- }
+ m2::RectU r = p.m_packer.find(s.m_handle).second;
+ QDomElement symbol = doc.createElement("symbol");
+ symbol.setAttribute("minX", r.minX());
+ symbol.setAttribute("minY", r.minY());
+ symbol.setAttribute("maxX", r.maxX());
+ symbol.setAttribute("maxY", r.maxY());
+ symbol.setAttribute("name", s.m_symbolID.toLower());
+ fileNode.appendChild(symbol);
}
- string extName = ".sdf";
- QFile file(QString((skinName + extName).c_str()));
- if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate))
- throw std::exception();
- QTextStream ts(&file);
- ts.setCodec("UTF-8");
- ts << doc.toString();
}
+ QFile file(QString(skinName.c_str()));
+ if (!file.open(QIODevice::ReadWrite | QIODevice::Truncate))
+ return false;
+ QTextStream ts(&file);
+ ts.setCodec("UTF-8");
+ ts << doc.toString();
+ return true;
+}
}
diff --git a/skin_generator/generator.hpp b/skin_generator/generator.hpp
index 15f5d1e397..399c1619f4 100644
--- a/skin_generator/generator.hpp
+++ b/skin_generator/generator.hpp
@@ -7,11 +7,6 @@
#include "base/base.hpp"
-#include "std/vector.hpp"
-#include "std/list.hpp"
-#include "std/string.hpp"
-#include "std/map.hpp"
-
#include <QtGui/QPainter>
#include <QtGui/QImage>
#include <QtCore/QFileInfo>
@@ -20,61 +15,60 @@
#include <QtXml/QXmlContentHandler>
#include <QtXml/QXmlDefaultHandler>
+#include <cstdint>
+#include <map>
+#include <string>
+#include <vector>
+
class QImage;
namespace tools
{
- class SkinGenerator
+class SkinGenerator
+{
+public:
+ struct SymbolInfo
{
- public:
- struct SymbolInfo
- {
- QSize m_size;
- QString m_fullFileName;
- QString m_symbolID;
-
- m2::Packer::handle_t m_handle;
-
- SymbolInfo() {}
- SymbolInfo(QSize size, QString const & fullFileName, QString const & symbolID)
- : m_size(size), m_fullFileName(fullFileName), m_symbolID(symbolID) {}
- };
-
- typedef vector<SymbolInfo> TSymbols;
+ QSize m_size;
+ QString m_fullFileName;
+ QString m_symbolID;
- struct SkinPageInfo
- {
- TSymbols m_symbols;
- uint32_t m_width;
- uint32_t m_height;
- string m_fileName;
- string m_dir;
- string m_suffix;
- m2::Packer m_packer;
- };
+ m2::Packer::handle_t m_handle;
- private:
+ SymbolInfo() {}
+ SymbolInfo(QSize size, QString const & fullFileName, QString const & symbolID)
+ : m_size(size), m_fullFileName(fullFileName), m_symbolID(symbolID)
+ {}
+ };
- bool m_needColorCorrection;
+ using TSymbols = std::vector<SymbolInfo>;
- QSvgRenderer m_svgRenderer;
-
- typedef vector<SkinPageInfo> TSkinPages;
- TSkinPages m_pages;
-
- bool m_overflowDetected;
- void markOverflow();
-
- public:
-
- SkinGenerator(bool needColorCorrection);
- //void processFont(string const & fileName, string const & skinName, vector<int8_t> const & fontSizes, int symbolScale);
- void processSymbols(string const & symbolsDir,
- string const & skinName,
- vector<QSize> const & symbolSizes,
- vector<string> const & suffix);
- bool renderPages(uint32_t maxSize);
- bool writeToFile(string const & skinName);
- void writeToFileNewStyle(string const & skinName);
- };
-} // namespace tools
+ struct SkinPageInfo
+ {
+ TSymbols m_symbols;
+ uint32_t m_width = 0;
+ uint32_t m_height = 0;
+ std::string m_fileName;
+ std::string m_dir;
+ std::string m_suffix;
+ m2::Packer m_packer;
+ };
+
+ explicit SkinGenerator(bool needColorCorrection);
+
+ void ProcessSymbols(std::string const & symbolsDir, std::string const & skinName,
+ std::vector<QSize> const & symbolSizes,
+ std::vector<std::string> const & suffix);
+ bool RenderPages(uint32_t maxSize);
+ bool WriteToFileNewStyle(std::string const & skinName);
+
+private:
+ bool m_needColorCorrection;
+ QSvgRenderer m_svgRenderer;
+ using TSkinPages = std::vector<SkinPageInfo>;
+ TSkinPages m_pages;
+ bool m_overflowDetected;
+
+ void MarkOverflow();
+};
+} // namespace tools
diff --git a/skin_generator/main.cpp b/skin_generator/main.cpp
index eacc9f7a1b..36746252b9 100644
--- a/skin_generator/main.cpp
+++ b/skin_generator/main.cpp
@@ -44,27 +44,32 @@ int main(int argc, char *argv[])
tools::SkinGenerator gen(FLAGS_colorCorrection);
std::vector<QSize> symbolSizes;
- symbolSizes.push_back(QSize(FLAGS_symbolWidth, FLAGS_symbolHeight));
+ symbolSizes.emplace_back(QSize(FLAGS_symbolWidth, FLAGS_symbolHeight));
std::vector<std::string> suffixes;
suffixes.push_back(FLAGS_skinSuffix);
- gen.processSymbols(FLAGS_symbolsDir, FLAGS_skinName, symbolSizes, suffixes);
+ gen.ProcessSymbols(FLAGS_symbolsDir, FLAGS_skinName, symbolSizes, suffixes);
- if (!gen.renderPages(FLAGS_maxSize))
+ if (!gen.RenderPages(FLAGS_maxSize))
{
- LOG(LINFO, ("Skin generation finished with error."));
+ LOG(LINFO, ("Error: The texture is overflown."));
return 1;
}
QString newSkin(FLAGS_skinName.c_str());
newSkin.replace("basic", "symbols");
- gen.writeToFileNewStyle(newSkin.toStdString() + FLAGS_skinSuffix);
+ auto const filename = newSkin.toStdString() + FLAGS_skinSuffix + ".sdf";
+ if (!gen.WriteToFileNewStyle(filename))
+ {
+ std::cerr << "Could not write file" << filename << std::endl;
+ return -1;
+ }
std::cout << "Done" << std::endl;
return 0;
}
- catch (std::exception& e)
+ catch (std::exception const & e)
{
std::cerr << "Exception " << e.what() << std::endl;
return -1;
diff --git a/tizen/scripts/update_assets_for_unit_tests.sh b/tizen/scripts/update_assets_for_unit_tests.sh
index 00ab534873..aa1d4faa11 100755
--- a/tizen/scripts/update_assets_for_unit_tests.sh
+++ b/tizen/scripts/update_assets_for_unit_tests.sh
@@ -8,7 +8,7 @@ DST=$1
#rm -rf $DST
#mkdir $DST
-files=(copyright.html resources-mdpi_clear resources-hdpi_clear resources-xhdpi_clear resources-xxhdpi_clear categories.txt classificator.txt
+files=(copyright.html resources-mdpi_clear resources-hdpi_clear resources-xhdpi_clear resources-xxhdpi_clear resources-xxxhdpi_clear categories.txt classificator.txt
types.txt fonts_blacklist.txt fonts_whitelist.txt languages.txt unicode_blocks.txt \
drules_proto_clear.bin packed_polygons.bin countries.txt World.mwm WorldCoasts.mwm 00_roboto_regular.ttf 01_dejavusans.ttf 02_droidsans-fallback.ttf
03_jomolhari-id-a3d.ttf 04_padauk.ttf 05_khmeros.ttf 06_code2000.ttf
diff --git a/tizen/scripts/update_assets_for_version.sh b/tizen/scripts/update_assets_for_version.sh
index 04ec398a3c..b94353ddd7 100755
--- a/tizen/scripts/update_assets_for_version.sh
+++ b/tizen/scripts/update_assets_for_version.sh
@@ -8,7 +8,7 @@ DST=$1
rm -rf $DST
mkdir $DST
-files=(copyright.html resources-mdpi_clear resources-hdpi_clear resources-xhdpi_clear resources-xxhdpi_clear categories.txt classificator.txt
+files=(copyright.html resources-mdpi_clear resources-hdpi_clear resources-xhdpi_clear resources-xxhdpi_clear resources-xxxhdpi_clear categories.txt classificator.txt
types.txt fonts_blacklist.txt fonts_whitelist.txt languages.txt unicode_blocks.txt \
drules_proto_clear.bin packed_polygons.bin countries.txt World.mwm WorldCoasts.mwm 00_roboto_regular.ttf 01_dejavusans.ttf 02_droidsans-fallback.ttf
03_jomolhari-id-a3d.ttf 04_padauk.ttf 05_khmeros.ttf 06_code2000.ttf)
diff --git a/tools/python/generate_styles_override.py b/tools/python/generate_styles_override.py
index 4620b35306..b213d7883c 100755
--- a/tools/python/generate_styles_override.py
+++ b/tools/python/generate_styles_override.py
@@ -16,7 +16,7 @@ def copy_style_file(style_path, drules_suffix, target_path):
return
shutil.copyfile(drules_proto_path, os.path.join(target_path, 'drules_proto' + drules_suffix + '.bin'))
- for density in ['6plus', 'hdpi', 'mdpi', 'xhdpi', 'xxhdpi']:
+ for density in ['6plus', 'hdpi', 'mdpi', 'xhdpi', 'xxhdpi', 'xxxhdpi']:
res_path = os.path.join(style_path, 'resources-' + density + "_design")
if os.path.exists(res_path):
shutil.copytree(res_path, os.path.join(target_path, 'resources-' + density + drules_suffix))
diff --git a/tools/unix/generate_symbols.sh b/tools/unix/generate_symbols.sh
index b3ddc3fe14..6a29392690 100755
--- a/tools/unix/generate_symbols.sh
+++ b/tools/unix/generate_symbols.sh
@@ -58,6 +58,7 @@ function BuildSkin() {
else
COLOR_CORR=
fi
+
"$SKIN_GENERATOR" --symbolWidth $symbolSize --symbolHeight $symbolSize --symbolsDir "$STYLE_PATH/$symbolsFolder" \
--skinName "$DATA_PATH/resources-$resourceName$suffix/basic" --skinSuffix="$symbolsSuffix" $COLOR_CORR
# Reset environment
@@ -65,7 +66,7 @@ function BuildSkin() {
}
# Cleanup
-cleanup=(resources-{{6plus,mdpi,hdpi,xhdpi,xxhdpi}{_dark,_clear}})
+cleanup=(resources-{{6plus,mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi}{_dark,_clear}})
for item in ${cleanup[*]}
do
rm -rf "$DATA_PATH/$item" || true
@@ -74,34 +75,38 @@ done
# Build styles
-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 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 night xxxhdpi 64 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 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 clear xxxhdpi 64 false _clear symbols
-BuildSkin clear night mdpi 22 false _dark symbols-ad -ad
-BuildSkin clear night hdpi 34 false _dark symbols-ad -ad
-BuildSkin clear night xhdpi 44 false _dark symbols-ad -ad
-BuildSkin clear night xxhdpi 68 false _dark symbols-ad -ad
-BuildSkin clear night 6plus 68 false _dark symbols-ad -ad
+BuildSkin clear night mdpi 22 false _dark symbols-ad -ad
+BuildSkin clear night hdpi 34 false _dark symbols-ad -ad
+BuildSkin clear night xhdpi 44 false _dark symbols-ad -ad
+BuildSkin clear night xxhdpi 68 false _dark symbols-ad -ad
+BuildSkin clear night 6plus 68 false _dark symbols-ad -ad
+BuildSkin clear night xxxhdpi 78 false _dark symbols-ad -ad
-BuildSkin clear clear mdpi 22 false _clear symbols-ad -ad
-BuildSkin clear clear hdpi 34 false _clear symbols-ad -ad
-BuildSkin clear clear xhdpi 44 false _clear symbols-ad -ad
-BuildSkin clear clear xxhdpi 68 false _clear symbols-ad -ad
-BuildSkin clear clear 6plus 68 false _clear symbols-ad -ad
+BuildSkin clear clear mdpi 22 false _clear symbols-ad -ad
+BuildSkin clear clear hdpi 34 false _clear symbols-ad -ad
+BuildSkin clear clear xhdpi 44 false _clear symbols-ad -ad
+BuildSkin clear clear xxhdpi 68 false _clear symbols-ad -ad
+BuildSkin clear clear 6plus 68 false _clear symbols-ad -ad
+BuildSkin clear clear xxxhdpi 78 false _clear symbols-ad -ad
rm -rf "$OMIM_PATH"/data/resources-{*}
rm -rf "$OMIM_PATH"/data/resources-*_design
-for i in mdpi hdpi xhdpi xxhdpi 6plus; do
+for i in mdpi hdpi xhdpi xxhdpi xxxhdpi 6plus; do
cp -r "$OMIM_PATH"/data/resources-${i}_clear/ "$OMIM_PATH"/data/resources-${i}_design/
done