// Copyright (C) 2016 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0 #pragma once #include "formeditoritem.h" QT_BEGIN_NAMESPACE class QLineF; QT_END_NAMESPACE namespace QmlDesigner { class Snapper { public: enum Snapping { UseSnapping, UseSnappingAndAnchoring, NoSnapping }; Snapper(); void setContainerFormEditorItem(FormEditorItem *formEditorItem); FormEditorItem *containerFormEditorItem() const; void setTransformtionSpaceFormEditorItem(FormEditorItem *formEditorItem); FormEditorItem *transformtionSpaceFormEditorItem() const; double snappedVerticalOffset(const QRectF &boundingRect) const; double snappedHorizontalOffset(const QRectF &boundingRect) const; double snapTopOffset(const QRectF &boundingRect) const; double snapRightOffset(const QRectF &boundingRect) const; double snapLeftOffset(const QRectF &boundingRect) const; double snapBottomOffset(const QRectF &boundingRect) const; QList horizontalSnappedLines(const QRectF &boundingRect, QList *boundingRects = nullptr) const; QList verticalSnappedLines(const QRectF &boundingRect, QList *boundingRects = nullptr) const; void setSnappingDistance(double snappingDistance); double snappingDistance() const; void updateSnappingLines(const QList &exceptionList); void updateSnappingLines(FormEditorItem* exceptionItem); QList generateSnappingLines(const QList &boundingRectList, QGraphicsItem *layerItem, const QTransform &transform); QList generateSnappingLines(const QRectF &boundingRect, QGraphicsItem *layerItem, const QTransform &transform); void adjustAnchoringOfItem(FormEditorItem *formEditorItem); protected: double snappedOffsetForLines(const SnapLineMap &snappingLineMap, double value) const; double snappedOffsetForOffsetLines(const SnapLineMap &snappingOffsetMap, Qt::Orientation orientation, double value, double lowerLimit, double upperLimit) const; QList findSnappingLines(const SnapLineMap &snappingLineMap, Qt::Orientation orientation, double snapLine, double lowerLimit, double upperLimit, QList *boundingRects = nullptr) const; QList findSnappingOffsetLines(const SnapLineMap &snappingOffsetMap, Qt::Orientation orientation, double snapLine, double lowerLimit, double upperLimit, QList *boundingRects = nullptr) const; QLineF createSnapLine(Qt::Orientation orientation, double snapLine, double lowerEdge, double upperEdge, const QRectF &itemRect) const; // bool canSnap(QList snappingLineList, double value) const; private: FormEditorItem *m_containerFormEditorItem; FormEditorItem *m_transformtionSpaceFormEditorItem; double m_snappingDistance; }; } // namespace QmlDesigner