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

The KisVisualColorModel class allows manipulating a KoColor using various color models. More...

#include <KisVisualColorModel.h>

+ Inheritance diagram for KisVisualColorModel:

Classes

struct  Private
 

Public Types

enum  ColorModel {
  None , Channel , HSV , HSL ,
  HSI , HSY , YUV
}
 

Public Slots

void slotLoadACSConfig ()
 slotLoadACSConfig loads supported settings from Advanced Color Selector
 
void slotSetChannelValues (const QVector4D &values)
 
void slotSetColor (const KoColor &c)
 
void slotSetColorSpace (const KoColorSpace *cs)
 

Signals

void sigChannelValuesChanged (const QVector4D &values, quint32 channelFlags)
 
void sigColorModelChanged ()
 sigColorModelChanged is emitted whenever the color model changes.
 
void sigColorSpaceChanged ()
 sigColorSpaceChanged notifies that the color space from which the channel values are derived changed, and thus invalidating the current ones.
 
void sigNewColor (const KoColor &c)
 

Public Member Functions

QVector4D channelValues () const
 
int colorChannelCount () const
 
ColorModel colorModel () const
 
const KoColorSpacecolorSpace () const
 
KoColor convertChannelValuesToKoColor (const QVector4D &values) const
 
QVector4D convertKoColorToChannelValues (KoColor c) const
 
void copyState (const KisVisualColorModel &other)
 Copy the internal state of another KisVisualColorModel.
 
KoColor currentColor () const
 
bool isHSXModel () const
 
 KisVisualColorModel ()
 
QVector4D maxChannelValues () const
 
void setMaxChannelValues (const QVector4D &maxValues)
 
void setRGBColorModel (ColorModel model)
 Set the HSX color model used for RGB color spaces.
 
bool supportsExposure () const
 
 ~KisVisualColorModel () override
 

Private Member Functions

void emitChannelValues ()
 
void loadColorSpace (const KoColorSpace *cs)
 

Private Attributes

const QScopedPointer< Privatem_d
 

Detailed Description

The KisVisualColorModel class allows manipulating a KoColor using various color models.

This enables different widgets to easily manipulate the same color representation (like HSV channels of an RGB color etc.) in a synchronized way without having to know the details of the underlying color space. NOTE: This class is meant to be shared between GUI classes using KisVisualColorModelSP, so DO NOT SET a QObject parent in this case.

Definition at line 31 of file KisVisualColorModel.h.

Member Enumeration Documentation

◆ ColorModel

Constructor & Destructor Documentation

◆ KisVisualColorModel()

KisVisualColorModel::KisVisualColorModel ( )

Definition at line 48 of file KisVisualColorModel.cpp.

49 : QObject(0)
50 , m_d(new Private)
51{
52 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
53 m_d->acs_config = KisColorSelectorConfiguration::fromString(cfg.readEntry("colorSelectorConfiguration", KisColorSelectorConfiguration().toString()));
54
55}
static KisColorSelectorConfiguration fromString(QString string)
const QScopedPointer< Private > m_d
QString toString(const QString &value)

References KisColorSelectorConfiguration::fromString(), and m_d.

◆ ~KisVisualColorModel()

KisVisualColorModel::~KisVisualColorModel ( )
override

Definition at line 57 of file KisVisualColorModel.cpp.

58{
59}

Member Function Documentation

◆ channelValues()

QVector4D KisVisualColorModel::channelValues ( ) const

Definition at line 129 of file KisVisualColorModel.cpp.

130{
131 return m_d->channelValues;
132}

References m_d.

◆ colorChannelCount()

int KisVisualColorModel::colorChannelCount ( ) const

Definition at line 134 of file KisVisualColorModel.cpp.

135{
136 return m_d->colorChannelCount;
137}

References m_d.

◆ colorModel()

KisVisualColorModel::ColorModel KisVisualColorModel::colorModel ( ) const

Definition at line 139 of file KisVisualColorModel.cpp.

