Sélectionner une révision Git
-
Thomas Goyne a rédigéThomas Goyne a rédigé
TimingScene.hh 1,73 Kio
#pragma once
#include "../../../Lib/Utils.hh"
#include "../../../Lib/Audio.hh"
#include "../../../Lib/Ass/Ass.hh"
#include "TimingAxis.hh"
#include "TimingCursor.hh"
namespace Vivy
{
class TimingScene final : public QGraphicsScene {
Q_OBJECT
public:
enum class TimingMode { Line = 0, Syl = (1 << 1), Char = (1 << 2) };
Q_DECLARE_FLAGS(TimingModes, TimingMode)
public:
static inline constexpr QColor startColour = QColor(127, 0, 127);
static inline constexpr QColor endColour = QColor(0, 127, 0);
explicit TimingScene(QWidget *parent = nullptr) noexcept;
explicit TimingScene(QImage, AudioContext::StreamPtr, QWidget * = nullptr) noexcept;
private:
QGraphicsPixmapItem *backgroundImg{ nullptr };
QImage img;
TimingCursor *cursor;
AudioContext::StreamPtr audioStream;
Ass::LineWeakPtr currentLine{};
TimingMode timingMode{ TimingMode::Line };
TimingAxis *ax{ nullptr };
public:
QGraphicsPixmapItem *bg() noexcept;
void mousePressEvent(QGraphicsSceneMouseEvent *event) noexcept override;
void mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent) noexcept override;
TimingAxis *getAxis();
private:
void handleMousePressEventLine(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
void handleMousePressEventSyl(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
void handleMousePressEventChar(QGraphicsSceneMouseEvent *, Ass::LinePtr) noexcept;
private:
inline int timeFromPos(int x) const noexcept;
inline int posFromTime(int t) const noexcept;
public slots:
void updateScene(QImage, AudioContext::StreamPtr);
void rebuildScene();
};
}
//Only if combinaisons of mode is allowed, it shouldn't be here
//Q_DECLARE_OPERATORS_FOR_FLAGS(TimingScene::TimingModes)