summaryrefslogtreecommitdiff
path: root/assetFactory/assetFactory.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2023-02-27 19:38:14 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2023-02-27 19:38:14 +0000
commitb7b9eb7bb9deb6704f276fb3b8fd67ba370caf3e (patch)
treecfbb3bac94271c04a44610f5f40751e74ea4d227 /assetFactory/assetFactory.cpp
parentoperator*= can work on any iterable collection (diff)
downloadilt-b7b9eb7bb9deb6704f276fb3b8fd67ba370caf3e.tar.bz2
ilt-b7b9eb7bb9deb6704f276fb3b8fd67ba370caf3e.tar.xz
ilt-b7b9eb7bb9deb6704f276fb3b8fd67ba370caf3e.zip
Load the X11 RGB colour definitions into a map
Diffstat (limited to 'assetFactory/assetFactory.cpp')
-rw-r--r--assetFactory/assetFactory.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/assetFactory/assetFactory.cpp b/assetFactory/assetFactory.cpp
index 564ea28..016f29e 100644
--- a/assetFactory/assetFactory.cpp
+++ b/assetFactory/assetFactory.cpp
@@ -1,4 +1,5 @@
#include "assetFactory.h"
+#include "collections.hpp"
#include "cuboid.h"
#include "cylinder.h"
#include "modelFactoryMesh_fwd.h"
@@ -12,7 +13,8 @@ AssetFactory::AssetFactory() :
{"plane", std::make_shared<Plane>()},
{"cuboid", std::make_shared<Cuboid>()},
{"cylinder", std::make_shared<Cylinder>()},
- }
+ },
+ colours {parseX11RGB("/usr/share/X11/rgb.txt")}
{
}
@@ -23,6 +25,30 @@ AssetFactory::loadXML(const std::filesystem::path & filename)
return Persistence::SAXParsePersistence {}.loadState<std::shared_ptr<AssetFactory>>(file);
}
+AssetFactory::Colours
+AssetFactory::parseX11RGB(const char * path)
+{
+ filesystem::FileStar rgb {path, "r"};
+ Colours out;
+ glm::u8vec3 colour;
+ char inname[BUFSIZ];
+ while (fscanf(rgb, "%hhu %hhu %hhu %[^\n\r]s", &colour.r, &colour.g, &colour.b, inname) == 4) {
+ std::string name {inname};
+ normalizeColourName(name);
+ out.emplace(std::move(name), colour);
+ }
+ return out;
+}
+
+void
+AssetFactory::normalizeColourName(std::string & name)
+{
+ std::erase_if(name, ::isblank);
+ name *= [l = std::locale {}](auto & ch) {
+ ch = std::tolower(ch, l);
+ };
+}
+
bool
AssetFactory::persist(Persistence::PersistenceStore & store)
{