From a5f1b8710c2dc3c9540e3e828ba411ee1ff7f831 Mon Sep 17 00:00:00 2001 From: Thorsten Zachmann Date: Wed, 19 Aug 2015 08:46:45 +0200 Subject: [PATCH] Revert "Revert "Use the KisColorTransformationConfiguration"" This reverts commit ae00bf64f3e2bf5ced79cf06e3f013c460c854ae and fixes the problem described in BUG 351009 by creating a transformation per thread as some seem to be not thread save. --- .../kis_color_transformation_configuration.cc | 21 +++++++++++-------- .../kis_color_balance_filter.cpp | 6 +++--- .../colorsfilters/kis_desaturate_filter.cpp | 6 +++--- .../kis_hsv_adjustment_filter.cpp | 6 +++--- krita/plugins/filters/dodgeburn/DodgeBurn.cpp | 4 ++-- .../filters/indexcolors/indexcolors.cpp | 4 ++-- krita/plugins/filters/posterize/posterize.cpp | 4 ++-- 7 files changed, 27 insertions(+), 24 deletions(-) diff --git a/krita/image/filter/kis_color_transformation_configuration.cc b/krita/image/filter/kis_color_transformation_configuration.cc index 7589b83767..d058531aba 100644 --- a/krita/image/filter/kis_color_transformation_configuration.cc +++ b/krita/image/filter/kis_color_transformation_configuration.cc @@ -19,19 +19,20 @@ #include "filter/kis_color_transformation_configuration.h" #include +#include +#include #include "filter/kis_color_transformation_filter.h" struct KisColorTransformationConfiguration::Private { Private() - : colorTransformation(0) {} ~Private() { - delete colorTransformation; + qDeleteAll(colorTransformation); } - KoColorTransformation *colorTransformation; + QMap colorTransformation; QMutex mutex; }; @@ -48,11 +49,13 @@ KisColorTransformationConfiguration::~KisColorTransformationConfiguration() KoColorTransformation* KisColorTransformationConfiguration::colorTransformation(const KoColorSpace *cs, const KisColorTransformationFilter * filter) const { - if (!d->colorTransformation) { - QMutexLocker locker(&d->mutex); - if (!d->colorTransformation) { - d->colorTransformation = filter->createTransformation(cs, this); - } + qDebug() << QThread::currentThread(); + QMutexLocker locker(&d->mutex); + KoColorTransformation *transformation = d->colorTransformation.value(QThread::currentThread(), 0); + if (!transformation) { + transformation = filter->createTransformation(cs, this); + d->colorTransformation.insert(QThread::currentThread(), transformation); } - return d->colorTransformation; + locker.unlock(); + return transformation; } diff --git a/krita/plugins/filters/colorsfilters/kis_color_balance_filter.cpp b/krita/plugins/filters/colorsfilters/kis_color_balance_filter.cpp index 168f86fe09..4ba2f70317 100644 --- a/krita/plugins/filters/colorsfilters/kis_color_balance_filter.cpp +++ b/krita/plugins/filters/colorsfilters/kis_color_balance_filter.cpp @@ -18,7 +18,7 @@ */ #include "kis_color_balance_filter.h" -#include "filter/kis_filter_configuration.h" +#include "filter/kis_color_transformation_configuration.h" #include "kis_selection.h" #include "kis_paint_device.h" #include "kis_processing_information.h" @@ -59,7 +59,7 @@ KoColorTransformation * KisColorBalanceFilter::createTransformation(const KoColo KisFilterConfiguration* KisColorBalanceFilter::factoryConfiguration(const KisPaintDeviceSP) const { - KisFilterConfiguration* config = new KisFilterConfiguration(id().id(), 0); + KisColorTransformationConfiguration* config = new KisColorTransformationConfiguration(id().id(), 0); config->setProperty("cyan_red_midtones", 0); config->setProperty("yellow_green_midtones", 0); config->setProperty("magenta_blue_midtones", 0); @@ -149,7 +149,7 @@ KisColorBalanceConfigWidget::~KisColorBalanceConfigWidget() KisPropertiesConfiguration * KisColorBalanceConfigWidget::configuration() const { - KisFilterConfiguration* c = new KisFilterConfiguration(KisColorBalanceFilter::id().id(), 0); + KisColorTransformationConfiguration* c = new KisColorTransformationConfiguration(KisColorBalanceFilter::id().id(), 0); c->setProperty("cyan_red_shadows", m_page->cyanRedShadowsSlider->value()); c->setProperty("magenta_green_shadows", m_page->magentaGreenShadowsSlider->value()); diff --git a/krita/plugins/filters/colorsfilters/kis_desaturate_filter.cpp b/krita/plugins/filters/colorsfilters/kis_desaturate_filter.cpp index c10d16b591..0f9bc69822 100644 --- a/krita/plugins/filters/colorsfilters/kis_desaturate_filter.cpp +++ b/krita/plugins/filters/colorsfilters/kis_desaturate_filter.cpp @@ -38,7 +38,7 @@ #include "KoBasicHistogramProducers.h" #include #include -#include +#include #include #include #include @@ -82,7 +82,7 @@ KoColorTransformation* KisDesaturateFilter::createTransformation(const KoColorSp KisFilterConfiguration *KisDesaturateFilter::factoryConfiguration(const KisPaintDeviceSP) const { - KisFilterConfiguration* config = new KisFilterConfiguration(id().id(), 1); + KisColorTransformationConfiguration* config = new KisColorTransformationConfiguration(id().id(), 1); config->setProperty("type", 0); return config; } @@ -109,7 +109,7 @@ KisDesaturateConfigWidget::~KisDesaturateConfigWidget() KisPropertiesConfiguration * KisDesaturateConfigWidget::configuration() const { - KisFilterConfiguration* c = new KisFilterConfiguration(KisDesaturateFilter::id().id(), 0); + KisColorTransformationConfiguration* c = new KisColorTransformationConfiguration(KisDesaturateFilter::id().id(), 0); c->setProperty("type", m_group->checkedId()); return c; } diff --git a/krita/plugins/filters/colorsfilters/kis_hsv_adjustment_filter.cpp b/krita/plugins/filters/colorsfilters/kis_hsv_adjustment_filter.cpp index 55d1f1eeb1..21426a754f 100644 --- a/krita/plugins/filters/colorsfilters/kis_hsv_adjustment_filter.cpp +++ b/krita/plugins/filters/colorsfilters/kis_hsv_adjustment_filter.cpp @@ -19,7 +19,7 @@ #include "kis_hsv_adjustment_filter.h" -#include +#include #include #include #include @@ -59,7 +59,7 @@ KoColorTransformation* KisHSVAdjustmentFilter::createTransformation(const KoColo KisFilterConfiguration* KisHSVAdjustmentFilter::factoryConfiguration(const KisPaintDeviceSP) const { - KisFilterConfiguration* config = new KisFilterConfiguration(id().id(), 1); + KisColorTransformationConfiguration* config = new KisColorTransformationConfiguration(id().id(), 1); config->setProperty("h", 0); config->setProperty("s", 0); config->setProperty("v", 0); @@ -96,7 +96,7 @@ KisHSVConfigWidget::~KisHSVConfigWidget() KisPropertiesConfiguration * KisHSVConfigWidget::configuration() const { - KisFilterConfiguration* c = new KisFilterConfiguration(KisHSVAdjustmentFilter::id().id(), 0); + KisColorTransformationConfiguration* c = new KisColorTransformationConfiguration(KisHSVAdjustmentFilter::id().id(), 0); c->setProperty("h", m_page->hue->value()); c->setProperty("s", m_page->saturation->value()); c->setProperty("v", m_page->value->value()); diff --git a/krita/plugins/filters/dodgeburn/DodgeBurn.cpp b/krita/plugins/filters/dodgeburn/DodgeBurn.cpp index 6b68b2dfb4..94f5d61d55 100644 --- a/krita/plugins/filters/dodgeburn/DodgeBurn.cpp +++ b/krita/plugins/filters/dodgeburn/DodgeBurn.cpp @@ -16,7 +16,7 @@ */ #include "DodgeBurn.h" -#include +#include #include #include "ui_DodgeBurnConfigurationBaseWidget.h" @@ -74,7 +74,7 @@ KisDodgeBurnConfigWidget::~KisDodgeBurnConfigWidget() KisPropertiesConfiguration * KisDodgeBurnConfigWidget::configuration() const { - KisFilterConfiguration* c = new KisFilterConfiguration(m_id, 0); + KisColorTransformationConfiguration* c = new KisColorTransformationConfiguration(m_id, 0); int type = 0; if(m_page->radioButtonHighlights->isChecked()) { diff --git a/krita/plugins/filters/indexcolors/indexcolors.cpp b/krita/plugins/filters/indexcolors/indexcolors.cpp index a2f971634c..43cd49a97e 100644 --- a/krita/plugins/filters/indexcolors/indexcolors.cpp +++ b/krita/plugins/filters/indexcolors/indexcolors.cpp @@ -27,7 +27,7 @@ #include #include #include -#include +#include #include #include "kiswdgindexcolors.h" @@ -87,7 +87,7 @@ KisConfigWidget* KisFilterIndexColors::createConfigurationWidget(QWidget* parent KisFilterConfiguration* KisFilterIndexColors::factoryConfiguration(const KisPaintDeviceSP) const { - KisFilterConfiguration* config = new KisFilterConfiguration(id().id(), 0); + KisColorTransformationConfiguration* config = new KisColorTransformationConfiguration(id().id(), 0); PaletteGeneratorConfig palCfg; // Default constructor is factory config config->setProperty("paletteGen", palCfg.toByteArray()); diff --git a/krita/plugins/filters/posterize/posterize.cpp b/krita/plugins/filters/posterize/posterize.cpp index 624f29cd45..44ac25db9e 100644 --- a/krita/plugins/filters/posterize/posterize.cpp +++ b/krita/plugins/filters/posterize/posterize.cpp @@ -36,7 +36,7 @@ #include #include -#include +#include #include K_PLUGIN_FACTORY(PosterizeFactory, registerPlugin();) @@ -80,7 +80,7 @@ KisConfigWidget* KisFilterPosterize::createConfigurationWidget(QWidget* parent, KisFilterConfiguration* KisFilterPosterize::factoryConfiguration(const KisPaintDeviceSP) const { - KisFilterConfiguration* config = new KisFilterConfiguration(id().id(), 0); + KisColorTransformationConfiguration* config = new KisColorTransformationConfiguration(id().id(), 0); config->setProperty("steps", 16); return config; } -- GitLab