66 lines
3.2 KiB
C++
66 lines
3.2 KiB
C++
#include "localization.h"
|
|
|
|
#include <QGuiApplication>
|
|
#include <QIcon>
|
|
#include <QQmlApplicationEngine>
|
|
#include <QQuickStyle>
|
|
|
|
#ifdef LAUNCHER_HAS_WEBENGINE
|
|
#include <QtWebEngineQuick>
|
|
#endif
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
#ifdef LAUNCHER_HAS_WEBENGINE
|
|
// Вход в аккаунт Microsoft показывается встроенным окном браузера.
|
|
// Инициализация обязана идти до QGuiApplication: она выставляет общий
|
|
// контекст OpenGL, а после создания приложения это уже не действует.
|
|
QtWebEngineQuick::initialize();
|
|
#endif
|
|
|
|
QGuiApplication app(argc, argv);
|
|
|
|
// Иконка окна и панели задач. Отдаём все размеры сразу: оконный менеджер
|
|
// сам выберет подходящий, а готовый растр всегда чётче, чем полученный
|
|
// масштабированием одной большой картинки.
|
|
//
|
|
// На macOS этого делать нельзя: setWindowIcon подменяет иконку в доке
|
|
// растром во весь холст, и лаунчер выглядит заметно крупнее соседей. Там
|
|
// иконку берут из icon.icns внутри бандла — он нарисован по сетке Apple,
|
|
// с полями вокруг арта.
|
|
#ifndef Q_OS_MACOS
|
|
QIcon appIcon;
|
|
for (int size : {16, 24, 32, 48, 64, 128, 256, 512})
|
|
appIcon.addFile(QStringLiteral(":/icons/icon_%1x%1.png").arg(size));
|
|
for (int size : {16, 32, 128, 256, 512})
|
|
appIcon.addFile(QStringLiteral(":/icons/icon_%1x%1@2x.png").arg(size));
|
|
QGuiApplication::setWindowIcon(appIcon);
|
|
#endif
|
|
|
|
// На Wayland окно связывается с установленным .desktop-файлом только по
|
|
// этому имени; без него композитор покажет иконку по умолчанию.
|
|
QGuiApplication::setDesktopFileName(QStringLiteral("bilauncher"));
|
|
|
|
// Язык интерфейса нужно знать до того, как QML вычислит первую привязку,
|
|
// поэтому каталог читается здесь, а не в LauncherBackend: тот появляется
|
|
// только вместе с движком. Каталог лежит в ресурсах — не прочитался, значит
|
|
// сломана сборка, и запускаться дальше незачем.
|
|
if (!Localization::instance().load())
|
|
return -1;
|
|
|
|
// Нативный стиль Windows игнорирует пользовательские contentItem/background
|
|
// и сыплет предупреждениями, а всё окно стилизовано вручную — берём Basic.
|
|
QQuickStyle::setStyle("Basic");
|
|
|
|
QQmlApplicationEngine engine;
|
|
QObject::connect(
|
|
&engine,
|
|
&QQmlApplicationEngine::objectCreationFailed,
|
|
&app,
|
|
[]() { QCoreApplication::exit(-1); },
|
|
Qt::QueuedConnection);
|
|
engine.loadFromModule("Minecraft_launcher", "Main");
|
|
|
|
return app.exec();
|
|
}
|