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')
m---------release/datafiles/locale0
-rw-r--r--release/datafiles/userdef/userdef_default.c1
m---------release/scripts/addons0
m---------release/scripts/addons_contrib0
-rw-r--r--release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py8
-rw-r--r--release/scripts/modules/bpy/path.py3
-rw-r--r--release/scripts/modules/bpy_extras/object_utils.py41
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py32
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py1
-rw-r--r--release/scripts/startup/bl_operators/uvcalc_lightmap.py7
-rw-r--r--release/scripts/startup/bl_operators/wm.py126
-rw-r--r--release/scripts/startup/bl_ui/properties_data_curve.py1
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py1
-rw-r--r--release/scripts/startup/bl_ui/properties_grease_pencil_common.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_paint_common.py46
-rw-r--r--release/scripts/startup/bl_ui/space_filebrowser.py3
-rw-r--r--release/scripts/startup/bl_ui/space_node.py3
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py3
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py25
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py34
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py3
21 files changed, 259 insertions, 81 deletions
diff --git a/release/datafiles/locale b/release/datafiles/locale
-Subproject 88497d7507e76281fbdd0cc1f8451f81ae7e378
+Subproject 1127ff3143efdda5152a6b1f5986d567d516195
diff --git a/release/datafiles/userdef/userdef_default.c b/release/datafiles/userdef/userdef_default.c
index dc35187ab7e..d8b87480f29 100644
--- a/release/datafiles/userdef/userdef_default.c
+++ b/release/datafiles/userdef/userdef_default.c
@@ -213,6 +213,7 @@ const UserDef U_default = {
.sort_type = FILE_SORT_ALPHA,
.details_flags = FILE_DETAILS_SIZE | FILE_DETAILS_DATETIME,
.flag = FILE_HIDE_DOT,
+ .filter_id = FILTER_ID_ALL,
.temp_win_sizex = 1020,
.temp_win_sizey = 600,
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject 120d31a17c0eb571420b828425fc1fe6ef13db2
+Subproject d92964b0e5035e4532b539137e937591eba88b2
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
-Subproject d9ed9d4d064c74c86e2767cd4be32d602a0ee31
+Subproject 786f4704328507a95b6c1d254bf4cf400a5e8f0
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 bedad638dbe..da4a47783ad 100644
--- a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
+++ b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
@@ -25,7 +25,7 @@ __all__ = (
"generate",
)
-def generate(context, space_type):
+def generate(context, space_type, use_fallback_keys=True, use_reset=True):
"""
Keymap for popup toolbar, currently generated each time.
"""
@@ -66,7 +66,7 @@ def generate(context, space_type):
# to 'drop' currently active tools (it's basically a 'none' tool).
# so this allows us to quickly go back to a state that allows
# a shortcut based workflow (before the tool system was added).
- use_tap_reset = True
+ use_tap_reset = use_reset
# TODO: support other tools for modes which don't use this tool.
tap_reset_tool = "builtin.cursor"
# Check the tool is available in the current context.
@@ -76,11 +76,11 @@ def generate(context, space_type):
from bl_operators.wm import use_toolbar_release_hack
# Pie-menu style release to activate.
- use_release_confirm = True
+ use_release_confirm = use_reset
# Generate items when no keys are mapped.
use_auto_keymap_alpha = False # Map manually in the default key-map.
- use_auto_keymap_num = True
+ use_auto_keymap_num = use_fallback_keys
# Temporary, only create so we can pass 'properties' to find_item_from_operator.
use_hack_properties = True
diff --git a/release/scripts/modules/bpy/path.py b/release/scripts/modules/bpy/path.py
index 845475b9180..3860445233d 100644
--- a/release/scripts/modules/bpy/path.py
+++ b/release/scripts/modules/bpy/path.py
@@ -352,7 +352,8 @@ def module_names(path, recursive=False):
elif filename.endswith(".py") and filename != "__init__.py":
fullpath = join(path, filename)
modules.append((filename[0:-3], fullpath))
- elif "." not in filename:
+ elif not filename.startswith("."):
+ # Skip hidden files since they are used by for version control.
directory = join(path, filename)
fullpath = join(directory, "__init__.py")
if isfile(fullpath):
diff --git a/release/scripts/modules/bpy_extras/object_utils.py b/release/scripts/modules/bpy_extras/object_utils.py
index 151cfa84f85..9db86782d02 100644
--- a/release/scripts/modules/bpy_extras/object_utils.py
+++ b/release/scripts/modules/bpy_extras/object_utils.py
@@ -24,7 +24,6 @@ __all__ = (
"AddObjectHelper",
"object_add_grid_scale",
"object_add_grid_scale_apply_operator",
- "object_image_guess",
"world_to_camera_view",
)
@@ -225,46 +224,6 @@ def object_add_grid_scale_apply_operator(operator, context):
getattr(operator, prop_id) * grid_scale)
-def object_image_guess(obj, bm=None):
- """
- Return a single image used by the object,
- first checking the texture-faces, then the material.
- """
- # TODO, cycles/nodes materials
- me = obj.data
- if bm is None:
- if obj.mode == 'EDIT':
- import bmesh
- bm = bmesh.from_edit_mesh(me)
-
- if bm is not None:
- tex_layer = bm.faces.layers.tex.active
- if tex_layer is not None:
- for f in bm.faces:
- image = f[tex_layer].image
- if image is not None:
- return image
- else:
- tex_layer = me.uv_textures.active
- if tex_layer is not None:
- for tf in tex_layer.data:
- image = tf.image
- if image is not None:
- return image
-
- for m in obj.data.materials:
- if m is not None:
- # backwards so topmost are highest priority
- for mtex in reversed(m.texture_slots):
- if mtex and mtex.use_map_color_diffuse:
- texture = mtex.texture
- if texture and texture.type == 'IMAGE':
- image = texture.image
- if image is not None:
- return image
- return None
-
-
def world_to_camera_view(scene, obj, coord):
"""
Returns the camera space coords for a 3d point.
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 8a86ece53ce..c196acfcebf 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -412,6 +412,9 @@ def km_window(params):
("wm.batch_rename", {"type": 'F2', "value": 'PRESS', "ctrl": True}, None),
("wm.search_menu", {"type": 'F3', "value": 'PRESS'}, None),
op_menu("TOPBAR_MT_file_context_menu", {"type": 'F4', "value": 'PRESS'}),
+ # Alt as "Leader-Key".
+ ("wm.toolbar_prompt", {"type": 'LEFT_ALT', "value": 'CLICK'}, None),
+ ("wm.toolbar_prompt", {"type": 'RIGHT_ALT', "value": 'CLICK'}, None),
])
if params.spacebar_action == 'TOOL':
@@ -1793,6 +1796,7 @@ def km_file_browser(params):
{"properties": [("data_path", 'space_data.params.show_hidden')]}),
("file.directory_new", {"type": 'I', "value": 'PRESS'},
{"properties": [("confirm", False)]}),
+ ("file.rename", {"type": 'F2', "value": 'PRESS'}, None),
("file.delete", {"type": 'X', "value": 'PRESS'}, None),
("file.delete", {"type": 'DEL', "value": 'PRESS'}, None),
("file.smoothscroll", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
@@ -4957,6 +4961,7 @@ def km_popup_toolbar(_params):
"Toolbar Popup",
{"space_type": 'EMPTY', "region_type": 'TEMPORARY'},
{"items": [
+ op_tool("builtin.cursor", {"type": 'SPACE', "value": 'PRESS'}),
op_tool("builtin.select", {"type": 'W', "value": 'PRESS'}),
op_tool("builtin.select_lasso", {"type": 'L', "value": 'PRESS'}),
op_tool("builtin.transform", {"type": 'T', "value": 'PRESS'}),
@@ -5801,6 +5806,19 @@ def km_3d_view_tool_paint_gpencil_line(params):
]},
)
+def km_3d_view_tool_paint_gpencil_polyline(params):
+ return (
+ "3D View Tool: Paint Gpencil, Polyline",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("gpencil.primitive", {"type": params.tool_tweak, "value": 'ANY'},
+ {"properties": [("type", 'POLYLINE'), ("wait_for_input", False)]}),
+ ("gpencil.primitive", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
+ {"properties": [("type", 'POLYLINE'), ("wait_for_input", False)]}),
+ # Lasso select
+ ("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True}, None),
+ ]},
+ )
def km_3d_view_tool_paint_gpencil_box(params):
return (
@@ -5878,6 +5896,18 @@ def km_3d_view_tool_paint_gpencil_cutter(params):
)
+def km_3d_view_tool_paint_gpencil_eyedropper(params):
+ return (
+ "3D View Tool: Paint Gpencil, Eyedropper",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": [
+ ("ui.eyedropper_gpencil_color", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+ ("ui.eyedropper_gpencil_color", {"type": params.tool_mouse, "value": 'PRESS', "shift": True}, None),
+ ("ui.eyedropper_gpencil_color", {"type": params.tool_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, None),
+ ]},
+ )
+
+
def km_3d_view_tool_edit_gpencil_select(params):
return (
"3D View Tool: Edit Gpencil, Tweak",
@@ -6210,11 +6240,13 @@ def generate_keymaps(params=None):
km_3d_view_tool_paint_weight_sample_vertex_group(params),
km_3d_view_tool_paint_weight_gradient(params),
km_3d_view_tool_paint_gpencil_line(params),
+ km_3d_view_tool_paint_gpencil_polyline(params),
km_3d_view_tool_paint_gpencil_box(params),
km_3d_view_tool_paint_gpencil_circle(params),
km_3d_view_tool_paint_gpencil_arc(params),
km_3d_view_tool_paint_gpencil_curve(params),
km_3d_view_tool_paint_gpencil_cutter(params),
+ km_3d_view_tool_paint_gpencil_eyedropper(params),
km_3d_view_tool_edit_gpencil_select(params),
km_3d_view_tool_edit_gpencil_select_box(params),
km_3d_view_tool_edit_gpencil_select_circle(params),
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 c5c1bfa7f7b..49a394b478d 100644
--- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
+++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py
@@ -1183,6 +1183,7 @@ def km_file_browser(params):
{"properties": [("data_path", 'space_data.params.show_hidden')]}),
("file.directory_new", {"type": 'I', "value": 'PRESS'},
{"properties": [("confirm", False)]}),
+ ("file.rename", {"type": 'F2', "value": 'PRESS'}, None),
("file.delete", {"type": 'DEL', "value": 'PRESS'}, None),
("file.smoothscroll", {"type": 'TIMER1', "value": 'ANY', "any": True}, None),
("wm.context_toggle", {"type": 'T', "value": 'PRESS'},
diff --git a/release/scripts/startup/bl_operators/uvcalc_lightmap.py b/release/scripts/startup/bl_operators/uvcalc_lightmap.py
index 2b20754a995..2befb7c73e2 100644
--- a/release/scripts/startup/bl_operators/uvcalc_lightmap.py
+++ b/release/scripts/startup/bl_operators/uvcalc_lightmap.py
@@ -565,7 +565,12 @@ def unwrap(operator, context, **kwargs):
bpy.ops.object.mode_set(mode='OBJECT', toggle=False)
# define list of meshes
- meshes = list({me for obj in context.selected_objects if obj.type == 'MESH' for me in (obj.data,) if me.polygons and me.library is None})
+ meshes = list({
+ me for obj in context.selected_objects
+ if obj.type == 'MESH'
+ for me in (obj.data,)
+ if me.polygons and me.library is None
+ })
if not meshes:
operator.report({'ERROR'}, "No mesh object")
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index e7989bec227..037303a08e1 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1744,27 +1744,141 @@ class WM_OT_toolbar(Operator):
WM_OT_toolbar._key_held = event.type
return self.execute(context)
- def execute(self, context):
+ @staticmethod
+ def keymap_from_toolbar(context, space_type, use_fallback_keys=True, use_reset=True):
from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
from bl_keymap_utils import keymap_from_toolbar
- space_type = context.space_data.type
cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
if cls is None:
- return {'CANCELLED'}
+ return None, None
- wm = context.window_manager
- keymap = keymap_from_toolbar.generate(context, space_type)
+ return cls, keymap_from_toolbar.generate(
+ context,
+ space_type,
+ use_fallback_keys=use_fallback_keys,
+ use_reset=use_reset,
+ )
+
+ def execute(self, context):
+ space_type = context.space_data.type
+ cls, keymap = self.keymap_from_toolbar(context, space_type)
+ if keymap is None:
+ return {'CANCELLED'}
def draw_menu(popover, context):
layout = popover.layout
layout.operator_context = 'INVOKE_REGION_WIN'
cls.draw_cls(layout, context, detect_layout=False, scale_y=1.0)
+ wm = context.window_manager
wm.popover(draw_menu, ui_units_x=8, keymap=keymap)
return {'FINISHED'}
+class WM_OT_toolbar_prompt(Operator):
+ """Leader key like functionality for accessing tools"""
+ bl_idname = "wm.toolbar_prompt"
+ bl_label = "Toolbar Prompt"
+
+ def modal(self, context, event):
+ event_type = event.type
+ event_value = event.value
+
+ keymap = self._keymap
+
+ if event_type in {'LEFTMOUSE', 'RIGHTMOUSE', 'MIDDLEMOUSE', 'ESC'}:
+ context.workspace.status_text_set(None)
+ return {'CANCELLED', 'PASS_THROUGH'}
+
+ item = keymap.keymap_items.match_event(event)
+ if item is not None:
+ idname = item.idname
+ properties = item.properties
+ if idname == "wm.tool_set_by_id":
+ tool_idname = properties["name"]
+ bpy.ops.wm.tool_set_by_id(name=tool_idname)
+
+ context.workspace.status_text_set(None)
+ return {'FINISHED'}
+
+ return {'RUNNING_MODAL'}
+
+ def invoke(self, context, event):
+ space_type = context.space_data.type
+ cls, keymap = WM_OT_toolbar.keymap_from_toolbar(
+ context,
+ space_type,
+ use_fallback_keys=False,
+ use_reset=False,
+ )
+ if keymap is None:
+ return {'CANCELLED'}
+
+ self._init_event_type = event.type
+
+ # Strip Left/Right, since "Left Alt" isn't especially useful.
+ init_event_type_as_text = self._init_event_type.title().split("_")
+ if init_event_type_as_text[0] in {"Left", "Right"}:
+ del init_event_type_as_text[0]
+ init_event_type_as_text = " ".join(init_event_type_as_text)
+
+ def status_text_fn(self, context):
+ from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
+
+ # The keymap doesn't have the same order the tools are declared in,
+ # while we could support this, it's simpler to apply order here.
+ tool_map_id_to_order = {}
+ # Map the
+ tool_map_id_to_label = {}
+ for item in ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context)):
+ if item is not None:
+ tool_map_id_to_label[item.idname] = item.label
+ tool_map_id_to_order[item.idname] = len(tool_map_id_to_order)
+
+ layout = self.layout
+ if True:
+ box = layout.row(align=True).box()
+ box.scale_x = 0.8
+ box.label(text=init_event_type_as_text)
+
+ status_items = []
+
+ for item in keymap.keymap_items:
+ name = item.name
+ key_str = item.to_string()
+ # These are duplicated from regular numbers.
+ if key_str.startswith("Numpad "):
+ continue
+ properties = item.properties
+ idname = item.idname
+ if idname == "wm.tool_set_by_id":
+ tool_idname = properties["name"]
+ name = tool_map_id_to_label[tool_idname]
+ name = name.replace("Annotate ", "")
+ else:
+ continue
+
+ status_items.append((tool_idname, name, item))
+
+ status_items.sort(
+ key=lambda a: tool_map_id_to_order[a[0]]
+ )
+
+ flow = layout.grid_flow(columns=len(status_items), align=True, row_major=True)
+
+ for _, name, item in status_items:
+ row = flow.row(align=True)
+ row.template_event_from_keymap_item(item, text=name)
+
+ self._keymap = keymap
+
+ context.workspace.status_text_set(status_text_fn)
+
+ context.window_manager.modal_handler_add(self)
+ return {'RUNNING_MODAL'}
+
+
class BatchRenameAction(bpy.types.PropertyGroup):
# category: StringProperty()
type: EnumProperty(
@@ -1995,7 +2109,6 @@ class WM_OT_batch_rename(Operator):
descr,
)
-
return data
@staticmethod
@@ -2431,6 +2544,7 @@ classes = (
WM_OT_tool_set_by_id,
WM_OT_tool_set_by_index,
WM_OT_toolbar,
+ WM_OT_toolbar_prompt,
BatchRenameAction,
WM_OT_batch_rename,
WM_MT_splash,
diff --git a/release/scripts/startup/bl_ui/properties_data_curve.py b/release/scripts/startup/bl_ui/properties_data_curve.py
index b7c566f23da..d1975919d7e 100644
--- a/release/scripts/startup/bl_ui/properties_data_curve.py
+++ b/release/scripts/startup/bl_ui/properties_data_curve.py
@@ -348,7 +348,6 @@ class DATA_PT_font(CurveButtonsPanelText, Panel):
row.label(text="Bold & Italic")
row.template_ID(text, "font_bold_italic", open="font.open", unlink="font.unlink")
-
if mode == 'EDIT_TEXT':
layout.separator()
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index 51f24007271..72e9f710e9d 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -485,6 +485,7 @@ class DATA_PT_remesh(MeshButtonsPanel, Panel):
else:
col.operator("object.quadriflow_remesh", text="QuadriFlow Remesh")
+
class DATA_PT_customdata(MeshButtonsPanel, Panel):
bl_label = "Geometry Data"
bl_options = {'DEFAULT_CLOSED'}
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 ca9c518f443..e545ee971d8 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -950,6 +950,7 @@ class GPENCIL_UL_layer(UIList):
icon_value=icon,
)
+
class GreasePencilSimplifyPanel:
def draw_header(self, context):
@@ -977,6 +978,7 @@ class GreasePencilSimplifyPanel:
sub.active = rd.simplify_gpencil_view_fill
sub.prop(rd, "simplify_gpencil_remove_lines", text="Lines")
+
classes = (
GPENCIL_MT_pie_tool_palette,
GPENCIL_MT_pie_settings_palette,
diff --git a/release/scripts/startup/bl_ui/properties_paint_common.py b/release/scripts/startup/bl_ui/properties_paint_common.py
index d21a3456e61..636c7f42f65 100644
--- a/release/scripts/startup/bl_ui/properties_paint_common.py
+++ b/release/scripts/startup/bl_ui/properties_paint_common.py
@@ -365,7 +365,7 @@ def brush_basic_sculpt_settings(layout, context, brush, *, compact=False):
layout.row().prop(brush, "direction", expand=True, **({"text": ""} if compact else {}))
-def brush_basic_gpencil_paint_settings(layout, _context, brush, *, compact=True):
+def brush_basic_gpencil_paint_settings(layout, _context, brush, tool, *, compact=True, is_toolbar=False):
gp_settings = brush.gpencil_settings
# Brush details
@@ -393,6 +393,23 @@ def brush_basic_gpencil_paint_settings(layout, _context, brush, *, compact=True)
row = layout.row(align=True)
row.prop(gp_settings, "fill_draw_mode", text="Boundary")
row.prop(gp_settings, "show_fill_boundary", text="", icon='GRID')
+ # Fill options
+ if is_toolbar:
+ settings = _context.tool_settings.gpencil_sculpt
+ row = layout.row(align=True)
+ sub = row.row(align=True)
+ sub.popover(
+ panel="TOPBAR_PT_gpencil_fill",
+ text="Fill Options",
+ )
+ else:
+ row = layout.row(align=True)
+ row.prop(gp_settings, "fill_factor", text="Resolution")
+ if gp_settings.fill_draw_mode != 'STROKE':
+ row = layout.row(align=True)
+ row.prop(gp_settings, "show_fill", text="Ignore Transparent Strokes")
+ row = layout.row(align=True)
+ row.prop(gp_settings, "fill_threshold", text="Threshold")
else: # brush.gpencil_tool == 'DRAW':
row = layout.row(align=True)
row.prop(brush, "size", text="Radius")
@@ -401,6 +418,33 @@ def brush_basic_gpencil_paint_settings(layout, _context, brush, *, compact=True)
row.prop(gp_settings, "pen_strength", slider=True)
row.prop(gp_settings, "use_strength_pressure", text="", icon='STYLUS_PRESSURE')
+ # FIXME: tools must use their own UI drawing!
+ if tool.idname in {
+ "builtin.arc",
+ "builtin.curve",
+ "builtin.line",
+ "builtin.box",
+ "builtin.circle",
+ "builtin.polyline",
+ }:
+ settings = _context.tool_settings.gpencil_sculpt
+ if is_toolbar:
+ row = layout.row(align=True)
+ row.prop(settings, "use_thickness_curve", text="", icon='CURVE_DATA')
+ sub = row.row(align=True)
+ sub.active = settings.use_thickness_curve
+ sub.popover(
+ panel="TOPBAR_PT_gpencil_primitive",
+ text="Thickness Profile",
+ )
+ else:
+ row = layout.row(align=True)
+ row.prop(settings, "use_thickness_curve", text="Use Thickness Profile")
+ sub = row.row(align=True)
+ if settings.use_thickness_curve:
+ # Curve
+ layout.template_curve_mapping(settings, "thickness_primitive_curve", brush=True)
+
def brush_basic_gpencil_sculpt_settings(layout, context, brush, *, compact=False):
tool_settings = context.tool_settings
diff --git a/release/scripts/startup/bl_ui/space_filebrowser.py b/release/scripts/startup/bl_ui/space_filebrowser.py
index 2e0d47b7d4d..37271f2e242 100644
--- a/release/scripts/startup/bl_ui/space_filebrowser.py
+++ b/release/scripts/startup/bl_ui/space_filebrowser.py
@@ -156,7 +156,8 @@ class FILEBROWSER_PT_filter(Panel):
def panel_poll_is_upper_region(region):
- # The upper region is left-aligned, the lower is split into it then. Note that after "Flip Regions" it's right-aligned.
+ # The upper region is left-aligned, the lower is split into it then.
+ # Note that after "Flip Regions" it's right-aligned.
return region.alignment in {'LEFT', 'RIGHT'}
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 35197b2c7dd..2ce81ba8359 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -418,6 +418,9 @@ class NODE_MT_context_menu(Menu):
# If something is selected
layout.operator_context = 'INVOKE_DEFAULT'
layout.operator("node.duplicate_move")
+ props = layout.operator("wm.call_panel", text="Rename...")
+ props.name = "TOPBAR_PT_name"
+ props.keep_open = False
layout.operator("node.delete")
layout.operator("node.clipboard_copy", text="Copy")
layout.operator("node.clipboard_paste", text="Paste")
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index a942b8769cf..cdac91b8014 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -741,6 +741,9 @@ class SEQUENCER_MT_context_menu(Menu):
layout.operator("sequencer.copy", text="Copy", icon='COPYDOWN')
layout.operator("sequencer.paste", text="Paste", icon='PASTEDOWN')
layout.operator("sequencer.duplicate_move")
+ props = layout.operator("wm.call_panel", text="Rename...")
+ props.name = "TOPBAR_PT_name"
+ props.keep_open = False
layout.operator("sequencer.delete", text="Delete...")
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index 9c3a3fd28fa..00beb523d21 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -1346,6 +1346,17 @@ class _defs_gpencil_paint:
)
@ToolDef.from_fn
+ def polyline():
+ return dict(
+ idname="builtin.polyline",
+ label="Polyline",
+ icon="ops.gpencil.primitive_polyline",
+ cursor='CROSSHAIR',
+ widget=None,
+ keymap=(),
+ )
+
+ @ToolDef.from_fn
def box():
return dict(
idname="builtin.box",
@@ -1389,6 +1400,17 @@ class _defs_gpencil_paint:
keymap=(),
)
+ @ToolDef.from_fn
+ def eyedropper():
+ return dict(
+ idname="builtin.eyedropper",
+ label="Eyedropper",
+ icon="ops.paint.weight_sample",
+ cursor='EYEDROPPER',
+ widget=None,
+ keymap=(),
+ )
+
class _defs_gpencil_edit:
@ToolDef.from_fn
@@ -2041,7 +2063,10 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
_defs_gpencil_paint.generate_from_brushes,
_defs_gpencil_paint.cutter,
None,
+ _defs_gpencil_paint.eyedropper,
+ None,
_defs_gpencil_paint.line,
+ _defs_gpencil_paint.polyline,
_defs_gpencil_paint.arc,
_defs_gpencil_paint.curve,
_defs_gpencil_paint.box,
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 467fa96efc4..b22afe338ed 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -298,7 +298,14 @@ class _draw_tool_settings_context_mode:
# is_paint = True
# FIXME: tools must use their own UI drawing!
- if tool.idname in {"builtin.line", "builtin.box", "builtin.circle", "builtin.arc", "builtin.curve"}:
+ if tool.idname in {
+ "builtin.line",
+ "builtin.box",
+ "builtin.circle",
+ "builtin.arc",
+ "builtin.curve",
+ "builtin.polyline",
+ }:
# is_paint = False
pass
elif tool.idname == "Cutter":
@@ -351,28 +358,7 @@ class _draw_tool_settings_context_mode:
from bl_ui.properties_paint_common import (
brush_basic_gpencil_paint_settings,
)
- brush_basic_gpencil_paint_settings(layout, context, brush, compact=True)
-
- # FIXME: tools must use their own UI drawing!
- if tool.idname in {"builtin.arc", "builtin.curve", "builtin.line", "builtin.box", "builtin.circle"}:
- settings = context.tool_settings.gpencil_sculpt
- row = layout.row(align=True)
- row.prop(settings, "use_thickness_curve", text="", icon='CURVE_DATA')
- sub = row.row(align=True)
- sub.active = settings.use_thickness_curve
- sub.popover(
- panel="TOPBAR_PT_gpencil_primitive",
- text="Thickness Profile",
- )
-
- if brush.gpencil_tool == 'FILL':
- settings = context.tool_settings.gpencil_sculpt
- row = layout.row(align=True)
- sub = row.row(align=True)
- sub.popover(
- panel="TOPBAR_PT_gpencil_fill",
- text="Fill Options",
- )
+ brush_basic_gpencil_paint_settings(layout, context, brush, tool, compact=True, is_toolbar=True)
@staticmethod
def SCULPT_GPENCIL(context, layout, tool):
@@ -5087,7 +5073,7 @@ class VIEW3D_PT_collections(Panel):
subrow.active = collection.is_visible # Parent collection runtime visibility
subrow.prop(child, "hide_viewport", text="", emboss=False)
else:
- subrow.active = collection.visible_get() # Parent collection runtime visibility
+ subrow.active = collection.visible_get() # Parent collection runtime visibility
icon = 'HIDE_OFF' if child.visible_get() else 'HIDE_ON'
props = subrow.operator("object.hide_collection", text="", icon=icon, emboss=False)
props.collection_index = index
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index c6972b15432..5ac08e7315d 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1872,7 +1872,8 @@ class VIEW3D_PT_tools_grease_pencil_brush(View3DPanel, Panel):
from bl_ui.properties_paint_common import (
brush_basic_gpencil_paint_settings,
)
- brush_basic_gpencil_paint_settings(layout, context, brush, compact=True)
+ tool = context.workspace.tools.from_space_view3d_mode(context.mode, create=False)
+ brush_basic_gpencil_paint_settings(layout, context, brush, tool, compact=True, is_toolbar=False)
# Grease Pencil drawing brushes options