104 lines
4.5 KiB
C
104 lines
4.5 KiB
C
|
/*****************************************************************************
|
|||
|
* ImageCropper Qt Widget for cropping images
|
|||
|
* Copyright (C) 2013 Dimka Novikov, to@dimkanovikov.pro
|
|||
|
*
|
|||
|
* This library is free software; you can redistribute it and/or
|
|||
|
* modify it under the terms of the GNU Lesser General Public
|
|||
|
* License as published by the Free Software Foundation; either
|
|||
|
* version 3 of the License, or any later version.
|
|||
|
*
|
|||
|
* This library is distributed in the hope that it will be useful,
|
|||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|||
|
* Lesser General Public License for more details.
|
|||
|
*
|
|||
|
* You should have received a copy of the GNU Lesser General Public License
|
|||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||
|
*****************************************************************************/
|
|||
|
|
|||
|
#ifndef IMAGECROPPER_H
|
|||
|
#define IMAGECROPPER_H
|
|||
|
|
|||
|
#include "imagecropper_p.h"
|
|||
|
#include "imagecropper_e.h"
|
|||
|
|
|||
|
#include <QWidget>
|
|||
|
|
|||
|
class ImageCropper : public QWidget
|
|||
|
{
|
|||
|
Q_OBJECT
|
|||
|
|
|||
|
public:
|
|||
|
ImageCropper(QWidget *parent = 0);
|
|||
|
~ImageCropper();
|
|||
|
|
|||
|
public slots:
|
|||
|
// Установить изображение для обрезки
|
|||
|
void setImage(const QPixmap& _image);
|
|||
|
// Установить цвет фона виджета обрезки
|
|||
|
void setBackgroundColor(const QColor& _backgroundColor);
|
|||
|
// Установить цвет рамки области обрезки
|
|||
|
void setCroppingRectBorderColor(const QColor& _borderColor);
|
|||
|
// Установить пропорции области выделения
|
|||
|
void setProportion(const QSizeF& _proportion);
|
|||
|
// Использовать фиксированные пропорции области виделения
|
|||
|
void setProportionFixed(const bool _isFixed);
|
|||
|
|
|||
|
public:
|
|||
|
// Обрезать изображение
|
|||
|
const QPixmap cropImage();
|
|||
|
|
|||
|
protected:
|
|||
|
virtual void paintEvent(QPaintEvent* _event);
|
|||
|
virtual void mousePressEvent(QMouseEvent* _event);
|
|||
|
virtual void mouseMoveEvent(QMouseEvent* _event);
|
|||
|
virtual void mouseReleaseEvent(QMouseEvent* _event);
|
|||
|
|
|||
|
private:
|
|||
|
// Определение местоположения курсора над виджетом
|
|||
|
CursorPosition cursorPosition(const QRectF& _cropRect, const QPointF& _mousePosition);
|
|||
|
// Обновить иконку курсора соответствующую местоположению мыши
|
|||
|
void updateCursorIcon(const QPointF& _mousePosition);
|
|||
|
|
|||
|
// Получить размер виджета после его изменения мышью
|
|||
|
// --------
|
|||
|
// Контракты:
|
|||
|
// 1. Метод должен вызываться, только при зажатой кнопке мыши
|
|||
|
// (т.е. при перемещении или изменении размера виджета)
|
|||
|
// --------
|
|||
|
// В случае неудачи возвращает null-прямоугольник
|
|||
|
const QRectF calculateGeometry(
|
|||
|
const QRectF& _sourceGeometry,
|
|||
|
const CursorPosition _cursorPosition,
|
|||
|
const QPointF& _mouseDelta
|
|||
|
);
|
|||
|
// Получить размер виджета после его изменения мышью
|
|||
|
// Метод изменяет виджет не сохраняя начальных пропорций сторон
|
|||
|
// ------
|
|||
|
// Контракты:
|
|||
|
// 1. Метод должен вызываться, только при зажатой кнопке мыши
|
|||
|
// (т.е. при перемещении или изменении размера виджета)
|
|||
|
const QRectF calculateGeometryWithCustomProportions(
|
|||
|
const QRectF& _sourceGeometry,
|
|||
|
const CursorPosition _cursorPosition,
|
|||
|
const QPointF& _mouseDelta
|
|||
|
);
|
|||
|
// Получить размер виджета после его изменения мышью
|
|||
|
// Метод изменяет виджет сохраняя начальные пропорции сторон
|
|||
|
// ------
|
|||
|
// Контракты:
|
|||
|
// 1. Метод должен вызываться, только при зажатой кнопке мыши
|
|||
|
// (т.е. при перемещении или изменении размера виджета)
|
|||
|
const QRectF calculateGeometryWithFixedProportions(const QRectF &_sourceGeometry,
|
|||
|
const CursorPosition _cursorPosition,
|
|||
|
const QPointF &_mouseDelta,
|
|||
|
const QSizeF &_deltas
|
|||
|
);
|
|||
|
|
|||
|
private:
|
|||
|
// Private data implementation
|
|||
|
ImageCropperPrivate* pimpl;
|
|||
|
};
|
|||
|
|
|||
|
#endif // IMAGECROPPER_H
|