140{
141 return m_d->model;
142}

References m_d.

◆ colorSpace()

const KoColorSpace * KisVisualColorModel::colorSpace ( ) const

Definition at line 189 of file KisVisualColorModel.cpp.

190{
191 return m_d->currentCS;
192}

References m_d.

◆ convertChannelValuesToKoColor()

KoColor KisVisualColorModel::convertChannelValuesToKoColor ( const QVector4D & values) const

Definition at line 204 of file KisVisualColorModel.cpp.

205{
206 KoColor c(m_d->currentCS);
207 QVector4D baseValues(values);
208 QVector<float> channelVec(c.colorSpace()->channelCount());
209 channelVec.fill(1.0);
210
211 if (m_d->model != ColorModel::Channel && m_d->isRGBA) {
212
213 if (m_d->model == ColorModel::HSV) {
214 HSVToRGB(values.x()*360, values.y(), values.z(), &baseValues[0], &baseValues[1], &baseValues[2]);
215 }
216 else if (m_d->model == ColorModel::HSL) {
217 HSLToRGB(values.x()*360, values.y(), values.z(), &baseValues[0], &baseValues[1], &baseValues[2]);
218 }
219 else if (m_d->model == ColorModel::HSI) {
220 // why suddenly qreal?
221 qreal temp[3];
222 HSIToRGB(values.x(), values.y(), values.z(), &temp[0], &temp[1], &temp[2]);
223 baseValues.setX(temp[0]);
224 baseValues.setY(temp[1]);
225 baseValues.setZ(temp[2]);
226 }
227 else /*if (m_d->model == ColorModel::HSY)*/ {
228 qreal temp[3];
229 qreal Y = pow(values.z(), m_d->gamma);
230 HSYToRGB(values.x(), values.y(), Y, &temp[0], &temp[1], &temp[2],
231 m_d->lumaRGB[0], m_d->lumaRGB[1], m_d->lumaRGB[2]);
232 baseValues.setX(temp[0]);
233 baseValues.setY(temp[1]);
234 baseValues.setZ(temp[2]);
235 if (!m_d->isLinear) {
236 // Note: not all profiles define a TRC necessary for (de-)linearization,
237 // substituting with a linear profiles would be better
238 QVector<qreal> tempVec({baseValues[0], baseValues[1], baseValues[2]});
239 if (m_d->exposureSupported) {
240 m_d->currentCS->profile()->delinearizeFloatValue(tempVec);
241 }
242 else {
243 m_d->currentCS->profile()->delinearizeFloatValueFast(tempVec);
244 }
245 baseValues = QVector4D(tempVec[0], tempVec[1], tempVec[2], 0);
246 }
247 }
248 if (m_d->applyGamma) {
249 for (int i=0; i<3; i++) {
250 baseValues[i] = pow(baseValues[i], 2.2);
251 }
252 }
253 }
254
255 if (m_d->exposureSupported) {
256 for (int i = 0; i < m_d->colorChannelCount; i++) {
257 baseValues[i] *= m_d->channelMaxValues[i];
258 }
259 }
260
261 for (int i=0; i<m_d->colorChannelCount; i++) {
262 channelVec[m_d->logicalToMemoryPosition[i]] = baseValues[i];
263 }
264
265 c.colorSpace()->fromNormalisedChannelsValue(c.data(), channelVec);
266
267 return c;
268
269}
void HSYToRGB(const qreal h, const qreal s, const qreal y, qreal *red, qreal *green, qreal *blue, qreal R, qreal G, qreal B)
void HSIToRGB(const qreal h, const qreal s, const qreal i, qreal *red, qreal *green, qreal *blue)
void HSVToRGB(float h, float s, float v, float *r, float *g, float *b)
void HSLToRGB(float h, float sl, float l, float *r, float *g, float *b)
const QString Y

