File indexing completed on 2025-01-26 04:02:01

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include <QSplashScreen>
0008 #include <QtGlobal>
0009 
0010 #ifndef Q_OS_ANDROID
0011 #   include <KCrash>
0012 #endif
0013 
0014 #include "app/env.hpp"
0015 #include "app/scripting/python/python_engine.hpp"
0016 #include "app/log/log.hpp"
0017 
0018 #include "cli.hpp"
0019 #include "app_info.hpp"
0020 #include "io/io_registry.hpp"
0021 #include "io/lottie/lottie_html_format.hpp"
0022 
0023 #include "widgets/dialogs/glaxnimate_window.hpp"
0024 
0025 using namespace glaxnimate;
0026 
0027 int main(int argc, char *argv[])
0028 {
0029     QCoreApplication::setAttribute(Qt::AA_ShareOpenGLContexts);
0030 #if QT_VERSION_MAJOR < 6
0031     QCoreApplication::setAttribute(Qt::AA_UseHighDpiPixmaps);
0032     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
0033 #endif
0034 #ifdef Q_OS_WIN
0035     // workaround crash bug #408 in Qt/Windows
0036     QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::PassThrough);
0037 #endif
0038     QDir binpath(QCoreApplication::applicationDirPath());
0039     binpath.cdUp();
0040     KLocalizedString::addDomainLocaleDir("glaxnimate", binpath.absoluteFilePath(QStringLiteral("share/locale")));
0041 
0042     KLocalizedString::setApplicationDomain("glaxnimate");
0043 
0044     gui::GlaxnimateApp app(argc, argv);
0045 
0046 
0047 #ifndef Q_OS_ANDROID
0048     KCrash::setDrKonqiEnabled(true);
0049 #endif
0050 
0051     AppInfo::instance().init_qapplication();
0052 
0053     app::scripting::python::PythonEngine::add_module_search_paths(app.data_paths("lib/"));
0054 
0055     auto args = gui::parse_cli(app.arguments());
0056 
0057     gui::cli_main(app, args);
0058 
0059     if ( args.return_value )
0060         return *args.return_value;
0061 
0062 #ifdef Q_OS_WIN
0063     auto pyhome = app::Environment::Variable("PYTHONHOME");
0064     if ( pyhome.empty() )
0065     {
0066         pyhome = app.data_file("pythonhome");
0067         app::log::Log("Python").log("Setting PYTHONHOME to " + pyhome.get(), app::log::Info);
0068         app::Environment::Variable("PYTHONPATH").push_back(app.data_file("pythonhome/lib/python"));
0069     }
0070 #elif defined(Q_OS_MAC)
0071     auto pyhome = app::Environment::Variable("PYTHONHOME");
0072     if ( pyhome.empty() )
0073     {
0074         pyhome = binpath.absolutePath();
0075         app::log::Log("Python").log("Setting PYTHONHOME to " + pyhome.get(), app::log::Info);
0076     }
0077 #endif
0078 
0079     qRegisterMetaType<app::log::Severity>();
0080 
0081     QSplashScreen sc;
0082     sc.setPixmap(QPixmap(":glaxnimate/splash.svg"));
0083     sc.show();
0084     app.processEvents();
0085 
0086     app.initialize();
0087 
0088     bool debug = args.has_flag("debug");
0089     if ( debug )
0090         io::IoRegistry::instance().register_object(std::make_unique<io::lottie::LottieHtmlFormat>());
0091     gui::GlaxnimateWindow window(!args.has_flag("default-ui"), debug);
0092     window.setAttribute(Qt::WA_DeleteOnClose, false);
0093     sc.finish(&window);
0094     window.show();
0095 
0096     if ( args.is_defined("ipc") )
0097         window.ipc_connect(args.value("ipc").toString());
0098 
0099     if ( args.is_defined("window-size") )
0100         window.resize(args.value("window-size").toSize());
0101 
0102     if ( args.has_flag("window-id") )
0103         app::cli::show_message(QString::number(window.winId(), 16), false);
0104 
0105     window.check_autosaves();
0106 
0107     if ( args.is_defined("file") )
0108     {
0109         QVariantMap open_settings;
0110         open_settings["trace"] = args.value("trace");
0111         window.document_open_settings(args.value("file").toString(), open_settings);
0112     }
0113     else
0114     {
0115         window.show_startup_dialog();
0116     }
0117 
0118     int ret = app.exec();
0119 
0120     app.finalize();
0121 
0122     return ret;
0123 }