culturered_client/ProjectorDisplay/ScreenWidget.h
2024-09-07 11:34:44 +08:00

88 lines
2.0 KiB
C++

#pragma once
#include <QWidget>
//#include <QLabel>
#include <QGraphicsOpacityEffect>
#include <QAnimationGroup>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QOpenGLVertexArrayObject>
#include <QOpenGLTexture>
#include <QOpenGLBuffer>
#include <QTimer>
#include "CmdReceiver.h"
#include "ReverseDecodThread.h"
#include "VlcMediaPlayer.h"
#include "Config.h"
class ScreenWidget : public QOpenGLWidget, protected QOpenGLFunctions, public CmdReceiver {
Q_OBJECT
public:
explicit ScreenWidget(QWidget* widget = nullptr);
~ScreenWidget() override;
void OnMessage(const QString& cmd) override;
void OnTimeout();
void OnAlphaChanged(float alpha) {
m_alpha = alpha;
}
protected:
void keyPressEvent(QKeyEvent* event) override;
void keyReleaseEvent(QKeyEvent* event) override;
void mouseReleaseEvent(QMouseEvent* event) override;
// void paintEvent(QPaintEvent* event) override;
protected:
void initializeGL() override;
void paintGL() override;
void resizeGL(int w, int h) override;
void Save();
void PlayCricle(const Scope& scop);
void Play(const Scope& scop);
void slotSetOneFrame(QImage image);
private:
void InitMask();
private:
bool m_ctrlPress{ false };
int32_t m_town{ -1 };
int32_t m_place{ -1 };
QPixmap m_bg;
int m_x = 0;
int m_y = 0;
float m_sx = 1.0f;
float m_sy = 1.0f;
int m_r = 1;
VlcMediaPlayer vlcMediaPlayer_;
//QTimer m_timer;
QOpenGLVertexArrayObject* m_vao{ nullptr };
QOpenGLShader* m_vshader{ nullptr };
QOpenGLShader* m_fshader{ nullptr };
QOpenGLShaderProgram* m_program{ nullptr };
QOpenGLTexture* m_background{ nullptr };
QOpenGLTexture* m_movie{ nullptr };
QRect m_moveRect;
float m_alpha{ 1.0f };
QVector<QImage> m_textureData;
int m_cricleFrameCount{ 0 };
int m_cricleFrame{ INT_MAX };
Scope m_scope;
QImage m_maskImage;
QRect m_drawRect;
QTime m_lastTime;
};