/***************************************************************************** * 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 . *****************************************************************************/ #ifndef IMAGECROPPER_H #define IMAGECROPPER_H #include "imagecropper_p.h" #include "imagecropper_e.h" #include 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