19 QGraphicsItem* parent =
nullptr);
21 int outputIndex()
const noexcept {
return m_index; }
22 void setOutputIndex(
int idx);
26 QPoint windowPosition{0, 0};
27 QSize windowSize{1280, 720};
28 bool fullscreen{
false};
39 OutputLockMode lockMode{OutputLockMode::Free};
45 void applyLockedState();
48 std::function<void()> onChanged;
50 void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option, QWidget* widget)
54 QVariant itemChange(GraphicsItemChange change,
const QVariant& value)
override;
55 void mousePressEvent(QGraphicsSceneMouseEvent* event)
override;
56 void mouseMoveEvent(QGraphicsSceneMouseEvent* event)
override;
57 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
override;
58 void hoverMoveEvent(QGraphicsSceneHoverEvent* event)
override;
69 int hitTestEdges(
const QPointF& pos)
const;
79 BlendHandle hitTestBlendHandles(
const QPointF& pos)
const;
82 int m_resizeEdges{None};
83 BlendHandle m_blendHandle{BlendNone};
84 QPointF m_dragStart{};
86 QPointF m_moveAnchorScene{};
87 QPointF m_posAtPress{};
97 void setMappings(
const std::vector<OutputMapping>& mappings);
98 std::vector<OutputMapping> getMappings()
const;
101 void removeSelectedOutput();
103 void updateAspectRatio(
int inputWidth,
int inputHeight);
105 double canvasWidth()
const noexcept {
return m_canvasWidth; }
106 double canvasHeight()
const noexcept {
return m_canvasHeight; }
108 bool snapEnabled()
const noexcept {
return m_snapEnabled; }
109 void setSnapEnabled(
bool enabled);
113 void enterWarpMode(
int outputIndex);
115 bool inWarpMode()
const noexcept {
return m_warpItemIndex >= 0; }
118 std::function<void(
int)> onSelectionChanged;
119 std::function<void(
int)> onItemGeometryChanged;
120 std::function<void()> onWarpChanged;
123 void resizeEvent(QResizeEvent* event)
override;
124 void mouseDoubleClickEvent(QMouseEvent* event)
override;
125 void mousePressEvent(QMouseEvent* event)
override;
126 void mouseMoveEvent(QMouseEvent* event)
override;
127 void mouseReleaseEvent(QMouseEvent* event)
override;
128 void keyPressEvent(QKeyEvent* event)
override;
132 void updateWarpVisuals();
135 QGraphicsScene m_scene;
136 QGraphicsRectItem* m_border{};
137 double m_canvasWidth{400.0};
138 double m_canvasHeight{300.0};
139 bool m_snapEnabled{
true};
142 int m_warpItemIndex{-1};
143 QGraphicsEllipseItem* m_warpHandles[4]{};
144 QGraphicsPolygonItem* m_warpQuad{};
145 std::vector<QGraphicsLineItem*> m_warpGrid;
146 bool m_warpDragging{
false};
147 int m_warpDragHandle{-1};
148 QPointF m_warpHandleAnchor{};
149 QPointF m_warpMouseAnchor{};