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

#include <digitalmixer_dock.h>

+ Inheritance diagram for DigitalMixerDock:

Classes

struct  GradientMixer
 
struct  Mixer
 

Public Slots

void canvasResourceChanged (int, const QVariant &)
 
void setCurrentColor (const KoColor &)
 

Public Member Functions

 DigitalMixerDock ()
 
QString observerName () override
 
void setCanvas (KoCanvasBase *canvas) override
 reimplemented from KoCanvasObserverBase
 
void setViewManager (KisViewManager *kisview) override
 
void unsetCanvas () override
 
- Public Member Functions inherited from KisMainwindowObserver
 KisMainwindowObserver ()
 
 ~KisMainwindowObserver () override
 
- Public Member Functions inherited from KoCanvasObserverBase
 KoCanvasObserverBase ()
 
KoCanvasBaseobservedCanvas () const
 
void setObservedCanvas (KoCanvasBase *canvas)
 
void unsetObservedCanvas ()
 
virtual ~KoCanvasObserverBase ()
 

Private Slots

void colorSliderChanged (int i)
 
void gradientColorSliderChanged (int)
 
void gradientEndColorChanged (int)
 
void gradientStartColorChanged (int)
 
void gradientTargetColorChanged (int)
 
void loadFromWorkspace (KisWorkspaceResourceSP workspace)
 
void popupColorChanged (int i)
 
void resetMixer ()
 
void saveToWorkspace (KisWorkspaceResourceSP workspace)
 
void targetColorChanged (int)
 

Private Attributes

QPointer< KoCanvasBasem_canvas
 
KoColor m_currentColor
 
KoColorPatchm_currentColorPatch
 
GradientMixer m_gradientMixer
 
QList< Mixerm_mixers
 
QPushButton * m_reset_button
 
bool m_tellCanvas
 

Additional Inherited Members

Detailed Description

Definition at line 28 of file digitalmixer_dock.h.

Constructor & Destructor Documentation

◆ DigitalMixerDock()

DigitalMixerDock::DigitalMixerDock ( )

Definition at line 35 of file digitalmixer_dock.cc.

