Merge lp:~mrqtros/ubuntu-docviewer-app/ubuntu-docviewer-app-renderengine-move into lp:ubuntu-docviewer-app

Proposed by Roman Shchekin
Status: Merged
Approved by: Stefano Verzegnassi
Approved revision: 240
Merged at revision: 240
Proposed branch: lp:~mrqtros/ubuntu-docviewer-app/ubuntu-docviewer-app-renderengine-move
Merge into: lp:ubuntu-docviewer-app
Diff against target: 694 lines (+283/-269)
17 files modified
po/com.ubuntu.docviewer.pot (+4/-4)
src/app/CMakeLists.txt (+2/-0)
src/app/renderengine.cpp (+92/-0)
src/app/renderengine.h (+58/-0)
src/app/rendertask.cpp (+1/-0)
src/app/rendertask.h (+38/-0)
src/plugin/libreofficetoolkit-qml-plugin/CMakeLists.txt (+1/-2)
src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.cpp (+1/-1)
src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.h (+1/-1)
src/plugin/libreofficetoolkit-qml-plugin/lopartsmodel.h (+1/-1)
src/plugin/libreofficetoolkit-qml-plugin/lorendertask.cpp (+25/-0)
src/plugin/libreofficetoolkit-qml-plugin/lorendertask.h (+57/-0)
src/plugin/libreofficetoolkit-qml-plugin/loview.h (+2/-2)
src/plugin/libreofficetoolkit-qml-plugin/renderengine.cpp (+0/-92)
src/plugin/libreofficetoolkit-qml-plugin/renderengine.h (+0/-58)
src/plugin/libreofficetoolkit-qml-plugin/rendertask.cpp (+0/-25)
src/plugin/libreofficetoolkit-qml-plugin/rendertask.h (+0/-83)
To merge this branch: bzr merge lp:~mrqtros/ubuntu-docviewer-app/ubuntu-docviewer-app-renderengine-move
Reviewer Review Type Date Requested Status
Stefano Verzegnassi Approve
Jenkins Bot continuous-integration Approve
Review via email: mp+281328@code.launchpad.net

Commit message

RenderEngine now become application-wide tool

Description of the change

RenderEngine now become application-wide tool. This refactoring is required for easy transition to asynchonious PDF rendering.

To post a comment you must log in.
Revision history for this message
Jenkins Bot (ubuntu-core-apps-jenkins-bot) wrote :
review: Approve (continuous-integration)
Revision history for this message
Stefano Verzegnassi (verzegnassi-stefano) wrote :

