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 }