on xenial help sign in
render screenshot directly on surface
commit09bb3eb0af9f63f4900a53ec22358be26fe528b7 authorNick Dedekind <nicholas.dedekind@gmail.com> dateFri 18 Jul 2014, 14:12 (12 years ago) parent85f1506
4 files changed+18−47
tests/mocks/Unity/Application/ApplicationInfo.cpp+1−1 tests/mocks/Unity/Application/ApplicationManager.cpp+2−2 tests/mocks/Unity/Application/MirSurfaceItem.cpp+8−29 tests/mocks/Unity/Application/MirSurfaceItem.h+7−15
tests/mocks/Unity/Application/ApplicationInfo.cpp+1−1
@@ -84,7 +84,7 @@ void ApplicationInfo::createSurface()
8484 m_surface = new MirSurfaceItem(name(),
8585 MirSurfaceItem::Normal,
8686 fullscreen() ? MirSurfaceItem::Fullscreen : MirSurfaceItem::Maximized,
87− imageQml());
87+ screenshot());
8888 Q_EMIT surfaceChanged(m_surface);
8989 Q_EMIT SurfaceManager::singleton()->surfaceCreated(m_surface);
9090}
tests/mocks/Unity/Application/ApplicationManager.cpp+2−2
@@ -380,8 +380,8 @@ void ApplicationManager::generateQmlStrings(ApplicationInfo *application)
380380 .arg(application->icon().toString());
381381 application->setImageQml(imageQml);
382382
383− application->setScreenshot(QString("file://%1/Dash/graphics/phone/screenshots/%2.png").arg(qmlDirectory())
384− .arg(application->icon().toString()));
383+ application->setScreenshot(QString("file://%1/Dash/graphics/phone/screenshots/%2@12.png").arg(qmlDirectory())
384+ .arg(application->icon().toString()));
385385}
386386
387387void ApplicationManager::buildListOfAvailableApplications()
tests/mocks/Unity/Application/MirSurfaceItem.cpp+8−29
@@ -16,46 +16,25 @@
1616
1717#include "MirSurfaceItem.h"
1818
19−#include <QQmlEngine>
20−#include <QQmlComponent>
21−#include <QQmlContext>
22−#include <QTimer>
19+#include <QPainter>
2320
2421MirSurfaceItem::MirSurfaceItem(const QString& name,
2522 MirSurfaceItem::Type type,
2623 MirSurfaceItem::State state,
27− const QString& imageQml,
24+ const QUrl& screenshot,
2825 QQuickItem *parent)
29− : QQuickItem(parent)
26+ : QQuickPaintedItem(parent)
3027 , m_name(name)
3128 , m_type(type)
3229 , m_state(state)
33− , m_imageQml(imageQml)
34− , m_imageComponent(nullptr)
35− , m_imageItem(nullptr)
30+ , m_img(screenshot.isLocalFile() ? screenshot.toLocalFile() : screenshot.toString())
3631{
32+ setFillColor(Qt::white);
3733}
3834
39−void MirSurfaceItem::itemChange(ItemChange change, const ItemChangeData & value)
35+void MirSurfaceItem::paint(QPainter * painter)
4036{
41− QQuickItem::itemChange(change, value);
42−
43− Q_UNUSED(value)
44− if (change == QQuickItem::ItemParentHasChanged) {
45− createImage();
46− }
47−}
48−
49−void MirSurfaceItem::createImage()
50−{
51− if (!m_imageComponent) {
52− QQmlContext* context = QQmlEngine::contextForObject(parentItem());
53− if (!context) return;
54− m_imageComponent = new QQmlComponent(context->engine(), this);
55− m_imageComponent->setData(m_imageQml.toUtf8(), QUrl());
56− }
57− if (!m_imageItem) {
58− m_imageItem = qobject_cast<QQuickItem *>(m_imageComponent->create());
59− if (m_imageItem) m_imageItem->setParentItem(this);
37+ if (!m_img.isNull()) {
38+ painter->drawImage(contentsBoundingRect(), m_img, QRect(QPoint(0,0), m_img.size()));
6039 }
6140}
tests/mocks/Unity/Application/MirSurfaceItem.h+7−15
@@ -17,11 +17,10 @@
1717#ifndef MIRSURFACEITEM_H
1818#define MIRSURFACEITEM_H
1919
20−#include <QQuickItem>
20+#include <QQuickPaintedItem>
21+#include <QImage>
2122
22−class QQmlComponent;
23−
24−class MirSurfaceItem : public QQuickItem
23+class MirSurfaceItem : public QQuickPaintedItem
2524{
2625 Q_OBJECT
2726 Q_ENUMS(Type)
@@ -55,7 +54,7 @@ public:
5554 explicit MirSurfaceItem(const QString& name,
5655 Type type,
5756 State state,
58− QString const& imageQml,
57+ const QUrl& screenshot,
5958 QQuickItem *parent = 0);
6059
6160 //getters
@@ -65,26 +64,19 @@ public:
6564
6665 Q_INVOKABLE void release() {}
6766
67+ void paint(QPainter * painter) override;
68+
6869Q_SIGNALS:
6970 void typeChanged(Type);
7071 void stateChanged(State);
7172 void nameChanged(QString);
7273
73−protected:
74− void itemChange(ItemChange change, const ItemChangeData& value) override;
75−
76−private Q_SLOTS:
77− void createImage();
78−
7974private:
8075
8176 const QString m_name;
8277 const Type m_type;
8378 const State m_state;
84− const QString m_imageQml;
85−
86− QQmlComponent *m_imageComponent;
87− QQuickItem* m_imageItem;
79+ const QImage m_img;
8880};
8981
9082Q_DECLARE_METATYPE(MirSurfaceItem*)