[Bf-blender-cvs] [efaade3b30f] temp-sculpt-brush-channel: temp-sculpt-brush-channel: Add missing RNA callbacks
Joseph Eagar
noreply at git.blender.org
Thu Aug 11 01:24:20 CEST 2022
Commit: efaade3b30f111227dd9ec9623093ce94f3ae529
Author: Joseph Eagar
Date: Wed Aug 10 16:22:58 2022 -0700
Branches: temp-sculpt-brush-channel
https://developer.blender.org/rBefaade3b30f111227dd9ec9623093ce94f3ae529
temp-sculpt-brush-channel: Add missing RNA callbacks
the RNA properties for controlling brush property visibility
now properly sets their XXX_USER_SET flags.
Also rewrote a few comments.
===================================================================
M source/blender/makesdna/DNA_brush_channel_types.h
M source/blender/makesrna/intern/rna_brush_channels.c
===================================================================
diff --git a/source/blender/makesdna/DNA_brush_channel_types.h b/source/blender/makesdna/DNA_brush_channel_types.h
index ea333c519e4..d3aab68ef19 100644
--- a/source/blender/makesdna/DNA_brush_channel_types.h
+++ b/source/blender/makesdna/DNA_brush_channel_types.h
@@ -81,33 +81,23 @@ typedef struct BrushMapping {
typedef struct BrushChannel {
struct BrushChannel *next, *prev;
- /** Channel id. Avoid calling API methods that take strings directly.
- There are API facilities to check channel idnames at compile time:
- the BRUSHSET_XXX macros, SCULPT_get_XXX, etc. On the C++ side
- BrushChannelSetIF has accessor methods, e.g. BrushChannelSet::radius.
- */
- char idname[64];
+ char idname[64]; /* The RNA property name */
char uiname[64]; /** user-friendly name */
char *category; /** category; if NULL, def->category will be used */
struct BrushChannelType *def; /* Brush channel definition */
/*
- Need to investigate whether we
- can use ID properties here. ID properties
- don't support CurveMappings and do support
- things we don't want, like groups, strings and
- ID pointer properties.
-
- We could implement an ID property CurveMapping
- type and prevent the creation of group properties
- at the API level though.
+ Cached channel values.
*/
float fvalue; /** floating point value */
int ivalue; /** stores integer, boolean, enum and bitmasks */
float vector[4]; /* stores 3 and 4 component vectors */
+
+ /* For curve channels. */
BrushCurve curve;
+ /* Input device mappings */
BrushMapping mappings[7]; /* dimension should always be BRUSH_MAPPING_MAX */
short type; /** eBrushChannelType */
@@ -120,7 +110,7 @@ typedef struct BrushChannelSet {
ListBase channels;
int channels_num, _pad[1];
- void *channelmap; /** quick lookup ghash, maps idnames to brush channels */
+ void *channelmap; /** idname -> channel map. */
} BrushChannelSet;
#define BRUSH_CHANNEL_MAX_IDNAME sizeof(((BrushChannel){0}).idname)
@@ -134,11 +124,9 @@ typedef enum eBrushMappingFlags {
/* BrushMapping->inherit_mode */
typedef enum eBrushMappingInheritMode {
- /* never inherit */
BRUSH_MAPPING_INHERIT_NEVER,
- /* always inherit */
BRUSH_MAPPING_INHERIT_ALWAYS,
- /* use channel's inheritance mode */
+ /* Use channel's inheritance mode. */
BRUSH_MAPPING_INHERIT_CHANNEL
} eBrushMappingInheritMode;
@@ -152,7 +140,7 @@ typedef enum eBrushMappingFunc {
BRUSH_MAPFUNC_SQUARE, /* square wave */
} eBrushMappingFunc;
-// mapping types
+/* Input device mapping types. */
typedef enum eBrushMappingType {
BRUSH_MAPPING_PRESSURE = 0,
BRUSH_MAPPING_XTILT = 1,
@@ -168,7 +156,6 @@ BLI_STATIC_ASSERT(offsetof(BrushChannel, type) - offsetof(BrushChannel, mappings
sizeof(BrushMapping) * BRUSH_MAPPING_MAX,
"BrushChannel.mappings must == BRUSH_MAPPING_MAX");
-// BrushChannel->flag
typedef enum eBrushChannelFlag {
BRUSH_CHANNEL_INHERIT = 1 << 0,
BRUSH_CHANNEL_INHERIT_IF_UNSET = 1 << 1,
@@ -187,11 +174,11 @@ typedef enum eBrushChannelFlag {
typedef enum eBrushChannelUIFlag {
BRUSH_CHANNEL_SHOW_IN_WORKSPACE = 1 << 0,
/* Has user overriden this, used for version patching. */
- BRUSH_CHANNEL_SHOW_IN_WORKSPACE_SET = 1 << 1,
+ BRUSH_CHANNEL_SHOW_IN_WORKSPACE_USER_SET = 1 << 1,
BRUSH_CHANNEL_SHOW_IN_HEADER = 1 << 2,
- BRUSH_CHANNEL_SHOW_IN_HEADER_SET = 1 << 3,
+ BRUSH_CHANNEL_SHOW_IN_HEADER_USER_SET = 1 << 3,
BRUSH_CHANNEL_SHOW_IN_CONTEXT_MENU = 1 << 4,
- BRUSH_CHANNEL_SHOW_IN_CONTEXT_MENU_SET = 1 << 5,
+ BRUSH_CHANNEL_SHOW_IN_CONTEXT_MENU_USER_SET = 1 << 5,
} eBrushChannelUIFlag;
// BrushChannelType->type
diff --git a/source/blender/makesrna/intern/rna_brush_channels.c b/source/blender/makesrna/intern/rna_brush_channels.c
index 89e6cecfee3..2a5d6037c94 100644
--- a/source/blender/makesrna/intern/rna_brush_channels.c
+++ b/source/blender/makesrna/intern/rna_brush_channels.c
@@ -55,7 +55,7 @@ static EnumPropertyItem null_enum[2] = {{0, "null", ICON_NONE, "null"}, {0, NULL
# include "RNA_access.h"
-#if 0
+# if 0
static void rna_brushchannel_update(Scene *scene, Brush *brush)
{
}
@@ -83,7 +83,7 @@ void rna_BrushChannel_update(Main *bmain, Scene *scene, PointerRNA *ptr)
return;
}
}
-#endif
+# endif
void rna_BrushChannel_update_tooltip(PointerRNA *ptr, const char *propname)
{
@@ -432,7 +432,44 @@ void rna_BrushChannel_category_set(PointerRNA *ptr, const char *value)
BKE_brush_channel_category_set((BrushChannel *)ptr->data, value);
}
-#endif
+static void channel_uiflag_set(PointerRNA *ptr, bool value, int flag, int user_set_flag)
+{
+ BrushChannel *ch = (BrushChannel *)ptr->data;
+
+ if (value) {
+ ch->ui_flag |= flag;
+ }
+ else {
+ ch->ui_flag &= ~flag;
+ }
+
+ if ((ch->ui_flag & flag) != (ch->def->ui_flag & flag)) {
+ ch->ui_flag |= user_set_flag;
+ }
+ else {
+ ch->ui_flag &= ~BRUSH_CHANNEL_SHOW_IN_HEADER_USER_SET;
+ }
+}
+
+void rna_BrushChannel_show_in_header_set(PointerRNA *ptr, bool value)
+{
+ channel_uiflag_set(
+ ptr, value, BRUSH_CHANNEL_SHOW_IN_HEADER, BRUSH_CHANNEL_SHOW_IN_HEADER_USER_SET);
+}
+
+void rna_BrushChannel_show_in_workspace_set(PointerRNA *ptr, bool value)
+{
+ channel_uiflag_set(
+ ptr, value, BRUSH_CHANNEL_SHOW_IN_WORKSPACE, BRUSH_CHANNEL_SHOW_IN_WORKSPACE_USER_SET);
+}
+
+void rna_BrushChannel_show_in_context_menu_set(PointerRNA *ptr, bool value)
+{
+ channel_uiflag_set(
+ ptr, value, BRUSH_CHANNEL_SHOW_IN_CONTEXT_MENU, BRUSH_CHANNEL_SHOW_IN_CONTEXT_MENU_USER_SET);
+}
+
+#else
static EnumPropertyItem mapping_type_items[] = {
{BRUSH_MAPPING_PRESSURE, "PRESSURE", ICON_NONE, "Pressure"},
@@ -696,16 +733,19 @@ void RNA_def_brush_channel(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "In Header", "Show in header");
RNA_def_property_update(prop, NC_SPACE | ND_SPACE_VIEW3D, NULL);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
+ RNA_def_property_boolean_funcs(prop, NULL, "rna_BrushChannel_show_in_header_set");
prop = RNA_def_property(srna, "show_in_workspace", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, "BrushChannel", "flag", BRUSH_CHANNEL_SHOW_IN_WORKSPACE);
RNA_def_property_ui_text(prop, "In Workspace", "Show in workspace");
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
+ RNA_def_property_boolean_funcs(prop, NULL, "rna_BrushChannel_show_in_workspace_set");
prop = RNA_def_property(srna, "show_in_context_menu", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, "BrushChannel", "flag", BRUSH_CHANNEL_SHOW_IN_CONTEXT_MENU);
RNA_def_property_ui_text(prop, "In Workspace", "Show in workspace");
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_LIBRARY);
+ RNA_def_property_boolean_funcs(prop, NULL, "rna_BrushChannel_show_in_context_menu_set");
prop = RNA_def_property(srna, "is_color", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_ui_text(prop, "Is Color", "Is this channel a color");
@@ -801,3 +841,4 @@ void RNA_def_brush_channels(BlenderRNA *brna)
RNA_def_brush_mapping(brna);
RNA_def_brush_channel(brna);
}
+#endif
More information about the Bf-blender-cvs
mailing list