vdi-cloud/terminal/kiosk-shell/src/transition_overlay.h

50 lines
1.3 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 会话切换过场层
//
// 用途:用户点击"连接"后,Moonlight 客户端会先在屏幕左上角创建一个小窗口,
// 再扩展到全屏并解码首帧,这段时间画面闪烁、体验割裂。
// 本控件是覆盖在 kiosk 全屏窗口之上的不透明过场层(置顶),
// 盖住这个过程,直到收到首帧信号后淡出,让用户感知为"一次平滑的转场"。
#ifndef KIOSK_SHELL_TRANSITION_OVERLAY_H
#define KIOSK_SHELL_TRANSITION_OVERLAY_H
#include <QWidget>
class QLabel;
class QTimer;
namespace vdi {
class TransitionOverlay : public QWidget {
Q_OBJECT
public:
explicit TransitionOverlay(QWidget* parent = nullptr);
// 显示过场层并开始动画;title 为提示文字(如"正在进入 Windows 10")
void start(const QString& title);
// 隐藏过场层(带淡出)
void finish();
// 首次视频帧已到达
void onFirstFrame();
protected:
bool eventFilter(QObject* watched, QEvent* event) override;
private slots:
void onTick();
void onFadeStep();
private:
QLabel* labelTitle_ = nullptr;
QLabel* labelSpinner_ = nullptr;
QTimer* tickTimer_ = nullptr;
QTimer* fadeTimer_ = nullptr;
int dots_ = 0;
};
} // namespace vdi
#endif // KIOSK_SHELL_TRANSITION_OVERLAY_H