Krita Source Code Documentation
Loading...
Searching...
No Matches
KisUniqueColorSet Class Reference

#include <KisUniqueColorSet.h>

+ Inheritance diagram for KisUniqueColorSet:

Classes

struct  ColorEntry
 
struct  Private
 

Public Slots

void clear ()
 

Signals

void sigColorAdded (int position)
 
void sigColorMoved (int from, int to)
 
void sigColorRemoved (int position)
 
void sigReset ()
 

Public Member Functions

void addColor (const KoColor &color)
 
KoColor color (int index) const
 
QList< KoColorcolorList () const
 
 KisUniqueColorSet (const KisUniqueColorSet &rhs, QObject *parent=nullptr)
 
 KisUniqueColorSet (QObject *parent=nullptr)
 
void setColorList (const QList< KoColor > &colors)
 
int size () const
 
 ~KisUniqueColorSet () override
 

Private Attributes

QScopedPointer< Privated
 

Detailed Description

Definition at line 18 of file KisUniqueColorSet.h.

Constructor & Destructor Documentation

◆ KisUniqueColorSet() [1/2]

KisUniqueColorSet::KisUniqueColorSet ( QObject * parent = nullptr)
explicit

Definition at line 51 of file KisUniqueColorSet.cpp.

52 : QObject(parent)
53 , d(new Private())
54{ }
QScopedPointer< Private > d

◆ ~KisUniqueColorSet()

KisUniqueColorSet::~KisUniqueColorSet ( )
override

Definition at line 56 of file KisUniqueColorSet.cpp.

57{
58 for (ColorEntry *entry: d->history) {
59 delete entry;
60 }
61}

References d.

◆ KisUniqueColorSet() [2/2]

KisUniqueColorSet::KisUniqueColorSet ( const KisUniqueColorSet & rhs,
QObject * parent = nullptr )

Definition at line 63 of file KisUniqueColorSet.cpp.

64 : QObject(parent)
65 , d(new Private(*rhs.d))
66{
67
68}

Member Function Documentation

◆ addColor()

void KisUniqueColorSet::addColor ( const KoColor & color)

Definition at line 70 of file KisUniqueColorSet.cpp.

71{
72 auto hashEntry = d->colorHash.find(color);
73 if (hashEntry != d->colorHash.end()) {
74 auto historyEl = std::lower_bound(d->history.begin(), d->history.end(), *hashEntry, &ColorEntry::less);
75 if (historyEl != d->history.end()) {
76 int oldPos = historyEl - d->history.begin();
77 if (historyEl == d->history.begin()) {
78 KIS_ASSERT((*historyEl)->key == d->key);
79 return;
80 }
81 ColorEntry *node = *historyEl;
82 d->history.erase(historyEl);
83 node->key = ++d->key;
84 d->history.push_front(node);
85 Q_EMIT sigColorMoved(oldPos, 0);
86 }
87 else {
88 qDebug() << "inconsistent color history state!";
89 }
90 }
91 else {
92 ColorEntry *entry;
93 if (d->history.size() >= d->maxSize) {
94 entry = d->history.back();
95 d->history.pop_back();
96 KIS_ASSERT(d->colorHash.remove(entry->color) == 1);
97 entry->color = color;
98 entry->key = ++d->key;
99 Q_EMIT sigColorRemoved(d->maxSize - 1);
100 }
101 else {
102 entry = new ColorEntry {color, ++d->key};
103 }
104 d->colorHash.insert(color, entry);
105 d->history.push_front(entry);
106 Q_EMIT sigColorAdded(0);
107 }
108}
void sigColorRemoved(int position)
void sigColorAdded(int position)
KoColor color(int index) const
void sigColorMoved(int from, int to)
#define KIS_ASSERT(cond)
Definition kis_assert.h:33
static bool less(const KisUniqueColorSet::ColorEntry *lhs, const KisUniqueColorSet::ColorEntry *rhs)

References KisUniqueColorSet::ColorEntry::color, color(), d, KisUniqueColorSet::ColorEntry::key, KIS_ASSERT, KisUniqueColorSet::ColorEntry::less(), sigColorAdded(), sigColorMoved(), and sigColorRemoved().

◆ clear

void KisUniqueColorSet::clear ( )
slot

Definition at line 140 of file KisUniqueColorSet.cpp.

141{
142 for (ColorEntry *entry: d->history) {
143 delete entry;
144 }
145 d->history.clear();
146 d->colorHash.clear();
147 d->key = 0;
148 Q_EMIT sigReset();
149}

References d, and sigReset().

◆ color()

KoColor KisUniqueColorSet::color ( int index) const

Definition at line 110 of file KisUniqueColorSet.cpp.

111{
112 if (index < 0 || index >= static_cast<int>(d->history.size())) {
113 return KoColor();
114 }
115 return d->history.at(index)->color;
116}

References d.

◆ colorList()

QList< KoColor > KisUniqueColorSet::colorList ( ) const

Definition at line 123 of file KisUniqueColorSet.cpp.

124{
125 QList<KoColor> colors;
126 for (int i = 0; i < static_cast<int>(d->history.size()); i++) {
127 colors.append(d->history.at(i)->color);
128 }
129 return colors;
130}

References d.

◆ setColorList()

void KisUniqueColorSet::setColorList ( const QList< KoColor > & colors)

Definition at line 132 of file KisUniqueColorSet.cpp.

133{
134 clear();
135 Q_FOREACH(KoColor c, colors) {
136 addColor(c);
137 }
138}
void addColor(const KoColor &color)

References addColor(), and clear().

◆ sigColorAdded

void KisUniqueColorSet::sigColorAdded ( int position)
signal

◆ sigColorMoved

void KisUniqueColorSet::sigColorMoved ( int from,
int to )
signal

◆ sigColorRemoved

void KisUniqueColorSet::sigColorRemoved ( int position)
signal

◆ sigReset

void KisUniqueColorSet::sigReset ( )
signal

◆ size()

int KisUniqueColorSet::size ( ) const

Definition at line 118 of file KisUniqueColorSet.cpp.

119{
120 return static_cast<int>(d->history.size());
121}

References d.

Member Data Documentation

◆ d

QScopedPointer<Private> KisUniqueColorSet::d
private

Definition at line 44 of file KisUniqueColorSet.h.


The documentation for this class was generated from the following files: