File indexing completed on 2024-04-28 15:39:42

0001 // SPDX-FileCopyrightText: 2014-2022 Jesper K. Pedersen <blackie@kde.org>
0002 //
0003 // SPDX-License-Identifier: GPL-2.0-or-later
0004 
0005 #include "RemoteImage.h"
0006 #include "ImageStore.h"
0007 #include "RemoteInterface.h"
0008 #include "ScreenInfo.h"
0009 #include "Settings.h"
0010 #include <QPainter>
0011 
0012 using namespace RemoteControl;
0013 
0014 RemoteImage::RemoteImage(QQuickItem *parent)
0015     : QQuickPaintedItem(parent)
0016 {
0017 }
0018 
0019 void RemoteImage::paint(QPainter *painter)
0020 {
0021     painter->drawImage(0, 0, m_image);
0022 }
0023 
0024 int RemoteImage::imageId() const
0025 {
0026     return m_imageId;
0027 }
0028 
0029 QSize RemoteImage::size() const
0030 {
0031     if (m_type == ViewType::Images)
0032         return ScreenInfo::instance().viewSize();
0033     else
0034         return QSize(width(), height());
0035 }
0036 
0037 void RemoteImage::setLabel(const QString &label)
0038 {
0039     if (label != m_label) {
0040         m_label = label;
0041         Q_EMIT labelChanged();
0042     }
0043 }
0044 
0045 void RemoteImage::setImage(const QImage &image)
0046 {
0047     m_image = image;
0048     setWidth(image.width());
0049     setHeight(image.height());
0050     update();
0051 }
0052 
0053 void RemoteImage::setImageId(int imageId)
0054 {
0055     if (m_imageId != imageId) {
0056         m_imageId = imageId;
0057         Q_EMIT imageIdChanged();
0058     }
0059 }
0060 
0061 void RemoteImage::loadFullSize()
0062 {
0063     if (!m_hasFullSizedImage) {
0064         ImageStore::instance().requestImage(this, m_imageId, QSize(), m_type);
0065         m_hasFullSizedImage = true;
0066     }
0067 }
0068 
0069 void RemoteImage::componentComplete()
0070 {
0071     QQuickPaintedItem::componentComplete();
0072     requestImage();
0073     if (m_type != ViewType::Images)
0074         connect(this, &RemoteImage::widthChanged, this, &RemoteImage::requestImage, Qt::QueuedConnection);
0075 }
0076 
0077 void RemoteImage::requestImage()
0078 {
0079     if (!isComponentComplete())
0080         return;
0081     if (m_image.size() == size() && m_type != ViewType::Images)
0082         return;
0083 
0084     if (m_imageId == DISCOVERYID)
0085         m_image = RemoteInterface::instance().discoveryImage().scaled(size(), Qt::KeepAspectRatio);
0086     else {
0087         m_image = {};
0088         ImageStore::instance().requestImage(this, m_imageId, size(), m_type);
0089     }
0090     update();
0091 }
0092 
0093 #include "moc_RemoteImage.cpp"