Nodes: Display vector values expanded, except when specified as compact.
authorOmarSquircleArt <omar.squircleart@gmail.com>
Sat, 10 Aug 2019 15:37:39 +0000 (17:37 +0200)
committerOmarSquircleArt <omar.squircleart@gmail.com>
Sat, 10 Aug 2019 15:57:54 +0000 (17:57 +0200)
Change the default drawing method of vector sockets to use a column layout.
This allows more interactive use of nodes and avoids the one or two clicks
needed to edit vector sockets in the old default component layout.

Developers may still use the component layout by flaging the socket with the
`SOCK_COMPACT` socket flag. For now, we choose to draw the SSS scale vector
of the Principled and SSS nodes in a compact form because they don't require
much interactivity.

Reviewers: brecht, JacquesLucke

Differential Revision: https://developer.blender.org/D5458

source/blender/editors/space_node/drawnode.c
source/blender/makesdna/DNA_node_types.h
source/blender/nodes/shader/nodes/node_shader_bsdf_principled.c
source/blender/nodes/shader/nodes/node_shader_subsurface_scattering.c

index e63c8331f18df20d6d70717d5dabf254871e03eb..b63f0daaa0d08ce827619dd4cc52d200abec22ca 100644 (file)
@@ -3333,7 +3333,13 @@ static void std_node_socket_draw(
       uiItemR(layout, ptr, "default_value", 0, text, 0);
       break;
     case SOCK_VECTOR:
-      uiTemplateComponentMenu(layout, ptr, "default_value", text);
+      if (sock->flag & SOCK_COMPACT) {
+        uiTemplateComponentMenu(layout, ptr, "default_value", text);
+      }
+      else {
+        uiLayout *column = uiLayoutColumn(layout, true);
+        uiItemR(column, ptr, "default_value", 0, text, 0);
+      }
       break;
     case SOCK_RGBA:
     case SOCK_STRING: {
index 75c0721f72a045f25afca399f641417d96f7b942..04a42cb146ccf6cfa81007504f72423099733b65 100644 (file)
@@ -184,6 +184,8 @@ typedef enum eNodeSocketFlag {
   /** socket hidden automatically, to distinguish from manually hidden */
   SOCK_AUTO_HIDDEN__DEPRECATED = (1 << 8),
   SOCK_NO_INTERNAL_LINK = (1 << 9),
+  /** Draw socket in a more compact form. */
+  SOCK_COMPACT = (1 << 10),
 } eNodeSocketFlag;
 
 /* limit data in bNode to what we want to see saved? */
index 2a371b7d18476bfe7eedbb219f83249ca3199203..741e792da87d2a896c5ac6c7df6af88656969828 100644 (file)
 static bNodeSocketTemplate sh_node_bsdf_principled_in[] = {
     {SOCK_RGBA, 1, N_("Base Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
     {SOCK_FLOAT, 1, N_("Subsurface"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
-    {SOCK_VECTOR, 1, N_("Subsurface Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f},
+    {SOCK_VECTOR,
+     1,
+     N_("Subsurface Radius"),
+     1.0f,
+     0.2f,
+     0.1f,
+     0.0f,
+     0.0f,
+     100.0f,
+     PROP_NONE,
+     SOCK_COMPACT},
     {SOCK_RGBA, 1, N_("Subsurface Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
     {SOCK_FLOAT, 1, N_("Metallic"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
     {SOCK_FLOAT, 1, N_("Specular"), 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
index f1b4a0e9fe3747105f8958d277266f7affb94847..21e07ece7b9989b8a68dab54cf54c6c1bacd13ce 100644 (file)
@@ -24,7 +24,7 @@
 static bNodeSocketTemplate sh_node_subsurface_scattering_in[] = {
     {SOCK_RGBA, 1, N_("Color"), 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
     {SOCK_FLOAT, 1, N_("Scale"), 1.0, 0.0f, 0.0f, 0.0f, 0.0f, 1000.0f},
-    {SOCK_VECTOR, 1, N_("Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f},
+    {SOCK_VECTOR, 1, N_("Radius"), 1.0f, 0.2f, 0.1f, 0.0f, 0.0f, 100.0f, PROP_NONE, SOCK_COMPACT},
     {SOCK_FLOAT, 1, N_("Sharpness"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
     {SOCK_FLOAT, 1, N_("Texture Blur"), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1.0f, PROP_FACTOR},
     {SOCK_VECTOR,