diff --git a/nw/assets/images/wizard-back.jpg b/nw/assets/images/wizard-back.jpg new file mode 100644 index 00000000..8db614c8 Binary files /dev/null and b/nw/assets/images/wizard-back.jpg differ diff --git a/nw/gui/about.py b/nw/gui/about.py index d432a4d9..5f4c9b87 100644 --- a/nw/gui/about.py +++ b/nw/gui/about.py @@ -58,15 +58,16 @@ class GuiAbout(QDialog): self.setMinimumWidth(self.mainConf.pxInt(650)) self.setMinimumHeight(self.mainConf.pxInt(600)) - iPx = self.mainConf.pxInt(96) - self.guiDeco = self.theParent.theTheme.loadDecoration("nwicon", (iPx, iPx)) + nPx = self.mainConf.pxInt(96) + self.nwIcon = QLabel() + self.nwIcon.setPixmap(self.theParent.theTheme.getPixmap("novelwriter", (nPx, nPx))) self.lblName = QLabel("%s" % nw.__package__) self.lblVers = QLabel("v%s" % nw.__version__) self.lblDate = QLabel(datetime.strptime(nw.__date__, "%Y-%m-%d").strftime("%x")) self.leftBox = QVBoxLayout() self.leftBox.setSpacing(self.mainConf.pxInt(4)) - self.leftBox.addWidget(self.guiDeco, 0, Qt.AlignCenter) + self.leftBox.addWidget(self.nwIcon, 0, Qt.AlignCenter) self.leftBox.addWidget(self.lblName, 0, Qt.AlignCenter) self.leftBox.addWidget(self.lblVers, 0, Qt.AlignCenter) self.leftBox.addWidget(self.lblDate, 0, Qt.AlignCenter) diff --git a/nw/gui/projload.py b/nw/gui/projload.py index 30332690..296adb94 100644 --- a/nw/gui/projload.py +++ b/nw/gui/projload.py @@ -79,8 +79,9 @@ class GuiProjectLoad(QDialog): self.setMinimumHeight(self.mainConf.pxInt(400)) self.setModal(True) - self.guiDeco = self.theTheme.loadDecoration("nwicon", (nPx, nPx)) - self.innerBox.addWidget(self.guiDeco, 0, Qt.AlignTop) + self.nwIcon = QLabel() + self.nwIcon.setPixmap(self.theParent.theTheme.getPixmap("novelwriter", (nPx, nPx))) + self.innerBox.addWidget(self.nwIcon, 0, Qt.AlignTop) self.projectForm = QGridLayout() self.projectForm.setContentsMargins(0, 0, 0, 0) diff --git a/nw/gui/projwizard.py b/nw/gui/projwizard.py index d606ed23..288b5b76 100644 --- a/nw/gui/projwizard.py +++ b/nw/gui/projwizard.py @@ -33,7 +33,7 @@ from os import path from PyQt5.QtGui import QPixmap, QColor from PyQt5.QtWidgets import ( QWizard, QWizardPage, QLabel, QVBoxLayout, QLineEdit, QPlainTextEdit, - QPushButton, QFileDialog, QHBoxLayout + QPushButton, QFileDialog, QHBoxLayout, QLayout ) from nw.common import makeFileNameSafe @@ -52,14 +52,10 @@ class GuiProjectWizard(QWizard): self.theParent = theParent self.theTheme = theParent.theTheme - nPx = self.mainConf.pxInt(96) - wmW = self.mainConf.pxInt(100) - wmH = self.mainConf.pxInt(340) - - self.sideImage = QPixmap(wmW, wmH) - self.sideImage.fill(self.palette().dark().color()) - - # self.setWizardStyle(QWizard.ModernStyle) + self.sideImage = self.theTheme.loadDecoration( + "wiz-back", None, self.mainConf.pxInt(370) + ) + self.setWizardStyle(QWizard.ModernStyle) self.setPixmap(QWizard.WatermarkPixmap, self.sideImage) self.introPage = ProjWizardIntroPage(self.theParent) @@ -69,7 +65,6 @@ class GuiProjectWizard(QWizard): self.addPage(self.storagePage) self.setOption(QWizard.NoBackButtonOnStartPage, True) - # self.setOption(QWizard.ExtendedWatermarkPixmap, True) logger.debug("GuiProjectWizard initialisation complete") @@ -95,6 +90,11 @@ class ProjWizardIntroPage(QWizardPage): ) self.theText.setWordWrap(True) + self.imgCredit = QLabel("Side image by Peter Mitterhofer, CC BY-SA 4.0") + lblFont = self.imgCredit.font() + lblFont.setPointSizeF(0.6*self.theTheme.fontPointSize) + self.imgCredit.setFont(lblFont) + xW = self.mainConf.pxInt(300) xH = self.mainConf.pxInt(100) vS = self.mainConf.pxInt(12) @@ -132,6 +132,7 @@ class ProjWizardIntroPage(QWizardPage): self.outerBox.addWidget(self.theText) self.outerBox.addLayout(self.mainForm) self.outerBox.addStretch(1) + self.outerBox.addWidget(self.imgCredit) self.setLayout(self.outerBox) return diff --git a/nw/gui/theme.py b/nw/gui/theme.py index 0265df62..2cb1affa 100644 --- a/nw/gui/theme.py +++ b/nw/gui/theme.py @@ -33,7 +33,7 @@ import nw from os import path, listdir from math import ceil -from PyQt5.QtCore import QSize +from PyQt5.QtCore import Qt, QSize from PyQt5.QtSvg import QSvgWidget from PyQt5.QtWidgets import QStyle, qApp from PyQt5.QtGui import ( @@ -497,6 +497,7 @@ class GuiIcons: ICON_MAP = { # Project and GUI icons + "novelwriter" : (None, None), "cls_none" : (QStyle.SP_DriveHDIcon, "drive-harddisk"), "cls_novel" : (QStyle.SP_DriveHDIcon, "drive-harddisk"), "cls_plot" : (QStyle.SP_DriveHDIcon, "drive-harddisk"), @@ -552,7 +553,7 @@ class GuiIcons: } DECO_MAP = { - "nwicon" : ["icons", "novelwriter.svg"], + "wiz-back" : "wizard-back.jpg", } def __init__(self, theParent): @@ -645,7 +646,7 @@ class GuiIcons: # Access Functions ## - def loadDecoration(self, decoKey, decoSize=None): + def loadDecoration(self, decoKey, pxW, pxH): """Load graphical decoration element based on the decoration map. This function always returns a QSwgWidget. """ @@ -653,20 +654,22 @@ class GuiIcons: logger.error("Decoration with name '%s' does not exist" % decoKey) return QSvgWidget() - svgPath = path.join( - self.mainConf.assetPath, - self.DECO_MAP[decoKey][0], - self.DECO_MAP[decoKey][1] + imgPath = path.join( + self.mainConf.assetPath, "images", self.DECO_MAP[decoKey] ) - if not path.isfile(svgPath): + if not path.isfile(imgPath): logger.error("Decoration file '%s' not in assets folder" % self.DECO_MAP[decoKey]) - return QSvgWidget() + return QPixmap() - svgDeco = QSvgWidget(svgPath) - if decoSize is not None: - svgDeco.setFixedSize(QSize(decoSize[0],decoSize[1])) + theDeco = QPixmap(imgPath) + if pxW is not None and pxH is not None: + return theDeco.scaled(pxW, pxH, Qt.IgnoreAspectRatio, Qt.SmoothTransformation) + elif pxW is None and pxH is not None: + return theDeco.scaledToHeight(pxH, Qt.SmoothTransformation) + elif pxW is not None and pxH is None: + return theDeco.scaledToWidth(pxW, Qt.SmoothTransformation) - return svgDeco + return theDeco def getIcon(self, iconKey, iconSize=None): """Return an icon from the icon buffer. If it doesn't exist, @@ -730,11 +733,16 @@ class GuiIcons: an icon exists. Prefer svg files over png files. Always returns a QIcon. """ - if iconKey not in self.ICON_MAP: logger.error("Requested unknown icon name '%s'" % iconKey) return QIcon() + # If we just want the app icon, return it right away + if iconKey == "novelwriter": + return QIcon(path.join(self.mainConf.iconPath, "novelwriter.svg")) + + # Otherwise, we start looking for it + # First in the theme folder if iconKey in self.themeMap: logger.verbose("Loading: %s" % path.relpath(self.themeMap[iconKey])) return QIcon(self.themeMap[iconKey])