Files
tenmon/imagescrollareagl.h
T
2020-05-10 21:03:10 +02:00

77 lines
1.8 KiB
C++

#ifndef IMAGESCROLLAREAGL_H
#define IMAGESCROLLAREAGL_H
#include <memory>
#include <QObject>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QOpenGLTexture>
#include <QOpenGLVertexArrayObject>
#include <QScrollBar>
#include "rawimage.h"
typedef enum
{
Linear,
Log,
Sqrt,
Power,
Asinh,
}StretchFunc;
class ImageWidget : public QOpenGLWidget
{
Q_OBJECT
QOpenGLFunctions *f;
std::unique_ptr<QOpenGLShaderProgram> m_program;
std::unique_ptr<QOpenGLBuffer> m_buffer;
std::unique_ptr<QOpenGLTexture> m_image;
std::unique_ptr<QOpenGLVertexArrayObject> m_vao;
std::unique_ptr<QOpenGLPixelTransferOptions> 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