aboutsummaryrefslogtreecommitdiff
path: root/swaybar/render.c
diff options
context:
space:
mode:
authorHristo Venev <hristo@venev.name>2020-02-01 18:08:00 +0100
committerSimon Ser <contact@emersion.fr>2020-02-10 18:58:09 +0100
commit7affe5c1bda53a2bb57295b7b6dbe4494e8c007b (patch)
treed55e64c43a785f15c6abf77d1891bb9d70b3e529 /swaybar/render.c
parentfca32b6334afe69ea10c88de7670c79ae98ce0fd (diff)
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,
static enum hotspot_event_handling block_hotspot_callback(
struct swaybar_output *output, struct swaybar_hotspot *hotspot,
- int x, int y, uint32_t button, void *data) {
+ double x, double y, uint32_t button, void *data) {
struct i3bar_block *block = data;
struct status_line *status = output->bar->status;
- return i3bar_block_send_click(status, block, x, y, x - hotspot->x,
- y - hotspot->y, hotspot->width, hotspot->height, button);
+ return i3bar_block_send_click(status, block, x, y,
+ x - (double)hotspot->x / output->scale,
+ y - (double)hotspot->y / output->scale,
+ (double)hotspot->width / output->scale,
+ (double)hotspot->height / output->scale,
+ output->scale, button);
}
static void i3bar_block_unref_callback(void *data) {
@@ -540,7 +544,7 @@ static uint32_t render_binding_mode_indicator(cairo_t *cairo,
static enum hotspot_event_handling workspace_hotspot_callback(
struct swaybar_output *output, struct swaybar_hotspot *hotspot,
- int x, int y, uint32_t button, void *data) {
+ double x, double y, uint32_t button, void *data) {
if (button != BTN_LEFT) {
return HOTSPOT_PROCESS;
}