Files
flameshot/src/widgets/capture/selectionwidget.h
David Mitchell c63b161025 Symmetric new selection (#1122)
* Move calls to update outside of each input case

* Remove redundant checks when moving selection

* Handle selection clipping the same for each mode

* Fix typo in SelectionWidget enum

* Obligatory "I forgot to clang-format" commit
2021-02-06 20:05:40 -06:00

81 lines
2.1 KiB
C++

// Copyright(c) 2017-2019 Alejandro Sirgo Rica & Contributors
//
// This file is part of Flameshot.
//
// Flameshot is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Flameshot 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Flameshot. If not, see <http://www.gnu.org/licenses/>.
#pragma once
#include <QWidget>
class QPropertyAnimation;
class SelectionWidget : public QWidget
{
Q_OBJECT
public:
enum SideType
{
TOPLEFT_SIDE,
BOTTOMLEFT_SIDE,
TOPRIGHT_SIDE,
BOTTOMRIGHT_SIDE,
TOP_SIDE,
BOTTOM_SIDE,
RIGHT_SIDE,
LEFT_SIDE,
NO_SIDE,
};
explicit SelectionWidget(const QColor& c, QWidget* parent = nullptr);
SideType getMouseSide(const QPoint& point) const;
QVector<QRect> handlerAreas();
void setGeometryAnimated(const QRect& r);
void saveGeometry();
QRect savedGeometry();
protected:
void paintEvent(QPaintEvent*);
void resizeEvent(QResizeEvent*);
void moveEvent(QMoveEvent*);
signals:
void animationEnded();
public slots:
void updateColor(const QColor& c);
private:
void updateAreas();
QPropertyAnimation* m_animation;
QColor m_color;
QPoint m_areaOffset;
QPoint m_handleOffset;
QRect m_geometryBackup;
// naming convention for handles
// T top, B bottom, R Right, L left
// 2 letters: a corner
// 1 letter: the handle on the middle of the corresponding side
QRect m_TLHandle, m_TRHandle, m_BLHandle, m_BRHandle;
QRect m_LHandle, m_THandle, m_RHandle, m_BHandle;
QRect m_TLArea, m_TRArea, m_BLArea, m_BRArea;
QRect m_LArea, m_TArea, m_RArea, m_BArea;
};