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