fix(parser): Proper handling of %{R} #585
This commit is contained in:
parent
5af5292808
commit
0bd8f1f69a
@ -30,9 +30,10 @@ struct alignment_block {
|
|||||||
class renderer
|
class renderer
|
||||||
: public signal_receiver<SIGN_PRIORITY_RENDERER, signals::ui::request_snapshot, signals::parser::change_background,
|
: public signal_receiver<SIGN_PRIORITY_RENDERER, signals::ui::request_snapshot, signals::parser::change_background,
|
||||||
signals::parser::change_foreground, signals::parser::change_underline, signals::parser::change_overline,
|
signals::parser::change_foreground, signals::parser::change_underline, signals::parser::change_overline,
|
||||||
signals::parser::change_font, signals::parser::change_alignment, signals::parser::offset_pixel,
|
signals::parser::change_font, signals::parser::change_alignment, signals::parser::reverse_colors,
|
||||||
signals::parser::attribute_set, signals::parser::attribute_unset, signals::parser::attribute_toggle,
|
signals::parser::offset_pixel, signals::parser::attribute_set, signals::parser::attribute_unset,
|
||||||
signals::parser::action_begin, signals::parser::action_end, signals::parser::text> {
|
signals::parser::attribute_toggle, signals::parser::action_begin, signals::parser::action_end,
|
||||||
|
signals::parser::text> {
|
||||||
public:
|
public:
|
||||||
using make_type = unique_ptr<renderer>;
|
using make_type = unique_ptr<renderer>;
|
||||||
static make_type make(const bar_settings& bar);
|
static make_type make(const bar_settings& bar);
|
||||||
@ -73,6 +74,7 @@ class renderer
|
|||||||
bool on(const signals::parser::change_overline& evt);
|
bool on(const signals::parser::change_overline& evt);
|
||||||
bool on(const signals::parser::change_font& evt);
|
bool on(const signals::parser::change_font& evt);
|
||||||
bool on(const signals::parser::change_alignment& evt);
|
bool on(const signals::parser::change_alignment& evt);
|
||||||
|
bool on(const signals::parser::reverse_colors&);
|
||||||
bool on(const signals::parser::offset_pixel& evt);
|
bool on(const signals::parser::offset_pixel& evt);
|
||||||
bool on(const signals::parser::attribute_set& evt);
|
bool on(const signals::parser::attribute_set& evt);
|
||||||
bool on(const signals::parser::attribute_unset& evt);
|
bool on(const signals::parser::attribute_unset& evt);
|
||||||
|
@ -144,6 +144,9 @@ namespace signals {
|
|||||||
struct change_alignment : public detail::value_signal<change_alignment, alignment> {
|
struct change_alignment : public detail::value_signal<change_alignment, alignment> {
|
||||||
using base_type::base_type;
|
using base_type::base_type;
|
||||||
};
|
};
|
||||||
|
struct reverse_colors : public detail::base_signal<reverse_colors> {
|
||||||
|
using base_type::base_type;
|
||||||
|
};
|
||||||
struct offset_pixel : public detail::value_signal<offset_pixel, int> {
|
struct offset_pixel : public detail::value_signal<offset_pixel, int> {
|
||||||
using base_type::base_type;
|
using base_type::base_type;
|
||||||
};
|
};
|
||||||
|
@ -48,6 +48,7 @@ namespace signals {
|
|||||||
struct change_overline;
|
struct change_overline;
|
||||||
struct change_font;
|
struct change_font;
|
||||||
struct change_alignment;
|
struct change_alignment;
|
||||||
|
struct reverse_colors;
|
||||||
struct offset_pixel;
|
struct offset_pixel;
|
||||||
struct attribute_set;
|
struct attribute_set;
|
||||||
struct attribute_unset;
|
struct attribute_unset;
|
||||||
|
@ -83,7 +83,7 @@ void parser::codeblock(string&& data, const bar_settings& bar) {
|
|||||||
|
|
||||||
switch (tag) {
|
switch (tag) {
|
||||||
case 'B': {
|
case 'B': {
|
||||||
m_sig.emit(change_background{parse_color(m_bg, value, 0UL)});
|
m_sig.emit(change_background{parse_color(m_bg, value, bar.background)});
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,8 +110,7 @@ void parser::codeblock(string&& data, const bar_settings& bar) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'R':
|
case 'R':
|
||||||
m_sig.emit(change_background{parse_color_string(value, bar.foreground)});
|
m_sig.emit(reverse_colors{});
|
||||||
m_sig.emit(change_foreground{parse_color_string(value, bar.background)});
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'O':
|
case 'O':
|
||||||
|
@ -205,7 +205,7 @@ void renderer::begin(xcb_rectangle_t rect) {
|
|||||||
m_align = alignment::NONE;
|
m_align = alignment::NONE;
|
||||||
|
|
||||||
// Reset colors
|
// Reset colors
|
||||||
m_bg = 0;
|
m_bg = m_bar.background;
|
||||||
m_fg = m_bar.foreground;
|
m_fg = m_bar.foreground;
|
||||||
m_ul = m_bar.underline.color;
|
m_ul = m_bar.underline.color;
|
||||||
m_ol = m_bar.overline.color;
|
m_ol = m_bar.overline.color;
|
||||||
@ -700,6 +700,14 @@ bool renderer::on(const signals::parser::change_alignment& evt) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool renderer::on(const signals::parser::reverse_colors&) {
|
||||||
|
m_log.trace_x("renderer: reverse_colors");
|
||||||
|
m_fg = m_fg + m_bg;
|
||||||
|
m_bg = m_fg - m_bg;
|
||||||
|
m_fg = m_fg - m_bg;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool renderer::on(const signals::parser::offset_pixel& evt) {
|
bool renderer::on(const signals::parser::offset_pixel& evt) {
|
||||||
m_log.trace_x("renderer: offset_pixel(%f)", evt.cast());
|
m_log.trace_x("renderer: offset_pixel(%f)", evt.cast());
|
||||||
m_blocks[m_align].x += evt.cast();
|
m_blocks[m_align].x += evt.cast();
|
||||||
|
Loading…
Reference in New Issue
Block a user