aboutsummaryrefslogtreecommitdiff
path: root/preview_thread.py
blob: e3e82796195a88aa4703a3341119223b06cd8442 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
from PyQt4 import QtCore, QtGui, uic
from PyQt4.QtCore import pyqtSignal, pyqtSlot
from PIL import Image
from PIL.ImageQt import ImageQt
import core
from queue import Queue, Empty
import os
from copy import copy


class Worker(QtCore.QObject):

    imageCreated = pyqtSignal(['QImage'])

    def __init__(self, parent=None, queue=None):
        QtCore.QObject.__init__(self)
        parent.newTask.connect(self.createPreviewImage)
        parent.processTask.connect(self.process)
        self.parent = parent
        self.core = core.Core()
        self.queue = queue
        self.core.settings = parent.settings
        self.stackedWidget = parent.window.stackedWidget
        self.background = Image.new("RGBA", (1920, 1080), (0, 0, 0, 0))
        self.background.paste(Image.open(os.path.join(
            os.path.dirname(os.path.realpath(__file__)), "background.png")))

    @pyqtSlot(str, list)
    def createPreviewImage(self, components):
        dic = {
          "components": components,
        }
        self.queue.put(dic)

    @pyqtSlot()
    def process(self):
        try:
            nextPreviewInformation = self.queue.get(block=False)
            while self.queue.qsize() >= 2:
                try:
                    self.queue.get(block=False)
                except Empty:
                    continue

            width = int(self.core.settings.value('outputWidth'))
            height = int(self.core.settings.value('outputHeight'))
            frame = copy(self.background)
            frame = frame.resize((width, height))

            components = nextPreviewInformation["components"]
            for component in reversed(components):
                frame = Image.alpha_composite(
                    frame, component.previewRender(self))

            self._image = ImageQt(frame)
            self.imageCreated.emit(QtGui.QImage(self._image))

        except Empty:
            True