File indexing completed on 2024-05-12 17:08:56

0001 /*
0002     SPDX-FileCopyrightText: 2019 Marco Martin <mart@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include <QQuickItem>
0010 
0011 #include "configoverlay.h"
0012 
0013 class ResizeHandle : public QQuickItem
0014 {
0015     Q_OBJECT
0016     Q_PROPERTY(Corner resizeCorner MEMBER m_resizeCorner NOTIFY resizeCornerChanged)
0017     Q_PROPERTY(bool resizeBlocked READ resizeBlocked NOTIFY resizeBlockedChanged)
0018     Q_PROPERTY(bool pressed READ isPressed NOTIFY pressedChanged)
0019 
0020 public:
0021     enum Corner {
0022         Left = 0,
0023         TopLeft,
0024         Top,
0025         TopRight,
0026         Right,
0027         BottomRight,
0028         Bottom,
0029         BottomLeft,
0030     };
0031     Q_ENUMS(Corner)
0032 
0033     ResizeHandle(QQuickItem *parent = nullptr);
0034     ~ResizeHandle();
0035 
0036     bool resizeBlocked() const;
0037 
0038     void setPressed(bool pressed);
0039     bool isPressed() const;
0040 
0041 protected:
0042     void mousePressEvent(QMouseEvent *event) override;
0043     void mouseReleaseEvent(QMouseEvent *event) override;
0044     void mouseMoveEvent(QMouseEvent *event) override;
0045     void mouseUngrabEvent() override;
0046 
0047 Q_SIGNALS:
0048     void resizeCornerChanged();
0049     void resizeBlockedChanged();
0050     void pressedChanged();
0051 
0052 private:
0053     void setConfigOverlay(ConfigOverlay *configOverlay);
0054 
0055     inline bool resizeLeft() const;
0056     inline bool resizeTop() const;
0057     inline bool resizeRight() const;
0058     inline bool resizeBottom() const;
0059     void setResizeBlocked(bool width, bool height);
0060 
0061     QPointF m_mouseDownPosition;
0062     QRectF m_mouseDownGeometry;
0063 
0064     QPointer<ConfigOverlay> m_configOverlay;
0065     Corner m_resizeCorner = Left;
0066     bool m_resizeWidthBlocked = false;
0067     bool m_resizeHeightBlocked = false;
0068     bool m_pressed = false;
0069 };