polybar/src/drawtypes/ramp.cpp

54 lines
1.3 KiB
C++
Raw Normal View History

2016-11-02 19:22:45 +00:00
#include "drawtypes/ramp.hpp"
2016-12-09 08:02:47 +00:00
#include "utils/factory.hpp"
2016-11-02 19:22:45 +00:00
#include "utils/math.hpp"
2016-11-19 05:22:44 +00:00
POLYBAR_NS
2016-11-02 19:22:45 +00:00
namespace drawtypes {
void ramp::add(icon_t&& icon) {
m_icons.emplace_back(forward<decltype(icon)>(icon));
}
icon_t ramp::get(size_t index) {
return m_icons[index];
}
icon_t ramp::get_by_percentage(float percentage) {
size_t index = percentage * (m_icons.size() - 1) / 100.0f + 0.5f;
return m_icons[math_util::cap<size_t>(index, 0, m_icons.size() - 1)];
}
ramp::operator bool() {
return !m_icons.empty();
}
/**
* Create a ramp by loading values
* from the configuration
*/
2016-11-25 12:55:15 +00:00
ramp_t load_ramp(const config& conf, const string& section, string name, bool required) {
name = string_util::ltrim(string_util::rtrim(move(name), '>'), '<');
2016-11-02 19:22:45 +00:00
auto ramp_defaults = load_optional_icon(conf, section, name);
vector<icon_t> vec;
vector<string> icons;
2016-11-25 12:55:15 +00:00
if (required) {
2016-11-02 19:22:45 +00:00
icons = conf.get_list<string>(section, name);
2016-11-25 12:55:15 +00:00
} else {
2016-11-02 19:22:45 +00:00
icons = conf.get_list<string>(section, name, {});
2016-11-25 12:55:15 +00:00
}
2016-11-02 19:22:45 +00:00
for (size_t i = 0; i < icons.size(); i++) {
auto icon = load_optional_icon(conf, section, name + "-" + to_string(i), icons[i]);
icon->copy_undefined(ramp_defaults);
vec.emplace_back(move(icon));
}
2016-12-09 08:02:47 +00:00
return factory_util::shared<drawtypes::ramp>(move(vec));
2016-11-02 19:22:45 +00:00
}
}
2016-11-19 05:22:44 +00:00
POLYBAR_NS_END