<name>Curves</name>
<description>Color curves adjustment</description>
<author>Maksim Golovkin</author>
- <parameter type="list" name="Channel" default="0" paramlist="0,1,2,3" paramlistdisplay="red,green,blue,black">
+ <parameter type="list" name="Channel" default="0" paramlist="0,1,2,3" paramlistdisplay="Red,Green,Blue,Luma">
<name>Channel</name>
</parameter>
- <parameter type="bool" name="Show curves" default="1">
- <name>Show graph</name>
- </parameter>
- <parameter type="list" name="Graph position" default="3" paramlist="0,1,2,3" paramlistdisplay="upper left,upper right,lower left,lower right">
- <name>Graph position</name>
- </parameter>
- <parameter type="constant" name="Curve point number" default="5" min="2" max="5">
+ <parameter type="curve" default="0" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5">
+ <name>Curve Widget</name>
+ </parameter>
+ <parameter type="fixed" name="Curve point number" default="2" min="2" max="5">
<name>Number of curve points</name>
</parameter>
- <parameter type="constant" name="Point 1 input value" default="0" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
<name>Point 1 input value</name>
</parameter>
- <parameter type="constant" name="Point 1 output value" default="0" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
<name>Point 1 output value</name>
</parameter>
- <parameter type="constant" name="Point 2 input value" default="250" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
<name>Point 2 input value</name>
</parameter>
- <parameter type="constant" name="Point 2 output value" default="250" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
<name>Point 2 output value</name>
</parameter>
- <parameter type="constant" name="Point 3 input value" default="500" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
<name>Point 3 input value</name>
</parameter>
- <parameter type="constant" name="Point 3 output value" default="500" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
<name>Point 3 output value</name>
</parameter>
- <parameter type="constant" name="Point 4 input value" default="750" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
<name>Point 4 input value</name>
</parameter>
- <parameter type="constant" name="Point 4 output value" default="750" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
<name>Point 4 output value</name>
</parameter>
- <parameter type="constant" name="Point 5 input value" default="1000" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
<name>Point 5 input value</name>
</parameter>
- <parameter type="constant" name="Point 5 output value" default="1000" min="0" max="1000" factor="1000">
+ <parameter type="fixed" name="Point 5 output value" default="0" min="0" max="1">
<name>Point 5 output value</name>
</parameter>
+ <parameter type="bool" name="Show curves" default="0">
+ <name>Show graph in picture</name>
+ </parameter>
+ <parameter type="list" name="Graph position" default="3" paramlist="0,1,2,3" paramlistdisplay="Top Left,Top Right,Bottom Left,Bottom Right">
+ <name>Graph position</name>
+ </parameter>
</effect>
#include "effectslist.h"
#include "kdenlivesettings.h"
#include "profilesdialog.h"
+#include "kis_curve_widget.h"
+#include "kis_cubic_curve.h"
#include <KDebug>
#include <KLocale>
m_vbox->addWidget(posedit);
m_valueItems[paramName+"position"] = posedit;
connect(posedit, SIGNAL(parameterChanged()), this, SLOT(collectAllParameters()));
+ } else if (type == "curve") {
+ KisCurveWidget *curve = new KisCurveWidget(this);
+ QList<QPointF> points;
+ int number = EffectsList::parameter(e, pa.attribute("number")).toInt();
+ QString inName = pa.attribute("inpoints");
+ QString outName = pa.attribute("outpoints");
+ int start = pa.attribute("min").toInt();
+ for (int j = start; j <= number; j++) {
+ QString in = inName;
+ in.replace("%i", QString::number(j));
+ QString out = outName;
+ out.replace("%i", QString::number(j));
+ points << QPointF(EffectsList::parameter(e, in).toDouble(), EffectsList::parameter(e, out).toDouble());
+ }
+ if (!points.isEmpty()) curve->setCurve(KisCubicCurve(points));
+ m_vbox->addWidget(curve);
+ connect(curve, SIGNAL(modified()), this, SLOT(collectAllParameters()));
+ m_valueItems[paramName] = curve;
} else if (type == "wipe") {
Wipeval *wpval = new Wipeval;
wpval->setupUi(toFillin);
EffectsList::setParameter(newparam, "out", QString::number(m_out + m_in));
setValue.clear();
}
+ } else if (type == "curve") {
+ KisCurveWidget *curve = ((KisCurveWidget*)m_valueItems.value(paramName));
+ QList<QPointF> points = curve->curve().points();
+ QString number = pa.attributes().namedItem("number").nodeValue();
+ QString inName = pa.attributes().namedItem("inpoints").nodeValue();
+ QString outName = pa.attributes().namedItem("outpoints").nodeValue();
+ int off = pa.attributes().namedItem("min").nodeValue().toInt();
+ int end = pa.attributes().namedItem("max").nodeValue().toInt();
+ EffectsList::setParameter(newparam, number, QString::number(points.count()));
+ for (int j = 0; (j < points.count() && j + off <= end); j++) {
+ QString in = inName;
+ in.replace("%i", QString::number(j+off));
+ QString out = outName;
+ out.replace("%i", QString::number(j+off));
+ EffectsList::setParameter(newparam, in, QString::number(points.at(j).x()));
+ EffectsList::setParameter(newparam, out, QString::number(points.at(j).y()));
+ }
} else if (type == "wipe") {
Wipeval *wp = (Wipeval*)m_valueItems.value(paramName);
wipeInfo info;