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 };