/* This file is part of the KDE libraries SPDX-FileCopyrightText: 2004 Antonio Larrosa SPDX-License-Identifier: LGPL-2.0-or-later */ #ifndef KPIXMAPREGIONSELECTORWIDGET_H #define KPIXMAPREGIONSELECTORWIDGET_H #include #include #include #include class QMenu; /** * @class KPixmapRegionSelectorWidget kpixmapregionselectorwidget.h KPixmapRegionSelectorWidget * * KPixmapRegionSelectorWidget is a widget that shows a picture and provides the * user with a friendly way to select a rectangular subregion of the pixmap. * * \image html kpixmapregionselectorwidget.png "KPixmapRegionSelectorWidget" * * @author Antonio Larrosa */ class KWIDGETSADDONS_EXPORT KPixmapRegionSelectorWidget : public QWidget { Q_OBJECT Q_PROPERTY(QPixmap pixmap READ pixmap WRITE setPixmap) public: /** * This enum provides a rotation direction. * @see KPixmapRegionSelectorWidget::rotate() */ enum RotateDirection { Rotate90, //!< Rotate 90 degrees to the right. Rotate180, //!< Rotate 180 degrees. Rotate270 //!< Rotate 90 degrees to the left. }; /** * Constructor for a KPixmapRegionSelectorWidget. */ explicit KPixmapRegionSelectorWidget(QWidget *parent = nullptr); /** * Destructor for a KPixmapRegionSelectorWidget */ ~KPixmapRegionSelectorWidget() override; /** * Sets the pixmap which will be shown for the user to select a region from. * @param pixmap The pixmap. Must be non-null. * */ void setPixmap(const QPixmap &pixmap); /** * @return the original whole pixmap that we're using in this widget as the * pixmap the user is selecting a region from. */ QPixmap pixmap() const; /** * Sets the selected region to be @p rect (in zoomed pixmap coordinates) */ void setSelectedRegion(const QRect &rect); /** * Returns the selected region ( in zoomed pixmap coordinates ) */ QRect selectedRegion() const; /** * Returns the selected region ( in unzoomed, original pixmap coordinates ) */ QRect unzoomedSelectedRegion() const; /** * Resets the selection to use the whole image */ void resetSelection(); /** * @returns a QImage object with just the region the user selected from the * image */ QImage selectedImage() const; /** * Sets the aspect ration that the selected subimage should have. The way to * select it, is specifying an example valid @p width and @p height. * @see setFreeSelectionAspectRatio() */ void setSelectionAspectRatio(int width, int height); /** * Allows the user to do a selection which has any aspect ratio. This is * the default. * @see setSelectionAspectRatio() */ void setFreeSelectionAspectRatio(); /** * Sets the maximum size for the widget. If the image is larger than this * (either horizontally or vertically), it's scaled to adjust to the maximum * size (preserving the aspect ratio) */ void setMaximumWidgetSize(int width, int height); /** * Rotates the image as specified by the @p direction parameter, also tries * to rotate the selected region so that it doesn't change, as long as the * forced aspect ratio setting is respected, in other case, the selected region * is reset. */ void rotate(RotateDirection direction); public Q_SLOTS: /** * Rotates the current image 90º clockwise */ void rotateClockwise(); /** * Rotates the current image 90º counterclockwise */ void rotateCounterclockwise(); Q_SIGNALS: void pixmapRotated(); protected: /** * Creates a QMenu with the menu that appears when clicking with the right button on the label */ virtual QMenu *createPopupMenu(); bool eventFilter(QObject *obj, QEvent *ev) override; private: friend class KPixmapRegionSelectorWidgetPrivate; std::unique_ptr const d; Q_DISABLE_COPY(KPixmapRegionSelectorWidget) }; #endif