#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; int m_stretch; float m_range; float m_dx, m_dy; float m_scale; float m_param; bool m_blockRepaint; public: explicit ImageWidget(QWidget *parent = nullptr); ~ImageWidget(); void setImage(RawImage *image); void setImage(const QPixmap &pixmap); void setScale(float scale); void blockRepaint(bool block); public slots: void setLow(int low); void setHigh(int high); void setStrech(int stretch); void setStretchParam(float param); 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; float m_scale; public: explicit ImageScrollAreaGL(QWidget *parent = nullptr); ~ImageScrollAreaGL(); void setImage(RawImage *image); void setImage(const QPixmap &pixmap); ImageWidget* imageWidget(); protected: void updateScrollbars(bool zoom = false); void resizeEvent(QResizeEvent *event); void mouseMoveEvent(QMouseEvent *event); void mousePressEvent(QMouseEvent *event); void wheelEvent(QWheelEvent *event); public slots: void zoomIn(); void zoomOut(); void bestFit(); void oneToOne(); protected slots: void scrollEvent(); }; #endif // IMAGESCROLLAREAGL_H