References Channel, KoColorSpace::channelCount(), KoColor::colorSpace(), KoColor::data(), KoColorSpace::fromNormalisedChannelsValue(), HSI, HSIToRGB(), HSL, HSLToRGB(), HSV, HSVToRGB(), HSYToRGB(), and m_d.

◆ convertKoColorToChannelValues()

QVector4D KisVisualColorModel::convertKoColorToChannelValues ( KoColor c) const

Definition at line 271 of file KisVisualColorModel.cpp.

272{
273 if (c.colorSpace() != m_d->currentCS) {
274 c.convertTo(m_d->currentCS);
275 }
276 QVector<float> channelVec (c.colorSpace()->channelCount());
277 channelVec.fill(1.0);
278 m_d->currentCS->normalisedChannelsValue(c.data(), channelVec);
279 QVector4D channelValuesDisplay(0, 0, 0, 0), coordinates(0, 0, 0, 0);
280
281 for (int i =0; i<m_d->colorChannelCount; i++) {
282 channelValuesDisplay[i] = channelVec[m_d->logicalToMemoryPosition[i]];
283 }
284
285 if (m_d->exposureSupported) {
286 for (int i = 0; i < m_d->colorChannelCount; i++) {
287 channelValuesDisplay[i] /= m_d->channelMaxValues[i];
288 }
289 }
290 if (m_d->model != ColorModel::Channel && m_d->isRGBA) {
291 if (m_d->applyGamma) {
292 for (int i=0; i<3; i++) {
293 channelValuesDisplay[i] = pow(channelValuesDisplay[i], 1/2.2);
294 }
295 }
296 if (m_d->model == ColorModel::HSV) {
297 QVector3D hsv;
298 RGBToHSV(channelValuesDisplay[0], channelValuesDisplay[1], channelValuesDisplay[2], &hsv[0], &hsv[1], &hsv[2]);
299 hsv[0] /= 360;
300 coordinates = QVector4D(hsv, 0.f);
301 } else if (m_d->model == ColorModel::HSL) {
302 QVector3D hsl;
303 RGBToHSL(channelValuesDisplay[0], channelValuesDisplay[1], channelValuesDisplay[2], &hsl[0], &hsl[1], &hsl[2]);
304 hsl[0] /= 360;
305 coordinates = QVector4D(hsl, 0.f);
306 } else if (m_d->model == ColorModel::HSI) {
307 qreal hsi[3];
308 RGBToHSI(channelValuesDisplay[0], channelValuesDisplay[1], channelValuesDisplay[2], &hsi[0], &hsi[1], &hsi[2]);
309 coordinates = QVector4D(hsi[0], hsi[1], hsi[2], 0.f);
310 } else if (m_d->model == ColorModel::HSY) {
311 if (!m_d->isLinear) {
312 // Note: not all profiles define a TRC necessary for (de-)linearization,
313 // substituting with a linear profiles would be better
314 QVector<qreal> temp({channelValuesDisplay[0], channelValuesDisplay[1], channelValuesDisplay[2]});
315 m_d->currentCS->profile()->linearizeFloatValue(temp);
316 channelValuesDisplay = QVector4D(temp[0], temp[1], temp[2], 0);
317 }
318 qreal hsy[3];
319 RGBToHSY(channelValuesDisplay[0], channelValuesDisplay[1], channelValuesDisplay[2], &hsy[0], &hsy[1], &hsy[2],
320 m_d->lumaRGB[0], m_d->lumaRGB[1], m_d->lumaRGB[2]);
321 hsy[2] = pow(hsy[2], 1/m_d->gamma);
322 coordinates = QVector4D(hsy[0], hsy[1], hsy[2], 0.f);
323 }
324 // if we couldn't determine a hue, keep last value
325 if (coordinates[0] < 0) {
326 coordinates[0] = m_d->channelValues[0];
327 }
328 for (int i=0; i<3; i++) {
329 coordinates[i] = qBound(0.f, coordinates[i], 1.f);
330 }
331 } else {
332 for (int i=0; i<4; i++) {
333 coordinates[i] = qBound(0.f, channelValuesDisplay[i], 1.f);
334 }
335 }
336 return coordinates;
337}
void RGBToHSV(float r, float g, float b, float *h, float *s, float *v)
void RGBToHSI(qreal r, qreal g, qreal b, qreal *h, qreal *s, qreal *i)
void RGBToHSL(float r, float g, float b, float *h, float *s, float *l)
void RGBToHSY(const qreal r, const qreal g, const qreal b, qreal *h, qreal *s, qreal *y, qreal R, qreal G, qreal B)
virtual quint32 channelCount() const =0
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
Definition KoColor.cpp:136
quint8 * data()
Definition KoColor.h:144
const KoColorSpace * colorSpace() const
return the current colorSpace
Definition KoColor.h:82

