<!DOCTYPE kpartgui>
-<effect tag="frei0r.curves" id="frei0r.curves">
+<group>
+ <effect tag="frei0r.curves" id="frei0r.curves">
<name>Curves</name>
<description>Color curves adjustment</description>
<author>Maksim Golovkin</author>
<paramlistdisplay>Red,Green,Blue,Luma</paramlistdisplay>
<name>Channel</name>
</parameter>
- <parameter type="list" name="Luma formula" default="1" paramlist="0,1">
+ <parameter type="list" name="Luma formula" default="1" paramlist="0;1">
<paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
<name>Luma formula</name>
</parameter>
<paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
<name>Graph position</name>
</parameter>
-</effect>
+ </effect>
+ <effect LC_NUMERIC="C" tag="frei0r.curves" id="frei0r.curves" version="0.3">
+ <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,Luma</paramlistdisplay>
+ <name>Channel</name>
+ </parameter>
+ <parameter type="list" name="Luma formula" default="1" paramlist="0;1">
+ <paramlistdisplay>Rec. 601,Rec. 709</paramlistdisplay>
+ <name>Luma formula</name>
+ </parameter>
+
+ <!-- No actual parameter: Represents the curve widget -->
+ <parameter type="curve" default="0" depends="Channel" number="Curve point number" inpoints="Point %i input value" outpoints="Point %i output value" min="1" max="5" />
+
+ <parameter type="fixed" name="Curve point number" default="0.2" min="0.2" max="0.5">
+ <name>Number of curve points</name>
+ </parameter>
+ <parameter type="fixed" name="Point 1 input value" default="0" min="0" max="1">
+ <name>Point 1 input value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 1 output value" default="0" min="0" max="1">
+ <name>Point 1 output value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 2 input value" default="1" min="0" max="1">
+ <name>Point 2 input value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 2 output value" default="1" min="0" max="1">
+ <name>Point 2 output value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 3 input value" default="0" min="0" max="1">
+ <name>Point 3 input value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 3 output value" default="0" min="0" max="1">
+ <name>Point 3 output value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 4 input value" default="0" min="0" max="1">
+ <name>Point 4 input value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 4 output value" default="0" min="0" max="1">
+ <name>Point 4 output value</name>
+ </parameter>
+ <parameter type="fixed" name="Point 5 input value" default="0" min="0" max="1">
+ <name>Point 5 input value</name>
+ </parameter>
+ <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="0.3" paramlist="0;0.1;0.2;0.3">
+ <paramlistdisplay>Top Left,Top Right,Bottom Left,Bottom Right</paramlistdisplay>
+ <name>Graph position</name>
+ </parameter>
+ </effect>
+</group>
}
}
#endif
- QDomElement e = m_params.toElement();
- int minFrame = e.attribute("start").toInt();
- int maxFrame = e.attribute("end").toInt();
+ int minFrame = d.attribute("start").toInt();
+ int maxFrame = d.attribute("end").toInt();
// In transitions, maxFrame is in fact one frame after the end of transition
if (maxFrame > 0) maxFrame --;
KeyframeEdit *geo;
if (pa.attribute("widget") == "corners") {
// we want a corners-keyframe-widget
- CornersWidget *corners = new CornersWidget(m_monitor, pa, m_in, m_out, m_timecode, e.attribute("active_keyframe", "-1").toInt(), this);
+ CornersWidget *corners = new CornersWidget(m_monitor, pa, m_in, m_out, m_timecode, d.attribute("active_keyframe", "-1").toInt(), this);
corners->slotShowScene(!disable);
connect(corners, SIGNAL(checkMonitorPosition(int)), this, SIGNAL(checkMonitorPosition(int)));
connect(this, SIGNAL(effectStateChanged(bool)), corners, SLOT(slotShowScene(bool)));
connect(this, SIGNAL(syncEffectsPos(int)), corners, SLOT(slotSyncPosition(int)));
geo = static_cast<KeyframeEdit *>(corners);
} else {
- geo = new KeyframeEdit(pa, m_in, m_out, m_timecode, e.attribute("active_keyframe", "-1").toInt());
+ geo = new KeyframeEdit(pa, m_in, m_out, m_timecode, d.attribute("active_keyframe", "-1").toInt());
}
m_vbox->addWidget(geo);
m_valueItems[paramName+"keyframe"] = geo;
KisCurveWidget *curve = new KisCurveWidget(this);
curve->setMaxPoints(pa.attribute("max").toInt());
QList<QPointF> points;
- int number = EffectsList::parameter(e, pa.attribute("number")).toInt();
+ int number;
+ if (d.attribute("version").toDouble() > 0.2) {
+ number = EffectsList::parameter(d, pa.attribute("number")).toDouble() * 10;
+ } else {
+ number = EffectsList::parameter(d, pa.attribute("number")).toInt();
+ }
QString inName = pa.attribute("inpoints");
QString outName = pa.attribute("outpoints");
int start = pa.attribute("min").toInt();
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());
+ points << QPointF(EffectsList::parameter(d, in).toDouble(), EffectsList::parameter(d, out).toDouble());
}
if (!points.isEmpty())
curve->setCurve(KisCubicCurve(points));
QString depends = pa.attribute("depends");
if (!depends.isEmpty())
- meetDependency(paramName, type, EffectsList::parameter(e, depends));
+ meetDependency(paramName, type, EffectsList::parameter(d, depends));
} else if (type == "bezier_spline") {
BezierSplineWidget *widget = new BezierSplineWidget(value, this);
stretch = false;
connect(widget, SIGNAL(modified()), this, SLOT(collectAllParameters()));
QString depends = pa.attribute("depends");
if (!depends.isEmpty())
- meetDependency(paramName, type, EffectsList::parameter(e, depends));
+ meetDependency(paramName, type, EffectsList::parameter(d, depends));
#ifdef QJSON
} else if (type == "roto-spline") {
RotoWidget *roto = new RotoWidget(value, m_monitor, info, m_timecode, this);
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()));
+ if (oldparam.attribute("version").toDouble() > 0.2) {
+ EffectsList::setParameter(newparam, number, locale.toString(points.count() / 10.));
+ } else {
+ 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));