Visualizations experimentation
This commit is contained in:
parent
8e07909961
commit
09f7be21eb
|
@ -41,7 +41,6 @@
|
|||
#endif // HAVE_PROJECTM4
|
||||
|
||||
#include <QCoreApplication>
|
||||
#include <QGraphicsScene>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QDir>
|
||||
|
@ -59,7 +58,7 @@
|
|||
#include "visualizationcontainer.h"
|
||||
|
||||
ProjectMVisualization::ProjectMVisualization(VisualizationContainer *container)
|
||||
: QGraphicsScene(container),
|
||||
: QObject(container),
|
||||
container_(container),
|
||||
preset_model_(nullptr),
|
||||
#ifdef HAVE_PROJECTM4
|
||||
|
@ -71,8 +70,6 @@ ProjectMVisualization::ProjectMVisualization(VisualizationContainer *container)
|
|||
texture_size_(512),
|
||||
pixel_ratio_(container->devicePixelRatio()) {
|
||||
|
||||
QObject::connect(this, &QGraphicsScene::sceneRectChanged, this, &ProjectMVisualization::SceneRectChanged);
|
||||
|
||||
#ifndef HAVE_PROJECTM4
|
||||
for (int i = 0; i < TOTAL_RATING_TYPES; ++i) {
|
||||
default_rating_list_.push_back(3);
|
||||
|
@ -193,11 +190,7 @@ void ProjectMVisualization::Init() {
|
|||
|
||||
}
|
||||
|
||||
void ProjectMVisualization::drawBackground(QPainter *p, const QRectF &rect) {
|
||||
|
||||
Q_UNUSED(rect);
|
||||
|
||||
p->beginNativePainting();
|
||||
void ProjectMVisualization::RenderFrame(const int width, const int height) {
|
||||
|
||||
#ifdef HAVE_PROJECTM4
|
||||
if (!projectm_instance_) {
|
||||
|
@ -212,15 +205,13 @@ void ProjectMVisualization::drawBackground(QPainter *p, const QRectF &rect) {
|
|||
#endif
|
||||
|
||||
#ifdef HAVE_PROJECTM4
|
||||
projectm_set_window_size(projectm_instance_, static_cast<size_t>(sceneRect().width() * pixel_ratio_), static_cast<size_t>(sceneRect().height() * pixel_ratio_));
|
||||
projectm_set_window_size(projectm_instance_, static_cast<size_t>(width * pixel_ratio_), static_cast<size_t>(height * pixel_ratio_));
|
||||
projectm_opengl_render_frame(projectm_instance_);
|
||||
#else
|
||||
projectm_->projectM_resetGL(static_cast<int>(sceneRect().width() * pixel_ratio_), static_cast<int>(sceneRect().height() * pixel_ratio_));
|
||||
projectm_->projectM_resetGL(static_cast<int>(width * pixel_ratio_), static_cast<int>(height * pixel_ratio_));
|
||||
projectm_->renderFrame();
|
||||
#endif // HAVE_PROJECTM4
|
||||
|
||||
p->endNativePainting();
|
||||
|
||||
}
|
||||
|
||||
void ProjectMVisualization::SceneRectChanged(const QRectF &rect) {
|
||||
|
|
|
@ -34,9 +34,10 @@
|
|||
# include <libprojectM/projectM.hpp>
|
||||
#endif
|
||||
|
||||
#include <QObject>
|
||||
#include <QString>
|
||||
#include <QStringList>
|
||||
#include <QGraphicsScene>
|
||||
#include <QRectF>
|
||||
|
||||
#include "engine/gstbufferconsumer.h"
|
||||
|
||||
|
@ -45,7 +46,7 @@ class QPainter;
|
|||
class ProjectMPresetModel;
|
||||
class VisualizationContainer;
|
||||
|
||||
class ProjectMVisualization : public QGraphicsScene, public GstBufferConsumer {
|
||||
class ProjectMVisualization : public QObject, public GstBufferConsumer {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
@ -64,6 +65,7 @@ class ProjectMVisualization : public QGraphicsScene, public GstBufferConsumer {
|
|||
int duration() const { return duration_; }
|
||||
|
||||
void Init();
|
||||
void RenderFrame(const int width, const int height);
|
||||
|
||||
// BufferConsumer
|
||||
void ConsumeBuffer(GstBuffer *buffer, const int pipeline_id, const QString &format) override;
|
||||
|
@ -80,10 +82,6 @@ class ProjectMVisualization : public QGraphicsScene, public GstBufferConsumer {
|
|||
|
||||
void Lock(const bool lock);
|
||||
|
||||
protected:
|
||||
// QGraphicsScene
|
||||
void drawBackground(QPainter *painter, const QRectF &rect) override;
|
||||
|
||||
private slots:
|
||||
void SceneRectChanged(const QRectF &rect);
|
||||
|
||||
|
|
|
@ -62,7 +62,7 @@ constexpr int kDefaultTextureSize = 512;
|
|||
} // namespace
|
||||
|
||||
VisualizationContainer::VisualizationContainer(QWidget *parent)
|
||||
: QGraphicsView(parent),
|
||||
: QMainWindow(parent),
|
||||
projectm_visualization_(new ProjectMVisualization(this)),
|
||||
overlay_(new VisualizationOverlay),
|
||||
selector_(new VisualizationSelector(this)),
|
||||
|
@ -91,19 +91,10 @@ VisualizationContainer::VisualizationContainer(QWidget *parent)
|
|||
QObject::connect(close, &QShortcut::activated, this, &VisualizationContainer::close);
|
||||
|
||||
// Set up the graphics view
|
||||
setScene(projectm_visualization_);
|
||||
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
|
||||
setViewport(new VisualizationOpenGLWidget(projectm_visualization_));
|
||||
#else
|
||||
setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
|
||||
#endif
|
||||
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setFrameStyle(QFrame::NoFrame);
|
||||
setCentralWidget(new VisualizationOpenGLWidget(projectm_visualization_));
|
||||
|
||||
// Add the overlay
|
||||
overlay_proxy_ = scene()->addWidget(overlay_);
|
||||
//overlay_proxy_ = scene()->addWidget(overlay_);
|
||||
QObject::connect(overlay_, &VisualizationOverlay::OpacityChanged, this, &VisualizationContainer::ChangeOverlayOpacity);
|
||||
QObject::connect(overlay_, &VisualizationOverlay::ShowPopupMenu, this, &VisualizationContainer::ShowPopupMenu);
|
||||
ChangeOverlayOpacity(0.0);
|
||||
|
@ -170,7 +161,7 @@ void VisualizationContainer::showEvent(QShowEvent *e) {
|
|||
|
||||
qLog(Debug) << "Showing visualization";
|
||||
|
||||
QGraphicsView::showEvent(e);
|
||||
QMainWindow::showEvent(e);
|
||||
|
||||
update_timer_.start(1000 / fps_, this);
|
||||
|
||||
|
@ -182,7 +173,7 @@ void VisualizationContainer::hideEvent(QHideEvent *e) {
|
|||
|
||||
qLog(Debug) << "Hiding visualization";
|
||||
|
||||
QGraphicsView::hideEvent(e);
|
||||
QMainWindow::hideEvent(e);
|
||||
|
||||
update_timer_.stop();
|
||||
|
||||
|
@ -201,7 +192,7 @@ void VisualizationContainer::closeEvent(QCloseEvent *e) {
|
|||
}
|
||||
|
||||
void VisualizationContainer::resizeEvent(QResizeEvent *e) {
|
||||
QGraphicsView::resizeEvent(e);
|
||||
QMainWindow::resizeEvent(e);
|
||||
SizeChanged();
|
||||
}
|
||||
|
||||
|
@ -213,7 +204,7 @@ void VisualizationContainer::SizeChanged() {
|
|||
s.setValue("geometry", saveGeometry());
|
||||
|
||||
// Resize the scene
|
||||
if (scene()) scene()->setSceneRect(QRect(QPoint(0, 0), size()));
|
||||
//if (scene()) scene()->setSceneRect(QRect(QPoint(0, 0), size()));
|
||||
|
||||
// Resize the overlay
|
||||
if (overlay_) overlay_->resize(size());
|
||||
|
@ -222,8 +213,8 @@ void VisualizationContainer::SizeChanged() {
|
|||
|
||||
void VisualizationContainer::timerEvent(QTimerEvent *e) {
|
||||
|
||||
QGraphicsView::timerEvent(e);
|
||||
if (e->timerId() == update_timer_.timerId()) scene()->update();
|
||||
QMainWindow::timerEvent(e);
|
||||
//if (e->timerId() == update_timer_.timerId()) scene()->update();
|
||||
|
||||
}
|
||||
|
||||
|
@ -241,14 +232,15 @@ void VisualizationContainer::Stopped() {
|
|||
|
||||
void VisualizationContainer::ChangeOverlayOpacity(const qreal value) {
|
||||
|
||||
overlay_proxy_->setOpacity(value);
|
||||
if (overlay_proxy_)
|
||||
overlay_proxy_->setOpacity(value);
|
||||
|
||||
// Hide the cursor if the overlay is hidden
|
||||
if (value < 0.5) {
|
||||
viewport()->setCursor(Qt::BlankCursor);
|
||||
//viewport()->setCursor(Qt::BlankCursor);
|
||||
}
|
||||
else {
|
||||
viewport()->unsetCursor();
|
||||
//viewport()->unsetCursor();
|
||||
}
|
||||
|
||||
|
||||
|
@ -260,29 +252,29 @@ void VisualizationContainer::enterEvent(QEnterEvent *e) {
|
|||
void VisualizationContainer::enterEvent(QEvent *e) {
|
||||
#endif
|
||||
|
||||
QGraphicsView::enterEvent(e);
|
||||
QMainWindow::enterEvent(e);
|
||||
|
||||
overlay_->SetVisible(true);
|
||||
|
||||
}
|
||||
|
||||
void VisualizationContainer::leaveEvent(QEvent *e) {
|
||||
QGraphicsView::leaveEvent(e);
|
||||
QMainWindow::leaveEvent(e);
|
||||
overlay_->SetVisible(false);
|
||||
}
|
||||
|
||||
void VisualizationContainer::mouseMoveEvent(QMouseEvent *e) {
|
||||
QGraphicsView::mouseMoveEvent(e);
|
||||
QMainWindow::mouseMoveEvent(e);
|
||||
overlay_->SetVisible(true);
|
||||
}
|
||||
|
||||
void VisualizationContainer::mouseDoubleClickEvent(QMouseEvent *e) {
|
||||
QGraphicsView::mouseDoubleClickEvent(e);
|
||||
QMainWindow::mouseDoubleClickEvent(e);
|
||||
ToggleFullscreen();
|
||||
}
|
||||
|
||||
void VisualizationContainer::contextMenuEvent(QContextMenuEvent *event) {
|
||||
QGraphicsView::contextMenuEvent(event);
|
||||
QMainWindow::contextMenuEvent(event);
|
||||
ShowPopupMenu(event->pos());
|
||||
}
|
||||
|
||||
|
@ -298,7 +290,7 @@ void VisualizationContainer::keyReleaseEvent(QKeyEvent *event) {
|
|||
return;
|
||||
}
|
||||
|
||||
QGraphicsView::keyReleaseEvent(event);
|
||||
QMainWindow::keyReleaseEvent(event);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
#include "config.h"
|
||||
|
||||
#include <QBasicTimer>
|
||||
#include <QGraphicsView>
|
||||
#include <QMainWindow>
|
||||
|
||||
#include "core/song.h"
|
||||
|
||||
|
@ -49,7 +49,7 @@ class QKeyEvent;
|
|||
class QEnterEvent;
|
||||
#endif
|
||||
|
||||
class VisualizationContainer : public QGraphicsView {
|
||||
class VisualizationContainer : public QMainWindow {
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
#include "config.h"
|
||||
|
||||
#include <QtGlobal>
|
||||
#include <QPainter>
|
||||
|
||||
#include "visualizationopenglwidget.h"
|
||||
#include "projectmvisualization.h"
|
||||
|
@ -35,3 +35,13 @@ void VisualizationOpenGLWidget::initializeGL() {
|
|||
QOpenGLWidget::initializeGL();
|
||||
|
||||
}
|
||||
|
||||
void VisualizationOpenGLWidget::paintGL() {
|
||||
|
||||
QPainter p(this);
|
||||
p.beginNativePainting();
|
||||
projectm_visualization_->RenderFrame(width(), height());
|
||||
p.endNativePainting();
|
||||
update();
|
||||
|
||||
}
|
||||
|
|
|
@ -34,6 +34,7 @@ class VisualizationOpenGLWidget : public QOpenGLWidget {
|
|||
|
||||
protected:
|
||||
void initializeGL() override;
|
||||
void paintGL() override;
|
||||
|
||||
private:
|
||||
ProjectMVisualization *projectm_visualization_;
|
||||
|
|
Loading…
Reference in New Issue