diff --git a/qmlUiKirigami/ImageViewer.qml b/qmlUiKirigami/ImageViewer.qml --- a/qmlUiKirigami/ImageViewer.qml +++ b/qmlUiKirigami/ImageViewer.qml @@ -24,6 +24,7 @@ import QtQuick 2.7 import QtQuick.Window 2.2 import QtQuick.Controls 2.0 as Controls +import QtGraphicalEffects 1.0 as Effects import QtQuick.Layouts 1.3 import org.kde.kirigami 2.0 as Kirigami import org.kde.koko 0.1 as Koko @@ -120,13 +121,7 @@ text: i18n("Brightness Controller") } onValueChanged: { - if( value > previousValue) { - imageDoc.changeBrightness( true) - } else if( value < previousValue) { - imageDoc.changeBrightness( false) - } - previousValue = value - listView.forceActiveFocus() + imageDoc.edited = true } } @@ -136,7 +131,9 @@ Controls.Button { Layout.fillWidth: true text: i18n("Save") - onClicked: imageDoc.save() + onClicked: { + listView.currentItem.image.modifiedImage.grabToImage( function( result) { imageDoc.save( result.image)}) + } } Controls.Button { Layout.fillWidth: true @@ -299,6 +296,7 @@ KQA.QImageItem { id: image + property alias modifiedImage: brightnessContrast width: flick.contentWidth height: flick.contentHeight fillMode: Image.PreserveAspectFit @@ -356,6 +354,14 @@ } } } + + Effects.GammaAdjust { + id: brightnessContrast + source: image + anchors.fill: image + gamma: brightnessSlider.value + 0.5 + } + } } } diff --git a/src/imagedocument.h b/src/imagedocument.h --- a/src/imagedocument.h +++ b/src/imagedocument.h @@ -27,7 +27,7 @@ Q_OBJECT Q_PROPERTY(QString path READ path WRITE setPath NOTIFY pathChanged) Q_PROPERTY(QImage visualImage READ visualImage NOTIFY visualImageChanged) - Q_PROPERTY(bool edited READ edited NOTIFY editedChanged) + Q_PROPERTY(bool edited READ edited WRITE setEdited NOTIFY editedChanged) public: ImageDocument(); ~ImageDocument(); @@ -38,10 +38,10 @@ QImage visualImage(); bool edited(); + void setEdited( bool value); Q_INVOKABLE void rotate( int angle); - Q_INVOKABLE void changeBrightness( bool isIncrease); - Q_INVOKABLE void save(); + Q_INVOKABLE void save( QImage image); Q_INVOKABLE void cancel(); signals: @@ -53,7 +53,6 @@ private: QString m_path; QImage *m_image; - QImage m_originalImage; bool m_edited; }; diff --git a/src/imagedocument.cpp b/src/imagedocument.cpp --- a/src/imagedocument.cpp +++ b/src/imagedocument.cpp @@ -31,7 +31,6 @@ /** Since the url passed by the model in the ImageViewer.qml contains 'file://' prefix */ QString location = QUrl( url).path(); m_image->load( location); - m_originalImage = *m_image; m_edited = false; emit editedChanged(); emit visualImageChanged(); @@ -63,6 +62,12 @@ return m_edited; } +void ImageDocument::setEdited(bool value) +{ + m_edited = value; + emit editedChanged(); +} + void ImageDocument::rotate(int angle) { QMatrix matrix; @@ -75,47 +80,24 @@ emit visualImageChanged(); } -void ImageDocument::changeBrightness( bool isIncrease) -{ - if( isIncrease) { - for( int i = 0; i < m_image->rect().width() ; i++ ) - { - for( int j = 0; j < m_image->rect().height(); j++ ) - { - m_image->setPixelColor(i, j , m_image->pixelColor( i , j).lighter( 120)); - } - } - } else { - for( int i = 0; i < m_image->rect().width() ; i++ ) - { - for( int j = 0; j < m_image->rect().height(); j++ ) - { - m_image->setPixelColor(i, j , m_image->pixelColor( i , j).darker( 120)); - } - } - } - m_edited = true; - emit editedChanged(); - emit visualImageChanged(); -} - -void ImageDocument::save() +void ImageDocument::save( QImage image) { QString location = QUrl( m_path).path(); + *m_image = image; if( QFileInfo( location).isWritable()) { m_image->save( location); + emit resetHandle(); m_edited = false; emit editedChanged(); } + m_image->load( location); + emit visualImageChanged(); } void ImageDocument::cancel() { emit resetHandle(); - m_image = &m_originalImage; m_edited = false; - emit editedChanged(); - emit visualImageChanged(); } #include "moc_imagedocument.cpp"