feat: Add left and right padding and margins (#219)

* feat: Add left and right padding and margins

* fix: use side_values and change precedence

* fix: cast to uint16_t
This commit is contained in:
NBonaparte 2016-12-04 02:57:33 -08:00 committed by Michael Carlberg
parent c870a9efa7
commit d888f1b331
3 changed files with 49 additions and 28 deletions

View File

@ -2,6 +2,7 @@
#include "common.hpp"
#include "components/config.hpp"
#include "components/types.hpp"
#include "utils/mixins.hpp"
POLYBAR_NS
@ -34,15 +35,15 @@ namespace drawtypes {
string m_underline;
string m_overline;
int m_font = 0;
int m_padding = 0;
int m_margin = 0;
struct side_values m_padding = {0,0};
struct side_values m_margin = {0,0};
size_t m_maxlen = 0;
bool m_ellipsis = true;
explicit label(string text, int font) : m_font(font), m_text(text), m_tokenized(m_text) {}
explicit label(string text, string foreground = "", string background = "", string underline = "",
string overline = "", int font = 0, int padding = 0, int margin = 0, size_t maxlen = 0, bool ellipsis = true,
vector<token>&& tokens = {})
string overline = "", int font = 0, struct side_values padding = {0,0}, struct side_values margin = {0,0},
size_t maxlen = 0, bool ellipsis = true, vector<token>&& tokens = {})
: m_foreground(foreground)
, m_background(background)
, m_underline(underline)

View File

@ -196,9 +196,8 @@ void builder::node(const label_t& label, bool add_space) {
// if ((label->m_underline.empty() && m_tags[syntaxtag::u] > 0) || (m_tags[syntaxtag::u] > 0 && label->m_margin > 0))
// underline_close();
// TODO: Replace with margin-left
if (label->m_margin > 0) {
space(label->m_margin);
if (label->m_margin.left > 0) {
space(label->m_margin.left);
}
if (!label->m_overline.empty()) {
@ -215,16 +214,14 @@ void builder::node(const label_t& label, bool add_space) {
color(label->m_foreground);
}
// TODO: Replace with padding-left
if (label->m_padding > 0) {
space(label->m_padding);
if (label->m_padding.left > 0) {
space(label->m_padding.left);
}
node(text, label->m_font, add_space);
// TODO: Replace with padding-right
if (label->m_padding > 0) {
space(label->m_padding);
if (label->m_padding.right > 0) {
space(label->m_padding.right);
}
if (!label->m_background.empty()) {
@ -234,16 +231,15 @@ void builder::node(const label_t& label, bool add_space) {
color_close();
}
if (!label->m_underline.empty() || (label->m_margin > 0 && m_tags[syntaxtag::u] > 0)) {
if (!label->m_underline.empty() || (label->m_margin.right > 0 && m_tags[syntaxtag::u] > 0)) {
underline_close();
}
if (!label->m_overline.empty() || (label->m_margin > 0 && m_tags[syntaxtag::o] > 0)) {
if (!label->m_overline.empty() || (label->m_margin.right > 0 && m_tags[syntaxtag::o] > 0)) {
overline_close();
}
// TODO: Replace with margin-right
if (label->m_margin > 0) {
space(label->m_margin);
if (label->m_margin.right > 0) {
space(label->m_margin.right);
}
}

View File

@ -64,11 +64,17 @@ namespace drawtypes {
if (label->m_font != 0) {
m_font = label->m_font;
}
if (label->m_padding != 0) {
m_padding = label->m_padding;
if (label->m_padding.left != 0) {
m_padding.left = label->m_padding.left;
}
if (label->m_margin != 0) {
m_margin = label->m_margin;
if (label->m_padding.right != 0) {
m_padding.right = label->m_padding.right;
}
if (label->m_margin.left != 0) {
m_margin.left = label->m_margin.left;
}
if (label->m_margin.right != 0) {
m_margin.right = label->m_margin.right;
}
if (label->m_maxlen != 0) {
m_maxlen = label->m_maxlen;
@ -92,11 +98,17 @@ namespace drawtypes {
if (m_font == 0 && label->m_font != 0) {
m_font = label->m_font;
}
if (m_padding == 0 && label->m_padding != 0) {
m_padding = label->m_padding;
if (m_padding.left == 0 && label->m_padding.left != 0) {
m_padding.left = label->m_padding.left;
}
if (m_margin == 0 && label->m_margin != 0) {
m_margin = label->m_margin;
if (m_padding.right == 0 && label->m_padding.right != 0) {
m_padding.right = label->m_padding.right;
}
if (m_margin.left == 0 && label->m_margin.left != 0) {
m_margin.left = label->m_margin.left;
}
if (m_margin.right == 0 && label->m_margin.right != 0) {
m_margin.right = label->m_margin.right;
}
if (m_maxlen == 0 && label->m_maxlen != 0) {
m_maxlen = label->m_maxlen;
@ -115,12 +127,24 @@ namespace drawtypes {
string text;
struct side_values padding, margin;
if (required) {
text = conf.get<string>(section, name);
} else {
text = conf.get<string>(section, name, move(def));
}
const auto get_left_right = [&](string key) {
auto value = conf.get<int>(section, key, 0);
auto left = conf.get<int>(section, key + "-left", value);
auto right = conf.get<int>(section, key + "-right", value);
return side_values {static_cast<uint16_t>(left), static_cast<uint16_t>(right)};
};
padding = get_left_right(name + "-padding");
margin = get_left_right(name + "-margin");
string line{text};
while ((start = line.find('%')) != string::npos && (end = line.find('%', start + 1)) != string::npos) {
@ -180,8 +204,8 @@ namespace drawtypes {
conf.get<string>(section, name + "-underline", ""),
conf.get<string>(section, name + "-overline", ""),
conf.get<int>(section, name + "-font", 0),
conf.get<int>(section, name + "-padding", 0),
conf.get<int>(section, name + "-margin", 0),
padding,
margin,
conf.get<size_t>(section, name + "-maxlen", 0),
conf.get<bool>(section, name + "-ellipsis", true),
move(tokens));