Krita Source Code Documentation
Loading...
Searching...
No Matches
KisGradientMapFilterDitherCachedGradient Class Reference

#include <KisGradientMapFilterDitherCachedGradient.h>

Classes

struct  CachedEntry
 

Public Member Functions

const CachedEntrycachedAt (qreal t) const
 gets the color data at position 0 <= t <= 1
 
 KisGradientMapFilterDitherCachedGradient (const KoAbstractGradientSP gradient, qint32 steps, const KoColorSpace *cs)
 

Private Attributes

QVector< CachedEntrym_cachedEntries
 
const qint32 m_max
 
const CachedEntry m_nullEntry
 

Detailed Description

Definition at line 19 of file KisGradientMapFilterDitherCachedGradient.h.

Constructor & Destructor Documentation

◆ KisGradientMapFilterDitherCachedGradient()

KisGradientMapFilterDitherCachedGradient::KisGradientMapFilterDitherCachedGradient ( const KoAbstractGradientSP gradient,
qint32 steps,
const KoColorSpace * cs )

Definition at line 17 of file KisGradientMapFilterDitherCachedGradient.cpp.

18 : m_max(steps - 1)
19 , m_nullEntry(CachedEntry{KoColor(cs), KoColor(cs), 0.0})
20{
21 if (gradient.dynamicCast<KoStopGradient>()) {
22 KoStopGradient *stopGradient = static_cast<KoStopGradient*>(gradient.data());
23 for (qint32 i = 0; i < steps; i++) {
24 qreal t = static_cast<qreal>(i) / m_max;
25 KoGradientStop leftStop, rightStop;
26 if (!stopGradient->stopsAt(leftStop, rightStop, t)) {
28 } else {
29 const qreal localT = (t - leftStop.position) / (rightStop.position - leftStop.position);
30 m_cachedEntries << CachedEntry{leftStop.color.convertedTo(cs), rightStop.color.convertedTo(cs), localT};
31 }
32 }
33 } else if (gradient.dynamicCast<KoSegmentGradient>()) {
34 KoSegmentGradient *segmentGradient = static_cast<KoSegmentGradient*>(gradient.data());
35 for (qint32 i = 0; i < steps; i++) {
36 qreal t = static_cast<qreal>(i) / m_max;
37 KoGradientSegment *segment = segmentGradient->segmentAt(t);
38 if (!segment) {
40 } else {
41 const qreal localT = (t - segment->startOffset()) / (segment->endOffset() - segment->startOffset());
42 m_cachedEntries << CachedEntry{segment->startColor().convertedTo(cs), segment->endColor().convertedTo(cs), localT};
43 }
44 }
45 }
46}
KoColor convertedTo(const KoColorSpace *cs, KoColorConversionTransformation::Intent renderingIntent, KoColorConversionTransformation::ConversionFlags conversionFlags) const
Definition KoColor.cpp:163
Write API docs here.
const KoColor & startColor() const
const KoColor & endColor() const
KoGradientSegment * segmentAt(qreal t) const
bool stopsAt(KoGradientStop &leftStop, KoGradientStop &rightStop, qreal t) const
Find stops surrounding position, returns false if position outside gradient.

References KoGradientStop::color, KoColor::convertedTo(), KoGradientSegment::endColor(), KoGradientSegment::endOffset(), m_cachedEntries, m_max, m_nullEntry, KoGradientStop::position, KoSegmentGradient::segmentAt(), KoGradientSegment::startColor(), KoGradientSegment::startOffset(), and KoStopGradient::stopsAt().

Member Function Documentation

◆ cachedAt()

const KisGradientMapFilterDitherCachedGradient::CachedEntry & KisGradientMapFilterDitherCachedGradient::cachedAt ( qreal t) const

gets the color data at position 0 <= t <= 1

Definition at line 48 of file KisGradientMapFilterDitherCachedGradient.cpp.

49{
50 qint32 tInt = t * m_max + 0.5;
51 if (m_cachedEntries.size() > tInt) {
52 return m_cachedEntries[tInt];
53 } else {
54 return m_nullEntry;
55 }
56}

References m_cachedEntries, m_max, and m_nullEntry.

Member Data Documentation

◆ m_cachedEntries

QVector<CachedEntry> KisGradientMapFilterDitherCachedGradient::m_cachedEntries
private

Definition at line 36 of file KisGradientMapFilterDitherCachedGradient.h.

◆ m_max

const qint32 KisGradientMapFilterDitherCachedGradient::m_max
private

Definition at line 35 of file KisGradientMapFilterDitherCachedGradient.h.

◆ m_nullEntry

const CachedEntry KisGradientMapFilterDitherCachedGradient::m_nullEntry
private

Definition at line 37 of file KisGradientMapFilterDitherCachedGradient.h.


The documentation for this class was generated from the following files: