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