From 9bebb0a3fecb8fa8bca102f48d10e09e494a6b4d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?P=C5=99emysl=20Eric=20Janouch?=
Date: Tue, 16 Nov 2021 07:38:42 +0100
Subject: Make this work at all in macOS/Homebrew
---
fastiv-view.c | 26 ++++++++++++++++++++++----
1 file changed, 22 insertions(+), 4 deletions(-)
(limited to 'fastiv-view.c')
diff --git a/fastiv-view.c b/fastiv-view.c
index a9ba5cf..f55fd49 100644
--- a/fastiv-view.c
+++ b/fastiv-view.c
@@ -18,6 +18,14 @@
#include
#include
+#include
+#ifdef GDK_WINDOWING_X11
+#include
+#endif // GDK_WINDOWING_X11
+#ifdef GDK_WINDOWING_QUARTZ
+#include
+#endif // GDK_WINDOWING_QUARTZ
+
#include "fastiv-io.h"
#include "fastiv-view.h"
@@ -178,13 +186,17 @@ fastiv_view_realize(GtkWidget *widget)
// We need this window to receive input events at all.
GdkWindow *window = gdk_window_new(gtk_widget_get_parent_window(widget),
&attributes, GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL);
+
+ // Without the following call, or the rendering mode set to "recording",
+ // RGB30 degrades to RGB24. It completely breaks the Quartz backend.
+#ifdef GDK_WINDOWING_X11
+ if (GDK_IS_X11_WINDOW(window))
+ gdk_window_ensure_native(window);
+#endif // GDK_WINDOWING_X11
+
gtk_widget_register_window(widget, window);
gtk_widget_set_window(widget, window);
gtk_widget_set_realized(widget, TRUE);
-
- // Without the following call, or the rendering mode set to "recording",
- // RGB30 degrades to RGB24.
- gdk_window_ensure_native(window);
}
static gboolean
@@ -241,6 +253,12 @@ fastiv_view_draw(GtkWidget *widget, cairo_t *cr)
// TODO(p): Prescale it ourselves to an off-screen bitmap, gamma-correctly.
cairo_pattern_set_filter(pattern, CAIRO_FILTER_GOOD);
+#ifdef GDK_WINDOWING_QUARTZ
+ // Not supported there. Acts a bit like repeating, but weirdly offset.
+ if (GDK_IS_QUARTZ_WINDOW(gtk_widget_get_window(widget)))
+ cairo_pattern_set_extend(pattern, CAIRO_EXTEND_NONE);
+#endif // GDK_WINDOWING_QUARTZ
+
cairo_paint(cr);
return TRUE;
}
--
cgit v1.2.3