LGTM. Thanks!

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'po/com.ubuntu.docviewer.pot'
--- po/com.ubuntu.docviewer.pot 2015-12-02 15:12:15 +0000
+++ po/com.ubuntu.docviewer.pot 2015-12-23 21:30:11 +0000
@@ -8,7 +8,7 @@
8msgstr ""8msgstr ""
9"Project-Id-Version: \n"9"Project-Id-Version: \n"
10"Report-Msgid-Bugs-To: \n"10"Report-Msgid-Bugs-To: \n"
11"POT-Creation-Date: 2015-12-02 16:11+0100\n"11"POT-Creation-Date: 2015-12-12 13:04+0300\n"
12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"12"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"13"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14"Language-Team: LANGUAGE <LL@li.org>\n"14"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -211,7 +211,7 @@
211msgstr ""211msgstr ""
212212
213#: ../src/app/qml/documentPage/DocumentPage.qml:23213#: ../src/app/qml/documentPage/DocumentPage.qml:23
214#: /tmp/build-ubuntu-docviewer-app-Desktop-Default/po/com.ubuntu.docviewer.desktop.in.in.h:3214#: /home/qtros/dev/ubuntu-docviewer-app-uitk-13-ethalone-build/po/com.ubuntu.docviewer.desktop.in.in.h:3
215msgid "Documents"215msgid "Documents"
216msgstr ""216msgstr ""
217217
@@ -435,10 +435,10 @@
435msgid "copy %1"435msgid "copy %1"
436msgstr ""436msgstr ""
437437
438#: /tmp/build-ubuntu-docviewer-app-Desktop-Default/po/com.ubuntu.docviewer.desktop.in.in.h:1438#: /home/qtros/dev/ubuntu-docviewer-app-uitk-13-ethalone-build/po/com.ubuntu.docviewer.desktop.in.in.h:1
439msgid "Document Viewer"439msgid "Document Viewer"
440msgstr ""440msgstr ""
441441
442#: /tmp/build-ubuntu-docviewer-app-Desktop-Default/po/com.ubuntu.docviewer.desktop.in.in.h:2442#: /home/qtros/dev/ubuntu-docviewer-app-uitk-13-ethalone-build/po/com.ubuntu.docviewer.desktop.in.in.h:2
443msgid "documents;viewer;pdf;reader;"443msgid "documents;viewer;pdf;reader;"
444msgstr ""444msgstr ""
445445
=== modified file 'src/app/CMakeLists.txt'
--- src/app/CMakeLists.txt 2015-11-30 12:12:10 +0000
+++ src/app/CMakeLists.txt 2015-12-23 21:30:11 +0000
@@ -22,6 +22,8 @@
2222
23set(docviewer_SRCS23set(docviewer_SRCS
24 main.cpp24 main.cpp
25 renderengine.cpp
26 rendertask.cpp
25 ${QML_SRCS}27 ${QML_SRCS}
26)28)
2729
2830
=== added file 'src/app/renderengine.cpp'
--- src/app/renderengine.cpp 1970-01-01 00:00:00 +0000
+++ src/app/renderengine.cpp 2015-12-23 21:30:11 +0000
@@ -0,0 +1,92 @@
1#include "renderengine.h"
2#include <QtConcurrent/QtConcurrent>
3#include <QThread>
4
5RenderEngine* RenderEngine::s_instance = nullptr;
6
7RenderEngine::RenderEngine():
8 QObject(nullptr)
9 ,m_activeTaskCount(0)
10 ,m_lastTask(nullptr)
11{
12 int itc = QThread::idealThreadCount();
13 m_idealThreadCount = itc == -1 ? DefaultIdealThreadCount : itc;
14
15 // For QMetaObject::invoke.
16 qRegisterMetaType<AbstractRenderTask*>();
17}
18
19void RenderEngine::enqueueTask(AbstractRenderTask *task)
20{
21 m_queue.enqueue(task);
22 doNextTask();
23}
24
25void RenderEngine::dequeueTask(int id)
26{
27 for (int i = 0; i < m_queue.size(); i++) {
28 auto task = m_queue.at(i);
29 if (task->id() == id) {
30 m_queue.removeAt(i);
31 disposeLater(task);
32 break;
33 }
34 }
35}
36
37void RenderEngine::internalRenderCallback(AbstractRenderTask* task, QImage img)
38{
39 m_activeTaskCount--;
40
41 if (!m_activeTaskCount) {
42 m_lastTask = nullptr;
43 doDispose();
44 }
45
46 // Notify about result.
47 emit taskRenderFinished(task, img);
48
49 doNextTask();
50 disposeLater(task);
51}
52
53void RenderEngine::disposeLater(AbstractRenderTask *task)
54{
55 m_disposedTasks.append(task);
56}
57
58void RenderEngine::doDispose()
59{
60 for (int i = 0; i < m_disposedTasks.size(); ++i)
61 delete m_disposedTasks.at(i);
62 m_disposedTasks.clear();
63}
64
65void RenderEngine::doNextTask()
66{
67#ifdef DEBUG_VERBOSE
68 qDebug() << " ---- doNextTask" << m_activeTaskCount << m_queue.count();
69#endif
70
71 // Check for too much threads or empty queue.
72 if (m_activeTaskCount >= m_idealThreadCount || !m_queue.count())
73 return;
74
75 AbstractRenderTask* task = m_queue.head();
76
77 // If some tasks already in progress, we should ask task about
78 // compatibility of parallel execution with last the task.
79 if (m_activeTaskCount && !task->canBeRunInParallel(m_lastTask))
80 return;
81
82 task->prepare();
83
84 m_activeTaskCount++;
85 m_lastTask = m_queue.dequeue();
86
87 QtConcurrent::run( [=] {
88 QImage img = task->doWork();
89 QMetaObject::invokeMethod(this, "internalRenderCallback",
90 Q_ARG(AbstractRenderTask*, task), Q_ARG(QImage, img));
91 });
92}
093
=== added file 'src/app/renderengine.h'
--- src/app/renderengine.h 1970-01-01 00:00:00 +0000
+++ src/app/renderengine.h 2015-12-23 21:30:11 +0000
@@ -0,0 +1,58 @@
1#ifndef RENDERENGINE_H
2#define RENDERENGINE_H
3
4#include <QObject>
5#include <QImage>
6#include <QSharedPointer>
7#include <QHash>
8#include <QQueue>
9#include <QAtomicInt>
10#include <QList>
11
12//#include "lodocument.h"
13#include "rendertask.h"
14
15class RenderEngine : public QObject
16{
17 Q_OBJECT
18 Q_DISABLE_COPY(RenderEngine)
19
20 static RenderEngine* s_instance;
21 RenderEngine();
22
23 const int DefaultIdealThreadCount = 2;
24
25public:
26 void enqueueTask(AbstractRenderTask* task); // Takes ownership.
27 void dequeueTask(int id);
28
29 static RenderEngine* instance() {
30 if(!s_instance)
31 s_instance = new RenderEngine();
32 return s_instance;
33 }
34
35 static int getNextId() {
36 static int idCounter = 0xDEAD0000;
37 return idCounter++;
38 }
39
40Q_SIGNALS:
41 void taskRenderFinished(AbstractRenderTask* task, QImage img);
42
43private:
44 Q_INVOKABLE void internalRenderCallback(AbstractRenderTask* task, QImage img);
45 void doNextTask();
46 void disposeLater(AbstractRenderTask* task); // Delayed deletion, must be used in pair with "doDispose".
47 void doDispose(); // Deletes marked objects (disposeLater).
48
49private:
50 QQueue<AbstractRenderTask*> m_queue;
51 int m_activeTaskCount;
52 int m_idealThreadCount;
53
54 AbstractRenderTask* m_lastTask; // WARNING: valid only when: m_activeTaskCount > 0.
55 QList<AbstractRenderTask*> m_disposedTasks;
56};
57
58#endif // RENDERENGINE_H
059
=== added file 'src/app/rendertask.cpp'
--- src/app/rendertask.cpp 1970-01-01 00:00:00 +0000
+++ src/app/rendertask.cpp 2015-12-23 21:30:11 +0000
@@ -0,0 +1,1 @@
1#include "rendertask.h"
02
=== added file 'src/app/rendertask.h'
--- src/app/rendertask.h 1970-01-01 00:00:00 +0000
+++ src/app/rendertask.h 2015-12-23 21:30:11 +0000
@@ -0,0 +1,38 @@
1#ifndef RENDERTASK_H
2#define RENDERTASK_H
3
4#include <QObject>
5#include <QImage>
6#include <QSharedPointer>
7#include <QHash>
8#include <QQueue>
9
10/* Required for super-fast type detection.
11 * NOTE: only leaf nodes in inheritance tree have correct types.
12 */
13enum RenderTaskType
14{
15 RttUnknown = 0x0,
16 RttTile = 0x1,
17 RttImpressThumbnail = 0x2,
18 RttPdfPage = 0x3
19};
20
21class AbstractRenderTask
22{
23public:
24 virtual RenderTaskType type() { return RttUnknown; }
25 virtual QImage doWork() = 0 ;
26 virtual ~AbstractRenderTask() { }
27 virtual bool canBeRunInParallel(AbstractRenderTask*) { return true; }
28 virtual void prepare() = 0 ;
29
30 int id() { return m_id; }
31 void setId(int i) { m_id = i; }
32protected:
33 int m_id;
34};
35
36Q_DECLARE_METATYPE(AbstractRenderTask*)
37
38#endif // RENDERTASK_H
039
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/CMakeLists.txt'
--- src/plugin/libreofficetoolkit-qml-plugin/CMakeLists.txt 2015-11-22 17:28:09 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/CMakeLists.txt 2015-12-23 21:30:11 +0000
@@ -24,8 +24,7 @@
24 sgtileitem.cpp24 sgtileitem.cpp
25 lopartsimageprovider.cpp25 lopartsimageprovider.cpp
26 lopartsmodel.cpp26 lopartsmodel.cpp
27 renderengine.cpp27 lorendertask.cpp
28 rendertask.cpp
29 ${QML_SRCS}28 ${QML_SRCS}
30)29)
3130
3231
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.cpp'
--- src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.cpp 2015-11-28 22:11:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.cpp 2015-12-23 21:30:11 +0000
@@ -16,7 +16,7 @@
1616
17#include "lopartsimageprovider.h"17#include "lopartsimageprovider.h"
18#include "lodocument.h"18#include "lodocument.h"
19#include "renderengine.h"19#include "../../app/renderengine.h"
2020
21LOPartsImageProvider::LOPartsImageProvider(const QSharedPointer<LODocument>& d)21LOPartsImageProvider::LOPartsImageProvider(const QSharedPointer<LODocument>& d)
22 : QQuickImageProvider(QQuickImageProvider::Image),22 : QQuickImageProvider(QQuickImageProvider::Image),
2323
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.h'
--- src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.h 2015-11-28 22:11:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/lopartsimageprovider.h 2015-12-23 21:30:11 +0000
@@ -23,7 +23,7 @@
23#include <QHash>23#include <QHash>
24#include <QDebug>24#include <QDebug>
2525
26#include "rendertask.h"26#include "lorendertask.h"
2727
28class LODocument;28class LODocument;
2929
3030
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/lopartsmodel.h'
--- src/plugin/libreofficetoolkit-qml-plugin/lopartsmodel.h 2015-11-28 19:19:26 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/lopartsmodel.h 2015-12-23 21:30:11 +0000
@@ -22,7 +22,7 @@
22#include <QHash>22#include <QHash>
23#include <QSharedPointer>23#include <QSharedPointer>
2424
25#include "renderengine.h"25#include "../../app/renderengine.h"
2626
27class LODocument;27class LODocument;
2828
2929
=== added file 'src/plugin/libreofficetoolkit-qml-plugin/lorendertask.cpp'
--- src/plugin/libreofficetoolkit-qml-plugin/lorendertask.cpp 1970-01-01 00:00:00 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/lorendertask.cpp 2015-12-23 21:30:11 +0000
@@ -0,0 +1,25 @@
1#include "lorendertask.h"
2
3bool LoRenderTask::canBeRunInParallel(AbstractRenderTask* prevTask)
4{
5 Q_ASSERT(prevTask != nullptr);
6 if (prevTask->type() == RttTile || prevTask->type() == RttImpressThumbnail) {
7 LoRenderTask* loTask = static_cast<LoRenderTask*>(prevTask);
8
9 // Another document or the same part in the same document can be run parallel.
10 return (loTask->document() != m_document ||
11 loTask->part() == m_part);
12 }
13
14 return true;
15}
16
17QImage TileRenderTask::doWork()
18{
19 return m_document->paintTile(m_area.size(), m_area, m_zoom);
20}
21
22QImage ThumbnailRenderTask::doWork()
23{
24 return m_document->paintThumbnail(m_size);
25}
026
=== added file 'src/plugin/libreofficetoolkit-qml-plugin/lorendertask.h'
--- src/plugin/libreofficetoolkit-qml-plugin/lorendertask.h 1970-01-01 00:00:00 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/lorendertask.h 2015-12-23 21:30:11 +0000
@@ -0,0 +1,57 @@
1#ifndef LORENDERTASK_H
2#define LORENDERTASK_H
3
4#include <QObject>
5#include <QImage>
6#include <QSharedPointer>
7#include <QHash>
8#include <QQueue>
9#include <QAtomicInt>
10
11#include "../../app/rendertask.h"
12#include "lodocument.h"
13
14
15class LoRenderTask : public AbstractRenderTask
16{
17public:
18 virtual bool canBeRunInParallel(AbstractRenderTask* prevTask);
19 virtual void prepare() { m_document->setDocumentPart(m_part); }
20
21 int part() { return m_part; }
22 void setPart(int p) { m_part = p; }
23 QSharedPointer<LODocument> document() { return m_document; }
24 void setDocument(QSharedPointer<LODocument> d) { m_document = d; }
25protected:
26 int m_part;
27 QSharedPointer<LODocument> m_document;
28};
29
30class TileRenderTask : public LoRenderTask
31{
32public:
33 virtual RenderTaskType type() { return RttTile; }
34 virtual QImage doWork();
35
36 QRect area() { return m_area; }
37 void setArea(const QRect& a) { m_area = a; }
38 qreal zoom() { return m_zoom; }
39 void setZoom(qreal z) { m_zoom = z; }
40protected:
41 QRect m_area;
42 qreal m_zoom;
43};
44
45class ThumbnailRenderTask : public LoRenderTask
46{
47public:
48 virtual RenderTaskType type() { return RttImpressThumbnail; }
49 virtual QImage doWork();
50
51 qreal size() { return m_size; }
52 void setSize(qreal s) { m_size = s; }
53protected:
54 qreal m_size;
55};
56
57#endif // LORENDERTASK_H
058
=== modified file 'src/plugin/libreofficetoolkit-qml-plugin/loview.h'
--- src/plugin/libreofficetoolkit-qml-plugin/loview.h 2015-11-28 22:11:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/loview.h 2015-12-23 21:30:11 +0000
@@ -24,8 +24,8 @@
24#include <QQmlEngine>24#include <QQmlEngine>
2525
26#include "loerror.h"26#include "loerror.h"
27#include "rendertask.h"27#include "lorendertask.h"
28#include "renderengine.h"28#include "../../app/renderengine.h"
29#include "lopartsmodel.h"29#include "lopartsmodel.h"
30#include "lopartsimageprovider.h"30#include "lopartsimageprovider.h"
3131
3232
=== removed file 'src/plugin/libreofficetoolkit-qml-plugin/renderengine.cpp'
--- src/plugin/libreofficetoolkit-qml-plugin/renderengine.cpp 2015-11-28 22:11:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/renderengine.cpp 1970-01-01 00:00:00 +0000
@@ -1,92 +0,0 @@
1#include "renderengine.h"
2#include <QtConcurrent/QtConcurrent>
3#include <QThread>
4
5RenderEngine* RenderEngine::s_instance = nullptr;
6
7RenderEngine::RenderEngine():
8 QObject(nullptr)
9 ,m_activeTaskCount(0)
10 ,m_lastTask(nullptr)
11{
12 int itc = QThread::idealThreadCount();
13 m_idealThreadCount = itc == -1 ? DefaultIdealThreadCount : itc;
14
15 // For QMetaObject::invoke.
16 qRegisterMetaType<AbstractRenderTask*>();
17}
18
19void RenderEngine::enqueueTask(AbstractRenderTask *task)
20{
21 m_queue.enqueue(task);
22 doNextTask();
23}
24
25void RenderEngine::dequeueTask(int id)
26{
27 for (int i = 0; i < m_queue.size(); i++) {
28 auto task = m_queue.at(i);
29 if (task->id() == id) {
30 m_queue.removeAt(i);
31 disposeLater(task);
32 break;
33 }
34 }
35}
36
37void RenderEngine::internalRenderCallback(AbstractRenderTask* task, QImage img)
38{
39 m_activeTaskCount--;
40
41 if (!m_activeTaskCount) {
42 m_lastTask = nullptr;
43 doDispose();
44 }
45
46 // Notify about result.
47 emit taskRenderFinished(task, img);
48
49 doNextTask();
50 disposeLater(task);
51}
52
53void RenderEngine::disposeLater(AbstractRenderTask *task)
54{
55 m_disposedTasks.append(task);
56}
57
58void RenderEngine::doDispose()
59{
60 for (int i = 0; i < m_disposedTasks.size(); ++i)
61 delete m_disposedTasks.at(i);
62 m_disposedTasks.clear();
63}
64
65void RenderEngine::doNextTask()
66{
67#ifdef DEBUG_VERBOSE
68 qDebug() << " ---- doNextTask" << m_activeTaskCount << m_queue.count();
69#endif
70
71 // Check for too much threads or empty queue.
72 if (m_activeTaskCount >= m_idealThreadCount || !m_queue.count())
73 return;
74
75 AbstractRenderTask* task = m_queue.head();
76
77 // If some tasks already in progress, we should ask task about
78 // compatibility of parallel execution with last the task.
79 if (m_activeTaskCount && !task->canBeRunInParallel(m_lastTask))
80 return;
81
82 task->prepare();
83
84 m_activeTaskCount++;
85 m_lastTask = m_queue.dequeue();
86
87 QtConcurrent::run( [=] {
88 QImage img = task->doWork();
89 QMetaObject::invokeMethod(this, "internalRenderCallback",
90 Q_ARG(AbstractRenderTask*, task), Q_ARG(QImage, img));
91 });
92}
930
=== removed file 'src/plugin/libreofficetoolkit-qml-plugin/renderengine.h'
--- src/plugin/libreofficetoolkit-qml-plugin/renderengine.h 2015-11-28 22:11:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/renderengine.h 1970-01-01 00:00:00 +0000
@@ -1,58 +0,0 @@
1#ifndef RENDERENGINE_H
2#define RENDERENGINE_H
3
4#include <QObject>
5#include <QImage>
6#include <QSharedPointer>
7#include <QHash>
8#include <QQueue>
9#include <QAtomicInt>
10#include <QList>
11
12#include "lodocument.h"
13#include "rendertask.h"
14
15class RenderEngine : public QObject
16{
17 Q_OBJECT
18 Q_DISABLE_COPY(RenderEngine)
19
20 static RenderEngine* s_instance;
21 RenderEngine();
22
23 const int DefaultIdealThreadCount = 2;
24
25public:
26 void enqueueTask(AbstractRenderTask* task); // Takes ownership.
27 void dequeueTask(int id);
28
29 static RenderEngine* instance() {
30 if(!s_instance)
31 s_instance = new RenderEngine();
32 return s_instance;
33 }
34
35 static int getNextId() {
36 static int idCounter = 0xDEAD0000;
37 return idCounter++;
38 }
39
40Q_SIGNALS:
41 void taskRenderFinished(AbstractRenderTask* task, QImage img);
42
43private:
44 Q_INVOKABLE void internalRenderCallback(AbstractRenderTask* task, QImage img);
45 void doNextTask();
46 void disposeLater(AbstractRenderTask* task); // Delayed deletion, must be used in pair with "doDispose".
47 void doDispose(); // Deletes marked objects (disposeLater).
48
49private:
50 QQueue<AbstractRenderTask*> m_queue;
51 int m_activeTaskCount;
52 int m_idealThreadCount;
53
54 AbstractRenderTask* m_lastTask; // WARNING: valid only when: m_activeTaskCount > 0.
55 QList<AbstractRenderTask*> m_disposedTasks;
56};
57
58#endif // RENDERENGINE_H
590
=== removed file 'src/plugin/libreofficetoolkit-qml-plugin/rendertask.cpp'
--- src/plugin/libreofficetoolkit-qml-plugin/rendertask.cpp 2015-11-28 21:13:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/rendertask.cpp 1970-01-01 00:00:00 +0000
@@ -1,25 +0,0 @@
1#include "rendertask.h"
2
3bool LoRenderTask::canBeRunInParallel(AbstractRenderTask* prevTask)
4{
5 Q_ASSERT(prevTask != nullptr);
6 if (prevTask->type() == RttTile || prevTask->type() == RttImpressThumbnail) {
7 LoRenderTask* loTask = static_cast<LoRenderTask*>(prevTask);
8
9 // Another document or the same part in the same document can be run parallel.
10 return (loTask->document() != m_document ||
11 loTask->part() == m_part);
12 }
13
14 return true;
15}
16
17QImage TileRenderTask::doWork()
18{
19 return m_document->paintTile(m_area.size(), m_area, m_zoom);
20}
21
22QImage ThumbnailRenderTask::doWork()
23{
24 return m_document->paintThumbnail(m_size);
25}
260
=== removed file 'src/plugin/libreofficetoolkit-qml-plugin/rendertask.h'
--- src/plugin/libreofficetoolkit-qml-plugin/rendertask.h 2015-11-28 22:11:54 +0000
+++ src/plugin/libreofficetoolkit-qml-plugin/rendertask.h 1970-01-01 00:00:00 +0000
@@ -1,83 +0,0 @@
1#ifndef RENDERTASK_H
2#define RENDERTASK_H
3
4#include <QObject>
5#include <QImage>
6#include <QSharedPointer>
7#include <QHash>
8#include <QQueue>
9#include <QAtomicInt>
10
11#include "lodocument.h"
12
13/* Required for super-fast type detection.
14 * NOTE: only leaf nodes in inheritance tree have correct types.
15 */
16enum RenderTaskType
17{
18 RttUnknown = 0x0,
19 RttTile = 0x1,
20 RttImpressThumbnail = 0x2,
21 RttPdfPage = 0x3
22};
23
24class AbstractRenderTask
25{
26public:
27 virtual RenderTaskType type() { return RttUnknown; }
28 virtual QImage doWork() = 0 ;
29 virtual ~AbstractRenderTask() { }
30 virtual bool canBeRunInParallel(AbstractRenderTask*) { return true; }
31 virtual void prepare() = 0 ;
32
33 int id() { return m_id; }
34 void setId(int i) { m_id = i; }
35protected:
36 int m_id;
37};
38
39Q_DECLARE_METATYPE(AbstractRenderTask*)
40
41class LoRenderTask : public AbstractRenderTask
42{
43public:
44 virtual bool canBeRunInParallel(AbstractRenderTask* prevTask);
45 virtual void prepare() { m_document->setDocumentPart(m_part); }
46
47 int part() { return m_part; }
48 void setPart(int p) { m_part = p; }
49 QSharedPointer<LODocument> document() { return m_document; }
50 void setDocument(QSharedPointer<LODocument> d) { m_document = d; }
51protected:
52 int m_part;
53 QSharedPointer<LODocument> m_document;
54};
55
56class TileRenderTask : public LoRenderTask
57{
58public:
59 virtual RenderTaskType type() { return RttTile; }
60 virtual QImage doWork();
61
62 QRect area() { return m_area; }
63 void setArea(const QRect& a) { m_area = a; }
64 qreal zoom() { return m_zoom; }
65 void setZoom(qreal z) { m_zoom = z; }
66protected:
67 QRect m_area;
68 qreal m_zoom;
69};
70
71class ThumbnailRenderTask : public LoRenderTask
72{
73public:
74 virtual RenderTaskType type() { return RttImpressThumbnail; }
75 virtual QImage doWork();
76
77 qreal size() { return m_size; }
78 void setSize(qreal s) { m_size = s; }
79protected:
80 qreal m_size;
81};
82
83#endif // RENDERTASK_H

Subscribers

People subscribed via source and target branches