Krita Source Code Documentation
Loading...
Searching...
No Matches
KisDisplayColorConverter::Private Struct Reference

Classes

class  DisplayRenderer
 

Public Member Functions

KoColor approximateFromQColor (const QColor &qcolor)
 
QColor approximateToQColor (const KoColor &color)
 
const KoColorSpaceintermediateColorSpace () const
 
bool needsColorProofing (const KoColorSpace *srcColorSpace) const
 
void notifyDisplayConfigurationChanged ()
 
const KoColorSpaceocioInputColorSpace () const
 
const KoColorProfileocioInputProfile () const
 
const KoColorSpaceocioOutputColorSpace () const
 
const KoColorProfileocioOutputProfile () const
 
const KoColorSpaceopenGLSurfaceColorSpace (const KoID &bitDepthId) const
 
const KoColorProfileopenGLSurfaceProfile () const
 
 Private (KisDisplayColorConverter *_q, KoCanvasResourceProvider *_resourceManager)
 
const KoColorSpaceqtWidgetsColorSpace () const
 
const KoColorProfileqtWidgetsProfile () const
 
void selectPaintingColorSpace ()
 
void setCurrentNode (KisNodeSP node)
 
void slotCanvasResourceChanged (int key, const QVariant &v)
 
void slotUpdateCurrentNodeColorSpace ()
 
void updateIntermediateFgColor (const KoColor &color)
 
bool useOcio () const
 

Public Attributes

const KoColorSpacecachedIntermediateColorSpace = 0
 
const KoColorSpacecachedOcioInputColorSpace = 0
 
const KoColorSpacecachedOcioOutputColorSpace = 0
 
const KoColorSpacecachedOpenGLSurfaceColorSpace = 0
 
const KoColorSpacecachedQtWidgetsColorSpace = 0
 
KisNodeSP connectedNode
 
QSharedPointer< KisDisplayFilterdisplayFilter
 
QScopedPointer< KoColorDisplayRendererInterfacedisplayRenderer
 
KisImageSP image
 
const KoColorProfileinputImageProfile = 0
 
KoColor intermediateFgColor
 
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig
 
const KoColorSpacenodeColorSpace
 
const KoColorSpacepaintingColorSpace
 
KisDisplayColorConverter *const q
 
KoCanvasResourceProviderresourceManager
 

Detailed Description

Definition at line 37 of file kis_display_color_converter.cpp.

Constructor & Destructor Documentation

◆ Private()

KisDisplayColorConverter::Private::Private ( KisDisplayColorConverter * _q,
KoCanvasResourceProvider * _resourceManager )
inline

Definition at line 39 of file kis_display_color_converter.cpp.

40 : q(_q),
41 resourceManager(_resourceManager),
45 displayRenderer(new DisplayRenderer(_q, _resourceManager))
46 {
47 }
QSharedPointer< KisDisplayFilter > displayFilter
QScopedPointer< KoColorDisplayRendererInterface > displayRenderer

Member Function Documentation

◆ approximateFromQColor()

KoColor KisDisplayColorConverter::Private::approximateFromQColor ( const QColor & qcolor)
inline

Definition at line 632 of file kis_display_color_converter.cpp.

633{
634 if (!useOcio()) {
635 return KoColor(qcolor, paintingColorSpace);
636 } else {
637 KoColor color(qcolor, intermediateColorSpace());
638 displayFilter->approximateInverseTransformation(color.data(), 1);
639 color.convertTo(paintingColorSpace);
640 return color;
641 }
642
643 qFatal("Must not be reachable");
644 return KoColor();
645}
const KoColorSpace * intermediateColorSpace() const

References KoColor::convertTo(), KoColor::data(), KisDisplayColorConverter::displayFilter(), and KisDisplayColorConverter::paintingColorSpace().

◆ approximateToQColor()

QColor KisDisplayColorConverter::Private::approximateToQColor ( const KoColor & color)
inline

Definition at line 647 of file kis_display_color_converter.cpp.

648{
649 KoColor color(srcColor);
650
651 if (useOcio()) {
653 displayFilter->approximateForwardTransformation(color.data(), 1);
654 }
655
656 return color.toQColor();
657}
void convertTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags)
Definition KoColor.cpp:136
quint8 * data()
Definition KoColor.h:144
void toQColor(QColor *c) const
a convenience method for the above.
Definition KoColor.cpp:198

References KoColor::convertTo(), KoColor::data(), KisDisplayColorConverter::displayFilter(), and KoColor::toQColor().

◆ intermediateColorSpace()

const KoColorSpace * KisDisplayColorConverter::Private::intermediateColorSpace ( ) const
inline

Definition at line 138 of file kis_display_color_converter.cpp.

