10#define DNA_DEPRECATED_ALLOW
13#include <fmt/format.h>
63# define N_(msgid) msgid
67#define U BLI_STATIC_ASSERT(false, "Global 'U' not allowed, only use arguments passed in!")
72#define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_FILE_ATLEAST(userdef, ver, subver)
73#define FROM_DEFAULT_V4_UCHAR(member) copy_v4_v4_uchar(btheme->member, U_theme_default.member)
249#undef FROM_DEFAULT_V4_UCHAR
251#undef USER_VERSION_ATLEAST
255#define USER_LMOUSESELECT (1 << 14)
261 ACTIONMOUSE = 0x0005,
262 SELECTMOUSE = 0x0006,
263 EVT_TWEAK_A = 0x5005,
264 EVT_TWEAK_S = 0x5006,
290 if (
STREQ(kmi->
idname,
"GRAPH_OT_keyframe_jump")) {
313 EVT_TWEAK_L = 0x5002,
314 EVT_TWEAK_M = 0x5003,
315 EVT_TWEAK_R = 0x5004,
350 std::optional<blender::StringRef> asset_id = {};
351 std::optional<blender::StringRefNull> tool_id = {};
359 if (tool_asset_map.
contains(prop_val)) {
360 asset_id = tool_asset_map.
lookup(prop_val);
362 else if (tool_tool_map.
contains(prop_val)) {
363 tool_id = tool_tool_map.
lookup(prop_val);
367 else if (
STREQ(kmi->
idname,
"PAINT_OT_brush_select")) {
370 const int prop_val =
IDP_Int(idprop);
371 if (id_asset_map.
contains(prop_val)) {
372 asset_id = id_asset_map.
lookup(prop_val);
378 const std::string full_path = fmt::format(
"{}{}", asset_prefix, *asset_id);
400 std::optional<blender::StringRef> asset_id = {};
406 const int prop_val =
IDP_Int(idprop);
407 if (id_asset_map.
contains(prop_val)) {
408 asset_id = id_asset_map.
lookup(prop_val);
414 const std::string full_path = fmt::format(
"{}{}", asset_prefix, *asset_id);
435 if (kmid->add_item) {
443 if (kmid->remove_item) {
445 asset_prefix, tool_property, id_asset_map, kmid->remove_item);
453 "brushes/essentials_brushes-mesh_sculpt.blend/Brush/";
456 const auto tool_asset_map = []() {
458 map.
add_new(
"builtin_brush.Draw Sharp",
"Draw Sharp");
459 map.
add_new(
"builtin_brush.Clay",
"Clay");
460 map.
add_new(
"builtin_brush.Clay Strips",
"Clay Strips");
461 map.
add_new(
"builtin_brush.Clay Thumb",
"Clay Thumb");
462 map.
add_new(
"builtin_brush.Layer",
"Layer");
463 map.
add_new(
"builtin_brush.Inflate",
"Inflate/Deflate");
464 map.
add_new(
"builtin_brush.Blob",
"Blob");
465 map.
add_new(
"builtin_brush.Crease",
"Crease Polish");
466 map.
add_new(
"builtin_brush.Smooth",
"Smooth");
467 map.
add_new(
"builtin_brush.Flatten",
"Flatten/Contrast");
468 map.
add_new(
"builtin_brush.Fill",
"Fill/Deepen");
469 map.
add_new(
"builtin_brush.Scrape",
"Scrape/Fill");
470 map.
add_new(
"builtin_brush.Multi-plane Scrape",
"Scrape Multiplane");
471 map.
add_new(
"builtin_brush.Pinch",
"Pinch/Magnify");
472 map.
add_new(
"builtin_brush.Grab",
"Grab");
473 map.
add_new(
"builtin_brush.Elastic Deform",
"Elastic Grab");
474 map.
add_new(
"builtin_brush.Snake Hook",
"Snake Hook");
475 map.
add_new(
"builtin_brush.Thumb",
"Thumb");
476 map.
add_new(
"builtin_brush.Pose",
"Pose");
477 map.
add_new(
"builtin_brush.Nudge",
"Nudge");
478 map.
add_new(
"builtin_brush.Rotate",
"Twist");
479 map.
add_new(
"builtin_brush.Slide Relax",
"Relax Slide");
480 map.
add_new(
"builtin_brush.Boundary",
"Boundary");
481 map.
add_new(
"builtin_brush.Cloth",
"Drag Cloth");
482 map.
add_new(
"builtin_brush.Simplify",
"Density");
483 map.
add_new(
"builtin_brush.Multires Displacement Eraser",
"Erase Multires Displacement");
484 map.
add_new(
"builtin_brush.Multires Displacement Smear",
"Smear Multires Displacement");
485 map.
add_new(
"builtin_brush.Smear",
"Smear");
490 const auto tool_tool_map = []() {
492 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
493 map.
add_new(
"builtin_brush.Paint",
"builtin_brush.paint");
494 map.
add_new(
"builtin_brush.Mask",
"builtin_brush.mask");
495 map.
add_new(
"builtin_brush.Draw Face Sets",
"builtin_brush.draw_face_sets");
499 const auto id_asset_map = []() {
511 map.
add_new(SCULPT_BRUSH_TYPE_FLATTEN,
"Flatten/Contrast");
512 map.
add_new(SCULPT_BRUSH_TYPE_FILL,
"Fill/Deepen");
513 map.
add_new(SCULPT_BRUSH_TYPE_SCRAPE,
"Scrape/Fill");
537 keymap, asset_prefix, tool_property, tool_tool_map, tool_asset_map, id_asset_map);
543 "brushes/essentials_brushes-mesh_vertex.blend/Brush/";
546 const auto tool_tool_map = []() {
548 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
549 map.
add_new(
"builtin_brush.Blur",
"builtin_brush.blur");
550 map.
add_new(
"builtin_brush.Average",
"builtin_brush.average");
551 map.
add_new(
"builtin_brush.Smear",
"builtin_brush.smear");
555 const auto id_asset_map = []() {
570 "brushes/essentials_brushes-mesh_weight.blend/Brush/";
573 const auto tool_tool_map = []() {
575 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
576 map.
add_new(
"builtin_brush.Blur",
"builtin_brush.blur");
577 map.
add_new(
"builtin_brush.Average",
"builtin_brush.average");
578 map.
add_new(
"builtin_brush.Smear",
"builtin_brush.smear");
582 const auto asset_id_map = []() {
597 "brushes/essentials_brushes-mesh_texture.blend/Brush/";
600 const auto tool_tool_map = []() {
602 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
603 map.
add_new(
"builtin_brush.Soften",
"builtin_brush.soften");
604 map.
add_new(
"builtin_brush.Smear",
"builtin_brush.smear");
605 map.
add_new(
"builtin_brush.Clone",
"builtin_brush.clone");
606 map.
add_new(
"builtin_brush.Fill",
"builtin_brush.fill");
607 map.
add_new(
"builtin_brush.Mask",
"builtin_brush.mask");
611 const auto id_asset_map = []() {
628#define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_FILE_ATLEAST(userdef, ver, subver)
743 if (
STREQ(km->idname,
"Armature_Sketch")) {
744 STRNCPY(km->idname,
"Armature Sketch");
746 else if (
STREQ(km->idname,
"View3D")) {
747 STRNCPY(km->idname,
"3D View");
749 else if (
STREQ(km->idname,
"View3D Generic")) {
750 STRNCPY(km->idname,
"3D View Generic");
752 else if (
STREQ(km->idname,
"EditMesh")) {
755 else if (
STREQ(km->idname,
"UVEdit")) {
756 STRNCPY(km->idname,
"UV Editor");
758 else if (
STREQ(km->idname,
"Animation_Channels")) {
759 STRNCPY(km->idname,
"Animation Channels");
761 else if (
STREQ(km->idname,
"GraphEdit Keys")) {
762 STRNCPY(km->idname,
"Graph Editor");
764 else if (
STREQ(km->idname,
"GraphEdit Generic")) {
765 STRNCPY(km->idname,
"Graph Editor Generic");
767 else if (
STREQ(km->idname,
"Action_Keys")) {
768 STRNCPY(km->idname,
"Dopesheet");
770 else if (
STREQ(km->idname,
"NLA Data")) {
771 STRNCPY(km->idname,
"NLA Editor");
773 else if (
STREQ(km->idname,
"Node Generic")) {
774 STRNCPY(km->idname,
"Node Editor");
776 else if (
STREQ(km->idname,
"Logic Generic")) {
777 STRNCPY(km->idname,
"Logic Editor");
779 else if (
STREQ(km->idname,
"File")) {
780 STRNCPY(km->idname,
"File Browser");
782 else if (
STREQ(km->idname,
"FileMain")) {
783 STRNCPY(km->idname,
"File Browser Main");
785 else if (
STREQ(km->idname,
"FileButtons")) {
786 STRNCPY(km->idname,
"File Browser Buttons");
788 else if (
STREQ(km->idname,
"Buttons Generic")) {
789 STRNCPY(km->idname,
"Property Editor");
893 userdef->gpu_viewport_quality = 0.6f;
916 if (kmdi->remove_item) {
919 if (kmdi->add_item) {
1012 const float GPU_VIEWPORT_QUALITY_FXAA = 0.10f;
1013 const float GPU_VIEWPORT_QUALITY_TAA8 = 0.25f;
1014 const float GPU_VIEWPORT_QUALITY_TAA16 = 0.6f;
1015 const float GPU_VIEWPORT_QUALITY_TAA32 = 0.8f;
1017 if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_FXAA) {
1020 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA8) {
1023 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA16) {
1026 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA32) {
1074 params.check_item =
true;
1075 params.check_diff_item_add =
true;
1132 const char *replace_table[][2] = {
1133 {
"blender",
"Blender"},
1134 {
"blender_27x",
"Blender_27x"},
1135 {
"industry_compatible",
"Industry_Compatible"},
1137 const int replace_table_len =
ARRAY_SIZE(replace_table);
1143 kpt->idname,
sizeof(kpt->idname), replace_table, replace_table_len);
1181 if (
STREQ(asset_library->name,
"Default")) {
1190 const int default_title_points = 11;
1191 style->paneltitle.points = default_title_points;
1192 style->grouplabel.points = default_title_points;
1236 if (userdef->pythondir_legacy[0]) {
1238 "Versioning user script path");
1272 userdef->
uiflag &= ~(1 << 23);
1285 style->paneltitle.character_weight = 400;
1286 style->grouplabel.character_weight = 400;
1287 style->widget.character_weight = 400;
1306 if (
STREQ(km->idname,
"NLA Channels")) {
1307 STRNCPY(km->idname,
"NLA Tracks");
1341 const char *addon_modules[] = {
1344 "io_import_images_as_planes",
1369 userdef,
"VIEW3D_AST_brush_sculpt",
"Brushes/Mesh Sculpt/Cloth");
1371 userdef,
"VIEW3D_AST_brush_sculpt",
"Brushes/Mesh Sculpt/General");
1373 userdef,
"VIEW3D_AST_brush_sculpt",
"Brushes/Mesh Sculpt/Paint");
1378 style->tooltip.points = 11.0f;
1379 style->tooltip.character_weight = 400;
1380 style->tooltip.shadow = 0;
1381 style->tooltip.shady = -1;
1382 style->tooltip.shadowalpha = 0.5f;
1383 style->tooltip.shadowcolor = 0.0f;
1394 userdef,
"VIEW3D_AST_brush_gpencil_paint",
"Brushes/Grease Pencil Draw/Draw");
1396 userdef,
"VIEW3D_AST_brush_gpencil_paint",
"Brushes/Grease Pencil Draw/Erase");
1398 userdef,
"VIEW3D_AST_brush_gpencil_paint",
"Brushes/Grease Pencil Draw/Utilities");
1401 userdef,
"VIEW3D_AST_brush_gpencil_sculpt",
"Brushes/Grease Pencil Sculpt/Contrast");
1403 userdef,
"VIEW3D_AST_brush_gpencil_sculpt",
"Brushes/Grease Pencil Sculpt/Transform");
1405 userdef,
"VIEW3D_AST_brush_gpencil_sculpt",
"Brushes/Grease Pencil Sculpt/Utilities");
1410 if (
STREQ(
"Sculpt", keymap->idname)) {
1413 else if (
STREQ(
"Vertex Paint", keymap->idname)) {
1416 else if (
STREQ(
"Weight Paint", keymap->idname)) {
1419 else if (
STREQ(
"Image Paint", keymap->idname)) {
1435 {
"SequencerCommon",
"Video Sequence Editor"},
1436 {
"SequencerPreview",
"Preview"},
1438 {
"Sequencer Tool: Cursor",
"Preview Tool: Cursor"},
1439 {
"Sequencer Tool: Sample",
"Preview Tool: Sample"},
1440 {
"Sequencer Tool: Move",
"Preview Tool: Move"},
1441 {
"Sequencer Tool: Rotate",
"Preview Tool: Rotate"},
1442 {
"Sequencer Tool: Scale",
"Preview Tool: Scale"},
1444 {
"Sequencer Timeline Tool: Select Box",
"Sequencer Tool: Select Box"},
1445 {
"Sequencer Timeline Tool: Select Box (fallback)",
1446 "Sequencer Tool: Select Box (fallback)"},
1448 {
"Sequencer Preview Tool: Tweak",
"Preview Tool: Tweak"},
1449 {
"Sequencer Preview Tool: Tweak (fallback)",
"Preview Tool: Tweak (fallback)"},
1450 {
"Sequencer Preview Tool: Select Box",
"Preview Tool: Select Box"},
1451 {
"Sequencer Preview Tool: Select Box (fallback)",
"Preview Tool: Select Box (fallback)"},
1455 std::string old_name(keymap->idname);
1456 if (
const std::string *new_name = keymap_renames.
lookup_ptr(old_name)) {
1457 STRNCPY(keymap->idname, new_name->c_str());
1481 if (kmdi->remove_item) {
1484 if (kmdi->add_item) {
1511#undef USER_VERSION_ATLEAST
1524#ifdef WITH_EXPERIMENTAL_FEATURES
1533#undef USER_LMOUSESELECT
struct bAddon * BKE_addon_ensure(struct ListBase *addon_list, const char *module)
bool BKE_addon_remove_safe(struct ListBase *addon_list, const char *module)
bool BKE_blender_version_is_alpha(void)
void BKE_colorband_init(ColorBand *coba, bool rangetype)
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool IDP_AddToGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
void BKE_keyconfig_pref_filter_items(struct UserDef *userdef, const struct wmKeyConfigFilterItemParams *params, bool(*filter_fn)(struct wmKeyMapItem *kmi, void *user_data), void *user_data)
void BKE_keyconfig_pref_set_select_mouse(struct UserDef *userdef, int value, bool override)
#define WM_KEY_CONFIG_FILTER_ITEM_ALL
void BKE_preferences_asset_library_default_add(struct UserDef *userdef) ATTR_NONNULL()
void BKE_preferences_extension_repo_remove(UserDef *userdef, bUserExtensionRepo *repo)
bUserExtensionRepo * BKE_preferences_extension_repo_add_default_user(UserDef *userdef)
#define BKE_PREFS_ASSET_LIBRARY_DEFAULT_NAME
void BKE_preferences_asset_library_name_set(struct UserDef *userdef, struct bUserAssetLibrary *library, const char *name) ATTR_NONNULL()
bUserExtensionRepo * BKE_preferences_extension_repo_add_default_system(UserDef *userdef)
bUserExtensionRepo * BKE_preferences_extension_repo_add_default_remote(UserDef *userdef)
bool BKE_preferences_asset_shelf_settings_ensure_catalog_path_enabled(UserDef *userdef, const char *shelf_idname, const char *catalog_path)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
void BLI_addhead(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
MINLINE void copy_v4_fl4(float v[4], float x, float y, float z, float w)
MINLINE void copy_v3_fl3(float v[3], float x, float y, float z)
char * STRNCPY(char(&dst)[N], const char *src)
#define STRNCPY_UTF8(dst, src)
void BLI_uniquename(const struct ListBase *list, void *vlink, const char *defname, char delim, int name_offset, size_t name_maxncpy) ATTR_NONNULL(1
bool BLI_string_replace_table_exact(char *string, size_t string_len, const char *replace_table[][2], int replace_table_len)
#define ARRAY_SET_ITEMS(...)
#define MEMSET_STRUCT_AFTER(struct_var, value, member)
#define MEMCPY_STRUCT_AFTER(struct_dst, struct_src, member)
external readfile function prototypes.
const bTheme U_theme_default
@ FCURVE_SMOOTH_CONT_ACCEL
@ ASSET_IMPORT_APPEND_REUSE
@ ASSET_LIBRARY_RELATIVE_PATH
@ ASSET_LIBRARY_ESSENTIALS
@ WPAINT_BRUSH_TYPE_AVERAGE
@ WPAINT_BRUSH_TYPE_SMEAR
@ SCULPT_BRUSH_TYPE_DRAW_SHARP
@ SCULPT_BRUSH_TYPE_THUMB
@ SCULPT_BRUSH_TYPE_BOUNDARY
@ SCULPT_BRUSH_TYPE_DISPLACEMENT_SMEAR
@ SCULPT_BRUSH_TYPE_DRAW_FACE_SETS
@ SCULPT_BRUSH_TYPE_NUDGE
@ SCULPT_BRUSH_TYPE_CLOTH
@ SCULPT_BRUSH_TYPE_PINCH
@ SCULPT_BRUSH_TYPE_SMEAR
@ SCULPT_BRUSH_TYPE_CLAY_THUMB
@ SCULPT_BRUSH_TYPE_MULTIPLANE_SCRAPE
@ SCULPT_BRUSH_TYPE_SIMPLIFY
@ SCULPT_BRUSH_TYPE_SNAKE_HOOK
@ SCULPT_BRUSH_TYPE_CREASE
@ SCULPT_BRUSH_TYPE_LAYER
@ SCULPT_BRUSH_TYPE_SLIDE_RELAX
@ SCULPT_BRUSH_TYPE_ELASTIC_DEFORM
@ SCULPT_BRUSH_TYPE_SMOOTH
@ SCULPT_BRUSH_TYPE_PAINT
@ SCULPT_BRUSH_TYPE_DISPLACEMENT_ERASER
@ SCULPT_BRUSH_TYPE_INFLATE
@ SCULPT_BRUSH_TYPE_ROTATE
@ SCULPT_BRUSH_TYPE_CLAY_STRIPS
@ IMAGE_PAINT_BRUSH_TYPE_MASK
@ IMAGE_PAINT_BRUSH_TYPE_FILL
@ IMAGE_PAINT_BRUSH_TYPE_DRAW
@ IMAGE_PAINT_BRUSH_TYPE_CLONE
@ IMAGE_PAINT_BRUSH_TYPE_SOFTEN
@ IMAGE_PAINT_BRUSH_TYPE_SMEAR
@ VPAINT_BRUSH_TYPE_AVERAGE
@ VPAINT_BRUSH_TYPE_SMEAR
@ SCE_DISPLAY_AA_SAMPLES_32
@ SCE_DISPLAY_AA_SAMPLES_8
@ SCE_DISPLAY_AA_SAMPLES_16
@ AUTOKEY_FLAG_INSERTNEEDED
@ MANUALKEY_FLAG_INSERTNEEDED
@ AUTOKEY_FLAG_ONLYKEYINGSET
@ USER_DOTRANSLATE_DEPRECATED
@ USER_FILTER_BRUSHES_BY_TOOL
@ USER_LOCK_CURSOR_ADJUST
@ USER_REGISTER_ALL_USERS
@ USER_SHOW_GIZMO_NAVIGATE
@ USER_NO_MULTITOUCH_GESTURES
@ USER_GPU_FLAG_OVERLAY_SMOOTH_WIRE
@ USER_SEQ_PROXY_SETUP_AUTOMATIC
@ USER_FLAG_NUMINPUT_ADVANCED
@ STATUSBAR_SHOW_EXTENSIONS_UPDATES
@ USER_ANIM_HIGH_QUALITY_DRAWING
@ USER_ANIM_SHOW_CHANNEL_GROUP_COLORS
@ USER_RENDER_DISPLAY_WINDOW
@ NDOF_SHOW_GUIDE_ORBIT_CENTER
@ USER_ANIM_KEY_CHANNEL_SCALE
@ USER_ANIM_KEY_CHANNEL_ROTATION
@ USER_ANIM_KEY_CHANNEL_LOCATION
@ USER_ANIM_KEY_CHANNEL_CUSTOM_PROPERTIES
@ USER_TEXT_RENDER_SUBPIXELAA
@ USER_SHADER_COMPILE_SUBPROCESS
@ USER_SEQ_ED_CONNECT_STRIPS_BY_DEFAULT
@ USER_SEQ_ED_SIMPLE_TWEAKING
@ USER_TEMP_SPACE_DISPLAY_WINDOW
Read Guarded memory(de)allocation.
const Value * lookup_ptr(const Key &key) const
const Value & lookup(const Key &key) const
void add_new(const Key &key, const Value &value)
bool contains(const Key &key) const
constexpr bool startswith(StringRef prefix) const
void * MEM_callocN(size_t len, const char *str)
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRef prop_name, int32_t value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_INT, set its name and value.
unsigned char grid_levels
unsigned char face_front[4]
struct WalkNavigation walk_navigation
float pressure_threshold_max
short key_insert_channels
ListBase script_directories
short playback_fps_samples
float view_rotate_sensitivity_trackball
short pie_animation_timeout
float ndof_orbit_sensitivity
float view_rotate_sensitivity_turntable
UserDef_FileSpaceData file_space_data
UserDef_Experimental experimental
uint8_t network_connection_limit
struct ListBase user_keymaps
char drag_threshold_mouse
float gpencil_new_layer_col[4]
short lookdev_sphere_size
char gizmo_size_navigate_v3d
short sequencer_proxy_setup
struct ListBase user_keyconfig_prefs
char drag_threshold_tablet
short shader_compilation_method
struct ListBase extension_repos
struct SolidLight light_param[4]
char filebrowser_display_type
int sequencer_editor_flag
float collection_instance_empty_size
struct ListBase asset_libraries
struct ColorBand coba_weight
static void keymap_update_brushes_handle_add_item(const blender::StringRef asset_prefix, const blender::StringRef tool_property, const blender::Map< blender::StringRef, blender::StringRefNull > &tool_tool_map, const blender::Map< blender::StringRef, blender::StringRef > &tool_asset_map, const blender::Map< int, blender::StringRef > &id_asset_map, wmKeyMapItem *kmi)
static bool keymap_item_update_tweak_event(wmKeyMapItem *kmi, void *)
static void do_version_select_mouse(const UserDef *userdef, wmKeyMapItem *kmi)
static bool keymap_item_has_invalid_wm_context_data_path(wmKeyMapItem *kmi, void *)
void BLO_sanitize_experimental_features_userpref_blend(UserDef *userdef)
#define USER_VERSION_ATLEAST(ver, subver)
#define FROM_DEFAULT_V4_UCHAR(member)
#define USER_LMOUSESELECT
void blo_do_versions_userdef(UserDef *userdef)
static void keymap_update_brushes_handle_remove_item(const blender::StringRef asset_prefix, const blender::StringRef tool_property, const blender::Map< int, blender::StringRef > &id_asset_map, wmKeyMapItem *kmi)
static void do_version_keyframe_jump(wmKeyMapItem *kmi)
static void keymap_update_mesh_texture_paint_brushes(wmKeyMap *keymap)
static void keymap_update_mesh_weight_paint_brushes(wmKeyMap *keymap)
static void keymap_update_brushes(wmKeyMap *keymap, const blender::StringRef asset_prefix, const blender::StringRef tool_property, const blender::Map< blender::StringRef, blender::StringRefNull > &tool_tool_map, const blender::Map< blender::StringRef, blender::StringRef > &tool_asset_map, const blender::Map< int, blender::StringRef > &id_asset_map)
static void keymap_update_mesh_vertex_paint_brushes(wmKeyMap *keymap)
static void keymap_update_mesh_sculpt_brushes(wmKeyMap *keymap)
static void do_versions_theme(const UserDef *userdef, bTheme *btheme)
void WM_keymap_item_properties_reset(wmKeyMapItem *kmi, IDProperty *properties)