References Channel, KoColorSpace::channelCount(), KoColor::colorSpace(), KoColor::convertTo(), KoColor::data(), HSI, HSL, HSV, HSY, m_d, RGBToHSI(), RGBToHSL(), RGBToHSV(), and RGBToHSY().

◆ copyState()

void KisVisualColorModel::copyState ( const KisVisualColorModel & other)

Copy the internal state of another KisVisualColorModel.

This will Q_EMIT all necessary signals to update widgets so they can reflect the new state correctly.

Parameters
otherthe model to copy

Definition at line 162 of file KisVisualColorModel.cpp.

163{
164 m_d->channelMaxValues = other.m_d->channelMaxValues;
165 setRGBColorModel(other.m_d->modelRGB);
166 if (other.colorSpace()) {
169 }
170}
const KoColorSpace * colorSpace() const
void slotSetColorSpace(const KoColorSpace *cs)
QVector4D channelValues() const
void slotSetChannelValues(const QVector4D &values)
void setRGBColorModel(ColorModel model)
Set the HSX color model used for RGB color spaces.

References channelValues(), colorSpace(), m_d, setRGBColorModel(), slotSetChannelValues(), and slotSetColorSpace().

◆ currentColor()

KoColor KisVisualColorModel::currentColor ( ) const

Definition at line 124 of file KisVisualColorModel.cpp.

125{
126 return m_d->currentcolor;
127}

References m_d.

◆ emitChannelValues()

void KisVisualColorModel::emitChannelValues ( )
private

Definition at line 440 of file KisVisualColorModel.cpp.

441{
442 bool updatesAllowed = m_d->allowUpdates;
443 m_d->allowUpdates = false;
444 Q_EMIT sigChannelValuesChanged(m_d->channelValues, (1u << m_d->colorChannelCount) - 1);
445 m_d->allowUpdates = updatesAllowed;
446}
void sigChannelValuesChanged(const QVector4D &values, quint32 channelFlags)

References m_d, and sigChannelValuesChanged().

◆ isHSXModel()

bool KisVisualColorModel::isHSXModel ( ) const

Definition at line 194 of file KisVisualColorModel.cpp.

195{
196 return (m_d->model >= ColorModel::HSV && m_d->model <= ColorModel::HSY);
197}

References HSV, HSY, and m_d.

◆ loadColorSpace()

void KisVisualColorModel::loadColorSpace ( const KoColorSpace * cs)
private

Definition at line 386 of file KisVisualColorModel.cpp.

