26
26
#include <KoColorSpace.h>
28
28
struct KoColorConversionCacheKey {
29
KoColorConversionCacheKey(const KoColorSpace* _src, const KoColorSpace* _dst, KoColorConversionTransformation::Intent _renderingIntent) : src(_src), dst(_dst), renderingIntent(_renderingIntent) {
30
KoColorConversionCacheKey(const KoColorSpace* _src,
31
const KoColorSpace* _dst,
32
KoColorConversionTransformation::Intent _renderingIntent,
33
KoColorConversionTransformation::ConversionFlags _conversionFlags)
36
, renderingIntent(_renderingIntent)
37
, conversionFlags(_conversionFlags)
41
bool operator==(const KoColorConversionCacheKey& rhs) const {
42
return (*src == *(rhs.src)) && (*dst == *(rhs.dst))
43
&& (renderingIntent == rhs.renderingIntent)
44
&& (conversionFlags == rhs.conversionFlags);
31
47
const KoColorSpace* src;
32
48
const KoColorSpace* dst;
33
49
KoColorConversionTransformation::Intent renderingIntent;
34
bool operator==(const KoColorConversionCacheKey& rhs) const {
35
return (*src == *(rhs.src)) && (*dst == *(rhs.dst)) && (renderingIntent == rhs.renderingIntent);
50
KoColorConversionTransformation::ConversionFlags conversionFlags;
39
53
uint qHash(const KoColorConversionCacheKey& key)
41
return qHash(key.src) + qHash(key.dst) + qHash(key.renderingIntent);
55
return qHash(key.src) + qHash(key.dst) + qHash(key.renderingIntent) + qHash(key.conversionFlags);
44
58
struct KoColorConversionCache::CachedTransformation {
45
CachedTransformation(KoColorConversionTransformation* _transfo) : transfo(_transfo), use(0) {}
60
CachedTransformation(KoColorConversionTransformation* _transfo)
61
: transfo(_transfo), use(0)
46
64
~CachedTransformation() {
52
72
KoColorConversionTransformation* transfo;
74
KoCachedColorConversionTransformation KoColorConversionCache::cachedConverter(const KoColorSpace* src, const KoColorSpace* dst, KoColorConversionTransformation::Intent _renderingIntent)
94
KoCachedColorConversionTransformation KoColorConversionCache::cachedConverter(const KoColorSpace* src,
95
const KoColorSpace* dst,
96
KoColorConversionTransformation::Intent _renderingIntent,
97
KoColorConversionTransformation::ConversionFlags _conversionFlags)
76
99
QMutexLocker lock(&d->cacheMutex);
77
KoColorConversionCacheKey key(src, dst, _renderingIntent);
100
KoColorConversionCacheKey key(src, dst, _renderingIntent, _conversionFlags);
78
101
QList< CachedTransformation* > cachedTransfos = d->cache.values(key);
79
102
if (cachedTransfos.size() != 0) {
80
103
foreach(CachedTransformation* ct, cachedTransfos) {
88
KoColorConversionTransformation* transfo = src->createColorConverter(dst, _renderingIntent);
111
KoColorConversionTransformation* transfo = src->createColorConverter(dst, _renderingIntent, _conversionFlags);
89
112
CachedTransformation* ct = new CachedTransformation(transfo);
90
113
d->cache.insert(key, ct);
91
114
return KoCachedColorConversionTransformation(this, ct);