36 : QDockWidget(i18n("Digital Colors Mixer")), m_canvas(0)
37 , m_tellCanvas(true)
38{
40 KoColor initColors[6] = { KoColor(Qt::black, sRGB),
41 KoColor(Qt::white, sRGB),
42 KoColor(Qt::red, sRGB),
43 KoColor(Qt::green, sRGB),
44 KoColor(Qt::blue, sRGB),
45 KoColor(Qt::yellow, sRGB) };
46
47 QWidget* widget = new QWidget(this);
48 QGridLayout* layout = new QGridLayout( widget );
49
50 // Current Color
52 m_currentColorPatch->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
53 m_currentColorPatch->setMinimumWidth(48);
54 layout->addWidget(m_currentColorPatch, 0, 0,3,1);
55
56 // Create the sliders
57
58 KisSignalMapper* signalMapperSelectColor = new KisSignalMapper(this);
59 connect(signalMapperSelectColor, SIGNAL(mapped(int)), SLOT(popupColorChanged(int)));
60
61 KisSignalMapper* signalMapperColorSlider = new KisSignalMapper(this);
62 connect(signalMapperColorSlider, SIGNAL(mapped(int)), SLOT(colorSliderChanged(int)));
63
64 KisSignalMapper* signalMapperTargetColor = new KisSignalMapper(this);
65 connect(signalMapperTargetColor, SIGNAL(mapped(int)), SLOT(targetColorChanged(int)));
66
67 for(int i = 0; i < 6; ++i)
68 {
69 Mixer mixer;
70 mixer.targetColor = new DigitalMixerPatch(this);
71 mixer.targetColor->setFixedSize(32, 22);
72 layout->addWidget(mixer.targetColor, 0, i + 1);
73 mixer.targetSlider = new KoColorSlider(Qt::Vertical, this);
74 mixer.targetSlider->setFixedWidth(22);
75 mixer.targetSlider->setMinimumHeight(66);
76 layout->addWidget(mixer.targetSlider, 1, i + 1);
77 mixer.actionColor = new KisColorButton( this );
78 mixer.actionColor->setFixedWidth(22);
79 layout->addWidget(mixer.actionColor, 2, i + 1);
80
81 m_mixers.push_back(mixer);
82
83 connect(mixer.actionColor, SIGNAL(changed(KoColor)), signalMapperSelectColor, SLOT(map()));
84 signalMapperSelectColor->setMapping(mixer.actionColor, i);
85
86 connect(mixer.targetSlider, SIGNAL(valueChanged(int)), signalMapperColorSlider, SLOT(map()));
87 signalMapperColorSlider->setMapping(mixer.targetSlider, i);
88 mixer.targetSlider->setValue(125);
89
90 connect(mixer.targetColor, SIGNAL(triggered(KoColorPatch*)), signalMapperTargetColor, SLOT(map()));
91 signalMapperTargetColor->setMapping(mixer.targetColor, i);
92 }
93
94 //Gradient Mixer
95 KisSignalMapper* signalMapperGradientStartColor = new KisSignalMapper(this);
96 connect(signalMapperGradientStartColor, SIGNAL(mapped(int)), SLOT(gradientStartColorChanged(int)));
97
98 KisSignalMapper* signalMapperGradientColorSlider = new KisSignalMapper(this);
99 connect(signalMapperGradientColorSlider, SIGNAL(mapped(int)), SLOT(gradientColorSliderChanged(int)));
100
101 KisSignalMapper* signalMapperGradientEndColor = new KisSignalMapper(this);
102 connect(signalMapperGradientEndColor, SIGNAL(mapped(int)), SLOT(gradientEndColorChanged(int)));
103
104 KisSignalMapper* signalMapperGradientTargetColor = new KisSignalMapper(this);
105 connect(signalMapperGradientTargetColor, SIGNAL(mapped(int)), SLOT(gradientTargetColorChanged(int)));
106
107
109 m_gradientMixer.targetColor->setFixedSize(32,32);
110 layout->addWidget(m_gradientMixer.targetColor, 3, 0);
111
113 m_gradientMixer.startColor->setFixedWidth(22);
114 layout->addWidget(m_gradientMixer.startColor, 3, 1);
115
116 m_gradientMixer.targetSlider = new KoColorSlider(Qt::Horizontal, this);
117 m_gradientMixer.targetSlider->setFixedHeight(22);
118 // m_gradientMixer.targetSlider->setMinimumWidth(20);
119 // m_gradientMixer.targetSlider->setMaximumWidth(120);
120 // m_gradientMixer.targetSlider->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Fixed);
121 layout->addWidget(m_gradientMixer.targetSlider, 3, 2, 1, 4);
122
124 m_gradientMixer.endColor->setFixedWidth(22);
125 layout->addWidget(m_gradientMixer.endColor, 3, 6);
126
127 connect(m_gradientMixer.startColor, SIGNAL(changed(KoColor)), signalMapperGradientStartColor, SLOT(map()));
128 signalMapperGradientStartColor->setMapping(m_gradientMixer.startColor, 6);
129
130 connect(m_gradientMixer.targetSlider, SIGNAL(valueChanged(int)), signalMapperGradientColorSlider, SLOT(map()));
131 signalMapperGradientColorSlider->setMapping(m_gradientMixer.targetSlider, 6);
132 m_gradientMixer.targetSlider->setValue(125);
133
134 connect(m_gradientMixer.endColor, SIGNAL(changed(KoColor)), signalMapperGradientEndColor, SLOT(map()));
135 signalMapperGradientEndColor->setMapping(m_gradientMixer.endColor, 6);
136
137 connect(m_gradientMixer.targetColor, SIGNAL(triggered(KoColorPatch*)), signalMapperGradientTargetColor, SLOT(map()));
138 signalMapperGradientTargetColor->setMapping(m_gradientMixer.targetColor, 6);
139
140 m_reset_button = new QPushButton(KisIconUtils::loadIcon("reload-preset-16"),i18n("Reset"));
141 m_reset_button->setToolTip(i18n("Return to default settings"));
142 layout->addWidget(m_reset_button, 0, 0, Qt::AlignLeft);
143 connect(m_reset_button, SIGNAL(clicked()), SLOT(resetMixer()));
144
145 resetMixer(); // reset colors to default
146 setWidget( widget );
147}
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void popupColorChanged(int i)
GradientMixer m_gradientMixer
void gradientTargetColorChanged(int)
QList< Mixer > m_mixers
void gradientColorSliderChanged(int)
void gradientEndColorChanged(int)
void gradientStartColorChanged(int)
void colorSliderChanged(int i)
QPointer< KoCanvasBase > m_canvas
QPushButton * m_reset_button
KoColorPatch * m_currentColorPatch
A pushbutton to display or allow user selection of a color.
The KisSignalMapper class bundles signals from identifiable senders.
void setMapping(QObject *sender, int id)
QIcon loadIcon(const QString &name)
static KoColorSpaceRegistry * instance()
const KoColorSpace * rgb8(const QString &profileName=QString())

