重构:完善串流就绪检测并补充 GPU 联调记录
变更详情:kiosk 会话就绪检测重构(Moonlight 输出解析器/事件化回调/单元测试);GPU 直通实操记录(vfio Subsystem 注入、sysfs vBIOS、7zr+pnputil 安装、566.36 驱动、Sunshine 配对断链修复)
This commit is contained in:
1 parent
b08486046b
commit
13f645a503
14 files changed
+743
-225
No files matched your search
@@ -2,7 +2,9 @@
|
||||
|
||||
#include <QEvent>
|
||||
#include <QFont>
|
||||
#include <QGuiApplication>
|
||||
#include <QLabel>
|
||||
#include <QScreen>
|
||||
#include <QTimer>
|
||||
#include <QVBoxLayout>
|
||||
#include <QVariant>
|
||||
@@ -10,7 +12,7 @@
|
||||
namespace vdi {
|
||||
namespace {
|
||||
|
||||
constexpr int kTickMs = 400; // 省略号/旋轮动画与置顶保活周期
|
||||
constexpr int kTickMs = 400; // 省略号/旋轮动画周期
|
||||
constexpr int kFadeStepMs = 40; // 淡出步进周期
|
||||
constexpr int kFadeSteps = 25; // 全程约 1 秒淡出
|
||||
|
||||
@@ -19,9 +21,10 @@ const char* kSpinnerFrames[] = {"◐", "◓", "◑", "◒"};
|
||||
} // namespace
|
||||
|
||||
TransitionOverlay::TransitionOverlay(QWidget* parent) : QWidget(parent) {
|
||||
// 独立置顶无边框窗口:串流启动后 moonlight-qt 会盖住 kiosk 主窗口,
|
||||
// 过场层必须压在它之上才起作用(onTick 周期性 raise 兜底)。
|
||||
setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint);
|
||||
// 独立置顶无边框窗口只在启动时映射一次,后续不再与 Moonlight 抢焦点。
|
||||
setWindowFlags(Qt::Window | Qt::FramelessWindowHint | Qt::WindowStaysOnTopHint |
|
||||
Qt::WindowDoesNotAcceptFocus);
|
||||
setAttribute(Qt::WA_ShowWithoutActivating);
|
||||
setStyleSheet(QStringLiteral("TransitionOverlay { background-color: #000000; }"));
|
||||
|
||||
auto* layout = new QVBoxLayout(this);
|
||||
@@ -63,19 +66,17 @@ void TransitionOverlay::start(const QString& title) {
|
||||
labelTitle_->setText(title);
|
||||
labelSpinner_->setText(QString::fromUtf8(kSpinnerFrames[0]));
|
||||
|
||||
showFullScreen();
|
||||
if (QScreen* targetScreen = QGuiApplication::primaryScreen()) {
|
||||
setGeometry(targetScreen->geometry());
|
||||
}
|
||||
show();
|
||||
raise();
|
||||
activateWindow();
|
||||
grabKeyboard();
|
||||
grabMouse();
|
||||
tickTimer_->start(kTickMs);
|
||||
}
|
||||
|
||||
void TransitionOverlay::finish() {
|
||||
tickTimer_->stop();
|
||||
fadeTimer_->stop();
|
||||
releaseKeyboard();
|
||||
releaseMouse();
|
||||
hide();
|
||||
setWindowOpacity(1.0);
|
||||
}
|
||||
@@ -86,8 +87,6 @@ void TransitionOverlay::onFirstFrame() {
|
||||
return;
|
||||
}
|
||||
tickTimer_->stop();
|
||||
releaseKeyboard();
|
||||
releaseMouse();
|
||||
fadeTimer_->start(kFadeStepMs);
|
||||
}
|
||||
|
||||
@@ -98,8 +97,6 @@ void TransitionOverlay::onTick() {
|
||||
labelTitle_->setText(base + QString(dots_, QLatin1Char('.')));
|
||||
}
|
||||
labelSpinner_->setText(QString::fromUtf8(kSpinnerFrames[dots_]));
|
||||
// X11 下 moonlight 的全屏窗口可能后映射,周期性抬回最上层
|
||||
raise();
|
||||
}
|
||||
|
||||
void TransitionOverlay::onFadeStep() {
|
||||
|
||||
Reference in new issue
Block a user