Browse Source

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.
patch-4
Sander van Grieken 2 years ago
parent
commit
40e8ff6ce2
  1. 12
      electrum/gui/qml/components/GenericShareDialog.qml
  2. 15
      electrum/gui/qml/components/RequestDialog.qml
  3. 43
      electrum/gui/qml/components/controls/QRImage.qml

12
electrum/gui/qml/components/GenericShareDialog.qml

@ -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
}
}
}
}

15
electrum/gui/qml/components/RequestDialog.qml

@ -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
}
}
}
}

43
electrum/gui/qml/components/controls/QRImage.qml

@ -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: 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
Image {
source: '../../../icons/electrum.png'
x: 1
y: 1
width: parent.width - 2
height: parent.height - 2
scale: 0.9
}
}
}
}

Loading…
Cancel
Save