~ubuntu-branches/ubuntu/saucy/digikam/saucy

« back to all changes in this revision

Viewing changes to core/imageplugins/color/bwsepiatool.cpp

  • Committer: Package Import Robot
  • Author(s): Felix Geyer, Rohan Garg, Philip Muškovac, Felix Geyer
  • Date: 2011-09-23 18:18:55 UTC
  • mfrom: (1.2.36 upstream)
  • Revision ID: package-import@ubuntu.com-20110923181855-ifs67wxkugshev9k
Tags: 2:2.1.1-0ubuntu1
[ Rohan Garg ]
* New upstream release (LP: #834190)
  - debian/control
    + Build with libqtwebkit-dev
 - debian/kipi-plugins-common
    + Install libkvkontakte required by kipi-plugins
 - debian/digikam
    + Install panoramagui

[ Philip Muškovac ]
* New upstream release
  - debian/control:
    + Add libcv-dev, libcvaux-dev, libhighgui-dev, libboost-graph1.46-dev,
      libksane-dev, libxml2-dev, libxslt-dev, libqt4-opengl-dev, libqjson-dev,
      libgpod-dev and libqca2-dev to build-deps
    + Add packages for kipi-plugins, libmediawiki, libkface, libkgeomap and
      libkvkontakte
  - debian/rules:
    + Don't build with gphoto2 since it doesn't build with it.
  - Add kubuntu_fix_test_linking.diff to fix linking of the dngconverter test
  - update install files
  - update kubuntu_01_mysqld_executable_name.diff for new cmake layout
    and rename to kubuntu_mysqld_executable_name.diff
* Fix typo in digikam-data description (LP: #804894)
* Fix Vcs links

[ Felix Geyer ]
* Move library data files to the new packages libkface-data, libkgeomap-data
  and libkvkontakte-data.
* Override version of the embedded library packages to 1.0~digikam<version>.
* Exclude the library packages from digikam-dbg to prevent file conflicts in
  the future.
* Call dh_install with --list-missing.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* ============================================================
 
2
 *
 
3
 * This file is a part of digiKam project
 
4
 * http://www.digikam.org
 
5
 *
 
6
 * Date        : 2004-12-06
 
7
 * Description : Black and White conversion tool.
 
8
 *
 
9
 * Copyright (C) 2004-2005 by Renchi Raju <renchi@pooh.tam.uiuc.edu>
 
10
 * Copyright (C) 2006-2010 by Gilles Caulier <caulier dot gilles at gmail dot com>
 
11
 *
 
12
 * This program is free software; you can redistribute it
 
13
 * and/or modify it under the terms of the GNU General
 
14
 * Public License as published by the Free Software Foundation;
 
15
 * either version 2, or (at your option)
 
16
 * any later version.
 
17
 *
 
18
 * This program is distributed in the hope that it will be useful,
 
19
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
20
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
21
 * GNU General Public License for more details.
 
22
 *
 
23
 * ============================================================ */
 
24
 
 
25
#include "bwsepiatool.moc"
 
26
 
 
27
// Qt includes
 
28
 
 
29
#include <QGridLayout>
 
30
 
 
31
// KDE includes
 
32
 
 
33
#include <kapplication.h>
 
34
#include <kconfig.h>
 
35
#include <kconfiggroup.h>
 
36
#include <kglobalsettings.h>
 
37
#include <kiconloader.h>
 
38
#include <klocale.h>
 
39
 
 
40
// LibKDcraw includes
 
41
 
 
42
#include <libkdcraw/rnuminput.h>
 
43
 
 
44
// Local includes
 
45
 
 
46
#include "colorgradientwidget.h"
 
47
#include "editortoolsettings.h"
 
48
#include "histogramwidget.h"
 
49
#include "histogrambox.h"
 
50
#include "imageiface.h"
 
51
#include "imageregionwidget.h"
 
52
#include "bwsepiafilter.h"
 
53
#include "bwsepiasettings.h"
 
54
 
 
55
using namespace KDcrawIface;
 
56
 
 
57
namespace DigikamColorImagePlugin
 
58
{
 
59
 
 
60
class BWSepiaTool::BWSepiaToolPriv
 
61
{
 
62
 
 
63
public:
 
64
 
 
65
    BWSepiaToolPriv() :
 
66
        destinationPreviewData(0),
 
67
        bwsepiaSettings(0),
 
68
        previewWidget(0),
 
69
        gboxSettings(0)
 
70
    {}
 
71
 
 
72
    static const QString configGroupName;
 
73
    static const QString configHistogramChannelEntry;
 
74
    static const QString configHistogramScaleEntry;
 
75
 
 
76
    uchar*               destinationPreviewData;
 
77
 
 
78
    BWSepiaSettings*     bwsepiaSettings;
 
79
 
 
80
    ImageRegionWidget*   previewWidget;
 
81
 
 
82
    EditorToolSettings*  gboxSettings;
 
83
};
 
84
const QString BWSepiaTool::BWSepiaToolPriv::configGroupName("convertbw Tool");
 
85
const QString BWSepiaTool::BWSepiaToolPriv::configHistogramChannelEntry("Histogram Channel");
 
86
const QString BWSepiaTool::BWSepiaToolPriv::configHistogramScaleEntry("Histogram Scale");
 
87
 
 
88
// -----------------------------------------------------------------------------------
 
89
 
 
90
BWSepiaTool::BWSepiaTool(QObject* parent)
 
91
    : EditorToolThreaded(parent), d(new BWSepiaToolPriv)
 
92
{
 
93
    setObjectName("convertbw");
 
94
    setToolName(i18n("Black and White"));
 
95
    setToolIcon(SmallIcon("bwtonal"));
 
96
    setToolHelp("blackandwhitetool.anchor");
 
97
 
 
98
    // -------------------------------------------------------------
 
99
 
 
100
    d->previewWidget = new ImageRegionWidget;
 
101
    setToolView(d->previewWidget);
 
102
    setPreviewModeMask(PreviewToolBar::AllPreviewModes);
 
103
 
 
104
    // -------------------------------------------------------------
 
105
 
 
106
    d->gboxSettings = new EditorToolSettings;
 
107
    d->gboxSettings->setTools(EditorToolSettings::Histogram);
 
108
    d->gboxSettings->setButtons(EditorToolSettings::Default|
 
109
                                EditorToolSettings::Ok|
 
110
                                EditorToolSettings::Cancel|
 
111
                                EditorToolSettings::Load|
 
112
                                EditorToolSettings::SaveAs);
 
113
 
 
114
    ImageIface iface(0, 0);
 
115
    d->bwsepiaSettings = new BWSepiaSettings(d->gboxSettings->plainPage(), iface.getOriginalImg());
 
116
 
 
117
    setToolSettings(d->gboxSettings);
 
118
    init();
 
119
 
 
120
    // -------------------------------------------------------------
 
121
 
 
122
    connect(d->bwsepiaSettings, SIGNAL(signalSettingsChanged()),
 
123
            this, SLOT(slotTimer()));
 
124
 
 
125
    connect(d->previewWidget, SIGNAL(signalResized()),
 
126
            this, SLOT(slotEffect()));
 
127
 
 
128
    slotTimer();
 
129
}
 
130
 
 
131
BWSepiaTool::~BWSepiaTool()
 
132
{
 
133
    if (d->destinationPreviewData)
 
134
    {
 
135
        delete [] d->destinationPreviewData;
 
136
    }
 
137
 
 
138
    delete d;
 
139
}
 
140
 
 
141
void BWSepiaTool::slotInit()
 
142
{
 
143
    EditorToolThreaded::slotInit();
 
144
    d->bwsepiaSettings->startPreviewFilters();
 
145
}
 
146
 
 
147
void BWSepiaTool::readSettings()
 
148
{
 
149
    KSharedConfig::Ptr config = KGlobal::config();
 
150
    KConfigGroup group        = config->group(d->configGroupName);
 
151
 
 
152
 
 
153
    // we need to call the set methods here, otherwise the curve will not be updated correctly
 
154
    d->gboxSettings->histogramBox()->setChannel((ChannelType)group.readEntry(d->configHistogramChannelEntry,
 
155
            (int)LuminosityChannel));
 
156
    d->gboxSettings->histogramBox()->setScale((HistogramScale)group.readEntry(d->configHistogramScaleEntry,
 
157
            (int)LogScaleHistogram));
 
158
 
 
159
    d->bwsepiaSettings->readSettings(group);
 
160
    slotScaleChanged();
 
161
}
 
162
 
 
163
void BWSepiaTool::writeSettings()
 
164
{
 
165
    KSharedConfig::Ptr config = KGlobal::config();
 
166
    KConfigGroup group        = config->group(d->configGroupName);
 
167
 
 
168
    group.writeEntry(d->configHistogramChannelEntry, (int)d->gboxSettings->histogramBox()->channel());
 
169
    group.writeEntry(d->configHistogramScaleEntry,   (int)d->gboxSettings->histogramBox()->scale());
 
170
 
 
171
    d->bwsepiaSettings->writeSettings(group);
 
172
 
 
173
    group.sync();
 
174
}
 
175
 
 
176
void BWSepiaTool::slotResetSettings()
 
177
{
 
178
    d->bwsepiaSettings->resetToDefault();
 
179
    d->gboxSettings->histogramBox()->histogram()->reset();
 
180
    slotEffect();
 
181
}
 
182
 
 
183
void BWSepiaTool::prepareEffect()
 
184
{
 
185
    BWSepiaContainer settings = d->bwsepiaSettings->settings();
 
186
 
 
187
    d->gboxSettings->histogramBox()->histogram()->stopHistogramComputation();
 
188
 
 
189
    DImg preview = d->previewWidget->getOriginalRegionImage(true);
 
190
    setFilter(new BWSepiaFilter(&preview, this, settings));
 
191
}
 
192
 
 
193
void BWSepiaTool::putPreviewData()
 
194
{
 
195
    DImg preview = filter()->getTargetImage();
 
196
    d->previewWidget->setPreviewImage(preview);
 
197
 
 
198
    // Update histogram.
 
199
 
 
200
    if (d->destinationPreviewData)
 
201
    {
 
202
        delete [] d->destinationPreviewData;
 
203
    }
 
204
 
 
205
    d->destinationPreviewData = preview.copyBits();
 
206
    d->gboxSettings->histogramBox()->histogram()->updateData(d->destinationPreviewData,
 
207
            preview.width(), preview.height(), preview.sixteenBit(),
 
208
            0, 0, 0, false);
 
209
}
 
210
 
 
211
void BWSepiaTool::prepareFinal()
 
212
{
 
213
    BWSepiaContainer settings = d->bwsepiaSettings->settings();
 
214
 
 
215
    ImageIface iface(0, 0);
 
216
    setFilter(new BWSepiaFilter(iface.getOriginalImg(), this, settings));
 
217
}
 
218
 
 
219
void BWSepiaTool::putFinalData()
 
220
{
 
221
    ImageIface iface(0, 0);
 
222
    iface.putOriginalImage(i18n("Convert to Black and White"), filter()->filterAction(), filter()->getTargetImage().bits());
 
223
}
 
224
 
 
225
void BWSepiaTool::slotLoadSettings()
 
226
{
 
227
    d->bwsepiaSettings->loadSettings();
 
228
    d->gboxSettings->histogramBox()->histogram()->reset();
 
229
    slotEffect();
 
230
}
 
231
 
 
232
void BWSepiaTool::slotSaveAsSettings()
 
233
{
 
234
    d->bwsepiaSettings->saveAsSettings();
 
235
}
 
236
 
 
237
void BWSepiaTool::slotScaleChanged()
 
238
{
 
239
    d->bwsepiaSettings->setScaleType(d->gboxSettings->histogramBox()->scale());
 
240
}
 
241
 
 
242
}  // namespace DigikamColorImagePlugin