diff --git a/data/kdenliveeffectscategory.rc b/data/kdenliveeffectscategory.rc
index a0811cabe..89fe1aa77 100644
--- a/data/kdenliveeffectscategory.rc
+++ b/data/kdenliveeffectscategory.rc
@@ -1,46 +1,49 @@
Colour correction
Colour
Crop and transform
Audio correction
Audio channels
Analysis and data
Fade
+
+ Image adjustment
+
Artistic
Blur and hide
Motion
Distort
Alpha/Transform
Enhancement
GPU effects
diff --git a/src/main.cpp b/src/main.cpp
index 46d83e5e3..17e822466 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -1,222 +1,222 @@
/***************************************************************************
* Copyright (C) 2007 by Marco Gittler (g.marco@freenet.de) *
* Copyright (C) 2008 by Jean-Baptiste Mardelle (jb@kdenlive.org) *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA *
***************************************************************************/
#include "core.h"
#include "dialogs/splash.hpp"
#include "logger.hpp"
#include
#include
#include "kxmlgui_version.h"
#include
#include
#ifdef USE_DRMINGW
#include
#elif defined(KF5_USE_CRASH)
#include
#endif
#include
#include
#include "definitions.h"
#include "kdenlive_debug.h"
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include //new
#include
int fact(int n)
{
return n < 2 ? n : fact(n - 1) + fact(n - 2);
}
int main(int argc, char *argv[])
{
#ifdef USE_DRMINGW
ExcHndlInit();
#endif
// Force QDomDocument to use a deterministic XML attribute order
qSetGlobalQHashSeed(0);
QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts, true);
#if defined(Q_OS_UNIX) && !defined(Q_OS_MAC)
QCoreApplication::setAttribute(Qt::AA_X11InitThreads);
#endif
#ifdef Q_OS_WIN
qputenv("KDE_FORK_SLAVES", "1");
QString path = qApp->applicationDirPath() + QLatin1Char(';') + qgetenv("PATH");
qputenv("PATH", path.toUtf8().constData());
#endif
Logger::init();
QApplication app(argc, argv);
app.setApplicationName(QStringLiteral("kdenlive"));
app.setOrganizationDomain(QStringLiteral("kde.org"));
app.setWindowIcon(QIcon(QStringLiteral(":/pics/kdenlive.png")));
KLocalizedString::setApplicationDomain("kdenlive");
KSharedConfigPtr config = KSharedConfig::openConfig();
KConfigGroup grp(config, "unmanaged");
KConfigGroup initialGroup(config, "version");
if (!initialGroup.exists()) {
QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
if (env.contains(QStringLiteral("XDG_CURRENT_DESKTOP")) && env.value(QStringLiteral("XDG_CURRENT_DESKTOP")).toLower() == QLatin1String("kde")) {
qCDebug(KDENLIVE_LOG) << "KDE Desktop detected, using system icons";
} else {
// We are not on a KDE desktop, force breeze icon theme
// Check if breeze theme is available
QStringList iconThemes = KIconTheme::list();
if (iconThemes.contains(QStringLiteral("breeze"))) {
grp.writeEntry("force_breeze", true);
grp.writeEntry("use_dark_breeze", true);
qCDebug(KDENLIVE_LOG) << "Non KDE Desktop detected, forcing Breeze icon theme";
}
}
// Set breeze dark as default on first opening
KConfigGroup cg(config, "UiSettings");
cg.writeEntry("ColorScheme", "Breeze Dark");
}
// Init DBus services
KDBusService programDBusService;
bool forceBreeze = grp.readEntry("force_breeze", QVariant(false)).toBool();
if (forceBreeze) {
bool darkBreeze = grp.readEntry("use_dark_breeze", QVariant(false)).toBool();
QIcon::setThemeName(darkBreeze ? QStringLiteral("breeze-dark") : QStringLiteral("breeze"));
}
// Create KAboutData
KAboutData aboutData(QByteArray("kdenlive"), i18n("Kdenlive"), KDENLIVE_VERSION, i18n("An open source video editor."), KAboutLicense::GPL,
i18n("Copyright © 2007–2019 Kdenlive authors"), i18n("Please report bugs to http://bugs.kde.org"),
QStringLiteral("https://kdenlive.org"));
aboutData.addAuthor(i18n("Jean-Baptiste Mardelle"), i18n("MLT and KDE SC 4 / KF5 port, main developer and maintainer"), QStringLiteral("jb@kdenlive.org"));
aboutData.addAuthor(i18n("Nicolas Carion"), i18n("Code re-architecture & timeline rewrite"), QStringLiteral("french.ebook.lover@gmail.com"));
aboutData.addAuthor(i18n("Vincent Pinon"), i18n("KF5 port, Windows cross-build, bugs fixing"), QStringLiteral("vpinon@kde.org"));
aboutData.addAuthor(i18n("Laurent Montel"), i18n("Bugs fixing, clean up code, optimization etc."), QStringLiteral("montel@kde.org"));
aboutData.addAuthor(i18n("Till Theato"), i18n("Bug fixing, etc."), QStringLiteral("root@ttill.de"));
aboutData.addAuthor(i18n("Simon A. Eugster"), i18n("Color scopes, bug fixing, etc."), QStringLiteral("simon.eu@gmail.com"));
aboutData.addAuthor(i18n("Marco Gittler"), i18n("MLT transitions and effects, timeline, audio thumbs"), QStringLiteral("g.marco@freenet.de"));
aboutData.addAuthor(i18n("Dan Dennedy"), i18n("Bug fixing, etc."), QStringLiteral("dan@dennedy.org"));
aboutData.addAuthor(i18n("Alberto Villa"), i18n("Bug fixing, logo, etc."), QStringLiteral("avilla@FreeBSD.org"));
aboutData.addAuthor(i18n("Jean-Michel Poure"), i18n("Rendering profiles customization"), QStringLiteral("jm@poure.com"));
aboutData.addAuthor(i18n("Ray Lehtiniemi"), i18n("Bug fixing, etc."), QStringLiteral("rayl@mail.com"));
aboutData.addAuthor(i18n("Steve Guilford"), i18n("Bug fixing, etc."), QStringLiteral("s.guilford@dbplugins.com"));
aboutData.addAuthor(i18n("Jason Wood"), i18n("Original KDE 3 version author (not active anymore)"), QStringLiteral("jasonwood@blueyonder.co.uk"));
aboutData.addCredit(i18n("Nara Oliveira and Farid Abdelnour | Estúdio Gunga"), i18n("Kdenlive 16.08 icon"));
aboutData.setTranslator(i18n("NAME OF TRANSLATORS"), i18n("EMAIL OF TRANSLATORS"));
aboutData.setOrganizationDomain(QByteArray("kde.org"));
aboutData.setOtherText(
i18n("Using:\nMLT version %1\nFFmpeg libraries", mlt_version_get_string()));
aboutData.setDesktopFileName(QStringLiteral("org.kde.kdenlive"));
// Register about data
KAboutData::setApplicationData(aboutData);
// Add rcc stored icons to the search path so that we always find our icons
KIconLoader *loader = KIconLoader::global();
loader->reconfigure("kdenlive", QStringList() << QStringLiteral(":/pics"));
// Set app stuff from about data
app.setApplicationDisplayName(aboutData.displayName());
app.setOrganizationDomain(aboutData.organizationDomain());
app.setApplicationVersion(aboutData.version());
app.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
// Create command line parser with options
QCommandLineParser parser;
aboutData.setupCommandLine(&parser);
parser.setApplicationDescription(aboutData.shortDescription());
parser.addVersionOption();
parser.addHelpOption();
parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("config"), i18n("Set a custom config file name"), QStringLiteral("config")));
parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("mlt-path"), i18n("Set the path for MLT environment"), QStringLiteral("mlt-path")));
parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("mlt-log"), i18n("MLT log level"), QStringLiteral("verbose/debug")));
parser.addOption(QCommandLineOption(QStringList() << QStringLiteral("i"), i18n("Comma separated list of clips to add"), QStringLiteral("clips")));
parser.addPositionalArgument(QStringLiteral("file"), i18n("Document to open"));
// Parse command line
parser.process(app);
aboutData.processCommandLine(&parser);
#ifdef USE_DRMINGW
ExcHndlInit();
#elif defined(KF5_USE_CRASH)
KCrash::initialize();
#endif
//auto splash = new Splash();
- // splash->show();
- qApp->processEvents();
+ //splash->show();
+ //qApp->processEvents();
qmlRegisterUncreatableMetaObject(PlaylistState::staticMetaObject, // static meta object
"com.enums", // import statement
1, 0, // major and minor version of the import
"ClipState", // name in QML
"Error: only enums");
qmlRegisterUncreatableMetaObject(ClipType::staticMetaObject, // static meta object
"com.enums", // import statement
1, 0, // major and minor version of the import
"ProducerType", // name in QML
"Error: only enums");
QString mltPath = parser.value(QStringLiteral("mlt-path"));
if (parser.value(QStringLiteral("mlt-log")) == QStringLiteral("verbose")) {
mlt_log_set_level(MLT_LOG_VERBOSE);
} else if (parser.value(QStringLiteral("mlt-log")) == QStringLiteral("debug")) {
mlt_log_set_level(MLT_LOG_DEBUG);
}
QUrl url;
if (parser.positionalArguments().count() != 0) {
url = QUrl::fromLocalFile(parser.positionalArguments().at(0));
// Make sure we get an absolute URL so that we can autosave correctly
QString currentPath = QDir::currentPath();
QUrl startup = QUrl::fromLocalFile(currentPath.endsWith(QDir::separator()) ? currentPath : currentPath + QDir::separator());
url = startup.resolved(url);
}
- qApp->processEvents();
+ //qApp->processEvents();
Core::build(mltPath);
- qApp->processEvents();
+ //qApp->processEvents();
pCore->initGUI(url);
//splash->endSplash();
- qApp->processEvents();
+ //qApp->processEvents();
int result = app.exec();
Core::clean();
//delete splash;
if (EXIT_RESTART == result) {
qCDebug(KDENLIVE_LOG) << "restarting app";
auto *restart = new QProcess;
restart->start(app.applicationFilePath(), QStringList());
restart->waitForReadyRead();
restart->waitForFinished(1000);
result = EXIT_SUCCESS;
}
return result;
}
diff --git a/src/qml/splash.qml b/src/qml/splash.qml
index 1c3d70dd1..8e53b20aa 100644
--- a/src/qml/splash.qml
+++ b/src/qml/splash.qml
@@ -1,217 +1,217 @@
/***************************************************************************
* Copyright (C) 2017 by Nicolas Carion *
* This file is part of Kdenlive. See www.kdenlive.org. *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) version 3 or any later version accepted by the *
* membership of KDE e.V. (or its successor approved by the membership *
* of KDE e.V.), which shall act as a proxy defined in Section 14 of *
* version 3 of the license. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program. If not, see . *
***************************************************************************/
-import QtQuick 2.3
-import QtQuick.Controls 1.2
+import QtQuick 2.6
+import QtQuick.Controls 1.5
import QtQuick.Window 2.2
import QtQuick.Layouts 1.3
import QtQuick.Controls.Styles 1.4
Window {
id: splash
objectName: "splash"
color: "transparent"
title: "Splash Window"
SystemPalette { id: activePalette }
modality: Qt.ApplicationModal
flags: Qt.SplashScreen
property int timeoutInterval: 2000
signal timeout
x: (Screen.width - splashContent.width) / 2
y: (Screen.height - splashContent.height) / 2
width: splashContent.width
height: splashContent.height
property int border: 10
property bool splashing: true
signal endSplash
onEndSplash: {
console.log("ending splash")
splash.splashing = false;
}
Rectangle {
id:splashContent
height: Screen.height / 2
width: Screen.width / 3
border.width:splash.border
border.color:"#bfbfbf"
color: "#31363b"
Image {
id:logo
anchors.left: splashContent.left
anchors.top: splashContent.top
anchors.margins: 50
// anchors.horizontalCenter: splashContent.horizontalCenter
- source: "../pics/kdenlive-logo.png"
+ source: "qrc:/pics/kdenlive-logo.png"
fillMode: Image.PreserveAspectFit
height: splashContent.height / 5 - 100
}
RowLayout {
//anchors.horizontalCenter: splashContent.horizontalCenter
anchors.bottom: logo.bottom
anchors.right: splashContent.right
anchors.rightMargin: logo.x
spacing: 100
Text {
color: "white"
- text: "Website"
+ text: i18n('Website')
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
}
Text {
color: "white"
- text: "Donate"
+ text: i18n('Donate')
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
}
Text {
color: "white"
- text: "Forum"
+ text: i18n('Forum')
font.bold: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
}
}
Rectangle {
id:recentProjects
y: splashContent.height / 5
anchors.left: splashContent.left
anchors.leftMargin: splash.border
anchors.right: splashContent.right
anchors.rightMargin: splash.border
color:"#232629"
height: 3 * splashContent.height / 5
width: splashContent.width
visible: !splashing
Text {
id:txtProject
color: "#f38577"
- text: "Recent Projects"
+ text: i18n('Recent Projects')
anchors.top: parent.top
anchors.left: parent.left
anchors.topMargin: 50
anchors.leftMargin: 100
font.bold: true
}
}
Image {
id:splash_img
y: splashContent.height / 5
anchors.left: splashContent.left
anchors.leftMargin: splash.border
anchors.right: splashContent.right
anchors.rightMargin: splash.border
height: 3 * splashContent.height / 5
width: splashContent.width
- source: "../pics/splash-background.png"
+ source: "qrc:/pics/splash-background.png"
fillMode: Image.PreserveAspectFit
visible: splashing
}
/*Text {
id:txtProject
color: "#f38577"
text: "Recent Projects"
anchors.horizontalCenter: splashContent.horizontalCenter
anchors.top: logo.bottom
anchors.topMargin: 50
font.bold: true
}
Rectangle {
id:recentProjects
border.width:5
border.color:"#efefef"
color: "#fafafa"
height: splashContent.height / 4
width: 5*splashContent.width/6
anchors.horizontalCenter: splashContent.horizontalCenter
anchors.top: txtProject.bottom
anchors.topMargin: 5
}*/
Item {
anchors.left: splashContent.left
anchors.right: splashContent.right
anchors.bottom: splashContent.bottom
anchors.top: recentProjects.bottom
anchors.margins: 50
visible: !splashing
CheckBox {
anchors.left: parent.left
anchors.verticalCenter: parent.verticalCenter
style: CheckBoxStyle {
indicator: Rectangle {
implicitWidth: 32
implicitHeight: 32
radius: 3
//border.color: control.activeFocus ? "darkblue" : "gray"
border.width: 1
border.color:"white"
color: "#4d4d4d"
Rectangle {
visible: control.checked
color: "#555"
border.color: "#333"
radius: 1
anchors.margins: 4
anchors.fill: parent
}
}
label: Text {
- text: "Hide on startup"
+ text: i18n('Hide on startup')
color: "white"
}
}
}
Row {
anchors.right: parent.right
anchors.verticalCenter: parent.verticalCenter
spacing: 50
visible: !splashing
Button {
iconSource:"image://icon/document-new"
- text:"New"
+ text:i18n('New')
//style: CustomButton {
// backColor: splashContent.color
// }
}
Button {
iconSource:"image://icon/document-open"
- text:"Open"
+ text:i18n('Open')
//style: CustomButton {
// backColor: splashContent.color
// }
}
}
}
/*MouseArea {
anchors.fill: parent
onClicked: {
console.log("clic");
splash.close();
}
}*/
}
Component.onCompleted: visible = true
}