References DigitalMixerDock::Mixer::actionColor, colorSliderChanged(), connect(), DigitalMixerDock::GradientMixer::endColor, gradientColorSliderChanged(), gradientEndColorChanged(), gradientStartColorChanged(), gradientTargetColorChanged(), KoColorSpaceRegistry::instance(), KisIconUtils::loadIcon(), m_currentColorPatch, m_gradientMixer, m_mixers, m_reset_button, popupColorChanged(), resetMixer(), KoColorSpaceRegistry::rgb8(), KisSignalMapper::setMapping(), DigitalMixerDock::GradientMixer::startColor, DigitalMixerDock::Mixer::targetColor, DigitalMixerDock::GradientMixer::targetColor, targetColorChanged(), DigitalMixerDock::Mixer::targetSlider, and DigitalMixerDock::GradientMixer::targetSlider.

Member Function Documentation

◆ canvasResourceChanged

void DigitalMixerDock::canvasResourceChanged ( int key,
const QVariant & v )
slot

Definition at line 255 of file digitalmixer_dock.cc.

256{
257 m_tellCanvas = false;
259 setCurrentColor(v.value<KoColor>());
260 m_tellCanvas = true;
261}
qreal v
void setCurrentColor(const KoColor &)
@ ForegroundColor
The active foreground color selected for this canvas.

References KoCanvasResource::ForegroundColor, m_tellCanvas, setCurrentColor(), and v.

◆ colorSliderChanged

void DigitalMixerDock::colorSliderChanged ( int i)
privateslot

Definition at line 208 of file digitalmixer_dock.cc.

209{
210 m_mixers[i].targetColor->setColor(m_mixers[i].targetSlider->currentColor());
211}

References m_mixers.

◆ gradientColorSliderChanged

void DigitalMixerDock::gradientColorSliderChanged ( int )
privateslot

◆ gradientEndColorChanged

void DigitalMixerDock::gradientEndColorChanged ( int id)
privateslot

Definition at line 185 of file digitalmixer_dock.cc.

186{
188 KoColor start_color = m_gradientMixer.startColor->color();
189 color.convertTo(start_color.colorSpace());
190 m_gradientMixer.targetSlider->setColors(start_color, color);
191
193}
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
Definition KoColor.cpp:136
const KoColorSpace * colorSpace() const
return the current colorSpace
Definition KoColor.h:82
void setColors(const KoColor &minColor, const KoColor &maxColor)

References KisColorButton::color, KoColor::colorSpace(), KoColor::convertTo(), DigitalMixerDock::GradientMixer::endColor, gradientColorSliderChanged(), m_gradientMixer, KoColorSlider::setColors(), DigitalMixerDock::GradientMixer::startColor, and DigitalMixerDock::GradientMixer::targetSlider.

◆ gradientStartColorChanged

◆ gradientTargetColorChanged

void DigitalMixerDock::gradientTargetColorChanged ( int )
privateslot

◆ loadFromWorkspace

void DigitalMixerDock::loadFromWorkspace ( KisWorkspaceResourceSP workspace)
privateslot

Definition at line 296 of file digitalmixer_dock.cc.

