File indexing completed on 2024-06-09 04:27:19
0001 /* 0002 * This file is part of Krita 0003 * 0004 * SPDX-FileCopyrightText: 2006 Frederic Coiffier <fcoiffie@gmail.com> 0005 * SPDX-FileCopyrightText: 2021 Deif Lou <ginoba@gmail.com> 0006 * 0007 * SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #include <filter/kis_filter_category_ids.h> 0011 0012 #include "../colorsfilters/kis_multichannel_utils.h" 0013 0014 #include "KisLevelsFilter.h" 0015 #include "KisLevelsConfigWidget.h" 0016 0017 KisLevelsFilter::KisLevelsFilter() 0018 : KisColorTransformationFilter(id(), FiltersCategoryAdjustId, i18n("&Levels...")) 0019 { 0020 setSupportsPainting(true); 0021 setColorSpaceIndependence(TO_LAB16); 0022 setShortcut(QKeySequence(Qt::CTRL + Qt::Key_L)); 0023 } 0024 0025 KisFilterConfigurationSP KisLevelsFilter::factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const 0026 { 0027 return new KisLevelsFilterConfiguration(0, resourcesInterface); 0028 } 0029 0030 KisConfigWidget * KisLevelsFilter::createConfigurationWidget(QWidget* parent, const KisPaintDeviceSP dev, bool) const 0031 { 0032 return new KisLevelsConfigWidget(parent, dev, dev->compositionSourceColorSpace()); 0033 } 0034 0035 KoColorTransformation* KisLevelsFilter::createTransformation(const KoColorSpace* cs, const KisFilterConfigurationSP config) const 0036 { 0037 Q_ASSERT(cs); 0038 const KisLevelsFilterConfiguration *config_ = dynamic_cast<const KisLevelsFilterConfiguration*>(config.data()); 0039 Q_ASSERT(config_); 0040 0041 if (config_->useLightnessMode()) { 0042 if (!config_->lightnessLevelsCurve().isIdentity()) { 0043 return cs->createBrightnessContrastAdjustment(config_->lightnessTransfer().constData()); 0044 } 0045 } else { 0046 QList<bool> isIdentityList; 0047 for (const KisLevelsCurve &levelsCurve : config_->levelsCurves()) { 0048 isIdentityList.append(levelsCurve.isIdentity()); 0049 } 0050 0051 return KisMultiChannelUtils::createPerChannelTransformationFromTransfers(cs, config_->transfers(), isIdentityList); 0052 } 0053 return nullptr; 0054 }