File: ImageView.h

package info (click to toggle)
kwave 25.04.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 23,272 kB
  • sloc: cpp: 56,173; xml: 817; perl: 688; sh: 57; makefile: 11
file content (134 lines) | stat: -rw-r--r-- 4,280 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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/***************************************************************************
            ImageView.h  -  simple widget class for displaying a QImage
                             -------------------
    begin                : 1999
    copyright            : (C) 1999 by Martin Wilz
    email                : Martin Wilz <mwilz@ernie.mi.uni-koeln.de>
 ***************************************************************************/

/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   (at your option) any later version.                                   *
 *                                                                         *
 ***************************************************************************/

#ifndef IMAGEVIEW_H
#define IMAGEVIEW_H

#include "config.h"
#include "libkwavegui_export.h"

#include <QtGlobal>
#include <QImage>
#include <QPainter>
#include <QWidget>

namespace Kwave
{
    /**
     * Simple widget class for displaying a QImage.
     */
    class LIBKWAVEGUI_EXPORT ImageView: public QWidget
    {
        Q_OBJECT
    public:
        /**
         * Constructor.
         * @param parent pointer to the parent widget, can be 0
         * @param fit_width if set to true, the image will be scaled to fit
         *        horizontally into the widget; if false the image will be
         *        cut off at the edge and should be scrolled
         * @param fit_height if set to true, the image will be scaled to fit
         *        vertically into the widget; if false the image will be
         *        cut off at the edge and should be scrolled
         */
        explicit ImageView(QWidget *parent = nullptr,
                           bool fit_width  = true,
                           bool fit_height = true);

        /**
         * Destructor
         */
        ~ImageView() override;

        /**
         * Returns the position and size of the current image, packed
         * into a QRect object.
         * @return rectangle with the image coordinates and size
         */
        QRect imageRect();

    public slots:

        /**
        * Sets a new QImage for displaying.
        * @param image a pointer to the image
        */
        void setImage(QImage image);

        /** sets a new horizontal offset, useful for scrolling */
        void setHorizOffset(int offset);

        /** sets a new vertical offset, useful for scrolling */
        void setVertOffset(int offset);

    signals:

        void viewInfo(int, int, int);
        void sigCursorPos(const QPoint pos);

    protected:

        void mouseMoveEvent(QMouseEvent *e) override;

        void mousePressEvent(QMouseEvent *e) override;

        void paintEvent(QPaintEvent *) override;

    private:
        /**
         * offset of the image, in original unscaled coordinates
         * of the internal QImage
         */
        QPoint m_offset;

        /**
         * last displayed image rectangle. Note that the left and
         * top coordinates are unscaled, but the width and height
         * might be scaled to screen coordinates!
         */
        QRect m_last_rect;

        /** pointer to the QImage to be displayed */
        QImage m_image;

        /** if true, scale to fit horizontally */
        bool m_fit_width;

        /** if true, scale to fit vertically */
        bool m_fit_height;

        /**
         * scale factor in horizontal direction, will be
         * (width of the image / width of the widget) if m_fit_width
         * is true, or 1.0 else
         */
        double m_scale_x;

        /**
         * scale factor in vertical direction, will be
         * (height of the image / height of the widget) if m_fit_height
         * is true, or 1.0 else
         */
        double m_scale_y;

    };
}

#endif // _IMAGEVIEW_H_

//***************************************************************************
//***************************************************************************