297{
298 KisPropertiesConfiguration configuration;
299 workspace->getPrefixedProperties("digital-mixer", &configuration);
300
301 useColor(configuration, m_gradientMixer.startColor, "gradient_from");
302 useColor(configuration, m_gradientMixer.endColor, "gradient_to");
303
304 for (int i = 0; i < m_mixers.size(); ++i) {
305 useColor(configuration, m_mixers[i].actionColor, "mixer_" + QString::number(i));
306 }
307}
static void useColor(const KisPropertiesConfiguration &conf, KisColorButton *colorButton, const QString &color)

References DigitalMixerDock::GradientMixer::endColor, m_gradientMixer, m_mixers, DigitalMixerDock::GradientMixer::startColor, and useColor().

◆ observerName()

QString DigitalMixerDock::observerName ( )
inlineoverridevirtual

Reimplemented from KoCanvasObserverBase.

Definition at line 32 of file digitalmixer_dock.h.

32{ return "DigitalMixerDock"; }

◆ popupColorChanged

void DigitalMixerDock::popupColorChanged ( int i)
privateslot

Definition at line 200 of file digitalmixer_dock.cc.

201{
202 KoColor color = m_mixers[i].actionColor->color();
204 m_mixers[i].targetSlider->setColors( color, m_currentColor);
206}

References colorSliderChanged(), KoColor::colorSpace(), KoColor::convertTo(), m_currentColor, and m_mixers.

◆ resetMixer

void DigitalMixerDock::resetMixer ( )
privateslot

Definition at line 218 of file digitalmixer_dock.cc.

219{
221
222 KoColor initColors[6] = { KoColor(Qt::black, sRGB),
223 KoColor(Qt::white, sRGB),
224 KoColor(Qt::red, sRGB),
225 KoColor(Qt::green, sRGB),
226 KoColor(Qt::blue, sRGB),
227 KoColor(Qt::yellow, sRGB) };
228
229 for(int i = 0; i < m_mixers.size(); ++i)
230 {
231 m_mixers[i].actionColor->setColor(initColors[i]);
232 }
233
234 setCurrentColor(KoColor(Qt::black, sRGB));
235
236 m_gradientMixer.startColor->setColor(KoColor(Qt::black, sRGB));
237 m_gradientMixer.endColor->setColor(KoColor(Qt::white, sRGB));
238}
void setColor(const KoColor &c)
void setColor(const quint8 *data, const KoColorSpace *colorSpace=0)
Definition KoColor.cpp:186

References DigitalMixerDock::GradientMixer::endColor, KoColorSpaceRegistry::instance(), m_gradientMixer, m_mixers, KoColorSpaceRegistry::rgb8(), KisColorButton::setColor(), KoColor::setColor(), setCurrentColor(), and DigitalMixerDock::GradientMixer::startColor.

◆ saveToWorkspace

void DigitalMixerDock::saveToWorkspace ( KisWorkspaceResourceSP workspace)
privateslot

Definition at line 272 of file digitalmixer_dock.cc.

273{
274 KisPropertiesConfiguration configuration;
275
276 configuration.setProperty("gradient_from",
277 QVariant::fromValue(m_gradientMixer.startColor->color()));
278 configuration.setProperty("gradient_to",
279 QVariant::fromValue(m_gradientMixer.endColor->color()));
280
281 for(int i = 0; i < m_mixers.size(); ++i)
282 {
283 configuration.setProperty("mixer_" + QString::number(i),
284 QVariant::fromValue(m_mixers[i].actionColor->color()));
285 }
286 workspace->setPrefixedProperties("digital-mixer", &configuration);
287}
virtual void setProperty(const QString &name, const QVariant &value)

References KisColorButton::color, DigitalMixerDock::GradientMixer::endColor, m_gradientMixer, m_mixers, KisPropertiesConfiguration::setProperty(), and DigitalMixerDock::GradientMixer::startColor.

◆ setCanvas()

void DigitalMixerDock::setCanvas ( KoCanvasBase * canvas)
overridevirtual

reimplemented from KoCanvasObserverBase

Implements KoCanvasObserverBase.

Definition at line 149 of file digitalmixer_dock.cc.

