Krita Source Code Documentation
Loading...
Searching...
No Matches
KoDerivedResourceConverter.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2016 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
8
9#include "QVariant"
10#include "kis_assert.h"
11
13{
14 Private(int _key, int _sourceKey)
15 : key(_key), sourceKey(_sourceKey) {}
16
17 int key;
19
22};
23
24
26 : m_d(new Private(key, sourceKey))
27{
28}
29
33
35{
36 return m_d->key;
37}
38
40{
41 return m_d->sourceKey;
42}
43
44bool KoDerivedResourceConverter::notifySourceChanged(const QVariant &sourceValue)
45{
46 const QVariant newValue = fromSource(sourceValue);
47
48 const bool valueChanged = m_d->lastKnownValue != newValue || m_d->invisibleChangeHappened;
49 m_d->lastKnownValue = newValue;
50 m_d->invisibleChangeHappened = false;
51
52 return valueChanged;
53}
54
55QVariant KoDerivedResourceConverter::readFromSource(const QVariant &sourceValue)
56{
57 const QVariant result = fromSource(sourceValue);
58 m_d->invisibleChangeHappened |= result != m_d->lastKnownValue;
59 m_d->lastKnownValue = result;
60 return m_d->lastKnownValue;
61}
62
64 const QVariant &sourceValue,
65 bool *changed)
66{
67 QVariant newSourceValue = sourceValue;
68 const bool hasChanged = m_d->lastKnownValue != value || m_d->invisibleChangeHappened;
69 m_d->invisibleChangeHappened = false;
70
71 if (hasChanged || value != fromSource(sourceValue)) {
72 newSourceValue = toSource(value, sourceValue);
78 m_d->lastKnownValue = fromSource(newSourceValue);
79 }
80 if (changed) {
81 *changed = hasChanged;
82 }
83 return newSourceValue;
84}
float value(const T *src, size_t ch)
QVariant writeToSource(const QVariant &value, const QVariant &sourceValue, bool *changed)
virtual QVariant toSource(const QVariant &value, const QVariant &sourceValue)=0
KoDerivedResourceConverter(int key, int sourceKey)
virtual bool notifySourceChanged(const QVariant &sourceValue)
virtual QVariant fromSource(const QVariant &value)=0
QVariant readFromSource(const QVariant &value)
const QScopedPointer< Private > m_d