From 8fc36d20b711aee7e4ab52a32752a03326d2be93 Mon Sep 17 00:00:00 2001 From: Kitteh Date: Tue, 6 Nov 2018 07:39:42 +0000 Subject: [PATCH] [Backend] Source formatted with clang-format. --- src/MpvPlayerBackend.cpp | 465 +++++++++++++++++++++------------------ src/MpvPlayerBackend.h | 72 +++--- src/main.cpp | 83 +++---- src/setenv_mingw.hpp | 40 ++-- 4 files changed, 345 insertions(+), 315 deletions(-) diff --git a/src/MpvPlayerBackend.cpp b/src/MpvPlayerBackend.cpp index 74b73c8..7e5f767 100644 --- a/src/MpvPlayerBackend.cpp +++ b/src/MpvPlayerBackend.cpp @@ -1,337 +1,372 @@ -#include #include +#include #include "MpvPlayerBackend.h" #include -#include #include #include +#include +namespace { -namespace +void +wakeup(void* ctx) { - -void wakeup(void *ctx) -{ - QMetaObject::invokeMethod((MpvPlayerBackend*)ctx, "on_mpv_events", Qt::QueuedConnection); + QMetaObject::invokeMethod( + (MpvPlayerBackend*)ctx, "on_mpv_events", Qt::QueuedConnection); } -void on_mpv_redraw(void *ctx) +void +on_mpv_redraw(void* ctx) { - MpvPlayerBackend::on_update(ctx); + MpvPlayerBackend::on_update(ctx); } -static void *get_proc_address_mpv(void *ctx, const char *name) +static void* +get_proc_address_mpv(void* ctx, const char* name) { - Q_UNUSED(ctx) + Q_UNUSED(ctx) - QOpenGLContext *glctx = QOpenGLContext::currentContext(); - if (!glctx) return nullptr; + QOpenGLContext* glctx = QOpenGLContext::currentContext(); + if (!glctx) + return nullptr; - return reinterpret_cast(glctx->getProcAddress(QByteArray(name))); + return reinterpret_cast(glctx->getProcAddress(QByteArray(name))); } - -} +} // namespace class MpvRenderer : public QQuickFramebufferObject::Renderer { - MpvPlayerBackend *obj; + MpvPlayerBackend* obj; public: + MpvRenderer(MpvPlayerBackend* new_obj) + : obj{ new_obj } + {} - MpvRenderer(MpvPlayerBackend *new_obj) - : obj{new_obj} - { + virtual ~MpvRenderer() {} + + // This function is called when a new FBO is needed. + // This happens on the initial frame. + QOpenGLFramebufferObject* createFramebufferObject(const QSize& size) + { + // init mpv_gl: + if (!obj->mpv_gl) { + mpv_opengl_init_params gl_init_params{ get_proc_address_mpv, + nullptr, + nullptr }; + mpv_render_param params[]{ + { MPV_RENDER_PARAM_API_TYPE, + const_cast(MPV_RENDER_API_TYPE_OPENGL) }, + { MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params }, + { MPV_RENDER_PARAM_INVALID, nullptr } + }; + + if (mpv_render_context_create(&obj->mpv_gl, obj->mpv, params) < 0) + throw std::runtime_error("failed to initialize mpv GL context"); + mpv_render_context_set_update_callback(obj->mpv_gl, on_mpv_redraw, obj); + QMetaObject::invokeMethod(obj, "startPlayer"); } + return QQuickFramebufferObject::Renderer::createFramebufferObject(size); + } - virtual ~MpvRenderer() {} + void render() + { + obj->window()->resetOpenGLState(); - // This function is called when a new FBO is needed. - // This happens on the initial frame. - QOpenGLFramebufferObject * createFramebufferObject(const QSize &size) - { - // init mpv_gl: - if (!obj->mpv_gl) - { - mpv_opengl_init_params gl_init_params{get_proc_address_mpv, nullptr, nullptr}; - mpv_render_param params[]{ - {MPV_RENDER_PARAM_API_TYPE, const_cast(MPV_RENDER_API_TYPE_OPENGL)}, - {MPV_RENDER_PARAM_OPENGL_INIT_PARAMS, &gl_init_params}, - {MPV_RENDER_PARAM_INVALID, nullptr} - }; + QOpenGLFramebufferObject* fbo = framebufferObject(); + mpv_opengl_fbo mpfbo{ .fbo = static_cast(fbo->handle()), + .w = fbo->width(), + .h = fbo->height(), + .internal_format = 0 }; + int flip_y{ 0 }; - if (mpv_render_context_create(&obj->mpv_gl, obj->mpv, params) < 0) - throw std::runtime_error("failed to initialize mpv GL context"); - mpv_render_context_set_update_callback(obj->mpv_gl, on_mpv_redraw, obj); - QMetaObject::invokeMethod(obj,"startPlayer"); - } - - return QQuickFramebufferObject::Renderer::createFramebufferObject(size); - } - - - void render() - { - - obj->window()->resetOpenGLState(); - - QOpenGLFramebufferObject *fbo = framebufferObject(); - mpv_opengl_fbo mpfbo{.fbo = static_cast(fbo->handle()), .w = fbo->width(), .h = fbo->height(), .internal_format = 0}; - int flip_y{0}; - - mpv_render_param params[] = { - // Specify the default framebuffer (0) as target. This will - // render onto the entire screen. If you want to show the video - // in a smaller rectangle or apply fancy transformations, you'll - // need to render into a separate FBO and draw it manually. - {MPV_RENDER_PARAM_OPENGL_FBO, &mpfbo}, - // Flip rendering (needed due to flipped GL coordinate system). - {MPV_RENDER_PARAM_FLIP_Y, &flip_y}, - {MPV_RENDER_PARAM_INVALID, nullptr} - }; - // See render_gl.h on what OpenGL environment mpv expects, and - // other API details. - mpv_render_context_render(obj->mpv_gl, params); - obj->window()->resetOpenGLState(); - } + mpv_render_param params[] = { + // Specify the default framebuffer (0) as target. This will + // render onto the entire screen. If you want to show the video + // in a smaller rectangle or apply fancy transformations, you'll + // need to render into a separate FBO and draw it manually. + { MPV_RENDER_PARAM_OPENGL_FBO, &mpfbo }, + // Flip rendering (needed due to flipped GL coordinate system). + { MPV_RENDER_PARAM_FLIP_Y, &flip_y }, + { MPV_RENDER_PARAM_INVALID, nullptr } + }; + // See render_gl.h on what OpenGL environment mpv expects, and + // other API details. + mpv_render_context_render(obj->mpv_gl, params); + obj->window()->resetOpenGLState(); + } }; -MpvPlayerBackend::MpvPlayerBackend(QQuickItem * parent) - : QQuickFramebufferObject(parent), mpv{mpv_create()}, mpv_gl(nullptr) +MpvPlayerBackend::MpvPlayerBackend(QQuickItem* parent) + : QQuickFramebufferObject(parent) + , mpv{ mpv_create() } + , mpv_gl(nullptr) { + if (!mpv) + throw std::runtime_error("could not create mpv context"); - if (!mpv) - throw std::runtime_error("could not create mpv context"); + mpv_set_option_string(mpv, "terminal", "yes"); + mpv_set_option_string(mpv, "msg-level", "all=v"); - mpv_set_option_string(mpv, "terminal", "yes"); - mpv_set_option_string(mpv, "msg-level", "all=v"); + // Fix? + mpv_set_option_string(mpv, "ytdl", "yes"); + mpv_set_option_string(mpv, "vo", "libmpv"); + // mpp_set_option_string(mpv, "no-sub-ass", "yes) - // Fix? - mpv_set_option_string(mpv, "ytdl", "yes"); - mpv_set_option_string(mpv, "vo", "libmpv"); - //mpp_set_option_string(mpv, "no-sub-ass", "yes) + mpv_set_option_string(mpv, "slang", "en"); - mpv_set_option_string(mpv, "slang", "en"); + mpv_set_option_string(mpv, "config", "yes"); + // mpv_set_option_string(mpv, "sub-visibility", "no"); - mpv_set_option_string(mpv, "config", "yes"); - //mpv_set_option_string(mpv, "sub-visibility", "no"); + mpv_observe_property(mpv, 0, "playback-abort", MPV_FORMAT_NONE); + mpv_observe_property(mpv, 0, "chapter-list", MPV_FORMAT_NODE); + mpv_observe_property(mpv, 0, "track-list", MPV_FORMAT_NODE); + mpv_observe_property(mpv, 0, "playlist-pos", MPV_FORMAT_DOUBLE); + mpv_observe_property(mpv, 0, "volume", MPV_FORMAT_DOUBLE); + mpv_observe_property(mpv, 0, "muted", MPV_FORMAT_DOUBLE); + mpv_observe_property(mpv, 0, "duration", MPV_FORMAT_DOUBLE); + mpv_observe_property(mpv, 0, "media-title", MPV_FORMAT_STRING); + mpv_observe_property(mpv, 0, "sub-text", MPV_FORMAT_STRING); + mpv_observe_property(mpv, 0, "time-pos", MPV_FORMAT_DOUBLE); + mpv_observe_property(mpv, 0, "demuxer-cache-duration", MPV_FORMAT_DOUBLE); + mpv_observe_property(mpv, 0, "pause", MPV_FORMAT_NONE); + mpv_set_wakeup_callback(mpv, wakeup, this); + if (mpv_initialize(mpv) < 0) + throw std::runtime_error("could not initialize mpv context"); - - - - mpv_observe_property(mpv, 0, "playback-abort", MPV_FORMAT_NONE); - mpv_observe_property(mpv, 0, "chapter-list", MPV_FORMAT_NODE); - mpv_observe_property(mpv, 0, "track-list", MPV_FORMAT_NODE); - mpv_observe_property(mpv, 0, "playlist-pos", MPV_FORMAT_DOUBLE); - mpv_observe_property(mpv, 0, "volume", MPV_FORMAT_DOUBLE); - mpv_observe_property(mpv, 0, "muted", MPV_FORMAT_DOUBLE); - mpv_observe_property(mpv, 0, "duration", MPV_FORMAT_DOUBLE); - mpv_observe_property(mpv, 0, "media-title", MPV_FORMAT_STRING); - mpv_observe_property(mpv, 0, "sub-text", MPV_FORMAT_STRING); - mpv_observe_property(mpv, 0, "time-pos", MPV_FORMAT_DOUBLE); - mpv_observe_property(mpv, 0, "demuxer-cache-duration", MPV_FORMAT_DOUBLE); - mpv_observe_property(mpv, 0, "pause", MPV_FORMAT_NONE); - mpv_set_wakeup_callback(mpv, wakeup, this); - - if (mpv_initialize(mpv) < 0) - throw std::runtime_error("could not initialize mpv context"); - - connect(this, &MpvPlayerBackend::onUpdate, this, &MpvPlayerBackend::doUpdate, - Qt::QueuedConnection); - + connect(this, + &MpvPlayerBackend::onUpdate, + this, + &MpvPlayerBackend::doUpdate, + Qt::QueuedConnection); } MpvPlayerBackend::~MpvPlayerBackend() { - if (mpv_gl) - { - mpv_render_context_free(mpv_gl); - } + if (mpv_gl) { + mpv_render_context_free(mpv_gl); + } - mpv_terminate_destroy(mpv); + mpv_terminate_destroy(mpv); } -void MpvPlayerBackend::on_update(void *ctx) +void +MpvPlayerBackend::on_update(void* ctx) { - MpvPlayerBackend *self = (MpvPlayerBackend *)ctx; - emit self->onUpdate(); + MpvPlayerBackend* self = (MpvPlayerBackend*)ctx; + emit self->onUpdate(); } // connected to onUpdate(); signal makes sure it runs on the GUI thread -void MpvPlayerBackend::doUpdate() +void +MpvPlayerBackend::doUpdate() { - update(); + update(); } - -QVariant MpvPlayerBackend::getProperty(const QString &name) const +QVariant +MpvPlayerBackend::getProperty(const QString& name) const { - return mpv::qt::get_property_variant(mpv, name); + return mpv::qt::get_property_variant(mpv, name); } - -void MpvPlayerBackend::command(const QVariant& params) +void +MpvPlayerBackend::command(const QVariant& params) { - qDebug() << params; - mpv::qt::command_variant(mpv, params); + qDebug() << params; + mpv::qt::command_variant(mpv, params); } -void MpvPlayerBackend::setProperty(const QString& name, const QVariant& value) +void +MpvPlayerBackend::setProperty(const QString& name, const QVariant& value) { - mpv::qt::set_property_variant(mpv, name, value); + mpv::qt::set_property_variant(mpv, name, value); } -void MpvPlayerBackend::setOption(const QString& name, const QVariant& value) +void +MpvPlayerBackend::setOption(const QString& name, const QVariant& value) { - mpv::qt::set_option_variant(mpv, name, value); + mpv::qt::set_option_variant(mpv, name, value); } -void MpvPlayerBackend::launchAboutQt() +void +MpvPlayerBackend::launchAboutQt() { - QApplication *qapp = qobject_cast(QCoreApplication::instance()); - qapp->aboutQt(); + QApplication* qapp = + qobject_cast(QCoreApplication::instance()); + qapp->aboutQt(); } -void MpvPlayerBackend::togglePlayPause() +void +MpvPlayerBackend::togglePlayPause() { - command(QVariantList() << "cycle" << "pause"); + command(QVariantList() << "cycle" + << "pause"); } -void MpvPlayerBackend::toggleMute() +void +MpvPlayerBackend::toggleMute() { - command(QVariantList() << "cycle" << "mute"); + command(QVariantList() << "cycle" + << "mute"); } -void MpvPlayerBackend::nextAudioTrack() +void +MpvPlayerBackend::nextAudioTrack() { - command(QVariantList() << "cycle" << "audio"); + command(QVariantList() << "cycle" + << "audio"); } -void MpvPlayerBackend::nextSubtitleTrack() +void +MpvPlayerBackend::nextSubtitleTrack() { - command(QVariantList() << "cycle" << "sub"); + command(QVariantList() << "cycle" + << "sub"); } -void MpvPlayerBackend::nextVideoTrack() +void +MpvPlayerBackend::nextVideoTrack() { - command(QVariantList() << "cycle" << "video"); + command(QVariantList() << "cycle" + << "video"); } -void MpvPlayerBackend::prevPlaylistItem() +void +MpvPlayerBackend::prevPlaylistItem() { - command(QVariantList() << "playlist-prev"); + command(QVariantList() << "playlist-prev"); } -void MpvPlayerBackend::nextPlaylistItem() +void +MpvPlayerBackend::nextPlaylistItem() { - command(QVariantList() << "playlist-next" << "force"); + command(QVariantList() << "playlist-next" + << "force"); } -void MpvPlayerBackend::loadFile(const QVariant &filename) +void +MpvPlayerBackend::loadFile(const QVariant& filename) { - command(QVariantList() << "loadfile" << filename); + command(QVariantList() << "loadfile" << filename); } -void MpvPlayerBackend::setVolume(const QVariant &volume) +void +MpvPlayerBackend::setVolume(const QVariant& volume) { - command(QVariantList() << "set" << "volume" << volume); + command(QVariantList() << "set" + << "volume" << volume); } -void MpvPlayerBackend::addVolume(const QVariant &volume) +void +MpvPlayerBackend::addVolume(const QVariant& volume) { - command(QVariantList() << "add" << "volume" << volume); + command(QVariantList() << "add" + << "volume" << volume); } -void MpvPlayerBackend::seek(const QVariant &seekTime) +void +MpvPlayerBackend::seek(const QVariant& seekTime) { - command(QVariantList() << "seek" << seekTime); + command(QVariantList() << "seek" << seekTime); } -QVariant MpvPlayerBackend::getTracks() const +QVariant +MpvPlayerBackend::getTracks() const { - return mpv::qt::get_property_variant(mpv, "track-list"); + return mpv::qt::get_property_variant(mpv, "track-list"); } -void MpvPlayerBackend::on_mpv_events() +void +MpvPlayerBackend::on_mpv_events() { - while (mpv) { - mpv_event *event = mpv_wait_event(mpv, 0); + while (mpv) { + mpv_event* event = mpv_wait_event(mpv, 0); - if (event->event_id == MPV_EVENT_NONE) { - break; - } - handle_mpv_event(event); + if (event->event_id == MPV_EVENT_NONE) { + break; } - + handle_mpv_event(event); + } } - -void MpvPlayerBackend::handle_mpv_event(mpv_event *event) + +void +MpvPlayerBackend::handle_mpv_event(mpv_event* event) { - switch (event->event_id) { + switch (event->event_id) { case MPV_EVENT_PROPERTY_CHANGE: { - mpv_event_property *prop = (mpv_event_property *)event->data; - if (strcmp(prop->name, "time-pos") == 0) { - if (prop->format == MPV_FORMAT_DOUBLE) { - double time = *(double *)prop->data; - QMetaObject::invokeMethod(this,"setProgressBarValue",Q_ARG(QVariant,time)); - } - } else if (strcmp(prop->name, "duration") == 0) { - if (prop->format == MPV_FORMAT_DOUBLE) { - double time = *(double *)prop->data;Q_ARG(QVariant,"txt1"), - QMetaObject::invokeMethod(this,"setProgressBarEnd",Q_ARG(QVariant,time)); - } - } else if (strcmp(prop->name, "volume") == 0) { - if (prop->format == MPV_FORMAT_DOUBLE) { - double volume = *(double *)prop->data; - QMetaObject::invokeMethod(this,"updateVolume",Q_ARG(QVariant,volume)); - } - } else if (strcmp(prop->name, "muted") == 0) { - if (prop->format == MPV_FORMAT_DOUBLE) { - double muted = *(double *)prop->data; - QMetaObject::invokeMethod(this,"updateMuted",Q_ARG(QVariant,muted)); - } - } else if (strcmp(prop->name, "media-title") == 0) { - if (prop->format == MPV_FORMAT_STRING) { - char *title = *(char **)prop->data; - QMetaObject::invokeMethod(this,"setTitle",Q_ARG(QVariant,title)); - } - } else if (strcmp(prop->name, "sub-text") == 0) { - if (prop->format == MPV_FORMAT_STRING) { - char *subs = *(char **)prop->data; - QMetaObject::invokeMethod(this,"setSubtitles",Q_ARG(QVariant,subs)); - } - } else if (strcmp(prop->name, "demuxer-cache-duration") == 0) { - if (prop->format == MPV_FORMAT_DOUBLE) { - double duration = *(double *)prop->data; - QMetaObject::invokeMethod(this,"setCachedDuration",Q_ARG(QVariant,duration)); - } - } else if (strcmp(prop->name, "playlist-pos") == 0) { - if (prop->format == MPV_FORMAT_DOUBLE) { - double pos = *(double *)prop->data; - QMetaObject::invokeMethod(this,"updatePrev",Q_ARG(QVariant,pos)); - } - } else if (strcmp(prop->name, "pause") == 0) { - QMetaObject::invokeMethod(this,"updatePlayPause"); + mpv_event_property* prop = (mpv_event_property*)event->data; + if (strcmp(prop->name, "time-pos") == 0) { + if (prop->format == MPV_FORMAT_DOUBLE) { + double time = *(double*)prop->data; + QMetaObject::invokeMethod( + this, "setProgressBarValue", Q_ARG(QVariant, time)); } - break; + } else if (strcmp(prop->name, "duration") == 0) { + if (prop->format == MPV_FORMAT_DOUBLE) { + double time = *(double*)prop->data; + Q_ARG(QVariant, "txt1"), + QMetaObject::invokeMethod( + this, "setProgressBarEnd", Q_ARG(QVariant, time)); + } + } else if (strcmp(prop->name, "volume") == 0) { + if (prop->format == MPV_FORMAT_DOUBLE) { + double volume = *(double*)prop->data; + QMetaObject::invokeMethod( + this, "updateVolume", Q_ARG(QVariant, volume)); + } + } else if (strcmp(prop->name, "muted") == 0) { + if (prop->format == MPV_FORMAT_DOUBLE) { + double muted = *(double*)prop->data; + QMetaObject::invokeMethod( + this, "updateMuted", Q_ARG(QVariant, muted)); + } + } else if (strcmp(prop->name, "media-title") == 0) { + if (prop->format == MPV_FORMAT_STRING) { + char* title = *(char**)prop->data; + QMetaObject::invokeMethod(this, "setTitle", Q_ARG(QVariant, title)); + } + } else if (strcmp(prop->name, "sub-text") == 0) { + if (prop->format == MPV_FORMAT_STRING) { + char* subs = *(char**)prop->data; + QMetaObject::invokeMethod( + this, "setSubtitles", Q_ARG(QVariant, subs)); + } + } else if (strcmp(prop->name, "demuxer-cache-duration") == 0) { + if (prop->format == MPV_FORMAT_DOUBLE) { + double duration = *(double*)prop->data; + QMetaObject::invokeMethod( + this, "setCachedDuration", Q_ARG(QVariant, duration)); + } + } else if (strcmp(prop->name, "playlist-pos") == 0) { + if (prop->format == MPV_FORMAT_DOUBLE) { + double pos = *(double*)prop->data; + QMetaObject::invokeMethod(this, "updatePrev", Q_ARG(QVariant, pos)); + } + } else if (strcmp(prop->name, "pause") == 0) { + QMetaObject::invokeMethod(this, "updatePlayPause"); + } + break; } case MPV_EVENT_SHUTDOWN: { - exit(0); - break; + exit(0); + break; } default: { - break; - } + break; } + } } -QQuickFramebufferObject::Renderer *MpvPlayerBackend::createRenderer() const +QQuickFramebufferObject::Renderer* +MpvPlayerBackend::createRenderer() const { - window()->setPersistentOpenGLContext(true); - window()->setPersistentSceneGraph(true); - return new MpvRenderer(const_cast(this)); + window()->setPersistentOpenGLContext(true); + window()->setPersistentSceneGraph(true); + return new MpvRenderer(const_cast(this)); } diff --git a/src/MpvPlayerBackend.h b/src/MpvPlayerBackend.h index b7ea861..a52d089 100644 --- a/src/MpvPlayerBackend.h +++ b/src/MpvPlayerBackend.h @@ -2,69 +2,61 @@ #define MpvPlayerBackend_H #include -#include #include +#include #include #include #include - - class MpvRenderer; class MpvPlayerBackend : public QQuickFramebufferObject { - Q_OBJECT - mpv_handle *mpv; - mpv_render_context *mpv_gl; + Q_OBJECT + mpv_handle* mpv; + mpv_render_context* mpv_gl; - friend class MpvRenderer; + friend class MpvRenderer; public: - static void on_update(void *ctx); - - MpvPlayerBackend(QQuickItem * parent = 0); - virtual ~MpvPlayerBackend(); - virtual Renderer *createRenderer() const; + static void on_update(void* ctx); + MpvPlayerBackend(QQuickItem* parent = 0); + virtual ~MpvPlayerBackend(); + virtual Renderer* createRenderer() const; public slots: - void launchAboutQt(); - void togglePlayPause(); - void toggleMute(); - void nextAudioTrack(); - void nextVideoTrack(); - void nextSubtitleTrack(); - void prevPlaylistItem(); - void nextPlaylistItem(); - QVariant getTracks() const; - - void setVolume(const QVariant& volume); - void addVolume(const QVariant& volume); - void loadFile(const QVariant& filename); - void seek(const QVariant& seekTime); - void command(const QVariant& params); - void setProperty(const QString& name, const QVariant& value); - void setOption(const QString& name, const QVariant& value); - QVariant getProperty(const QString& name) const; + void launchAboutQt(); + void togglePlayPause(); + void toggleMute(); + void nextAudioTrack(); + void nextVideoTrack(); + void nextSubtitleTrack(); + void prevPlaylistItem(); + void nextPlaylistItem(); + QVariant getTracks() const; + void setVolume(const QVariant& volume); + void addVolume(const QVariant& volume); + void loadFile(const QVariant& filename); + void seek(const QVariant& seekTime); + void command(const QVariant& params); + void setProperty(const QString& name, const QVariant& value); + void setOption(const QString& name, const QVariant& value); + QVariant getProperty(const QString& name) const; signals: - void onUpdate(); - void positionChanged(int value); - void mpv_events(); + void onUpdate(); + void positionChanged(int value); + void mpv_events(); private slots: - void doUpdate(); - void on_mpv_events(); + void doUpdate(); + void on_mpv_events(); private: - void handle_mpv_event(mpv_event *event); - - + void handle_mpv_event(mpv_event* event); }; - - #endif diff --git a/src/main.cpp b/src/main.cpp index 34ad0dc..03b81d8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -4,58 +4,65 @@ #include - -#include -#include -#include #include "MpvPlayerBackend.h" +#include +#include +#include #ifdef WIN32 #include "setenv_mingw.hpp" #endif -int main( int argc, char *argv[] ) +int +main(int argc, char* argv[]) { - setenv("QT_QUICK_CONTROLS_STYLE","Desktop",1); - QApplication app(argc, argv); - app.setOrganizationName("KittehPlayer"); - app.setOrganizationDomain("namedkitten.pw"); - app.setApplicationName("KittehPlayer"); - for (int i = 1; i < argc; ++i) { - if (!qstrcmp(argv[i], "--update")) { - QString program = QProcessEnvironment::systemEnvironment().value("APPDIR", "") + "/usr/bin/appimageupdatetool"; - QProcess updater; - updater.setProcessChannelMode(QProcess::ForwardedChannels); - updater.start(program, QStringList() << QProcessEnvironment::systemEnvironment().value("APPIMAGE", "")); - updater.waitForFinished(); - qDebug() << program; - exit(0); - } + setenv("QT_QUICK_CONTROLS_STYLE", "Desktop", 1); + QApplication app(argc, argv); + app.setOrganizationName("KittehPlayer"); + app.setOrganizationDomain("namedkitten.pw"); + app.setApplicationName("KittehPlayer"); + for (int i = 1; i < argc; ++i) { + if (!qstrcmp(argv[i], "--update")) { + QString program = + QProcessEnvironment::systemEnvironment().value("APPDIR", "") + + "/usr/bin/appimageupdatetool"; + QProcess updater; + updater.setProcessChannelMode(QProcess::ForwardedChannels); + updater.start(program, + QStringList() + << QProcessEnvironment::systemEnvironment().value( + "APPIMAGE", "")); + updater.waitForFinished(); + qDebug() << program; + exit(0); } - - QProcess dpms; - dpms.start("xset", QStringList() << "-dpms"); + } - QString newpath = QProcessEnvironment::systemEnvironment().value("APPDIR", "") + "/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", ""); - qDebug() << newpath; - setenv("PATH", newpath.toUtf8().constData(), 1); + QProcess dpms; + dpms.start("xset", QStringList() << "-dpms"); - QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); - -QApplication::setAttribute(Qt::AA_NativeWindows); - qmlRegisterType("player", 1, 0, "PlayerBackend"); - std::setlocale(LC_NUMERIC, "C"); + QString newpath = + QProcessEnvironment::systemEnvironment().value("APPDIR", "") + + "/usr/bin:" + QProcessEnvironment::systemEnvironment().value("PATH", ""); + qDebug() << newpath; + setenv("PATH", newpath.toUtf8().constData(), 1); - QQmlApplicationEngine engine; + QApplication::setAttribute(Qt::AA_EnableHighDpiScaling); + + QApplication::setAttribute(Qt::AA_NativeWindows); + qmlRegisterType("player", 1, 0, "PlayerBackend"); + std::setlocale(LC_NUMERIC, "C"); + + QQmlApplicationEngine engine; #ifdef QRC_SOURCE_PATH -RuntimeQML *rt = new RuntimeQML(&engine, QRC_SOURCE_PATH"/qml.qrc"); + RuntimeQML* rt = new RuntimeQML(&engine, QRC_SOURCE_PATH "/qml.qrc"); -rt->setAutoReload(true); -rt->setMainQmlFilename("main.qml"); -rt->reload(); + rt->setAutoReload(true); + rt->setMainQmlFilename("main.qml"); + rt->reload(); #else -engine.load(QUrl(QStringLiteral("qrc:///player/main.qml"))); + engine.load(QUrl(QStringLiteral("qrc:///player/main.qml"))); #endif - return app.exec(); + return app.exec(); } diff --git a/src/setenv_mingw.hpp b/src/setenv_mingw.hpp index 78985aa..b547c64 100644 --- a/src/setenv_mingw.hpp +++ b/src/setenv_mingw.hpp @@ -31,12 +31,13 @@ * */ +#include #include #include #include -#include -int setenv( const char *var, const char *value, int overwrite ) +int +setenv(const char* var, const char* value, int overwrite) { /* Core implementation for both setenv() and unsetenv() functions; * at the outset, assume that the requested operation may fail. @@ -46,40 +47,36 @@ int setenv( const char *var, const char *value, int overwrite ) /* The specified "var" name MUST be non-NULL, not a zero-length * string, and must not include any '=' character. */ - if( var && *var && (strchr( var, '=' ) == NULL) ) - { + if (var && *var && (strchr(var, '=') == NULL)) { /* A properly named variable may be added to, removed from, * or modified within the environment, ONLY if "overwrite" * mode is enabled, OR if the named variable does not yet * exist... - */ - if( overwrite || getenv( var ) == NULL ) - { + */ + if (overwrite || getenv(var) == NULL) { /* ... in which cases, we convert the specified name and * value into the appropriate form for use with putenv(), * (noting that we accept a NULL "value" as equivalent to * a zero-length string, which renders putenv() as the * equivalent of unsetenv()). */ - const char *fmt = "%s=%s"; - const char *val = value ? value : ""; - char buf[1 + snprintf( NULL, 0, fmt, var, val )]; - snprintf( buf, sizeof( buf ), fmt, var, val ); - if( (retval = putenv( buf )) != 0 ) - /* - * If putenv() returns non-zero, indicating failure, the - * most probable explanation is that there wasn't enough - * free memory; ensure that errno is set accordingly. - */ + const char* fmt = "%s=%s"; + const char* val = value ? value : ""; + char buf[1 + snprintf(NULL, 0, fmt, var, val)]; + snprintf(buf, sizeof(buf), fmt, var, val); + if ((retval = putenv(buf)) != 0) + /* + * If putenv() returns non-zero, indicating failure, the + * most probable explanation is that there wasn't enough + * free memory; ensure that errno is set accordingly. + */ errno = ENOMEM; - } - else + } else /* The named variable already exists, and overwrite mode * was not enabled; there is nothing to be done. */ retval = 0; - } - else + } else /* The specified environment variable name was invalid. */ errno = EINVAL; @@ -89,4 +86,3 @@ int setenv( const char *var, const char *value, int overwrite ) */ return retval; } -