22 QGraphicsItem* parent =
nullptr);
24 int outputIndex()
const noexcept {
return m_index; }
25 void setOutputIndex(
int idx);
27 OutputLockMode lockMode{OutputLockMode::Free};
28 double aspectRatio{16.0 / 9.0};
30 void applyLockedState();
32 std::function<void()> onChanged;
34 void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option, QWidget* widget)
38 QVariant itemChange(GraphicsItemChange change,
const QVariant& value)
override;
39 void mousePressEvent(QGraphicsSceneMouseEvent* event)
override;
40 void mouseMoveEvent(QGraphicsSceneMouseEvent* event)
override;
41 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
override;
42 void hoverMoveEvent(QGraphicsSceneHoverEvent* event)
override;
53 int hitTestEdges(
const QPointF& pos)
const;
56 int m_resizeEdges{None};
57 QPointF m_dragStart{};
59 QPointF m_moveAnchorScene{};
60 QPointF m_posAtPress{};
71 void refreshScreens();
73 void setWindowItems(
const std::vector<OutputMapping>& mappings);
74 void addOutput(QPoint pos, QSize size);
75 void removeOutput(
int index);
76 void updateItem(
int index, QPoint pos, QSize size);
77 void selectItem(
int index);
80 QPointF desktopToScene(QPointF desktopPos)
const;
81 QPointF sceneToDesktop(QPointF scenePos)
const;
82 QSizeF desktopSizeToScene(QSize desktopSize)
const;
83 QSize sceneSizeToDesktop(QSizeF sceneSize)
const;
86 int detectScreen(QRect windowRect)
const;
88 bool snapEnabled()
const noexcept {
return m_snapEnabled; }
89 void setSnapEnabled(
bool enabled);
94 std::function<void(
int)> onSelectionChanged;
95 std::function<void(
int)> onItemGeometryChanged;
98 void resizeEvent(QResizeEvent* event)
override;
101 void rebuildScreenRects();
104 QGraphicsScene m_scene;
105 std::vector<QGraphicsRectItem*> m_screenRects;
106 std::vector<QGraphicsSimpleTextItem*> m_screenLabels;
108 QRectF m_virtualDesktopBounds;
109 double m_scaleFactor{1.0};
110 QPointF m_sceneOffset;
111 bool m_snapEnabled{
true};