split_view.h (2033B)
1 // Copyright (c) the JPEG XL Project Authors. All rights reserved. 2 // 3 // Use of this source code is governed by a BSD-style 4 // license that can be found in the LICENSE file. 5 6 #ifndef TOOLS_FLICKER_TEST_SPLIT_VIEW_H_ 7 #define TOOLS_FLICKER_TEST_SPLIT_VIEW_H_ 8 9 #include <QElapsedTimer> 10 #include <QImage> 11 #include <QPixmap> 12 #include <QTimer> 13 #include <QVariantAnimation> 14 #include <QWidget> 15 #include <random> 16 17 namespace jpegxl { 18 namespace tools { 19 20 class SplitView : public QWidget { 21 Q_OBJECT 22 23 public: 24 enum class Side { 25 kLeft, 26 kRight, 27 }; 28 Q_ENUM(Side) 29 30 explicit SplitView(QWidget* parent = nullptr); 31 ~SplitView() override = default; 32 33 void setOriginalImage(QImage image); 34 void setAlteredImage(QImage image); 35 36 signals: 37 void testResult(const QString& imageName, Side flickeringSide, 38 Side clickedSide, int clickDelayMSecs); 39 40 public slots: 41 void setSpacing(int spacing); 42 void startTest(QString imageName, int blankingTimeMSecs, int viewingTimeSecs, 43 int advanceTimeMSecs, bool gray, int grayFadingTimeMSecs, 44 int grayTimeMSecs); 45 46 protected: 47 void mousePressEvent(QMouseEvent* event) override; 48 void mouseReleaseEvent(QMouseEvent* event) override; 49 void paintEvent(QPaintEvent* event) override; 50 51 private slots: 52 void startDisplaying(); 53 54 private: 55 enum class State { 56 kBlanking, 57 kDisplaying, 58 }; 59 60 void updateMinimumSize(); 61 62 int spacing_ = 50; 63 64 std::mt19937 g_; 65 66 QString imageName_; 67 QPixmap original_, altered_; 68 Side originalSide_; 69 bool clicking_ = false; 70 Side clickedSide_; 71 QRectF leftRect_, rightRect_; 72 State state_ = State::kDisplaying; 73 bool gray_ = false; 74 QTimer blankingTimer_; 75 QTimer viewingTimer_; 76 // Throughout each cycle, animates the opacity of the image being displayed 77 // between 0 and 1 if fading to gray is enabled. 78 QVariantAnimation flicker_; 79 bool showingAltered_ = true; 80 QElapsedTimer viewingStartTime_; 81 }; 82 83 } // namespace tools 84 } // namespace jpegxl 85 86 #endif // TOOLS_FLICKER_TEST_SPLIT_VIEW_H_