Files
comaps/indexer/map_style_reader.cpp
Konstantin Pastbin e3e4a1985a Organic Maps sources as of 02.04.2025 (fad26bbf22ac3da75e01e62aa01e5c8e11861005)
To expand with full Organic Maps and Maps.ME commits history run:
  git remote add om-historic [om-historic.git repo url]
  git fetch --tags om-historic
  git replace squashed-history historic-commits
2025-05-08 21:10:51 +07:00

151 lines
4.0 KiB
C++

#include "map_style_reader.hpp"
#include "platform/platform.hpp"
#include "base/file_name_utils.hpp"
#include "base/logging.hpp"
namespace
{
std::string const kSuffixDark = "_dark";
std::string const kSuffixLight = "_light";
std::string const kSuffixDefaultDark = "_default_dark";
std::string const kSuffixDefaultLight = "_default_light";
std::string const kSuffixVehicleDark = "_vehicle_dark";
std::string const kSuffixVehicleLight = "_vehicle_light";
std::string const kSuffixOutdoorsLight = "_outdoors_light";
std::string const kSuffixOutdoorsDark = "_outdoors_dark";
std::string const kStylesOverrideDir = "styles";
#ifdef BUILD_DESIGNER
std::string const kSuffixDesignTool = "_design";
#endif // BUILD_DESIGNER
std::string GetStyleRulesSuffix(MapStyle mapStyle)
{
#ifdef BUILD_DESIGNER
return kSuffixDesignTool;
#else
switch (mapStyle)
{
case MapStyleDefaultDark:
return kSuffixDefaultDark;
case MapStyleDefaultLight:
return kSuffixDefaultLight;
case MapStyleVehicleDark:
return kSuffixVehicleDark;
case MapStyleVehicleLight:
return kSuffixVehicleLight;
case MapStyleOutdoorsLight:
return kSuffixOutdoorsLight;
case MapStyleOutdoorsDark:
return kSuffixOutdoorsDark;
case MapStyleMerged:
return std::string();
case MapStyleCount:
break;
}
LOG(LWARNING, ("Unknown map style", mapStyle));
return kSuffixDefaultLight;
#endif // BUILD_DESIGNER
}
std::string GetStyleResourcesSuffix(MapStyle mapStyle)
{
#ifdef BUILD_DESIGNER
return kSuffixDesignTool;
#else
// We use the same resources for all light/day and dark/night styles
// to avoid textures duplication and package size increasing.
switch (mapStyle)
{
case MapStyleDefaultDark:
case MapStyleVehicleDark:
case MapStyleOutdoorsDark:
return kSuffixDark;
case MapStyleDefaultLight:
case MapStyleVehicleLight:
case MapStyleOutdoorsLight:
return kSuffixLight;
case MapStyleMerged:
return std::string();
case MapStyleCount:
break;
}
LOG(LWARNING, ("Unknown map style", mapStyle));
return kSuffixLight;
#endif // BUILD_DESIGNER
}
} // namespace
StyleReader::StyleReader()
: m_mapStyle(kDefaultMapStyle)
{}
void StyleReader::SetCurrentStyle(MapStyle mapStyle)
{
m_mapStyle = mapStyle;
}
MapStyle StyleReader::GetCurrentStyle() const
{
return m_mapStyle;
}
bool StyleReader::IsCarNavigationStyle() const
{
return m_mapStyle == MapStyle::MapStyleVehicleLight ||
m_mapStyle == MapStyle::MapStyleVehicleDark;
}
ReaderPtr<Reader> StyleReader::GetDrawingRulesReader() const
{
std::string rulesFile =
std::string("drules_proto") + GetStyleRulesSuffix(GetCurrentStyle()) + ".bin";
auto overriddenRulesFile =
base::JoinPath(GetPlatform().WritableDir(), kStylesOverrideDir, rulesFile);
if (Platform::IsFileExistsByFullPath(overriddenRulesFile))
rulesFile = overriddenRulesFile;
#ifdef BUILD_DESIGNER
// For Designer tool we have to look first into the resource folder.
return GetPlatform().GetReader(rulesFile, "rwf");
#else
return GetPlatform().GetReader(rulesFile);
#endif
}
ReaderPtr<Reader> StyleReader::GetResourceReader(std::string const & file,
std::string_view density) const
{
std::string const resourceDir =
std::string("resources-").append(density) + GetStyleResourcesSuffix(GetCurrentStyle());
std::string resFile = base::JoinPath(resourceDir, file);
auto overriddenResFile = base::JoinPath(GetPlatform().WritableDir(), kStylesOverrideDir, resFile);
if (GetPlatform().IsFileExistsByFullPath(overriddenResFile))
resFile = overriddenResFile;
#ifdef BUILD_DESIGNER
// For Designer tool we have to look first into the resource folder.
return GetPlatform().GetReader(resFile, "rwf");
#else
return GetPlatform().GetReader(resFile);
#endif
}
ReaderPtr<Reader> StyleReader::GetDefaultResourceReader(std::string const & file) const
{
return GetPlatform().GetReader(base::JoinPath("resources-default", file));
}
StyleReader & GetStyleReader()
{
static StyleReader instance;
return instance;
}