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

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

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

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

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

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

365{
367}

◆ updateIntermediateFgColor()

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

Definition at line 344 of file kis_display_color_converter.cpp.

345{
347
348 KoColor color = srcColor;
350 displayFilter->approximateForwardTransformation(color.data(), 1);
351 intermediateFgColor = color;
352}
#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: