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/datafiles/colormanagement/config.ocio2
m---------release/datafiles/locale0
-rw-r--r--release/datafiles/splash.pngbin609962 -> 842492 bytes
-rw-r--r--release/datafiles/userdef/userdef_default_theme.c2
-rw-r--r--release/freedesktop/snap/README.md2
-rwxr-xr-xrelease/lts/create_release_notes.py2
m---------release/scripts/addons0
-rw-r--r--release/scripts/modules/bl_i18n_utils/bl_extract_messages.py2
-rw-r--r--release/scripts/modules/bl_i18n_utils/utils.py2
-rw-r--r--release/scripts/modules/bpy/utils/__init__.py4
-rw-r--r--release/scripts/modules/bpy_types.py2
-rw-r--r--release/scripts/presets/keyconfig/Blender.py2
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py9
-rw-r--r--release/scripts/startup/bl_operators/userpref.py8
-rw-r--r--release/scripts/startup/bl_operators/wm.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_data_gpencil.py3
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_rigidbody.py2
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py38
-rw-r--r--release/scripts/startup/bl_ui/space_dopesheet.py47
-rw-r--r--release/scripts/startup/bl_ui/space_filebrowser.py10
-rw-r--r--release/scripts/startup/bl_ui/space_graph.py13
-rw-r--r--release/scripts/startup/bl_ui/space_image.py26
-rw-r--r--release/scripts/startup/bl_ui/space_nla.py30
-rw-r--r--release/scripts/startup/bl_ui/space_node.py17
-rw-r--r--release/scripts/startup/bl_ui/space_outliner.py12
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py27
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_common.py4
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py33
-rw-r--r--release/scripts/startup/nodeitems_builtins.py6
29 files changed, 261 insertions, 48 deletions
diff --git a/release/datafiles/colormanagement/config.ocio b/release/datafiles/colormanagement/config.ocio
index bb9fd27fb84..bd342a0577e 100644
--- a/release/datafiles/colormanagement/config.ocio
+++ b/release/datafiles/colormanagement/config.ocio
@@ -42,7 +42,7 @@ roles:
# For interop between configs, and to determine XYZ for rendering
aces_interchange: Linear ACES
- # Specifed by OCIO, not used in Blender
+ # Specified by OCIO, not used in Blender
color_timing: Filmic Log
compositing_log: Filmic Log
default: Linear
diff --git a/release/datafiles/locale b/release/datafiles/locale
-Subproject 6178bad247c69c9c4e1a98c5f35765752341b3a
+Subproject 8ee2942570f08d10484bb2328d0d1b0aaaa0367
diff --git a/release/datafiles/splash.png b/release/datafiles/splash.png
index 74e239b0f98..eb1250cf5a5 100644
--- a/release/datafiles/splash.png
+++ b/release/datafiles/splash.png
Binary files differ
diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c
index da01f65131c..055a2e37c6c 100644
--- a/release/datafiles/userdef/userdef_default_theme.c
+++ b/release/datafiles/userdef/userdef_default_theme.c
@@ -647,7 +647,7 @@ const bTheme U_theme_default = {
.facedot_size = 4,
.movie = RGBA(0x4d6890ff),
.movieclip = RGBA(0x8f4c4cff),
- .mask = RGBA(0x666666ff),
+ .mask = RGBA(0x8f5656ff),
.image = RGBA(0x8f744bff),
.scene = RGBA(0x808033ff),
.audio = RGBA(0x448080ff),
diff --git a/release/freedesktop/snap/README.md b/release/freedesktop/snap/README.md
index 742b265ada6..f6c662e9f1e 100644
--- a/release/freedesktop/snap/README.md
+++ b/release/freedesktop/snap/README.md
@@ -12,6 +12,6 @@ Build pipeline snap tracks and channels
- Test builds for the upcoming stable release - *not used for now*
<track>/beta
- Nightly automated builds provided by a release branch
- <track>/egde/<branch>
+ <track>/edge/<branch>
- Nightly or on demand builds - will also make use of branch
```
diff --git a/release/lts/create_release_notes.py b/release/lts/create_release_notes.py
index 2a396dca6b0..2d35a71c263 100755
--- a/release/lts/create_release_notes.py
+++ b/release/lts/create_release_notes.py
@@ -97,7 +97,7 @@ def extract_release_notes(version: str, task_id: int):
# Process
- 1. Retrieval of description of the gived `task_id`.
+ 1. Retrieval of description of the given `task_id`.
2. Find rows for the given `version` and convert to `ReleaseLogLine`.
3. based on the associated task or commit retrieves the title of the log
line.
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject f6107e2fd9a92b55ac110c7db941e287e2f6604
+Subproject f2a08d80ccd3c13af304525778df3905f95bd44
diff --git a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
index 00edd7d523d..cf904a1a88b 100644
--- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
+++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
@@ -877,7 +877,7 @@ def dump_messages(do_messages, do_checks, settings):
addons = utils.enable_addons(support={"OFFICIAL"})
# Note this is not needed if we have been started with factory settings, but just in case...
# XXX This is not working well, spent a whole day trying to understand *why* we still have references of
- # those removed calsses in things like `bpy.types.OperatorProperties.__subclasses__()`
+ # those removed classes in things like `bpy.types.OperatorProperties.__subclasses__()`
# (could not even reproduce it from regular py console in Blender with UI...).
# For some reasons, cleanup does not happen properly, *and* we have no way to tell which class is valid
# and which has been unregistered. So for now, just go for the dirty, easy way: do not disable add-ons. :(
diff --git a/release/scripts/modules/bl_i18n_utils/utils.py b/release/scripts/modules/bl_i18n_utils/utils.py
index 13fb87d386a..e13eb15dfd2 100644
--- a/release/scripts/modules/bl_i18n_utils/utils.py
+++ b/release/scripts/modules/bl_i18n_utils/utils.py
@@ -778,7 +778,7 @@ class I18nMessages:
try:
import bpy
except ModuleNotFoundError:
- print("Could not import bpy, find_best_messages_matches must be run from whithin Blender.")
+ print("Could not import bpy, find_best_messages_matches must be run from within Blender.")
return
# Build helper mappings.
diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py
index 3f0248970c6..b009c38edb4 100644
--- a/release/scripts/modules/bpy/utils/__init__.py
+++ b/release/scripts/modules/bpy/utils/__init__.py
@@ -26,6 +26,7 @@ not associated with blenders internal data.
__all__ = (
"blend_paths",
"escape_identifier",
+ "flip_name",
"unescape_identifier",
"keyconfig_init",
"keyconfig_set",
@@ -61,6 +62,7 @@ from _bpy import (
_utils_units as units,
blend_paths,
escape_identifier,
+ flip_name,
unescape_identifier,
register_class,
resource_path,
@@ -106,7 +108,7 @@ def execfile(filepath, *, mod=None):
mod_orig = modules.get(mod_name, None)
modules[mod_name] = mod
- # No error supression, just ensure `sys.modules[mod_name]` is properly restored in the case of an error.
+ # No error suppression, just ensure `sys.modules[mod_name]` is properly restored in the case of an error.
try:
mod_spec.loader.exec_module(mod)
finally:
diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index 26efb6e3307..b477f624b7b 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -720,7 +720,7 @@ class Gizmo(StructRNA):
# Dummy class to keep the reference in `bpy_types_dict` and avoid
-# erros like: "TypeError: expected GizmoGroup subclass of class ..."
+# errors like: "TypeError: expected GizmoGroup subclass of class ..."
class GizmoGroup(StructRNA):
__slots__ = ()
diff --git a/release/scripts/presets/keyconfig/Blender.py b/release/scripts/presets/keyconfig/Blender.py
index 35c920b3f40..1ac7626f926 100644
--- a/release/scripts/presets/keyconfig/Blender.py
+++ b/release/scripts/presets/keyconfig/Blender.py
@@ -202,7 +202,7 @@ class Prefs(bpy.types.KeyConfigPreferences):
update=update_fn,
)
- # Developer note, this is an experemental option.
+ # Developer note, this is an experimental option.
use_pie_click_drag: BoolProperty(
name="Pie Menu on Drag",
description=(
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 6a837e64b78..543742709ef 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -1097,6 +1097,7 @@ def km_outliner(params):
# Fall through to generic context menu if the item(s) selected have no type specific actions.
("outliner.operation", {"type": 'RIGHTMOUSE', "value": 'PRESS'}, None),
op_menu("OUTLINER_MT_context_menu", {"type": 'RIGHTMOUSE', "value": 'PRESS'}),
+ op_menu_pie("OUTLINER_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("outliner.item_drag_drop", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
("outliner.item_drag_drop", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True}, None),
("outliner.show_hierarchy", {"type": 'HOME', "value": 'PRESS'}, None),
@@ -1748,6 +1749,7 @@ def km_graph_editor(params):
("graph.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("graph.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
("graph.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
+ op_menu_pie("GRAPH_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("graph.fmodifier_add", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("only_active", False)]}),
("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None),
@@ -1815,6 +1817,7 @@ def km_image_generic(params):
("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "repeat": True}, None),
("image.cycle_render_slot", {"type": 'J', "value": 'PRESS', "alt": True, "repeat": True},
{"properties": [("reverse", True)]}),
+ op_menu_pie("IMAGE_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
])
if not params.legacy:
@@ -2027,6 +2030,7 @@ def km_node_editor(params):
("node.view_all", {"type": 'HOME', "value": 'PRESS'}, None),
("node.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("node.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
+ op_menu_pie("NODE_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("node.delete", {"type": 'X', "value": 'PRESS'}, None),
("node.delete", {"type": 'DEL', "value": 'PRESS'}, None),
("node.delete_reconnect", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
@@ -2389,6 +2393,7 @@ def km_dopesheet(params):
("action.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("action.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
("action.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
+ op_menu_pie("DOPESHEET_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("anim.channels_editable_toggle", {"type": 'TAB', "value": 'PRESS'}, None),
("anim.channels_select_filter", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
("transform.transform", {"type": 'G', "value": 'PRESS'},
@@ -2503,6 +2508,7 @@ def km_nla_editor(params):
("nla.view_all", {"type": 'NDOF_BUTTON_FIT', "value": 'PRESS'}, None),
("nla.view_selected", {"type": 'NUMPAD_PERIOD', "value": 'PRESS'}, None),
("nla.view_frame", {"type": 'NUMPAD_0', "value": 'PRESS'}, None),
+ op_menu_pie("NLA_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("nla.actionclip_add", {"type": 'A', "value": 'PRESS', "shift": True}, None),
("nla.transition_add", {"type": 'T', "value": 'PRESS', "shift": True}, None),
("nla.soundclip_add", {"type": 'K', "value": 'PRESS', "shift": True}, None),
@@ -2835,6 +2841,7 @@ def km_sequencer(params):
("sequencer.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}, None),
op_menu("SEQUENCER_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}),
op_menu("SEQUENCER_MT_change", {"type": 'C', "value": 'PRESS'}),
+ op_menu_pie("SEQUENCER_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
("sequencer.slip", {"type": 'S', "value": 'PRESS'}, None),
("wm.context_set_int", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'scene.sequence_editor.overlay_frame'), ("value", 0)]}),
@@ -2892,6 +2899,7 @@ def km_sequencerpreview(params):
{"properties": [("ratio", 0.25)]}),
("sequencer.view_zoom_ratio", {"type": 'NUMPAD_8', "value": 'PRESS'},
{"properties": [("ratio", 0.125)]}),
+ op_menu_pie("SEQUENCER_MT_preview_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
# Edit.
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
@@ -3042,6 +3050,7 @@ def km_clip(_params):
op_menu_pie("CLIP_MT_solving_pie", {"type": 'S', "value": 'PRESS', "shift": True}),
op_menu_pie("CLIP_MT_marker_pie", {"type": 'E', "value": 'PRESS', "shift": True}),
op_menu_pie("CLIP_MT_reconstruction_pie", {"type": 'W', "value": 'PRESS', "shift": True}),
+ op_menu_pie("CLIP_MT_view_pie", {"type": 'ACCENT_GRAVE', "value": 'PRESS'}),
])
return keymap
diff --git a/release/scripts/startup/bl_operators/userpref.py b/release/scripts/startup/bl_operators/userpref.py
index 67a02f6e1f4..1363bcf60e4 100644
--- a/release/scripts/startup/bl_operators/userpref.py
+++ b/release/scripts/startup/bl_operators/userpref.py
@@ -100,14 +100,6 @@ class PREFERENCES_OT_copy_prev(Operator):
version_new = ((version[0] * 100) + version[1])
version_old = ((version[0] * 100) + version[1]) - 1
- # Special case, remove when the version is > 3.0.
- if version_new == 300:
- version_new = 294
- version_old = 293
- else:
- print("TODO: remove exception!")
- # End special case.
-
# Ensure we only try to copy files from a point release.
# The check below ensures the second numbers match.
while (version_new % 100) // 10 == (version_old % 100) // 10:
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 65692062f48..a2f482d1a55 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1030,7 +1030,7 @@ class WM_OT_url_open_preset(Operator):
"Report a bug in an add-on"),
_url_from_bug_addon),
(('RELEASE_NOTES', "Release Notes",
- "Read about whats new in this version of Blender"),
+ "Read about what's new in this version of Blender"),
_url_from_release_notes),
(('MANUAL', "Manual",
"The reference manual for this version of Blender"),
@@ -1430,7 +1430,7 @@ class WM_OT_properties_edit(Operator):
type_items = rna_custom_property_type_items
subtype_items = rna_vector_subtype_items
- # Helper method to avoid repetative code to retrieve a single value from sequences and non-sequences.
+ # Helper method to avoid repetitive code to retrieve a single value from sequences and non-sequences.
@staticmethod
def _convert_new_value_single(old_value, new_type):
if hasattr(old_value, "__len__") and len(old_value) > 0:
diff --git a/release/scripts/startup/bl_ui/properties_data_gpencil.py b/release/scripts/startup/bl_ui/properties_data_gpencil.py
index 793c4a52350..34e83573bc9 100644
--- a/release/scripts/startup/bl_ui/properties_data_gpencil.py
+++ b/release/scripts/startup/bl_ui/properties_data_gpencil.py
@@ -110,7 +110,8 @@ class GPENCIL_MT_layer_context_menu(Menu):
layout.separator()
- layout.operator("gpencil.layer_merge", icon='SORT_ASC', text="Merge Down")
+ layout.operator("gpencil.layer_merge", icon='SORT_ASC', text="Merge Down").mode = 'ACTIVE'
+ layout.operator("gpencil.layer_merge", text="Merge All").mode = 'ALL'
layout.separator()
layout.operator("gpencil.layer_duplicate_object", text="Copy Layer to Selected").only_active = True
diff --git a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
index 26fe215b17d..9afe8415cf4 100644
--- a/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
+++ b/release/scripts/startup/bl_ui/properties_physics_rigidbody.py
@@ -261,7 +261,7 @@ class PHYSICS_PT_rigid_body_dynamics(PHYSICS_PT_rigidbody_panel, Panel):
# col = layout.column(align=True)
# col.label(text="Activation:")
- # XXX: settings such as activate on collison/etc.
+ # XXX: settings such as activate on collision/etc.
col = flow.column()
col.prop(rbo, "linear_damping", text="Damping Translation")
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index c18d77987ad..86e9ef3d664 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -1858,6 +1858,43 @@ class CLIP_MT_reconstruction_pie(Menu):
pie.operator("clip.apply_solution_scale", icon='ARROW_LEFTRIGHT')
+class CLIP_MT_view_pie(Menu):
+ bl_label = "View"
+
+ @classmethod
+ def poll(cls, context):
+ space = context.space_data
+
+ # View operators are not yet implemented in Dopesheet mode.
+ return space.view != 'DOPESHEET'
+
+ def draw(self, context):
+ layout = self.layout
+ sc = context.space_data
+
+ pie = layout.menu_pie()
+
+ if sc.view == 'CLIP':
+ pie.operator("clip.view_all")
+ pie.operator("clip.view_selected", icon='ZOOM_SELECTED')
+
+ if sc.mode == 'MASK':
+ pie.operator("clip.view_center_cursor")
+ pie.separator()
+ else:
+ # Add spaces so items stay in the same position through all modes.
+ pie.separator()
+ pie.separator()
+
+ pie.operator("clip.view_all", text="Frame All Fit").fit_view = True
+
+ if sc.view == 'GRAPH':
+ pie.operator_context = 'INVOKE_REGION_PREVIEW'
+ pie.operator("clip.graph_view_all")
+ pie.separator()
+ pie.operator("clip.graph_center_current_frame")
+
+
classes = (
CLIP_UL_tracking_objects,
CLIP_HT_header,
@@ -1925,6 +1962,7 @@ classes = (
CLIP_MT_tracking_pie,
CLIP_MT_reconstruction_pie,
CLIP_MT_solving_pie,
+ CLIP_MT_view_pie,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py
index 781c430a752..3c90e0c96cc 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -379,6 +379,18 @@ class DOPESHEET_MT_view(Menu):
layout.menu("INFO_MT_area")
+class DOPESHEET_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator("action.view_all")
+ pie.operator("action.view_selected", icon='ZOOM_SELECTED')
+ pie.operator("action.view_frame")
+
+
class DOPESHEET_MT_select(Menu):
bl_label = "Select"
@@ -527,6 +539,39 @@ class DOPESHEET_MT_key_transform(Menu):
layout.operator("transform.transform", text="Scale").mode = 'TIME_SCALE'
+class DopesheetActionPanelBase:
+ bl_region_type = 'UI'
+ bl_label = "Action"
+
+ @classmethod
+ def draw_generic_panel(cls, context, layout, action):
+ layout.label(text=action.name, icon='ACTION')
+
+ layout.prop(action, "use_frame_range")
+
+ col = layout.column()
+ col.active = action.use_frame_range
+
+ row = col.row(align=True)
+ row.prop(action, "frame_start", text="Start")
+ row.prop(action, "frame_end", text="End")
+
+ col.prop(action, "use_cyclic")
+
+
+class DOPESHEET_PT_action(DopesheetActionPanelBase, Panel):
+ bl_space_type = 'DOPESHEET_EDITOR'
+ bl_category = "Item"
+
+ @classmethod
+ def poll(cls, context):
+ return bool(context.selected_visible_actions)
+
+ def draw(self, context):
+ action = context.selected_visible_actions[0]
+ self.draw_generic_panel(context, self.layout, action)
+
+
#######################################
# Grease Pencil Editing
@@ -778,7 +823,9 @@ classes = (
DOPESHEET_MT_context_menu,
DOPESHEET_MT_channel_context_menu,
DOPESHEET_MT_snap_pie,
+ DOPESHEET_MT_view_pie,
DOPESHEET_PT_filters,
+ DOPESHEET_PT_action,
DOPESHEET_PT_gpencil_mode,
DOPESHEET_PT_gpencil_layer_masks,
DOPESHEET_PT_gpencil_layer_transform,
diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 4ae9a33785f..e33cf8d6cfb 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -404,7 +404,13 @@ class FILEBROWSER_PT_advanced_filter(Panel):
def is_option_region_visible(context, space):
- if not space.active_operator:
+ from bpy_extras.asset_utils import SpaceAssetInfo
+
+ if SpaceAssetInfo.is_asset_browser(space):
+ pass
+ # For the File Browser, there must be an operator for there to be options
+ # (irrelevant for the Asset Browser).
+ elif not space.active_operator:
return False
for region in context.area.regions:
@@ -701,7 +707,7 @@ class ASSETBROWSER_PT_metadata(asset_utils.AssetBrowserPanel, Panel):
asset_file_handle = context.asset_file_handle
if asset_file_handle is None:
- layout.label(text="No asset selected", icon='INFO')
+ layout.label(text="No active asset", icon='INFO')
return
asset_library_ref = context.asset_library_ref
diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py
index 612b7ba2b09..1562870d64f 100644
--- a/release/scripts/startup/bl_ui/space_graph.py
+++ b/release/scripts/startup/bl_ui/space_graph.py
@@ -338,6 +338,18 @@ class GRAPH_MT_key_snap(Menu):
layout.operator("graph.snap_cursor_value", text="Cursor Value to Selection")
+class GRAPH_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator("graph.view_all")
+ pie.operator("graph.view_selected", icon='ZOOM_SELECTED')
+ pie.operator("graph.view_frame")
+
+
class GRAPH_MT_delete(Menu):
bl_label = "Delete"
@@ -468,6 +480,7 @@ classes = (
GRAPH_MT_channel_context_menu,
GRAPH_MT_pivot_pie,
GRAPH_MT_snap_pie,
+ GRAPH_MT_view_pie,
GRAPH_PT_filters,
)
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index 6a769b1aecc..8e82b07716c 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -591,6 +591,31 @@ class IMAGE_MT_uvs_snap_pie(Menu):
).target = 'ADJACENT_UNSELECTED'
+class IMAGE_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ sima = context.space_data
+ show_uvedit = sima.show_uvedit
+ show_maskedit = sima.show_maskedit
+
+ pie = layout.menu_pie()
+ pie.operator("image.view_all")
+
+ if show_uvedit or show_maskedit:
+ pie.operator("image.view_selected", text="Frame Selected", icon='ZOOM_SELECTED')
+ pie.operator("image.view_center_cursor", text="Center View to Cursor")
+ else:
+ # Add spaces so items stay in the same position through all modes.
+ pie.separator()
+ pie.separator()
+
+ pie.operator("image.view_zoom_ratio", text="Zoom 1:1").ratio = 1
+ pie.operator("image.view_all", text="Frame All Fit").fit_view = True
+
+
class IMAGE_HT_tool_header(Header):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'TOOL_HEADER'
@@ -1633,6 +1658,7 @@ classes = (
IMAGE_MT_mask_context_menu,
IMAGE_MT_pivot_pie,
IMAGE_MT_uvs_snap_pie,
+ IMAGE_MT_view_pie,
IMAGE_HT_tool_header,
IMAGE_HT_header,
IMAGE_MT_editor_menus,
diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py
index d472352084c..62c02799a9f 100644
--- a/release/scripts/startup/bl_ui/space_nla.py
+++ b/release/scripts/startup/bl_ui/space_nla.py
@@ -22,6 +22,7 @@ from bpy.types import Header, Menu, Panel
from bpy.app.translations import contexts as i18n_contexts
from bl_ui.space_dopesheet import (
DopesheetFilterPopoverBase,
+ DopesheetActionPanelBase,
dopesheet_filter,
)
@@ -66,6 +67,21 @@ class NLA_PT_filters(DopesheetFilterPopoverBase, Panel):
DopesheetFilterPopoverBase.draw_standard_filters(context, layout)
+class NLA_PT_action(DopesheetActionPanelBase, Panel):
+ bl_space_type = 'NLA_EDITOR'
+ bl_category = "Strip"
+ bl_options = {'DEFAULT_CLOSED'}
+
+ @classmethod
+ def poll(cls, context):
+ strip = context.active_nla_strip
+ return strip and strip.type == 'CLIP' and strip.action
+
+ def draw(self, context):
+ action = context.active_nla_strip.action
+ self.draw_generic_panel(context, self.layout, action)
+
+
class NLA_MT_editor_menus(Menu):
bl_idname = "NLA_MT_editor_menus"
bl_label = ""
@@ -247,6 +263,18 @@ class NLA_MT_snap_pie(Menu):
pie.operator("nla.snap", text="Selection to Nearest Marker").type = 'NEAREST_MARKER'
+class NLA_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator("nla.view_all")
+ pie.operator("nla.view_selected", icon='ZOOM_SELECTED')
+ pie.operator("nla.view_frame")
+
+
class NLA_MT_context_menu(Menu):
bl_label = "NLA Context Menu"
@@ -300,9 +328,11 @@ classes = (
NLA_MT_add,
NLA_MT_edit_transform,
NLA_MT_snap_pie,
+ NLA_MT_view_pie,
NLA_MT_context_menu,
NLA_MT_channel_context_menu,
NLA_PT_filters,
+ NLA_PT_action,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 2fda13184da..9bf812e036d 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -367,6 +367,17 @@ class NODE_MT_node(Menu):
layout.operator("node.read_viewlayers")
+class NODE_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator("node.view_all")
+ pie.operator("node.view_selected", icon='ZOOM_SELECTED')
+
+
class NODE_PT_active_tool(ToolActivePanelHelper, Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
@@ -708,8 +719,13 @@ class NODE_PT_overlay(Panel):
col.separator()
+ col.prop(overlay, "show_context_path", text="Context Path")
col.prop(snode, "show_annotation", text="Annotations")
+ if snode.tree_type == 'GeometryNodeTree':
+ col.separator()
+ col.prop(overlay, "show_timing", text="Timings")
+
class NODE_UL_interface_sockets(bpy.types.UIList):
def draw_item(self, context, layout, _data, item, icon, _active_data, _active_propname, _index):
@@ -877,6 +893,7 @@ classes = (
NODE_MT_node,
NODE_MT_node_color_context_menu,
NODE_MT_context_menu,
+ NODE_MT_view_pie,
NODE_PT_material_slots,
NODE_PT_node_color_presets,
NODE_PT_active_node_generic,
diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py
index 07fa2220915..d85538a37e0 100644
--- a/release/scripts/startup/bl_ui/space_outliner.py
+++ b/release/scripts/startup/bl_ui/space_outliner.py
@@ -142,6 +142,17 @@ class OUTLINER_MT_context_menu_view(Menu):
layout.operator("outliner.show_one_level", text="Hide One Level").open = False
+class OUTLINER_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator("outliner.show_hierarchy")
+ pie.operator("outliner.show_active", icon='ZOOM_SELECTED')
+
+
class OUTLINER_MT_edit_datablocks(Menu):
bl_label = "Edit"
@@ -471,6 +482,7 @@ classes = (
OUTLINER_MT_asset,
OUTLINER_MT_context_menu,
OUTLINER_MT_context_menu_view,
+ OUTLINER_MT_view_pie,
OUTLINER_PT_filter,
)
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 32ada453b50..a2ec5075a4d 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -1159,6 +1159,31 @@ class SEQUENCER_MT_pivot_pie(Menu):
pie.prop_enum(sequencer_tool_settings, "pivot_point", value='MEDIAN')
+class SEQUENCER_MT_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator("sequencer.view_all")
+ pie.operator("sequencer.view_selected", text="Frame Selected", icon='ZOOM_SELECTED')
+
+
+class SEQUENCER_MT_preview_view_pie(Menu):
+ bl_label = "View"
+
+ def draw(self, context):
+ layout = self.layout
+
+ pie = layout.menu_pie()
+ pie.operator_context = 'INVOKE_REGION_PREVIEW'
+ pie.operator("sequencer.view_all_preview")
+ pie.operator("sequencer.view_selected", text="Frame Selected", icon='ZOOM_SELECTED')
+ pie.separator()
+ pie.operator("sequencer.view_zoom_ratio", text="Zoom 1:1").ratio = 1
+
+
class SequencerButtonsPanel:
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
@@ -2601,6 +2626,8 @@ classes = (
SEQUENCER_MT_context_menu,
SEQUENCER_MT_preview_context_menu,
SEQUENCER_MT_pivot_pie,
+ SEQUENCER_MT_view_pie,
+ SEQUENCER_MT_preview_view_pie,
SEQUENCER_PT_color_tag_picker,
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index 9d41a0fa02f..c4dabb5b5bc 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -64,7 +64,7 @@ from collections import namedtuple
ToolDef = namedtuple(
"ToolDef",
(
- # Unique tool name (withing space & mode context).
+ # Unique tool name (within space & mode context).
"idname",
# The name to display in the interface.
"label",
@@ -106,7 +106,7 @@ ToolDef = namedtuple(
# Keep this functionality since it's likely useful for add-on key-maps.
#
# Warning: currently 'from_dict' this is a list of one item,
- # so internally we can swap the key-map function for the key-map it's self.
+ # so internally we can swap the key-map function for the key-map itself.
# This isn't very nice and may change, tool definitions shouldn't care about this.
"keymap",
# Optional data-block associated with this tool.
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index e7f93bddac3..4976834dd87 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -477,6 +477,16 @@ class USERPREF_PT_edit_weight_paint(EditingPanel, CenterAlignMixIn, Panel):
col.active = view.use_weight_color_range
col.template_color_ramp(view, "weight_color_range", expand=True)
+class USERPREF_PT_edit_text_editor(EditingPanel, CenterAlignMixIn, Panel):
+ bl_label = "Text Editor"
+ bl_options = {'DEFAULT_CLOSED'}
+
+ def draw_centered(self, context, layout):
+ prefs = context.preferences
+ edit = prefs.edit
+
+ layout.prop(edit, "use_text_edit_auto_close")
+
class USERPREF_PT_edit_misc(EditingPanel, CenterAlignMixIn, Panel):
bl_label = "Miscellaneous"
@@ -1858,11 +1868,6 @@ class USERPREF_PT_addons(AddOnPanel, Panel):
if p
)
- # Development option for 2.8x, don't show users bundled addons
- # unless they have been updated for 2.8x.
- # Developers can turn them on with '--debug'
- show_official_27x_addons = bpy.app.debug
-
# collect the categories that can be filtered on
addons = [
(mod, addon_utils.module_bl_info(mod))
@@ -1939,15 +1944,6 @@ class USERPREF_PT_addons(AddOnPanel, Panel):
):
continue
- # Skip 2.7x add-ons included with Blender, unless in debug mode.
- is_addon_27x = info.get("blender", (0,)) < (2, 80)
- if (
- is_addon_27x and
- (not show_official_27x_addons) and
- (not mod.__file__.startswith(addon_user_dirs))
- ):
- continue
-
# Addon UI Code
col_box = col.column()
box = col_box.box()
@@ -1970,13 +1966,7 @@ class USERPREF_PT_addons(AddOnPanel, Panel):
sub.active = is_enabled
sub.label(text="%s: %s" % (info["category"], info["name"]))
- # WARNING: 2.8x exception, may be removed
- # use disabled state for old add-ons, chances are they are broken.
- if is_addon_27x:
- sub.label(text="Upgrade to 2.8x required")
- sub.label(icon='ERROR')
- # Remove code above after 2.8x migration is complete.
- elif info["warning"]:
+ if info["warning"]:
sub.label(icon='ERROR')
# icon showing support level.
@@ -2358,6 +2348,7 @@ classes = (
USERPREF_PT_edit_annotations,
USERPREF_PT_edit_weight_paint,
USERPREF_PT_edit_gpencil,
+ USERPREF_PT_edit_text_editor,
USERPREF_PT_edit_misc,
USERPREF_PT_animation_timeline,
diff --git a/release/scripts/startup/nodeitems_builtins.py b/release/scripts/startup/nodeitems_builtins.py
index 34f447a7108..4880a07115a 100644
--- a/release/scripts/startup/nodeitems_builtins.py
+++ b/release/scripts/startup/nodeitems_builtins.py
@@ -111,13 +111,13 @@ def curve_node_items(context):
yield NodeItem("GeometryNodeTrimCurve")
yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
yield NodeItem("GeometryNodeInputCurveHandlePositions")
- yield NodeItem("GeometryNodeCurveParameter")
yield NodeItem("GeometryNodeInputTangent")
yield NodeItem("GeometryNodeInputCurveTilt")
yield NodeItem("GeometryNodeCurveEndpointSelection")
yield NodeItem("GeometryNodeCurveHandleTypeSelection")
yield NodeItem("GeometryNodeInputSplineCyclic")
yield NodeItem("GeometryNodeSplineLength")
+ yield NodeItem("GeometryNodeSplineParameter")
yield NodeItem("GeometryNodeInputSplineResolution")
yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
yield NodeItem("GeometryNodeSetCurveRadius")
@@ -141,6 +141,7 @@ def mesh_node_items(context):
yield NodeItem("GeometryNodeLegacySubdivisionSurface", poll=geometry_nodes_legacy_poll)
yield NodeItemCustom(draw=lambda self, layout, context: layout.separator())
+ yield NodeItem("GeometryNodeDualMesh")
yield NodeItem("GeometryNodeMeshBoolean")
yield NodeItem("GeometryNodeMeshToCurve")
yield NodeItem("GeometryNodeMeshToPoints")
@@ -675,6 +676,7 @@ geometry_node_categories = [
NodeItem("GeometryNodeAttributeRemove", poll=geometry_nodes_legacy_poll),
NodeItem("GeometryNodeCaptureAttribute"),
+ NodeItem("GeometryNodeAttributeDomainSize"),
NodeItem("GeometryNodeAttributeStatistic"),
NodeItem("GeometryNodeAttributeTransfer"),
]),
@@ -749,7 +751,7 @@ geometry_node_categories = [
NodeItem("ShaderNodeMath"),
NodeItem("FunctionNodeBooleanMath"),
NodeItem("FunctionNodeRotateEuler"),
- NodeItem("FunctionNodeCompareFloats"),
+ NodeItem("FunctionNodeCompare"),
NodeItem("FunctionNodeFloatToInt"),
NodeItem("GeometryNodeSwitch"),
NodeItem("FunctionNodeRandomValue"),