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 }