File indexing completed on 2024-06-09 04:26:52

0001 /*
0002  *  SPDX-FileCopyrightText: 2008 Cyrille Berger <cberger@cberger.net>
0003  *
0004  *  SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #include "smallcolorselector_dock.h"
0008 
0009 #include <klocalizedstring.h>
0010 #include "kis_canvas2.h"
0011 
0012 #include "kis_small_color_widget.h"
0013 #include "kis_canvas_resource_provider.h"
0014 
0015 #include <KoColorSpaceRegistry.h>
0016 
0017 #include <QVBoxLayout>
0018 
0019 SmallColorSelectorDock::SmallColorSelectorDock()
0020         : QDockWidget()
0021         , m_canvas(0)
0022 {
0023     QWidget *page = new QWidget(this);
0024     QVBoxLayout *layout = new QVBoxLayout(page);
0025     m_smallColorWidget = new KisSmallColorWidget(this);
0026     layout->addWidget(m_smallColorWidget, 1);
0027 
0028     setWidget(page);
0029 
0030     m_smallColorWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Expanding);
0031     connect(m_smallColorWidget, SIGNAL(colorChanged(KoColor)),
0032             this, SLOT(colorChangedProxy(KoColor)));
0033 
0034     connect(this, SIGNAL(dockLocationChanged(Qt::DockWidgetArea)),
0035             m_smallColorWidget, SLOT(update()));
0036 
0037     setWindowTitle(i18n("Small Color Selector"));
0038 }
0039 
0040 void SmallColorSelectorDock::setCanvas(KoCanvasBase * canvas)
0041 {
0042     setEnabled(canvas != 0);
0043 
0044     if (m_canvas) {
0045         m_canvas->disconnectCanvasObserver(this);
0046         m_smallColorWidget->setColor(KoColor(Qt::black, KoColorSpaceRegistry::instance()->rgb8()));
0047         m_smallColorWidget->setDisplayColorConverter(0);
0048     }
0049     m_canvas = canvas;
0050     if (m_canvas && m_canvas->resourceManager()) {
0051         connect(m_canvas->resourceManager(), SIGNAL(canvasResourceChanged(int,QVariant)),
0052                 this, SLOT(canvasResourceChanged(int,QVariant)));
0053 
0054         KisCanvas2 *kisCanvas = dynamic_cast<KisCanvas2*>(canvas);
0055         KIS_ASSERT(kisCanvas);
0056 
0057         m_smallColorWidget->setDisplayColorConverter(kisCanvas->displayColorConverter());
0058         m_smallColorWidget->setColor(m_canvas->resourceManager()->foregroundColor());
0059     }
0060 }
0061 
0062 void SmallColorSelectorDock::colorChangedProxy(const KoColor& c)
0063 {
0064     if (m_canvas)
0065         m_canvas->resourceManager()->setForegroundColor(c);
0066 }
0067 
0068 void SmallColorSelectorDock::canvasResourceChanged(int key, const QVariant& v)
0069 {
0070     if (m_canvas && key == KoCanvasResource::ForegroundColor) {
0071         m_smallColorWidget->setColor(v.value<KoColor>());
0072     }
0073 }
0074