Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_common_colors.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Adam Celarek <kdedev at xibo dot at>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#include "kis_common_colors.h"
8#include <QImage>
9#include <QList>
10#include <QToolButton>
11#include <QColor>
12#include <QRunnable>
13#include <QThreadPool>
14#include <QApplication>
15#include <QMutexLocker>
16
17#include <kconfig.h>
18#include <kconfiggroup.h>
19
20#include <klocalizedstring.h>
21
22#include <kis_icon.h>
23#include "KoColor.h"
24#include "kis_canvas2.h"
25#include "kis_image.h"
26#include "kis_paint_device.h"
27#include "kis_config.h"
29
30
32 KisColorPatches("commonColors", parent)
33{
34 m_reloadButton = new QToolButton(this);
35 m_reloadButton->setIcon(KisIconUtils::loadIcon("reload-preset-16")); //small reload icon
36 m_reloadButton->setToolTip(i18n("Create a list of colors from the image"));
37 m_reloadButton->setAutoRaise(true);
38 connect(m_reloadButton, SIGNAL(clicked()), this, SLOT(recalculate()));
39
41 QList<QWidget*> tmpList;
42 tmpList.append(m_reloadButton);
43 setAdditionalButtons(tmpList);
44
45 m_recalculationTimer.setInterval(2000);
46 m_recalculationTimer.setSingleShot(true);
47
48 connect(&m_recalculationTimer, SIGNAL(timeout()),
49 this, SLOT(recalculate()));
50
51}
52
54{
56
57 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
58 if (cfg.readEntry("commonColorsAutoUpdate", false)) {
59 if (m_image) {
60 m_image->disconnect(this);
61 }
62 if (m_canvas) {
63 connect(m_canvas->image(), SIGNAL(sigImageUpdated(QRect)),
64 &m_recalculationTimer, SLOT(start()), Qt::UniqueConnection);
65 m_image = m_canvas->image();
66 }
67 else {
68 m_image = 0;
69 }
70 }
71}
72
74{
76 ret->setCanvas(m_canvas);
77 ret->setColors(colors());
78 return ret;
79}
80
82{
84
85 if(!(m_canvas && m_canvas->image()))
86 return;
87
88 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
89 if (cfg.readEntry("commonColorsAutoUpdate", false)) {
90 connect(m_canvas->image(), SIGNAL(sigImageUpdated(QRect)),
91 &m_recalculationTimer, SLOT(start()), Qt::UniqueConnection);
92 }
93 else {
94 disconnect(m_canvas->image(), SIGNAL(sigImageUpdated(QRect)),
95 &m_recalculationTimer, SLOT(start()));
96 }
97
98 m_reloadButton->setEnabled(true);
99}
100
102{
103 QMutexLocker locker(&m_mutex);
105 m_reloadButton->setEnabled(true);
107}
108
110{
111 if (!m_canvas) {
112 return;
113 }
114 if(!m_reloadButton->isEnabled()) {
115 // on old computation is still running
116 // try later to recalculate
117 m_recalculationTimer.start();
118 return;
119 }
120 m_reloadButton->setEnabled(false);
121 qApp->processEvents();
122
123 KisImageWSP kisImage = m_canvas->image();
124
126
128 QThreadPool::globalInstance()->start(runner);
129}
130
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void updateSettings() override
void setCanvas(KisCanvas2 *canvas) override
QList< KoColor > colors() const
void setAdditionalButtons(QList< QWidget * > buttonList)
void setColors(const QList< KoColor > &colors)
Base class for all color selectors, that should support color management and zooming.
QPointer< KisCanvas2 > m_canvas
KisColorSelectorBase * createPopup() const override
QToolButton * m_reloadButton
void updateSettings() override
QList< KoColor > m_calculatedColors
void setColors(QList< KoColor > colors)
void setCanvas(KisCanvas2 *canvas) override
KisCommonColors(QWidget *parent=0)
KisPaintDeviceSP projection() const
QRect bounds() const override
QImage createThumbnail(qint32 maxw, qint32 maxh, QRect rect, qreal oversample=1, KoColorConversionTransformation::Intent renderingIntent=KoColorConversionTransformation::internalRenderingIntent(), KoColorConversionTransformation::ConversionFlags conversionFlags=KoColorConversionTransformation::internalConversionFlags())
QIcon loadIcon(const QString &name)