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 631 of file kis_display_color_converter.cpp.

632{
633 if (!useOcio()) {
634 return KoColor(qcolor, paintingColorSpace);
635 } else {
636 KoColor color(qcolor, intermediateColorSpace());
637 displayFilter->approximateInverseTransformation(color.data(), 1);
638 color.convertTo(paintingColorSpace);
639 return color;
640 }
641
642 qFatal("Must not be reachable");
643 return KoColor();
644}
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 646 of file kis_display_color_converter.cpp.

647{
648 KoColor color(srcColor);
649
650 if (useOcio()) {
652 displayFilter->approximateForwardTransformation(color.data(), 1);
653 }
654
655 return color.toQColor();
656}
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 285 of file kis_display_color_converter.cpp.

286{
287 if (!paintingColorSpace || srcColorSpace == paintingColorSpace || *srcColorSpace == *paintingColorSpace) {
288 return false;
289 }
290 // TODO: ideally, we'd identify color profiles that only differ in transfer curves but
291 // define the same primaries/gamut and return false for them aswell
292 if (srcColorSpace->colorModelId() == paintingColorSpace->colorModelId()) {
293 const KoColorProfile *paintProfile = paintingColorSpace->profile();
294 const KoColorProfile *srcProfile = srcColorSpace->profile();
295 bool matchingProfiles = (paintProfile == srcProfile) ||
296 (paintProfile && srcProfile && *paintProfile == *srcProfile);
297 // unless we go float->int, the color spaces are considered compatible
298 if (matchingProfiles &&
299 (srcColorSpace->colorDepthId() == Integer8BitsColorDepthID ||
300 srcColorSpace->colorDepthId() == Integer16BitsColorDepthID ||
303 return false;
304 }
305 }
306 return true;
307}
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 338 of file kis_display_color_converter.cpp.

339{
340 if (connectedNode) {
342
343 if (device) {
344 q->disconnect(device, 0);
345 }
346 }
347
348 nodeColorSpace = 0;
349
350 if (node) {
351 KisPaintDeviceSP device = findValidDevice(node);
352
353 nodeColorSpace = device ?
355 node->colorSpace();
356
358
359 if (device) {
360 q->connect(device, SIGNAL(profileChanged(const KoColorProfile*)),
361 SLOT(slotUpdateCurrentNodeColorSpace()), Qt::UniqueConnection);
362 q->connect(device, SIGNAL(colorSpaceChanged(const KoColorSpace*)),
363 SLOT(slotUpdateCurrentNodeColorSpace()), Qt::UniqueConnection);
364 }
365
366 }
367
368 if (!nodeColorSpace) {
370 }
371
372 connectedNode = node;
374}
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 319 of file kis_display_color_converter.cpp.

320{
322 KisNodeSP currentNode = v.value<KisNodeWSP>();
323 setCurrentNode(currentNode);
324 } else if (useOcio() && key == KoCanvasResource::ForegroundColor) {
326 }
327}
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 329 of file kis_display_color_converter.cpp.

330{
332}

◆ updateIntermediateFgColor()

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

Definition at line 309 of file kis_display_color_converter.cpp.

310{
312
313 KoColor color = srcColor;
315 displayFilter->approximateForwardTransformation(color.data(), 1);
316 intermediateFgColor = color;
317}
#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: