diff --git a/app/node/generator/matrix/matrix.cpp b/app/node/generator/matrix/matrix.cpp index 66e7f57af..55f87357e 100644 --- a/app/node/generator/matrix/matrix.cpp +++ b/app/node/generator/matrix/matrix.cpp @@ -97,6 +97,7 @@ NodeValueTable MatrixGenerator::Value(NodeValueDatabase &value) const return output; } +/* bool MatrixGenerator::HasGizmos() const { return true; @@ -105,7 +106,6 @@ bool MatrixGenerator::HasGizmos() const void MatrixGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p, const QVector2D &scale) const { // FIXME: Implement this properly - /* p->setPen(Qt::white); // Fold values into a matrix @@ -116,8 +116,8 @@ void MatrixGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p, const QVect // Draw ellipse p->drawEllipse(QRect(0, 0, 100, 100)); - */ } +*/ QMatrix4x4 MatrixGenerator::GenerateMatrix(NodeValueDatabase &value) const { diff --git a/app/node/generator/matrix/matrix.h b/app/node/generator/matrix/matrix.h index 901c3dc29..fce9c3a8d 100644 --- a/app/node/generator/matrix/matrix.h +++ b/app/node/generator/matrix/matrix.h @@ -43,8 +43,8 @@ public: virtual NodeValueTable Value(NodeValueDatabase& value) const override; - virtual bool HasGizmos() const override; - virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p, const QVector2D &scale) const override; + //virtual bool HasGizmos() const override; + //virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p, const QVector2D &scale) const override; private: QMatrix4x4 GenerateMatrix(NodeValueDatabase& value) const; diff --git a/app/node/generator/polygon/polygon.cpp b/app/node/generator/polygon/polygon.cpp index 15ed05561..f14e4fa55 100644 --- a/app/node/generator/polygon/polygon.cpp +++ b/app/node/generator/polygon/polygon.cpp @@ -20,6 +20,7 @@ #include "polygon.h" +#include #include OLIVE_NAMESPACE_ENTER @@ -99,30 +100,20 @@ bool PolygonGenerator::HasGizmos() const return true; } -void PolygonGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p, const QVector2D &scale) const +void PolygonGenerator::DrawGizmos(const NodeValueDatabase &db, QPainter *p, const QVector2D &scale) const { if (!points_input_->GetSize()) { return; } - QVector points(points_input_->GetSize()); - p->setPen(Qt::white); p->setBrush(Qt::white); - int rect_sz = p->fontMetrics().height() / 8; + QVector points = GetGizmoCoordinates(db, scale); + QVector rects = GetGizmoRects(points); - for (int i=0;iGetSize();i++) { - QVector2D v = db[points_input_->At(i)].Take(NodeParam::kVec2).value(); - - v *= scale; - - QPointF pt = v.toPointF(); - points[i] = pt; - - QRectF rect(pt - QPointF(rect_sz, rect_sz), - pt + QPointF(rect_sz, rect_sz)); - p->drawRect(rect); + foreach (const QRectF& r, rects) { + p->drawRect(r); } points.append(points.first()); @@ -130,4 +121,62 @@ void PolygonGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p, const QVec p->drawPolyline(points.constData(), points.size()); } +bool PolygonGenerator::GizmoPress(const NodeValueDatabase &db, const QPointF &p, const QVector2D &scale) +{ + QVector points = GetGizmoCoordinates(db, scale); + QVector rects = GetGizmoRects(points); + + for (int i=0;iAt(i); + gizmo_drag_start_ = points.at(i); + return true; + } + } + + return false; +} + +void PolygonGenerator::GizmoMove(const QPointF &p, const QVector2D &scale) +{ + QVector2D new_pos = QVector2D(p) / scale; + + gizmo_drag_->set_standard_value(new_pos.x(), 0); + gizmo_drag_->set_standard_value(new_pos.y(), 1); +} + +QVector PolygonGenerator::GetGizmoCoordinates(const NodeValueDatabase &db, const QVector2D& scale) const +{ + QVector points(points_input_->GetSize()); + + for (int i=0;iGetSize();i++) { + QVector2D v = db[points_input_->At(i)].Get(NodeParam::kVec2).value(); + + v *= scale; + + QPointF pt = v.toPointF(); + points[i] = pt; + } + + return points; +} + +QVector PolygonGenerator::GetGizmoRects(const QVector &points) const +{ + QVector rects(points.size()); + + int rect_sz = QFontMetrics(qApp->font()).height() / 8; + + for (int i=0;i GetGizmoCoordinates(const NodeValueDatabase &db, const QVector2D &scale) const; + + QVector GetGizmoRects(const QVector& points) const; + NodeInputArray* points_input_; NodeInput* color_input_; + NodeInput* gizmo_drag_; + QPointF gizmo_drag_start_; + }; OLIVE_NAMESPACE_EXIT diff --git a/app/node/node.cpp b/app/node/node.cpp index 724b77fe2..7a1b54b1a 100644 --- a/app/node/node.cpp +++ b/app/node/node.cpp @@ -287,16 +287,16 @@ bool Node::HasGizmos() const return false; } -void Node::DrawGizmos(NodeValueDatabase &, QPainter *, const QVector2D &) const +void Node::DrawGizmos(const NodeValueDatabase &, QPainter *, const QVector2D &) const { } -bool Node::GizmoPress(const QPointF &) +bool Node::GizmoPress(const NodeValueDatabase &, const QPointF &, const QVector2D &) { return false; } -void Node::GizmoMove(const QPointF &) +void Node::GizmoMove(const QPointF &, const QVector2D &) { } diff --git a/app/node/node.h b/app/node/node.h index acfe96d65..b97e0fdf1 100644 --- a/app/node/node.h +++ b/app/node/node.h @@ -383,10 +383,10 @@ public: virtual bool HasGizmos() const; - virtual void DrawGizmos(NodeValueDatabase& db, QPainter* p, const QVector2D &scale) const; + virtual void DrawGizmos(const NodeValueDatabase& db, QPainter* p, const QVector2D &scale) const; - virtual bool GizmoPress(const QPointF& p); - virtual void GizmoMove(const QPointF& p); + virtual bool GizmoPress(const NodeValueDatabase& db, const QPointF& p, const QVector2D &scale); + virtual void GizmoMove(const QPointF& p, const QVector2D &scale); virtual void GizmoRelease(const QPointF& p); const QString& GetLabel() const; diff --git a/app/widget/nodeparamview/nodeparamviewarraywidget.cpp b/app/widget/nodeparamview/nodeparamviewarraywidget.cpp index 46418bb92..3e6df5614 100644 --- a/app/widget/nodeparamview/nodeparamviewarraywidget.cpp +++ b/app/widget/nodeparamview/nodeparamviewarraywidget.cpp @@ -31,9 +31,12 @@ NodeParamViewArrayWidget::NodeParamViewArrayWidget(NodeInputArray* array, QWidge QHBoxLayout* layout = new QHBoxLayout(this); count_lbl_ = new QLabel(); - layout->addWidget(count_lbl_, 1); + layout->addWidget(count_lbl_); + + layout->addStretch(); plus_btn_ = new QPushButton(tr("+")); + plus_btn_->setFixedWidth(plus_btn_->sizeHint().height()); layout->addWidget(plus_btn_); connect(plus_btn_, &QPushButton::clicked, this, &NodeParamViewArrayWidget::AddElement); diff --git a/app/widget/viewer/viewerdisplay.cpp b/app/widget/viewer/viewerdisplay.cpp index 22af4c754..e901dd6d5 100644 --- a/app/widget/viewer/viewerdisplay.cpp +++ b/app/widget/viewer/viewerdisplay.cpp @@ -192,7 +192,7 @@ void ViewerDisplayWidget::SetTime(const rational &time) void ViewerDisplayWidget::mousePressEvent(QMouseEvent *event) { if (gizmos_) { - if (gizmos_->GizmoPress(GetTexturePosition(event->pos()))) { + if (gizmos_->GizmoPress(gizmo_db_, event->pos(), QVector2D(GetTexturePosition(size())))) { gizmo_click_ = true; return; } @@ -206,7 +206,7 @@ void ViewerDisplayWidget::mousePressEvent(QMouseEvent *event) void ViewerDisplayWidget::mouseMoveEvent(QMouseEvent *event) { if (gizmo_click_) { - gizmos_->GizmoMove(GetTexturePosition(event->pos())); + gizmos_->GizmoMove(event->pos(), QVector2D(GetTexturePosition(size()))); return; } @@ -296,10 +296,10 @@ void ViewerDisplayWidget::paintGL() rational node_time = GetAdjustedTime(GetTimeTarget(), gizmos_, time_, NodeParam::kInput); - NodeValueDatabase db = gt.GenerateDatabase(gizmos_, TimeRange(node_time, node_time)); + gizmo_db_ = gt.GenerateDatabase(gizmos_, TimeRange(node_time, node_time)); QPainter p(this); - gizmos_->DrawGizmos(db, &p, QVector2D(GetTexturePosition(size()))); + gizmos_->DrawGizmos(gizmo_db_, &p, QVector2D(GetTexturePosition(size()))); } // Draw action/title safe areas diff --git a/app/widget/viewer/viewerdisplay.h b/app/widget/viewer/viewerdisplay.h index a9903075e..eb020b9db 100644 --- a/app/widget/viewer/viewerdisplay.h +++ b/app/widget/viewer/viewerdisplay.h @@ -189,6 +189,8 @@ private: Node* gizmos_; + NodeValueDatabase gizmo_db_; + VideoRenderingParams gizmo_params_; bool gizmo_click_;