diff options
Diffstat (limited to 'release')
-rw-r--r-- | release/darwin/Blender.app/Contents/Info.plist | 33 | ||||
-rw-r--r-- | release/darwin/Blender.app/Contents/Resources/blender file icon.icns | bin | 284786 -> 0 bytes | |||
-rw-r--r-- | release/datafiles/splash.png | bin | 887863 -> 737984 bytes | |||
-rw-r--r-- | release/datafiles/userdef/userdef_default.c | 3 | ||||
-rw-r--r-- | release/datafiles/userdef/userdef_default_theme.c | 13 | ||||
-rw-r--r-- | release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py | 13 | ||||
-rw-r--r-- | release/scripts/modules/bpy/path.py | 11 | ||||
-rw-r--r-- | release/scripts/modules/bpy/utils/__init__.py | 4 | ||||
-rw-r--r-- | release/scripts/modules/bpy_types.py | 1 | ||||
-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.py | 2 | ||||
-rw-r--r-- | release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py | 2 | ||||
-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.py | 4 | ||||
-rw-r--r-- | release/scripts/startup/bl_operators/wm.py | 24 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_gpencil.py | 13 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_data_volume.py | 4 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_grease_pencil_common.py | 40 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_paint_common.py | 4 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/properties_physics_field.py | 7 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_clip.py | 6 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_dopesheet.py | 8 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_image.py | 9 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_node.py | 10 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_userpref.py | 3 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d.py | 169 | ||||
-rw-r--r-- | release/scripts/startup/bl_ui/space_view3d_toolbar.py | 47 | ||||
-rw-r--r-- | release/scripts/startup/nodeitems_builtins.py | 10 | ||||
-rw-r--r-- | release/windows/batch/blender_debug_gpu.cmd | 2 |
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 Binary files differdeleted file mode 100644 index 2bf78d3eb0d..00000000000 --- a/release/darwin/Blender.app/Contents/Resources/blender file icon.icns +++ /dev/null diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png Binary files differindex 858709833fb..babb3e30c6d 100644 --- a/release/datafiles/splash.png +++ b/release/datafiles/splash.png 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 |