103 lines
4.5 KiB
C++
103 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
|