~artmello/ubuntu-ui-extras/ubuntu-ui-extras-fix_1524973

« back to all changes in this revision

Viewing changes to modules/Ubuntu/Components/Extras/plugin/share/imageresizer.cpp

  • Committer: CI Train Bot
  • Author(s): Ugo Riboni
  • Date: 2015-02-04 20:33:44 UTC
  • mfrom: (65.1.46 ubuntu-ui-extras-photo-editor)
  • Revision ID: ci-train-bot@canonical.com-20150204203344-pfmu1ckhooy7oaca
Add a photo editor component, partially based on the Gallery photo editor Fixes: #1368787
Approved by: PS Jenkins bot

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 2012-2013 Canonical, Ltd.
3
 
 *
4
 
 * This program is free software; you can redistribute it and/or modify
5
 
 * it under the terms of the GNU General Public License as published by
6
 
 * the Free Software Foundation; version 3.
7
 
 *
8
 
 * This program is distributed in the hope that it will be useful,
9
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
 * GNU General Public License for more details.
12
 
 *
13
 
 * You should have received a copy of the GNU General Public License
14
 
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
15
 
 */
16
 
 
17
 
#include "imageresizer.h"
18
 
#include <QFileInfo>
19
 
#include <QImage>
20
 
#include <QImageWriter>
21
 
#include <QDir>
22
 
 
23
 
ImageResizer::ImageResizer(QObject *parent) :
24
 
    QObject(parent),
25
 
    m_resizedImage(NULL),
26
 
    m_largestSide(2048),
27
 
    m_quality(85)
28
 
{
29
 
}
30
 
 
31
 
QString ImageResizer::file() const
32
 
{
33
 
    return m_file;
34
 
}
35
 
 
36
 
QString ImageResizer::resizedFile() const
37
 
{
38
 
    return (m_resizedImage) ? m_resizedImage->fileName() : "";
39
 
}
40
 
 
41
 
int ImageResizer::largestSide() const
42
 
{
43
 
    return m_largestSide;
44
 
}
45
 
 
46
 
int ImageResizer::quality() const
47
 
{
48
 
    return m_quality;
49
 
}
50
 
 
51
 
void ImageResizer::setFile(const QString& file)
52
 
{
53
 
    if (m_file != file) {
54
 
        m_file = file;
55
 
        Q_EMIT fileChanged();
56
 
        resizeImage();
57
 
    }
58
 
}
59
 
 
60
 
void ImageResizer::setLargestSide(int largestSide)
61
 
{
62
 
    if (largestSide <= 0) {
63
 
        largestSide = 1;
64
 
    }
65
 
 
66
 
    if (m_largestSide != largestSide) {
67
 
        m_largestSide = largestSide;
68
 
        Q_EMIT largestSideChanged();
69
 
        resizeImage();
70
 
    }
71
 
}
72
 
 
73
 
void ImageResizer::setQuality(int quality)
74
 
{
75
 
    if (quality < 0) {
76
 
        quality = 0;
77
 
    } else if (quality > 100) {
78
 
        quality = 100;
79
 
    }
80
 
    if (m_quality != quality) {
81
 
        m_quality = quality;
82
 
        Q_EMIT qualityChanged();
83
 
        resizeImage();
84
 
    }
85
 
}
86
 
 
87
 
void ImageResizer::resizeImage()
88
 
{
89
 
    QImage image;
90
 
    QFileInfo source(m_file);
91
 
    if (m_file.isEmpty() || m_largestSide <= 0 ||
92
 
        !source.exists() || !image.load(m_file)) {
93
 
        if (m_resizedImage) {
94
 
            delete m_resizedImage;
95
 
            m_resizedImage = NULL;
96
 
        }
97
 
        Q_EMIT resizedFileChanged();
98
 
        return;
99
 
    }
100
 
 
101
 
    QImage scaledImage;
102
 
    if (image.height() > image.width()) {
103
 
        if (m_largestSide > image.height()) {
104
 
 
105
 
            scaledImage = image;
106
 
        } else {
107
 
            scaledImage = image.scaledToHeight(m_largestSide);
108
 
        }
109
 
    } else {
110
 
        if (m_largestSide >= image.width()) {
111
 
            scaledImage = image;
112
 
        } else {
113
 
            scaledImage = image.scaledToWidth(m_largestSide);
114
 
        }
115
 
    }
116
 
 
117
 
    QString resizedFilePath = QDir::tempPath() + QDir::separator() +
118
 
                              "share-app.resized.XXXXXX." + source.suffix();
119
 
 
120
 
    if (m_resizedImage) {
121
 
        delete m_resizedImage;
122
 
        m_resizedImage = NULL;
123
 
    }
124
 
    m_resizedImage = new QTemporaryFile(resizedFilePath, this);
125
 
    m_resizedImage->open();
126
 
    QImageWriter writer(m_resizedImage, source.suffix().toLatin1());
127
 
    writer.write(scaledImage);
128
 
    writer.setQuality(m_quality);
129
 
    m_resizedImage->close();
130
 
 
131
 
    Q_EMIT resizedFileChanged();
132
 
}