#ifndef IMAGESCROLLAREAGL_H #define IMAGESCROLLAREAGL_H #include #include #include #include #include #include #include #include #include #include "rawimage.h" typedef enum { Linear, Log, Sqrt, Power, Asinh, }StretchFunc; class ImageWidget : public QOpenGLWidget { Q_OBJECT QOpenGLFunctions *f; std::unique_ptr m_program; std::unique_ptr m_buffer; std::unique_ptr m_image; std::unique_ptr m_vao; std::unique_ptr m_transferOptions; int m_width, m_height; float m_low; float m_high; float m_range; float m_dx, m_dy; public: explicit ImageWidget(QWidget *parent = nullptr); ~ImageWidget(); void setImage(RawImage *image); void setImage(const QPixmap &pixmap); public slots: void setLow(int low); void setHigh(int high); void setOffset(int dx, int dy); protected: void paintGL(); void resizeGL(int w, int h); void initializeGL(); }; class ImageScrollAreaGL : public QWidget { Q_OBJECT QScrollBar *m_verticalScrollBar; QScrollBar *m_horizontalScrollBar; ImageWidget *m_imageWidget; int m_imgWidth, m_imgHeight; QPoint m_lastPos; public: explicit ImageScrollAreaGL(QWidget *parent = nullptr); ~ImageScrollAreaGL(); void setImage(RawImage *image); void setImage(const QPixmap &pixmap); ImageWidget* imageWidget(); protected: void updateScrollbars(); void resizeEvent(QResizeEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); protected slots: void scrollEvent(); }; #endif // IMAGESCROLLAREAGL_H