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"