aboutsummaryrefslogtreecommitdiffstats
path: root/swaybar/render.c
diff options
context:
space:
mode:
authorLibravatar Hristo Venev <hristo@venev.name>2020-02-01 18:08:00 +0100
committerLibravatar Simon Ser <contact@emersion.fr>2020-02-10 18:58:09 +0100
commit7affe5c1bda53a2bb57295b7b6dbe4494e8c007b (patch)
treed55e64c43a785f15c6abf77d1891bb9d70b3e529 /swaybar/render.c
parentDo not truncate pointer coordinates to int. (diff)
downloadsway-7affe5c1bda53a2bb57295b7b6dbe4494e8c007b.tar.gz
sway-7affe5c1bda53a2bb57295b7b6dbe4494e8c007b.tar.zst
sway-7affe5c1bda53a2bb57295b7b6dbe4494e8c007b.zip
swaybar: fix i3bar relative coordinates when scaling is used
24e8ba048aef4751c6fa1d5982ee634f921e6cf6 did not take scaling into account. The hotspot size used pixel coordinates, the absolute coordinates were logical, and the relative coordinates were completely wrong. This commit makes all coordinates use logical values. If `"float_event_coords":true` is sent in the handshake message, coordinates are sent as floating-point values. The "scale" field is an integer containing the scale value.
Diffstat (limited to 'swaybar/render.c')
-rw-r--r--swaybar/render.c12
1 files changed, 8 insertions, 4 deletions
diff --git a/swaybar/render.c b/swaybar/render.c
index 06efb53c..ea5faef6 100644
--- a/swaybar/render.c
+++ b/swaybar/render.c
@@ -131,11 +131,15 @@ static void render_sharp_line(cairo_t *cairo, uint32_t color,
131 131
132static enum hotspot_event_handling block_hotspot_callback( 132static enum hotspot_event_handling block_hotspot_callback(
133 struct swaybar_output *output, struct swaybar_hotspot *hotspot, 133 struct swaybar_output *output, struct swaybar_hotspot *hotspot,
134 int x, int y, uint32_t button, void *data) { 134 double x, double y, uint32_t button, void *data) {
135 struct i3bar_block *block = data; 135 struct i3bar_block *block = data;
136 struct status_line *status = output->bar->status; 136 struct status_line *status = output->bar->status;
137 return i3bar_block_send_click(status, block, x, y, x - hotspot->x, 137 return i3bar_block_send_click(status, block, x, y,
138 y - hotspot->y, hotspot->width, hotspot->height, button); 138 x - (double)hotspot->x / output->scale,
139 y - (double)hotspot->y / output->scale,
140 (double)hotspot->width / output->scale,
141 (double)hotspot->height / output->scale,
142 output->scale, button);
139} 143}
140 144
141static void i3bar_block_unref_callback(void *data) { 145static void i3bar_block_unref_callback(void *data) {
@@ -540,7 +544,7 @@ static uint32_t render_binding_mode_indicator(cairo_t *cairo,
540 544
541static enum hotspot_event_handling workspace_hotspot_callback( 545static enum hotspot_event_handling workspace_hotspot_callback(
542 struct swaybar_output *output, struct swaybar_hotspot *hotspot, 546 struct swaybar_output *output, struct swaybar_hotspot *hotspot,
543 int x, int y, uint32_t button, void *data) { 547 double x, double y, uint32_t button, void *data) {
544 if (button != BTN_LEFT) { 548 if (button != BTN_LEFT) {
545 return HOTSPOT_PROCESS; 549 return HOTSPOT_PROCESS;
546 } 550 }