libjxl

FORK: libjxl patches used on blog
git clone https://git.neptards.moe/blog/libjxl.git
Log | Files | Refs | Submodules | README | LICENSE

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_