From 7ad52d9335579d03613036a7da9967fcf0c5d6b3 Mon Sep 17 00:00:00 2001 From: fiaxh Date: Fri, 16 Sep 2022 11:23:18 +0200 Subject: [PATCH] OMEMO QR code: Switch to paintable, fix css --- main/data/theme.css | 2 +- plugins/omemo/src/ui/contact_details_dialog.vala | 6 +++--- plugins/omemo/vapi/libqrencode.vapi | 9 ++++----- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/main/data/theme.css b/main/data/theme.css index 94cf1da5..b689d96c 100644 --- a/main/data/theme.css +++ b/main/data/theme.css @@ -386,6 +386,6 @@ box.dino-input-error .chat-input-status.input-status-highlight-once { box-shadow: 0 0 2px 0 rgba(0,0,0,0.5); } -.qrcode-container { +.qrcode-container > contents { background: white; /* Color of the quiet zone. MUST have the same "reflectance" as light modules of the QR code. */ } diff --git a/plugins/omemo/src/ui/contact_details_dialog.vala b/plugins/omemo/src/ui/contact_details_dialog.vala index ab216c58..2de28572 100644 --- a/plugins/omemo/src/ui/contact_details_dialog.vala +++ b/plugins/omemo/src/ui/contact_details_dialog.vala @@ -104,9 +104,9 @@ public class ContactDetailsDialog : Gtk.Dialog { const int QUIET_ZONE_MODULES = 4; // MUST be at least 4 const int MODULE_SIZE_PX = 4; // arbitrary - var qr_pixbuf = new QRcode(iri, 2) - .to_pixbuf(MODULE_SIZE_PX * qrcode_image.scale_factor); - qrcode_image.set_from_pixbuf(qr_pixbuf); + var qr_paintable = new QRcode(iri, 2) + .to_paintable(MODULE_SIZE_PX * qrcode_image.scale_factor); + qrcode_image.paintable = qr_paintable; qrcode_image.margin_top = qrcode_image.margin_end = qrcode_image.margin_bottom = qrcode_image.margin_start = QUIET_ZONE_MODULES*MODULE_SIZE_PX; qrcode_popover.add_css_class("qrcode-container"); diff --git a/plugins/omemo/vapi/libqrencode.vapi b/plugins/omemo/vapi/libqrencode.vapi index 79f98b62..360f74a5 100644 --- a/plugins/omemo/vapi/libqrencode.vapi +++ b/plugins/omemo/vapi/libqrencode.vapi @@ -1,5 +1,3 @@ -using Gdk; - [CCode (cheader_filename = "qrencode.h")] namespace Qrencode { @@ -36,13 +34,14 @@ namespace Qrencode { [CCode (cname = "QRcode_encodeString")] public QRcode (string str, int version = 0, ECLevel level = ECLevel.L, EncodeMode hint = EncodeMode.EIGHT_BIT, bool casesensitive = true); - public Pixbuf to_pixbuf(int module_size) { + public Gdk.Paintable to_paintable(int module_size) { GLib.assert(module_size > 0); var dst_width = width*module_size; var dst_data = new uint8[dst_width*dst_width*3]; expand_and_upsample(data,width,width, dst_data,dst_width,dst_width); - return new Pixbuf.from_data(dst_data, - Colorspace.RGB, false, 8, dst_width, dst_width, dst_width*3); + return new Gdk.MemoryTexture(dst_width, dst_width, Gdk.MemoryFormat.R8G8B8, + new GLib.Bytes.take((owned) dst_data), dst_width*3); + } /** Does 2D nearest-neighbor upsampling of an array of single-byte