kpresenter

KPrImageEffectDia.cpp

00001 // -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*-
00002 /* This file is part of the KDE project
00003    Copyright (C) 2002 Lukas Tinkl <lukas@kde.org>
00004 
00005    This library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Library General Public
00007    License as published by the Free Software Foundation; either
00008    version 2 of the License, or (at your option) any later version.
00009 
00010    This library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Library General Public License for more details.
00014 
00015    You should have received a copy of the GNU Library General Public License
00016    along with this library; see the file COPYING.LIB.  If not, write to
00017    the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
00019 */
00020 
00021 #include <qcombobox.h>
00022 #include <qlabel.h>
00023 #include <qspinbox.h>
00024 #include <qwidgetstack.h>
00025 #include <qcheckbox.h>
00026 #include <qimage.h>
00027 
00028 #include <kimageeffect.h>
00029 #include <klocale.h>
00030 #include <knuminput.h>
00031 #include <kcolorbutton.h>
00032 
00033 #include "KPrImageEffectDia.h"
00034 
00035 KPrImageEffectDia::KPrImageEffectDia(QWidget * parent, const char * name):
00036     KDialogBase(parent, name, true, i18n("Image Effect"), Ok|Cancel, Ok)
00037 {
00038     m_pix = QPixmap();
00039 
00040     m_effect = IE_NONE;
00041     m_param1 = QVariant();
00042     m_param2 = QVariant();
00043     m_param3 = QVariant();
00044 
00045     base = new EffectBrowserBase(this, "effect_base");
00046 
00047     setMainWidget(base);
00048 
00049     setupSignals();
00050 
00051     connect((QWidget *)base->m_effectCombo, SIGNAL(activated(int)),
00052             this, SLOT(effectChanged(int)));
00053 
00054     connect(this, SIGNAL(okClicked()),
00055             this, SLOT(okClicked()));
00056 }
00057 
00058 KPrImageEffectDia::~KPrImageEffectDia()
00059 {
00060     delete base;
00061 }
00062 
00063 void KPrImageEffectDia::effectChanged(int eff)
00064 {
00065     QImage _tmpImage = m_origpix.convertToImage();
00066 
00067     //clear the (unused) params
00068     m_param1 = QVariant();
00069     m_param2 = QVariant();
00070     m_param3 = QVariant();
00071 
00072     m_effect = static_cast<ImageEffect>(eff);
00073 
00074     switch (m_effect) {
00075     case IE_CHANNEL_INTENSITY: {
00076         m_param1 = QVariant(base->chanInt_value->value());
00077         m_param2 = QVariant(base->chanInt_component->currentItem());
00078         _tmpImage = KImageEffect::channelIntensity(_tmpImage, m_param1.toDouble()/100.0,
00079                                                    static_cast<KImageEffect::RGBComponent>(m_param2.toInt()));
00080         break;
00081     }
00082     case IE_FADE: {
00083         m_param1 = QVariant(base->fade_value->value());
00084         m_param2 = QVariant(base->fade_color->color());
00085         _tmpImage = KImageEffect::fade(_tmpImage, m_param1.toDouble(), m_param2.toColor());
00086         break;
00087     }
00088     case IE_FLATTEN: {
00089         m_param1 = QVariant(base->flatten_color1->color());
00090         m_param2 = QVariant(base->flatten_color2->color());
00091         _tmpImage = KImageEffect::flatten(_tmpImage, m_param1.toColor(), m_param2.toColor());
00092         break;
00093     }
00094     case IE_INTENSITY: {
00095         m_param1 = QVariant(base->intensity_value->value());
00096         _tmpImage = KImageEffect::intensity(_tmpImage, m_param1.toDouble()/100.0);
00097         break;
00098     }
00099     case IE_DESATURATE: {
00100         m_param1 = QVariant(base->desaturate_value->value());
00101         _tmpImage = KImageEffect::desaturate(_tmpImage, m_param1.toDouble());
00102         break;
00103     }
00104     case IE_CONTRAST: {
00105         m_param1 = QVariant(base->contrast_value->value());
00106         _tmpImage = KImageEffect::contrast(_tmpImage, m_param1.toInt());
00107         break;
00108     }
00109     case IE_NORMALIZE: {
00110         KImageEffect::normalize(_tmpImage);
00111         break;
00112     }
00113     case IE_EQUALIZE: {
00114         KImageEffect::equalize(_tmpImage);
00115         break;
00116     }
00117     case IE_THRESHOLD: {
00118         m_param1 = QVariant(base->threshold_value->value());
00119         KImageEffect::threshold(_tmpImage, m_param1.toInt());
00120         break;
00121     }
00122     case IE_SOLARIZE: {
00123         m_param1 = QVariant(base->solarize_value->value());
00124         KImageEffect::solarize(_tmpImage, m_param1.toDouble());
00125         break;
00126     }
00127     case IE_EMBOSS: {
00128         _tmpImage = KImageEffect::emboss(_tmpImage);
00129         break;
00130     }
00131     case IE_DESPECKLE: {
00132         _tmpImage = KImageEffect::despeckle(_tmpImage);
00133         break;
00134     }
00135     case IE_CHARCOAL: {
00136         m_param1 = QVariant(base->charcoal_value->value());
00137         _tmpImage = KImageEffect::charcoal(_tmpImage, m_param1.toDouble());
00138         break;
00139     }
00140     case IE_NOISE: {
00141         m_param1 = QVariant(base->noise_type->currentItem());
00142         _tmpImage = KImageEffect::addNoise(_tmpImage, static_cast<KImageEffect::NoiseType>(m_param1.toInt()));
00143         break;
00144     }
00145     case IE_BLUR: {
00146         m_param1 = QVariant(base->blur_value->value());
00147         _tmpImage = KImageEffect::blur(_tmpImage, m_param1.toDouble());
00148         break;
00149     }
00150     case IE_EDGE: {
00151         m_param1 = QVariant(base->edge_value->value());
00152         _tmpImage = KImageEffect::edge(_tmpImage, m_param1.toDouble());
00153         break;
00154     }
00155     case IE_IMPLODE: {
00156         m_param1 = QVariant(base->implode_value->value());
00157         _tmpImage = KImageEffect::implode(_tmpImage, m_param1.toDouble());
00158         break;
00159     }
00160     case IE_OIL_PAINT: {
00161         m_param1 = QVariant(base->oilPaint_radius->value());
00162         _tmpImage = KImageEffect::oilPaint(_tmpImage, m_param1.toInt());
00163         break;
00164     }
00165     case IE_SHARPEN: {
00166         m_param1 = QVariant(base->sharpen_value->value());
00167         _tmpImage = KImageEffect::sharpen(_tmpImage, m_param1.toDouble());
00168         break;
00169     }
00170     case IE_SPREAD: {
00171         m_param1 = QVariant(base->spread_value->value());
00172         _tmpImage = KImageEffect::spread(_tmpImage, m_param1.toInt());
00173         break;
00174     }
00175     case IE_SHADE: {
00176         m_param1 = QVariant(base->shade_color->isChecked());
00177         m_param2 = QVariant(base->shade_azimuth->value());
00178         m_param3 = QVariant(base->shade_elevation->value());
00179         _tmpImage = KImageEffect::shade(_tmpImage, m_param1.toBool(), m_param2.toDouble(), m_param3.toDouble());
00180         break;
00181     }
00182     case IE_SWIRL: {
00183         m_param1 = QVariant(base->swirl_value->value());
00184         _tmpImage = KImageEffect::swirl(_tmpImage, m_param1.toDouble());
00185         break;
00186     }
00187     case IE_WAVE: {
00188         m_param1 = QVariant(base->wave_amplitude->value());
00189         m_param2 = QVariant(base->wave_length->value());
00190         _tmpImage = KImageEffect::wave(_tmpImage, m_param1.toDouble(), m_param2.toDouble());
00191         break;
00192     }
00193     case IE_NONE:
00194     default:
00195         break;
00196     }
00197 
00198     m_pix.convertFromImage(_tmpImage);
00199 
00200     updatePreview();
00201 }
00202 
00203 void KPrImageEffectDia::okClicked()
00204 {
00205     accept();
00206 }
00207 
00208 
00209 void KPrImageEffectDia::setPixmap(QPixmap pix)
00210 {
00211     m_pix = pix;
00212     m_origpix = pix;
00213     m_pix.detach();
00214     m_origpix.detach();
00215 }
00216 
00217 void KPrImageEffectDia::updatePreview()
00218 {
00219     base->m_previewLabel->setPixmap(m_pix);
00220     base->m_previewLabel->repaint(false);
00221 }
00222 
00223 void KPrImageEffectDia::setEffect(ImageEffect eff, QVariant p1, QVariant p2, QVariant p3)
00224 {
00225     m_effect = eff;
00226     m_param1 = p1;
00227     m_param2 = p2;
00228     m_param3 = p3;
00229 
00230     switch (m_effect) {
00231     case IE_CHANNEL_INTENSITY: {
00232         base->chanInt_value->setValue(m_param1.toInt());
00233         base->chanInt_component->setCurrentItem(m_param2.toInt());
00234         break;
00235     }
00236     case IE_FADE: {
00237         base->fade_value->setValue(m_param1.toDouble());
00238         base->fade_color->setColor(m_param2.toColor());
00239         break;
00240     }
00241     case IE_FLATTEN: {
00242         base->flatten_color1->setColor(m_param1.toColor());
00243         base->flatten_color2->setColor(m_param2.toColor());
00244         break;
00245     }
00246     case IE_INTENSITY: {
00247         base->intensity_value->setValue(m_param1.toInt());
00248         break;
00249     }
00250     case IE_DESATURATE: {
00251         base->desaturate_value->setValue(m_param1.toDouble());
00252         break;
00253     }
00254     case IE_CONTRAST: {
00255         base->contrast_value->setValue(m_param1.toInt());
00256         break;
00257     }
00258     case IE_THRESHOLD: {
00259         base->threshold_value->setValue(m_param1.toInt());
00260         break;
00261     }
00262     case IE_SOLARIZE: {
00263         base->solarize_value->setValue(m_param1.toDouble());
00264         break;
00265     }
00266     case IE_CHARCOAL: {
00267         base->charcoal_value->setValue(m_param1.toDouble());
00268         break;
00269     }
00270     case IE_NOISE: {
00271         base->noise_type->setCurrentItem(m_param1.toInt());
00272         break;
00273     }
00274     case IE_BLUR: {
00275         base->blur_value->setValue(m_param1.toDouble());
00276         break;
00277     }
00278     case IE_EDGE: {
00279         base->edge_value->setValue(m_param1.toDouble());
00280         break;
00281     }
00282     case IE_IMPLODE: {
00283         base->implode_value->setValue(m_param1.toDouble());
00284         break;
00285     }
00286     case IE_OIL_PAINT: {
00287         base->oilPaint_radius->setValue(m_param1.toInt());
00288         break;
00289     }
00290     case IE_SHARPEN: {
00291         base->sharpen_value->setValue(m_param1.toDouble());
00292         break;
00293     }
00294     case IE_SPREAD: {
00295         base->spread_value->setValue(m_param1.toInt());
00296         break;
00297     }
00298     case IE_SHADE: {
00299         base->shade_color->setChecked(m_param1.toBool());
00300         base->shade_azimuth->setValue(m_param2.toDouble());
00301         base->shade_elevation->setValue(m_param3.toDouble());
00302         break;
00303     }
00304     case IE_SWIRL: {
00305         base->swirl_value->setValue(m_param1.toDouble());
00306         break;
00307     }
00308     case IE_WAVE: {
00309         base->wave_amplitude->setValue(m_param1.toDouble());
00310         base->wave_length->setValue(m_param2.toDouble());
00311         break;
00312     }
00313 
00314         //no params
00315     case IE_NORMALIZE:
00316     case IE_EQUALIZE:
00317     case IE_EMBOSS:
00318     case IE_DESPECKLE:
00319 
00320     case IE_NONE:
00321     default:
00322         break;
00323     }
00324 
00325     base->m_effectCombo->setCurrentItem(static_cast<int>(m_effect));
00326     base->m_widgetStack->raiseWidget(static_cast<int>(m_effect)); //bug in Qt? the above doesn't emit this :(
00327 }
00328 
00329 void KPrImageEffectDia::showEvent(QShowEvent * e)
00330 {
00331     KDialogBase::showEvent(e);
00332     effectChanged((int)m_effect);
00333 }
00334 
00335 void KPrImageEffectDia::setupSignals()
00336 {
00337     connect((QWidget *)base->chanInt_value, SIGNAL(valueChanged(int)),
00338             this, SLOT(effectParamChanged()));
00339     connect((QWidget *)base->chanInt_component, SIGNAL(activated(int)),
00340             this, SLOT(effectParamChanged()));
00341 
00342     connect((QWidget *)base->fade_value, SIGNAL(valueChanged(double)),
00343             this, SLOT(effectParamChanged()));
00344     connect((QWidget *)base->fade_color, SIGNAL(changed(const QColor&)),
00345             this, SLOT(effectParamChanged()));
00346 
00347     connect((QWidget *)base->flatten_color1, SIGNAL(changed(const QColor&)),
00348             this, SLOT(effectParamChanged()));
00349     connect((QWidget *)base->flatten_color2, SIGNAL(changed(const QColor&)),
00350             this, SLOT(effectParamChanged()));
00351 
00352     connect((QWidget *)base->intensity_value, SIGNAL(valueChanged(int)),
00353             this, SLOT(effectParamChanged()));
00354 
00355     connect((QWidget *)base->desaturate_value, SIGNAL(valueChanged(double)),
00356             this, SLOT(effectParamChanged()));
00357 
00358     connect((QWidget *)base->contrast_value, SIGNAL(valueChanged(int)),
00359             this, SLOT(effectParamChanged()));
00360 
00361     connect((QWidget *)base->threshold_value, SIGNAL(valueChanged(int)),
00362             this, SLOT(effectParamChanged()));
00363 
00364     connect((QWidget *)base->solarize_value, SIGNAL(valueChanged(double)),
00365             this, SLOT(effectParamChanged()));
00366 
00367     connect((QWidget *)base->charcoal_value, SIGNAL(valueChanged(double)),
00368             this, SLOT(effectParamChanged()));
00369 
00370     connect((QWidget *)base->noise_type, SIGNAL(activated(int)),
00371             this, SLOT(effectParamChanged()));
00372 
00373     connect((QWidget *)base->blur_value, SIGNAL(valueChanged(double)),
00374             this, SLOT(effectParamChanged()));
00375 
00376     connect((QWidget *)base->edge_value, SIGNAL(valueChanged(double)),
00377             this, SLOT(effectParamChanged()));
00378 
00379     connect((QWidget *)base->implode_value, SIGNAL(valueChanged(double)),
00380             this, SLOT(effectParamChanged()));
00381 
00382     connect((QWidget *)base->oilPaint_radius, SIGNAL(valueChanged(int)),
00383             this, SLOT(effectParamChanged()));
00384 
00385     connect((QWidget *)base->sharpen_value, SIGNAL(valueChanged(double)),
00386             this, SLOT(effectParamChanged()));
00387 
00388     connect((QWidget *)base->spread_value, SIGNAL(valueChanged(int)),
00389             this, SLOT(effectParamChanged()));
00390 
00391     connect((QWidget *)base->shade_color, SIGNAL(toggled(bool)),
00392             this, SLOT(effectParamChanged()));
00393     connect((QWidget *)base->shade_elevation, SIGNAL(valueChanged(double)),
00394             this, SLOT(effectParamChanged()));
00395     connect((QWidget *)base->shade_azimuth, SIGNAL(valueChanged(double)),
00396             this, SLOT(effectParamChanged()));
00397 
00398     connect((QWidget *)base->swirl_value, SIGNAL(valueChanged(double)),
00399             this, SLOT(effectParamChanged()));
00400 
00401     connect((QWidget *)base->wave_amplitude, SIGNAL(valueChanged(double)),
00402             this, SLOT(effectParamChanged()));
00403     connect((QWidget *)base->wave_length, SIGNAL(valueChanged(double)),
00404             this, SLOT(effectParamChanged()));
00405 }
00406 
00407 void KPrImageEffectDia::effectParamChanged()
00408 {
00409     effectChanged(base->m_effectCombo->currentItem());
00410 }
00411 
00412 #include "KPrImageEffectDia.moc"
KDE Home | KDE Accessibility Home | Description of Access Keys