1
0

qml: add hack to delay rendering of QR until dialog is shown.

unfortunately, using standard QtQuick Image.asynchronous=true leads
to a deadlock at app exit so we can't use it a.t.m.
This commit is contained in:
Sander van Grieken
2022-08-31 13:33:58 +02:00
parent 179666612e
commit 40e8ff6ce2
3 changed files with 54 additions and 16 deletions

View File

@@ -58,6 +58,8 @@ ElDialog {
QRImage {
id: qr
render: dialog.enter ? false : true
qrdata: dialog.text_qr ? dialog.text_qr : dialog.text
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: constants.paddingSmall
Layout.bottomMargin: constants.paddingSmall
@@ -108,7 +110,13 @@ ElDialog {
}
}
Component.onCompleted: {
qr.qrdata = dialog.text_qr ? dialog.text_qr : dialog.text
Connections {
target: dialog.enter
function onRunningChanged() {
console.log('dialog open animation running changed: ' + dialog.enter.running)
if (!dialog.enter.running) {
qr.render = true
}
}
}
}

View File

@@ -17,6 +17,8 @@ ElDialog {
property string _bip21uri
property string _address
property bool _render_qr: false // delay qr rendering until dialog is shown
parent: Overlay.overlay
modal: true
standardButtons: Dialog.Close
@@ -91,18 +93,21 @@ ElDialog {
id: qri_bolt11
QRImage {
qrdata: _bolt11
render: _render_qr
}
}
Component {
id: qri_bip21uri
QRImage {
qrdata: _bip21uri
render: _render_qr
}
}
Component {
id: qri_address
QRImage {
qrdata: _address
render: _render_qr
}
}
}
@@ -298,4 +303,14 @@ ElDialog {
wallet: Daemon.currentWallet
key: dialog.key
}
// hack. delay qr rendering until dialog is shown
Connections {
target: dialog.enter
function onRunningChanged() {
if (!dialog.enter.running) {
dialog._render_qr = true
}
}
}
}

View File

@@ -1,25 +1,40 @@
import QtQuick 2.6
Image {
Item {
id: root
property string qrdata
property bool render: true // init to false, then set true if render needs delay
property var qrprops: QRIP.getDimensions(qrdata)
source: qrdata ? 'image://qrgen/' + qrdata : ''
width: r.width
height: r.height
Rectangle {
property var qrprops: QRIP.getDimensions(qrdata)
id: r
width: qrprops.modules * qrprops.box_size
height: width
color: 'white'
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: qrprops.icon_modules * qrprops.box_size
height: qrprops.icon_modules * qrprops.box_size
}
Image {
source: '../../../icons/electrum.png'
x: 1
y: 1
width: parent.width - 2
height: parent.height - 2
scale: 0.9
Image {
source: qrdata && render ? 'image://qrgen/' + qrdata : ''
Rectangle {
visible: root.render
color: 'white'
x: (parent.width - width) / 2
y: (parent.height - height) / 2
width: qrprops.icon_modules * qrprops.box_size
height: qrprops.icon_modules * qrprops.box_size
Image {
source: '../../../icons/electrum.png'
x: 1
y: 1
width: parent.width - 2
height: parent.height - 2
scale: 0.9
}
}
}
}