2023-06-15 13:09:04 +10:00
|
|
|
# SPDX-FileCopyrightText: 2020-2023 Blender Foundation
|
|
|
|
#
|
2022-02-11 09:07:11 +11:00
|
|
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
2020-10-22 12:29:42 +11:00
|
|
|
|
|
|
|
# Update Blender version this key-map was written in:
|
|
|
|
#
|
2022-03-15 14:53:49 +11:00
|
|
|
# When the version is `(0, 0, 0)`, the key-map being loaded didn't contain any versioning information.
|
|
|
|
# This will older than `(2, 92, 0)`.
|
2020-10-22 12:29:42 +11:00
|
|
|
|
|
|
|
def keyconfig_update(keyconfig_data, keyconfig_version):
|
|
|
|
from bpy.app import version_file as blender_version
|
|
|
|
if keyconfig_version >= blender_version:
|
|
|
|
return keyconfig_data
|
|
|
|
|
|
|
|
# Version the key-map.
|
|
|
|
import copy
|
2022-03-14 20:41:05 +11:00
|
|
|
# Only copy once.
|
2020-10-22 12:29:42 +11:00
|
|
|
has_copy = False
|
|
|
|
|
|
|
|
# Default repeat to false.
|
|
|
|
if keyconfig_version <= (2, 92, 0):
|
|
|
|
if not has_copy:
|
|
|
|
keyconfig_data = copy.deepcopy(keyconfig_data)
|
|
|
|
has_copy = True
|
|
|
|
|
|
|
|
for _km_name, _km_parms, km_items_data in keyconfig_data:
|
|
|
|
for (_item_op, item_event, _item_prop) in km_items_data["items"]:
|
|
|
|
if item_event.get("value") == 'PRESS':
|
2023-04-18 10:42:00 +10:00
|
|
|
# Unfortunately we don't know the `map_type` at this point.
|
2020-10-22 12:29:42 +11:00
|
|
|
# Setting repeat true on other kinds of events is harmless.
|
|
|
|
item_event["repeat"] = True
|
|
|
|
|
2022-03-02 15:07:00 +11:00
|
|
|
if keyconfig_version <= (3, 2, 5):
|
|
|
|
if not has_copy:
|
|
|
|
keyconfig_data = copy.deepcopy(keyconfig_data)
|
|
|
|
has_copy = True
|
|
|
|
|
|
|
|
for _km_name, _km_parms, km_items_data in keyconfig_data:
|
|
|
|
for (_item_op, item_event, _item_prop) in km_items_data["items"]:
|
|
|
|
if ty_new := {
|
|
|
|
'EVT_TWEAK_L': 'LEFTMOUSE',
|
|
|
|
'EVT_TWEAK_M': 'MIDDLEMOUSE',
|
|
|
|
'EVT_TWEAK_R': 'RIGHTMOUSE',
|
|
|
|
}.get(item_event.get("type")):
|
|
|
|
item_event["type"] = ty_new
|
|
|
|
if (value := item_event["value"]) != 'ANY':
|
|
|
|
item_event["direction"] = value
|
|
|
|
item_event["value"] = 'CLICK_DRAG'
|
|
|
|
|
2022-03-14 20:41:05 +11:00
|
|
|
if keyconfig_version <= (3, 2, 6):
|
|
|
|
if not has_copy:
|
|
|
|
keyconfig_data = copy.deepcopy(keyconfig_data)
|
|
|
|
has_copy = True
|
|
|
|
|
|
|
|
for _km_name, _km_parms, km_items_data in keyconfig_data:
|
|
|
|
for (_item_op, item_event, _item_prop) in km_items_data["items"]:
|
|
|
|
if ty_new := {
|
|
|
|
'NDOF_BUTTON_ESC': 'ESC',
|
|
|
|
'NDOF_BUTTON_ALT': 'LEFT_ALT',
|
|
|
|
'NDOF_BUTTON_SHIFT': 'LEFT_SHIFT',
|
|
|
|
'NDOF_BUTTON_CTRL': 'LEFT_CTRL',
|
|
|
|
}.get(item_event.get("type")):
|
|
|
|
item_event["type"] = ty_new
|
|
|
|
|
2022-12-22 18:41:44 -03:00
|
|
|
if keyconfig_version <= (3, 6, 0):
|
|
|
|
# The modal keys "Vert/Edge Slide" and "TrackBall" didn't exist until then.
|
|
|
|
# The operator reused the "Move" and "Rotate" respectively.
|
|
|
|
if not has_copy:
|
|
|
|
keyconfig_data = copy.deepcopy(keyconfig_data)
|
|
|
|
has_copy = True
|
|
|
|
|
|
|
|
for km_name, _km_parms, km_items_data in keyconfig_data:
|
|
|
|
if km_name == "Transform Modal Map":
|
|
|
|
km_items = km_items_data["items"]
|
|
|
|
for (item_modal, item_event, _item_prop) in km_items:
|
|
|
|
if item_modal == 'TRANSLATE':
|
|
|
|
km_items.append(('VERT_EDGE_SLIDE', item_event, None))
|
|
|
|
elif item_modal == 'ROTATE':
|
|
|
|
km_items.append(('TRACKBALL', item_event, None))
|
|
|
|
|
2023-03-27 14:38:47 -03:00
|
|
|
# The modal key for "Rotate Normals" also didn't exist until then.
|
|
|
|
km_items.append(('ROTATE_NORMALS', {"type": 'N', "value": 'PRESS'}, None))
|
2022-12-22 18:41:44 -03:00
|
|
|
break
|
|
|
|
|
2023-06-07 09:22:34 -03:00
|
|
|
if keyconfig_version <= (4, 0, 3):
|
Transform: new feature to edit the 'Snap Base'
This commit implements a new modifier key (`B`) for the transform
operators.
This new key allows changing the 'Snap Base' of a transform by snapping
it to a defined point in the scene.
Ref #66424
# Implementation Details
- This feature is only available in the 3D View.
- This feature is only available for the transform modes:
- `Move`,
- `Rotate`,
- `Scale`,
- `Vert Slide` and
- `Edge Slide`.
- The `Snap Base Edit` is enabled while we are transforming and we
press the key `B`
- The `Snap Base Edit` is confirmed when we press any of the keys:
`B`, `LMB`, `Enter`
- During um operation, if no snap target is set for an element in the
scene (Vertex, Edge...), the snap targets to geometry Vertex, Edge,
Face, Center of Edge and Perpendicular of Edge are set automatically.
- Constraint or similar modal features are not available during the
`Snap Base Edit` mode.
- Text input is not available during the `Snap Base Edit` mode.
- A prone snap base point is indicated with an small cursor drawing.
Pull Request: https://projects.blender.org/blender/blender/pulls/104443
2023-06-03 04:18:49 +02:00
|
|
|
if not has_copy:
|
|
|
|
keyconfig_data = copy.deepcopy(keyconfig_data)
|
|
|
|
has_copy = True
|
|
|
|
|
|
|
|
# "Snap Source Toggle" did not exist until then.
|
|
|
|
for km_name, _km_parms, km_items_data in keyconfig_data:
|
|
|
|
if km_name == "Transform Modal Map":
|
|
|
|
km_items_data["items"].extend(("EDIT_SNAP_SOURCE_ON", {"type": 'B', "value": 'PRESS'}, None))
|
|
|
|
km_items_data["items"].append(("EDIT_SNAP_SOURCE_OFF", {"type": 'B', "value": 'PRESS'}, None))
|
|
|
|
break
|
|
|
|
|
2020-10-22 12:29:42 +11:00
|
|
|
return keyconfig_data
|