aboutsummaryrefslogtreecommitdiff
path: root/components/text.py
blob: 1f5e2221f40b8386eeef3c4b6f2547f39c5e4171 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
from PIL import Image, ImageDraw
from PyQt4.QtGui import QPainter, QColor, QFont
from PyQt4 import uic, QtGui, QtCore
from PIL.ImageQt import ImageQt
import os, io
from . import __base__


class Component(__base__.Component):
    '''Title Text'''
    def widget(self, parent):
        height = int(parent.settings.value('outputHeight'))
        width = int(parent.settings.value('outputWidth'))
        self.parent = parent
        self.textColor = (255,255,255)
        self.title = 'Text'
        self.titleFont = None
        self.alignment = 1
        self.fontSize = height / 16
        self.xPosition = width / 2
        self.yPosition = height / 2
        
        page = uic.loadUi(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'text.ui'))
        page.comboBox_textAlign.addItem("Left")
        page.comboBox_textAlign.addItem("Middle")
        page.comboBox_textAlign.addItem("Right")
        page.comboBox_textAlign.setCurrentIndex(1)

        page.spinBox_fontSize.setValue(int(int(parent.settings.value("outputHeight")) / 14 ))
        page.spinBox_xTextAlign.setValue(int(int(parent.settings.value('outputWidth'))/2))
        page.spinBox_yTextAlign.setValue(int(int(parent.settings.value('outputHeight'))/2))

        page.lineEdit_textColor.setText('%s,%s,%s' % self.textColor)
        page.pushButton_textColor.clicked.connect(lambda: self.pickColor())
        btnStyle = "QPushButton { background-color : %s; outline: none; }" % QColor(*self.textColor).name()
        page.pushButton_textColor.setStyleSheet(btnStyle)

        page.lineEdit_title.setText(self.title)
        if not self.titleFont == None: 
          page.fontComboBox_titleFont.setCurrentFont(QFont(self.titleFont))
        page.comboBox_textAlign.setCurrentIndex(int(self.alignment))
        page.spinBox_fontSize.setValue(int(self.fontSize))
        page.spinBox_xTextAlign.setValue(int(self.xPosition))
        page.spinBox_yTextAlign.setValue(int(self.yPosition))

        page.fontComboBox_titleFont.currentFontChanged.connect(self.update)
        page.lineEdit_title.textChanged.connect(self.update)
        page.comboBox_textAlign.currentIndexChanged.connect(self.update)
        page.spinBox_xTextAlign.valueChanged.connect(self.update)
        page.spinBox_yTextAlign.valueChanged.connect(self.update)
        page.spinBox_fontSize.valueChanged.connect(self.update)
        page.lineEdit_textColor.textChanged.connect(self.update)
        self.page = page
        return page

    def update(self):
        self.title = self.page.lineEdit_title.text()
        self.alignment = self.page.comboBox_textAlign.currentIndex()
        self.titleFont = self.page.fontComboBox_titleFont.currentFont()
        self.fontSize = self.page.spinBox_fontSize.value()
        self.xPosition = self.page.spinBox_xTextAlign.value()
        self.yPosition = self.page.spinBox_yTextAlign.value()
        self.textColor = self.RGBFromString(self.page.lineEdit_textColor.text())
        fm = QtGui.QFontMetrics(self.titleFont)
        if self.alignment == 0:      #Left
           self.xPosition = self.xPosition
        if self.alignment == 1:      #Middle
           self.xPosition = self.xPosition - fm.width(self.title)/2
        if self.alignment == 2:      #Right
           self.xPosition = self.xPosition - fm.width(self.title)
        
        self.parent.drawPreview()
        
    def previewRender(self, previewWorker):
        width = int(previewWorker.core.settings.value('outputWidth'))
        height = int(previewWorker.core.settings.value('outputHeight'))
        return self.addText(width, height)
        
    def frameRender(self, moduleNo, frameNo):
        width = int(self.worker.core.settings.value('outputWidth'))
        height = int(self.worker.core.settings.value('outputHeight'))
        return self.addText(width, height)

    def addText(self, width, height):
        im = Image.new("RGBA", (width, height),(0,0,0,0))
        image = ImageQt(im)
   
        image1 = QtGui.QImage(image)
        painter = QPainter(image1)
        self.titleFont.setPixelSize(self.fontSize)
        painter.setFont(self.titleFont)
        painter.setPen(QColor(*self.textColor))

        fm = QtGui.QFontMetrics(self.titleFont)
        painter.drawText(self.xPosition, self.yPosition, self.title)
        painter.end()

        buffer = QtCore.QBuffer()
        buffer.open(QtCore.QIODevice.ReadWrite)
        image1.save(buffer, "PNG")

        strio = io.BytesIO()
        strio.write(buffer.data())
        buffer.close()
        strio.seek(0)
        return Image.open(strio)

    def pickColor(self):
        RGBstring, btnStyle = super().pickColor()
        self.page.lineEdit_textColor.setText(RGBstring)
        self.page.pushButton_textColor.setStyleSheet(btnStyle)