diff options
Diffstat (limited to 'release')
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 |