Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/space_node')
-rw-r--r--source/blender/editors/space_node/node_draw.cc4
-rw-r--r--source/blender/editors/space_node/node_intern.h1
-rw-r--r--source/blender/editors/space_node/node_ops.c1
-rw-r--r--source/blender/editors/space_node/node_view.cc90
4 files changed, 96 insertions, 0 deletions
diff --git a/source/blender/editors/space_node/node_draw.cc b/source/blender/editors/space_node/node_draw.cc
index aa241071425..10a3285be8b 100644
--- a/source/blender/editors/space_node/node_draw.cc
+++ b/source/blender/editors/space_node/node_draw.cc
@@ -1446,6 +1446,8 @@ static int node_error_type_to_icon(const geo_log::NodeWarningType type)
return ICON_ERROR;
case geo_log::NodeWarningType::Info:
return ICON_INFO;
+ case geo_log::NodeWarningType::Legacy:
+ return ICON_ERROR;
}
BLI_assert(false);
@@ -1456,6 +1458,8 @@ static uint8_t node_error_type_priority(const geo_log::NodeWarningType type)
{
switch (type) {
case geo_log::NodeWarningType::Error:
+ return 4;
+ case geo_log::NodeWarningType::Legacy:
return 3;
case geo_log::NodeWarningType::Warning:
return 2;
diff --git a/source/blender/editors/space_node/node_intern.h b/source/blender/editors/space_node/node_intern.h
index d35fd729131..f069038cc09 100644
--- a/source/blender/editors/space_node/node_intern.h
+++ b/source/blender/editors/space_node/node_intern.h
@@ -175,6 +175,7 @@ int space_node_view_flag(struct bContext *C,
void NODE_OT_view_all(struct wmOperatorType *ot);
void NODE_OT_view_selected(struct wmOperatorType *ot);
+void NODE_OT_geometry_node_view_legacy(struct wmOperatorType *ot);
void NODE_OT_backimage_move(struct wmOperatorType *ot);
void NODE_OT_backimage_zoom(struct wmOperatorType *ot);
diff --git a/source/blender/editors/space_node/node_ops.c b/source/blender/editors/space_node/node_ops.c
index 610c2889e7a..df4f63af20b 100644
--- a/source/blender/editors/space_node/node_ops.c
+++ b/source/blender/editors/space_node/node_ops.c
@@ -51,6 +51,7 @@ void node_operatortypes(void)
WM_operatortype_append(NODE_OT_view_all);
WM_operatortype_append(NODE_OT_view_selected);
+ WM_operatortype_append(NODE_OT_geometry_node_view_legacy);
WM_operatortype_append(NODE_OT_mute_toggle);
WM_operatortype_append(NODE_OT_hide_toggle);
diff --git a/source/blender/editors/space_node/node_view.cc b/source/blender/editors/space_node/node_view.cc
index f0db0539c4f..762b4b36a39 100644
--- a/source/blender/editors/space_node/node_view.cc
+++ b/source/blender/editors/space_node/node_view.cc
@@ -23,8 +23,10 @@
#include "DNA_node_types.h"
+#include "BLI_listbase.h"
#include "BLI_math.h"
#include "BLI_rect.h"
+#include "BLI_string_ref.hh"
#include "BLI_utildefines.h"
#include "BKE_context.h"
@@ -54,6 +56,8 @@
#include "node_intern.h" /* own include */
+using blender::StringRef;
+
/* -------------------------------------------------------------------- */
/** \name View All Operator
* \{ */
@@ -700,3 +704,89 @@ void NODE_OT_backimage_sample(wmOperatorType *ot)
}
/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name View Geometry Nodes Legacy Operator
+ *
+ * This operator should be removed when the 2.93 legacy nodes are removed.
+ * \{ */
+
+static int space_node_view_geometry_nodes_legacy(bContext *C, SpaceNode *snode, wmOperator *op)
+{
+ ARegion *region = CTX_wm_region(C);
+
+ /* Only use the node editor's active node tree. Otherwise this will be too complicated. */
+ bNodeTree *node_tree = snode->nodetree;
+ if (node_tree == nullptr || node_tree->type != NTREE_GEOMETRY) {
+ return OPERATOR_CANCELLED;
+ }
+
+ bool found_legacy_node = false;
+ LISTBASE_FOREACH_BACKWARD (bNode *, node, &node_tree->nodes) {
+ StringRef idname{node->idname};
+ if (idname.find("Legacy") == StringRef::not_found) {
+ node->flag &= ~NODE_SELECT;
+ }
+ else {
+ found_legacy_node = true;
+ node->flag |= NODE_SELECT;
+ }
+ }
+
+ if (!found_legacy_node) {
+ WM_report(RPT_INFO, "Legacy node not found, may be in nested node group");
+ }
+
+ const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
+ if (space_node_view_flag(C, snode, region, NODE_SELECT, smooth_viewtx)) {
+ return OPERATOR_FINISHED;
+ }
+ return OPERATOR_CANCELLED;
+}
+
+static int geometry_node_view_legacy_exec(bContext *C, wmOperator *op)
+{
+ /* Allow running this operator directly in a specific node editor. */
+ if (SpaceNode *snode = CTX_wm_space_node(C)) {
+ return space_node_view_geometry_nodes_legacy(C, snode, op);
+ }
+
+ /* Since the operator is meant to be called from a button in the modifier panel, the node tree
+ * must be found from the screen, using the largest node editor if there is more than one. */
+ if (ScrArea *area = BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_NODE, 0)) {
+ if (SpaceNode *snode = static_cast<SpaceNode *>(area->spacedata.first)) {
+ ScrArea *old_area = CTX_wm_area(C);
+ ARegion *old_region = CTX_wm_region(C);
+
+ /* Override the context since it is used by the View2D panning code. */
+ CTX_wm_area_set(C, area);
+ CTX_wm_region_set(C, static_cast<ARegion *>(area->regionbase.last));
+ const int result = space_node_view_geometry_nodes_legacy(C, snode, op);
+ CTX_wm_area_set(C, old_area);
+ CTX_wm_region_set(C, old_region);
+ return result;
+ }
+ }
+
+ return OPERATOR_CANCELLED;
+}
+
+static bool geometry_node_view_legacy_poll(bContext *C)
+{
+ /* Allow direct execution in a node editor, but also affecting any visible node editor. */
+ return ED_operator_node_active(C) || BKE_screen_find_big_area(CTX_wm_screen(C), SPACE_NODE, 0);
+}
+
+void NODE_OT_geometry_node_view_legacy(wmOperatorType *ot)
+{
+ ot->name = "View Deprecated Geometry Nodes";
+ ot->idname = "NODE_OT_geometry_node_view_legacy";
+ ot->description = "Select and view legacy geometry nodes in the node editor";
+
+ ot->exec = geometry_node_view_legacy_exec;
+ ot->poll = geometry_node_view_legacy_poll;
+
+ ot->flag = OPTYPE_INTERNAL;
+}
+
+/** \} */