cf12defd28
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
152 lines
4.1 KiB
C++
152 lines
4.1 KiB
C++
/*
|
|
This file is part of the KDE libraries
|
|
SPDX-FileCopyrightText: 2004 Antonio Larrosa <larrosa@kde.org>
|
|
|
|
SPDX-License-Identifier: LGPL-2.0-or-later
|
|
*/
|
|
|
|
#ifndef KPIXMAPREGIONSELECTORWIDGET_H
|
|
#define KPIXMAPREGIONSELECTORWIDGET_H
|
|
|
|
#include <kwidgetsaddons_export.h>
|
|
|
|
#include <QPixmap>
|
|
#include <QWidget>
|
|
#include <memory>
|
|
|
|
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 <larrosa@kde.org>
|
|
*/
|
|
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<class KPixmapRegionSelectorWidgetPrivate> const d;
|
|
|
|
Q_DISABLE_COPY(KPixmapRegionSelectorWidget)
|
|
};
|
|
|
|
#endif
|