feat: add Kirigami app skeleton with libmpv playback
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
1eb67b829c
8 files changed
+540
No files matched your search
@@ -0,0 +1,58 @@
|
||||
#pragma once
|
||||
|
||||
#include <MpvAbstractItem>
|
||||
|
||||
#include <QUrl>
|
||||
#include <QtQml/qqmlregistration.h>
|
||||
|
||||
// QML video surface backed by libmpv (through MpvQt).
|
||||
// mpv properties we care about are mirrored as Qt properties so QML can bind to them.
|
||||
class MpvItem : public MpvAbstractItem
|
||||
{
|
||||
Q_OBJECT
|
||||
QML_ELEMENT
|
||||
|
||||
Q_PROPERTY(QUrl currentUrl READ currentUrl NOTIFY currentUrlChanged)
|
||||
Q_PROPERTY(QString mediaTitle READ mediaTitle NOTIFY mediaTitleChanged)
|
||||
Q_PROPERTY(double position READ position NOTIFY positionChanged)
|
||||
Q_PROPERTY(double duration READ duration NOTIFY durationChanged)
|
||||
Q_PROPERTY(bool paused READ paused WRITE setPaused NOTIFY pausedChanged)
|
||||
Q_PROPERTY(bool fileLoaded READ isFileLoaded NOTIFY fileLoadedChanged)
|
||||
|
||||
public:
|
||||
explicit MpvItem(QQuickItem *parent = nullptr);
|
||||
~MpvItem() override = default;
|
||||
|
||||
QUrl currentUrl() const;
|
||||
QString mediaTitle() const;
|
||||
double position() const;
|
||||
double duration() const;
|
||||
bool paused() const;
|
||||
void setPaused(bool paused);
|
||||
bool isFileLoaded() const;
|
||||
|
||||
Q_INVOKABLE void loadFile(const QUrl &url);
|
||||
Q_INVOKABLE void togglePause();
|
||||
Q_INVOKABLE void seek(double seconds);
|
||||
|
||||
Q_SIGNALS:
|
||||
void currentUrlChanged();
|
||||
void mediaTitleChanged();
|
||||
void positionChanged();
|
||||
void durationChanged();
|
||||
void pausedChanged();
|
||||
void fileLoadedChanged();
|
||||
|
||||
private:
|
||||
void onPropertyChanged(const QString &property, const QVariant &value);
|
||||
void setFileLoaded(bool loaded);
|
||||
|
||||
bool m_ready = false;
|
||||
QUrl m_pendingUrl;
|
||||
QUrl m_currentUrl;
|
||||
QString m_mediaTitle;
|
||||
double m_position = 0.0;
|
||||
double m_duration = 0.0;
|
||||
bool m_paused = false;
|
||||
bool m_fileLoaded = false;
|
||||
};
|
||||
Reference in new issue
Block a user