diff --git a/src/colorscheme/ColorScheme.cpp b/src/colorscheme/ColorScheme.cpp index 15d67647..3c2eb35a 100644 --- a/src/colorscheme/ColorScheme.cpp +++ b/src/colorscheme/ColorScheme.cpp @@ -188,7 +188,7 @@ ColorScheme::ColorScheme() , _colorRandomization(false) , _wallpaper(nullptr) { - setWallpaper(QString(), ColorSchemeWallpaper::Tile, QPointF(0.5, 0.5), 1.0); + setWallpaper(QString(), ColorSchemeWallpaper::Tile, QPointF(0.5, 0.5), 1.0, false, false); } ColorScheme::ColorScheme(const ColorScheme &other) @@ -469,7 +469,9 @@ void ColorScheme::read(const KConfig &config) setWallpaper(configGroup.readEntry("Wallpaper", QString()), configGroup.readEntry("FillStyle", QString::fromLatin1("Tile")), configGroup.readEntry("Anchor", QPointF(0.5, 0.5)), - configGroup.readEntry("WallpaperOpacity", 1.0)); + configGroup.readEntry("WallpaperOpacity", 1.0), + configGroup.readEntry("wallpaperFlipHorizontal", false), + configGroup.readEntry("wallpaperFlipVertical", false)); _colorRandomization = configGroup.readEntry(EnableColorRandomizationKey, false); for (int i = 0; i < TABLE_COLORS; i++) { @@ -531,6 +533,8 @@ void ColorScheme::write(KConfig &config) const configGroup.writeEntry("Blur", _blur); configGroup.writeEntry("Wallpaper", _wallpaper->path()); configGroup.writeEntry("FillStyle", QMetaEnum::fromType().valueToKey(_wallpaper->style())); + configGroup.writeEntry("wallpaperFlipHorizontal", _wallpaper->flipHorizontal()); + configGroup.writeEntry("wallpaperFlipVertical", _wallpaper->flipVertical()); configGroup.writeEntry("Anchor", _wallpaper->anchor()); configGroup.writeEntry("WallpaperOpacity", _wallpaper->opacity()); configGroup.writeEntry(EnableColorRandomizationKey, _colorRandomization); @@ -580,19 +584,29 @@ void ColorScheme::writeColorEntry(KConfig &config, int index) const checkAndMaybeSaveValue(RandomLightnessRangeKey, random.lightness); } -void ColorScheme::setWallpaper(const QString &path, const ColorSchemeWallpaper::FillStyle style, const QPointF &anchor, const qreal &opacity) +void ColorScheme::setWallpaper(const QString &path, + const ColorSchemeWallpaper::FillStyle style, + const QPointF &anchor, + const qreal &opacity, + const bool &flipHorizontal, + const bool &flipVertical) { - _wallpaper = new ColorSchemeWallpaper(path, style, anchor, opacity); + _wallpaper = new ColorSchemeWallpaper(path, style, anchor, opacity, flipHorizontal, flipVertical); } -void ColorScheme::setWallpaper(const QString &path, const QString &style, const QPointF &anchor, const qreal &opacity) +void ColorScheme::setWallpaper(const QString &path, + const QString &style, + const QPointF &anchor, + const qreal &opacity, + const bool &flipHorizontal, + const bool &flipVertical) { ColorSchemeWallpaper::FillStyle fstyle; fstyle = static_cast(std::max( // keyToValue returns -1 if key was not found, but we should default to 0 QMetaEnum::fromType().keyToValue(style.toStdString().c_str()), 0)); - setWallpaper(path, fstyle, anchor, opacity); + setWallpaper(path, fstyle, anchor, opacity, flipHorizontal, flipVertical); } ColorSchemeWallpaper::Ptr ColorScheme::wallpaper() const diff --git a/src/colorscheme/ColorScheme.h b/src/colorscheme/ColorScheme.h index 08ba3970..cb00b2c5 100644 --- a/src/colorscheme/ColorScheme.h +++ b/src/colorscheme/ColorScheme.h @@ -133,8 +133,14 @@ public: */ bool blur() const; - void setWallpaper(const QString &path, const ColorSchemeWallpaper::FillStyle style, const QPointF &anchor, const qreal &opacity); - void setWallpaper(const QString &path, const QString &style, const QPointF &anchor, const qreal &opacity); + void setWallpaper(const QString &path, + const ColorSchemeWallpaper::FillStyle style, + const QPointF &anchor, + const qreal &opacity, + const bool &flipHorizontal, + const bool &flipVertical); + void + setWallpaper(const QString &path, const QString &style, const QPointF &anchor, const qreal &opacity, const bool &flipHorizontal, const bool &flipVertical); ColorSchemeWallpaper::Ptr wallpaper() const; diff --git a/src/colorscheme/ColorSchemeEditor.cpp b/src/colorscheme/ColorSchemeEditor.cpp index e1efa151..ff006dfe 100644 --- a/src/colorscheme/ColorSchemeEditor.cpp +++ b/src/colorscheme/ColorSchemeEditor.cpp @@ -99,6 +99,9 @@ ColorSchemeEditor::ColorSchemeEditor(QWidget *parent) connect(_ui->wallpaperHorizontalAnchorSlider, &QSlider::valueChanged, this, &Konsole::ColorSchemeEditor::horizontalAnchorChanged); connect(_ui->wallpaperVerticalAnchorSlider, &QSlider::valueChanged, this, &Konsole::ColorSchemeEditor::verticalAnchorChanged); + connect(_ui->wallpaperFlipHorizontalCheckBox, &QCheckBox::toggled, this, &Konsole::ColorSchemeEditor::wallpaperFlipHorizontalChanged); + connect(_ui->wallpaperFlipVerticalCheckBox, &QCheckBox::toggled, this, &Konsole::ColorSchemeEditor::wallpaperFlipVerticalChanged); + // color table _ui->colorTable->setColumnCount(4); _ui->colorTable->setRowCount(COLOR_TABLE_ROW_LENGTH); @@ -196,19 +199,34 @@ void ColorSchemeEditor::setWallpaperOpacity(int percent) _ui->wallpaperTransparencyPercentLabel->setText(QStringLiteral("%1%").arg(percent)); const qreal opacity = (100.0 - percent) / 100.0; - _colors->setWallpaper(_colors->wallpaper()->path(), _colors->wallpaper()->style(), _colors->wallpaper()->anchor(), opacity); + _colors->setWallpaper(_colors->wallpaper()->path(), + _colors->wallpaper()->style(), + _colors->wallpaper()->anchor(), + opacity, + _colors->wallpaper()->flipHorizontal(), + _colors->wallpaper()->flipVertical()); } void ColorSchemeEditor::wallpaperPathChanged(const QString &path) { if (path.isEmpty()) { - _colors->setWallpaper(path, _colors->wallpaper()->style(), _colors->wallpaper()->anchor(), _colors->wallpaper()->opacity()); + _colors->setWallpaper(path, + _colors->wallpaper()->style(), + _colors->wallpaper()->anchor(), + _colors->wallpaper()->opacity(), + _colors->wallpaper()->flipHorizontal(), + _colors->wallpaper()->flipVertical()); enableWallpaperSettings(false); } else { QFileInfo i(path); if (i.exists() && i.isFile() && i.isReadable()) { - _colors->setWallpaper(path, _colors->wallpaper()->style(), _colors->wallpaper()->anchor(), _colors->wallpaper()->opacity()); + _colors->setWallpaper(path, + _colors->wallpaper()->style(), + _colors->wallpaper()->anchor(), + _colors->wallpaper()->opacity(), + _colors->wallpaper()->flipHorizontal(), + _colors->wallpaper()->flipVertical()); enableWallpaperSettings(true); } } @@ -217,13 +235,43 @@ void ColorSchemeEditor::wallpaperPathChanged(const QString &path) void ColorSchemeEditor::scalingTypeChanged(int styleIndex) { const char *style = QMetaEnum::fromType().valueToKey(styleIndex); - _colors->setWallpaper(_colors->wallpaper()->path(), QString::fromLatin1(style), _colors->wallpaper()->anchor(), _colors->wallpaper()->opacity()); + _colors->setWallpaper(_colors->wallpaper()->path(), + QString::fromLatin1(style), + _colors->wallpaper()->anchor(), + _colors->wallpaper()->opacity(), + _colors->wallpaper()->flipHorizontal(), + _colors->wallpaper()->flipVertical()); +} + +void ColorSchemeEditor::wallpaperFlipHorizontalChanged(bool horizontal) +{ + _colors->setWallpaper(_colors->wallpaper()->path(), + _colors->wallpaper()->style(), + _colors->wallpaper()->anchor(), + _colors->wallpaper()->opacity(), + horizontal, + _colors->wallpaper()->flipVertical()); +} + +void ColorSchemeEditor::wallpaperFlipVerticalChanged(bool vertical) +{ + _colors->setWallpaper(_colors->wallpaper()->path(), + _colors->wallpaper()->style(), + _colors->wallpaper()->anchor(), + _colors->wallpaper()->opacity(), + _colors->wallpaper()->flipHorizontal(), + vertical); } void ColorSchemeEditor::horizontalAnchorChanged(int pos) { QPointF anch = _colors->wallpaper()->anchor(); - _colors->setWallpaper(_colors->wallpaper()->path(), _colors->wallpaper()->style(), QPointF(pos / 2.0, anch.y()), _colors->wallpaper()->opacity()); + _colors->setWallpaper(_colors->wallpaper()->path(), + _colors->wallpaper()->style(), + QPointF(pos / 2.0, anch.y()), + _colors->wallpaper()->opacity(), + _colors->wallpaper()->flipHorizontal(), + _colors->wallpaper()->flipVertical()); switch (pos) { case 2: _ui->wallpaperHorizontalAnchorPosition->setText(QString::fromLatin1("Right")); @@ -241,7 +289,12 @@ void ColorSchemeEditor::horizontalAnchorChanged(int pos) void ColorSchemeEditor::verticalAnchorChanged(int pos) { QPointF anch = _colors->wallpaper()->anchor(); - _colors->setWallpaper(_colors->wallpaper()->path(), _colors->wallpaper()->style(), QPointF(anch.x(), pos / 2.0), _colors->wallpaper()->opacity()); + _colors->setWallpaper(_colors->wallpaper()->path(), + _colors->wallpaper()->style(), + QPointF(anch.x(), pos / 2.0), + _colors->wallpaper()->opacity(), + _colors->wallpaper()->flipHorizontal(), + _colors->wallpaper()->flipVertical()); switch (pos) { case 2: _ui->wallpaperVerticalAnchorPosition->setText(QString::fromLatin1("Bottom")); @@ -323,6 +376,8 @@ void ColorSchemeEditor::setup(const std::shared_ptr &scheme, int ay = qRound(scheme->wallpaper()->anchor().y() * 2.0); _ui->wallpaperPath->setText(scheme->wallpaper()->path()); _ui->wallpaperScalingType->setCurrentIndex(scheme->wallpaper()->style()); + _ui->wallpaperFlipHorizontalCheckBox->setChecked(scheme->wallpaper()->flipHorizontal()); + _ui->wallpaperFlipVerticalCheckBox->setChecked(scheme->wallpaper()->flipVertical()); _ui->wallpaperHorizontalAnchorSlider->setValue(ax); _ui->wallpaperVerticalAnchorSlider->setValue(ay); enableWallpaperSettings(!scheme->wallpaper()->isNull()); @@ -382,4 +437,6 @@ void ColorSchemeEditor::enableWallpaperSettings(bool enable) _ui->wallpaperVerticalAnchorSlider->setEnabled(enable); _ui->wallpaperTransparencySlider->setEnabled(enable); _ui->wallpaperScalingType->setEnabled(enable); + _ui->wallpaperFlipHorizontalCheckBox->setEnabled(enable); + _ui->wallpaperFlipVerticalCheckBox->setEnabled(enable); } diff --git a/src/colorscheme/ColorSchemeEditor.h b/src/colorscheme/ColorSchemeEditor.h index b24738ce..04161c44 100644 --- a/src/colorscheme/ColorSchemeEditor.h +++ b/src/colorscheme/ColorSchemeEditor.h @@ -71,6 +71,8 @@ private Q_SLOTS: void setWallpaperOpacity(int percent); void wallpaperPathChanged(const QString &path); void scalingTypeChanged(int styleIndex); + void wallpaperFlipHorizontalChanged(bool horizontal); + void wallpaperFlipVerticalChanged(bool vertical); void horizontalAnchorChanged(int pos); void verticalAnchorChanged(int pos); void selectWallpaper(); diff --git a/src/colorscheme/ColorSchemeEditor.ui b/src/colorscheme/ColorSchemeEditor.ui index c09f125b..cb1d3bba 100644 --- a/src/colorscheme/ColorSchemeEditor.ui +++ b/src/colorscheme/ColorSchemeEditor.ui @@ -7,7 +7,7 @@ 0 0 364 - 460 + 474 @@ -197,6 +197,31 @@ To see any effect, set colors with saturation value greater than 0. + + + + + + Wallpaper flip: + + + + + + + Horizontal + + + + + + + Vertical + + + + + diff --git a/src/colorscheme/ColorSchemeWallpaper.cpp b/src/colorscheme/ColorSchemeWallpaper.cpp index 109d477b..efe0cea2 100644 --- a/src/colorscheme/ColorSchemeWallpaper.cpp +++ b/src/colorscheme/ColorSchemeWallpaper.cpp @@ -17,12 +17,19 @@ using namespace Konsole; -ColorSchemeWallpaper::ColorSchemeWallpaper(const QString &path, const ColorSchemeWallpaper::FillStyle style, const QPointF &anchor, const qreal &opacity) +ColorSchemeWallpaper::ColorSchemeWallpaper(const QString &path, + const ColorSchemeWallpaper::FillStyle style, + const QPointF &anchor, + const qreal &opacity, + const bool &flipHorizontal, + const bool &flipVertical) : _path(path) , _picture(nullptr) , _style(style) , _anchor(anchor) , _opacity(opacity) + , _flipHorizontal(flipHorizontal) + , _flipVertical(flipVertical) { float x = _anchor.x(), y = _anchor.y(); @@ -44,7 +51,9 @@ void ColorSchemeWallpaper::load() } if (_picture->isNull()) { - _picture->load(_path); + QImage image(_path); + QImage transformed = image.mirrored(flipHorizontal(), flipVertical()); + _picture->convertFromImage(transformed); } } @@ -87,6 +96,16 @@ ColorSchemeWallpaper::FillStyle ColorSchemeWallpaper::style() const return _style; } +bool ColorSchemeWallpaper::flipHorizontal() const +{ + return _flipHorizontal; +} + +bool ColorSchemeWallpaper::flipVertical() const +{ + return _flipVertical; +} + QPointF ColorSchemeWallpaper::anchor() const { return _anchor; diff --git a/src/colorscheme/ColorSchemeWallpaper.h b/src/colorscheme/ColorSchemeWallpaper.h index 252181e1..df51eb8b 100644 --- a/src/colorscheme/ColorSchemeWallpaper.h +++ b/src/colorscheme/ColorSchemeWallpaper.h @@ -42,7 +42,12 @@ public: typedef QExplicitlySharedDataPointer Ptr; - explicit ColorSchemeWallpaper(const QString &path, const ColorSchemeWallpaper::FillStyle style, const QPointF &anchor, const qreal &opacity); + explicit ColorSchemeWallpaper(const QString &path, + const ColorSchemeWallpaper::FillStyle style, + const QPointF &anchor, + const qreal &opacity, + const bool &flipHorizontal, + const bool &flipVertical); ~ColorSchemeWallpaper(); void load(); @@ -60,6 +65,10 @@ public: qreal opacity() const; + bool flipHorizontal() const; + + bool flipVertical() const; + private: Q_GADGET Q_DISABLE_COPY(ColorSchemeWallpaper) @@ -69,6 +78,8 @@ private: FillStyle _style; QPointF _anchor; qreal _opacity; + bool _flipHorizontal; + bool _flipVertical; QRectF ScaledRect(const QSize viewportSize, const QSize pictureSize, const QRect rect); Qt::AspectRatioMode RatioMode();