19 QGraphicsItem* parent =
nullptr);
21 int outputIndex()
const noexcept {
return m_index; }
22 void setOutputIndex(
int idx);
26 QPoint windowPosition{defaultWindowPosition};
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);
115 void setLockToBorderEnabled(
bool enabled);
119 void enterWarpMode(
int outputIndex);
121 bool inWarpMode() const noexcept {
return m_warpItemIndex >= 0; }
124 std::function<void(
int)> onSelectionChanged;
125 std::function<void(
int)> onItemGeometryChanged;
126 std::function<void()> onWarpChanged;
129 void resizeEvent(QResizeEvent* event)
override;
130 void mouseDoubleClickEvent(QMouseEvent* event)
override;
131 void mousePressEvent(QMouseEvent* event)
override;
132 void mouseMoveEvent(QMouseEvent* event)
override;
133 void mouseReleaseEvent(QMouseEvent* event)
override;
134 void keyPressEvent(QKeyEvent* event)
override;
137 void setupItemCallbacks(OutputMappingItem* item);
138 void updateWarpVisuals();
139 OutputMappingItem* findItemByIndex(
int index)
const;
141 QGraphicsScene m_scene;
142 QGraphicsRectItem* m_border{};
143 double m_canvasWidth{400.0};
144 double m_canvasHeight{300.0};
145 bool m_snapEnabled{
true};
146 bool m_lockToBorder{
true};
149 int m_warpItemIndex{-1};
150 QGraphicsEllipseItem* m_warpHandles[4]{};
151 QGraphicsPolygonItem* m_warpQuad{};
152 std::vector<QGraphicsLineItem*> m_warpGrid;
153 bool m_warpDragging{
false};
154 int m_warpDragHandle{-1};
155 QPointF m_warpHandleAnchor{};
156 QPointF m_warpMouseAnchor{};