15#include <QDomDocument>
53 int defaultDriver = 0;
65 m_driverChannels(rhs.m_driverChannels)
89 const QString
name = QLatin1String(
"driver") + QString::number(i);
98 const QString
name = QLatin1String(
"driver") + QString::number(i);
111 QRegExp rx(
"driver(\\d+)");
112 for (QDomElement e = root.firstChildElement(); !e.isNull(); e = e.nextSiblingElement()) {
113 const QString attributeName = e.attribute(
"name");
115 if (rx.exactMatch(attributeName)) {
116 int channel = rx.cap(1).toUShort();
133 QDomElement param = doc.createElement(
"param");
134 param.setAttribute(
"name", QString(
"driver%1").arg(i));
137 param.appendChild(text);
139 root.appendChild(param);
145 const QList<QPointF> points { QPointF(0.0f, 0.5f), QPointF(1.0f, 0.5f) };
160 if (
name ==
"nTransfers") {
163 const qint32 newChannelCount =
value.toInt();
166 if (newChannelCount == prevChannelCount) {
174 if (newChannelCount > prevChannelCount) {
175 int defaultDriver = 0;
182 for (qint32 i = prevChannelCount; i < newChannelCount; ++i) {
185 const QString
name = QLatin1String(
"driver") + QString::number(i);
189 for (qint32 i = newChannelCount; i < prevChannelCount; ++i) {
190 const QString
name = QLatin1String(
"driver") + QString::number(i);
198 if (
name ==
"activeCurve") {
213 const int driver =
value.toInt();
220 QRegExp rx(
"driver(\\d+)");
221 if (rx.indexIn(
name, 0) == -1) {
225 driverIndex = rx.cap(1).toUShort();
237 for (
int i = 0; i < virtualChannelCount; i++) {
244 m_page->cmbDriverChannel->addItem(info.
name(), i);
269 int initialChannel = -1;
277 if (initialChannel < 0) {
281 return initialChannel;
304 m_page->cmbDriverChannel->setCurrentIndex(index);
315 const int channel =
m_page->cmbDriverChannel->itemData(index).toInt();
343 switch (channel.
type()) {
376 if (originalTransfers.size() >
int(virtualChannels.size())) {
383 for (
int i = virtualChannels.size() - 1; i >= 0; i--) {
384 if (!curves[i].isConstant(0.5)) {
386 int driverChannel =
mapChannel(virtualChannels[drivers[i]]);
387 QHash<QString, QVariant> params;
388 params[
"channel"] = channel;
389 params[
"driverChannel"] = driverChannel;
390 params[
"curve"] = QVariant::fromValue(originalTransfers[i]);
391 params[
"relative"] =
true;
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
KisFilterConfigurationSP clone() const override
virtual bool compareTo(const KisPropertiesConfiguration *rhs) const override
~KisCrossChannelFilterConfiguration() override
void setProperty(const QString &name, const QVariant &value) override
void fromXML(const QDomElement &e) override
QVector< int > m_driverChannels
QString toXML() const override
const QVector< int > driverChannels() const
KisCrossChannelFilterConfiguration(int channelCount, const KoColorSpace *cs, KisResourcesInterfaceSP resourcesInterface)
bool channelIndexFromDriverPropertyName(const QString &name, int &channelIndex) const
Takes a driver property name with format "driver#", where # is the index of the channel and puts the ...
KisCubicCurve getDefaultCurve() override
void setDriverChannels(QVector< int > driverChannels)
const KoColorSpace * m_colorSpace
KisConfigWidget * createConfigurationWidget(QWidget *parent, const KisPaintDeviceSP dev, bool useForMasks) const override
KoColorTransformation * createTransformation(const KoColorSpace *cs, const KisFilterConfigurationSP config) const override
KisFilterConfigurationSP factoryConfiguration(KisResourcesInterfaceSP resourcesInterface) const override
~KisCrossChannelFilter() override
static KisResourcesInterfaceSP instance()
void setProperty(const QString &name, const QVariant &value) override
QList< KisCubicCurve > m_curves
const QVector< QVector< quint16 > > & transfers() const
void setActiveCurve(int value)
QString toXML() const override
const QList< KisCubicCurve > & curves() const
virtual bool compareTo(const KisPropertiesConfiguration *rhs) const override
void fromXML(const QDomElement &e) override
static QVector< VirtualChannelInfo > getVirtualChannels(const KoColorSpace *cs, int maxChannels=-1)
static int findChannel(const QVector< VirtualChannelInfo > &virtualChannels, const VirtualChannelInfo::Type &channelType)
const KoColorSpace * colorSpace() const
QVector< qreal > lumaCoefficients
KoColorTransformation * createColorTransformation(const QString &id, const QHash< QString, QVariant > ¶meters) const
#define KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(cond, val)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
#define KIS_SAFE_ASSERT_RECOVER_NOOP(cond)
int mapChannel(const VirtualChannelInfo &channel)
int toInt(const QString &str, bool *ok=nullptr)
QString toString(const QString &value)
void removeProperty(const QString &name)