mutter/0001-Revert-background-Port-from-gdk-pixbuf-to-glycin.patch
2026-07-15 02:48:02 -04:00

311 lines
10 KiB
Diff

From b8383cd5dae36505f4ad1aea99cb672b7837187b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org>
Date: Wed, 5 Nov 2025 17:10:15 +0100
Subject: [PATCH] Revert "background: Port from gdk-pixbuf to glycin"
This reverts commit 34d66f86d941dc47101f1f69c54122913442dee2.
---
meson.build | 4 +-
src/compositor/meta-background-image.c | 166 ++++++-------------------
src/meson.build | 2 +-
3 files changed, 38 insertions(+), 134 deletions(-)
diff --git a/meson.build b/meson.build
index 3957cc0d7f..659e8b3dc3 100644
--- a/meson.build
+++ b/meson.build
@@ -21,7 +21,7 @@ gi_req = '>= 0.9.5'
graphene_req = '>= 1.10.2'
gtk3_req = '>= 3.19.8'
gtk4_req = '>= 4.14.0'
-glycin_req = '>= 2.0.beta.2'
+gdk_pixbuf_req = '>= 2.0'
pango_req = '>= 1.46.0'
cairo_req = '>= 1.10.0'
pangocairo_req = '>= 1.20'
@@ -117,7 +117,7 @@ subproject('gvdb')
m_dep = cc.find_library('m', required: true)
graphene_dep = dependency('graphene-gobject-1.0', version: graphene_req)
-glycin_dep = dependency('glycin-2', version: glycin_req)
+gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: gdk_pixbuf_req)
cairo_dep = dependency('cairo', version: cairo_req)
pixman_dep = dependency('pixman-1', version: pixman_req)
gsettings_desktop_schemas_dep = dependency('gsettings-desktop-schemas',
diff --git a/src/compositor/meta-background-image.c b/src/compositor/meta-background-image.c
index 6cf9187d56..e5c879c892 100644
--- a/src/compositor/meta-background-image.c
+++ b/src/compositor/meta-background-image.c
@@ -20,11 +20,10 @@
#include "compositor/meta-background-image-private.h"
-#include <glycin.h>
+#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gio/gio.h>
#include "clutter/clutter.h"
-#include "clutter/clutter-backend-private.h"
#include "compositor/cogl-utils.h"
enum
@@ -63,7 +62,6 @@ struct _MetaBackgroundImage
gboolean in_cache;
gboolean loaded;
CoglTexture *texture;
- ClutterColorState *color_state;
};
G_DEFINE_TYPE (MetaBackgroundImageCache, meta_background_image_cache, G_TYPE_OBJECT);
@@ -117,111 +115,33 @@ meta_background_image_cache_get_default (void)
return cache;
}
-static CoglPixelFormat
-gly_memory_format_to_cogl (GlyMemoryFormat format)
-{
- switch ((guint) format)
- {
- case GLY_MEMORY_B8G8R8A8_PREMULTIPLIED:
- return COGL_PIXEL_FORMAT_BGRA_8888_PRE;
- case GLY_MEMORY_A8R8G8B8_PREMULTIPLIED:
- return COGL_PIXEL_FORMAT_ARGB_8888_PRE;
- case GLY_MEMORY_R8G8B8A8_PREMULTIPLIED:
- return COGL_PIXEL_FORMAT_RGBA_8888_PRE;
- case GLY_MEMORY_B8G8R8A8:
- return COGL_PIXEL_FORMAT_BGRA_8888;
- case GLY_MEMORY_A8R8G8B8:
- return COGL_PIXEL_FORMAT_ARGB_8888;
- case GLY_MEMORY_R8G8B8A8:
- return COGL_PIXEL_FORMAT_RGBA_8888;
- case GLY_MEMORY_A8B8G8R8:
- return COGL_PIXEL_FORMAT_ABGR_8888;
- case GLY_MEMORY_R8G8B8:
- return COGL_PIXEL_FORMAT_RGB_888;
- case GLY_MEMORY_B8G8R8:
- return COGL_PIXEL_FORMAT_BGR_888;
- case GLY_MEMORY_R16G16B16A16_PREMULTIPLIED:
- return COGL_PIXEL_FORMAT_RGBA_16161616_PRE;
- case GLY_MEMORY_R16G16B16A16:
- return COGL_PIXEL_FORMAT_RGBA_16161616;
- case GLY_MEMORY_R16G16B16A16_FLOAT:
- return COGL_PIXEL_FORMAT_RGBA_FP_16161616;
- case GLY_MEMORY_R32G32B32A32_FLOAT_PREMULTIPLIED:
- return COGL_PIXEL_FORMAT_RGBA_FP_32323232_PRE;
- case GLY_MEMORY_R32G32B32A32_FLOAT:
- return COGL_PIXEL_FORMAT_RGBA_FP_32323232;
- default:
- g_assert_not_reached ();
- }
-}
-
-static GlyMemoryFormatSelection
-glycin_supported_memory_formats (void)
-{
- return GLY_MEMORY_SELECTION_B8G8R8A8_PREMULTIPLIED |
- GLY_MEMORY_SELECTION_A8R8G8B8_PREMULTIPLIED |
- GLY_MEMORY_SELECTION_R8G8B8A8_PREMULTIPLIED |
- GLY_MEMORY_SELECTION_B8G8R8A8 |
- GLY_MEMORY_SELECTION_A8R8G8B8 |
- GLY_MEMORY_SELECTION_R8G8B8A8 |
- GLY_MEMORY_SELECTION_A8B8G8R8 |
- GLY_MEMORY_SELECTION_R8G8B8 |
- GLY_MEMORY_SELECTION_B8G8R8 |
- GLY_MEMORY_SELECTION_R16G16B16A16_PREMULTIPLIED |
- GLY_MEMORY_SELECTION_R16G16B16A16 |
- GLY_MEMORY_SELECTION_R16G16B16A16_FLOAT |
- GLY_MEMORY_SELECTION_R32G32B32A32_FLOAT_PREMULTIPLIED |
- GLY_MEMORY_SELECTION_R32G32B32A32_FLOAT;
-}
-
-static void
-gly_cicp_to_clutter (const GlyCicp *gly_cicp,
- ClutterCicp *clutter_cicp)
-{
- clutter_cicp->primaries = (ClutterCicpPrimaries) gly_cicp->color_primaries;
- clutter_cicp->transfer = (ClutterCicpTransfer) gly_cicp->transfer_characteristics;
- clutter_cicp->matrix_coefficients = gly_cicp->matrix_coefficients;
- clutter_cicp->video_full_range_flag = gly_cicp->video_full_range_flag;
-}
-
static void
load_file (GTask *task,
- MetaBackgroundImage *source,
+ MetaBackgroundImage *image,
gpointer task_data,
GCancellable *cancellable)
{
- g_autoptr (GFileInputStream) stream = NULL;
- g_autoptr (GlyLoader) loader = NULL;
- g_autoptr (GlyImage) image = NULL;
- GlyFrame *frame;
GError *error = NULL;
+ GdkPixbuf *pixbuf;
+ GFileInputStream *stream;
- stream = g_file_read (source->file, NULL, &error);
+ stream = g_file_read (image->file, NULL, &error);
if (stream == NULL)
{
g_task_return_error (task, error);
return;
}
- loader = gly_loader_new_for_stream (G_INPUT_STREAM (stream));
-
- gly_loader_set_accepted_memory_formats (loader, glycin_supported_memory_formats ());
-
- image = gly_loader_load (loader, &error);
- if (!image)
- {
- g_task_return_error (task, error);
- return;
- }
+ pixbuf = gdk_pixbuf_new_from_stream (G_INPUT_STREAM (stream), NULL, &error);
+ g_object_unref (stream);
- frame = gly_image_next_frame (image, &error);
- if (!frame)
+ if (pixbuf == NULL)
{
g_task_return_error (task, error);
return;
}
- g_task_return_pointer (task, frame, (GDestroyNotify) g_object_unref);
+ g_task_return_pointer (task, pixbuf, (GDestroyNotify) g_object_unref);
}
static void
@@ -236,16 +156,15 @@ file_loaded (GObject *source_object,
g_autoptr (GError) local_error = NULL;
GTask *task;
CoglTexture *texture;
- g_autoptr (GlyFrame) frame = NULL;
+ GdkPixbuf *pixbuf, *rotated;
int width, height, row_stride;
- GlyMemoryFormat format;
- g_autoptr (GlyCicp) cicp = NULL;
- GBytes *bytes;
+ guchar *pixels;
+ gboolean has_alpha;
task = G_TASK (result);
- frame = g_task_propagate_pointer (task, &error);
+ pixbuf = g_task_propagate_pointer (task, &error);
- if (frame == NULL)
+ if (pixbuf == NULL)
{
char *uri = g_file_get_uri (image->file);
g_warning ("Failed to load background '%s': %s",
@@ -254,23 +173,27 @@ file_loaded (GObject *source_object,
goto out;
}
- width = gly_frame_get_width (frame);
- height = gly_frame_get_height (frame);
- row_stride = gly_frame_get_stride (frame);
- bytes = gly_frame_get_buf_bytes (frame);
- format = gly_frame_get_memory_format (frame);
- cicp = gly_frame_get_color_cicp (frame);
+ rotated = gdk_pixbuf_apply_embedded_orientation (pixbuf);
+ if (rotated != NULL)
+ {
+ g_object_unref (pixbuf);
+ pixbuf = rotated;
+ }
+
+ width = gdk_pixbuf_get_width (pixbuf);
+ height = gdk_pixbuf_get_height (pixbuf);
+ row_stride = gdk_pixbuf_get_rowstride (pixbuf);
+ pixels = gdk_pixbuf_get_pixels (pixbuf);
+ has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
texture = meta_create_texture (width, height, ctx,
- gly_memory_format_has_alpha (format)
- ? COGL_TEXTURE_COMPONENTS_RGBA
- : COGL_TEXTURE_COMPONENTS_RGB,
+ has_alpha ? COGL_TEXTURE_COMPONENTS_RGBA : COGL_TEXTURE_COMPONENTS_RGB,
META_TEXTURE_ALLOW_SLICING);
if (!cogl_texture_set_data (texture,
- gly_memory_format_to_cogl (format),
+ has_alpha ? COGL_PIXEL_FORMAT_RGBA_8888 : COGL_PIXEL_FORMAT_RGB_888,
row_stride,
- g_bytes_get_data (bytes, NULL), 0,
+ pixels, 0,
&local_error))
{
g_warning ("Failed to create texture for background: %s",
@@ -280,28 +203,10 @@ file_loaded (GObject *source_object,
image->texture = texture;
- if (cicp)
- {
- ClutterCicp clutter_cicp;
- ClutterBackend *clutter_backend = clutter_get_default_backend ();
- ClutterContext *clutter_context = clutter_backend->context;
- g_autoptr (GError) local_error2 = NULL;
-
- gly_cicp_to_clutter (cicp, &clutter_cicp);
-
- image->color_state =
- clutter_color_state_params_new_from_cicp (clutter_context,
- &clutter_cicp,
- &local_error2);
- if (local_error2)
- g_warning ("%s", local_error2->message);
- }
- else
- {
- image->color_state = NULL;
- }
-
out:
+ if (pixbuf != NULL)
+ g_object_unref (pixbuf);
+
image->loaded = TRUE;
g_signal_emit (image, signals[LOADED], 0);
}
@@ -395,8 +300,6 @@ meta_background_image_finalize (GObject *object)
if (image->file)
g_object_unref (image->file);
- g_clear_object (&image->color_state);
-
G_OBJECT_CLASS (meta_background_image_parent_class)->finalize (object);
}
@@ -464,9 +367,10 @@ meta_background_image_get_texture (MetaBackgroundImage *image)
}
ClutterColorState *
-meta_background_image_get_color_state (MetaBackgroundImage *image)
+meta_background_image_get_color_state (MetaBackgroundImage *image,
+ ClutterContext *ctx)
{
g_return_val_if_fail (META_IS_BACKGROUND_IMAGE (image), NULL);
- return image->color_state;
+ return NULL;
}
diff --git a/src/meson.build b/src/meson.build
index 508c3416da..c36efc3a1e 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -25,7 +25,7 @@ mutter_pkg_private_deps = [
gmodule_no_export_dep,
gnome_settings_daemon_dep,
xkbcommon_dep,
- glycin_dep,
+ gdk_pixbuf_dep,
libeis_dep,
libdisplay_info_dep,
]
--
2.51.1