From bb735bd51807f2315558d8a2fa6fbd78a58f88f9 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Thu, 17 Mar 2022 16:27:31 +1100 Subject: Tweak Tool: supports select & tweak on LMB (with RMB-select key-map) Support for differentiating the tweak tool from the 3D cursor when select is set to RMB. This is currently an experimental preference: Tweak Tool: Left Mouse Select & Drag When enabled the tweak tool can now tweak the existing selection without de-selecting first, a single click can be used to replace the selection. This matches selection in the graph & node editors. This preferences is only available with "Developer Extras" enabled. Ref T96544. --- release/scripts/presets/keyconfig/Blender.py | 22 ++++++++++++++++++++++ .../keyconfig/keymap_data/blender_default.py | 17 +++++++++++++++++ 2 files changed, 39 insertions(+) (limited to 'release') diff --git a/release/scripts/presets/keyconfig/Blender.py b/release/scripts/presets/keyconfig/Blender.py index 74e0ddfdf62..8f9bea82358 100644 --- a/release/scripts/presets/keyconfig/Blender.py +++ b/release/scripts/presets/keyconfig/Blender.py @@ -85,6 +85,18 @@ class Prefs(bpy.types.KeyConfigPreferences): ), update=update_fn, ) + + # Experimental: only show with developer extras, see: T96544. + use_tweak_tool_lmb_interaction: BoolProperty( + name="Tweak Tool: Left Mouse Select & Move", + description=( + "The tweak tool is activated immediately instead of placing the cursor. " + "This is an experimental preference and may be removed" + ), + default=False, + update=update_fn, + ) + use_alt_click_leader: BoolProperty( name="Alt Click Tool Prompt", description=( @@ -236,6 +248,7 @@ class Prefs(bpy.types.KeyConfigPreferences): prefs = context.preferences + show_developer_ui = prefs.view.show_developer_ui is_select_left = (self.select_mouse == 'LEFT') use_mouse_emulate_3_button = ( prefs.inputs.use_mouse_emulate_3_button and @@ -270,6 +283,10 @@ class Prefs(bpy.types.KeyConfigPreferences): row = sub.row() row.prop(self, "use_select_all_toggle") + if show_developer_ui and (not is_select_left): + row = sub.row() + row.prop(self, "use_tweak_tool_lmb_interaction") + # 3DView settings. col = layout.column() col.label(text="3D View") @@ -301,6 +318,7 @@ def load(): kc = context.window_manager.keyconfigs.new(IDNAME) kc_prefs = kc.preferences + show_developer_ui = prefs.view.show_developer_ui is_select_left = (kc_prefs.select_mouse == 'LEFT') use_mouse_emulate_3_button = ( prefs.inputs.use_mouse_emulate_3_button and @@ -322,6 +340,10 @@ def load(): use_gizmo_drag=(is_select_left and kc_prefs.gizmo_action == 'DRAG'), use_fallback_tool=True, use_fallback_tool_rmb=(False if is_select_left else kc_prefs.rmb_action == 'FALLBACK_TOOL'), + use_tweak_tool_lmb_interaction=( + False if is_select_left else + (show_developer_ui and kc_prefs.use_tweak_tool_lmb_interaction) + ), use_alt_tool_or_cursor=( (not use_mouse_emulate_3_button) and (kc_prefs.use_alt_tool if is_select_left else kc_prefs.use_alt_cursor) diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 80794d9f23d..ac9258d53ca 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -31,6 +31,7 @@ class Params: "context_menu_event", "cursor_set_event", "cursor_tweak_event", + "use_tweak_tool_lmb_interaction", "use_mouse_emulate_3_button", # User preferences: @@ -102,6 +103,7 @@ class Params: use_gizmo_drag=True, use_fallback_tool=False, use_fallback_tool_rmb=False, + use_tweak_tool_lmb_interaction=False, use_v3d_tab_menu=False, use_v3d_shade_ex_pie=False, use_v3d_mmb_pan=False, @@ -129,6 +131,7 @@ class Params: self.tool_maybe_tweak_value = 'PRESS' else: self.tool_maybe_tweak_value = 'CLICK_DRAG' + self.use_tweak_tool_lmb_interaction = use_tweak_tool_lmb_interaction self.context_menu_event = {"type": 'W', "value": 'PRESS'} @@ -150,6 +153,7 @@ class Params: self.action_mouse = 'RIGHTMOUSE' self.tool_mouse = 'LEFTMOUSE' self.tool_maybe_tweak_value = 'CLICK_DRAG' + self.use_tweak_tool_lmb_interaction = False if self.legacy: self.context_menu_event = {"type": 'W', "value": 'PRESS'} @@ -457,6 +461,19 @@ def _template_items_tool_select(params, operator, cursor_operator, fallback, *, {"properties": [(extend, True)]}), ] else: + # Experimental support for LMB interaction for the tweak tool. + if params.use_tweak_tool_lmb_interaction and not fallback: + return [ + (operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, + {"properties": [("deselect_all", True), ("select_passthrough", True)]}), + (operator, {"type": 'LEFTMOUSE', "value": 'CLICK'}, + {"properties": [("deselect_all", True)]}), + (operator, {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True}, + {"properties": [("deselect_all", False), ("toggle", True)]}), + ("transform.translate", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG'}, + {"properties": [("release_confirm", True)]}), + ] + # For right mouse, set the cursor. return [ (cursor_operator, {"type": 'LEFTMOUSE', "value": 'PRESS'}, None), -- cgit v1.2.3