[Bf-blender-cvs] [8d2128009d7] modifier-panels-ui: Mask modifier layout

Hans Goudey noreply at git.blender.org
Wed Apr 8 21:38:29 CEST 2020


Commit: 8d2128009d7c43fdb22d39863ec31f83455426c2
Author: Hans Goudey
Date:   Wed Apr 8 14:37:49 2020 -0500
Branches: modifier-panels-ui
https://developer.blender.org/rB8d2128009d7c43fdb22d39863ec31f83455426c2

Mask modifier layout

C++ needs workaround for including BKE_screen.h and a
PanelDrawFn definition.

===================================================================

M	source/blender/modifiers/intern/MOD_mask.cc
M	source/blender/modifiers/intern/MOD_ui_common.c
M	source/blender/modifiers/intern/MOD_ui_common.h

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_mask.cc b/source/blender/modifiers/intern/MOD_mask.cc
index 623cd6d7480..de9ba9134c8 100644
--- a/source/blender/modifiers/intern/MOD_mask.cc
+++ b/source/blender/modifiers/intern/MOD_mask.cc
@@ -44,7 +44,12 @@
 #include "BKE_lib_query.h"
 #include "BKE_mesh.h"
 #include "BKE_modifier.h"
-// #include "BKE_screen.h" HANS-TODO: Fix errors with function pointers here.
+
+/* SpaceType struct has a member called 'new' which obviously conflicts with C++
+ * so temporarily redefining the new keyword to make it compile. */
+#define new extern_new
+#include "BKE_screen.h"
+#undef new
 
 #include "UI_interface.h"
 #include "UI_resources.h"
@@ -397,53 +402,48 @@ static bool isDisabled(const struct Scene *UNUSED(scene),
   return mmd->ob_arm && mmd->ob_arm->type != OB_ARMATURE;
 }
 
