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

Constructor & Destructor Documentation

◆ Private()

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

Definition at line 44 of file kis_display_color_converter.cpp.

45 : q(_q),
46 resourceManager(_resourceManager),
50 displayRenderer(new DisplayRenderer(_q, _resourceManager))
51 {
52 }
QSharedPointer< KisDisplayFilter > displayFilter
QScopedPointer< KoColorDisplayRendererInterface > displayRenderer

Member Function Documentation

◆ approximateFromQColor()

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

Definition at line 766 of file kis_display_color_converter.cpp.

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

782{
783 KoColor color(srcColor);
784
785 if (useOcio()) {
787 displayFilter->approximateForwardTransformation(color.data(), 1);
788 }
789
790 return color.toQColor();
791}
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 143 of file kis_display_color_converter.cpp.

143 {
144 // the color space where we apply exposure and
145 // gamma should always be linear
150 colorSpace(
154 }
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 317 of file kis_display_color_converter.cpp.

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

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

◆ ocioOutputColorSpace()

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

◆ ocioOutputProfile()

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

Definition at line 93 of file kis_display_color_converter.cpp.

93 {
94 return openGLSurfaceProfile();
95 }

◆ openGLSurfaceColorSpace()

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

◆ openGLSurfaceProfile()

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

Definition at line 84 of file kis_display_color_converter.cpp.

84 {
86 }
const KoColorProfile * canvasProfile
KisMultiSurfaceDisplayConfig multiSurfaceDisplayConfig

◆ qtWidgetsColorSpace()

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

◆ qtWidgetsProfile()

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

Definition at line 80 of file kis_display_color_converter.cpp.

80 {
82 }
const KoColorProfile * uiProfile

◆ selectPaintingColorSpace()

◆ setCurrentNode()

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

Definition at line 410 of file kis_display_color_converter.cpp.

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

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

362{
364}

◆ updateIntermediateFgColor()

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

Definition at line 341 of file kis_display_color_converter.cpp.

342{
344
345 KoColor color = srcColor;
347 displayFilter->approximateForwardTransformation(color.data(), 1);
348 intermediateFgColor = color;
349}
#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 69 of file kis_display_color_converter.cpp.

◆ cachedOcioInputColorSpace

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

Definition at line 63 of file kis_display_color_converter.cpp.

◆ cachedOcioOutputColorSpace

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

Definition at line 64 of file kis_display_color_converter.cpp.

◆ cachedOpenGLSurfaceColorSpace

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

Definition at line 66 of file kis_display_color_converter.cpp.

◆ cachedQtWidgetsColorSpace

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

Definition at line 65 of file kis_display_color_converter.cpp.

◆ connectedNode

KisNodeSP KisDisplayColorConverter::Private::connectedNode

Definition at line 161 of file kis_display_color_converter.cpp.

◆ displayFilter

QSharedPointer<KisDisplayFilter> KisDisplayColorConverter::Private::displayFilter

Definition at line 158 of file kis_display_color_converter.cpp.

◆ displayRenderer

QScopedPointer<KoColorDisplayRendererInterface> KisDisplayColorConverter::Private::displayRenderer

Definition at line 256 of file kis_display_color_converter.cpp.

◆ handlePalette

KisHandlePalette KisDisplayColorConverter::Private::handlePalette

Definition at line 164 of file kis_display_color_converter.cpp.

◆ image

KisImageSP KisDisplayColorConverter::Private::image

Definition at line 162 of file kis_display_color_converter.cpp.

◆ inputImageProfile

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

Definition at line 61 of file kis_display_color_converter.cpp.

◆ intermediateFgColor

KoColor KisDisplayColorConverter::Private::intermediateFgColor

Definition at line 160 of file kis_display_color_converter.cpp.

◆ multiSurfaceDisplayConfig

KisMultiSurfaceDisplayConfig KisDisplayColorConverter::Private::multiSurfaceDisplayConfig

Definition at line 156 of file kis_display_color_converter.cpp.

◆ nodeColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::nodeColorSpace

Definition at line 58 of file kis_display_color_converter.cpp.

◆ paintingColorSpace

const KoColorSpace* KisDisplayColorConverter::Private::paintingColorSpace

Definition at line 59 of file kis_display_color_converter.cpp.

◆ q

KisDisplayColorConverter* const KisDisplayColorConverter::Private::q

Definition at line 54 of file kis_display_color_converter.cpp.

◆ resourceManager

KoCanvasResourceProvider* KisDisplayColorConverter::Private::resourceManager

Definition at line 56 of file kis_display_color_converter.cpp.

◆ systemPalette

QPalette KisDisplayColorConverter::Private::systemPalette

Definition at line 165 of file kis_display_color_converter.cpp.


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