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)
220#undef FROM_DEFAULT_V4_UCHAR
222#undef USER_VERSION_ATLEAST
226#define USER_LMOUSESELECT (1 << 14)
232 ACTIONMOUSE = 0x0005,
233 SELECTMOUSE = 0x0006,
234 EVT_TWEAK_A = 0x5005,
235 EVT_TWEAK_S = 0x5006,
277 EVT_TWEAK_L = 0x5002,
278 EVT_TWEAK_M = 0x5003,
279 EVT_TWEAK_R = 0x5004,
314 std::optional<blender::StringRef> asset_id = {};
315 std::optional<blender::StringRefNull> tool_id = {};
323 if (tool_asset_map.
contains(prop_val)) {
324 asset_id = tool_asset_map.
lookup(prop_val);
326 else if (tool_tool_map.
contains(prop_val)) {
327 tool_id = tool_tool_map.
lookup(prop_val);
331 else if (
STREQ(kmi->
idname,
"PAINT_OT_brush_select")) {
334 const int prop_val =
IDP_Int(idprop);
335 if (id_asset_map.
contains(prop_val)) {
336 asset_id = id_asset_map.
lookup(prop_val);
342 const std::string full_path = fmt::format(
"{}{}", asset_prefix, *asset_id);
364 std::optional<blender::StringRef> asset_id = {};
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);
399 if (kmid->add_item) {
407 if (kmid->remove_item) {
409 asset_prefix, tool_property, id_asset_map, kmid->remove_item);
417 "brushes/essentials_brushes-mesh_sculpt.blend/Brush/";
418 constexpr char const *tool_property =
"sculpt_tool";
420 const auto tool_asset_map = []() {
422 map.
add_new(
"builtin_brush.Draw Sharp",
"Draw Sharp");
423 map.
add_new(
"builtin_brush.Clay",
"Clay");
424 map.
add_new(
"builtin_brush.Clay Strips",
"Clay Strips");
425 map.
add_new(
"builtin_brush.Clay Thumb",
"Clay Thumb");
426 map.
add_new(
"builtin_brush.Layer",
"Layer");
427 map.
add_new(
"builtin_brush.Inflate",
"Inflate/Deflate");
428 map.
add_new(
"builtin_brush.Blob",
"Blob");
429 map.
add_new(
"builtin_brush.Crease",
"Crease Polish");
430 map.
add_new(
"builtin_brush.Smooth",
"Smooth");
431 map.
add_new(
"builtin_brush.Flatten",
"Flatten/Contrast");
432 map.
add_new(
"builtin_brush.Fill",
"Fill/Deepen");
433 map.
add_new(
"builtin_brush.Scrape",
"Scrape/Fill");
434 map.
add_new(
"builtin_brush.Multi-plane Scrape",
"Scrape Multiplane");
435 map.
add_new(
"builtin_brush.Pinch",
"Pinch/Magnify");
436 map.
add_new(
"builtin_brush.Grab",
"Grab");
437 map.
add_new(
"builtin_brush.Elastic Deform",
"Elastic Grab");
438 map.
add_new(
"builtin_brush.Snake Hook",
"Snake Hook");
439 map.
add_new(
"builtin_brush.Thumb",
"Thumb");
440 map.
add_new(
"builtin_brush.Pose",
"Pose");
441 map.
add_new(
"builtin_brush.Nudge",
"Nudge");
442 map.
add_new(
"builtin_brush.Rotate",
"Twist");
443 map.
add_new(
"builtin_brush.Slide Relax",
"Relax Slide");
444 map.
add_new(
"builtin_brush.Boundary",
"Boundary");
445 map.
add_new(
"builtin_brush.Cloth",
"Drag Cloth");
446 map.
add_new(
"builtin_brush.Simplify",
"Density");
447 map.
add_new(
"builtin_brush.Multires Displacement Eraser",
"Erase Multires Displacement");
448 map.
add_new(
"builtin_brush.Multires Displacement Smear",
"Smear Multires Displacement");
449 map.
add_new(
"builtin_brush.Smear",
"Smear");
454 const auto tool_tool_map = []() {
456 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
457 map.
add_new(
"builtin_brush.Paint",
"builtin_brush.paint");
458 map.
add_new(
"builtin_brush.Mask",
"builtin_brush.mask");
459 map.
add_new(
"builtin_brush.Draw Face Sets",
"builtin_brush.draw_face_sets");
463 const auto id_asset_map = []() {
501 keymap, asset_prefix, tool_property, tool_tool_map, tool_asset_map, id_asset_map);
507 "brushes/essentials_brushes-mesh_vertex.blend/Brush/";
508 constexpr char const *tool_property =
"vertex_tool";
510 const auto tool_tool_map = []() {
512 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
513 map.
add_new(
"builtin_brush.Blur",
"builtin_brush.blur");
514 map.
add_new(
"builtin_brush.Average",
"builtin_brush.average");
515 map.
add_new(
"builtin_brush.Smear",
"builtin_brush.smear");
519 const auto id_asset_map = []() {
534 "brushes/essentials_brushes-mesh_weight.blend/Brush/";
535 constexpr char const *tool_property =
"weight_tool";
537 const auto tool_tool_map = []() {
539 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
540 map.
add_new(
"builtin_brush.Blur",
"builtin_brush.blur");
541 map.
add_new(
"builtin_brush.Average",
"builtin_brush.average");
542 map.
add_new(
"builtin_brush.Smear",
"builtin_brush.smear");
546 const auto asset_id_map = []() {
561 "brushes/essentials_brushes-mesh_texture.blend/Brush/";
562 constexpr char const *tool_property =
"image_tool";
564 const auto tool_tool_map = []() {
566 map.
add_new(
"builtin_brush.Draw",
"builtin.brush");
567 map.
add_new(
"builtin_brush.Soften",
"builtin_brush.soften");
568 map.
add_new(
"builtin_brush.Smear",
"builtin_brush.smear");
569 map.
add_new(
"builtin_brush.Clone",
"builtin_brush.clone");
570 map.
add_new(
"builtin_brush.Fill",
"builtin_brush.fill");
571 map.
add_new(
"builtin_brush.Mask",
"builtin_brush.mask");
575 const auto id_asset_map = []() {
592#define USER_VERSION_ATLEAST(ver, subver) MAIN_VERSION_FILE_ATLEAST(userdef, ver, subver)
707 if (
STREQ(km->idname,
"Armature_Sketch")) {
708 STRNCPY(km->idname,
"Armature Sketch");
710 else if (
STREQ(km->idname,
"View3D")) {
711 STRNCPY(km->idname,
"3D View");
713 else if (
STREQ(km->idname,
"View3D Generic")) {
714 STRNCPY(km->idname,
"3D View Generic");
716 else if (
STREQ(km->idname,
"EditMesh")) {
719 else if (
STREQ(km->idname,
"UVEdit")) {
720 STRNCPY(km->idname,
"UV Editor");
722 else if (
STREQ(km->idname,
"Animation_Channels")) {
723 STRNCPY(km->idname,
"Animation Channels");
725 else if (
STREQ(km->idname,
"GraphEdit Keys")) {
726 STRNCPY(km->idname,
"Graph Editor");
728 else if (
STREQ(km->idname,
"GraphEdit Generic")) {
729 STRNCPY(km->idname,
"Graph Editor Generic");
731 else if (
STREQ(km->idname,
"Action_Keys")) {
732 STRNCPY(km->idname,
"Dopesheet");
734 else if (
STREQ(km->idname,
"NLA Data")) {
735 STRNCPY(km->idname,
"NLA Editor");
737 else if (
STREQ(km->idname,
"Node Generic")) {
738 STRNCPY(km->idname,
"Node Editor");
740 else if (
STREQ(km->idname,
"Logic Generic")) {
741 STRNCPY(km->idname,
"Logic Editor");
743 else if (
STREQ(km->idname,
"File")) {
744 STRNCPY(km->idname,
"File Browser");
746 else if (
STREQ(km->idname,
"FileMain")) {
747 STRNCPY(km->idname,
"File Browser Main");
749 else if (
STREQ(km->idname,
"FileButtons")) {
750 STRNCPY(km->idname,
"File Browser Buttons");
752 else if (
STREQ(km->idname,
"Buttons Generic")) {
753 STRNCPY(km->idname,
"Property Editor");
857 userdef->gpu_viewport_quality = 0.6f;
880 if (kmdi->remove_item) {
883 if (kmdi->add_item) {
976 const float GPU_VIEWPORT_QUALITY_FXAA = 0.10f;
977 const float GPU_VIEWPORT_QUALITY_TAA8 = 0.25f;
978 const float GPU_VIEWPORT_QUALITY_TAA16 = 0.6f;
979 const float GPU_VIEWPORT_QUALITY_TAA32 = 0.8f;
981 if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_FXAA) {
984 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA8) {
987 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA16) {
990 else if (userdef->gpu_viewport_quality <= GPU_VIEWPORT_QUALITY_TAA32) {
1038 params.check_item =
true;
1039 params.check_diff_item_add =
true;
1096 const char *replace_table[][2] = {
1097 {
"blender",
"Blender"},
1098 {
"blender_27x",
"Blender_27x"},
1099 {
"industry_compatible",
"Industry_Compatible"},
1101 const int replace_table_len =
ARRAY_SIZE(replace_table);
1107 kpt->idname,
sizeof(kpt->idname), replace_table, replace_table_len);
1145 if (
STREQ(asset_library->name,
"Default")) {
1154 const int default_title_points = 11;
1155 style->paneltitle.points = default_title_points;
1156 style->grouplabel.points = default_title_points;
1166 params.check_item =
true;
1167 params.check_diff_item_add =
true;
1202 if (userdef->pythondir_legacy[0]) {
1204 MEM_callocN(
sizeof(*script_dir),
"Versioning user script path"));
1238 userdef->
uiflag &= ~(1 << 23);
1251 style->paneltitle.character_weight = 400;
1252 style->grouplabel.character_weight = 400;
1253 style->widget.character_weight = 400;
1272 if (
STREQ(km->idname,
"NLA Channels")) {
1273 STRNCPY(km->idname,
"NLA Tracks");
1307 const char *addon_modules[] = {
1310 "io_import_images_as_planes",
1314 for (
int i = 0; i <
ARRAY_SIZE(addon_modules); i++) {
1335 userdef,
"VIEW3D_AST_brush_sculpt",
"Brushes/Mesh Sculpt/Cloth");
1337 userdef,
"VIEW3D_AST_brush_sculpt",
"Brushes/Mesh Sculpt/General");
1339 userdef,
"VIEW3D_AST_brush_sculpt",
"Brushes/Mesh Sculpt/Paint");
1344 style->tooltip.points = 11.0f;
1345 style->tooltip.character_weight = 400;
1346 style->tooltip.shadow = 0;
1347 style->tooltip.shady = -1;
1348 style->tooltip.shadowalpha = 0.5f;
1349 style->tooltip.shadowcolor = 0.0f;
1360 userdef,
"VIEW3D_AST_brush_gpencil_paint",
"Brushes/Grease Pencil Draw/Draw");
1362 userdef,
"VIEW3D_AST_brush_gpencil_paint",
"Brushes/Grease Pencil Draw/Erase");
1364 userdef,
"VIEW3D_AST_brush_gpencil_paint",
"Brushes/Grease Pencil Draw/Utilities");
1367 userdef,
"VIEW3D_AST_brush_gpencil_sculpt",
"Brushes/Grease Pencil Sculpt/Contrast");
1369 userdef,
"VIEW3D_AST_brush_gpencil_sculpt",
"Brushes/Grease Pencil Sculpt/Transform");
1371 userdef,
"VIEW3D_AST_brush_gpencil_sculpt",
"Brushes/Grease Pencil Sculpt/Utilities");
1376 if (
STREQ(
"Sculpt", keymap->idname)) {
1379 else if (
STREQ(
"Vertex Paint", keymap->idname)) {
1382 else if (
STREQ(
"Weight Paint", keymap->idname)) {
1385 else if (
STREQ(
"Image Paint", keymap->idname)) {
1401#undef USER_VERSION_ATLEAST
1414#ifdef WITH_EXPERIMENTAL_FEATURES
1423#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, const char *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)
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)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
void BLI_addhead(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
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)
#define STRNCPY(dst, 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_FLATTEN
@ SCULPT_BRUSH_TYPE_SMOOTH
@ SCULPT_BRUSH_TYPE_PAINT
@ SCULPT_BRUSH_TYPE_DISPLACEMENT_ERASER
@ SCULPT_BRUSH_TYPE_SCRAPE
@ 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
@ 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_SEQ_ED_CONNECT_STRIPS_BY_DEFAULT
@ USER_SEQ_ED_SIMPLE_TWEAKING
@ USER_TEMP_SPACE_DISPLAY_WINDOW
Read Guarded memory(de)allocation.
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
constexpr const char * c_str() const
void *(* MEM_callocN)(size_t len, const char *str)
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRefNull prop_name, int32_t value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_INT, set its name and value.
unsigned char grid_levels
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
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 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_mesh_texture_paint_brushes(wmKeyMap *keymap)
static void keymap_update_brushes_handle_remove_item(const blender::StringRef asset_prefix, const blender::StringRefNull tool_property, const blender::Map< int, blender::StringRef > &id_asset_map, wmKeyMapItem *kmi)
static void keymap_update_mesh_weight_paint_brushes(wmKeyMap *keymap)
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)
static void keymap_update_brushes_handle_add_item(const blender::StringRef asset_prefix, const blender::StringRefNull 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 void keymap_update_brushes(wmKeyMap *keymap, const blender::StringRef asset_prefix, const blender::StringRefNull 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)
void WM_keymap_item_properties_reset(wmKeyMapItem *kmi, IDProperty *properties)