-// static void panel_draw(const bContext *C, Panel *panel)
-// {
-//   uiLayout *sub, *row, *split, *col;
-//   uiLayout *layout = panel->layout;
-
-//   PointerRNA ptr;
-//   PointerRNA ob_ptr;
-//   modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr);
-// modifier_panel_buttons(C, panel);
-
-//   bool has_vertex_group = RNA_string_length(&ptr, "vertex_group") != 0;
-
-//   split = uiLayoutSplit(layout, 0.5f, false);
-//   col = uiLayoutColumn(split, false);
-//   uiItemL(col, IFACE_("Mode:"), ICON_NONE);
-//   uiItemR(col, &ptr, "mode", 0, "", ICON_NONE);
-
-//   col = uiLayoutColumn(split, false);
-//   int mode = RNA_enum_get(&ptr, "mode");
-//   if (mode == MOD_MASK_MODE_ARM) {
-//     uiItemL(col, IFACE_("Armature:"), ICON_NONE);
-//     row = uiLayoutRow(col, true);
-//     uiItemR(row, &ptr, "armature", 0, "", ICON_NONE);
-//     uiItemR(row, &ptr, "invert_vertex_group", 0, "", ICON_ARROW_LEFTRIGHT);
-//   }
-//   else if (mode == MOD_MASK_MODE_VGROUP) {
-//     uiItemL(col, IFACE_("Vertex Group:"), ICON_NONE);
-//     row = uiLayoutRow(col, true);
-//     uiItemPointerR(row, &ptr, "vertex_group", &ob_ptr, "vertex_groups", "", ICON_NONE);
-//     sub = uiLayoutRow(row, true);
-//     uiLayoutSetActive(sub, has_vertex_group);
-// uiLayoutSetPropSep(sub, false);
-
-//     uiItemR(sub, &ptr, "invert_vertex_group", 0, "", ICON_ARROW_LEFTRIGHT);
-//   }
-
-//   uiItemR(layout, &ptr, "threshold", 0, NULL, ICON_NONE);
-
-//   uiItemR(layout, &ptr, "use_falloff_uniform", 0, NULL, ICON_NONE);
-
-//   modifier_panel_end(layout, &ptr);
-// }
-
-// static void panelRegister(ARegionType *region_type)
-// {
-//   modifier_panel_register(region_type, "Mask", panel_draw);
-// }
+static void panel_draw(const bContext *C, Panel *panel)
+{
+  uiLayout *sub, *row;
+  uiLayout *layout = panel->layout;
+
+  PointerRNA ptr;
+  PointerRNA ob_ptr;
+  modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr);
+  modifier_panel_buttons(C, panel);
+
+  int mode = RNA_enum_get(&ptr, "mode");
+  bool has_vertex_group = RNA_string_length(&ptr, "vertex_group") != 0;
+
+  uiItemR(layout, &ptr, "mode", UI_ITEM_R_EXPAND, NULL, ICON_NONE);
+
+  uiLayoutSetPropSep(layout, true);
+
+  if (mode == MOD_MASK_MODE_ARM) {
+    row = uiLayoutRow(layout, true);
+    uiItemR(row, &ptr, "armature", 0, NULL, ICON_NONE);
+    sub = uiLayoutRow(row, true);
+    uiLayoutSetPropDecorate(sub, false);
+    uiItemR(sub, &ptr, "invert_vertex_group", 0, "", ICON_ARROW_LEFTRIGHT);
+  }
+  else if (mode == MOD_MASK_MODE_VGROUP) {
+    row = uiLayoutRow(layout, true);
+    uiItemPointerR(row, &ptr, "vertex_group", &ob_ptr, "vertex_groups", NULL, ICON_NONE);
+    sub = uiLayoutRow(row, true);
+    uiLayoutSetActive(sub, has_vertex_group);
+    uiLayoutSetPropDecorate(sub, false);
+    uiItemR(sub, &ptr, "invert_vertex_group", 0, "", ICON_ARROW_LEFTRIGHT);
+  }
+
+  uiItemR(layout, &ptr, "threshold", 0, NULL, ICON_NONE);
+
+  modifier_panel_end(layout, &ptr);
+}
+
+static void panelRegister(ARegionType *region_type)
+{
+  modifier_panel_register(region_type, "Mask", panel_draw);
+}
 
 ModifierTypeInfo modifierType_Mask = {
     /* name */ "Mask",
@@ -473,5 +473,5 @@ ModifierTypeInfo modifierType_Mask = {
     /* foreachIDLink */ NULL,
     /* foreachTexLink */ NULL,
     /* freeRuntimeData */ NULL,
-    /* panelRegister */ NULL,
+    /* panelRegister */ panelRegister,
 };
diff --git a/source/blender/modifiers/intern/MOD_ui_common.c b/source/blender/modifiers/intern/MOD_ui_common.c
index 86936723524..d28ee8cfcf1 100644
--- a/source/blender/modifiers/intern/MOD_ui_common.c
+++ b/source/blender/modifiers/intern/MOD_ui_common.c
@@ -355,7 +355,7 @@ static void modifier_panel_header_modes(const bContext *C, Panel *panel)
 /**
  * Create a panel in the context's region
  */
-PanelType *modifier_panel_register(ARegionType *region_type, const char *name, void *draw)
+PanelType *modifier_panel_register(ARegionType *region_type, const char *name, PanelDrawFn draw)
 {
 
   /* Get the name for the modifier's panel. */
@@ -390,8 +390,8 @@ PanelType *modifier_panel_register(ARegionType *region_type, const char *name, v
 PanelType *modifier_subpanel_register(ARegionType *region_type,
                                       const char *name,
                                       const char *label,
-                                      void *draw_header,
-                                      void *draw,
+                                      PanelDrawFn draw_header,
+                                      PanelDrawFn draw,
                                       PanelType *parent)
 {
   /* Create the subpanel's ID name. */
diff --git a/source/blender/modifiers/intern/MOD_ui_common.h b/source/blender/modifiers/intern/MOD_ui_common.h
index 82ee0e18904..dafa295f930 100644
--- a/source/blender/modifiers/intern/MOD_ui_common.h
+++ b/source/blender/modifiers/intern/MOD_ui_common.h
@@ -26,55 +26,15 @@
 
 #include "DEG_depsgraph_build.h"
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 struct ARegionType;
 struct bContext;
 struct PanelType;
 struct uiLayout;
-
-/**
- * Template for modifier UI code:
- *
-static void panel_draw(const bContext *C, Panel *panel)
-{
-  uiLayout *layout = panel->layout;
-  PointerRNA ptr;
-  PointerRNA ob_ptr;
-  modifier_panel_get_property_pointers(C, panel, &ob_ptr, &ptr);
-
-  // Draw modifier layout
-
-  modifier_panel_end(layout, &ptr);
-}
-
-static void subpanel_draw(const bContext *C, Panel *panel)
-{
-  PointerRNA ptr;
-  modifier_panel_get_property_pointers(C, panel, NULL, &ptr);
-  uiLayout *layout = panel->layout;
-
-  // Draw subpanel layout
-}
-
-static void subpanel_draw_header(const bContext *C, Panel *panel)
-{
-  PointerRNA ptr;
-  modifier_panel_get_property_pointers(C, panel, NULL, &ptr);
-  uiLayout *layout = panel->layout;
-
-  // Draw header layout
-}
-
-static void panel(ARegionType *region_type)
-{
-  PanelType *panel_type = modifier_panel_register(region_type, "MODIFIER_TYPE", panel_draw);
-  modifier_subpanel_register(
-    region_type, "IDNAME", "", subpanel_draw_header, subpanel_draw, panel_type);
-}
- */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
+typedef void (*PanelDrawFn)(const bContext *, Panel *);
 
 void modifier_panel_buttons(const struct bContext *C, struct Panel *panel);
 
@@ -87,13 +47,13 @@ void modifier_panel_get_property_pointers(const bContext *C,
 
 struct PanelType *modifier_panel_register(struct ARegionType *region_type,
                                           const char *modifier_type,
-                                          void *draw);
+                                          PanelDrawFn draw);
 
 struct PanelType *modifier_subpanel_register(struct ARegionType *region_type,
                                              const char *name,
                                              const char *label,
-                                             void *draw_header,
-                                             void *draw,
+                                             PanelDrawFn draw_header,
+                                             PanelDrawFn draw,
                                              struct PanelType *parent);
 
 #ifdef __cplusplus



More information about the Bf-blender-cvs mailing list