BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

skins.hpp (1594B)


      1 #pragma once
      2 
      3 #include "rack.hpp"
      4 #include <mutex>
      5 #include <string>
      6 #include <unordered_map>
      7 #include <unordered_set>
      8 #include <vector>
      9 
     10 struct DefaultSkinChangeListener {
     11 	virtual void defaultSkinChanged(const std::string& skin) = 0;
     12 };
     13 
     14 struct Skin {
     15 	std::string key;
     16 	std::string display;
     17 
     18 	Skin(const char* key, const char* display) :  key(key), display(display) {}
     19 };
     20 
     21 class Skins {
     22 private:
     23 	typedef std::unordered_map<std::string, std::string> css_values_map;
     24 	typedef std::unordered_map<std::string, css_values_map> skin_css_values_map;
     25 	typedef std::unordered_set<DefaultSkinChangeListener*> default_skin_listeners_set;
     26 	std::vector<Skin> _available;
     27 	std::string _default;
     28 	skin_css_values_map _skinCssValues;
     29 	default_skin_listeners_set _defaultSkinListeners;
     30 	std::mutex _defaultSkinListenersLock;
     31 	bool _loaded = false;
     32 	std::mutex _instanceLock;
     33 
     34 public:
     35 	Skins() {}
     36 	Skins(const Skins&) = delete;
     37 	void operator=(const Skins&) = delete;
     38 
     39 	static Skins& skins();
     40 	inline const std::vector<Skin>& available() const { return _available; }
     41 	inline const std::string& defaultKey() const { return _default; }
     42 	bool validKey(const std::string& key) const;
     43 	const char* skinCssValue(const std::string& skinKey, const std::string& valueKey) const;
     44 	static NVGcolor cssColorToNVGColor(const char* color, const NVGcolor& ifError);
     45 
     46 	void setDefaultSkin(std::string skinKey);
     47 	void registerDefaultSkinChangeListener(DefaultSkinChangeListener* listener);
     48 	void deregisterDefaultSkinChangeListener(DefaultSkinChangeListener* listener);
     49 
     50 private:
     51 	void loadSkins();
     52 	void loadCssValues();
     53 };