Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 3b4c0d949354c7d5336b179eba8d9f4a5c70b440
  • master par défaut
  • script
  • new-devel
  • devel
  • timingView-edit
  • fix-mpv
7 résultats

TimingScene.hh

Blame
  • 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)