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:
itsmattkc
2020-05-06 17:45:44 +10:00
parent 1ceefb6dba
commit 67854a2c97
8 changed files with 32 additions and 25 deletions
+1 -1
View File
@@ -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);
+1 -1
View File
@@ -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;
+21 -8
View File
@@ -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
+2 -2
View File
@@ -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
View File
@@ -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
View File
@@ -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
View File
@@ -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;
+1 -6
View File
@@ -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