Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_color_history.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2010 Adam Celarek <kdedev at xibo dot at>
3 * SPDX-FileCopyrightText: 2022 Bourumir Wyngs <bourumir.wyngs@gmail.com>
4 *
5 * SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7
8#include "kis_color_history.h"
9#include "KisUniqueColorSet.h"
10#include "kis_canvas2.h"
11#include "KisViewManager.h"
13
15
16#include <QToolButton>
17#include <QList>
18#include <kis_icon.h>
19#include "KisDocument.h"
20#include "kis_config_notifier.h"
21
22Q_GLOBAL_STATIC(KisColorHistoryNotifier, s_color_history_change_notifier);
23
25 : KisColorPatches("lastUsedColors", parent)
26 , m_document(0)
27 , m_resourceProvider(0)
28{
29 m_fallbackColorHistoryModel = std::make_unique<KisUniqueColorSet>(new KisUniqueColorSet(this));
30 m_clearButton = new QToolButton(this);
31 m_clearButton->setIcon(KisIconUtils::loadIcon("dialog-cancel-16"));
32 m_clearButton->setToolTip(i18n("Clear all color history"));
33 m_clearButton->setAutoRaise(true);
35
36 connect(m_clearButton, SIGNAL(clicked()), this, SLOT(clearColorHistory()));
37 connect(KisConfigNotifier::instance(), SIGNAL(colorHistoryModeChanged()), this, SLOT(updateUserSettings()));
38 connect(s_color_history_change_notifier, SIGNAL(colorHistoryChanged(const QList<KoColor>&)),
39 this, SLOT(colorHistoryChanged()));
40
42}
43
47
55
57{
58 if (!canvas) return;
59
61
63 m_resourceProvider->disconnect(this);
64 m_resourceProvider->colorHistoryModel()->disconnect(this);
65 }
66 if (m_document) {
67 m_document->colorHistoryModel()->disconnect(this);
68 }
69
70 m_resourceProvider = canvas->imageView()->resourceProvider();
71 m_document = canvas->viewManager()->document();
72
73 setColors(colorHistoryModel()->colorList());
74
75 connect(m_resourceProvider, SIGNAL(sigFGColorUsed(KoColor)),
76 this, SLOT(addColorToHistory(KoColor)), Qt::UniqueConnection);
77
78 // Messy, but this whole plugin should be removed shortly in favour of the wide gamut selector.
79 // We only really need this so the plugin will respond to the color history being cleared in the wide gamut selector.
80 connect(m_resourceProvider->colorHistoryModel(), SIGNAL(sigReset()), this, SLOT(colorHistoryChanged()));
81 connect(m_document->colorHistoryModel(), SIGNAL(sigReset()), this, SLOT(colorHistoryChanged()));
82}
83
85{
87 ret->setCanvas(m_canvas);
88 ret->setColors(colors());
89 return ret;
90}
91
93{
94 // don't add color in erase mode. See https://bugs.kde.org/show_bug.cgi?id=298940
96
98
100 s_color_history_change_notifier->notifyColorHistoryChanged(colorHistoryModel()->colorList());
101}
102
104{
105 QList<KoColor> empty;
107 updateColorHistory(empty);
108 s_color_history_change_notifier->notifyColorHistoryChanged(empty);
109}
110
121
123{
124 Q_UNUSED(history);
125 setColors(colorHistoryModel()->colorList());
126}
127
129{
130
131 KisConfig config(true);
133 updateColorHistory(colorHistoryModel()->colorList()); // Show with respect to the current strategy
134}
135
137{
138 KIS_SAFE_ASSERT_RECOVER_RETURN(sender() != this);
139 setColors(colorHistoryModel()->colorList());
140}
141
const QString COMPOSITE_ERASE
KisViewManager * viewManager() const
QPointer< KisView > imageView() const
KisUniqueColorSet * colorHistoryModel() const
void colorHistoryChanged(const QList< KoColor > &history)
void notifyColorHistoryChanged(const QList< KoColor > &history)
KisUniqueColorSet * colorHistoryModel()
QToolButton * m_clearButton
KisColorHistory(QWidget *parent=0)
KisDocument * m_document
KisColorSelectorBase * createPopup() const override
std::unique_ptr< KisUniqueColorSet > m_fallbackColorHistoryModel
void updateColorHistory(const QList< KoColor > &history)
void addColorToHistory(const KoColor &color)
void setCanvas(KisCanvas2 *canvas) override
void unsetCanvas() override
KisCanvasResourceProvider * m_resourceProvider
void setCanvas(KisCanvas2 *canvas) override
QList< KoColor > colors() const
void setAdditionalButtons(QList< QWidget * > buttonList)
void unsetCanvas() override
void setColors(const QList< KoColor > &colors)
Base class for all color selectors, that should support color management and zooming.
QPointer< KisCanvas2 > m_canvas
static KisConfigNotifier * instance()
bool colorHistoryPerDocument(bool defaultValue=false) const
KisUniqueColorSet colorHistoryModel
void addColor(const KoColor &color)
KisDocument * document() const
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
Q_GLOBAL_STATIC(KisColorHistoryNotifier, s_color_history_change_notifier)
QIcon loadIcon(const QString &name)