node/ui: limit amount of selectable nodes for performance

This commit is contained in:
itsmattkc
2022-10-23 21:24:49 -07:00
parent fc56058e8a
commit a3f4ebdb6d
3 changed files with 16 additions and 2 deletions
+9 -2
View File
@@ -697,13 +697,20 @@ void NodeParamView::QueueKeyframePositionUpdate()
void NodeParamView::AddContext(Node *ctx) void NodeParamView::AddContext(Node *ctx)
{ {
NodeParamViewContext *item = GetContextItemFromContext(ctx);
// TEMP: Creating many NPV items is EXTREMELY slow so limit to one item per context for now.
// I have a better solution in the works to use one UI for several nodes, but I haven't
// done it yet, and this can severely affect productivity.
if (item->GetContexts().size() == 1) {
return;
}
// Queued so that if any further work is done in connecting this node to the context, it'll be // Queued so that if any further work is done in connecting this node to the context, it'll be
// done before our sorting function is called // done before our sorting function is called
connect(ctx, &Node::NodeAddedToContext, this, &NodeParamView::NodeAddedToContext, Qt::QueuedConnection); connect(ctx, &Node::NodeAddedToContext, this, &NodeParamView::NodeAddedToContext, Qt::QueuedConnection);
connect(ctx, &Node::NodeRemovedFromContext, this, &NodeParamView::NodeRemovedFromContext, Qt::QueuedConnection); connect(ctx, &Node::NodeRemovedFromContext, this, &NodeParamView::NodeRemovedFromContext, Qt::QueuedConnection);
NodeParamViewContext *item = GetContextItemFromContext(ctx);
item->AddContext(ctx); item->AddContext(ctx);
item->setVisible(true); item->setVisible(true);
+5
View File
@@ -44,6 +44,7 @@
namespace olive { namespace olive {
const double NodeView::kMinimumScale = 0.1; const double NodeView::kMinimumScale = 0.1;
const int NodeView::kMaximumContexts = 10;
NodeView::NodeView(QWidget *parent) : NodeView::NodeView(QWidget *parent) :
HandMovableView(parent), HandMovableView(parent),
@@ -102,6 +103,10 @@ void NodeView::SetContexts(const QVector<Node*> &nodes)
// Add contexts that are now in the list // Add contexts that are now in the list
foreach (Node *n, nodes) { foreach (Node *n, nodes) {
if (scene_.context_map().size() >= kMaximumContexts) {
break;
}
if (!contexts_.contains(n)) { if (!contexts_.contains(n)) {
AddContext(n); AddContext(n);
} }
+2
View File
@@ -235,6 +235,8 @@ private:
static const double kMinimumScale; static const double kMinimumScale;
static const int kMaximumContexts;
private slots: private slots:
/** /**
* @brief Receiver for when the scene's selected items change * @brief Receiver for when the scene's selected items change