387{
388 const QList<KoChannelInfo *> channelList = cs->channels();
389 int cCount = 0;
390
391 for (int i = 0; i < channelList.size(); i++) {
392 const KoChannelInfo *channel = channelList.at(i);
393 if (channel->channelType() != KoChannelInfo::ALPHA) {
394 quint32 logical = channel->displayPosition();
395 if (logical > cs->alphaPos()) {
396 --logical;
397 }
398 m_d->logicalToMemoryPosition[logical] = i;
399 m_d->channelMaxValues[logical] = channel->getUIMax();
400 ++cCount;
401 }
402 }
403 KIS_ASSERT_X(cCount < 5, "", "unsupported channel count!");
404
405 m_d->colorChannelCount = cCount;
406
411 && cs->colorModelId() != CMYKAColorModelID) {
412 m_d->exposureSupported = true;
413 } else {
414 m_d->exposureSupported = false;
415 }
416 m_d->isRGBA = (cs->colorModelId() == RGBAColorModelID);
417
418 const KoColorProfile *profile = cs->profile();
419 m_d->isLinear = (profile && profile->isLinear());
420
421 if (m_d->isRGBA) {
422 m_d->applyGamma = (m_d->isLinear && m_d->modelRGB != ColorModel::HSY);
423 // Note: only profiles that define colorants will give precise luma coefficients.
424 // Maybe using the explicitly set values of the Advanced Color Selector is better?
425 QVector <qreal> luma = cs->lumaCoefficients();
426 memcpy(m_d->lumaRGB, luma.constData(), 3*sizeof(qreal));
427 m_d->model = m_d->modelRGB;
428 } else {
430 }
431
432 const KoColorSpace *oldCS = m_d->currentCS;
433 m_d->currentCS = cs;
434
435 if (!oldCS || (oldCS->colorModelId() != cs->colorModelId())) {
436 Q_EMIT sigColorModelChanged();
437 }
438}
const KoID Float32BitsColorDepthID("F32", ki18n("32-bit float/channel"))
const KoID Float64BitsColorDepthID("F64", ki18n("64-bit float/channel"))
const KoID Float16BitsColorDepthID("F16", ki18n("16-bit float/channel"))
const KoID CMYKAColorModelID("CMYKA", ki18n("CMYK/Alpha"))
const KoID LABAColorModelID("LABA", ki18n("L*a*b*/Alpha"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
void sigColorModelChanged()
sigColorModelChanged is emitted whenever the color model changes.
@ ALPHA
The channel represents the opacity of a pixel.
enumChannelType channelType() const
qint32 displayPosition() const
double getUIMax(void) const
virtual quint32 alphaPos() const =0
QList< KoChannelInfo * > channels
virtual KoID colorModelId() const =0
QVector< qreal > lumaCoefficients
virtual KoID colorDepthId() const =0
virtual const KoColorProfile * profile() const =0
#define KIS_ASSERT_X(cond, where, what)
Definition kis_assert.h:40
virtual bool isLinear() const =0

References KoChannelInfo::ALPHA, KoColorSpace::alphaPos(), Channel, KoColorSpace::channels, KoChannelInfo::channelType(), CMYKAColorModelID, KoColorSpace::colorDepthId(), KoColorSpace::colorModelId(), KoChannelInfo::displayPosition(), Float16BitsColorDepthID, Float32BitsColorDepthID, Float64BitsColorDepthID, KoChannelInfo::getUIMax(), HSY, KoColorProfile::isLinear(), KIS_ASSERT_X, LABAColorModelID, KoColorSpace::lumaCoefficients, m_d, KoColorSpace::profile(), RGBAColorModelID, and sigColorModelChanged().

◆ maxChannelValues()

QVector4D KisVisualColorModel::maxChannelValues ( ) const

Definition at line 144 of file KisVisualColorModel.cpp.

145{
146 return m_d->channelMaxValues;
147}

References m_d.

◆ setMaxChannelValues()

void KisVisualColorModel::setMaxChannelValues ( const QVector4D & maxValues)

Definition at line 149 of file KisVisualColorModel.cpp.

150{
151 if (maxValues == m_d->channelMaxValues) {
152 return;
153 }
154 m_d->channelMaxValues = maxValues;
155 if (m_d->exposureSupported) {
156 // need to re-scale our normalized channel values on exposure changes:
157 m_d->channelValues = convertKoColorToChannelValues(m_d->currentcolor);
159 }
160}
QVector4D convertKoColorToChannelValues(KoColor c) const

References convertKoColorToChannelValues(), emitChannelValues(), and m_d.

◆ setRGBColorModel()

void KisVisualColorModel::setRGBColorModel ( KisVisualColorModel::ColorModel model)

Set the HSX color model used for RGB color spaces.

Definition at line 172 of file KisVisualColorModel.cpp.

173{
174 if (model == m_d->modelRGB) {
175 return;
176 }
177 if (model >= ColorModel::HSV && model <= ColorModel::HSY) {
178 m_d->modelRGB = model;
179 if (m_d->isRGBA) {
180 m_d->model = model;
181 m_d->applyGamma = (m_d->isLinear && m_d->modelRGB != ColorModel::HSY);
182 Q_EMIT sigColorModelChanged();
183 m_d->channelValues = convertKoColorToChannelValues(m_d->currentcolor);
185 }
186 }
187}

References convertKoColorToChannelValues(), emitChannelValues(), HSV, HSY, m_d, and sigColorModelChanged().

◆ sigChannelValuesChanged

void KisVisualColorModel::sigChannelValuesChanged ( const QVector4D & values,
quint32 channelFlags )
signal

◆ sigColorModelChanged

void KisVisualColorModel::sigColorModelChanged ( )
signal

sigColorModelChanged is emitted whenever the color model changes.

This can either be due to a change in color space that uses a different channel model, or when the same color space gets represented in a different way, for example RGB representation switches from HSV to HSL etc. so the values of sigChannelValuesChanged() change meaning. Note: This will be followed by sigChannelValuesChanged() unless caused by a color space change, new channel values are not available yet when this signal occurs.

See also
getColorModel()

◆ sigColorSpaceChanged

void KisVisualColorModel::sigColorSpaceChanged ( )
signal

sigColorSpaceChanged notifies that the color space from which the channel values are derived changed, and thus invalidating the current ones.

◆ sigNewColor

void KisVisualColorModel::sigNewColor ( const KoColor & c)
signal

◆ slotLoadACSConfig

void KisVisualColorModel::slotLoadACSConfig ( )
slot

slotLoadACSConfig loads supported settings from Advanced Color Selector

Definition at line 339 of file KisVisualColorModel.cpp.

340{
341 KConfigGroup cfg = KSharedConfig::openConfig()->group("advancedColorSelector");
342 m_d->acs_config = KisColorSelectorConfiguration::fromString(cfg.readEntry("colorSelectorConfiguration", KisColorSelectorConfiguration().toString()));
343
344 m_d->gamma = cfg.readEntry("gamma", 2.2);
345
347
348 switch(m_d->acs_config.mainTypeParameter) {
349
354 RGB_model = KisVisualColorModel::HSV;
355 break;
356
360 RGB_model = KisVisualColorModel::HSL;
361 break;
362
366 RGB_model = KisVisualColorModel::HSI;
367 break;
368
372 RGB_model = KisVisualColorModel::HSY;
373 break;
374
375 default:
377 }
378 if (m_d->acs_config.mainType == KisColorSelectorConfiguration::Triangle) {
379 //Triangle only really works in HSV mode.
380 RGB_model = KisVisualColorModel::HSV;
381 }
382
383 setRGBColorModel(RGB_model);
384}
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130

References KisColorSelectorConfiguration::fromString(), HSI, KisColorSelectorConfiguration::hsiSH, HSL, KisColorSelectorConfiguration::hslSH, HSV, KisColorSelectorConfiguration::hsvSH, HSY, KisColorSelectorConfiguration::hsySH, KisColorSelectorConfiguration::IH, KIS_SAFE_ASSERT_RECOVER_NOOP, KisColorSelectorConfiguration::LH, m_d, setRGBColorModel(), KisColorSelectorConfiguration::SI, KisColorSelectorConfiguration::SL, KisColorSelectorConfiguration::SV, KisColorSelectorConfiguration::SV2, KisColorSelectorConfiguration::SY, KisColorSelectorConfiguration::Triangle, KisColorSelectorConfiguration::VH, and KisColorSelectorConfiguration::YH.

◆ slotSetChannelValues

void KisVisualColorModel::slotSetChannelValues ( const QVector4D & values)
slot

Definition at line 102 of file KisVisualColorModel.cpp.

103{
104 if (!m_d->allowUpdates) {
105 return;
106 }
107
108 quint32 changeFlags = 0;
109 QVector4D newValues(0, 0, 0, 0);
110 for (int i = 0; i < m_d->colorChannelCount; i++) {
111 newValues[i] = values[i];
112 changeFlags |= quint32(values[i] != m_d->channelValues[i]) << i;
113 }
114 if (changeFlags != 0) {
115 m_d->allowUpdates = false;
116 m_d->channelValues = newValues;
117 m_d->currentcolor = convertChannelValuesToKoColor(newValues);
118 Q_EMIT sigChannelValuesChanged(m_d->channelValues, changeFlags);
119 Q_EMIT sigNewColor(m_d->currentcolor);
120 m_d->allowUpdates = true;
121 }
122}
KoColor convertChannelValuesToKoColor(const QVector4D &values) const
void sigNewColor(const KoColor &c)

References convertChannelValuesToKoColor(), m_d, sigChannelValuesChanged(), and sigNewColor().

◆ slotSetColor

void KisVisualColorModel::slotSetColor ( const KoColor & c)
slot

Definition at line 61 of file KisVisualColorModel.cpp.

62{
63 if (!m_d->allowUpdates) {
64 return;
65 }
66
67 if (!m_d->currentCS) {
68 m_d->currentcolor = c;
70 }
71 else {
72 m_d->currentcolor = c.convertedTo(m_d->currentCS);
73 m_d->channelValues = convertKoColorToChannelValues(m_d->currentcolor);
75 }
76}
KoColor convertedTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
Definition KoColor.cpp:163

References KoColor::colorSpace(), KoColor::convertedTo(), convertKoColorToChannelValues(), emitChannelValues(), m_d, and slotSetColorSpace().

◆ slotSetColorSpace

void KisVisualColorModel::slotSetColorSpace ( const KoColorSpace * cs)
slot

Definition at line 78 of file KisVisualColorModel.cpp.

79{
80 if (!m_d->currentCS || *m_d->currentCS != *cs) {
81 const KoColorSpace *csNew = cs;
82
83 // PQ color space is not very suitable for color picking, substitute with linear one
87
91 }
92
93
94 // TODO: split off non-config related initializations
95 loadColorSpace(csNew);
96 m_d->currentcolor = KoColor(csNew);
97 m_d->channelValues = convertKoColorToChannelValues(m_d->currentcolor);
98 Q_EMIT sigColorSpaceChanged();
99 }
100}
void loadColorSpace(const KoColorSpace *cs)
void sigColorSpaceChanged()
sigColorSpaceChanged notifies that the color space from which the channel values are derived changed,...
QString id() const
Definition KoID.cpp:63
virtual QByteArray uniqueId() const =0
static KoColorSpaceRegistry * instance()
const KoColorProfile * p2020PQProfile() const
const KoColorProfile * p2020G10Profile() const

References KoColorSpace::colorModelId(), colorSpace(), convertKoColorToChannelValues(), Float32BitsColorDepthID, KoID::id(), KoColorSpaceRegistry::instance(), loadColorSpace(), m_d, KoColorSpaceRegistry::p2020G10Profile(), KoColorSpaceRegistry::p2020PQProfile(), KoColorSpace::profile(), RGBAColorModelID, sigColorSpaceChanged(), and KoColorProfile::uniqueId().

◆ supportsExposure()

bool KisVisualColorModel::supportsExposure ( ) const

Definition at line 199 of file KisVisualColorModel.cpp.

200{
201 return (m_d->exposureSupported);
202}

References m_d.

Member Data Documentation

◆ m_d

const QScopedPointer<Private> KisVisualColorModel::m_d
private

Definition at line 103 of file KisVisualColorModel.h.


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