renderer: Use interface to render offset
This commit is contained in:
parent
c676d7e6f5
commit
5d518e171e
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
#include "cairo/fwd.hpp"
|
#include "cairo/fwd.hpp"
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
#include "components/renderer_interface.hpp"
|
||||||
#include "components/types.hpp"
|
#include "components/types.hpp"
|
||||||
#include "events/signal_fwd.hpp"
|
#include "events/signal_fwd.hpp"
|
||||||
#include "events/signal_receiver.hpp"
|
#include "events/signal_receiver.hpp"
|
||||||
@ -32,12 +33,12 @@ struct alignment_block {
|
|||||||
};
|
};
|
||||||
|
|
||||||
class renderer
|
class renderer
|
||||||
: public signal_receiver<SIGN_PRIORITY_RENDERER, signals::ui::request_snapshot, signals::parser::change_background,
|
: public renderer_interface,
|
||||||
|
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::reverse_colors,
|
signals::parser::change_font, signals::parser::change_alignment, signals::parser::reverse_colors,
|
||||||
signals::parser::offset_pixel, signals::parser::attribute_set, signals::parser::attribute_unset,
|
signals::parser::attribute_set, signals::parser::attribute_unset, signals::parser::attribute_toggle,
|
||||||
signals::parser::attribute_toggle, signals::parser::action_begin, signals::parser::action_end,
|
signals::parser::action_begin, signals::parser::action_end, signals::parser::text, signals::parser::control> {
|
||||||
signals::parser::text, signals::parser::control> {
|
|
||||||
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);
|
||||||
@ -62,6 +63,8 @@ class renderer
|
|||||||
void fill_borders();
|
void fill_borders();
|
||||||
void draw_text(const string& contents);
|
void draw_text(const string& contents);
|
||||||
|
|
||||||
|
void render_offset(const tags::context& ctxt, int pixels) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
double block_x(alignment a) const;
|
double block_x(alignment a) const;
|
||||||
double block_y(alignment a) const;
|
double block_y(alignment a) const;
|
||||||
@ -79,7 +82,6 @@ class renderer
|
|||||||
bool on(const signals::parser::change_font& evt) override;
|
bool on(const signals::parser::change_font& evt) override;
|
||||||
bool on(const signals::parser::change_alignment& evt) override;
|
bool on(const signals::parser::change_alignment& evt) override;
|
||||||
bool on(const signals::parser::reverse_colors&) override;
|
bool on(const signals::parser::reverse_colors&) override;
|
||||||
bool on(const signals::parser::offset_pixel& evt) override;
|
|
||||||
bool on(const signals::parser::attribute_set& evt) override;
|
bool on(const signals::parser::attribute_set& evt) override;
|
||||||
bool on(const signals::parser::attribute_unset& evt) override;
|
bool on(const signals::parser::attribute_unset& evt) override;
|
||||||
bool on(const signals::parser::attribute_toggle& evt) override;
|
bool on(const signals::parser::attribute_toggle& evt) override;
|
||||||
|
11
include/components/renderer_interface.hpp
Normal file
11
include/components/renderer_interface.hpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "common.hpp"
|
||||||
|
#include "tags/context.hpp"
|
||||||
|
POLYBAR_NS
|
||||||
|
|
||||||
|
class renderer_interface {
|
||||||
|
public:
|
||||||
|
virtual void render_offset(const tags::context& ctxt, int pixels) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
POLYBAR_NS_END
|
@ -153,9 +153,6 @@ namespace signals {
|
|||||||
struct reverse_colors : public detail::base_signal<reverse_colors> {
|
struct reverse_colors : public detail::base_signal<reverse_colors> {
|
||||||
using base_type::base_type;
|
using base_type::base_type;
|
||||||
};
|
};
|
||||||
struct offset_pixel : public detail::value_signal<offset_pixel, int> {
|
|
||||||
using base_type::base_type;
|
|
||||||
};
|
|
||||||
struct attribute_set : public detail::value_signal<attribute_set, tags::attribute> {
|
struct attribute_set : public detail::value_signal<attribute_set, tags::attribute> {
|
||||||
using base_type::base_type;
|
using base_type::base_type;
|
||||||
};
|
};
|
||||||
|
@ -52,7 +52,6 @@ namespace signals {
|
|||||||
struct change_font;
|
struct change_font;
|
||||||
struct change_alignment;
|
struct change_alignment;
|
||||||
struct reverse_colors;
|
struct reverse_colors;
|
||||||
struct offset_pixel;
|
|
||||||
struct attribute_set;
|
struct attribute_set;
|
||||||
struct attribute_unset;
|
struct attribute_unset;
|
||||||
struct attribute_toggle;
|
struct attribute_toggle;
|
||||||
|
11
include/tags/context.hpp
Normal file
11
include/tags/context.hpp
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common.hpp"
|
||||||
|
|
||||||
|
POLYBAR_NS
|
||||||
|
|
||||||
|
namespace tags {
|
||||||
|
class context {};
|
||||||
|
} // namespace tags
|
||||||
|
|
||||||
|
POLYBAR_NS_END
|
@ -1,6 +1,7 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "common.hpp"
|
#include "common.hpp"
|
||||||
|
#include "components/renderer_interface.hpp"
|
||||||
#include "errors.hpp"
|
#include "errors.hpp"
|
||||||
|
|
||||||
POLYBAR_NS
|
POLYBAR_NS
|
||||||
@ -25,7 +26,7 @@ namespace tags {
|
|||||||
static make_type make();
|
static make_type make();
|
||||||
|
|
||||||
explicit dispatch(signal_emitter& emitter, const logger& logger);
|
explicit dispatch(signal_emitter& emitter, const logger& logger);
|
||||||
void parse(const bar_settings& bar, string data);
|
void parse(const bar_settings& bar, renderer_interface&, string data);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void text(string&& data);
|
void text(string&& data);
|
||||||
|
@ -361,7 +361,7 @@ void bar::parse(string&& data, bool force) {
|
|||||||
m_renderer->begin(rect);
|
m_renderer->begin(rect);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
m_dispatch->parse(settings(), data);
|
m_dispatch->parse(settings(), *m_renderer, data);
|
||||||
} catch (const exception& err) {
|
} catch (const exception& err) {
|
||||||
m_log.err("Failed to parse contents (reason: %s)", err.what());
|
m_log.err("Failed to parse contents (reason: %s)", err.what());
|
||||||
}
|
}
|
||||||
|
@ -711,6 +711,11 @@ void renderer::draw_text(const string& contents) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void renderer::render_offset(const tags::context&, int pixels) {
|
||||||
|
m_log.trace_x("renderer: offset_pixel(%f)", pixels);
|
||||||
|
m_blocks[m_align].x += pixels;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Colorize the bounding box of created action blocks
|
* Colorize the bounding box of created action blocks
|
||||||
*/
|
*/
|
||||||
@ -813,12 +818,6 @@ bool renderer::on(const signals::parser::reverse_colors&) {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool renderer::on(const signals::parser::offset_pixel& evt) {
|
|
||||||
m_log.trace_x("renderer: offset_pixel(%f)", evt.cast());
|
|
||||||
m_blocks[m_align].x += evt.cast();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool renderer::on(const signals::parser::attribute_set& evt) {
|
bool renderer::on(const signals::parser::attribute_set& evt) {
|
||||||
m_log.trace_x("renderer: attribute_set(%i)", static_cast<int>(evt.cast()));
|
m_log.trace_x("renderer: attribute_set(%i)", static_cast<int>(evt.cast()));
|
||||||
m_attr.set(static_cast<int>(evt.cast()), true);
|
m_attr.set(static_cast<int>(evt.cast()), true);
|
||||||
|
@ -37,7 +37,7 @@ namespace tags {
|
|||||||
/**
|
/**
|
||||||
* Process input string
|
* Process input string
|
||||||
*/
|
*/
|
||||||
void dispatch::parse(const bar_settings& bar, string data) {
|
void dispatch::parse(const bar_settings& bar, renderer_interface& renderer, string data) {
|
||||||
tags::parser p;
|
tags::parser p;
|
||||||
p.set(std::move(data));
|
p.set(std::move(data));
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ namespace tags {
|
|||||||
m_sig.emit(change_font{el.tag_data.font});
|
m_sig.emit(change_font{el.tag_data.font});
|
||||||
break;
|
break;
|
||||||
case tags::syntaxtag::O:
|
case tags::syntaxtag::O:
|
||||||
m_sig.emit(offset_pixel{el.tag_data.offset});
|
renderer.render_offset(tags::context{}, el.tag_data.offset);
|
||||||
break;
|
break;
|
||||||
case tags::syntaxtag::R:
|
case tags::syntaxtag::R:
|
||||||
m_sig.emit(reverse_colors{});
|
m_sig.emit(reverse_colors{});
|
||||||
|
Loading…
Reference in New Issue
Block a user