File indexing completed on 2025-02-02 04:11:33

0001 /*
0002  * SPDX-FileCopyrightText: 2019-2023 Mattia Basaglia <dev@dragon.best>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #ifndef FRAMECONTROLSWIDGET_H
0008 #define FRAMECONTROLSWIDGET_H
0009 
0010 #include <QWidget>
0011 #include <memory>
0012 #include <chrono>
0013 
0014 
0015 namespace glaxnimate::gui {
0016 
0017 namespace Ui {
0018 class FrameControlsWidget;
0019 }
0020 
0021 class FrameControlsWidget : public QWidget
0022 {
0023     Q_OBJECT
0024 
0025 public:
0026     FrameControlsWidget(QWidget* parent = nullptr);
0027     ~FrameControlsWidget();
0028 
0029     void set_range(int min, int max);
0030     void set_min(int min);
0031     void set_max(int max);
0032     void set_fps(qreal fps);
0033     void set_frame(int frame);
0034 
0035 public Q_SLOTS:
0036     void play();
0037     void pause();
0038     void toggle_play();
0039     void set_record_enabled(bool enabled);
0040     void set_loop(bool loop);
0041 
0042     void go_first();
0043     void go_prev();
0044     void go_next();
0045     void go_last();
0046 
0047 Q_SIGNALS:
0048     void frame_selected(int frame);
0049     void record_toggled(bool enabled);
0050     void play_started();
0051     void play_stopped();
0052     void loop_changed(bool b);
0053     void min_changed(int min);
0054     void max_changed(int max);
0055     void fps_changed(qreal fps);
0056 
0057 private Q_SLOTS:
0058     void play_toggled(bool play);
0059     void commit_time();
0060 
0061 
0062 protected:
0063     void timerEvent(QTimerEvent* e) override;
0064 
0065 protected:
0066     void changeEvent ( QEvent* e ) override;
0067 
0068 private:
0069     qreal fps = 60;
0070     int timer = 0;
0071     int frame_start = 0;
0072     std::chrono::high_resolution_clock::time_point playback_start;
0073     std::chrono::milliseconds playback_tick{17};
0074     std::unique_ptr<Ui::FrameControlsWidget> d;
0075 };
0076 
0077 } // namespace glaxnimate::gui
0078 
0079 #endif // FRAMECONTROLSWIDGET_H