150{
151 setEnabled(canvas != 0);
152
153 if (m_canvas) {
154 m_canvas->disconnectCanvasObserver(this);
155 }
156
157 m_canvas = canvas;
158
159 if (m_canvas) {
160 connect(m_canvas->resourceManager(), SIGNAL(canvasResourceChanged(int,QVariant)),
161 this, SLOT(canvasResourceChanged(int,QVariant)));
162
163 m_tellCanvas=false;
164 setCurrentColor(m_canvas->resourceManager()->foregroundColor());
165 m_tellCanvas=true;
166 }
167}
void canvasResourceChanged(int, const QVariant &)

References canvasResourceChanged(), connect(), m_canvas, m_tellCanvas, and setCurrentColor().

◆ setCurrentColor

void DigitalMixerDock::setCurrentColor ( const KoColor & color)
slot

Definition at line 240 of file digitalmixer_dock.cc.

241{
242 m_currentColor = color;
244 for(int i = 0; i < m_mixers.size(); ++i)
245 {
248 }
249 if (m_canvas && m_tellCanvas)
250 {
251 m_canvas->resourceManager()->setForegroundColor(m_currentColor);
252 }
253}

References colorSliderChanged(), m_canvas, m_currentColor, m_currentColorPatch, m_mixers, m_tellCanvas, popupColorChanged(), and KoColorPatch::setColor().

◆ setViewManager()

void DigitalMixerDock::setViewManager ( KisViewManager * kisview)
overridevirtual

Implements KisMainwindowObserver.

Definition at line 263 of file digitalmixer_dock.cc.

264{
266 connect(provider, SIGNAL(sigSavingWorkspace(KisWorkspaceResourceSP)),
268 connect(provider, SIGNAL(sigLoadingWorkspace(KisWorkspaceResourceSP)),
270}
void loadFromWorkspace(KisWorkspaceResourceSP workspace)
void saveToWorkspace(KisWorkspaceResourceSP workspace)
KisCanvasResourceProvider * canvasResourceProvider()

References KisViewManager::canvasResourceProvider(), connect(), loadFromWorkspace(), and saveToWorkspace().

◆ targetColorChanged

void DigitalMixerDock::targetColorChanged ( int i)
privateslot

Definition at line 213 of file digitalmixer_dock.cc.

214{
215 setCurrentColor(m_mixers[i].targetColor->color());
216}

References m_mixers, and setCurrentColor().

◆ unsetCanvas()

void DigitalMixerDock::unsetCanvas ( )
inlineoverridevirtual

Re-implement to notify the observer that its canvas is no longer among the living. The daisies, it is pushing up. This means you don't have to disconnect, it's dead.

The old canvas should be deleted already, so if you stored a pointer to it, don't touch!

Note that currently there is a bug where in certain specific circumstances unsetCanvas can be called when it shouldn't, see for example KWStatisticsDocker for a workaround for this problem.

Implements KoCanvasObserverBase.

Definition at line 35 of file digitalmixer_dock.h.

35{ m_canvas = 0; setEnabled(false);}

References m_canvas.

Member Data Documentation

◆ m_canvas

QPointer<KoCanvasBase> DigitalMixerDock::m_canvas
private

Definition at line 59 of file digitalmixer_dock.h.

◆ m_currentColor

KoColor DigitalMixerDock::m_currentColor
private

Definition at line 60 of file digitalmixer_dock.h.

◆ m_currentColorPatch

KoColorPatch* DigitalMixerDock::m_currentColorPatch
private

Definition at line 61 of file digitalmixer_dock.h.

◆ m_gradientMixer

GradientMixer DigitalMixerDock::m_gradientMixer
private

Definition at line 77 of file digitalmixer_dock.h.

◆ m_mixers

QList<Mixer> DigitalMixerDock::m_mixers
private

Definition at line 76 of file digitalmixer_dock.h.

◆ m_reset_button

QPushButton* DigitalMixerDock::m_reset_button
private

Definition at line 80 of file digitalmixer_dock.h.

◆ m_tellCanvas

bool DigitalMixerDock::m_tellCanvas
private

Definition at line 78 of file digitalmixer_dock.h.


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