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
 
KisHandlePalette handlePalette
 
KisImageSP image
 
const KoColorProfileinputImageProfile = 0
 
KoColor intermediateFgColor
 
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig
 
const KoColorSpacenodeColorSpace
 
const KoColorSpacepaintingColorSpace
 
KisDisplayColorConverter *const q
 
KoCanvasResourceProviderresourceManager
 
QPalette systemPalette
 

Detailed Description

Definition at line 44 of file kis_display_color_converter.cpp.

Constructor & Destructor Documentation

◆ Private()

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

Definition at line 46 of file kis_display_color_converter.cpp.

47 : q(_q),
48 resourceManager(_resourceManager),
52 displayRenderer(new DisplayRenderer(_q, _resourceManager))
53 {
54 }
QSharedPointer< KisDisplayFilter > displayFilter
QScopedPointer< KoColorDisplayRendererInterface > displayRenderer

Member Function Documentation

◆ approximateFromQColor()

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

Definition at line 771 of file kis_display_color_converter.cpp.

772{
773 if (!useOcio()) {
774 return KoColor(qcolor, paintingColorSpace);
775 } else {
776 KoColor color(qcolor, intermediateColorSpace());
777 displayFilter->approximateInverseTransformation(color.data(), 1);
778 color.convertTo(paintingColorSpace);
779 return color;
780 }
781
782 qFatal("Must not be reachable");
783 return KoColor();
784}
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 786 of file kis_display_color_converter.cpp.

787{
788 KoColor color(srcColor);
789
790 if (useOcio()) {
792 displayFilter->approximateForwardTransformation(color.data(), 1);
793 }
794
795 return color.toQColor();
796}
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 145 of file kis_display_color_converter.cpp.

