From a49096ffde418d647aaf8b414d795c3284ecd618 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Thu, 10 Apr 2025 15:50:13 +0200 Subject: [PATCH] image/printing: Use cairo renderer for texture On some systems, to_node -> render_texture generates empty or garbled textures since GTK 4.18 GNOME/gtk#7464. This does not happen when using the cairo renderer. Closes #488 --- news.d/48.1/fixes-print-empty-page | 1 + src/widgets/image/printing.rs | 14 +++++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 news.d/48.1/fixes-print-empty-page diff --git a/news.d/48.1/fixes-print-empty-page b/news.d/48.1/fixes-print-empty-page new file mode 100644 index 0000000..496fcce --- /dev/null +++ b/news.d/48.1/fixes-print-empty-page @@ -0,0 +1 @@ +Printed pages don't contain anything or garbled output. This is a temporary workaround for , using the cairo renderer for the rotation and scaling of the image in the print preparation. \ No newline at end of file diff --git a/src/widgets/image/printing.rs b/src/widgets/image/printing.rs index 475884b..4e3624d 100644 --- a/src/widgets/image/printing.rs +++ b/src/widgets/image/printing.rs @@ -1,4 +1,4 @@ -// Copyright (c) 2023-2024 Sophie Herold +// Copyright (c) 2023-2025 Sophie Herold // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by @@ -42,8 +42,16 @@ impl LpImage { .add_to_snapshot(&snapshot, scale, &render_options); let node = snapshot.to_node()?; - let renderer = self.root()?.renderer()?; - Some(renderer.render_texture(&node, None)) + let renderer = gsk::CairoRenderer::new(); + renderer + .realize_for_display(&gdk::Display::default()?) + .ok()?; + + let texture = renderer.render_texture(&node, None); + + renderer.unrealize(); + + Some(texture) } }