fix: No overlines/underlines being drawn when using offsets (#2685)

This commit is contained in:
Patrick Ziegler 2022-04-11 21:30:24 +02:00 committed by GitHub
parent 146c1ac1d7
commit ab206a5f8e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 4 deletions

View File

@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `custom/script`: Output clearing when `exec-if` fails ([`#2674`](https://github.com/polybar/polybar/issues/2674))
- `internal/battery`: `poll-interval` not working ([`#2649`](https://github.com/polybar/polybar/issues/2649), [`#2677`](https://github.com/polybar/polybar/pull/2677))
- ipc: Polybar failing to open IPC channel after another user already ran polybar, if `XDG_RUNTIME_DIR` is not set ([`#2683`](https://github.com/polybar/polybar/issues/2683), [`#2684`](https://github.com/polybar/polybar/pull/2684))
- No overlines/underlines being drawn when using offsets ([`#2685`](https://github.com/polybar/polybar/pull/2685))
## [3.6.2] - 2022-04-03
### Fixed

View File

@ -72,7 +72,7 @@ class renderer : public renderer_interface,
void fill_overline(rgba color, double x, double w);
void fill_underline(rgba color, double x, double w);
void fill_borders();
void draw_offset(rgba color, double x, double w);
void draw_offset(const tags::context& ctxt, rgba color, double x, double w);
double block_x(alignment a) const;
double block_y(alignment a) const;

View File

@ -728,8 +728,12 @@ void renderer::render_text(const tags::context& ctxt, const string&& contents) {
}
}
void renderer::draw_offset(rgba color, double x, double w) {
if (w > 0 && color != m_bar.background) {
void renderer::draw_offset(const tags::context& ctxt, rgba color, double x, double w) {
if (w <= 0) {
return;
}
if (color != m_bar.background) {
m_log.trace_x("renderer: offset(x=%f, w=%f)", x, w);
m_context->save();
*m_context << m_comp_bg;
@ -739,6 +743,14 @@ void renderer::draw_offset(rgba color, double x, double w) {
m_context->fill();
m_context->restore();
}
if (ctxt.has_underline()) {
fill_underline(ctxt.get_ul(), x, w);
}
if (ctxt.has_overline()) {
fill_overline(ctxt.get_ol(), x, w);
}
}
void renderer::render_offset(const tags::context& ctxt, const extent_val offset) {
@ -746,7 +758,7 @@ void renderer::render_offset(const tags::context& ctxt, const extent_val offset)
int offset_width = units_utils::extent_to_pixel(offset, m_bar.dpi_x);
rgba bg = ctxt.get_bg();
draw_offset(bg, m_blocks[m_align].x, offset_width);
draw_offset(ctxt, bg, m_blocks[m_align].x, offset_width);
increase_x(offset_width);
}