1/*
2 This file is part of the KDE libraries
3 SPDX-FileCopyrightText: 2004 Antonio Larrosa <larrosa@kde.org>
4
5 SPDX-License-Identifier: LGPL-2.0-or-later
6*/
7
8#ifndef KPIXMAPREGIONSELECTORWIDGET_H
9#define KPIXMAPREGIONSELECTORWIDGET_H
10
11#include <kwidgetsaddons_export.h>
12
13#include <QPixmap>
14#include <QWidget>
15#include <memory>
16
17class QMenu;
18
19/**
20 * @class KPixmapRegionSelectorWidget kpixmapregionselectorwidget.h KPixmapRegionSelectorWidget
21 *
22 * KPixmapRegionSelectorWidget is a widget that shows a picture and provides the
23 * user with a friendly way to select a rectangular subregion of the pixmap.
24 *
25 * \image html kpixmapregionselectorwidget.png "KPixmapRegionSelectorWidget"
26 *
27 * @author Antonio Larrosa <larrosa@kde.org>
28 */
29class KWIDGETSADDONS_EXPORT KPixmapRegionSelectorWidget : public QWidget
30{
31 Q_OBJECT
32 Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap)
33
34public:
35 /**
36 * This enum provides a rotation direction.
37 * @see KPixmapRegionSelectorWidget::rotate()
38 */
39 enum RotateDirection {
40 Rotate90, //!< Rotate 90 degrees to the right.
41 Rotate180, //!< Rotate 180 degrees.
42 Rotate270 //!< Rotate 90 degrees to the left.
43 };
44
45 /**
46 * Constructor for a KPixmapRegionSelectorWidget.
47 */
48 explicit KPixmapRegionSelectorWidget(QWidget *parent = nullptr);
49
50 /**
51 * Destructor for a KPixmapRegionSelectorWidget
52 */
53 ~KPixmapRegionSelectorWidget() override;
54
55 /**
56 * Sets the pixmap which will be shown for the user to select a region from.
57 * @param pixmap The pixmap. Must be non-null.
58 *
59 */
60 void setPixmap(const QPixmap &pixmap);
61
62 /**
63 * @return the original whole pixmap that we're using in this widget as the
64 * pixmap the user is selecting a region from.
65 */
66 QPixmap pixmap() const;
67
68 /**
69 * Sets the selected region to be @p rect (in zoomed pixmap coordinates)
70 */
71 void setSelectedRegion(const QRect &rect);
72
73 /**
74 * Returns the selected region ( in zoomed pixmap coordinates )
75 */
76 QRect selectedRegion() const;
77
78 /**
79 * Returns the selected region ( in unzoomed, original pixmap coordinates )
80 */
81 QRect unzoomedSelectedRegion() const;
82
83 /**
84 * Resets the selection to use the whole image
85 */
86 void resetSelection();
87
88 /**
89 * @returns a QImage object with just the region the user selected from the
90 * image
91 */
92 QImage selectedImage() const;
93
94 /**
95 * Sets the aspect ration that the selected subimage should have. The way to
96 * select it, is specifying an example valid @p width and @p height.
97 * @see setFreeSelectionAspectRatio()
98 */
99 void setSelectionAspectRatio(int width, int height);
100
101 /**
102 * Allows the user to do a selection which has any aspect ratio. This is
103 * the default.
104 * @see setSelectionAspectRatio()
105 */
106 void setFreeSelectionAspectRatio();
107
108 /**
109 * Sets the maximum size for the widget. If the image is larger than this
110 * (either horizontally or vertically), it's scaled to adjust to the maximum
111 * size (preserving the aspect ratio)
112 */
113 void setMaximumWidgetSize(int width, int height);
114
115 /**
116 * Rotates the image as specified by the @p direction parameter, also tries
117 * to rotate the selected region so that it doesn't change, as long as the
118 * forced aspect ratio setting is respected, in other case, the selected region
119 * is reset.
120 */
121 void rotate(RotateDirection direction);
122
123public Q_SLOTS:
124 /**
125 * Rotates the current image 90º clockwise
126 */
127 void rotateClockwise();
128 /**
129 * Rotates the current image 90º counterclockwise
130 */
131 void rotateCounterclockwise();
132
133Q_SIGNALS:
134 void pixmapRotated();
135
136protected:
137 /**
138 * Creates a QMenu with the menu that appears when clicking with the right button on the label
139 */
140 virtual QMenu *createPopupMenu();
141
142 bool eventFilter(QObject *obj, QEvent *ev) override;
143
144private:
145 friend class KPixmapRegionSelectorWidgetPrivate;
146 std::unique_ptr<class KPixmapRegionSelectorWidgetPrivate> const d;
147
148 Q_DISABLE_COPY(KPixmapRegionSelectorWidget)
149};
150
151#endif
152

source code of kwidgetsaddons/src/kpixmapregionselectorwidget.h