git repos / SagoImageBrowser

blame: src/imageviewwidget.h

normal view · raw

61136b77 Poul Sander 2026-02-20 22:45 1
#pragma once
61136b77 Poul Sander 2026-02-20 22:45 2
61136b77 Poul Sander 2026-02-20 22:45 3
#include <QWidget>
61136b77 Poul Sander 2026-02-20 22:45 4
#include <QImage>
61136b77 Poul Sander 2026-02-20 22:45 5
#include <QPixmap>
80a9926d Poul Sander 2026-05-19 20:28 6
#include <QByteArray>
80a9926d Poul Sander 2026-05-19 20:28 7
#include <QList>
58103277 Poul Sander 2026-03-01 22:53 8
#include <QMap>
80a9926d Poul Sander 2026-05-19 20:28 9
#include <QSet>
58103277 Poul Sander 2026-03-01 22:53 10
#include <QThread>
53fdab93 Poul Sander 2026-05-18 18:45 11
#include "exifreader.h"
58103277 Poul Sander 2026-03-01 22:53 12
58103277 Poul Sander 2026-03-01 22:53 13
class ImageLoadWorker : public QThread
58103277 Poul Sander 2026-03-01 22:53 14
{
58103277 Poul Sander 2026-03-01 22:53 15
    Q_OBJECT
58103277 Poul Sander 2026-03-01 22:53 16
public:
80a9926d Poul Sander 2026-05-19 20:28 17
    explicit ImageLoadWorker(const QByteArray &path, QObject *parent = nullptr);
58103277 Poul Sander 2026-03-01 22:53 18
    void run() override;
58103277 Poul Sander 2026-03-01 22:53 19
signals:
80a9926d Poul Sander 2026-05-19 20:28 20
    void imageLoaded(const QByteArray &path, const QPixmap &pixmap);
58103277 Poul Sander 2026-03-01 22:53 21
private:
80a9926d Poul Sander 2026-05-19 20:28 22
    QByteArray m_path;
58103277 Poul Sander 2026-03-01 22:53 23
};
61136b77 Poul Sander 2026-02-20 22:45 24
61136b77 Poul Sander 2026-02-20 22:45 25
class ImageViewWidget : public QWidget
61136b77 Poul Sander 2026-02-20 22:45 26
{
61136b77 Poul Sander 2026-02-20 22:45 27
    Q_OBJECT
61136b77 Poul Sander 2026-02-20 22:45 28
61136b77 Poul Sander 2026-02-20 22:45 29
public:
58103277 Poul Sander 2026-03-01 22:53 30
    // Number of images to read ahead and keep behind the current image
58103277 Poul Sander 2026-03-01 22:53 31
    static constexpr int CacheReadAhead = 2;
58103277 Poul Sander 2026-03-01 22:53 32
    static constexpr int CacheKeepBehind = 2;
58103277 Poul Sander 2026-03-01 22:53 33
c58dbdb7 Poul Sander 2026-02-22 17:49 34
    enum ZoomMode { FitToScreen, OriginalSize, CustomZoom };
c58dbdb7 Poul Sander 2026-02-22 17:49 35
61136b77 Poul Sander 2026-02-20 22:45 36
    explicit ImageViewWidget(QWidget *parent = nullptr);
61136b77 Poul Sander 2026-02-20 22:45 37
80a9926d Poul Sander 2026-05-19 20:28 38
    void setImage(const QByteArray &path);
f61bf886 Poul Sander 2026-02-23 19:27 39
    void setBackgroundColor(const QString &color);
c58dbdb7 Poul Sander 2026-02-22 17:49 40
    void zoomIn();
c58dbdb7 Poul Sander 2026-02-22 17:49 41
    void zoomOut();
c58dbdb7 Poul Sander 2026-02-22 17:49 42
    void zoomOriginal();
c58dbdb7 Poul Sander 2026-02-22 17:49 43
    void zoomFitToScreen();
61136b77 Poul Sander 2026-02-20 22:45 44
80a9926d Poul Sander 2026-05-19 20:28 45
    void prefetchImage(const QByteArray &path);
80a9926d Poul Sander 2026-05-19 20:28 46
    void setNeighborPaths(const QList<QByteArray> &paths);
58103277 Poul Sander 2026-03-01 22:53 47
    void clearCache();
58103277 Poul Sander 2026-03-01 22:53 48
53fdab93 Poul Sander 2026-05-18 18:45 49
    void setExifData(const ExifData &data);
53fdab93 Poul Sander 2026-05-18 18:45 50
    void toggleExifOverlay();
beb4a823 Poul Sander 2026-05-19 21:53 51
    QByteArray currentPath() const;
53fdab93 Poul Sander 2026-05-18 18:45 52
61136b77 Poul Sander 2026-02-20 22:45 53
signals:
61136b77 Poul Sander 2026-02-20 22:45 54
    void closeRequested();
1ffc1962 Poul Sander 2026-02-20 23:41 55
    void nextRequested();
1ffc1962 Poul Sander 2026-02-20 23:41 56
    void previousRequested();
beb4a823 Poul Sander 2026-05-19 21:53 57
    void editCaptionRequested();
61136b77 Poul Sander 2026-02-20 22:45 58
61136b77 Poul Sander 2026-02-20 22:45 59
protected:
61136b77 Poul Sander 2026-02-20 22:45 60
    void paintEvent(QPaintEvent *event) override;
61136b77 Poul Sander 2026-02-20 22:45 61
    void keyPressEvent(QKeyEvent *event) override;
c8ae2669 Poul Sander 2026-02-22 17:52 62
    void mousePressEvent(QMouseEvent *event) override;
c8ae2669 Poul Sander 2026-02-22 17:52 63
    void mouseMoveEvent(QMouseEvent *event) override;
c8ae2669 Poul Sander 2026-02-22 17:52 64
    void mouseReleaseEvent(QMouseEvent *event) override;
1035a476 Poul Sander 2026-02-23 19:30 65
    void mouseDoubleClickEvent(QMouseEvent *event) override;
61136b77 Poul Sander 2026-02-20 22:45 66
61136b77 Poul Sander 2026-02-20 22:45 67
private:
c8ae2669 Poul Sander 2026-02-22 17:52 68
    void clampOffset(int imgW, int imgH);
80a9926d Poul Sander 2026-05-19 20:28 69
    QPixmap loadImageFromDisk(const QByteArray &path);
80a9926d Poul Sander 2026-05-19 20:28 70
    void onImageLoaded(const QByteArray &path, const QPixmap &pixmap);
c8ae2669 Poul Sander 2026-02-22 17:52 71
61136b77 Poul Sander 2026-02-20 22:45 72
    QPixmap m_pixmap;
c58dbdb7 Poul Sander 2026-02-22 17:49 73
    ZoomMode m_zoomMode = FitToScreen;
c58dbdb7 Poul Sander 2026-02-22 17:49 74
    double m_zoomFactor = 1.0;
f61bf886 Poul Sander 2026-02-23 19:27 75
    QString m_backgroundColor = "black";
80a9926d Poul Sander 2026-05-19 20:28 76
    QByteArray m_currentPath;
58103277 Poul Sander 2026-03-01 22:53 77
58103277 Poul Sander 2026-03-01 22:53 78
    // Image cache: path -> pixmap
80a9926d Poul Sander 2026-05-19 20:28 79
    QMap<QByteArray, QPixmap> m_cache;
80a9926d Poul Sander 2026-05-19 20:28 80
    QList<QByteArray> m_neighborPaths;    // ordered list of paths around current image
80a9926d Poul Sander 2026-05-19 20:28 81
    QSet<QByteArray> m_pendingLoads;      // paths currently being loaded in background
c8ae2669 Poul Sander 2026-02-22 17:52 82
c8ae2669 Poul Sander 2026-02-22 17:52 83
    // Panning state
c8ae2669 Poul Sander 2026-02-22 17:52 84
    QPoint m_offset;        // current pan offset (pixels)
c8ae2669 Poul Sander 2026-02-22 17:52 85
    bool   m_dragging = false;
c8ae2669 Poul Sander 2026-02-22 17:52 86
    QPoint m_dragStart;
c8ae2669 Poul Sander 2026-02-22 17:52 87
    QPoint m_offsetAtDragStart;
53fdab93 Poul Sander 2026-05-18 18:45 88
53fdab93 Poul Sander 2026-05-18 18:45 89
    // EXIF overlay
53fdab93 Poul Sander 2026-05-18 18:45 90
    ExifData m_exifData;
53fdab93 Poul Sander 2026-05-18 18:45 91
    bool m_showExifOverlay = false;
61136b77 Poul Sander 2026-02-20 22:45 92
};
1970-01-01 00:00 93