gizmos: use scale instead of matrix transform
Improves appearance of gizmos lines and ensures other controls are drawn in UI dimensions rather than texture dimensions.
This commit is contained in:
@@ -102,7 +102,7 @@ bool MatrixGenerator::HasGizmos() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void MatrixGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p) const
|
||||
void MatrixGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p, const QVector2D &scale) const
|
||||
{
|
||||
p->setPen(Qt::white);
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ public:
|
||||
virtual NodeValueTable Value(NodeValueDatabase& value) const override;
|
||||
|
||||
virtual bool HasGizmos() const override;
|
||||
virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p) const override;
|
||||
virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p, const QVector2D &scale) const override;
|
||||
|
||||
private:
|
||||
QMatrix4x4 GenerateMatrix(NodeValueDatabase& value) const;
|
||||
|
||||
@@ -68,9 +68,9 @@ QString PolygonGenerator::id() const
|
||||
return QStringLiteral("org.olivevideoeditor.Olive.polygon");
|
||||
}
|
||||
|
||||
QString PolygonGenerator::Category() const
|
||||
QList<Node::CategoryID> PolygonGenerator::Category() const
|
||||
{
|
||||
return tr("Generator");
|
||||
return {kCategoryGenerator};
|
||||
}
|
||||
|
||||
QString PolygonGenerator::Description() const
|
||||
@@ -99,22 +99,35 @@ bool PolygonGenerator::HasGizmos() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void PolygonGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p) const
|
||||
void PolygonGenerator::DrawGizmos(NodeValueDatabase &db, QPainter *p, const QVector2D &scale) const
|
||||
{
|
||||
if (!points_input_->GetSize()) {
|
||||
return;
|
||||
}
|
||||
|
||||
QVector<QPointF> points(points_input_->GetSize());
|
||||
|
||||
p->setPen(Qt::white);
|
||||
p->setBrush(Qt::white);
|
||||
|
||||
for (int i=0;i<points_input_->GetSize();i++) {
|
||||
points[i] = db[points_input_->At(i)].Take(NodeParam::kVec2).value<QVector2D>().toPointF();
|
||||
int rect_sz = p->fontMetrics().height() / 8;
|
||||
|
||||
QRectF rect(points[i] - QPointF(10, 10),
|
||||
points[i] + QPointF(10, 10));
|
||||
for (int i=0;i<points_input_->GetSize();i++) {
|
||||
QVector2D v = db[points_input_->At(i)].Take(NodeParam::kVec2).value<QVector2D>();
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
p->drawPolyline(points.constData(), points_input_->GetSize());
|
||||
points.append(points.first());
|
||||
|
||||
p->drawPolyline(points.constData(), points.size());
|
||||
}
|
||||
|
||||
OLIVE_NAMESPACE_EXIT
|
||||
|
||||
@@ -34,7 +34,7 @@ public:
|
||||
|
||||
virtual QString Name() const override;
|
||||
virtual QString id() const override;
|
||||
virtual QString Category() const override;
|
||||
virtual QList<CategoryID> Category() const override;
|
||||
virtual QString Description() const override;
|
||||
|
||||
virtual void Retranslate() override;
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
virtual QString ShaderFragmentCode(const NodeValueDatabase&) const override;
|
||||
|
||||
virtual bool HasGizmos() const override;
|
||||
virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p) const override;
|
||||
virtual void DrawGizmos(NodeValueDatabase& db, QPainter *p, const QVector2D &scale) const override;
|
||||
|
||||
/*
|
||||
virtual bool GizmoPress(const QPointF &p) override;
|
||||
|
||||
+1
-1
@@ -287,7 +287,7 @@ bool Node::HasGizmos() const
|
||||
return false;
|
||||
}
|
||||
|
||||
void Node::DrawGizmos(NodeValueDatabase &, QPainter *) const
|
||||
void Node::DrawGizmos(NodeValueDatabase &, QPainter *, const QVector2D &) const
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -383,7 +383,7 @@ public:
|
||||
|
||||
virtual bool HasGizmos() const;
|
||||
|
||||
virtual void DrawGizmos(NodeValueDatabase& db, QPainter* p) const;
|
||||
virtual void DrawGizmos(NodeValueDatabase& db, QPainter* p, const QVector2D &scale) const;
|
||||
|
||||
virtual bool GizmoPress(const QPointF& p);
|
||||
virtual void GizmoMove(const QPointF& p);
|
||||
|
||||
+4
-5
@@ -71,14 +71,13 @@ Node *NodeParam::parentNode() const
|
||||
{
|
||||
QObject* p = parent();
|
||||
|
||||
while (p != nullptr) {
|
||||
// Determine if this object is a Node or not
|
||||
while (p) {
|
||||
Node* cast_test = dynamic_cast<Node*>(p);
|
||||
if (cast_test != nullptr) {
|
||||
if (cast_test) {
|
||||
return cast_test;
|
||||
} else {
|
||||
p = p->parent();
|
||||
}
|
||||
|
||||
p = p->parent();
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
||||
@@ -299,12 +299,7 @@ void ViewerDisplayWidget::paintGL()
|
||||
NodeValueDatabase db = gt.GenerateDatabase(gizmos_, TimeRange(node_time, node_time));
|
||||
|
||||
QPainter p(this);
|
||||
|
||||
// Scale so that gizmos can just draw on the buffer
|
||||
QPointF tex_point = GetTexturePosition(size());
|
||||
p.scale(tex_point.x(), tex_point.y());
|
||||
|
||||
gizmos_->DrawGizmos(db, &p);
|
||||
gizmos_->DrawGizmos(db, &p, QVector2D(GetTexturePosition(size())));
|
||||
}
|
||||
|
||||
// Draw action/title safe areas
|
||||
|
||||
Reference in New Issue
Block a user