145 {
146 // the color space where we apply exposure and
147 // gamma should always be linear
152 colorSpace(
156 }
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 322 of file kis_display_color_converter.cpp.

323{
324 if (!paintingColorSpace || srcColorSpace == paintingColorSpace || *srcColorSpace == *paintingColorSpace) {
325 return false;
326 }
327 // TODO: ideally, we'd identify color profiles that only differ in transfer curves but
328 // define the same primaries/gamut and return false for them aswell
329 if (srcColorSpace->colorModelId() == paintingColorSpace->colorModelId()) {
330 const KoColorProfile *paintProfile = paintingColorSpace->profile();
331 const KoColorProfile *srcProfile = srcColorSpace->profile();
332 bool matchingProfiles = (paintProfile == srcProfile) ||
333 (paintProfile && srcProfile && *paintProfile == *srcProfile);
334 // unless we go float->int, the color spaces are considered compatible
335 if (matchingProfiles &&
336 (srcColorSpace->colorDepthId() == Integer8BitsColorDepthID ||
337 srcColorSpace->colorDepthId() == Integer16BitsColorDepthID ||
340 return false;
341 }
342 }
343 return true;
344}
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 90 of file kis_display_color_converter.cpp.

90 {
91 return displayFilter && displayFilter->useInternalColorManagement() ?
93 }
const KoColorProfile * openGLSurfaceProfile() const

◆ ocioOutputColorSpace()

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

◆ ocioOutputProfile()

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

Definition at line 95 of file kis_display_color_converter.cpp.

95 {
96 return openGLSurfaceProfile();
97 }

◆ openGLSurfaceColorSpace()

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

◆ openGLSurfaceProfile()

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

Definition at line 86 of file kis_display_color_converter.cpp.

86 {
88 }
const KoColorProfile * canvasProfile
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig

◆ qtWidgetsColorSpace()

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

◆ qtWidgetsProfile()

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

Definition at line 82 of file kis_display_color_converter.cpp.

82 {
84 }
const KoColorProfile * uiProfile

◆ selectPaintingColorSpace()

◆ setCurrentNode()

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

Definition at line 415 of file kis_display_color_converter.cpp.

416{
417 if (connectedNode) {
419
420 if (device) {
421 q->disconnect(device, 0);
422 }
423 }
424
425 nodeColorSpace = 0;
426
427 if (node) {
428 KisPaintDeviceSP device = findValidDevice(node);
429
430 nodeColorSpace = device ?
432 node->colorSpace();
433
435
436 if (device) {
437 q->connect(device, SIGNAL(profileChanged(const KoColorProfile*)),
438 SLOT(slotUpdateCurrentNodeColorSpace()), Qt::UniqueConnection);
439 q->connect(device, SIGNAL(colorSpaceChanged(const KoColorSpace*)),
440 SLOT(slotUpdateCurrentNodeColorSpace()), Qt::UniqueConnection);
441 }
442
443 }
444
445 if (!nodeColorSpace) {
447 }
448
449 connectedNode = node;
451}
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 356 of file kis_display_color_converter.cpp.

357{
359 KisNodeSP currentNode = v.value<KisNodeWSP>();
360 setCurrentNode(currentNode);
361 } else if (useOcio() && key == KoCanvasResource::ForegroundColor) {
363 }
364}
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 366 of file kis_display_color_converter.cpp.

367{
369}

◆ updateIntermediateFgColor()

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

Definition at line 346 of file kis_display_color_converter.cpp.

347{
349
350 KoColor color = srcColor;
352 displayFilter->approximateForwardTransformation(color.data(), 1);
353 intermediateFgColor = color;
354}
#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 71 of file kis_display_color_converter.cpp.

◆ cachedOcioInputColorSpace

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

Definition at line 65 of file kis_display_color_converter.cpp.

◆ cachedOcioOutputColorSpace

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

Definition at line 66 of file kis_display_color_converter.cpp.

◆ cachedOpenGLSurfaceColorSpace

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

Definition at line 68 of file kis_display_color_converter.cpp.

◆ cachedQtWidgetsColorSpace

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

Definition at line 67 of file kis_display_color_converter.cpp.

◆ connectedNode

KisNodeSP KisDisplayColorConverter::Private::connectedNode

Definition at line 163 of file kis_display_color_converter.cpp.

◆ displayFilter

QSharedPointer<KisDisplayFilter> KisDisplayColorConverter::Private::displayFilter

Definition at line 160 of file kis_display_color_converter.cpp.

◆ displayRenderer

QScopedPointer<KoColorDisplayRendererInterface> KisDisplayColorConverter::Private::displayRenderer

Definition at line 258 of file kis_display_color_converter.cpp.

◆ handlePalette

KisHandlePalette KisDisplayColorConverter::Private::handlePalette

Definition at line 166 of file kis_display_color_converter.cpp.

◆ image

KisImageSP KisDisplayColorConverter::Private::image

Definition at line 164 of file kis_display_color_converter.cpp.

◆ inputImageProfile

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

Definition at line 63 of file kis_display_color_converter.cpp.

◆ intermediateFgColor

KoColor KisDisplayColorConverter::Private::intermediateFgColor

Definition at line 162 of file kis_display_color_converter.cpp.

◆ multiSurfaceDisplayConfig

KisMultiSurfaceDisplayConfig KisDisplayColorConverter::Private::multiSurfaceDisplayConfig

Definition at line 158 of file kis_display_color_converter.cpp.

◆ nodeColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::nodeColorSpace

Definition at line 60 of file kis_display_color_converter.cpp.

◆ paintingColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::paintingColorSpace

Definition at line 61 of file kis_display_color_converter.cpp.

◆ q

KisDisplayColorConverter* const KisDisplayColorConverter::Private::q

Definition at line 56 of file kis_display_color_converter.cpp.

◆ resourceManager

KoCanvasResourceProvider* KisDisplayColorConverter::Private::resourceManager

Definition at line 58 of file kis_display_color_converter.cpp.

◆ systemPalette

QPalette KisDisplayColorConverter::Private::systemPalette

Definition at line 167 of file kis_display_color_converter.cpp.


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