File indexing completed on 2025-02-23 04:11:45
0001 /* 0002 * This file is part of the KDE project 0003 * 0004 * SPDX-FileCopyrightText: 2016 Spencer Brown <sbrown655@gmail.com> 0005 * SPDX-FileCopyrightText: 2020 Deif Lou <ginoba@gmail.com> 0006 * 0007 * SPDX-License-Identifier: GPL-2.0-or-later 0008 */ 0009 0010 #include <filter/kis_filter_configuration.h> 0011 #include <KisGlobalResourcesInterface.h> 0012 #include <KisViewManager.h> 0013 #include "kis_canvas_resource_provider.h" 0014 #include <kis_signals_blocker.h> 0015 0016 #include "KisGradientMapFilterConfigWidget.h" 0017 #include "KisGradientMapFilterConfiguration.h" 0018 0019 0020 KisGradientMapFilterConfigWidget::KisGradientMapFilterConfigWidget(QWidget *parent, Qt::WindowFlags f) 0021 : KisConfigWidget(parent, f) 0022 { 0023 m_ui.setupUi(this); 0024 0025 m_gradientChangedCompressor = new KisSignalCompressor(50, KisSignalCompressor::FIRST_ACTIVE); 0026 0027 m_ui.widgetGradientEditor->setContentsMargins(10, 10, 10, 10); 0028 m_ui.widgetGradientEditor->loadUISettings(); 0029 0030 connect(m_ui.widgetGradientEditor, SIGNAL(sigGradientChanged()), m_gradientChangedCompressor, SLOT(start())); 0031 connect(m_gradientChangedCompressor, SIGNAL(timeout()), this, SIGNAL(sigConfigurationItemChanged())); 0032 connect(m_ui.comboBoxColorMode, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &KisConfigWidget::sigConfigurationItemChanged); 0033 connect(m_ui.widgetDither, SIGNAL(sigConfigurationItemChanged()), this, SIGNAL(sigConfigurationItemChanged())); 0034 } 0035 0036 KisGradientMapFilterConfigWidget::~KisGradientMapFilterConfigWidget() 0037 { 0038 m_ui.widgetGradientEditor->saveUISettings(); 0039 } 0040 0041 KisPropertiesConfigurationSP KisGradientMapFilterConfigWidget::configuration() const 0042 { 0043 KisGradientMapFilterConfiguration *config = new KisGradientMapFilterConfiguration(KisGlobalResourcesInterface::instance()); 0044 0045 KoAbstractGradientSP gradient = m_ui.widgetGradientEditor->gradient(); 0046 0047 KIS_SAFE_ASSERT_RECOVER_NOOP(canvasResourcesInterface()); 0048 if (gradient && canvasResourcesInterface()) { 0049 gradient->bakeVariableColors(canvasResourcesInterface()); 0050 } 0051 config->setGradient(gradient); 0052 0053 config->setColorMode(m_ui.comboBoxColorMode->currentIndex()); 0054 m_ui.widgetDither->configuration(*config, "dither/"); 0055 0056 return config; 0057 } 0058 0059 void KisGradientMapFilterConfigWidget::setConfiguration(const KisPropertiesConfigurationSP config) 0060 { 0061 const KisGradientMapFilterConfiguration *filterConfig = 0062 dynamic_cast<const KisGradientMapFilterConfiguration*>(config.data()); 0063 Q_ASSERT(filterConfig); 0064 0065 { 0066 KisSignalsBlocker signalsBlocker(this); 0067 0068 KoAbstractGradientSP fallbackGradient = nullptr; 0069 0070 KIS_SAFE_ASSERT_RECOVER_NOOP(canvasResourcesInterface()); 0071 if (canvasResourcesInterface()) { 0072 KoAbstractGradientSP currentGradient = 0073 canvasResourcesInterface()->resource(KoCanvasResource::CurrentGradient).value<KoAbstractGradientSP>(); 0074 if (currentGradient) { 0075 fallbackGradient = currentGradient->clone().dynamicCast<KoAbstractGradient>(); 0076 } 0077 } 0078 KisSignalsBlocker b(m_ui.widgetGradientEditor); 0079 m_ui.widgetGradientEditor->setGradient(filterConfig->gradient(fallbackGradient)); 0080 m_ui.comboBoxColorMode->setCurrentIndex(filterConfig->colorMode()); 0081 m_ui.widgetDither->setConfiguration(*filterConfig, "dither/"); 0082 } 0083 0084 emit sigConfigurationItemChanged(); 0085 } 0086 0087 void KisGradientMapFilterConfigWidget::setView(KisViewManager *view) 0088 { 0089 KoCanvasResourcesInterfaceSP canvasResources = view ? view->canvasResourceProvider()->resourceManager()->canvasResourcesInterface() : nullptr; 0090 setCanvasResourcesInterface(canvasResources); 0091 } 0092 0093 void KisGradientMapFilterConfigWidget::setCanvasResourcesInterface(KoCanvasResourcesInterfaceSP canvasResourcesInterface) 0094 { 0095 m_ui.widgetGradientEditor->setCanvasResourcesInterface(canvasResourcesInterface); 0096 KisConfigWidget::setCanvasResourcesInterface(canvasResourcesInterface); 0097 }