diff --git a/cura/PrinterOutput/NetworkMJPGImage.py b/cura/PrinterOutput/NetworkMJPGImage.py index a482b40ad8..a1b45847f9 100644 --- a/cura/PrinterOutput/NetworkMJPGImage.py +++ b/cura/PrinterOutput/NetworkMJPGImage.py @@ -1,6 +1,8 @@ # Copyright (c) 2018 Aldo Hoeben / fieldOfView # NetworkMJPGImage is released under the terms of the LGPLv3 or higher. +from typing import Optional + from PyQt6.QtCore import QUrl, pyqtProperty, pyqtSignal, pyqtSlot, QRect, QByteArray from PyQt6.QtGui import QImage, QPainter from PyQt6.QtQuick import QQuickPaintedItem @@ -19,9 +21,9 @@ class NetworkMJPGImage(QQuickPaintedItem): self._stream_buffer = QByteArray() self._stream_buffer_start_index = -1 - self._network_manager = None # type: QNetworkAccessManager - self._image_request = None # type: QNetworkRequest - self._image_reply = None # type: QNetworkReply + self._network_manager: Optional[QNetworkAccessManager] = None + self._image_request: Optional[QNetworkRequest] = None + self._image_reply: Optional[QNetworkReply] = None self._image = QImage() self._image_rect = QRect() diff --git a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml index 7fce1478a1..13ba2f75fe 100644 --- a/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml +++ b/plugins/UM3NetworkPrinting/resources/qml/PrinterVideoStream.qml @@ -1,4 +1,4 @@ -// Copyright (c) 2019 Ultimaker B.V. +// Copyright (c) 2023 UltiMaker // Cura is released under the terms of the LGPLv3 or higher. import QtQuick 2.2 @@ -6,7 +6,7 @@ import UM 1.3 as UM import Cura 1.0 as Cura Item { - property var cameraUrl: ""; + property string cameraUrl: ""; Rectangle { anchors.fill:parent; @@ -34,22 +34,29 @@ Item { Cura.NetworkMJPGImage { id: cameraImage - anchors.horizontalCenter: parent.horizontalCenter; - anchors.verticalCenter: parent.verticalCenter; - height: Math.round((imageHeight === 0 ? 600 * screenScaleFactor : imageHeight) * width / imageWidth); + anchors.horizontalCenter: parent.horizontalCenter + anchors.verticalCenter: parent.verticalCenter + + readonly property real img_scale_factor: { + if (imageWidth > maximumWidth || imageHeight > maximumHeight) { + return Math.min(maximumWidth / imageWidth, maximumHeight / imageHeight); + } + return 1.0; + } + + width: imageWidth === 0 ? 800 * screenScaleFactor : imageWidth * img_scale_factor + height: imageHeight === 0 ? 600 * screenScaleFactor : imageHeight * img_scale_factor + onVisibleChanged: { + if (cameraUrl === "") return; + if (visible) { - if (cameraUrl != "") { - start(); - } + start(); } else { - if (cameraUrl != "") { - stop(); - } + stop(); } } source: cameraUrl - width: Math.min(imageWidth === 0 ? 800 * screenScaleFactor : imageWidth, maximumWidth); z: 1 }