138 {
139 // the color space where we apply exposure and
140 // gamma should always be linear
145 colorSpace(
149 }
const KoID Float32BitsColorDepthID("F32", ki18n("32-bit float/channel"))
const KoID RGBAColorModelID("RGBA", ki18n("RGB/Alpha"))
QString id() const
Definition KoID.cpp:63
static KoColorSpaceRegistry * instance()
const KoColorProfile * p2020G10Profile() const

References Float32BitsColorDepthID, KoID::id(), KoColorSpaceRegistry::instance(), KoColorSpaceRegistry::p2020G10Profile(), and RGBAColorModelID.

◆ needsColorProofing()

bool KisDisplayColorConverter::Private::needsColorProofing ( const KoColorSpace * srcColorSpace) const

Definition at line 286 of file kis_display_color_converter.cpp.

287{
288 if (!paintingColorSpace || srcColorSpace == paintingColorSpace || *srcColorSpace == *paintingColorSpace) {
289 return false;
290 }
291 // TODO: ideally, we'd identify color profiles that only differ in transfer curves but
292 // define the same primaries/gamut and return false for them aswell
293 if (srcColorSpace->colorModelId() == paintingColorSpace->colorModelId()) {
294 const KoColorProfile *paintProfile = paintingColorSpace->profile();
295 const KoColorProfile *srcProfile = srcColorSpace->profile();
296 bool matchingProfiles = (paintProfile == srcProfile) ||
297 (paintProfile && srcProfile && *paintProfile == *srcProfile);
298 // unless we go float->int, the color spaces are considered compatible
299 if (matchingProfiles &&
300 (srcColorSpace->colorDepthId() == Integer8BitsColorDepthID ||
301 srcColorSpace->colorDepthId() == Integer16BitsColorDepthID ||
304 return false;
305 }
306 }
307 return true;
308}
const KoID Float16BitsColorDepthID("F16", ki18n("16-bit float/channel"))
const KoID Integer8BitsColorDepthID("U8", ki18n("8-bit integer/channel"))
const KoID Integer16BitsColorDepthID("U16", ki18n("16-bit integer/channel"))
virtual KoID colorModelId() const =0
virtual KoID colorDepthId() const =0
virtual const KoColorProfile * profile() const =0

References KoColorSpace::colorDepthId(), KoColorSpace::colorModelId(), Float16BitsColorDepthID, Float32BitsColorDepthID, Integer16BitsColorDepthID, Integer8BitsColorDepthID, KisDisplayColorConverter::paintingColorSpace(), and KoColorSpace::profile().

◆ notifyDisplayConfigurationChanged()

void KisDisplayColorConverter::Private::notifyDisplayConfigurationChanged ( )
inline

◆ ocioInputColorSpace()

const KoColorSpace * KisDisplayColorConverter::Private::ocioInputColorSpace ( ) const
inline

◆ ocioInputProfile()

const KoColorProfile * KisDisplayColorConverter::Private::ocioInputProfile ( ) const
inline

Definition at line 83 of file kis_display_color_converter.cpp.

83 {
84 return displayFilter && displayFilter->useInternalColorManagement() ?
86 }
const KoColorProfile * openGLSurfaceProfile() const

◆ ocioOutputColorSpace()

const KoColorSpace * KisDisplayColorConverter::Private::ocioOutputColorSpace ( ) const
inline

◆ ocioOutputProfile()

const KoColorProfile * KisDisplayColorConverter::Private::ocioOutputProfile ( ) const
inline

Definition at line 88 of file kis_display_color_converter.cpp.

88 {
89 return openGLSurfaceProfile();
90 }

◆ openGLSurfaceColorSpace()

const KoColorSpace * KisDisplayColorConverter::Private::openGLSurfaceColorSpace ( const KoID & bitDepthId) const
inline

◆ openGLSurfaceProfile()

const KoColorProfile * KisDisplayColorConverter::Private::openGLSurfaceProfile ( ) const
inline

Definition at line 79 of file kis_display_color_converter.cpp.

79 {
81 }
const KoColorProfile * canvasProfile
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig

◆ qtWidgetsColorSpace()

const KoColorSpace * KisDisplayColorConverter::Private::qtWidgetsColorSpace ( ) const
inline

◆ qtWidgetsProfile()

const KoColorProfile * KisDisplayColorConverter::Private::qtWidgetsProfile ( ) const
inline

Definition at line 75 of file kis_display_color_converter.cpp.

75 {
77 }
const KoColorProfile * uiProfile

◆ selectPaintingColorSpace()

◆ setCurrentNode()

void KisDisplayColorConverter::Private::setCurrentNode ( KisNodeSP node)

Definition at line 339 of file kis_display_color_converter.cpp.

340{
341 if (connectedNode) {
343
344 if (device) {
345 q->disconnect(device, 0);
346 }
347 }
348
349 nodeColorSpace = 0;
350
351 if (node) {
352 KisPaintDeviceSP device = findValidDevice(node);
353
354 nodeColorSpace = device ?
356 node->colorSpace();
357
359
360 if (device) {
361 q->connect(device, SIGNAL(profileChanged(const KoColorProfile*)),
362 SLOT(slotUpdateCurrentNodeColorSpace()), Qt::UniqueConnection);
363 q->connect(device, SIGNAL(colorSpaceChanged(const KoColorSpace*)),
364 SLOT(slotUpdateCurrentNodeColorSpace()), Qt::UniqueConnection);
365 }
366
367 }
368
369 if (!nodeColorSpace) {
371 }
372
373 connectedNode = node;
375}
virtual const KoColorSpace * compositionSourceColorSpace() const
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
Definition kis_assert.h:130
KisPaintDeviceSP findValidDevice(KisNodeSP node)
virtual const KoColorSpace * colorSpace() const =0
const KoColorSpace * rgb8(const QString &profileName=QString())

References KisBaseNode::colorSpace(), KisPaintDevice::compositionSourceColorSpace(), findValidDevice(), KoColorSpaceRegistry::instance(), KIS_SAFE_ASSERT_RECOVER_NOOP, KisDisplayColorConverter::nodeColorSpace(), and KoColorSpaceRegistry::rgb8().

◆ slotCanvasResourceChanged()

void KisDisplayColorConverter::Private::slotCanvasResourceChanged ( int key,
const QVariant & v )

Definition at line 320 of file kis_display_color_converter.cpp.

321{
323 KisNodeSP currentNode = v.value<KisNodeWSP>();
324 setCurrentNode(currentNode);
325 } else if (useOcio() && key == KoCanvasResource::ForegroundColor) {
327 }
328}
qreal v
@ ForegroundColor
The active foreground color selected for this canvas.

References KoCanvasResource::CurrentKritaNode, KoCanvasResource::ForegroundColor, and v.

◆ slotUpdateCurrentNodeColorSpace()

void KisDisplayColorConverter::Private::slotUpdateCurrentNodeColorSpace ( )

Definition at line 330 of file kis_display_color_converter.cpp.

331{
333}

◆ updateIntermediateFgColor()

void KisDisplayColorConverter::Private::updateIntermediateFgColor ( const KoColor & color)

Definition at line 310 of file kis_display_color_converter.cpp.

311{
313
314 KoColor color = srcColor;
316 displayFilter->approximateForwardTransformation(color.data(), 1);
317 intermediateFgColor = color;
318}
#define KIS_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:75

References KoColor::convertTo(), KoColor::data(), KisDisplayColorConverter::displayFilter(), and KIS_ASSERT_RECOVER_RETURN.

◆ useOcio()

bool KisDisplayColorConverter::Private::useOcio ( ) const

Member Data Documentation

◆ cachedIntermediateColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::cachedIntermediateColorSpace = 0
mutable

Definition at line 64 of file kis_display_color_converter.cpp.

◆ cachedOcioInputColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::cachedOcioInputColorSpace = 0
mutable

Definition at line 58 of file kis_display_color_converter.cpp.

◆ cachedOcioOutputColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::cachedOcioOutputColorSpace = 0
mutable

Definition at line 59 of file kis_display_color_converter.cpp.

◆ cachedOpenGLSurfaceColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::cachedOpenGLSurfaceColorSpace = 0
mutable

Definition at line 61 of file kis_display_color_converter.cpp.

◆ cachedQtWidgetsColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::cachedQtWidgetsColorSpace = 0
mutable

Definition at line 60 of file kis_display_color_converter.cpp.

◆ connectedNode

KisNodeSP KisDisplayColorConverter::Private::connectedNode

Definition at line 156 of file kis_display_color_converter.cpp.

◆ displayFilter

QSharedPointer<KisDisplayFilter> KisDisplayColorConverter::Private::displayFilter

Definition at line 153 of file kis_display_color_converter.cpp.

◆ displayRenderer

QScopedPointer<KoColorDisplayRendererInterface> KisDisplayColorConverter::Private::displayRenderer

Definition at line 227 of file kis_display_color_converter.cpp.

◆ image

KisImageSP KisDisplayColorConverter::Private::image

Definition at line 157 of file kis_display_color_converter.cpp.

◆ inputImageProfile

const KoColorProfile* KisDisplayColorConverter::Private::inputImageProfile = 0

Definition at line 56 of file kis_display_color_converter.cpp.

◆ intermediateFgColor

KoColor KisDisplayColorConverter::Private::intermediateFgColor

Definition at line 155 of file kis_display_color_converter.cpp.

◆ multiSurfaceDisplayConfig

KisMultiSurfaceDisplayConfig KisDisplayColorConverter::Private::multiSurfaceDisplayConfig

Definition at line 151 of file kis_display_color_converter.cpp.

◆ nodeColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::nodeColorSpace

Definition at line 53 of file kis_display_color_converter.cpp.

◆ paintingColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::paintingColorSpace

Definition at line 54 of file kis_display_color_converter.cpp.

◆ q

KisDisplayColorConverter* const KisDisplayColorConverter::Private::q

Definition at line 49 of file kis_display_color_converter.cpp.

◆ resourceManager

KoCanvasResourceProvider* KisDisplayColorConverter::Private::resourceManager

Definition at line 51 of file kis_display_color_converter.cpp.


The documentation for this struct was generated from the following file: