builder: Get bar options lazily
This commit is contained in:
parent
3273ed689f
commit
e8cb754c27
@ -3,7 +3,6 @@
|
||||
#include <string>
|
||||
#include <memory>
|
||||
|
||||
#include "bar.hpp"
|
||||
#include "drawtypes/animation.hpp"
|
||||
#include "drawtypes/bar.hpp"
|
||||
#include "drawtypes/icon.hpp"
|
||||
@ -13,6 +12,7 @@
|
||||
#define DEFAULT_SPACING -1
|
||||
|
||||
class Lemonbuddy;
|
||||
struct Options;
|
||||
|
||||
class Builder
|
||||
{
|
||||
@ -43,11 +43,11 @@ class Builder
|
||||
void align_right();
|
||||
|
||||
std::shared_ptr<Options> opts;
|
||||
std::shared_ptr<Options>& get_opts();
|
||||
|
||||
public:
|
||||
explicit Builder(bool lazy_closing = true)
|
||||
: lazy_closing(lazy_closing)
|
||||
, opts(bar_opts()) {}
|
||||
: lazy_closing(lazy_closing) {}
|
||||
|
||||
void set_lazy_closing(bool mode) { this->lazy_closing = mode; }
|
||||
|
||||
|
@ -36,7 +36,7 @@ std::shared_ptr<Bar> get_bar()
|
||||
}
|
||||
|
||||
std::shared_ptr<Options> bar_opts() {
|
||||
return bar->opts;
|
||||
return get_bar()->opts;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -4,14 +4,23 @@
|
||||
#include <regex>
|
||||
#include <boost/algorithm/string/replace.hpp>
|
||||
|
||||
#include "bar.hpp"
|
||||
#include "config.hpp"
|
||||
#include "exception.hpp"
|
||||
#include "services/builder.hpp"
|
||||
#include "utils/string.hpp"
|
||||
#include "utils/math.hpp"
|
||||
|
||||
|
||||
// Private
|
||||
|
||||
std::shared_ptr<Options>& Builder::get_opts()
|
||||
{
|
||||
if (!this->opts)
|
||||
this->opts = bar_opts();
|
||||
return this->opts;
|
||||
}
|
||||
|
||||
void Builder::tag_open(char tag, std::string value) {
|
||||
this->append("%{"+ std::string({tag}) + value +"}");
|
||||
}
|
||||
@ -93,12 +102,12 @@ void Builder::append_module_output(Alignment alignment, std::string module_outpu
|
||||
|
||||
int margin;
|
||||
|
||||
if (margin_left && (margin= this->opts->module_margin_left) > 0)
|
||||
if (margin_left && (margin= this->get_opts()->module_margin_left) > 0)
|
||||
this->output += std::string(margin, ' ');
|
||||
|
||||
this->append(module_output);
|
||||
|
||||
if (margin_right && (margin = this->opts->module_margin_right) > 0)
|
||||
if (margin_right && (margin = this->get_opts()->module_margin_right) > 0)
|
||||
this->output += std::string(margin, ' ');
|
||||
}
|
||||
|
||||
@ -271,7 +280,7 @@ void Builder::offset(int pixels)
|
||||
|
||||
void Builder::space(int width)
|
||||
{
|
||||
if (width == DEFAULT_SPACING) width = this->opts->spacing;
|
||||
if (width == DEFAULT_SPACING) width = this->get_opts()->spacing;
|
||||
if (width <= 0) return;
|
||||
std::string str(width, ' ');
|
||||
this->append(str);
|
||||
@ -279,7 +288,7 @@ void Builder::space(int width)
|
||||
|
||||
void Builder::remove_trailing_space(int width)
|
||||
{
|
||||
if (width == DEFAULT_SPACING) width = this->opts->spacing;
|
||||
if (width == DEFAULT_SPACING) width = this->get_opts()->spacing;
|
||||
if (width <= 0) return;
|
||||
std::string::size_type spacing = width;
|
||||
std::string str(spacing, ' ');
|
||||
@ -323,7 +332,7 @@ void Builder::background(std::string color_)
|
||||
|
||||
if (color.length() == 2 || (color.find("#") == 0 && color.length() == 3)) {
|
||||
color = "#"+ color.substr(color.length()-2);
|
||||
auto bg = this->opts->background;
|
||||
auto bg = this->get_opts()->background;
|
||||
color += bg.substr(bg.length()-(bg.length() < 6 ? 3 : 6));
|
||||
} else if (color.length() >= 7 && color == "#"+ std::string(color.length()-1, color[1])) {
|
||||
color = color.substr(0, 4);
|
||||
@ -352,7 +361,7 @@ void Builder::color(std::string color_)
|
||||
auto color(color_);
|
||||
if (color.length() == 2 || (color.find("#") == 0 && color.length() == 3)) {
|
||||
color = "#"+ color.substr(color.length()-2);
|
||||
auto bg = this->opts->foreground;
|
||||
auto bg = this->get_opts()->foreground;
|
||||
color += bg.substr(bg.length()-(bg.length() < 6 ? 3 : 6));
|
||||
} else if (color.length() >= 7 && color == "#"+ std::string(color.length()-1, color[1])) {
|
||||
color = color.substr(0, 4);
|
||||
@ -370,7 +379,7 @@ void Builder::color(std::string color_)
|
||||
void Builder::color_alpha(std::string alpha_)
|
||||
{
|
||||
auto alpha(alpha_);
|
||||
std::string val = this->opts->foreground;
|
||||
std::string val = this->get_opts()->foreground;
|
||||
if (alpha.find("#") == 0) {
|
||||
if (alpha.size() == 3)
|
||||
this->color(alpha.substr(0, 3) + val.substr(val.size() - 6));
|
||||
|
Loading…
Reference in New Issue
Block a user