Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'release')
-rw-r--r--release/darwin/Blender.app/Contents/Info.plist33
-rw-r--r--release/darwin/Blender.app/Contents/Resources/blender file icon.icnsbin284786 -> 0 bytes
-rw-r--r--release/datafiles/splash.pngbin887863 -> 737984 bytes
-rw-r--r--release/datafiles/userdef/userdef_default.c3
-rw-r--r--release/datafiles/userdef/userdef_default_theme.c13
-rw-r--r--release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py13
-rw-r--r--release/scripts/modules/bpy/path.py11
-rw-r--r--release/scripts/modules/bpy/utils/__init__.py4
-rw-r--r--release/scripts/modules/bpy_types.py1
-rw-r--r--release/scripts/presets/cloth/Cotton.py (renamed from release/scripts/presets/cloth/cotton.py)0
-rw-r--r--release/scripts/presets/cloth/Denim.py (renamed from release/scripts/presets/cloth/denim.py)0
-rw-r--r--release/scripts/presets/cloth/Leather.py (renamed from release/scripts/presets/cloth/leather.py)0
-rw-r--r--release/scripts/presets/cloth/Rubber.py (renamed from release/scripts/presets/cloth/rubber.py)0
-rw-r--r--release/scripts/presets/cloth/Silk.py (renamed from release/scripts/presets/cloth/silk.py)0
-rw-r--r--release/scripts/presets/cycles/integrator/Direct_Light.py (renamed from release/scripts/presets/cycles/integrator/direct_light.py)0
-rw-r--r--release/scripts/presets/cycles/integrator/Full_Global_Illumination.py (renamed from release/scripts/presets/cycles/integrator/full_global_illumination.py)0
-rw-r--r--release/scripts/presets/cycles/integrator/Limited_Global_Illumination.py (renamed from release/scripts/presets/cycles/integrator/limited_global_illumination.py)0
-rw-r--r--release/scripts/presets/cycles/sampling/Final.py (renamed from release/scripts/presets/cycles/sampling/final.py)0
-rw-r--r--release/scripts/presets/cycles/sampling/Preview.py (renamed from release/scripts/presets/cycles/sampling/preview.py)0
-rw-r--r--release/scripts/presets/ffmpeg/H264_in_MP4.py (renamed from release/scripts/presets/ffmpeg/h264_in_MP4.py)0
-rw-r--r--release/scripts/presets/ffmpeg/H264_in_Matroska.py (renamed from release/scripts/presets/ffmpeg/h264_in_Matroska.py)0
-rw-r--r--release/scripts/presets/ffmpeg/H264_in_Matroska_for_scrubbing.py (renamed from release/scripts/presets/ffmpeg/h264_in_Matroska_for_scrubbing.py)0
-rw-r--r--release/scripts/presets/ffmpeg/Ogg_Theora.py (renamed from release/scripts/presets/ffmpeg/ogg_theora.py)0
-rw-r--r--release/scripts/presets/ffmpeg/Xvid.py (renamed from release/scripts/presets/ffmpeg/xvid.py)0
-rw-r--r--release/scripts/presets/fluid/Honey.py (renamed from release/scripts/presets/fluid/honey.py)0
-rw-r--r--release/scripts/presets/fluid/Oil.py (renamed from release/scripts/presets/fluid/oil.py)0
-rw-r--r--release/scripts/presets/fluid/Water.py (renamed from release/scripts/presets/fluid/water.py)0
-rw-r--r--release/scripts/presets/gpencil_material/Fill_Only.py (renamed from release/scripts/presets/gpencil_material/fill_only.py)0
-rw-r--r--release/scripts/presets/gpencil_material/Stroke_Only.py (renamed from release/scripts/presets/gpencil_material/stroke_only.py)0
-rw-r--r--release/scripts/presets/gpencil_material/Stroke_and_Fill.py (renamed from release/scripts/presets/gpencil_material/stroke_and_fill.py)0
-rw-r--r--release/scripts/presets/hair_dynamics/Default.py (renamed from release/scripts/presets/hair_dynamics/default.py)0
-rw-r--r--release/scripts/presets/interface_theme/Blender_Dark.xml (renamed from release/scripts/presets/interface_theme/blender_dark.xml)0
-rw-r--r--release/scripts/presets/interface_theme/Blender_Light.xml (renamed from release/scripts/presets/interface_theme/blender_light.xml)24
-rw-r--r--release/scripts/presets/keyconfig/Blender.py (renamed from release/scripts/presets/keyconfig/blender.py)0
-rw-r--r--release/scripts/presets/keyconfig/Blender_27x.py (renamed from release/scripts/presets/keyconfig/blender_27x.py)25
-rw-r--r--release/scripts/presets/keyconfig/Industry_Compatible.py (renamed from release/scripts/presets/keyconfig/industry_compatible.py)0
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py2
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py2
-rw-r--r--release/scripts/presets/render/4K_UHDTV_2160p.py (renamed from release/scripts/presets/render/4k_UHDTV_2160p.py)0
-rw-r--r--release/scripts/presets/tracking_settings/Blurry_Footage.py (renamed from release/scripts/presets/tracking_settings/blurry_footage.py)0
-rw-r--r--release/scripts/presets/tracking_settings/Default.py (renamed from release/scripts/presets/tracking_settings/default.py)0
-rw-r--r--release/scripts/presets/tracking_settings/Fast_Motion.py (renamed from release/scripts/presets/tracking_settings/fast_motion.py)0
-rw-r--r--release/scripts/presets/tracking_settings/Planar.py (renamed from release/scripts/presets/tracking_settings/planar.py)0
-rw-r--r--release/scripts/presets/tracking_track_color/Default.py (renamed from release/scripts/presets/tracking_track_color/default.py)0
-rw-r--r--release/scripts/presets/tracking_track_color/Far_Plane.py (renamed from release/scripts/presets/tracking_track_color/far_plane.py)0
-rw-r--r--release/scripts/presets/tracking_track_color/Near_Plane.py (renamed from release/scripts/presets/tracking_track_color/near_plane.py)0
-rw-r--r--release/scripts/presets/tracking_track_color/Object.py (renamed from release/scripts/presets/tracking_track_color/object.py)0
-rw-r--r--release/scripts/startup/bl_operators/presets.py4
-rw-r--r--release/scripts/startup/bl_operators/wm.py24
-rw-r--r--release/scripts/startup/bl_ui/properties_data_gpencil.py13
-rw-r--r--release/scripts/startup/bl_ui/properties_data_volume.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_grease_pencil_common.py40
-rw-r--r--release/scripts/startup/bl_ui/properties_paint_common.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_field.py7
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py6
-rw-r--r--release/scripts/startup/bl_ui/space_dopesheet.py8
-rw-r--r--release/scripts/startup/bl_ui/space_image.py9
-rw-r--r--release/scripts/startup/bl_ui/space_node.py10
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py3
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py169
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py47
-rw-r--r--release/scripts/startup/nodeitems_builtins.py10
-rw-r--r--release/windows/batch/blender_debug_gpu.cmd2
63 files changed, 313 insertions, 178 deletions
diff --git a/release/darwin/Blender.app/Contents/Info.plist b/release/darwin/Blender.app/Contents/Info.plist
index 2408cf363b1..67b786bd933 100644
--- a/release/darwin/Blender.app/Contents/Info.plist
+++ b/release/darwin/Blender.app/Contents/Info.plist
@@ -11,8 +11,6 @@
<array>
<string>blend</string>
</array>
- <key>CFBundleTypeIconFile</key>
- <string>blender file icon.icns</string>
<key>CFBundleTypeName</key>
<string>Blender File</string>
<key>CFBundleTypeOSTypes</key>
@@ -23,6 +21,12 @@
<string>Editor</string>
<key>LSIsAppleDefaultForType</key>
<true/>
+ <key>LSItemContentTypes</key>
+ <array>
+ <string>org.blenderfoundation.blender.file</string>
+ </array>
+ <key>CFBundleTypeIconSystemGenerated</key>
+ <true/>
</dict>
</array>
<key>CFBundleExecutable</key>
@@ -49,5 +53,30 @@
<string>NSApplication</string>
<key>NSHighResolutionCapable</key>
<true/>
+ <key>UTExportedTypeDeclarations</key>
+ <array>
+ <dict>
+ <key>UTTypeConformsTo</key>
+ <array>
+ <string>public.data</string>
+ </array>
+ <key>UTTypeIdentifier</key>
+ <string>org.blenderfoundation.blender.file</string>
+ <key>UTTypeIcons</key>
+ <dict>
+ <key>UTTypeIconName</key>
+ <string>Blender File</string>
+ <key>UTTypeIconText</key>
+ <string>blend</string>
+ </dict>
+ <key>UTTypeTagSpecification</key>
+ <dict>
+ <key>public.filename-extension</key>
+ <array>
+ <string>blend</string>
+ </array>
+ </dict>
+ </dict>
+ </array>
</dict>
</plist>
diff --git a/release/darwin/Blender.app/Contents/Resources/blender file icon.icns b/release/darwin/Blender.app/Contents/Resources/blender file icon.icns
deleted file mode 100644
index 2bf78d3eb0d..00000000000
--- a/release/darwin/Blender.app/Contents/Resources/blender file icon.icns
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png
index 858709833fb..babb3e30c6d 100644
--- a/release/datafiles/splash.png
+++ b/release/datafiles/splash.png
Binary files differ
diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c
index b448a230da8..6383d7dfcca 100644
--- a/release/datafiles/userdef/userdef_default.c
+++ b/release/datafiles/userdef/userdef_default.c
@@ -105,7 +105,7 @@ const UserDef U_default = {
.autoexec_paths = {NULL},
.user_menus = {NULL},
- .keyconfigstr = "blender",
+ .keyconfigstr = "Blender",
.undosteps = 32,
.undomemory = 0,
.gp_manhattandist = 1,
@@ -119,6 +119,7 @@ const UserDef U_default = {
.gizmo_flag = USER_GIZMO_DRAW,
.gizmo_size = 75,
+ .gizmo_size_navigate_v3d = 80,
.edit_studio_light = 0,
.lookdev_sphere_size = 150,
.vbotimeout = 120,
diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c
index 2754b7f06f8..0477b0c9f23 100644
--- a/release/datafiles/userdef/userdef_default_theme.c
+++ b/release/datafiles/userdef/userdef_default_theme.c
@@ -489,16 +489,17 @@ const bTheme U_theme_default = {
.facedot_size = 4,
.info_selected = RGBA(0x3b5689ff),
.info_selected_text = RGBA(0xffffffff),
- .info_error = RGBA(0xff613dff),
+ .info_error = RGBA(0xb34c34ff),
.info_error_text = RGBA(0xffffffff),
- .info_warning = RGBA(0xf5bc41ff),
+ .info_warning = RGBA(0xac8737ff),
.info_warning_text = RGBA(0xffffffff),
- .info_info = RGBA(0x1d4383ff),
+ .info_info = RGBA(0x1f3862ff),
.info_info_text = RGBA(0xffffffff),
- .info_debug = RGBA(0xd3d3d3ff),
- .info_property = RGBA(0x3ace87ff),
+ .info_debug = RGBA(0x6b3293ff),
+ .info_debug_text = RGBA(0xffffffff),
+ .info_property = RGBA(0x329364ff),
.info_property_text = RGBA(0xffffffff),
- .info_operator = RGBA(0x3ace87ff),
+ .info_operator = RGBA(0x329364ff),
.info_operator_text = RGBA(0xffffffff),
},
.space_action = {
diff --git a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
index ebc5370a7af..ef398d5e08f 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
@@ -74,8 +74,6 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
if tap_reset_tool not in items_all_id:
use_tap_reset = False
- from bl_operators.wm import use_toolbar_release_hack
-
# Pie-menu style release to activate.
use_release_confirm = use_reset
@@ -437,7 +435,7 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
kmi = keymap.keymap_items.new(
"wm.tool_set_by_id",
- value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK',
+ value='DOUBLE_CLICK',
**kmi_toolbar_args_available,
)
kmi.properties.name = tap_reset_tool
@@ -451,15 +449,6 @@ def generate(context, space_type, use_fallback_keys=True, use_reset=True):
)
kmi.properties.skip_depressed = True
- if use_toolbar_release_hack:
- # ... or pass through to let the toolbar know we're released.
- # Let the operator know we're released.
- kmi = keymap.keymap_items.new(
- "wm.tool_set_by_id",
- type=kmi_toolbar_type,
- value='RELEASE',
- any=True,
- )
wm.keyconfigs.update()
return keymap
diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py
index 3860445233d..fad52eae84a 100644
--- a/release/scripts/modules/bpy/path.py
+++ b/release/scripts/modules/bpy/path.py
@@ -201,12 +201,13 @@ _display_name_literals = {
}
-def display_name(name, *, has_ext=True):
+def display_name(name, *, has_ext=True, title_case=True):
"""
Creates a display string from name to be used menus and the user interface.
- Capitalize the first letter in all lowercase names,
- mixed case names are kept as is. Intended for use with
- filenames and module names.
+ Intended for use with filenames and module names.
+
+ :arg has_ext: Remove file extension from name
+ :arg title_case: Convert lowercase names to title case
"""
if has_ext:
@@ -220,7 +221,7 @@ def display_name(name, *, has_ext=True):
# (when paths can't start with numbers for eg).
name = name.replace("_", " ").lstrip(" ")
- if name.islower():
+ if title_case and name.islower():
name = name.lower().title()
name = _clean_utf8(name)
diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py
index 897010e80cf..7f39cc5d422 100644
--- a/release/scripts/modules/bpy/utils/__init__.py
+++ b/release/scripts/modules/bpy/utils/__init__.py
@@ -606,7 +606,7 @@ def preset_find(name, preset_path, display_name=False, ext=".py"):
if display_name:
filename = ""
for fn in _os.listdir(directory):
- if fn.endswith(ext) and name == _bpy.path.display_name(fn):
+ if fn.endswith(ext) and name == _bpy.path.display_name(fn, title_case=False):
filename = fn
break
else:
@@ -624,7 +624,7 @@ def keyconfig_init():
active_config = _preferences.keymap.active_keyconfig
# Load the default key configuration.
- default_filepath = preset_find("blender", "keyconfig")
+ default_filepath = preset_find("Blender", "keyconfig")
keyconfig_set(default_filepath)
# Set the active key configuration if different
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index d863778a9c2..5d89763f34b 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -982,6 +982,7 @@ class Menu(StructRNA, _GenericUI, metaclass=RNAMeta):
props_default=props_default,
filter_ext=lambda ext: ext.lower() in ext_valid,
add_operator=add_operator,
+ display_name=lambda name: bpy.path.display_name(name, title_case=False)
)
@classmethod
diff --git a/release/scripts/presets/cloth/cotton.py b/release/scripts/presets/cloth/Cotton.py
index 9e766416a75..9e766416a75 100644
--- a/release/scripts/presets/cloth/cotton.py
+++ b/release/scripts/presets/cloth/Cotton.py
diff --git a/release/scripts/presets/cloth/denim.py b/release/scripts/presets/cloth/Denim.py
index 7abf4469709..7abf4469709 100644
--- a/release/scripts/presets/cloth/denim.py
+++ b/release/scripts/presets/cloth/Denim.py
diff --git a/release/scripts/presets/cloth/leather.py b/release/scripts/presets/cloth/Leather.py
index 8ba9ff7dabe..8ba9ff7dabe 100644
--- a/release/scripts/presets/cloth/leather.py
+++ b/release/scripts/presets/cloth/Leather.py
diff --git a/release/scripts/presets/cloth/rubber.py b/release/scripts/presets/cloth/Rubber.py
index 0d791fab2a9..0d791fab2a9 100644
--- a/release/scripts/presets/cloth/rubber.py
+++ b/release/scripts/presets/cloth/Rubber.py
diff --git a/release/scripts/presets/cloth/silk.py b/release/scripts/presets/cloth/Silk.py
index af867cf9c60..af867cf9c60 100644
--- a/release/scripts/presets/cloth/silk.py
+++ b/release/scripts/presets/cloth/Silk.py
diff --git a/release/scripts/presets/cycles/integrator/direct_light.py b/release/scripts/presets/cycles/integrator/Direct_Light.py
index 701aa10d556..701aa10d556 100644
--- a/release/scripts/presets/cycles/integrator/direct_light.py
+++ b/release/scripts/presets/cycles/integrator/Direct_Light.py
diff --git a/release/scripts/presets/cycles/integrator/full_global_illumination.py b/release/scripts/presets/cycles/integrator/Full_Global_Illumination.py
index a03c6c8bd64..a03c6c8bd64 100644
--- a/release/scripts/presets/cycles/integrator/full_global_illumination.py
+++ b/release/scripts/presets/cycles/integrator/Full_Global_Illumination.py
diff --git a/release/scripts/presets/cycles/integrator/limited_global_illumination.py b/release/scripts/presets/cycles/integrator/Limited_Global_Illumination.py
index d37bf46c705..d37bf46c705 100644
--- a/release/scripts/presets/cycles/integrator/limited_global_illumination.py
+++ b/release/scripts/presets/cycles/integrator/Limited_Global_Illumination.py
diff --git a/release/scripts/presets/cycles/sampling/final.py b/release/scripts/presets/cycles/sampling/Final.py
index f1222d927c1..f1222d927c1 100644
--- a/release/scripts/presets/cycles/sampling/final.py
+++ b/release/scripts/presets/cycles/sampling/Final.py
diff --git a/release/scripts/presets/cycles/sampling/preview.py b/release/scripts/presets/cycles/sampling/Preview.py
index c16449e2c8f..c16449e2c8f 100644
--- a/release/scripts/presets/cycles/sampling/preview.py
+++ b/release/scripts/presets/cycles/sampling/Preview.py
diff --git a/release/scripts/presets/ffmpeg/h264_in_MP4.py b/release/scripts/presets/ffmpeg/H264_in_MP4.py
index 0e9c32c4878..0e9c32c4878 100644
--- a/release/scripts/presets/ffmpeg/h264_in_MP4.py
+++ b/release/scripts/presets/ffmpeg/H264_in_MP4.py
diff --git a/release/scripts/presets/ffmpeg/h264_in_Matroska.py b/release/scripts/presets/ffmpeg/H264_in_Matroska.py
index 1fe066dc4bf..1fe066dc4bf 100644
--- a/release/scripts/presets/ffmpeg/h264_in_Matroska.py
+++ b/release/scripts/presets/ffmpeg/H264_in_Matroska.py
diff --git a/release/scripts/presets/ffmpeg/h264_in_Matroska_for_scrubbing.py b/release/scripts/presets/ffmpeg/H264_in_Matroska_for_scrubbing.py
index eb1889d272f..eb1889d272f 100644
--- a/release/scripts/presets/ffmpeg/h264_in_Matroska_for_scrubbing.py
+++ b/release/scripts/presets/ffmpeg/H264_in_Matroska_for_scrubbing.py
diff --git a/release/scripts/presets/ffmpeg/ogg_theora.py b/release/scripts/presets/ffmpeg/Ogg_Theora.py
index b450b67fd98..b450b67fd98 100644
--- a/release/scripts/presets/ffmpeg/ogg_theora.py
+++ b/release/scripts/presets/ffmpeg/Ogg_Theora.py
diff --git a/release/scripts/presets/ffmpeg/xvid.py b/release/scripts/presets/ffmpeg/Xvid.py
index dba0f71c279..dba0f71c279 100644
--- a/release/scripts/presets/ffmpeg/xvid.py
+++ b/release/scripts/presets/ffmpeg/Xvid.py
diff --git a/release/scripts/presets/fluid/honey.py b/release/scripts/presets/fluid/Honey.py
index 0ed3658470a..0ed3658470a 100644
--- a/release/scripts/presets/fluid/honey.py
+++ b/release/scripts/presets/fluid/Honey.py
diff --git a/release/scripts/presets/fluid/oil.py b/release/scripts/presets/fluid/Oil.py
index c33e5d4b6cf..c33e5d4b6cf 100644
--- a/release/scripts/presets/fluid/oil.py
+++ b/release/scripts/presets/fluid/Oil.py
diff --git a/release/scripts/presets/fluid/water.py b/release/scripts/presets/fluid/Water.py
index f34ecc834ff..f34ecc834ff 100644
--- a/release/scripts/presets/fluid/water.py
+++ b/release/scripts/presets/fluid/Water.py
diff --git a/release/scripts/presets/gpencil_material/fill_only.py b/release/scripts/presets/gpencil_material/Fill_Only.py
index aa4d58a8c10..aa4d58a8c10 100644
--- a/release/scripts/presets/gpencil_material/fill_only.py
+++ b/release/scripts/presets/gpencil_material/Fill_Only.py
diff --git a/release/scripts/presets/gpencil_material/stroke_only.py b/release/scripts/presets/gpencil_material/Stroke_Only.py
index 4e02b108e01..4e02b108e01 100644
--- a/release/scripts/presets/gpencil_material/stroke_only.py
+++ b/release/scripts/presets/gpencil_material/Stroke_Only.py
diff --git a/release/scripts/presets/gpencil_material/stroke_and_fill.py b/release/scripts/presets/gpencil_material/Stroke_and_Fill.py
index 3572036de5e..3572036de5e 100644
--- a/release/scripts/presets/gpencil_material/stroke_and_fill.py
+++ b/release/scripts/presets/gpencil_material/Stroke_and_Fill.py
diff --git a/release/scripts/presets/hair_dynamics/default.py b/release/scripts/presets/hair_dynamics/Default.py
index 830d28a76f0..830d28a76f0 100644
--- a/release/scripts/presets/hair_dynamics/default.py
+++ b/release/scripts/presets/hair_dynamics/Default.py
diff --git a/release/scripts/presets/interface_theme/blender_dark.xml b/release/scripts/presets/interface_theme/Blender_Dark.xml
index 8bbb747447b..8bbb747447b 100644
--- a/release/scripts/presets/interface_theme/blender_dark.xml
+++ b/release/scripts/presets/interface_theme/Blender_Dark.xml
diff --git a/release/scripts/presets/interface_theme/blender_light.xml b/release/scripts/presets/interface_theme/Blender_Light.xml
index 91ccd574c31..77908bb6bbf 100644
--- a/release/scripts/presets/interface_theme/blender_light.xml
+++ b/release/scripts/presets/interface_theme/Blender_Light.xml
@@ -1053,19 +1053,19 @@
<info>
<ThemeInfo
info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#990000ff"
- info_error_text="#ffffff"
- info_warning="#b36a00ff"
- info_warning_text="#ffffff"
- info_info="#1d4383ff"
- info_info_text="#ffffff"
- info_debug="#d3d3d3ff"
+ info_selected_text="#000000"
+ info_error="#FF0038ff"
+ info_error_text="#000000"
+ info_warning="#FFE900ff"
+ info_warning_text="#000000"
+ info_info="#0068B3ff"
+ info_info_text="#000000"
+ info_debug="#B30095ff"
info_debug_text="#000000"
- info_property="#3ace87ff"
- info_property_text="#ffffff"
- info_operator="#3ace87ff"
- info_operator_text="#ffffff"
+ info_property="#44B300ff"
+ info_property_text="#000000"
+ info_operator="#44B300ff"
+ info_operator_text="#000000"
>
<space>
<ThemeSpaceGeneric
diff --git a/release/scripts/presets/keyconfig/blender.py b/release/scripts/presets/keyconfig/Blender.py
index eb66c961472..eb66c961472 100644
--- a/release/scripts/presets/keyconfig/blender.py
+++ b/release/scripts/presets/keyconfig/Blender.py
diff --git a/release/scripts/presets/keyconfig/blender_27x.py b/release/scripts/presets/keyconfig/Blender_27x.py
index efb013b9216..2a7f0b07fa6 100644
--- a/release/scripts/presets/keyconfig/blender_27x.py
+++ b/release/scripts/presets/keyconfig/Blender_27x.py
@@ -1,3 +1,28 @@
+#
+# Notes on this key-map:
+#
+# This uses Blender's key-map, running with `legacy=True`.
+#
+# The intention of this key-map is to match Blender 2.7x which had many more key-map items available.
+#
+# There are some differences with the original Blender 2.7x key-map.
+# There is no intention to change these are they are not considered significant
+# enough to make a 1:1 match with the previous Blender version.
+#
+# These include:
+#
+# 3D View
+# =======
+#
+# - Border Render (`Shift-B` -> `Ctrl-B`)
+# Both `Shift-B` and `Ctrl-B` were used.
+#
+# Time Line/Animation Views
+# =========================
+#
+# - Start Frame/End Frame (`S/E` -> `Ctrl-Home/Ctrl-End`)
+#
+
import os
import bpy
from bpy.props import (
diff --git a/release/scripts/presets/keyconfig/industry_compatible.py b/release/scripts/presets/keyconfig/Industry_Compatible.py
index 09a43452e93..09a43452e93 100644
--- a/release/scripts/presets/keyconfig/industry_compatible.py
+++ b/release/scripts/presets/keyconfig/Industry_Compatible.py
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 73f05fb3d80..fd9d699ed01 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -5131,6 +5131,8 @@ def km_transform_modal_map(_params):
("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS'}, None),
("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, None),
("AUTOCONSTRAINPLANE", {"type": 'MIDDLEMOUSE', "value": 'ANY', "shift": True}, None),
+ ("PRECISION", {"type": 'LEFT_SHIFT', "value": 'ANY', "any": True}, None),
+ ("PRECISION", {"type": 'RIGHT_SHIFT', "value": 'ANY', "any": True}, None),
])
return keymap
diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
index 4cffb6805a0..234781b7bc8 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -3962,6 +3962,8 @@ def km_transform_modal_map(_params):
("INSERTOFS_TOGGLE_DIR", {"type": 'T', "value": 'PRESS'}, None),
("AUTOCONSTRAIN", {"type": 'MIDDLEMOUSE', "value": 'ANY'}, None),
("AUTOCONSTRAINPLANE", {"type": 'MIDDLEMOUSE', "value": 'ANY', "shift": True}, None),
+ ("PRECISION", {"type": 'LEFT_SHIFT', "value": 'ANY', "any": True}, None),
+ ("PRECISION", {"type": 'RIGHT_SHIFT', "value": 'ANY', "any": True}, None),
])
return keymap
diff --git a/release/scripts/presets/render/4k_UHDTV_2160p.py b/release/scripts/presets/render/4K_UHDTV_2160p.py
index 4517d2f435e..4517d2f435e 100644
--- a/release/scripts/presets/render/4k_UHDTV_2160p.py
+++ b/release/scripts/presets/render/4K_UHDTV_2160p.py
diff --git a/release/scripts/presets/tracking_settings/blurry_footage.py b/release/scripts/presets/tracking_settings/Blurry_Footage.py
index 253a8f395ba..253a8f395ba 100644
--- a/release/scripts/presets/tracking_settings/blurry_footage.py
+++ b/release/scripts/presets/tracking_settings/Blurry_Footage.py
diff --git a/release/scripts/presets/tracking_settings/default.py b/release/scripts/presets/tracking_settings/Default.py
index 3d2481ce7ad..3d2481ce7ad 100644
--- a/release/scripts/presets/tracking_settings/default.py
+++ b/release/scripts/presets/tracking_settings/Default.py
diff --git a/release/scripts/presets/tracking_settings/fast_motion.py b/release/scripts/presets/tracking_settings/Fast_Motion.py
index 4294b7327d1..4294b7327d1 100644
--- a/release/scripts/presets/tracking_settings/fast_motion.py
+++ b/release/scripts/presets/tracking_settings/Fast_Motion.py
diff --git a/release/scripts/presets/tracking_settings/planar.py b/release/scripts/presets/tracking_settings/Planar.py
index a099b3a800d..a099b3a800d 100644
--- a/release/scripts/presets/tracking_settings/planar.py
+++ b/release/scripts/presets/tracking_settings/Planar.py
diff --git a/release/scripts/presets/tracking_track_color/default.py b/release/scripts/presets/tracking_track_color/Default.py
index 3213d6e0c83..3213d6e0c83 100644
--- a/release/scripts/presets/tracking_track_color/default.py
+++ b/release/scripts/presets/tracking_track_color/Default.py
diff --git a/release/scripts/presets/tracking_track_color/far_plane.py b/release/scripts/presets/tracking_track_color/Far_Plane.py
index 579d5562642..579d5562642 100644
--- a/release/scripts/presets/tracking_track_color/far_plane.py
+++ b/release/scripts/presets/tracking_track_color/Far_Plane.py
diff --git a/release/scripts/presets/tracking_track_color/near_plane.py b/release/scripts/presets/tracking_track_color/Near_Plane.py
index 790429ce7a1..790429ce7a1 100644
--- a/release/scripts/presets/tracking_track_color/near_plane.py
+++ b/release/scripts/presets/tracking_track_color/Near_Plane.py
diff --git a/release/scripts/presets/tracking_track_color/object.py b/release/scripts/presets/tracking_track_color/Object.py
index 5cb663d3f97..5cb663d3f97 100644
--- a/release/scripts/presets/tracking_track_color/object.py
+++ b/release/scripts/presets/tracking_track_color/Object.py
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index 793a8648ee4..5132b358f5e 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -77,7 +77,7 @@ class AddPresetBase:
setattr(cls, attr, trans)
return trans
- name = name.lower().strip()
+ name = name.strip()
name = bpy.path.display_name_to_filepath(name)
trans = maketrans_init()
# Strip surrounding "_" as they are displayed as spaces.
@@ -249,7 +249,7 @@ class ExecutePreset(Operator):
# change the menu title to the most recently chosen option
preset_class = getattr(bpy.types, self.menu_idname)
- preset_class.bl_label = bpy.path.display_name(basename(filepath))
+ preset_class.bl_label = bpy.path.display_name(basename(filepath), title_case=False)
ext = splitext(filepath)[1].lower()
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index ee46742fbd0..2ee20e08589 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -33,11 +33,6 @@ from bpy.props import (
)
from bpy.app.translations import pgettext_iface as iface_
-# FIXME, we need a way to detect key repeat events.
-# unfortunately checking event previous values isn't reliable.
-use_toolbar_release_hack = True
-
-
rna_path_prop = StringProperty(
name="Context Attributes",
description="RNA context string",
@@ -1698,18 +1693,6 @@ class WM_OT_tool_set_by_id(Operator):
space_type: rna_space_type_prop
- if use_toolbar_release_hack:
- def invoke(self, context, event):
- # Hack :S
- if not self.properties.is_property_set("name"):
- WM_OT_toolbar._key_held = False
- return {'PASS_THROUGH'}
- elif (WM_OT_toolbar._key_held == event.type) and (event.value != 'RELEASE'):
- return {'PASS_THROUGH'}
- WM_OT_toolbar._key_held = None
-
- return self.execute(context)
-
def execute(self, context):
from bl_ui.space_toolsystem_common import (
activate_by_id,
@@ -1801,13 +1784,6 @@ class WM_OT_toolbar(Operator):
def poll(cls, context):
return context.space_data is not None
- if use_toolbar_release_hack:
- _key_held = None
-
- def invoke(self, context, event):
- WM_OT_toolbar._key_held = event.type
- return self.execute(context)
-
@staticmethod
def keymap_from_toolbar(context, space_type, use_fallback_keys=True, use_reset=True):
from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
diff --git a/release/scripts/startup/bl_ui/properties_data_gpencil.py b/release/scripts/startup/bl_ui/properties_data_gpencil.py
index 351d4928ddf..9db6eedb04c 100644
--- a/release/scripts/startup/bl_ui/properties_data_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_data_gpencil.py
@@ -23,6 +23,7 @@ from rna_prop_ui import PropertyPanel
from bl_ui.properties_grease_pencil_common import (
GreasePencilLayerMasksPanel,
+ GreasePencilLayerTransformPanel,
GreasePencilLayerAdjustmentsPanel,
GreasePencilLayerRelationsPanel,
GreasePencilLayerDisplayPanel,
@@ -90,8 +91,10 @@ class GPENCIL_MT_layer_context_menu(Menu):
layout = self.layout
ob = context.object
gpd = ob.data
+ gpl = gpd.layers.active
- layout.operator("gpencil.layer_duplicate", icon='DUPLICATE')
+ layout.operator("gpencil.layer_duplicate", text="Duplicate", icon='DUPLICATE').mode='ALL'
+ layout.operator("gpencil.layer_duplicate", text="Duplicate Empty Keyframes").mode='EMPTY'
layout.separator()
@@ -103,6 +106,7 @@ class GPENCIL_MT_layer_context_menu(Menu):
layout.operator("gpencil.lock_all", icon='LOCKED', text="Lock All")
layout.operator("gpencil.unlock_all", icon='UNLOCKED', text="Unlock All")
layout.prop(gpd, "use_autolock_layers", text="Autolock Inactive Layers")
+ layout.prop(gpl, "lock_material")
layout.separator()
@@ -188,6 +192,12 @@ class DATA_PT_gpencil_layer_masks(LayerDataButtonsPanel, GreasePencilLayerMasksP
bl_options = {'DEFAULT_CLOSED'}
+class DATA_PT_gpencil_layer_transform(LayerDataButtonsPanel, GreasePencilLayerTransformPanel, Panel):
+ bl_label = "Transform"
+ bl_parent_id = 'DATA_PT_gpencil_layers'
+ bl_options = {'DEFAULT_CLOSED'}
+
+
class DATA_PT_gpencil_layer_adjustments(LayerDataButtonsPanel, GreasePencilLayerAdjustmentsPanel, Panel):
bl_label = "Adjustments"
bl_parent_id = 'DATA_PT_gpencil_layers'
@@ -424,6 +434,7 @@ classes = (
DATA_PT_gpencil_onion_skinning_custom_colors,
DATA_PT_gpencil_onion_skinning_display,
DATA_PT_gpencil_layer_masks,
+ DATA_PT_gpencil_layer_transform,
DATA_PT_gpencil_layer_adjustments,
DATA_PT_gpencil_layer_relations,
DATA_PT_gpencil_layer_display,
diff --git a/release/scripts/startup/bl_ui/properties_data_volume.py b/release/scripts/startup/bl_ui/properties_data_volume.py
index d4f108dcf24..e7bf9adb876 100644
--- a/release/scripts/startup/bl_ui/properties_data_volume.py
+++ b/release/scripts/startup/bl_ui/properties_data_volume.py
@@ -63,7 +63,7 @@ class DATA_PT_volume_file(DataButtonsPanel, Panel):
layout.prop(volume, "filepath", text="")
- if len(volume.filepath):
+ if volume.filepath:
layout.use_property_split = True
layout.use_property_decorate = False
@@ -76,7 +76,7 @@ class DATA_PT_volume_file(DataButtonsPanel, Panel):
col.prop(volume, "sequence_mode", text="Mode")
error_msg = volume.grids.error_message
- if len(error_msg):
+ if error_msg:
layout.separator()
col = layout.column(align=True)
col.label(text="Failed to load volume:")
diff --git a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
index 8b404c4a306..67905192fe8 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -727,12 +727,32 @@ class GreasePencilSimplifyPanel:
col.prop(rd, "simplify_gpencil_antialiasing")
+class GreasePencilLayerTransformPanel:
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ ob = context.object
+ gpd = ob.data
+ gpl = gpd.layers.active
+ layout.active = not gpl.lock
+
+ row = layout.row(align=True)
+ row.prop(gpl, "location")
+
+ row = layout.row(align=True)
+ row.prop(gpl, "rotation")
+
+ row = layout.row(align=True)
+ row.prop(gpl, "scale")
+
+
class GreasePencilLayerAdjustmentsPanel:
def draw(self, context):
layout = self.layout
layout.use_property_split = True
- scene = context.scene
ob = context.object
gpd = ob.data
@@ -750,15 +770,6 @@ class GreasePencilLayerAdjustmentsPanel:
col = layout.row(align=True)
col.prop(gpl, "line_change", text="Stroke Thickness")
- col = layout.row(align=True)
- col.prop(gpl, "pass_index")
-
- col = layout.row(align=True)
- col.prop_search(gpl, "viewlayer_render", scene, "view_layers", text="View Layer")
-
- col = layout.row(align=True)
- col.prop(gpl, "lock_material")
-
class GPENCIL_UL_masks(UIList):
def draw_item(self, _context, layout, _data, item, icon, _active_data, _active_propname, _index):
@@ -826,6 +837,7 @@ class GreasePencilLayerRelationsPanel:
layout.use_property_split = True
layout.use_property_decorate = False
+ scene = context.scene
ob = context.object
gpd = ob.data
gpl = gpd.layers.active
@@ -839,6 +851,14 @@ class GreasePencilLayerRelationsPanel:
if parent and gpl.parent_type == 'BONE' and parent.type == 'ARMATURE':
col.prop_search(gpl, "parent_bone", parent.data, "bones", text="Bone")
+ layout.separator()
+
+ col = layout.row(align=True)
+ col.prop(gpl, "pass_index")
+
+ col = layout.row(align=True)
+ col.prop_search(gpl, "viewlayer_render", scene, "view_layers", text="View Layer")
+
class GreasePencilLayerDisplayPanel:
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index 5d241e8e216..30e50bde969 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -1218,11 +1218,13 @@ def brush_basic_gpencil_paint_settings(layout, context, brush, *, compact=False)
row = layout.row(align=True)
row.prop(gp_settings, "fill_direction", text="", expand=True)
row = layout.row(align=True)
+ row.prop(gp_settings, "fill_factor")
+ row = layout.row(align=True)
row.prop(gp_settings, "fill_leak", text="Leak Size")
row = layout.row(align=True)
row.prop(brush, "size", text="Thickness")
row = layout.row(align=True)
- row.prop(gp_settings, "fill_simplify_level", text="Simplify")
+ row.prop(gp_settings, "use_fill_autofit", text="", icon="SNAP_FACE_CENTER")
else: # brush.gpencil_tool == 'DRAW/TINT':
row = layout.row(align=True)
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py
index c8c49ee02b0..7e017b121b3 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -118,6 +118,9 @@ class PHYSICS_PT_field_settings(PhysicButtonsPanel, Panel):
col.prop(field, "strength")
+ sub = col.column(heading="Affect")
+ sub.prop(field, "apply_to_location", text="Location")
+
col = flow.column()
col.prop(field, "texture_nabla")
col.prop(field, "use_object_coords")
@@ -128,6 +131,10 @@ class PHYSICS_PT_field_settings(PhysicButtonsPanel, Panel):
col.prop(field, "strength")
col.prop(field, "flow")
+ sub = col.column(heading="Affect")
+ sub.prop(field, "apply_to_location", text="Location")
+ sub.prop(field, "apply_to_rotation", text="Rotation")
+
col = flow.column()
col.prop(field, "source_object")
col.prop(field, "use_smoke_density")
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index 9d74a9c9fea..96920af1c7e 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -502,7 +502,9 @@ class CLIP_PT_tools_tracking(CLIP_PT_tracking_panel, Panel):
col = layout.column(align=True)
row = col.row(align=True)
row.label(text="Merge:")
- row.operator("clip.join_tracks", text="Join Tracks")
+ sub = row.column()
+ sub.operator("clip.join_tracks", text="Join Tracks")
+ sub.operator("clip.average_tracks", text="Average Tracks")
class CLIP_PT_tools_plane_tracking(CLIP_PT_tracking_panel, Panel):
@@ -1482,6 +1484,7 @@ class CLIP_MT_track(Menu):
layout.separator()
layout.operator("clip.join_tracks")
+ layout.operator("clip.average_tracks")
layout.separator()
@@ -1608,6 +1611,7 @@ class CLIP_MT_tracking_context_menu(Menu):
layout.separator()
layout.operator("clip.join_tracks")
+ layout.operator("clip.average_tracks")
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py
index 0c222e8c023..aa98e4292f4 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -27,6 +27,7 @@ from bpy.types import (
from bl_ui.properties_grease_pencil_common import (
GreasePencilLayerMasksPanel,
+ GreasePencilLayerTransformPanel,
GreasePencilLayerAdjustmentsPanel,
GreasePencilLayerRelationsPanel,
GreasePencilLayerDisplayPanel,
@@ -726,6 +727,12 @@ class DOPESHEET_PT_gpencil_layer_masks(LayersDopeSheetPanel, GreasePencilLayerMa
bl_options = {'DEFAULT_CLOSED'}
+class DOPESHEET_PT_gpencil_layer_transform(LayersDopeSheetPanel, GreasePencilLayerTransformPanel, Panel):
+ bl_label = "Transform"
+ bl_parent_id = 'DOPESHEET_PT_gpencil_mode'
+ bl_options = {'DEFAULT_CLOSED'}
+
+
class DOPESHEET_PT_gpencil_layer_adjustments(LayersDopeSheetPanel, GreasePencilLayerAdjustmentsPanel, Panel):
bl_label = "Adjustments"
bl_parent_id = 'DOPESHEET_PT_gpencil_mode'
@@ -762,6 +769,7 @@ classes = (
DOPESHEET_PT_filters,
DOPESHEET_PT_gpencil_mode,
DOPESHEET_PT_gpencil_layer_masks,
+ DOPESHEET_PT_gpencil_layer_transform,
DOPESHEET_PT_gpencil_layer_adjustments,
DOPESHEET_PT_gpencil_layer_relations,
DOPESHEET_PT_gpencil_layer_display,
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 342b72acb8c..73cc674858c 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -235,6 +235,7 @@ class IMAGE_MT_image(Menu):
layout.menu("IMAGE_MT_image_invert")
layout.operator("image.resize", text="Resize")
+ layout.menu("IMAGE_MT_image_flip")
if ima and not show_render:
if ima.packed_file:
@@ -250,6 +251,13 @@ class IMAGE_MT_image(Menu):
layout.operator("palette.extract_from_image", text="Extract Palette")
layout.operator("gpencil.image_to_grease_pencil", text="Generate Grease Pencil")
+class IMAGE_MT_image_flip(Menu):
+ bl_label = "Flip"
+
+ def draw(self, _context):
+ layout = self.layout
+ layout.operator("image.flip", text="Horizontally").use_flip_horizontal = True
+ layout.operator("image.flip", text="Vertically").use_flip_vertical = True
class IMAGE_MT_image_invert(Menu):
bl_label = "Invert"
@@ -1584,6 +1592,7 @@ classes = (
IMAGE_MT_select,
IMAGE_MT_select_linked,
IMAGE_MT_image,
+ IMAGE_MT_image_flip,
IMAGE_MT_image_invert,
IMAGE_MT_uvs,
IMAGE_MT_uvs_showhide,
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index e6af83b61f4..a9934850acd 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -678,16 +678,8 @@ class NODE_UL_interface_sockets(bpy.types.UIList):
if self.layout_type in {'DEFAULT', 'COMPACT'}:
row = layout.row(align=True)
- # inputs get icon on the left
- if not socket.is_output:
- row.template_node_socket(color=color)
-
+ row.template_node_socket(color=color)
row.prop(socket, "name", text="", emboss=False, icon_value=icon)
-
- # outputs get icon on the right
- if socket.is_output:
- row.template_node_socket(color=color)
-
elif self.layout_type == 'GRID':
layout.alignment = 'CENTER'
layout.template_node_socket(color=color)
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 4b30266a5fe..a0b5355e64d 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -691,6 +691,9 @@ class USERPREF_PT_viewport_display(ViewportPanel, CenterAlignMixIn, Panel):
col.prop(view, "mini_axis_size", text="Size")
col.prop(view, "mini_axis_brightness", text="Brightness")
+ if view.mini_axis_type == 'GIZMO':
+ col.prop(view, "gizmo_size_navigate_v3d", text="Size")
+
class USERPREF_PT_viewport_quality(ViewportPanel, CenterAlignMixIn, Panel):
bl_label = "Quality"
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index b9a57674a6e..0fe16720d81 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -695,6 +695,10 @@ class VIEW3D_HT_header(Header):
row.prop(tool_settings, "use_gpencil_vertex_select_mask_stroke", text="")
row.prop(tool_settings, "use_gpencil_vertex_select_mask_segment", text="")
+ if gpd.is_stroke_paint_mode:
+ row = layout.row(align=True)
+ row.prop(gpd, "use_multiedit", text="", icon='GP_MULTIFRAME_EDITING')
+
if (
gpd.use_stroke_edit_mode or
gpd.is_stroke_sculpt_mode or
@@ -2236,11 +2240,6 @@ class VIEW3D_MT_object_relations(Menu):
layout.operator_menu_enum("object.make_local", "type", text="Make Local...")
layout.menu("VIEW3D_MT_make_single_user")
- layout.separator()
-
- layout.operator("object.data_transfer")
- layout.operator("object.datalayout_transfer")
-
class VIEW3D_MT_object(Menu):
bl_context = "objectmode"
@@ -2274,7 +2273,7 @@ class VIEW3D_MT_object(Menu):
layout.menu("VIEW3D_MT_object_relations")
layout.menu("VIEW3D_MT_object_constraints")
layout.menu("VIEW3D_MT_object_track")
- layout.menu("VIEW3D_MT_make_links", text="Make Links")
+ layout.menu("VIEW3D_MT_make_links")
layout.separator()
@@ -2292,16 +2291,7 @@ class VIEW3D_MT_object(Menu):
layout.separator()
- ob = context.active_object
- if ob and ob.type == 'GPENCIL' and context.gpencil_data:
- layout.operator_menu_enum("gpencil.convert", "type", text="Convert To")
- else:
- layout.operator_menu_enum("object.convert", "target")
-
- # Potrace lib dependency
- if bpy.app.build_options.potrace:
- layout.separator()
- layout.operator("gpencil.trace_image")
+ layout.menu("VIEW3D_MT_object_convert")
layout.separator()
@@ -2397,37 +2387,25 @@ class VIEW3D_MT_object_context_menu(Menu):
'''
# If something is selected
- if obj is not None and obj.type in {'MESH', 'CURVE', 'SURFACE'}:
- layout.operator("object.shade_smooth", text="Shade Smooth")
- layout.operator("object.shade_flat", text="Shade Flat")
-
- layout.separator()
+ # Individual object types.
if obj is None:
pass
- elif obj.type == 'MESH':
- layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type")
-
- layout.operator_context = 'INVOKE_DEFAULT'
- # If more than one object is selected
- if selected_objects_len > 1:
- layout.operator("object.join")
-
- layout.separator()
elif obj.type == 'CAMERA':
layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("view3d.object_as_camera", text="Set Active Camera")
+
if obj.data.type == 'PERSP':
- props = layout.operator("wm.context_modal_mouse", text="Camera Lens Angle")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Focal Length")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.lens"
props.input_scale = 0.1
if obj.data.lens_unit == 'MILLIMETERS':
- props.header_text = "Camera Lens Angle: %.1fmm"
+ props.header_text = "Camera Focal Length: %.1fmm"
else:
- props.header_text = "Camera Lens Angle: %.1f\u00B0"
+ props.header_text = "Camera Focal Length: %.1f\u00B0"
else:
props = layout.operator("wm.context_modal_mouse", text="Camera Lens Scale")
@@ -2440,88 +2418,83 @@ class VIEW3D_MT_object_context_menu(Menu):
if view and view.camera == obj and view.region_3d.view_perspective == 'CAMERA':
props = layout.operator("ui.eyedropper_depth", text="DOF Distance (Pick)")
else:
- props = layout.operator("wm.context_modal_mouse", text="DOF Distance")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Focus Distance")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.dof.focus_distance"
props.input_scale = 0.02
- props.header_text = "DOF Distance: %.3f"
+ props.header_text = "Focus Distance: %.3f"
layout.separator()
elif obj.type in {'CURVE', 'FONT'}:
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Extrude Size")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Extrusion")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.extrude"
props.input_scale = 0.01
- props.header_text = "Extrude Size: %.3f"
+ props.header_text = "Extrude: %.3f"
- props = layout.operator("wm.context_modal_mouse", text="Width Size")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Offset")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.offset"
props.input_scale = 0.01
- props.header_text = "Width Size: %.3f"
-
- layout.separator()
-
- layout.operator("object.convert", text="Convert to Mesh").target = 'MESH'
- layout.operator("object.convert", text="Convert to Grease Pencil").target = 'GPENCIL'
- layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type")
-
- layout.separator()
-
- elif obj.type == 'GPENCIL':
- layout.operator("gpencil.convert", text="Convert to Path").type = 'PATH'
- layout.operator("gpencil.convert", text="Convert to Bezier Curve").type = 'CURVE'
- layout.operator("gpencil.convert", text="Convert to Polygon Curve").type = 'POLY'
-
- layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type")
+ props.header_text = "Offset: %.3f"
layout.separator()
elif obj.type == 'EMPTY':
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Empty Draw Size")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Empty Display Size")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "empty_display_size"
props.input_scale = 0.01
- props.header_text = "Empty Draw Size: %.3f"
+ props.header_text = "Empty Display Size: %.3f"
layout.separator()
+ if obj.empty_display_type == 'IMAGE':
+ layout.operator("gpencil.trace_image")
+
+ layout.separator()
+
elif obj.type == 'LIGHT':
light = obj.data
layout.operator_context = 'INVOKE_REGION_WIN'
- props = layout.operator("wm.context_modal_mouse", text="Power")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Light Power")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.energy"
props.input_scale = 1.0
props.header_text = "Light Power: %.3f"
if light.type == 'AREA':
- props = layout.operator("wm.context_modal_mouse", text="Size X")
- props.data_path_iter = "selected_editable_objects"
- props.data_path_item = "data.size"
- props.header_text = "Light Size X: %.3f"
-
if light.shape in {'RECTANGLE', 'ELLIPSE'}:
- props = layout.operator("wm.context_modal_mouse", text="Size Y")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Area Light X Size")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.size"
+ props.header_text = "Light Size X: %.3f"
+
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Area Light Y Size")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.size_y"
props.header_text = "Light Size Y: %.3f"
+ else:
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Area Light Size")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.size"
+ props.header_text = "Light Size: %.3f"
elif light.type in {'SPOT', 'POINT'}:
- props = layout.operator("wm.context_modal_mouse", text="Radius")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Light Radius")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.shadow_soft_size"
props.header_text = "Light Radius: %.3f"
elif light.type == 'SUN':
- props = layout.operator("wm.context_modal_mouse", text="Angle")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Sun Light Angle")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.angle"
props.header_text = "Light Angle: %.3f"
@@ -2529,13 +2502,13 @@ class VIEW3D_MT_object_context_menu(Menu):
if light.type == 'SPOT':
layout.separator()
- props = layout.operator("wm.context_modal_mouse", text="Spot Size")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Spot Light Size")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.spot_size"
props.input_scale = 0.01
props.header_text = "Spot Size: %.2f"
- props = layout.operator("wm.context_modal_mouse", text="Spot Blend")
+ props = layout.operator("wm.context_modal_mouse", text="Adjust Spot Light Blend")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.spot_blend"
props.input_scale = -0.01
@@ -2543,6 +2516,35 @@ class VIEW3D_MT_object_context_menu(Menu):
layout.separator()
+ # Shared among some object types.
+ if obj is not None:
+ if obj.type in {'MESH', 'CURVE', 'SURFACE'}:
+ layout.operator("object.shade_smooth", text="Shade Smooth")
+ layout.operator("object.shade_flat", text="Shade Flat")
+
+ layout.separator()
+
+ if obj.type in {'MESH', 'CURVE', 'SURFACE', 'ARMATURE', 'GPENCIL'}:
+ if selected_objects_len > 1:
+ layout.operator("object.join")
+
+ if obj.type in {'MESH', 'CURVE', 'SURFACE', 'POINTCLOUD', 'META', 'FONT'}:
+ layout.operator_menu_enum("object.convert", "target")
+
+ if obj.type == 'GPENCIL':
+ layout.operator_menu_enum("gpencil.convert", "type", text="Convert To")
+
+ if (
+ obj.type in {'MESH', 'CURVE', 'SURFACE', 'GPENCIL', 'LATTICE', 'ARMATURE', 'META'} or
+ (obj.type == 'EMPTY' and obj.instance_collection is not None)
+ ):
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator_menu_enum("object.origin_set", text="Set Origin", property="type")
+ layout.operator_context = 'INVOKE_DEFAULT'
+
+ layout.separator()
+
+ # Shared among all object types
layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN')
layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN')
@@ -2787,8 +2789,25 @@ class VIEW3D_MT_make_single_user(Menu):
props.object = props.obdata = props.material = False
+class VIEW3D_MT_object_convert(Menu):
+ bl_label = "Convert"
+
+ def draw(self, context):
+ layout = self.layout
+ ob = context.active_object
+
+ if ob and ob.type == 'GPENCIL' and context.gpencil_data:
+ layout.operator_enum("gpencil.convert", "type")
+ else:
+ layout.operator_enum("object.convert", "target")
+
+ # Potrace lib dependency.
+ if bpy.app.build_options.potrace:
+ layout.operator("gpencil.trace_image", icon='OUTLINER_OB_GREASEPENCIL')
+
+
class VIEW3D_MT_make_links(Menu):
- bl_label = "Make Links"
+ bl_label = "Link/Transfer Data"
def draw(self, _context):
layout = self.layout
@@ -2796,10 +2815,10 @@ class VIEW3D_MT_make_links(Menu):
if len(bpy.data.scenes) > 10:
layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("object.make_links_scene", text="Objects to Scene...", icon='OUTLINER_OB_EMPTY')
+ layout.operator("object.make_links_scene", text="Link Objects to Scene...", icon='OUTLINER_OB_EMPTY')
else:
layout.operator_context = 'EXEC_REGION_WIN'
- layout.operator_menu_enum("object.make_links_scene", "scene", text="Objects to Scene")
+ layout.operator_menu_enum("object.make_links_scene", "scene", text="Link Objects to Scene")
layout.separator()
@@ -2807,7 +2826,12 @@ class VIEW3D_MT_make_links(Menu):
layout.operator_enum("object.make_links_data", "type") # inline
- layout.operator("object.join_uvs") # stupid place to add this!
+ layout.operator("object.join_uvs", text="Copy UV Maps")
+
+ layout.separator()
+
+ layout.operator("object.data_transfer")
+ layout.operator("object.datalayout_transfer")
class VIEW3D_MT_brush_paint_modes(Menu):
@@ -7529,6 +7553,7 @@ classes = (
VIEW3D_MT_object_rigid_body,
VIEW3D_MT_object_clear,
VIEW3D_MT_object_context_menu,
+ VIEW3D_MT_object_convert,
VIEW3D_MT_object_shading,
VIEW3D_MT_object_apply,
VIEW3D_MT_object_relations,
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 577f9678a62..20ec26200f6 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -352,10 +352,13 @@ class VIEW3D_PT_tools_particlemode(Panel, View3DPaintPanel):
layout.row().prop(brush, "puff_mode", expand=True)
layout.prop(brush, "use_puff_volume")
elif tool == 'COMB':
- layout.prop(settings, "use_emitter_deflect", text="Deflect Emitter")
- col = layout.column()
- col.active = settings.use_emitter_deflect
- col.prop(settings, "emitter_distance", text="Distance")
+ col = layout.column(align=False, heading="Deflect Emitter")
+ row = col.row(align=True)
+ sub = row.row(align=True)
+ sub.prop(settings, "use_emitter_deflect", text="")
+ sub = sub.row(align=True)
+ sub.active = settings.use_emitter_deflect
+ sub.prop(settings, "emitter_distance", text="")
# TODO, move to space_view3d.py
@@ -1231,14 +1234,20 @@ class VIEW3D_PT_tools_particlemode_options(View3DPanel, Panel):
col = layout.column(align=True)
col.active = pe.is_editable
- col.prop(ob.data, "use_mirror_x")
- if pe.tool == 'ADD':
- col.prop(ob.data, "use_mirror_topology")
- col.separator()
- col.prop(pe, "use_preserve_length", text="Preserve Strand Lengths")
- col.prop(pe, "use_preserve_root", text="Preserve Root Positions")
+
if not pe.is_hair:
col.prop(pe, "use_auto_velocity", text="Auto-Velocity")
+ col.separator()
+
+ sub = col.column(align=True, heading="Mirror")
+ sub.prop(ob.data, "use_mirror_x")
+ if pe.tool == 'ADD':
+ sub.prop(ob.data, "use_mirror_topology")
+ col.separator()
+
+ sub = col.column(align=True, heading="Preserve")
+ sub.prop(pe, "use_preserve_length", text="Strand Lengths")
+ sub.prop(pe, "use_preserve_root", text="Root Positions")
class VIEW3D_PT_tools_particlemode_options_shapecut(View3DPanel, Panel):
@@ -1282,10 +1291,13 @@ class VIEW3D_PT_tools_particlemode_options_display(View3DPanel, Panel):
else:
if pe.type == 'PARTICLES':
col.prop(pe, "show_particles", text="Particles")
- col.prop(pe, "use_fade_time")
- sub = col.row(align=True)
+ col = layout.column(align=False, heading="Fade Time")
+ row = col.row(align=True)
+ sub = row.row(align=True)
+ sub.prop(pe, "use_fade_time", text="")
+ sub = sub.row(align=True)
sub.active = pe.use_fade_time
- sub.prop(pe, "fade_frames", slider=True)
+ sub.prop(pe, "fade_frames", slider=True, text="")
# ********** grease pencil object tool panels ****************
@@ -1382,7 +1394,7 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel):
bl_parent_id = 'VIEW3D_PT_tools_grease_pencil_brush_settings'
bl_category = "Tool"
bl_options = {'DEFAULT_CLOSED'}
- bl_ui_units_x = 11
+ bl_ui_units_x = 13
@classmethod
def poll(cls, context):
@@ -1435,7 +1447,12 @@ class VIEW3D_PT_tools_grease_pencil_brush_advanced(View3DPanel, Panel):
row.prop(gp_settings, "fill_layer_mode", text="Layers")
col.separator()
- col.prop(gp_settings, "fill_factor", text="Resolution")
+ row = col.row(align=True)
+ row.prop(gp_settings, "extend_stroke_factor")
+ row.prop(gp_settings, "show_fill_extend", text="", icon='GRID')
+
+ col.separator()
+ col.prop(gp_settings, "fill_simplify_level", text="Simplify")
if gp_settings.fill_draw_mode != 'STROKE':
col = layout.column(align=False, heading="Ignore Transparent")
col.use_property_decorate = False
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 7abc62a69e3..9d7485a0837 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -487,8 +487,12 @@ geometry_node_categories = [
NodeItem("GeometryNodeAttributeCompare"),
NodeItem("GeometryNodeAttributeFill"),
NodeItem("GeometryNodeAttributeMix"),
+ NodeItem("GeometryNodeAttributeProximity"),
NodeItem("GeometryNodeAttributeColorRamp"),
NodeItem("GeometryNodeAttributeVectorMath"),
+ NodeItem("GeometryNodeAttributeSampleTexture"),
+ NodeItem("GeometryNodeAttributeCombineXYZ"),
+ NodeItem("GeometryNodeAttributeSeparateXYZ"),
]),
GeometryNodeCategory("GEO_COLOR", "Color", items=[
NodeItem("ShaderNodeValToRGB"),
@@ -501,9 +505,11 @@ geometry_node_categories = [
]),
GeometryNodeCategory("GEO_INPUT", "Input", items=[
NodeItem("GeometryNodeObjectInfo"),
+ NodeItem("GeometryNodeCollectionInfo"),
NodeItem("FunctionNodeRandomFloat"),
NodeItem("ShaderNodeValue"),
NodeItem("FunctionNodeInputVector"),
+ NodeItem("GeometryNodeIsViewport"),
]),
GeometryNodeCategory("GEO_MESH", "Mesh", items=[
NodeItem("GeometryNodeBoolean"),
@@ -520,6 +526,10 @@ geometry_node_categories = [
NodeItem("GeometryNodeRotatePoints"),
NodeItem("GeometryNodeAlignRotationToVector"),
]),
+ GeometryNodeCategory("GEO_VOLUME", "Volume", items=[
+ NodeItem("GeometryNodePointsToVolume"),
+ NodeItem("GeometryNodeVolumeToMesh"),
+ ]),
GeometryNodeCategory("GEO_UTILITIES", "Utilities", items=[
NodeItem("ShaderNodeMapRange"),
NodeItem("ShaderNodeClamp"),
diff --git a/release/windows/batch/blender_debug_gpu.cmd b/release/windows/batch/blender_debug_gpu.cmd
index 46d126ab621..53d7863ec70 100644
--- a/release/windows/batch/blender_debug_gpu.cmd
+++ b/release/windows/batch/blender_debug_gpu.cmd
@@ -12,5 +12,5 @@ mkdir "%temp%\blender\debug_logs" > NUL 2>&1
echo.
echo Starting blender and waiting for it to exit....
set PYTHONPATH=
-"%~dp0\blender" --debug --debug-gpu --python-expr "import bpy; bpy.ops.wm.sysinfo(filepath=r'%temp%\blender\debug_logs\blender_system_info.txt')" > "%temp%\blender\debug_logs\blender_debug_output.txt" 2>&1 < %0
+"%~dp0\blender" --debug --debug-gpu --debug-cycles --python-expr "import bpy; bpy.ops.wm.sysinfo(filepath=r'%temp%\blender\debug_logs\blender_system_info.txt')" > "%temp%\blender\debug_logs\blender_debug_output.txt" 2>&1 < %0
explorer "%temp%\blender\debug_logs" \ No newline at end of file