[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