]> git.sesse.net Git - kdenlive/commitdiff
- Add "curve" as effect parameter type
authorTill Theato <root@ttill.de>
Fri, 7 May 2010 14:32:07 +0000 (14:32 +0000)
committerTill Theato <root@ttill.de>
Fri, 7 May 2010 14:32:07 +0000 (14:32 +0000)
- Use curve widget in frei0r curves effect

svn path=/trunk/kdenlive/; revision=4419

effects/frei0r_curves.xml
src/effectstackedit.cpp

index cbd64aae11b7d360f53382de0e35204ad213ac34..23aa124f25ebeca86d3d437b3becbe708be021fb 100644 (file)
@@ -3,46 +3,49 @@
        <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>
index d47da1ae9984ad9cc70c2f30e2ffb45d41ede763..1d201e1253cf9eb941594ca1488ad630c7d379d3 100644 (file)
@@ -27,6 +27,8 @@
 #include "effectslist.h"
 #include "kdenlivesettings.h"
 #include "profilesdialog.h"
+#include "kis_curve_widget.h"
+#include "kis_cubic_curve.h"
 
 #include <KDebug>
 #include <KLocale>
@@ -270,6 +272,24 @@ void EffectStackEdit::transferParamDesc(const QDomElement d, int in, int out)
             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);
@@ -473,6 +493,23 @@ void EffectStackEdit::collectAllParameters()
                 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;