aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TODO2
-rw-r--r--include/mgl/window/window.h1
-rw-r--r--src/window/window.c8
3 files changed, 9 insertions, 2 deletions
diff --git a/TODO b/TODO
index 859b9db..86d4bce 100644
--- a/TODO
+++ b/TODO
@@ -8,4 +8,4 @@ Only render one glyph for missing symbols.\
High precision mouse wheel event by using xi2, which also allows us to get which scroll wheel was used and scrolling in y direction.\
Use XPresent (PresentNotifyMSC, glSwapBuffers, wait for PresentCompleteNotify before doing presentNotifyMsc and glSwapBuffers again), see https://invent.kde.org/plasma/kwin/-/issues/27. This doesn't work on nvidia because nvidia never sends the PresentCompleteNotify event.
Support drag and drop.\
-Pasting image into mgl doesn't always work. For example when using wayland + sway. Only 64k are copied (even when chunk size is set to 20kb instead of 32kb. One workaround would be to set chunk size and 1024 to 0x1ffffffff). \ No newline at end of file
+Use _NET_WM_SYNC_REQUEST.
diff --git a/include/mgl/window/window.h b/include/mgl/window/window.h
index 27926b2..cb5a2eb 100644
--- a/include/mgl/window/window.h
+++ b/include/mgl/window/window.h
@@ -54,6 +54,7 @@ typedef struct {
bool hidden; /* false by default */
bool override_redirect; /* false by default */
bool support_alpha; /* support alpha for the window, false by default */
+ mgl_color background_color; /* default: black */
} mgl_window_create_params;
typedef enum {
diff --git a/src/window/window.c b/src/window/window.c
index 958adab..101fb42 100644
--- a/src/window/window.c
+++ b/src/window/window.c
@@ -282,6 +282,12 @@ static void mgl_window_on_resize(mgl_window *self, int width, int height) {
mgl_window_set_scissor(self, &(mgl_scissor){ .position = { 0, 0 }, .size = self->size });
}
+static unsigned long mgl_color_to_x11_pixel(mgl_color color) {
+ if(color.a == 0)
+ return 0;
+ return (color.r << 16) | (color.g << 8) | color.b;
+}
+
static int mgl_window_init(mgl_window *self, const char *title, const mgl_window_create_params *params, Window existing_window) {
self->window = 0;
self->context = NULL;
@@ -336,7 +342,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 = 0;
+ 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.border_pixel = 0;
window_attr.bit_gravity = NorthWestGravity;
window_attr.event_mask =