X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Finiteffects.cpp;h=42cf9148195a79ead1bcbbc1fc298158938728cb;hb=92e7620dd463e4188da378cee497d2135987f242;hp=d304fd9db4238bc5705b9bdbce42211566fe084b;hpb=4231d0f08a53e51449e0b8c1db1b0a97b2663c9b;p=kdenlive diff --git a/src/initeffects.cpp b/src/initeffects.cpp index d304fd9d..42cf9148 100644 --- a/src/initeffects.cpp +++ b/src/initeffects.cpp @@ -33,7 +33,7 @@ #include initEffectsThumbnailer::initEffectsThumbnailer() : - QThread() + QThread() { } @@ -46,7 +46,7 @@ void initEffectsThumbnailer::prepareThumbnailsCall(const QStringList& list) void initEffectsThumbnailer::run() { - foreach(const QString &entry, m_list) { + foreach(const QString & entry, m_list) { kDebug() << entry; if (!entry.isEmpty() && (entry.endsWith(".png") || entry.endsWith(".pgm"))) { if (!EffectStackEdit::iconCache.contains(entry)) { @@ -71,9 +71,9 @@ void initEffects::refreshLumas() filters << "*.pgm" << "*.png"; QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas"); - foreach(const QString &folder, customLumas) { + foreach(const QString & folder, customLumas) { QStringList filesnames = QDir(folder).entryList(filters, QDir::Files); - foreach(const QString &fname, filesnames) { + foreach(const QString & fname, filesnames) { imagenamelist.append(fname); imagefiles.append(KUrl(folder).path(KUrl::AddTrailingSlash) + fname); } @@ -85,7 +85,7 @@ void initEffects::refreshLumas() folder.addPath(mlt_environment("MLT_NORMALISATION")); QDir lumafolder(folder.path()); QStringList filesnames = lumafolder.entryList(filters, QDir::Files); - foreach(const QString &fname, filesnames) { + foreach(const QString & fname, filesnames) { imagenamelist.append(fname); KUrl path(folder); path.addPath(fname); @@ -114,6 +114,25 @@ void initEffects::refreshLumas() } } +// static +QDomDocument initEffects::getUsedCustomEffects(QMap effectids) +{ + QMapIterator i(effectids); + int ix; + QDomDocument doc; + QDomElement list = doc.createElement("customeffects"); + doc.appendChild(list); + while (i.hasNext()) { + i.next(); + ix = MainWindow::customEffects.hasEffect(i.value(), i.key()); + if (ix > -1) { + QDomElement e = MainWindow::customEffects.at(ix); + list.appendChild(doc.importNode(e, true)); + } + } + return doc; +} + //static Mlt::Repository *initEffects::parseEffectFiles() { @@ -222,7 +241,7 @@ Mlt::Repository *initEffects::parseEffectFiles() effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo); } MainWindow::transitions.clearList(); - foreach(const QDomElement &effect, effectsMap) + foreach(const QDomElement & effect, effectsMap) MainWindow::transitions.append(effect); effectsMap.clear(); for (int i = 0; i < MainWindow::customEffects.count(); ++i) { @@ -230,7 +249,7 @@ Mlt::Repository *initEffects::parseEffectFiles() effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo); } MainWindow::customEffects.clearList(); - foreach(const QDomElement &effect, effectsMap) + foreach(const QDomElement & effect, effectsMap) MainWindow::customEffects.append(effect); effectsMap.clear(); for (int i = 0; i < MainWindow::audioEffects.count(); ++i) { @@ -238,7 +257,7 @@ Mlt::Repository *initEffects::parseEffectFiles() effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo); } MainWindow::audioEffects.clearList(); - foreach(const QDomElement &effect, effectsMap) + foreach(const QDomElement & effect, effectsMap) MainWindow::audioEffects.append(effect); effectsMap.clear(); for (int i = 0; i < MainWindow::videoEffects.count(); ++i) { @@ -246,13 +265,13 @@ Mlt::Repository *initEffects::parseEffectFiles() effectsMap.insert(effectInfo.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), effectInfo); } // Add remaining filters to the list of video effects. - foreach(const QString &filtername, filtersList) { + foreach(const QString & filtername, filtersList) { QDomDocument doc = createDescriptionFromMlt(repository, "filters", filtername); if (!doc.isNull()) effectsMap.insert(doc.documentElement().elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), doc.documentElement()); } MainWindow::videoEffects.clearList(); - foreach(const QDomElement &effect, effectsMap) + foreach(const QDomElement & effect, effectsMap) MainWindow::videoEffects.append(effect); return repository; @@ -280,7 +299,7 @@ void initEffects::parseCustomEffectsFile() QDomDocument doc; QDomNodeList effects; QDomElement e; - foreach(const QString &filename, fileList) { + foreach(const QString & filename, fileList) { QString itemName = KUrl(path + filename).path(); QFile file(itemName); doc.setContent(&file, false); @@ -293,7 +312,7 @@ void initEffects::parseCustomEffectsFile() effectsMap.insert(e.elementsByTagName("name").item(0).toElement().text().toLower().toUtf8().data(), e); } } - foreach(const QDomElement &effect, effectsMap) + foreach(const QDomElement & effect, effectsMap) MainWindow::customEffects.append(effect); } @@ -575,8 +594,8 @@ QDomDocument initEffects::createDescriptionFromMlt(Mlt::Repository* repository, if (QString(paramdesc.get("type")) == "float") { params.setAttribute("type", "constant"); params.setAttribute("factor", "1000"); - if (paramdesc.get("maximum")) params.setAttribute("max", QString(paramdesc.get("maximum")).toFloat()*1000.0); - if (paramdesc.get("minimum")) params.setAttribute("min", QString(paramdesc.get("minimum")).toFloat()*1000.0); + if (paramdesc.get("maximum")) params.setAttribute("max", QString(paramdesc.get("maximum")).toFloat() * 1000.0); + if (paramdesc.get("minimum")) params.setAttribute("min", QString(paramdesc.get("minimum")).toFloat() * 1000.0); } if (QString(paramdesc.get("type")) == "boolean") params.setAttribute("type", "bool"); @@ -620,11 +639,36 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * int pos = names.indexOf("mix"); if (pos != -1) names.takeAt(pos); - pos = names.indexOf("region"); - if (pos != -1) - names.takeAt(pos); - foreach(const QString &name, names) { + QStringList imagenamelist = QStringList() << i18n("None"); + QStringList imagefiles = QStringList() << QString(); + QStringList filters; + filters << "*.pgm" << "*.png"; + QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas"); + foreach(QString folder, customLumas) { + if (!folder.endsWith('/')) + folder.append('/'); + QStringList filesnames = QDir(folder).entryList(filters, QDir::Files); + foreach(const QString & fname, filesnames) { + imagenamelist.append(fname); + imagefiles.append(folder + fname); + } + } + + // Check for MLT luma files. + KUrl folder(mlt_environment("MLT_DATA")); + folder.addPath("lumas"); + folder.addPath(mlt_environment("MLT_NORMALISATION")); + QDir lumafolder(folder.path()); + QStringList filesnames = lumafolder.entryList(filters, QDir::Files); + foreach(const QString & fname, filesnames) { + imagenamelist.append(fname); + KUrl path(folder); + path.addPath(fname); + imagefiles.append(path.toLocalFile()); + } + + foreach(const QString & name, names) { QDomDocument ret; QDomElement ktrans = ret.createElement("ktransition"); ret.appendChild(ktrans); @@ -634,7 +678,6 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * QDomElement desc = ret.createElement("description"); ktrans.appendChild(tname); ktrans.appendChild(desc); - Mlt::Properties *metadata = repository->metadata(transition_type, name.toUtf8().data()); if (metadata && metadata->is_valid()) { // If possible, set name and description. @@ -683,33 +726,6 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * * Check for Kdenlive installed luma files, add empty string at * start for no luma file. */ - QStringList imagenamelist = QStringList() << i18n("None"); - QStringList imagefiles = QStringList() << QString(); - QStringList filters; - filters << "*.pgm" << "*.png"; - QStringList customLumas = KGlobal::dirs()->findDirs("appdata", "lumas"); - foreach(QString folder, customLumas) { - if (!folder.endsWith('/')) - folder.append('/'); - QStringList filesnames = QDir(folder).entryList(filters, QDir::Files); - foreach(const QString &fname, filesnames) { - imagenamelist.append(fname); - imagefiles.append(folder + fname); - } - } - - // Check for MLT luma files. - KUrl folder(mlt_environment("MLT_DATA")); - folder.addPath("lumas"); - folder.addPath(mlt_environment("MLT_NORMALISATION")); - QDir lumafolder(folder.path()); - QStringList filesnames = lumafolder.entryList(filters, QDir::Files); - foreach(const QString &fname, filesnames) { - imagenamelist.append(fname); - KUrl path(folder); - path.addPath(fname); - imagefiles.append(path.toLocalFile()); - } // Implement default transitions. QList paramList; @@ -751,15 +767,26 @@ void initEffects::fillTransitionsList(Mlt::Repository *repository, EffectsList * paramList.append(quickParameterFill(ret, i18n("Fix Shear Y"), "fix_shear_y", "double", "0", "0", "360")); paramList.append(quickParameterFill(ret, i18n("Fix Shear X"), "fix_shear_x", "double", "0", "0", "360")); paramList.append(quickParameterFill(ret, i18n("Fix Shear Z"), "fix_shear_z", "double", "0", "0", "360")); - paramList.append(quickParameterFill(ret, i18n("Mirror"), "mirror_off", "bool", "0", "0", "1")); - paramList.append(quickParameterFill(ret, i18n("Repeat"), "repeat_off", "bool", "0", "0", "1")); paramList.append(quickParameterFill(ret, i18n("Geometry"), "geometry", "geometry", "0,0,100%,100%,100%", "0,0,100%,100%,100%", "0,0,100%,100%,100%", "", "", "", "", "", "false")); } else if (name == "mix") { tname.appendChild(ret.createTextNode(i18n("Mix"))); } else if (name == "region") { + ktrans.setAttribute("id", name); tname.appendChild(ret.createTextNode(i18n("Region"))); + desc.appendChild(ret.createTextNode(i18n("Use alpha channel of another clip to create a transition."))); + paramList.append(quickParameterFill(ret, i18n("Transparency clip"), "resource", "url", "", "", "", "", "", "")); + paramList.append(quickParameterFill(ret, i18n("Geometry"), "composite.geometry", "geometry", "0%,0%:100%x100%:100", "-500;-500;-500;-500;0", "500;500;500;500;100")); + paramList.append(quickParameterFill(ret, i18n("Alpha Channel Operation"), "composite.operator", "list", "over", "", "", "over,and,or,xor", "over,and,or,xor")); + paramList.append(quickParameterFill(ret, i18n("Align"), "composite.aligned", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Fill"), "composite.fill", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Distort"), "composite.distort", "bool", "0", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Wipe File"), "composite.luma", "list", "", "", "", imagefiles.join(","), imagenamelist.join(","))); + paramList.append(quickParameterFill(ret, i18n("Wipe Softness"), "composite.softness", "double", "0", "0", "100", "", "", "100")); + paramList.append(quickParameterFill(ret, i18n("Wipe Invert"), "composite.luma_invert", "bool", "0", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Force Progressive Rendering"), "composite.progressive", "bool", "1", "0", "1")); + paramList.append(quickParameterFill(ret, i18n("Force Deinterlace Overlay"), "composite.deinterlace", "bool", "0", "0", "1")); } - foreach(const QDomElement &e, paramList) + foreach(const QDomElement & e, paramList) ktrans.appendChild(e); }