File: dimageviewer.h

package info (click to toggle)
dtkwidget 5.7.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 36,540 kB
  • sloc: cpp: 63,257; ansic: 132; python: 88; sh: 42; makefile: 13
file content (83 lines) | stat: -rw-r--r-- 2,450 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

#ifndef DIMAGEVIEWER_H
#define DIMAGEVIEWER_H

#include <dtkwidget_global.h>
#include <DGraphicsView>
#include <DObject>

DWIDGET_BEGIN_NAMESPACE

class DImageViewerPrivate;
class LIBDTKWIDGETSHARED_EXPORT DImageViewer : public DGraphicsView, public DCORE_NAMESPACE::DObject
{
    Q_OBJECT

    Q_PROPERTY(QImage image READ image WRITE setImage NOTIFY imageChanged)
    Q_PROPERTY(QString fileName READ fileName WRITE setFileName NOTIFY fileNameChanged)
    Q_PROPERTY(qreal scaleFactor READ scaleFactor WRITE setScaleFactor NOTIFY scaleFactorChanged)
    Q_PROPERTY(int rotateAngle READ rotateAngle NOTIFY rotateAngleChanged) 

public:
    explicit DImageViewer(QWidget *parent = nullptr);
    explicit DImageViewer(const QImage &image, QWidget *parent = nullptr);
    explicit DImageViewer(const QString &fileName, QWidget *parent = nullptr);
    ~DImageViewer() Q_DECL_OVERRIDE;

    QImage image() const;
    void setImage(const QImage &image);
    QString fileName() const;
    void setFileName(const QString &fileName);

    qreal scaleFactor() const;
    void setScaleFactor(qreal factor);
    void scaleImage(qreal factor);

    void autoFitImage();
    void fitToWidget();
    void fitNormalSize();
    void rotateClockwise();
    void rotateCounterclockwise();
    int rotateAngle() const;
    void resetRotateAngle();
    void clear();

    void centerOn(qreal x, qreal y);
    QRect visibleImageRect() const;

    Q_SLOT void scaleAtPoint(QPoint pos, qreal factor);

    void beginCropImage();
    void endCropImage();
    void resetCropImage();
    void setCropAspectRatio(qreal w, qreal h);
    QRect cropImageRect() const;

Q_SIGNALS:
    void imageChanged(const QImage &image);
    void fileNameChanged(const QString &fileName);
    void scaleFactorChanged(qreal scaleFactor);
    void rotateAngleChanged(int angle);
    void transformChanged();
    void requestPreviousImage();
    void requestNextImage();
    void cropImageChanged(const QRect &rect);

protected:
    void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
    void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
    bool event(QEvent *event) Q_DECL_OVERRIDE;

private:
    Q_DISABLE_COPY(DImageViewer)
    D_DECLARE_PRIVATE(DImageViewer)

    D_PRIVATE_SLOT(void _q_pinchAnimeFinished())
};

DWIDGET_END_NAMESPACE

#endif // DIMAGEVIEWER_H