New pastel theme added with pretty pictures, custom font etc.
@@ -82,23 +82,22 @@ class IdleMessage(QtWidgets.QFrame):
|
||||
def __init__(self):
|
||||
|
||||
super().__init__()
|
||||
self.setObjectName('IdleMessage')
|
||||
|
||||
self._message = 'Hit the button!'
|
||||
self._message_label = 'Hit the'
|
||||
self._message_button = 'Button!'
|
||||
|
||||
def _paintMessage(self, painter):
|
||||
self.initFrame()
|
||||
|
||||
f = self.font()
|
||||
f.setPixelSize(self.height() / 5)
|
||||
painter.setFont(f)
|
||||
def initFrame(self):
|
||||
|
||||
rect = self.rect()
|
||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._message)
|
||||
lbl = QtWidgets.QLabel(self._message_label)
|
||||
btn = QtWidgets.QPushButton(self._message_button)
|
||||
|
||||
def paintEvent(self, event):
|
||||
|
||||
painter = QtGui.QPainter(self)
|
||||
self._paintMessage(painter)
|
||||
painter.end()
|
||||
lay = QtWidgets.QVBoxLayout()
|
||||
lay.addWidget(lbl)
|
||||
lay.addWidget(btn)
|
||||
self.setLayout(lay)
|
||||
|
||||
|
||||
class GreeterMessage(QtWidgets.QFrame):
|
||||
@@ -106,34 +105,31 @@ class GreeterMessage(QtWidgets.QFrame):
|
||||
def __init__(self, num_x, num_y):
|
||||
|
||||
super().__init__()
|
||||
self.setObjectName('GreeterMessage')
|
||||
|
||||
self._title = 'Get ready!'
|
||||
self._text_title = 'Get ready!'
|
||||
self._text_button = 'Start countdown'
|
||||
if num_x * num_y > 1:
|
||||
self._text = ('Capturing {} pictures...'.format(num_x * num_y))
|
||||
self._text_label = ('for {} pictures...'.format(num_x * num_y))
|
||||
else:
|
||||
self._text = 'Starting the countdown...'
|
||||
self._text_label = ''
|
||||
|
||||
def _paintMessage(self, painter):
|
||||
self.initFrame()
|
||||
|
||||
f = self.font()
|
||||
def initFrame(self):
|
||||
|
||||
f.setPixelSize(self.height() / 5)
|
||||
painter.setFont(f)
|
||||
rect = QtCore.QRect(0, self.height() * 1 / 5,
|
||||
self.width(), self.height() * 3 / 10)
|
||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._title)
|
||||
ttl = QtWidgets.QLabel(self._text_title)
|
||||
ttl.setObjectName('title')
|
||||
btn = QtWidgets.QPushButton(self._text_button)
|
||||
btn.setObjectName('button')
|
||||
lbl = QtWidgets.QLabel(self._text_label)
|
||||
lbl.setObjectName('message')
|
||||
|
||||
f.setPixelSize(self.height() / 8)
|
||||
painter.setFont(f)
|
||||
rect = QtCore.QRect(0, self.height() * 3 / 5,
|
||||
self.width(), self.height() * 3 / 10)
|
||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._text)
|
||||
|
||||
def paintEvent(self, event):
|
||||
|
||||
painter = QtGui.QPainter(self)
|
||||
self._paintMessage(painter)
|
||||
painter.end()
|
||||
lay = QtWidgets.QVBoxLayout()
|
||||
lay.addWidget(ttl)
|
||||
lay.addWidget(btn)
|
||||
lay.addWidget(lbl)
|
||||
self.setLayout(lay)
|
||||
|
||||
|
||||
class PoseMessage(QtWidgets.QFrame):
|
||||
@@ -141,35 +137,22 @@ class PoseMessage(QtWidgets.QFrame):
|
||||
def __init__(self, num_picture, num_x, num_y):
|
||||
|
||||
super().__init__()
|
||||
self.setObjectName('PoseMessage')
|
||||
|
||||
self._title = 'Pose!'
|
||||
if num_x * num_y > 1:
|
||||
self._text = 'Picture {} of {}...'.format(num_picture,
|
||||
num_x * num_y)
|
||||
else:
|
||||
self._text = 'Taking a photo...'
|
||||
|
||||
def _paintMessage(self, painter):
|
||||
self.initFrame()
|
||||
|
||||
f = self.font()
|
||||
def initFrame(self):
|
||||
|
||||
f.setPixelSize(self.height() / 5)
|
||||
painter.setFont(f)
|
||||
rect = QtCore.QRect(0, self.height() * 1 / 5,
|
||||
self.width(), self.height() * 3 / 10)
|
||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._title)
|
||||
|
||||
f.setPixelSize(self.height() / 8)
|
||||
painter.setFont(f)
|
||||
rect = QtCore.QRect(0, self.height() * 3 / 5,
|
||||
self.width(), self.height() * 3 / 10)
|
||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._text)
|
||||
|
||||
def paintEvent(self, event):
|
||||
|
||||
painter = QtGui.QPainter(self)
|
||||
self._paintMessage(painter)
|
||||
painter.end()
|
||||
lbl = QtWidgets.QLabel(self._text)
|
||||
lay = QtWidgets.QVBoxLayout()
|
||||
lay.addWidget(lbl)
|
||||
self.setLayout(lay)
|
||||
|
||||
|
||||
class PictureMessage(QtWidgets.QFrame):
|
||||
@@ -177,6 +160,7 @@ class PictureMessage(QtWidgets.QFrame):
|
||||
def __init__(self, picture):
|
||||
|
||||
super().__init__()
|
||||
self.setObjectName('PictureMessage')
|
||||
|
||||
self._picture = picture
|
||||
|
||||
@@ -205,10 +189,20 @@ class WaitMessage(QtWidgets.QFrame):
|
||||
def __init__(self, message):
|
||||
|
||||
super().__init__()
|
||||
self.setObjectName('WaitMessage')
|
||||
|
||||
self._message = message
|
||||
self._text = message
|
||||
self._clock = Widgets.SpinningWaitClock()
|
||||
|
||||
self.initFrame()
|
||||
|
||||
def initFrame(self):
|
||||
|
||||
lbl = QtWidgets.QLabel(self._text)
|
||||
lay = QtWidgets.QVBoxLayout()
|
||||
lay.addWidget(lbl)
|
||||
self.setLayout(lay)
|
||||
|
||||
def showEvent(self, event):
|
||||
|
||||
self.startTimer(100)
|
||||
@@ -218,23 +212,12 @@ class WaitMessage(QtWidgets.QFrame):
|
||||
self._clock.value += 1
|
||||
self.update()
|
||||
|
||||
def _paintMessage(self, painter):
|
||||
|
||||
f = self.font()
|
||||
f.setPixelSize(self.height() / 8)
|
||||
painter.setFont(f)
|
||||
|
||||
rect = QtCore.QRect(0, self.height() * 3 / 5, self.width(),
|
||||
self.height() * 3 / 10)
|
||||
painter.drawText(rect, QtCore.Qt.AlignCenter, self._message)
|
||||
|
||||
def paintEvent(self, event):
|
||||
|
||||
offset = ((self.width() - self._clock.width()) // 2,
|
||||
(self.height() - self._clock.height()) // 2)
|
||||
|
||||
painter = QtGui.QPainter(self)
|
||||
self._paintMessage(painter)
|
||||
self._clock.render(painter, QtCore.QPoint(*offset),
|
||||
self._clock.visibleRegion(),
|
||||
QtWidgets.QWidget.DrawChildren)
|
||||
@@ -246,6 +229,7 @@ class CountdownMessage(QtWidgets.QFrame):
|
||||
def __init__(self, time, action):
|
||||
|
||||
super().__init__()
|
||||
self.setObjectName('CountdownMessage')
|
||||
|
||||
self._step_size = 50
|
||||
self._value = time * (1000 // self._step_size)
|
||||
@@ -309,7 +293,8 @@ class CountdownMessage(QtWidgets.QFrame):
|
||||
if self.picture is not None:
|
||||
|
||||
pix = QtGui.QPixmap.fromImage(self.picture)
|
||||
pix = pix.scaled(self.size(), QtCore.Qt.KeepAspectRatio,
|
||||
pix = pix.scaled(self.contentsRect().size(),
|
||||
QtCore.Qt.KeepAspectRatio,
|
||||
QtCore.Qt.FastTransformation)
|
||||
origin = ((self.width() - pix.width()) // 2,
|
||||
(self.height() - pix.height()) // 2)
|
||||
@@ -479,6 +464,10 @@ class Settings(QtWidgets.QFrame):
|
||||
idx = [x for x, m in enumerate(module_list) if m[0] == current_module]
|
||||
cb.setCurrentIndex(idx[0] if len(idx) > 0 else -1)
|
||||
|
||||
# Fix bug in Qt to allow changing the items in a stylesheet
|
||||
delegate = QtWidgets.QStyledItemDelegate()
|
||||
cb.setItemDelegate(delegate)
|
||||
|
||||
return cb
|
||||
|
||||
def createGuiSettings(self):
|
||||
@@ -645,11 +634,11 @@ class Settings(QtWidgets.QFrame):
|
||||
layout = QtWidgets.QFormLayout()
|
||||
layout.addRow('Number of shots per picture:', lay_num)
|
||||
layout.addRow('Size of assembled picture [px]:', lay_size)
|
||||
layout.addRow('Minimum distance between shots in picture [px]:',
|
||||
layout.addRow('Min. distance between shots [px]:',
|
||||
lay_dist)
|
||||
layout.addRow('Output directory (strftime directives possible):',
|
||||
layout.addRow('Output directory (strftime possible):',
|
||||
lay_file)
|
||||
layout.addRow('Basename of files (strftime directives possible):',
|
||||
layout.addRow('Basename of files (strftime possible):',
|
||||
basename)
|
||||
|
||||
widget = QtWidgets.QWidget()
|
||||
|
||||
@@ -21,6 +21,7 @@ import logging
|
||||
import os
|
||||
|
||||
from PyQt5 import QtCore
|
||||
from PyQt5 import QtGui
|
||||
from PyQt5 import QtWidgets
|
||||
|
||||
from PIL import ImageQt
|
||||
@@ -91,6 +92,12 @@ class PyQt5Gui(GuiSkeleton):
|
||||
self._app.setStyleSheet(stylesheet)
|
||||
self._gui = PyQt5MainWindow(self._cfg, self._handleKeypressEvent)
|
||||
|
||||
fonts = ['photobooth/gui/Qt5Gui/fonts/AmaticSC-Regular.ttf',
|
||||
'photobooth/gui/Qt5Gui/fonts/AmaticSC-Bold.ttf']
|
||||
self._fonts = QtGui.QFontDatabase()
|
||||
for font in fonts:
|
||||
self._fonts.addApplicationFont(font)
|
||||
|
||||
def _initReceiver(self):
|
||||
|
||||
self._receiver = Receiver.Receiver([self._conn])
|
||||
@@ -200,7 +207,7 @@ class PyQt5Gui(GuiSkeleton):
|
||||
self._disableTrigger()
|
||||
|
||||
num_pic = (self._cfg.getInt('Picture', 'num_x'),
|
||||
self._cfg.getInt('Picture', 'num_x'))
|
||||
self._cfg.getInt('Picture', 'num_y'))
|
||||
greeter_time = self._cfg.getInt('Photobooth', 'greeter_time') * 1000
|
||||
|
||||
self._setWidget(Frames.GreeterMessage(*num_pic))
|
||||
@@ -219,7 +226,7 @@ class PyQt5Gui(GuiSkeleton):
|
||||
def _showPose(self, state):
|
||||
|
||||
num_pic = (self._cfg.getInt('Picture', 'num_x'),
|
||||
self._cfg.getInt('Picture', 'num_x'))
|
||||
self._cfg.getInt('Picture', 'num_y'))
|
||||
self._setWidget(Frames.PoseMessage(state.num_picture, *num_pic))
|
||||
|
||||
def _showAssemble(self, state):
|
||||
@@ -267,8 +274,8 @@ class PyQt5MainWindow(QtWidgets.QMainWindow):
|
||||
if self._cfg.getBool('Gui', 'fullscreen'):
|
||||
self.showFullScreen()
|
||||
else:
|
||||
self.resize(self._cfg.getInt('Gui', 'width'),
|
||||
self._cfg.getInt('Gui', 'height'))
|
||||
self.setFixedSize(self._cfg.getInt('Gui', 'width'),
|
||||
self._cfg.getInt('Gui', 'height'))
|
||||
self.show()
|
||||
|
||||
def closeEvent(self, e):
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
|
||||
# Available style sheets as tuples of (style name, style file)
|
||||
styles = (('default', 'stylesheets/default.qss'),
|
||||
('dark', 'stylesheets/dark.qss'))
|
||||
('dark', 'stylesheets/dark.qss'),
|
||||
('pastel', 'stylesheets/pastel.qss'))
|
||||
|
||||
from .PyQt5Gui import PyQt5Gui # noqa
|
||||
|
||||
BIN
photobooth/gui/Qt5Gui/fonts/AmaticSC-Bold.ttf
Normal file
BIN
photobooth/gui/Qt5Gui/fonts/AmaticSC-Regular.ttf
Normal file
93
photobooth/gui/Qt5Gui/fonts/OFL.txt
Normal file
@@ -0,0 +1,93 @@
|
||||
Copyright 2015 The Amatic SC Project Authors (https://github.com/googlefonts/AmaticSC)
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
||||
BIN
photobooth/gui/Qt5Gui/images/arrow.png
Normal file
|
After Width: | Height: | Size: 12 KiB |
134
photobooth/gui/Qt5Gui/images/arrow.svg
Normal file
@@ -0,0 +1,134 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="199.6391mm"
|
||||
height="297.63135mm"
|
||||
viewBox="0 0 199.6391 297.63135"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="0.92.3 (unknown)"
|
||||
sodipodi:docname="arrow.svg">
|
||||
<defs
|
||||
id="defs2">
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Roughen"
|
||||
id="filter6254">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
numOctaves="3"
|
||||
seed="2"
|
||||
baseFrequency="0.011 0.018"
|
||||
result="turbulence"
|
||||
id="feTurbulence6250" />
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="turbulence"
|
||||
scale="4"
|
||||
yChannelSelector="G"
|
||||
xChannelSelector="R"
|
||||
id="feDisplacementMap6252" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Roughen"
|
||||
id="filter6260">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
numOctaves="3"
|
||||
seed="2"
|
||||
baseFrequency="0.011 0.018"
|
||||
result="turbulence"
|
||||
id="feTurbulence6256" />
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="turbulence"
|
||||
scale="4"
|
||||
yChannelSelector="G"
|
||||
xChannelSelector="R"
|
||||
id="feDisplacementMap6258" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Roughen"
|
||||
id="filter6266">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
numOctaves="3"
|
||||
seed="2"
|
||||
baseFrequency="0.011 0.018"
|
||||
result="turbulence"
|
||||
id="feTurbulence6262" />
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="turbulence"
|
||||
scale="4"
|
||||
yChannelSelector="G"
|
||||
xChannelSelector="R"
|
||||
id="feDisplacementMap6264" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.49497475"
|
||||
inkscape:cx="756.22901"
|
||||
inkscape:cy="432.22136"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1855"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-0.46865904,-8.1350937)">
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.11666667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6254)"
|
||||
d="m 17.10525,32.937706 c 176.93243,0 166.24164,248.026114 166.24164,248.026114"
|
||||
id="path1172"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.11666667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6260)"
|
||||
d="M 183.34689,280.96382 C 172.82815,259.95369 158.67307,262.38934 158.67307,262.38934"
|
||||
id="path1176"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;fill-opacity:1;stroke:#000000;stroke-width:2.11666667;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter6266)"
|
||||
d="m 183.34689,280.96382 c 5.29447,-27.1829 14.9916,-26.55026 14.9916,-26.55026"
|
||||
id="path1178"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.3 KiB |
BIN
photobooth/gui/Qt5Gui/images/camera.png
Normal file
|
After Width: | Height: | Size: 30 KiB |
82
photobooth/gui/Qt5Gui/images/camera.svg
Normal file
@@ -0,0 +1,82 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
id="svg869"
|
||||
width="431.00336"
|
||||
height="336.13913"
|
||||
viewBox="0 0 431.00336 336.13913"
|
||||
sodipodi:docname="camera.svg"
|
||||
inkscape:version="0.92.3 (unknown)">
|
||||
<metadata
|
||||
id="metadata875">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<defs
|
||||
id="defs873">
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB;"
|
||||
inkscape:label="Roughen"
|
||||
id="filter25">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
numOctaves="3"
|
||||
seed="2"
|
||||
baseFrequency="0.011 0.018"
|
||||
result="turbulence"
|
||||
id="feTurbulence21" />
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="turbulence"
|
||||
scale="4"
|
||||
yChannelSelector="G"
|
||||
xChannelSelector="R"
|
||||
id="feDisplacementMap23" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1"
|
||||
objecttolerance="10"
|
||||
gridtolerance="10"
|
||||
guidetolerance="10"
|
||||
inkscape:pageopacity="0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:window-width="1855"
|
||||
inkscape:window-height="1056"
|
||||
id="namedview871"
|
||||
showgrid="false"
|
||||
inkscape:zoom="1.7851562"
|
||||
inkscape:cx="80.830818"
|
||||
inkscape:cy="187.73854"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="svg869"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<path
|
||||
style="fill:#000000;filter:url(#filter25)"
|
||||
d="m 216.16797,16.240234 c -26.91862,0.06966 -53.83724,0.139323 -80.75586,0.208985 -9.0655,15.411877 -18.12787,30.825594 -27.19531,46.236328 -22.584828,3.853171 -47.148081,-3.075582 -68.406253,7.009765 -19.445949,9.5995 -27.304654,33.482688 -23.690254,53.812438 0.802732,55.17088 -2.605777,110.54325 2.373848,165.52545 7.004449,21.6574 31.478151,34.38982 53.238143,30.61232 2.690963,-1.02717 13.850114,2.59703 9.47382,-2.33887 -1.773376,-3.16899 -4.275476,-6.53406 -8.352588,-5.14845 -15.448777,0.77231 -33.967207,-1.88705 -42.845704,-16.17187 -9.553761,-15.36007 -4.893543,-34.22222 -6.312514,-51.22261 -0.09122,-48.73024 -1.13992,-97.56767 0.986343,-146.230517 4.796172,-18.64457 25.684326,-30.117367 44.160138,-26.355367 14.241362,0.08785 28.475597,-0.471229 42.714861,-0.603617 9.33462,-15.879568 18.66938,-31.759054 28.00391,-47.638672 51.19466,0.191096 102.38932,0.385027 153.58398,0.576172 9.19861,15.747373 18.39713,31.494795 27.5957,47.242187 22.19547,1.144812 45.2087,-2.084811 66.95508,3.605469 15.64296,8.651188 23.14697,28.108915 19.71929,45.298715 -0.94932,55.63715 2.66805,111.44418 -2.43022,166.94738 -6.16267,19.21283 -29.0139,28.2415 -47.71094,23.88086 -5.45988,-1.09829 -6.18767,5.15836 -8.98242,8.18945 17.79356,0.63983 38.75674,1.58845 52.16601,-12.13086 12.0822,-11.39415 16.47267,-28.93606 14.19699,-45.0371 -0.0284,-55.42016 1.74408,-111.00056 -0.9216,-166.316414 -6.69033,-20.542321 -28.63918,-34.682641 -50.24706,-31.906513 -12.97463,-0.354259 -26.12005,0.04116 -39.1338,-0.919659 C 315.1713,47.587953 305.9937,31.809122 296.81445,16.03125 c -26.88216,0.06966 -53.76432,0.139323 -80.64648,0.208984 z m -2.4043,96.101566 c -49.67423,-0.37758 -96.48985,41.53517 -101.3164,91.21679 -5.51568,44.77972 21.32918,92.27056 64.00617,108.39963 39.2546,16.44182 88.41015,5.71204 116.18669,-26.96827 27.51001,-30.56158 35.26166,-78.1908 15.5962,-115.3044 -17.50925,-34.92134 -55.15768,-58.66893 -94.47266,-57.34375 z m 3.15039,5.83984 c 50.526,-0.51826 96.3024,44.71875 96.46653,95.24587 1.14932,41.54157 -26.50392,82.64569 -66.46982,95.23264 -35.99332,12.03431 -78.87114,1.8712 -104.04675,-27.00091 -28.8013,-31.67336 -33.92229,-83.10132 -9.45777,-118.76471 18.03048,-27.61273 50.31796,-45.65489 83.50781,-44.71289 z"
|
||||
id="path879"
|
||||
inkscape:connector-curvature="0" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.4 KiB |
BIN
photobooth/gui/Qt5Gui/images/checkmark.png
Normal file
|
After Width: | Height: | Size: 2.0 KiB |
110
photobooth/gui/Qt5Gui/images/checkmark.svg
Normal file
@@ -0,0 +1,110 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="19.050001mm"
|
||||
height="19.050001mm"
|
||||
viewBox="0 0 19.050001 19.050001"
|
||||
version="1.1"
|
||||
id="svg33"
|
||||
inkscape:version="0.92.3 (unknown)"
|
||||
sodipodi:docname="checkmark.svg">
|
||||
<defs
|
||||
id="defs27">
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Roughen"
|
||||
id="filter1302">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
numOctaves="1"
|
||||
seed="1"
|
||||
baseFrequency="0.058 0.051"
|
||||
result="turbulence"
|
||||
id="feTurbulence1298" />
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="turbulence"
|
||||
scale="4"
|
||||
yChannelSelector="G"
|
||||
xChannelSelector="R"
|
||||
id="feDisplacementMap1300" />
|
||||
</filter>
|
||||
<filter
|
||||
style="color-interpolation-filters:sRGB"
|
||||
inkscape:label="Roughen"
|
||||
id="filter1308">
|
||||
<feTurbulence
|
||||
type="fractalNoise"
|
||||
numOctaves="1"
|
||||
seed="1"
|
||||
baseFrequency="0.058 0.051"
|
||||
result="turbulence"
|
||||
id="feTurbulence1304" />
|
||||
<feDisplacementMap
|
||||
in="SourceGraphic"
|
||||
in2="turbulence"
|
||||
scale="4"
|
||||
yChannelSelector="G"
|
||||
xChannelSelector="R"
|
||||
id="feDisplacementMap1306" />
|
||||
</filter>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="0.7"
|
||||
inkscape:cx="-331.64987"
|
||||
inkscape:cy="17.573885"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
inkscape:window-width="1855"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0" />
|
||||
<metadata
|
||||
id="metadata30">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-45.281548,-119.27559)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.11666656;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter1308)"
|
||||
d="m 46.869048,120.86309 15.875,15.875"
|
||||
id="path35"
|
||||
inkscape:connector-curvature="0" />
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:2.11666656;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;filter:url(#filter1302)"
|
||||
d="m 62.744048,120.86309 -15.875,15.875"
|
||||
id="path35-3"
|
||||
inkscape:connector-curvature="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.3 KiB |
BIN
photobooth/gui/Qt5Gui/images/down.png
Normal file
|
After Width: | Height: | Size: 316 B |
83
photobooth/gui/Qt5Gui/images/up-down.svg
Normal file
@@ -0,0 +1,83 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="2.5244994mm"
|
||||
height="3.3670478mm"
|
||||
viewBox="0 0 2.5244994 3.3670478"
|
||||
version="1.1"
|
||||
id="svg1335"
|
||||
inkscape:version="0.92.3 (unknown)"
|
||||
sodipodi:docname="up-down.svg">
|
||||
<defs
|
||||
id="defs1329">
|
||||
<marker
|
||||
inkscape:stockid="Arrow2Lend"
|
||||
orient="auto"
|
||||
refY="0"
|
||||
refX="0"
|
||||
id="Arrow2Lend"
|
||||
style="overflow:visible"
|
||||
inkscape:isstock="true">
|
||||
<path
|
||||
id="path1903"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.625;stroke-linejoin:round;stroke-opacity:1"
|
||||
d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
|
||||
transform="matrix(-1.1,0,0,-1.1,-1.1,0)"
|
||||
inkscape:connector-curvature="0" />
|
||||
</marker>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="3.959798"
|
||||
inkscape:cx="-25.987692"
|
||||
inkscape:cy="101.94875"
|
||||
inkscape:document-units="mm"
|
||||
inkscape:current-layer="layer1"
|
||||
showgrid="false"
|
||||
fit-margin-top="0"
|
||||
fit-margin-left="0"
|
||||
fit-margin-right="0"
|
||||
fit-margin-bottom="0"
|
||||
inkscape:window-width="1855"
|
||||
inkscape:window-height="1056"
|
||||
inkscape:window-x="65"
|
||||
inkscape:window-y="24"
|
||||
inkscape:window-maximized="1" />
|
||||
<metadata
|
||||
id="metadata1332">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1"
|
||||
transform="translate(-87.944799,-119.45095)">
|
||||
<path
|
||||
style="fill:none;stroke:#000000;stroke-width:0.26499999;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;marker-end:url(#Arrow2Lend)"
|
||||
d="M 89.202381,120.33484 V 122.375"
|
||||
id="path1337"
|
||||
inkscape:connector-curvature="0"
|
||||
sodipodi:nodetypes="cc" />
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.7 KiB |
BIN
photobooth/gui/Qt5Gui/images/up.png
Normal file
|
After Width: | Height: | Size: 310 B |
182
photobooth/gui/Qt5Gui/stylesheets/pastel.qss
Normal file
@@ -0,0 +1,182 @@
|
||||
/* Outer items */
|
||||
|
||||
QWidget {
|
||||
background-color: transparent;
|
||||
color: #eeeeee;
|
||||
font-family: AmaticSC, sans-serif;
|
||||
font-size: 50px;
|
||||
}
|
||||
|
||||
QMainWindow {
|
||||
background: #ffffff qlineargradient(x1:0 y1:1, x2:1, y2:0, stop:0 rgba(255,165,150,255), stop:1 rgba(0,228,255,112));
|
||||
color: #eeeeee;
|
||||
}
|
||||
|
||||
/* General controls */
|
||||
|
||||
QPushButton {
|
||||
background-color: transparent;
|
||||
border-style: outset;
|
||||
border-width: 1px;
|
||||
border-radius: 15px;
|
||||
border-color: #eeeeee;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
QPushButton:pressed {
|
||||
background-color: #66ffffff;
|
||||
}
|
||||
|
||||
/* Idle Screen */
|
||||
|
||||
QFrame#IdleMessage {
|
||||
background-image: url(photobooth/gui/Qt5Gui/images/arrow.png);
|
||||
background-repeat:; no-repeat;
|
||||
padding: 80px 400px 120px 80px;
|
||||
}
|
||||
|
||||
QFrame#IdleMessage QLabel {
|
||||
font-size: 160px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
|
||||
QFrame#IdleMessage QPushButton {
|
||||
border: none;
|
||||
color: rgba(255, 27, 0, 200);
|
||||
font-size: 200px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
QFrame#IdleMessage QPushButton:pressed {
|
||||
background-color: rgba(255, 27, 0, 200);
|
||||
color: #eeeeee;
|
||||
}
|
||||
|
||||
/* Greeter Screen */
|
||||
|
||||
QFrame#GreeterMessage {
|
||||
padding: 50px;
|
||||
}
|
||||
|
||||
QFrame#GreeterMessage QLabel#title {
|
||||
font-size: 180px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
|
||||
QFrame#GreeterMessage QPushButton#button {
|
||||
border: none;
|
||||
font-size: 120px;
|
||||
margin: 60px 0 20px 0;
|
||||
min-height: 160px;
|
||||
padding: 0;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
QFrame#GreeterMessage QLabel#message {
|
||||
font-size: 120px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
|
||||
/* Countdown Screen */
|
||||
|
||||
QFrame#CountdownMessage {
|
||||
margin: 20px;
|
||||
padding: 30px;
|
||||
background-color: #eeeeee;
|
||||
}
|
||||
|
||||
/* Pose Screen */
|
||||
|
||||
QFrame#PoseMessage {
|
||||
background-image: url(photobooth/gui/Qt5Gui/images/camera.png);
|
||||
background-repeat: no-repeat;
|
||||
padding: 380px 80px 80px 80px;
|
||||
}
|
||||
|
||||
QFrame#PoseMessage QLabel {
|
||||
font-size: 120px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
|
||||
/* Wait Screen */
|
||||
|
||||
QFrame#WaitMessage {
|
||||
padding: 350px 80px 80px 80px;
|
||||
}
|
||||
|
||||
QFrame#WaitMessage QLabel {
|
||||
font-size: 110px;
|
||||
qproperty-alignment: AlignCenter;
|
||||
}
|
||||
|
||||
/* Picture Screen*/
|
||||
|
||||
QFrame#PictureMessage {
|
||||
margin: 40px;
|
||||
}
|
||||
|
||||
/* Customizing settings */
|
||||
|
||||
QTabWidget::pane {
|
||||
background-color: #eeeeee;
|
||||
border-style: outset;
|
||||
border-width: 1px;
|
||||
border-radius: 15px;
|
||||
border-color: #eeeeee;
|
||||
color: #333333;
|
||||
padding: 10px;
|
||||
}
|
||||
|
||||
QTabWidget::tab-bar {
|
||||
alignment: center;
|
||||
}
|
||||
|
||||
QTabBar::tab {
|
||||
background-color: transparent;
|
||||
border-style: outset;
|
||||
border-width: 2px;
|
||||
border-top-left-radius: 15px;
|
||||
border-top-right-radius: 15px;
|
||||
border-color: #eeeeee;
|
||||
padding: 8px;
|
||||
}
|
||||
|
||||
QTabBar::tab:selected {
|
||||
background-color: #66ffffff;
|
||||
}
|
||||
|
||||
QTabWidget QWidget {
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
QCheckBox::indicator {
|
||||
width: 45px;
|
||||
height: 45px;
|
||||
background-color: transparent;
|
||||
border-style: outset;
|
||||
border-width: 2px;
|
||||
border-radius: 5px;
|
||||
border-color: #333333;
|
||||
}
|
||||
|
||||
QCheckBox::indicator::checked {
|
||||
background-image: url(photobooth/gui/Qt5Gui/images/checkmark.png);
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
QComboBox, QDateEdit, QLineEdit, QSpinBox, QTimeEdit {
|
||||
background-color: #eeeeee;
|
||||
color: #333333;
|
||||
}
|
||||
|
||||
QComboBox QAbstractItemView {
|
||||
background-color: #cccccc;
|
||||
color: #333333;
|
||||
selection-background-color: #eeeeee;
|
||||
selection-color: #333333;
|
||||
}
|
||||
|
||||
QComboBox QAbstractItemView::item {
|
||||
margin: 5px;
|
||||
min-height: 50px;
|
||||
}
|
||||