311 lines
10 KiB
Diff
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
|
|
|