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};
41 void applyLockedState();
44 std::function<void()> onChanged;
46 void paint(QPainter* painter,
const QStyleOptionGraphicsItem* option, QWidget* widget)
50 QVariant itemChange(GraphicsItemChange change,
const QVariant& value)
override;
51 void mousePressEvent(QGraphicsSceneMouseEvent* event)
override;
52 void mouseMoveEvent(QGraphicsSceneMouseEvent* event)
override;
53 void mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
override;
54 void hoverMoveEvent(QGraphicsSceneHoverEvent* event)
override;
65 int hitTestEdges(
const QPointF& pos)
const;
75 BlendHandle hitTestBlendHandles(
const QPointF& pos)
const;
78 int m_resizeEdges{None};
79 BlendHandle m_blendHandle{BlendNone};
80 QPointF m_dragStart{};
82 QPointF m_moveAnchorScene{};
83 QPointF m_posAtPress{};
93 void setMappings(
const std::vector<OutputMapping>& mappings);
94 std::vector<OutputMapping> getMappings()
const;
97 void removeSelectedOutput();
99 void updateAspectRatio(
int inputWidth,
int inputHeight);
101 double canvasWidth()
const noexcept {
return m_canvasWidth; }
102 double canvasHeight()
const noexcept {
return m_canvasHeight; }
104 bool snapEnabled()
const noexcept {
return m_snapEnabled; }
105 void setSnapEnabled(
bool enabled);
109 void enterWarpMode(
int outputIndex);
111 bool inWarpMode()
const noexcept {
return m_warpItemIndex >= 0; }
114 std::function<void(
int)> onSelectionChanged;
115 std::function<void(
int)> onItemGeometryChanged;
116 std::function<void()> onWarpChanged;
119 void resizeEvent(QResizeEvent* event)
override;
120 void mouseDoubleClickEvent(QMouseEvent* event)
override;
121 void mousePressEvent(QMouseEvent* event)
override;
122 void mouseMoveEvent(QMouseEvent* event)
override;
123 void mouseReleaseEvent(QMouseEvent* event)
override;
124 void keyPressEvent(QKeyEvent* event)
override;
128 void updateWarpVisuals();
131 QGraphicsScene m_scene;
132 QGraphicsRectItem* m_border{};
133 double m_canvasWidth{400.0};
134 double m_canvasHeight{300.0};
135 bool m_snapEnabled{
true};
138 int m_warpItemIndex{-1};
139 QGraphicsEllipseItem* m_warpHandles[4]{};
140 QGraphicsPolygonItem* m_warpQuad{};
141 std::vector<QGraphicsLineItem*> m_warpGrid;
142 bool m_warpDragging{
false};
143 int m_warpDragHandle{-1};
144 QPointF m_warpHandleAnchor{};
145 QPointF m_warpMouseAnchor{};