From 637d092f808c695e920d5955f6f56460ea847cd6 Mon Sep 17 00:00:00 2001
From: dec05eba <dec05eba@protonmail.com>
Date: Fri, 14 Mar 2025 12:53:29 +0100
Subject: Handle window background transparency correctly (premultiplied alpha)

---
 src/window/window.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

(limited to 'src')

diff --git a/src/window/window.c b/src/window/window.c
index 6dbf3df..bce68fc 100644
--- a/src/window/window.c
+++ b/src/window/window.c
@@ -800,7 +800,7 @@ static void mgl_window_on_resize(mgl_window *self, int width, int height) {
 static unsigned long mgl_color_to_x11_pixel(mgl_color color) {
     if(color.a == 0)
         return 0;
-    return ((uint32_t)color.a << 24) | ((uint32_t)color.r << 16) | ((uint32_t)color.g << 8) | (uint32_t)color.b;
+    return ((uint32_t)color.a << 24) | (((uint32_t)color.r * color.a / 0xFF) << 16) | (((uint32_t)color.g * color.a / 0xFF) << 8) | ((uint32_t)color.b * color.a / 0xFF);
 }
 
 static void mgl_set_window_type(mgl_window *self, mgl_window_type window_type) {
@@ -911,7 +911,7 @@ static int mgl_window_init(mgl_window *self, const char *title, const mgl_window
     XSetWindowAttributes window_attr;
     window_attr.override_redirect = params ? params->override_redirect : false;
     window_attr.colormap = x11_context->color_map;
-    window_attr.background_pixel = mgl_color_to_x11_pixel(params ? params->background_color : (mgl_color){ .r = 0, .g = 0, .b = 0, .a = 0 });
+    window_attr.background_pixel = mgl_color_to_x11_pixel(params ? params->background_color : (mgl_color){ .r = 0, .g = 0, .b = 0, .a = 255 });
     window_attr.border_pixel = 0;
     window_attr.bit_gravity = NorthWestGravity;
     window_attr.event_mask = 
-- 
cgit v1.2.3-70-g09d2