diff --git a/qmlUiKirigami/ImageViewer.qml b/qmlUiKirigami/ImageViewer.qml --- a/qmlUiKirigami/ImageViewer.qml +++ b/qmlUiKirigami/ImageViewer.qml @@ -97,6 +97,22 @@ onTriggered: { imageDoc.rotate(90) } + }, + Kirigami.Action { + iconName: "image-flip-vertical-symbolic" + text: i18n("Flip vertically") + tooltip: i18n("Flips the image vertically") + onTriggered: { + imageDoc.flipVertical(true) + } + }, + Kirigami.Action { + iconName: "image-flip-horizontal-symbolic" + text: i18n("Flip horizontally") + tooltip: i18n("Flips the image horizontally") + onTriggered: { + imageDoc.flipVertical(false) + } } ] } diff --git a/src/imagedocument.h b/src/imagedocument.h --- a/src/imagedocument.h +++ b/src/imagedocument.h @@ -41,6 +41,7 @@ void setEdited( bool value); Q_INVOKABLE void rotate( int angle); + Q_INVOKABLE void flipVertical(const bool vertical); Q_INVOKABLE void save( QImage image); Q_INVOKABLE void cancel(); diff --git a/src/imagedocument.cpp b/src/imagedocument.cpp --- a/src/imagedocument.cpp +++ b/src/imagedocument.cpp @@ -80,6 +80,21 @@ emit visualImageChanged(); } +void ImageDocument::flipVertical(const bool vertical) +{ + if( vertical == true){ + *m_image = m_image->mirrored(); + } + else { + *m_image = m_image->mirrored(true, false); + } + QString location = QUrl( m_path).path(); + if (QFileInfo( location).isWritable()) { + m_image->save( location); + } + emit visualImageChanged(); +} + void ImageDocument::save( QImage image) { QString location = QUrl( m_path).path();