File indexing completed on 2024-06-16 04:16:36

0001 /*
0002  * This file is part of Krita
0003  *
0004  * SPDX-FileCopyrightText: 2006 Cyrille Berger <cberger@cberger.net>
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 
0009 #include "kis_wdg_color_to_alpha.h"
0010 #include <QCheckBox>
0011 #include <QLayout>
0012 #include <QSpinBox>
0013 
0014 #include <KoColor.h>
0015 #include <KoToolManager.h>
0016 
0017 #include <KisViewManager.h>
0018 #include <kis_canvas2.h>
0019 #include <kis_canvas_resource_provider.h>
0020 #include <filter/kis_filter.h>
0021 #include <filter/kis_filter_configuration.h>
0022 #include <kis_selection.h>
0023 #include <kis_paint_device.h>
0024 #include <kis_processing_information.h>
0025 #include <KoColorSpaceRegistry.h>
0026 #include <KisGlobalResourcesInterface.h>
0027 
0028 #include "ui_wdgcolortoalphabase.h"
0029 
0030 KisWdgColorToAlpha::KisWdgColorToAlpha(QWidget * parent)
0031     : KisConfigWidget(parent),
0032       m_view(0)
0033 {
0034     m_widget = new Ui_WdgColorToAlphaBase();
0035     m_widget->setupUi(this);
0036 
0037     m_widget->textLabel1->hide();
0038 
0039     m_widget->intThreshold->setRange(1, 255, 0);
0040 
0041     connect(m_widget->colorSelector, SIGNAL(sigNewColor(KoColor)), SLOT(slotColorSelectorChanged(KoColor)));
0042     connect(m_widget->intThreshold, SIGNAL(valueChanged(qreal)), SIGNAL(sigConfigurationItemChanged()));
0043     connect(m_widget->btnCustomColor, SIGNAL(changed(KoColor)), SLOT(slotCustomColorSelected(KoColor)));
0044 
0045     KoColor c(Qt::white, KoColorSpaceRegistry::instance()->rgb8());
0046     m_widget->btnCustomColor->setColor(c);
0047 }
0048 
0049 KisWdgColorToAlpha::~KisWdgColorToAlpha()
0050 {
0051     delete m_widget;
0052 }
0053 
0054 void KisWdgColorToAlpha::setView(KisViewManager *view)
0055 {
0056     m_view = view;
0057 
0058     KoCanvasResourcesInterfaceSP canvasResources = view ? view->canvasBase()->resourceManager()->canvasResourcesInterface() : nullptr;
0059     setCanvasResourcesInterface(canvasResources);
0060 }
0061 
0062 void KisWdgColorToAlpha::slotFgColorChanged(const KoColor &color)
0063 {
0064     m_widget->btnCustomColor->setColor(color);
0065 }
0066 
0067 void KisWdgColorToAlpha::slotColorSelectorChanged(const KoColor &color)
0068 {
0069     m_widget->btnCustomColor->setColor(color);
0070 }
0071 
0072 void KisWdgColorToAlpha::slotCustomColorSelected(const KoColor &color)
0073 {
0074     KoColor c(color, KoColorSpaceRegistry::instance()->rgb8());
0075     m_widget->colorSelector->slotSetColor(color);
0076     emit sigConfigurationItemChanged();
0077 }
0078 
0079 void KisWdgColorToAlpha::setConfiguration(const KisPropertiesConfigurationSP config)
0080 {
0081     QVariant value;
0082     if (config->getProperty("targetcolor", value)) {
0083         KoColor c;
0084         if (value.value<QColor>().isValid()) {
0085             c = KoColor(value.value<QColor>(), KoColorSpaceRegistry::instance()->rgb8());
0086         } else {
0087             c = value.value<KoColor>();
0088         }
0089         m_widget->colorSelector->slotSetColor(c);
0090     }
0091     if (config->getProperty("threshold", value)) {
0092         m_widget->intThreshold->setValue(value.toInt());
0093     }
0094 }
0095 
0096 KisPropertiesConfigurationSP KisWdgColorToAlpha::configuration() const
0097 {
0098     KisFilterConfigurationSP config = new KisFilterConfiguration("colortoalpha", 1, KisGlobalResourcesInterface::instance());
0099     config->setProperty("targetcolor", widget()->colorSelector->getCurrentColor().toQColor());
0100     config->setProperty("threshold", widget()->intThreshold->value());
0101     return config;
0102 }
0103 
0104 void KisWdgColorToAlpha::hideEvent(QHideEvent *)
0105 {
0106     if (m_view) {
0107         disconnect(m_view->canvasResourceProvider(), SIGNAL(sigFGColorChanged(KoColor)), this, SLOT(slotFgColorChanged(KoColor)));
0108     }
0109 }
0110 
0111 void KisWdgColorToAlpha::showEvent(QShowEvent *)
0112 {
0113     if (m_view) {
0114         connect(m_view->canvasResourceProvider(), SIGNAL(sigFGColorChanged(KoColor)), this, SLOT(slotFgColorChanged(KoColor)));
0115     }
0116 }
0117 
0118