From 998f74149553ac7a9e27d7c85cebceda2ef32c64 Mon Sep 17 00:00:00 2001
From: tassaron
Date: Sun, 6 Aug 2017 21:52:44 -0400
Subject: added stroke and font style options to Text component
---
src/components/text.py | 65 ++++++++++++++++++++++++++++++++++++++++++--------
1 file changed, 55 insertions(+), 10 deletions(-)
(limited to 'src/components/text.py')
diff --git a/src/components/text.py b/src/components/text.py
index c3f3bdc..f88f373 100644
--- a/src/components/text.py
+++ b/src/components/text.py
@@ -4,22 +4,20 @@ from PyQt5 import QtGui, QtCore, QtWidgets
import os
from component import Component
-from toolkit.frame import FramePainter
+from toolkit.frame import FramePainter, PaintColor
class Component(Component):
name = 'Title Text'
version = '1.0.1'
- def __init__(self, *args):
- super().__init__(*args)
- self.titleFont = QFont()
-
def widget(self, *args):
super().widget(*args)
self.textColor = (255, 255, 255)
+ self.strokeColor = (0, 0, 0)
self.title = 'Text'
self.alignment = 1
+ self.titleFont = QFont()
self.fontSize = self.height / 13.5
self.page.comboBox_textAlign.addItem("Left")
@@ -28,6 +26,7 @@ class Component(Component):
self.page.comboBox_textAlign.setCurrentIndex(int(self.alignment))
self.page.lineEdit_textColor.setText('%s,%s,%s' % self.textColor)
+ self.page.lineEdit_strokeColor.setText('%s,%s,%s' % self.strokeColor)
self.page.spinBox_fontSize.setValue(int(self.fontSize))
self.page.lineEdit_title.setText(self.title)
@@ -43,8 +42,16 @@ class Component(Component):
'fontSize': self.page.spinBox_fontSize,
'xPosition': self.page.spinBox_xTextAlign,
'yPosition': self.page.spinBox_yTextAlign,
+ 'fontStyle': self.page.comboBox_fontStyle,
+ 'stroke': self.page.spinBox_stroke,
+ 'strokeColor': self.page.lineEdit_strokeColor,
+ 'shadow': self.page.checkBox_shadow,
+ 'shadX': self.page.spinBox_shadX,
+ 'shadY': self.page.spinBox_shadY,
+ 'shadBlur': self.page.spinBox_shadBlur,
}, colorWidgets={
'textColor': self.page.pushButton_textColor,
+ 'strokeColor': self.page.pushButton_strokeColor,
}, relativeWidgets=[
'xPosition', 'yPosition', 'fontSize',
])
@@ -52,11 +59,23 @@ class Component(Component):
def update(self):
self.titleFont = self.page.fontComboBox_titleFont.currentFont()
+ if self.page.checkBox_shadow.isChecked():
+ self.page.label_shadX.setHidden(False)
+ self.page.spinBox_shadX.setHidden(False)
+ self.page.spinBox_shadY.setHidden(False)
+ self.page.label_shadBlur.setHidden(False)
+ self.page.spinBox_shadBlur.setHidden(False)
+ else:
+ self.page.label_shadX.setHidden(True)
+ self.page.spinBox_shadX.setHidden(True)
+ self.page.spinBox_shadY.setHidden(True)
+ self.page.label_shadBlur.setHidden(True)
+ self.page.spinBox_shadBlur.setHidden(True)
super().update()
def centerXY(self):
self.setRelativeWidget('xPosition', 0.5)
- self.setRelativeWidget('yPosition', 0.5)
+ self.setRelativeWidget('yPosition', 0.521)
def getXY(self):
'''Returns true x, y after considering alignment settings'''
@@ -101,13 +120,39 @@ class Component(Component):
return self.addText(self.width, self.height)
def addText(self, width, height):
+ font = self.titleFont
+ font.setPixelSize(self.fontSize)
+ font.setStyle(QFont.StyleNormal)
+ font.setWeight(QFont.Normal)
+ font.setCapitalization(QFont.MixedCase)
+ if self.fontStyle == 1:
+ font.setWeight(QFont.DemiBold)
+ if self.fontStyle == 2:
+ font.setWeight(QFont.Bold)
+ elif self.fontStyle == 3:
+ font.setStyle(QFont.StyleItalic)
+ elif self.fontStyle == 4:
+ font.setWeight(QFont.Bold)
+ font.setStyle(QFont.StyleItalic)
+ elif self.fontStyle == 5:
+ font.setStyle(QFont.StyleOblique)
+ elif self.fontStyle == 6:
+ font.setCapitalization(QFont.SmallCaps)
+
image = FramePainter(width, height)
- self.titleFont.setPixelSize(self.fontSize)
- image.setFont(self.titleFont)
- image.setPen(self.textColor)
x, y = self.getXY()
+ if self.stroke > 0:
+ outliner = QtGui.QPainterPathStroker()
+ outliner.setWidth(self.stroke)
+ path = QtGui.QPainterPath()
+ path.addText(x, y, font, self.title)
+ path = outliner.createStroke(path)
+ image.setBrush(PaintColor(*self.strokeColor))
+ image.drawPath(path)
+
+ image.setFont(font)
+ image.setPen(self.textColor)
image.drawText(x, y, self.title)
-
return image.finalize()
def commandHelp(self):
--
cgit v1.2.3
From 060a7dc2d263c0fd0e36e162943b8946df937bbd Mon Sep 17 00:00:00 2001
From: tassaron
Date: Mon, 7 Aug 2017 21:03:01 -0400
Subject: dropshadow option for Text component
---
src/components/text.py | 16 ++++++++++++++--
src/components/text.ui | 27 +++++++++++++++++++++++++++
2 files changed, 41 insertions(+), 2 deletions(-)
(limited to 'src/components/text.py')
diff --git a/src/components/text.py b/src/components/text.py
index f88f373..c50c812 100644
--- a/src/components/text.py
+++ b/src/components/text.py
@@ -1,4 +1,4 @@
-from PIL import Image, ImageDraw
+from PIL import ImageEnhance, ImageFilter, ImageChops
from PyQt5.QtGui import QColor, QFont
from PyQt5 import QtGui, QtCore, QtWidgets
import os
@@ -153,7 +153,19 @@ class Component(Component):
image.setFont(font)
image.setPen(self.textColor)
image.drawText(x, y, self.title)
- return image.finalize()
+
+ # turn QImage into Pillow frame
+ frame = image.finalize()
+ if self.shadow:
+ shadImg = ImageEnhance.Contrast(frame).enhance(0.0)
+ shadImg = shadImg.filter(ImageFilter.GaussianBlur(self.shadBlur))
+ shadImg = ImageChops.offset(shadImg, self.shadX, self.shadY)
+ shadImg.paste(frame, box=(0, 0), mask=frame)
+ frame = shadImg
+
+ return frame
+
+
def commandHelp(self):
print('Enter a string to use as centred white text:')
diff --git a/src/components/text.ui b/src/components/text.ui
index 5a7e831..13d3467 100644
--- a/src/components/text.ui
+++ b/src/components/text.ui
@@ -563,6 +563,15 @@
0
+
+ -1000
+
+
+ 1000
+
+
+ -4
+
-
@@ -573,6 +582,15 @@
0
+
+ -1000
+
+
+ 1000
+
+
+ 8
+
-
@@ -596,6 +614,15 @@
0
+
+ 99.000000000000000
+
+
+ 0.100000000000000
+
+
+ 5.000000000000000
+
-
--
cgit v1.2.3
From 354637d34c201b9389b9085889275d6850873d08 Mon Sep 17 00:00:00 2001
From: tassaron
Date: Tue, 8 Aug 2017 05:57:19 -0400
Subject: relative stroke px size & no Qt pen on stroke
---
src/components/text.py | 3 ++-
src/toolkit/frame.py | 7 +++++--
2 files changed, 7 insertions(+), 3 deletions(-)
(limited to 'src/components/text.py')
diff --git a/src/components/text.py b/src/components/text.py
index c50c812..46fb001 100644
--- a/src/components/text.py
+++ b/src/components/text.py
@@ -53,7 +53,7 @@ class Component(Component):
'textColor': self.page.pushButton_textColor,
'strokeColor': self.page.pushButton_strokeColor,
}, relativeWidgets=[
- 'xPosition', 'yPosition', 'fontSize',
+ 'xPosition', 'yPosition', 'fontSize', 'stroke'
])
self.centerXY()
@@ -147,6 +147,7 @@ class Component(Component):
path = QtGui.QPainterPath()
path.addText(x, y, font, self.title)
path = outliner.createStroke(path)
+ image.setPen(QtCore.Qt.NoPen)
image.setBrush(PaintColor(*self.strokeColor))
image.drawPath(path)
diff --git a/src/toolkit/frame.py b/src/toolkit/frame.py
index c007188..7e83d58 100644
--- a/src/toolkit/frame.py
+++ b/src/toolkit/frame.py
@@ -21,8 +21,11 @@ class FramePainter(QtGui.QPainter):
self.image = QtGui.QImage(ImageQt(image))
super().__init__(self.image)
- def setPen(self, RgbTuple):
- super().setPen(PaintColor(*RgbTuple))
+ def setPen(self, penStyle):
+ if type(penStyle) is tuple:
+ super().setPen(PaintColor(*penStyle))
+ else:
+ super().setPen(penStyle)
def finalize(self):
self.end()
--
cgit v1.2.3
From 4d0daa4336432948ba6543d4becaaa42425ecafd Mon Sep 17 00:00:00 2001
From: tassaron
Date: Tue, 8 Aug 2017 06:03:14 -0400
Subject: relative dropshadow
---
src/components/text.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
(limited to 'src/components/text.py')
diff --git a/src/components/text.py b/src/components/text.py
index 46fb001..f6bd17d 100644
--- a/src/components/text.py
+++ b/src/components/text.py
@@ -53,7 +53,8 @@ class Component(Component):
'textColor': self.page.pushButton_textColor,
'strokeColor': self.page.pushButton_strokeColor,
}, relativeWidgets=[
- 'xPosition', 'yPosition', 'fontSize', 'stroke'
+ 'xPosition', 'yPosition', 'fontSize',
+ 'stroke', 'shadX', 'shadY', 'shadBlur'
])
self.centerXY()
--
cgit v1.2.3
From 3ed84e1c3edba46fe8990544ef7e58fe8e3dd901 Mon Sep 17 00:00:00 2001
From: tassaron
Date: Tue, 8 Aug 2017 20:53:51 -0400
Subject: fixed incorrect outline for small-caps
---
src/components/text.py | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
(limited to 'src/components/text.py')
diff --git a/src/components/text.py b/src/components/text.py
index f6bd17d..4d4f5d3 100644
--- a/src/components/text.py
+++ b/src/components/text.py
@@ -146,7 +146,18 @@ class Component(Component):
outliner = QtGui.QPainterPathStroker()
outliner.setWidth(self.stroke)
path = QtGui.QPainterPath()
- path.addText(x, y, font, self.title)
+ if self.fontStyle == 6:
+ # PathStroker ignores smallcaps so we need this weird hack
+ path.addText(x, y, font, self.title[0])
+ fm = QtGui.QFontMetrics(font)
+ newX = x + fm.width(self.title[0])
+ strokeFont = self.page.fontComboBox_titleFont.currentFont()
+ strokeFont.setCapitalization(QFont.SmallCaps)
+ strokeFont.setPixelSize(int((self.fontSize / 7) * 5))
+ strokeFont.setLetterSpacing(QFont.PercentageSpacing, 139)
+ path.addText(newX, y, strokeFont, self.title[1:])
+ else:
+ path.addText(x, y, font, self.title)
path = outliner.createStroke(path)
image.setPen(QtCore.Qt.NoPen)
image.setBrush(PaintColor(*self.strokeColor))
@@ -167,8 +178,6 @@ class Component(Component):
return frame
-
-
def commandHelp(self):
print('Enter a string to use as centred white text:')
print(' "title=User Error"')
--
cgit v1.2.3