Browse Source

MPV: quick setup for load file menu action

Signed-off-by: falkTX <falktx@falktx.com>
tags/22.02
falkTX 3 years ago
parent
commit
3c9a597f7f
Signed by: falkTX <falktx@falktx.com> GPG Key ID: CDBAA37ABC74FBA0
3 changed files with 60 additions and 2 deletions
  1. +9
    -0
      plugins/Cardinal/src/EmbedWidget.cpp
  2. +2
    -0
      plugins/Cardinal/src/EmbedWidget.hpp
  3. +49
    -2
      plugins/Cardinal/src/MPV.cpp

+ 9
- 0
plugins/Cardinal/src/EmbedWidget.cpp View File

@@ -208,6 +208,15 @@ void EmbedWidget::hide()
pData->hide();
}

uintptr_t EmbedWidget::getNativeWindowId() const
{
#ifdef HAVE_X11
return pData->window;
#else
return 0;
#endif
}

void EmbedWidget::step()
{
pData->step(getAbsoluteRect());


+ 2
- 0
plugins/Cardinal/src/EmbedWidget.hpp View File

@@ -29,6 +29,8 @@ struct EmbedWidget : Widget {
void embedIntoRack(uintptr_t nativeWindowId);
void hide();

uintptr_t getNativeWindowId() const;

private:
void draw(const DrawArgs&) override {}
void step() override;


+ 49
- 2
plugins/Cardinal/src/MPV.cpp View File

@@ -16,9 +16,9 @@
*/

#include "plugincontext.hpp"

#ifndef HEADLESS
# include "EmbedWidget.hpp"
# include "extra/ExternalWindow.hpp"
#endif

// --------------------------------------------------------------------------------------------------------------------
@@ -54,7 +54,7 @@ struct CardinalEmbedModule : Module {
// --------------------------------------------------------------------------------------------------------------------

#ifndef HEADLESS
struct CardinalEmbedWidget : ModuleWidget {
struct CardinalEmbedWidget : ModuleWidget, ExternalWindow {
CardinalEmbedModule* const module;
CardinalPluginContext* const pcontext;
EmbedWidget* embedWidget = nullptr;
@@ -62,6 +62,7 @@ struct CardinalEmbedWidget : ModuleWidget {

CardinalEmbedWidget(CardinalEmbedModule* const m)
: ModuleWidget(),
ExternalWindow(),
module(m),
pcontext(m != nullptr ? m->pcontext : nullptr)
{
@@ -75,6 +76,11 @@ struct CardinalEmbedWidget : ModuleWidget {
}
}

~CardinalEmbedWidget()
{
terminateAndWaitForExternalProcess();
}

void onContextCreate(const ContextCreateEvent& e) override
{
ModuleWidget::onContextCreate(e);
@@ -121,6 +127,47 @@ struct CardinalEmbedWidget : ModuleWidget {
isEmbed = false;
embedWidget->hide();
}

void appendContextMenu(ui::Menu* const menu) override
{
menu->addChild(new ui::MenuSeparator);

struct LoadVideoFileItem : MenuItem {
CardinalEmbedWidget* const self;

LoadVideoFileItem(CardinalEmbedWidget* const s)
: self(s)
{
text = "Load video file...";
}

void onAction(const event::Action&) override
{
WeakPtr<CardinalEmbedWidget> const self = this->self;
async_dialog_filebrowser(false, nullptr, text.c_str(), [self](char* path)
{
if (path == nullptr)
return;

if (self != nullptr)
{
char winIdStr[64];
std::snprintf(winIdStr, sizeof(winIdStr), "--wid=%lu",
static_cast<ulong>(self->embedWidget->getNativeWindowId()));
const char* args[] = {
"mpv", "--no-audio", winIdStr, path, nullptr
};
self->terminateAndWaitForExternalProcess();
self->startExternalProcess(args);
}

std::free(path);
});
}
};

menu->addChild(new LoadVideoFileItem(this));
}
};
#else
typedef ModuleWidget CardinalEmbedWidget;


Loading…
Cancel
Save