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:
authorGaia Clary <gaia.clary@machinimatrix.org>2018-11-23 00:03:35 +0300
committerGaia Clary <gaia.clary@machinimatrix.org>2018-11-23 00:03:35 +0300
commit5df55e184ec2965af9387519e3051ab109a27437 (patch)
treefc5acd02e57f4d11cf518fe6b523c45631748a40
parent76a18d555ce6a2af319b40a8131845f9123f7d31 (diff)
parent3fb77591f4d7cd31cfc4410b18d9d5e9ad135394 (diff)
Merge remote-tracking branch 'origin/blender2.8' into collada2.8
-rw-r--r--doc/python_api/examples/gpu.1.py69
-rw-r--r--doc/python_api/examples/gpu.10.py7
-rw-r--r--doc/python_api/examples/gpu.11.py16
-rw-r--r--doc/python_api/examples/gpu.2.py5
-rw-r--r--doc/python_api/examples/gpu.3.py6
-rw-r--r--doc/python_api/examples/gpu.4.py14
-rw-r--r--doc/python_api/examples/gpu.5.py21
-rw-r--r--doc/python_api/examples/gpu.6.py6
-rw-r--r--doc/python_api/examples/gpu.7.py14
-rw-r--r--doc/python_api/examples/gpu.8.py26
-rw-r--r--doc/python_api/examples/gpu.9.py14
-rw-r--r--doc/python_api/examples/gpu.shader.py31
-rw-r--r--doc/python_api/sphinx_doc_gen.py15
-rw-r--r--intern/cycles/kernel/geom/geom_triangle_intersect.h412
-rw-r--r--release/datafiles/blender_icons.svg484
-rw-r--r--release/datafiles/blender_icons16/icon16_30.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_alembic.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_border_lasso.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_border_rect.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_clipuv_dehlt.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_clipuv_hlt.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_community.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_cone.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_constraint_data.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_cube.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_dotsdown.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_dotsup.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_duplicate.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_edit.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_empty_arrows.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_empty_axis.dat (renamed from release/datafiles/blender_icons16/icon16_gp_empty.dat)bin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_empty_single_arrow.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_experimental.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_external_data.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_facesel_hlt.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_fake_user.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_fake_user_off.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_fake_user_on.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_file_volume.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_fullscreen.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_game.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_gear.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_ghost.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_go_left.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_heart.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_hide_off.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_hide_on.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_image_background.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_image_plane.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_image_reference.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_imagefile.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_inlink.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_lightpaint.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_link.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_link_area.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_logic.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_man_rot.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_man_scale.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_man_trans.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_manipul.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_matshaderball.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_meta_empty.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_mod_particles.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_node_insert_top.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_object_data.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_object_datamode.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_open_recent.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_orphan_data.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_outliner_data_pose.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_output.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_particle_data.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_particles.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_physics.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_pinned.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_plug.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_pose_data.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_radio.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_render_region.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_restrict_render_off.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_restrict_render_on.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_restrict_select_off.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_restrict_select_on.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_restrict_view_off.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_restrict_view_on.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_retopo.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_sculpt_dyntopo.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_sequence.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_shading_texture.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_shapekey_data.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_snap_normal.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_snap_peel_object.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_sphere.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_stroke.dat (renamed from release/datafiles/blender_icons16/icon16_gp_stroke.dat)bin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_temperature.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_texture_shaded.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_tool_settings.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_tria_left.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_ui.datbin1048 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_unpinned.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_world.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_world_data.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_xray.datbin1048 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_30.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_alembic.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_border_lasso.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_border_rect.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_clipuv_dehlt.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_clipuv_hlt.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_community.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_cone.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_constraint_data.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_cube.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_dotsdown.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_dotsup.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_duplicate.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_edit.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_empty_arrows.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_empty_axis.dat (renamed from release/datafiles/blender_icons32/icon32_gp_empty.dat)bin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_empty_single_arrow.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_experimental.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_external_data.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_facesel_hlt.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_fake_user.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_fake_user_off.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_fake_user_on.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_file_volume.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_fullscreen.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_game.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_gear.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_ghost.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_go_left.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_heart.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_hide_off.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_hide_on.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_image_background.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_image_plane.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_image_reference.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_imagefile.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_inlink.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_lightpaint.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_link.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_link_area.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_logic.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_man_rot.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_man_scale.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_man_trans.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_manipul.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_matshaderball.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_meta_empty.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_mod_particles.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_node_insert_top.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_object_data.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_object_datamode.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_open_recent.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_orphan_data.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_outliner_data_pose.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_output.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_particle_data.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_particles.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_physics.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_pinned.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_plug.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_pose_data.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_radio.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_render_region.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_restrict_render_off.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_restrict_render_on.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_restrict_select_off.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_restrict_select_on.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_restrict_view_off.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_restrict_view_on.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_retopo.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_sculpt_dyntopo.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_sequence.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_shading_texture.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_shapekey_data.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_snap_normal.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_snap_peel_object.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_sphere.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_stroke.dat (renamed from release/datafiles/blender_icons32/icon32_gp_stroke.dat)bin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_temperature.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_texture_shaded.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_tool_settings.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_tria_left.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_ui.datbin4120 -> 0 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_unpinned.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_world.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_world_data.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_xray.datbin4120 -> 4120 bytes
-rw-r--r--release/datafiles/prvicons.pngbin16913 -> 3518 bytes
-rw-r--r--release/datafiles/prvicons.svg4571
-rw-r--r--release/datafiles/userdef/userdef_default_theme.c88
m---------release/scripts/addons0
m---------release/scripts/addons_contrib0
-rw-r--r--release/scripts/modules/bl_i18n_utils/bl_extract_messages.py4
-rw-r--r--release/scripts/modules/bl_i18n_utils/settings.py2
-rw-r--r--release/scripts/modules/bl_keymap_utils/__init__.py25
-rw-r--r--release/scripts/modules/bl_keymap_utils/io.py278
-rw-r--r--release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py394
-rw-r--r--release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py206
-rw-r--r--release/scripts/modules/bpy/utils/__init__.py25
-rw-r--r--release/scripts/modules/bpy_extras/keyconfig_utils.py541
-rw-r--r--release/scripts/modules/bpy_extras/mesh_utils.py5
-rw-r--r--release/scripts/modules/bpy_extras/node_shader_utils.py1
-rw-r--r--release/scripts/modules/rna_keymap_ui.py56
-rw-r--r--release/scripts/modules/rna_xml.py43
-rw-r--r--release/scripts/presets/interaction/3dsmax.py12
-rw-r--r--release/scripts/presets/interaction/blender.py14
-rw-r--r--release/scripts/presets/interaction/maya.py10
-rw-r--r--release/scripts/presets/interface_theme/24x_blues.xml1177
-rw-r--r--release/scripts/presets/interface_theme/back_to_black.xml1177
-rw-r--r--release/scripts/presets/interface_theme/blender_24x.xml1172
-rw-r--r--release/scripts/presets/interface_theme/blender_27x.xml1242
-rw-r--r--release/scripts/presets/interface_theme/dark_blue_gradient.xml1179
-rw-r--r--release/scripts/presets/interface_theme/default++.xml1173
-rw-r--r--release/scripts/presets/interface_theme/elsyiun.xml1172
-rw-r--r--release/scripts/presets/interface_theme/graph.xml1172
-rw-r--r--release/scripts/presets/interface_theme/hexagon.xml1172
-rw-r--r--release/scripts/presets/interface_theme/modern_minimalist.xml1183
-rw-r--r--release/scripts/presets/interface_theme/north.xml1177
-rw-r--r--release/scripts/presets/interface_theme/rtheme.xml1172
-rw-r--r--release/scripts/presets/interface_theme/sandyslate.xml1179
-rw-r--r--release/scripts/presets/interface_theme/science_lab.xml1172
-rw-r--r--release/scripts/presets/interface_theme/softblend.xml1172
-rw-r--r--release/scripts/presets/interface_theme/true_blue_menu.xml1177
-rw-r--r--release/scripts/presets/keyconfig/3dsmax.py2434
-rw-r--r--release/scripts/presets/keyconfig/blender.py109
-rw-r--r--release/scripts/presets/keyconfig/blender_27x.py58
-rw-r--r--release/scripts/presets/keyconfig/keymap_data/blender_default.py670
-rw-r--r--release/scripts/presets/keyconfig/maya.py1917
-rw-r--r--release/scripts/startup/bl_operators/object.py37
-rw-r--r--release/scripts/startup/bl_operators/object_align.py9
-rw-r--r--release/scripts/startup/bl_operators/presets.py31
-rw-r--r--release/scripts/startup/bl_operators/wm.py96
-rw-r--r--release/scripts/startup/bl_ui/properties_data_empty.py8
-rw-r--r--release/scripts/startup/bl_ui/properties_data_lightprobe.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_data_modifier.py61
-rw-r--r--release/scripts/startup/bl_ui/properties_grease_pencil_common.py4
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py2
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py17
-rw-r--r--release/scripts/startup/bl_ui/space_image.py14
-rw-r--r--release/scripts/startup/bl_ui/space_info.py7
-rw-r--r--release/scripts/startup/bl_ui/space_node.py11
-rw-r--r--release/scripts/startup/bl_ui/space_sequencer.py9
-rw-r--r--release/scripts/startup/bl_ui/space_text.py2
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_common.py341
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py60
-rw-r--r--release/scripts/startup/bl_ui/space_topbar.py2
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py111
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py108
-rw-r--r--release/scripts/templates_py/operator_modal_view3d_raycast.py6
-rw-r--r--release/scripts/templates_py/ui_tool_simple.py4
-rw-r--r--source/blender/blenkernel/BKE_armature.h18
-rw-r--r--source/blender/blenkernel/BKE_blender_version.h2
-rw-r--r--source/blender/blenkernel/BKE_blendfile.h12
-rw-r--r--source/blender/blenkernel/BKE_curve.h2
-rw-r--r--source/blender/blenkernel/BKE_dynamicpaint.h7
-rw-r--r--source/blender/blenkernel/BKE_gpencil.h1
-rw-r--r--source/blender/blenkernel/BKE_gpencil_modifier.h5
-rw-r--r--source/blender/blenkernel/BKE_keyconfig.h56
-rw-r--r--source/blender/blenkernel/BKE_mesh.h4
-rw-r--r--source/blender/blenkernel/BKE_mesh_runtime.h2
-rw-r--r--source/blender/blenkernel/BKE_multires.h2
-rw-r--r--source/blender/blenkernel/BKE_object.h8
-rw-r--r--source/blender/blenkernel/BKE_paint.h2
-rw-r--r--source/blender/blenkernel/BKE_studiolight.h44
-rw-r--r--source/blender/blenkernel/CMakeLists.txt2
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.c17
-rw-r--r--source/blender/blenkernel/intern/armature.c150
-rw-r--r--source/blender/blenkernel/intern/armature_update.c78
-rw-r--r--source/blender/blenkernel/intern/blender.c12
-rw-r--r--source/blender/blenkernel/intern/blender_undo.c6
-rw-r--r--source/blender/blenkernel/intern/blendfile.c41
-rw-r--r--source/blender/blenkernel/intern/brush.c20
-rw-r--r--source/blender/blenkernel/intern/colorband.c2
-rw-r--r--source/blender/blenkernel/intern/constraint.c6
-rw-r--r--source/blender/blenkernel/intern/curve.c4
-rw-r--r--source/blender/blenkernel/intern/dynamicpaint.c23
-rw-r--r--source/blender/blenkernel/intern/gpencil.c48
-rw-r--r--source/blender/blenkernel/intern/keyconfig.c123
-rw-r--r--source/blender/blenkernel/intern/layer.c1
-rw-r--r--source/blender/blenkernel/intern/material.c5
-rw-r--r--source/blender/blenkernel/intern/mesh.c6
-rw-r--r--source/blender/blenkernel/intern/multires.c15
-rw-r--r--source/blender/blenkernel/intern/multires_reshape.c8
-rw-r--r--source/blender/blenkernel/intern/object.c84
-rw-r--r--source/blender/blenkernel/intern/object_update.c28
-rw-r--r--source/blender/blenkernel/intern/paint.c23
-rw-r--r--source/blender/blenkernel/intern/scene.c40
-rw-r--r--source/blender/blenkernel/intern/studiolight.c959
-rw-r--r--source/blender/blenlib/BLI_math_vector.h1
-rw-r--r--source/blender/blenlib/BLI_string.h2
-rw-r--r--source/blender/blenlib/intern/math_vector_inline.c9
-rw-r--r--source/blender/blenlib/intern/string.c48
-rw-r--r--source/blender/blenlib/intern/task.c63
-rw-r--r--source/blender/blenloader/BLO_readfile.h13
-rw-r--r--source/blender/blenloader/CMakeLists.txt1
-rw-r--r--source/blender/blenloader/intern/readblenentry.c9
-rw-r--r--source/blender/blenloader/intern/readfile.c19
-rw-r--r--source/blender/blenloader/intern/undofile.c2
-rw-r--r--source/blender/blenloader/intern/versioning_270.c44
-rw-r--r--source/blender/blenloader/intern/versioning_280.c68
-rw-r--r--source/blender/blenloader/intern/versioning_defaults.c41
-rw-r--r--source/blender/blenloader/intern/versioning_userdef.c55
-rw-r--r--source/blender/blenloader/intern/writefile.c7
-rw-r--r--source/blender/blentranslation/intern/blt_lang.c7
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh.c11
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh_conv.c2
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh_conv.h2
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_cycle.cc35
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc4
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc8
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.cc40
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations.h22
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h29
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc330
-rw-r--r--source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc8
-rw-r--r--source/blender/depsgraph/intern/depsgraph.cc10
-rw-r--r--source/blender/depsgraph/intern/depsgraph.h8
-rw-r--r--source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc2
-rw-r--r--source/blender/draw/CMakeLists.txt1
-rw-r--r--source/blender/draw/engines/eevee/eevee_effects.c19
-rw-r--r--source/blender/draw/engines/eevee/eevee_engine.c2
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightcache.c5
-rw-r--r--source/blender/draw/engines/eevee/eevee_lightprobes.c202
-rw-r--r--source/blender/draw/engines/eevee/eevee_lookdev.c43
-rw-r--r--source/blender/draw/engines/eevee/eevee_materials.c8
-rw-r--r--source/blender/draw/engines/eevee/eevee_private.h20
-rw-r--r--source/blender/draw/engines/eevee/eevee_shaders.c320
-rw-r--r--source/blender/draw/engines/eevee/eevee_temporal_sampling.c36
-rw-r--r--source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl5
-rw-r--r--source/blender/draw/engines/eevee/shaders/background_vert.glsl7
-rw-r--r--source/blender/draw/engines/eevee/shaders/default_world_frag.glsl34
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl2
-rw-r--r--source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl59
-rw-r--r--source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl1
-rw-r--r--source/blender/draw/engines/eevee/shaders/prepass_vert.glsl2
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_cache_utils.c246
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c237
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_draw_utils.c970
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.c67
-rw-r--r--source/blender/draw/engines/gpencil/gpencil_engine.h95
-rw-r--r--source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl6
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl2
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl2
-rw-r--r--source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl115
-rw-r--r--source/blender/draw/engines/workbench/workbench_deferred.c4
-rw-r--r--source/blender/draw/engines/workbench/workbench_forward.c8
-rw-r--r--source/blender/draw/engines/workbench/workbench_materials.c15
-rw-r--r--source/blender/draw/engines/workbench/workbench_private.h4
-rw-r--r--source/blender/draw/engines/workbench/workbench_studiolight.c54
-rw-r--r--source/blender/draw/intern/draw_cache_impl_mesh.c33
-rw-r--r--source/blender/draw/intern/draw_manager_profiling.c1
-rw-r--r--source/blender/draw/modes/edit_mesh_mode.c39
-rw-r--r--source/blender/draw/modes/object_mode.c154
-rw-r--r--source/blender/draw/modes/overlay_mode.c21
-rw-r--r--source/blender/draw/modes/shaders/common_hair_lib.glsl8
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl19
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl7
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl12
-rw-r--r--source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl4
-rw-r--r--source/blender/draw/modes/shaders/object_empty_image_vert.glsl28
-rw-r--r--source/blender/editors/animation/anim_markers.c1
-rw-r--r--source/blender/editors/animation/anim_ops.c4
-rw-r--r--source/blender/editors/armature/armature_relations.c9
-rw-r--r--source/blender/editors/armature/armature_utils.c6
-rw-r--r--source/blender/editors/datafiles/CMakeLists.txt110
-rw-r--r--source/blender/editors/gpencil/annotate_draw.c5
-rw-r--r--source/blender/editors/gpencil/annotate_paint.c2
-rw-r--r--source/blender/editors/gpencil/gpencil_brush.c149
-rw-r--r--source/blender/editors/gpencil/gpencil_data.c2
-rw-r--r--source/blender/editors/gpencil/gpencil_edit.c76
-rw-r--r--source/blender/editors/gpencil/gpencil_intern.h2
-rw-r--r--source/blender/editors/gpencil/gpencil_ops.c2
-rw-r--r--source/blender/editors/gpencil/gpencil_paint.c2
-rw-r--r--source/blender/editors/gpencil/gpencil_utils.c28
-rw-r--r--source/blender/editors/include/ED_object.h11
-rw-r--r--source/blender/editors/include/ED_transform.h3
-rw-r--r--source/blender/editors/include/UI_icons.h30
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface.c22
-rw-r--r--source/blender/editors/interface/interface_context_menu.c18
-rw-r--r--source/blender/editors/interface/interface_handlers.c94
-rw-r--r--source/blender/editors/interface/interface_layout.c8
-rw-r--r--source/blender/editors/interface/interface_ops.c150
-rw-r--r--source/blender/editors/interface/interface_panel.c6
-rw-r--r--source/blender/editors/interface/interface_region_color_picker.c4
-rw-r--r--source/blender/editors/interface/interface_region_menu_pie.c14
-rw-r--r--source/blender/editors/interface/interface_region_tooltip.c20
-rw-r--r--source/blender/editors/interface/interface_style.c12
-rw-r--r--source/blender/editors/interface/interface_templates.c183
-rw-r--r--source/blender/editors/interface/interface_widgets.c8
-rw-r--r--source/blender/editors/mesh/CMakeLists.txt1
-rw-r--r--source/blender/editors/mesh/editmesh_extrude.c6
-rw-r--r--source/blender/editors/mesh/editmesh_polybuild.c5
-rw-r--r--source/blender/editors/mesh/editmesh_preselect_edgering.c4
-rw-r--r--source/blender/editors/mesh/editmesh_tools.c5
-rw-r--r--source/blender/editors/mesh/mesh_intern.h3
-rw-r--r--source/blender/editors/object/object_add.c25
-rw-r--r--source/blender/editors/object/object_select.c307
-rw-r--r--source/blender/editors/physics/dynamicpaint_ops.c2
-rw-r--r--source/blender/editors/physics/particle_edit.c14
-rw-r--r--source/blender/editors/render/render_preview.c2
-rw-r--r--source/blender/editors/screen/area.c4
-rw-r--r--source/blender/editors/screen/screen_draw.c8
-rw-r--r--source/blender/editors/space_action/action_draw.c42
-rw-r--r--source/blender/editors/space_buttons/buttons_context.c30
-rw-r--r--source/blender/editors/space_clip/space_clip.c6
-rw-r--r--source/blender/editors/space_file/fsmenu.c28
-rw-r--r--source/blender/editors/space_graph/graph_ops.c4
-rw-r--r--source/blender/editors/space_info/info_stats.c40
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c4
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c1
-rw-r--r--source/blender/editors/space_view3d/view3d_edit.c48
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_empty.c13
-rw-r--r--source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c26
-rw-r--r--source/blender/editors/space_view3d/view3d_intern.h1
-rw-r--r--source/blender/editors/space_view3d/view3d_ops.c1
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c51
-rw-r--r--source/blender/editors/transform/CMakeLists.txt3
-rw-r--r--source/blender/editors/transform/transform.c3
-rw-r--r--source/blender/editors/transform/transform_conversions.c2
-rw-r--r--source/blender/editors/transform/transform_gizmo_3d.c259
-rw-r--r--source/blender/editors/transform/transform_gizmo_extrude_3d.c (renamed from source/blender/editors/mesh/editmesh_extrude_gizmo.c)179
-rw-r--r--source/blender/editors/transform/transform_orientations.c23
-rw-r--r--source/blender/editors/transform/transform_snap_object.c166
-rw-r--r--source/blender/editors/uvedit/uvedit_smart_stitch.c14
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c8
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c16
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c9
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c3
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c1
-rw-r--r--source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c1
-rw-r--r--source/blender/gpu/GPU_immediate_util.h1
-rw-r--r--source/blender/gpu/intern/gpu_immediate_util.c11
-rw-r--r--source/blender/gpu/shaders/gpu_shader_material.glsl29
-rw-r--r--source/blender/makesdna/DNA_gpencil_types.h3
-rw-r--r--source/blender/makesdna/DNA_layer_types.h3
-rw-r--r--source/blender/makesdna/DNA_modifier_types.h22
-rw-r--r--source/blender/makesdna/DNA_object_types.h8
-rw-r--r--source/blender/makesdna/DNA_scene_types.h102
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h17
-rw-r--r--source/blender/makesdna/DNA_windowmanager_types.h21
-rw-r--r--source/blender/makesrna/RNA_access.h1
-rw-r--r--source/blender/makesrna/intern/rna_access.c2
-rw-r--r--source/blender/makesrna/intern/rna_brush.c2
-rw-r--r--source/blender/makesrna/intern/rna_camera.c2
-rw-r--r--source/blender/makesrna/intern/rna_constraint.c2
-rw-r--r--source/blender/makesrna/intern/rna_dynamicpaint.c4
-rw-r--r--source/blender/makesrna/intern/rna_fcurve.c6
-rw-r--r--source/blender/makesrna/intern/rna_gpencil_modifier.c2
-rw-r--r--source/blender/makesrna/intern/rna_layer.c16
-rw-r--r--source/blender/makesrna/intern/rna_modifier.c21
-rw-r--r--source/blender/makesrna/intern/rna_movieclip.c12
-rw-r--r--source/blender/makesrna/intern/rna_object.c25
-rw-r--r--source/blender/makesrna/intern/rna_scene.c5
-rw-r--r--source/blender/makesrna/intern/rna_sculpt_paint.c64
-rw-r--r--source/blender/makesrna/intern/rna_shader_fx.c2
-rw-r--r--source/blender/makesrna/intern/rna_space.c2
-rw-r--r--source/blender/makesrna/intern/rna_tracking.c6
-rw-r--r--source/blender/makesrna/intern/rna_ui.c3
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c104
-rw-r--r--source/blender/makesrna/intern/rna_wm.c144
-rw-r--r--source/blender/modifiers/intern/MOD_bevel.c2
-rw-r--r--source/blender/modifiers/intern/MOD_dynamicpaint.c4
-rw-r--r--source/blender/modifiers/intern/MOD_mirror.c100
-rw-r--r--source/blender/nodes/shader/node_shader_tree.c52
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_valToRgb.c20
-rw-r--r--source/blender/python/gpu/gpu_py_matrix.c2
-rw-r--r--source/blender/python/gpu/gpu_py_offscreen.c63
-rw-r--r--source/blender/python/gpu/gpu_py_offscreen.h1
-rw-r--r--source/blender/render/intern/source/bake_api.c4
-rw-r--r--source/blender/shader_fx/intern/FX_shader_rim.c2
-rw-r--r--source/blender/windowmanager/WM_api.h4
-rw-r--r--source/blender/windowmanager/WM_keymap.h6
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c18
-rw-r--r--source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c8
-rw-r--r--source/blender/windowmanager/intern/wm.c16
-rw-r--r--source/blender/windowmanager/intern/wm_event_system.c67
-rw-r--r--source/blender/windowmanager/intern/wm_files.c32
-rw-r--r--source/blender/windowmanager/intern/wm_gesture.c3
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c5
-rw-r--r--source/blender/windowmanager/intern/wm_operator_props.c9
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c12
-rw-r--r--source/blender/windowmanager/intern/wm_toolsystem.c8
-rw-r--r--source/blender/windowmanager/intern/wm_window.c2
-rw-r--r--source/blender/windowmanager/wm_event_system.h2
-rw-r--r--source/blender/windowmanager/wm_event_types.h8
-rw-r--r--tests/python/bl_keymap_completeness.py15
-rw-r--r--tests/python/bl_run_operators.py1
502 files changed, 8956 insertions, 32613 deletions
diff --git a/doc/python_api/examples/gpu.1.py b/doc/python_api/examples/gpu.1.py
index c8ae3b01ee3..831349e5430 100644
--- a/doc/python_api/examples/gpu.1.py
+++ b/doc/python_api/examples/gpu.1.py
@@ -4,7 +4,8 @@ Geometry Batches
Geometry is drawn in batches.
A batch contains the necessary data to perform the drawing.
-That includes an obligatory *Vertex Buffer* and an optional *Index Buffer*, each of which is described in more detail in the following sections.
+That includes an obligatory *Vertex Buffer* and an optional *Index Buffer*,
+each of which is described in more detail in the following sections.
A batch also defines a draw type.
Typical draw types are `POINTS`, `LINES` and `TRIS`.
The draw type determines how the data will be interpreted and drawn.
@@ -12,25 +13,29 @@ The draw type determines how the data will be interpreted and drawn.
Vertex Buffers
++++++++++++++
-A *Vertex Buffer Object* (VBO) (:class:`gpu.types.GPUVertBuf`) is an array that contains the vertex attributes needed for drawing using a specific shader.
+A *Vertex Buffer Object* (VBO) (:class:`gpu.types.GPUVertBuf`)
+is an array that contains the vertex attributes needed for drawing using a specific shader.
Typical vertex attributes are *location*, *normal*, *color*, and *uv*.
-Every vertex buffer has a *Vertex Format* (:class:`gpu.types.GPUVertFormat`) and a length corresponding to the number of vertices in the buffer.
+Every vertex buffer has a *Vertex Format* (:class:`gpu.types.GPUVertFormat`)
+and a length corresponding to the number of vertices in the buffer.
A vertex format describes the attributes stored per vertex and their types.
The following code demonstrates the creation of a vertex buffer that contains 6 vertices.
-For each vertex 2 attributes will be stored: The position and the normal::
+For each vertex 2 attributes will be stored: The position and the normal.
- import gpu
- vertex_positions = [(0, 0, 0), ...]
- vertex_normals = [(0, 0, 1), ...]
+.. code-block:: python
- fmt = gpu.types.GPUVertFormat()
- fmt.attr_add(id="pos", comp_type='F32', len=3, fetch_mode='FLOAT')
- fmt.attr_add(id="normal", comp_type='F32', len=3, fetch_mode='FLOAT')
+ import gpu
+ vertex_positions = [(0, 0, 0), ...]
+ vertex_normals = [(0, 0, 1), ...]
- vbo = gpu.types.GPUVertBuf(len=6, format=fmt)
- vbo.attr_fill(id="pos", data=vertex_positions)
- vbo.attr_fill(id="normal", data=vertex_normals)
+ fmt = gpu.types.GPUVertFormat()
+ fmt.attr_add(id="pos", comp_type='F32', len=3, fetch_mode='FLOAT')
+ fmt.attr_add(id="normal", comp_type='F32', len=3, fetch_mode='FLOAT')
+
+ vbo = gpu.types.GPUVertBuf(len=6, format=fmt)
+ vbo.attr_fill(id="pos", data=vertex_positions)
+ vbo.attr_fill(id="normal", data=vertex_normals)
This vertex buffer could be used to draw 6 points, 3 separate lines, 5 consecutive lines, 2 separate triangles, ...
E.g. in the case of lines, each two consecutive vertices define a line.
@@ -42,19 +47,24 @@ Index Buffers
Often triangles and lines share one or more vertices.
With only a vertex buffer one would have to store all attributes for the these vertices multiple times.
This is very inefficient because in a connected triangle mesh every vertex is used 6 times on average.
-A more efficient approach would be to use an *Index Buffer* (IBO) (:class:`gpu.types.GPUIndexBuf`), sometimes referred to as *Element Buffer*.
+A more efficient approach would be to use an *Index Buffer* (IBO) (:class:`gpu.types.GPUIndexBuf`),
+sometimes referred to as *Element Buffer*.
An *Index Buffer* is an array that references vertices based on their index in the vertex buffer.
-For instance, to draw a rectangle composed of two triangles, one could use an index buffer::
- positions = (
- (-1, 1), (1, 1),
- (-1, -1), (1, -1))
+For instance, to draw a rectangle composed of two triangles, one could use an index buffer.
+
+.. code-block:: python
+
+ positions = (
+ (-1, 1), (1, 1),
+ (-1, -1), (1, -1))
- indices = ((0, 1, 2), (2, 1, 3))
+ indices = ((0, 1, 2), (2, 1, 3))
- ibo = gpu.types.GPUIndexBuf(type='TRIS', seq=indices)
+ ibo = gpu.types.GPUIndexBuf(type='TRIS', seq=indices)
-Here the first tuple in `indices` describes which vertices should be used for the first triangle (same for the second tuple).
+Here the first tuple in `indices` describes which vertices should be used for the first triangle
+(same for the second tuple).
Note how the diagonal vertices 1 and 2 are shared between both triangles.
Shaders
@@ -66,7 +76,8 @@ The most important ones are *Vertex Shaders* and *Fragment Shaders*.
Typically multiple shaders are linked together into a *Program*.
However, in the Blender Python API the term *Shader* refers to an OpenGL Program.
Every :class:`gpu.types.GPUShader` consists of a vertex shader, a fragment shader and an optional geometry shader.
-For common drawing tasks there are some built-in shaders accessible from :class:`gpu.shader.from_builtin` with an identifier such as `2D_UNIFORM_COLOR` or `3D_FLAT_COLOR`.
+For common drawing tasks there are some built-in shaders accessible from :class:`gpu.shader.from_builtin`
+with an identifier such as `2D_UNIFORM_COLOR` or `3D_FLAT_COLOR`.
Every shader defines a set of attributes and uniforms that have to be set in order to use the shader.
Attributes are properties that are set using a vertex buffer and can be different for individual vertices.
@@ -89,14 +100,18 @@ Offscreen Rendering
+++++++++++++++++++
What one can see on the screen after rendering is called the *Front Buffer*.
-When draw calls are issued, batches are drawn on a *Back Buffer* that will only be displayed when all drawing is done and the current back buffer will become the new front buffer.
-Sometimes, one might want to draw the batches into a distinct buffer that could be used as texture to display on another object or to be saved as image on disk.
+When draw calls are issued, batches are drawn on a *Back Buffer* that will only be displayed
+when all drawing is done and the current back buffer will become the new front buffer.
+Sometimes, one might want to draw the batches into a distinct buffer that could be used as
+texture to display on another object or to be saved as image on disk.
This is called Offscreen Rendering.
In Blender Offscreen Rendering is done using the :class:`gpu.types.GPUOffScreen` type.
.. warning::
- `GPUOffScreen` objects are bound to the OpenGL context they have been created in.
- This means that once Blender discards this context (i.e. the window is closed), the offscreen instance will be freed.
+
+ `GPUOffScreen` objects are bound to the OpenGL context they have been created in.
+ This means that once Blender discards this context (i.e. the window is closed),
+ the offscreen instance will be freed.
Examples
++++++++
@@ -104,4 +119,4 @@ Examples
To try these examples, just copy them into Blenders text editor and execute them.
To keep the examples relatively small, they just register a draw function that can't easily be removed anymore.
Blender has to be restarted in order to delete the draw handlers.
-""" \ No newline at end of file
+"""
diff --git a/doc/python_api/examples/gpu.10.py b/doc/python_api/examples/gpu.10.py
index aa5574c44bb..6e7a3f6db6f 100644
--- a/doc/python_api/examples/gpu.10.py
+++ b/doc/python_api/examples/gpu.10.py
@@ -3,7 +3,8 @@ Rendering the 3D View into a Texture
------------------------------------
The scene has to have a camera for this example to work.
-You could also make this independent of a specific camera, but Blender does not expose good functions to create view and projection matrices yet.
+You could also make this independent of a specific camera,
+but Blender does not expose good functions to create view and projection matrices yet.
"""
import bpy
import bgl
@@ -15,6 +16,7 @@ HEIGHT = 256
offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT)
+
def draw():
context = bpy.context
scene = context.scene
@@ -35,4 +37,5 @@ def draw():
bgl.glDisable(bgl.GL_DEPTH_TEST)
draw_texture_2d(offscreen.color_texture, (10, 10), WIDTH, HEIGHT)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
diff --git a/doc/python_api/examples/gpu.11.py b/doc/python_api/examples/gpu.11.py
index 61e7a842a59..2f255b7127d 100644
--- a/doc/python_api/examples/gpu.11.py
+++ b/doc/python_api/examples/gpu.11.py
@@ -3,8 +3,9 @@ Custom Shader for dotted 3D Line
--------------------------------
In this example the arc length (distance to the first point on the line) is calculated in every vertex.
-Between the vertex and fragment shader that value is automatically interpolated for all points that will be visible on the screen.
-In the fragment shader the `sin` of the arc length is calculated.
+Between the vertex and fragment shader that value is automatically interpolated
+for all points that will be visible on the screen.
+In the fragment shader the ``sin`` of the arc length is calculated.
Based on the result a decision is made on whether the fragment should be drawn or not.
"""
import bpy
@@ -47,9 +48,11 @@ for a, b in zip(coords[:-1], coords[1:]):
arc_lengths.append(arc_lengths[-1] + (a - b).length)
shader = gpu.types.GPUShader(vertex_shader, fragment_shader)
-batch = batch_for_shader(shader, 'LINE_STRIP',
- {"position" : coords,
- "arcLength" : arc_lengths})
+batch = batch_for_shader(
+ shader, 'LINE_STRIP',
+ {"position": coords, "arcLength": arc_lengths},
+)
+
def draw():
shader.bind()
@@ -58,4 +61,5 @@ def draw():
shader.uniform_float("u_Scale", 10)
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
diff --git a/doc/python_api/examples/gpu.2.py b/doc/python_api/examples/gpu.2.py
index 8188110d096..d1e8ac32589 100644
--- a/doc/python_api/examples/gpu.2.py
+++ b/doc/python_api/examples/gpu.2.py
@@ -8,12 +8,13 @@ from gpu_extras.batch import batch_for_shader
coords = [(1, 1, 1), (-2, 0, 0), (-2, -1, 3), (0, 1, 1)]
shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR')
-batch = batch_for_shader(shader, 'LINES', {"pos" : coords})
+batch = batch_for_shader(shader, 'LINES', {"pos": coords})
+
def draw():
shader.bind()
shader.uniform_float("color", (1, 1, 0, 1))
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
diff --git a/doc/python_api/examples/gpu.3.py b/doc/python_api/examples/gpu.3.py
index 30f340c30ff..4bee9acebe3 100644
--- a/doc/python_api/examples/gpu.3.py
+++ b/doc/python_api/examples/gpu.3.py
@@ -32,7 +32,8 @@ fragment_shader = '''
coords = [(1, 1, 1), (2, 0, 0), (-2, -1, 3)]
shader = gpu.types.GPUShader(vertex_shader, fragment_shader)
-batch = batch_for_shader(shader, 'TRIS', {"position" : coords})
+batch = batch_for_shader(shader, 'TRIS', {"position": coords})
+
def draw():
shader.bind()
@@ -41,4 +42,5 @@ def draw():
shader.uniform_float("brightness", 0.5)
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
diff --git a/doc/python_api/examples/gpu.4.py b/doc/python_api/examples/gpu.4.py
index 392f010e7c2..0c86b52bcf5 100644
--- a/doc/python_api/examples/gpu.4.py
+++ b/doc/python_api/examples/gpu.4.py
@@ -7,10 +7,10 @@ import gpu
from gpu_extras.batch import batch_for_shader
coords = (
- (-1, -1, -1), ( 1, -1, -1),
- (-1, 1, -1), ( 1, 1, -1),
- (-1, -1, 1), ( 1, -1, 1),
- (-1, 1, 1), ( 1, 1, 1))
+ (-1, -1, -1), (+1, -1, -1),
+ (-1, +1, -1), (+1, +1, -1),
+ (-1, -1, +1), (+1, -1, +1),
+ (-1, +1, +1), (+1, +1, +1))
indices = (
(0, 1), (0, 2), (1, 3), (2, 3),
@@ -18,11 +18,13 @@ indices = (
(0, 4), (1, 5), (2, 6), (3, 7))
shader = gpu.shader.from_builtin('3D_UNIFORM_COLOR')
-batch = batch_for_shader(shader, 'LINES', {"pos" : coords}, indices=indices)
+batch = batch_for_shader(shader, 'LINES', {"pos": coords}, indices=indices)
+
def draw():
shader.bind()
shader.uniform_float("color", (1, 0, 0, 1))
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
diff --git a/doc/python_api/examples/gpu.5.py b/doc/python_api/examples/gpu.5.py
index 7af3a518457..855f9a28e44 100644
--- a/doc/python_api/examples/gpu.5.py
+++ b/doc/python_api/examples/gpu.5.py
@@ -14,20 +14,23 @@ mesh.calc_loop_triangles()
vertices = np.empty((len(mesh.vertices), 3), 'f')
indices = np.empty((len(mesh.loop_triangles), 3), 'i')
-mesh.vertices.foreach_get("co",
- np.reshape(vertices, len(mesh.vertices) * 3))
-mesh.loop_triangles.foreach_get("vertices",
- np.reshape(indices, len(mesh.loop_triangles) * 3))
+mesh.vertices.foreach_get(
+ "co", np.reshape(vertices, len(mesh.vertices) * 3))
+mesh.loop_triangles.foreach_get(
+ "vertices", np.reshape(indices, len(mesh.loop_triangles) * 3))
vertex_colors = [(random(), random(), random(), 1) for _ in range(len(mesh.vertices))]
shader = gpu.shader.from_builtin('3D_SMOOTH_COLOR')
-batch = batch_for_shader(shader, 'TRIS',
- {"pos" : vertices,
- "color" : vertex_colors},
- indices=indices)
+batch = batch_for_shader(
+ shader, 'TRIS',
+ {"pos": vertices, "color": vertex_colors},
+ indices=indices,
+)
+
def draw():
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
diff --git a/doc/python_api/examples/gpu.6.py b/doc/python_api/examples/gpu.6.py
index df28d801960..2edde46a364 100644
--- a/doc/python_api/examples/gpu.6.py
+++ b/doc/python_api/examples/gpu.6.py
@@ -14,11 +14,13 @@ indices = (
(0, 1, 2), (2, 1, 3))
shader = gpu.shader.from_builtin('2D_UNIFORM_COLOR')
-batch = batch_for_shader(shader, 'TRIS', {"pos" : vertices}, indices=indices)
+batch = batch_for_shader(shader, 'TRIS', {"pos": vertices}, indices=indices)
+
def draw():
shader.bind()
shader.uniform_float("color", (0, 0.5, 0.5, 1.0))
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
diff --git a/doc/python_api/examples/gpu.7.py b/doc/python_api/examples/gpu.7.py
index 486ed5fd411..69af65e163e 100644
--- a/doc/python_api/examples/gpu.7.py
+++ b/doc/python_api/examples/gpu.7.py
@@ -13,13 +13,18 @@ IMAGE_NAME = "Untitled"
image = bpy.data.images[IMAGE_NAME]
shader = gpu.shader.from_builtin('2D_IMAGE')
-batch = batch_for_shader(shader, 'TRI_FAN',
- {"pos" : ((100, 100), (200, 100), (200, 200), (100, 200)),
- "texCoord" : ((0, 0), (1, 0), (1, 1), (0, 1))})
+batch = batch_for_shader(
+ shader, 'TRI_FAN',
+ {
+ "pos": ((100, 100), (200, 100), (200, 200), (100, 200)),
+ "texCoord": ((0, 0), (1, 0), (1, 1), (0, 1)),
+ },
+)
if image.gl_load():
raise Exception()
+
def draw():
bgl.glActiveTexture(bgl.GL_TEXTURE0)
bgl.glBindTexture(bgl.GL_TEXTURE_2D, image.bindcode)
@@ -28,4 +33,5 @@ def draw():
shader.uniform_int("image", 0)
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_PIXEL')
diff --git a/doc/python_api/examples/gpu.8.py b/doc/python_api/examples/gpu.8.py
index 7e41164fc7e..56cbb93c61a 100644
--- a/doc/python_api/examples/gpu.8.py
+++ b/doc/python_api/examples/gpu.8.py
@@ -2,10 +2,10 @@
Generate a texture using Offscreen Rendering
--------------------------------------------
-1. Create an :class:`gpu.types.GPUOffScreen` object.
-2. Draw some circles into it.
-3. Make a new shader for drawing a planar texture in 3D.
-4. Draw the generated texture using the new shader.
+#. Create an :class:`gpu.types.GPUOffScreen` object.
+#. Draw some circles into it.
+#. Make a new shader for drawing a planar texture in 3D.
+#. Draw the generated texture using the new shader.
"""
import bpy
import gpu
@@ -19,8 +19,7 @@ from gpu_extras.presets import draw_circle_2d
offscreen = gpu.types.GPUOffScreen(512, 512)
-offscreen.bind()
-try:
+with offscreen.bind():
bgl.glClear(bgl.GL_COLOR_BUFFER_BIT)
with gpu.matrix.push_pop():
# reset matrices -> use normalized device coordinates [-1, 1]
@@ -31,8 +30,6 @@ try:
for i in range(-amount, amount + 1):
x_pos = i / amount
draw_circle_2d((x_pos, 0.0), (1, 1, 1, 1), 0.5, 200)
-finally:
- offscreen.unbind()
# Drawing the generated texture in 3D space
@@ -66,9 +63,13 @@ fragment_shader = '''
'''
shader = gpu.types.GPUShader(vertex_shader, fragment_shader)
-batch = batch_for_shader(shader, 'TRI_FAN',
- {"position" : ((-1, -1), (1, -1), (1, 1), (-1, 1)),
- "uv" : ((0, 0), (1, 0), (1, 1), (0, 1))})
+batch = batch_for_shader(
+ shader, 'TRI_FAN',
+ {
+ "position": ((-1, -1), (1, -1), (1, 1), (-1, 1)),
+ "uv": ((0, 0), (1, 0), (1, 1), (0, 1)),
+ },
+)
def draw():
@@ -81,4 +82,5 @@ def draw():
shader.uniform_float("image", 0)
batch.draw(shader)
-bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW') \ No newline at end of file
+
+bpy.types.SpaceView3D.draw_handler_add(draw, (), 'WINDOW', 'POST_VIEW')
diff --git a/doc/python_api/examples/gpu.9.py b/doc/python_api/examples/gpu.9.py
index a281534765a..470bd8a2dad 100644
--- a/doc/python_api/examples/gpu.9.py
+++ b/doc/python_api/examples/gpu.9.py
@@ -6,7 +6,8 @@ This will create a new image with the given name.
If it already exists, it will override the existing one.
Currently almost all of the execution time is spent in the last line.
-In the future this will hopefully be solved by implementing the Python buffer protocol for `bgl.Buffer` and `Image.pixels` (aka `bpy_prop_array`).
+In the future this will hopefully be solved by implementing the Python buffer protocol
+for :class:`bgl.Buffer` and :class:`bpy.types.Image.pixels` (aka ``bpy_prop_array``).
"""
import bpy
import gpu
@@ -23,8 +24,7 @@ RING_AMOUNT = 10
offscreen = gpu.types.GPUOffScreen(WIDTH, HEIGHT)
-offscreen.bind()
-try:
+with offscreen.bind():
bgl.glClear(bgl.GL_COLOR_BUFFER_BIT)
with gpu.matrix.push_pop():
# reset matrices -> use normalized device coordinates [-1, 1]
@@ -36,17 +36,15 @@ try:
(random.uniform(-1, 1), random.uniform(-1, 1)),
(1, 1, 1, 1), random.uniform(0.1, 1), 20)
-
buffer = bgl.Buffer(bgl.GL_BYTE, WIDTH * HEIGHT * 4)
bgl.glReadBuffer(bgl.GL_BACK)
bgl.glReadPixels(0, 0, WIDTH, HEIGHT, bgl.GL_RGBA, bgl.GL_UNSIGNED_BYTE, buffer)
-finally:
- offscreen.unbind()
- offscreen.free()
+
+offscreen.free()
if not IMAGE_NAME in bpy.data.images:
bpy.data.images.new(IMAGE_NAME, WIDTH, HEIGHT)
image = bpy.data.images[IMAGE_NAME]
image.scale(WIDTH, HEIGHT)
-image.pixels = [v / 255 for v in buffer] \ No newline at end of file
+image.pixels = [v / 255 for v in buffer]
diff --git a/doc/python_api/examples/gpu.shader.py b/doc/python_api/examples/gpu.shader.py
index 7ffd3fe85c8..3c72e70378c 100644
--- a/doc/python_api/examples/gpu.shader.py
+++ b/doc/python_api/examples/gpu.shader.py
@@ -4,32 +4,33 @@ Built-in shaders
All built-in shaders have the ``mat4 ModelViewProjectionMatrix`` uniform.
The value of it can only be modified using the :class:`gpu.matrix` module.
-"""
2D_UNIFORM_COLOR:
- attributes: vec3 pos
- uniforms: vec4 color
+ attributes: vec3 pos
+ uniforms: vec4 color
2D_FLAT_COLOR:
- attributes: vec3 pos, vec4 color
- uniforms: -
+ attributes: vec3 pos, vec4 color
+ uniforms: -
2D_SMOOTH_COLOR:
- attributes: vec3 pos, vec4 color
- uniforms: -
+ attributes: vec3 pos, vec4 color
+ uniforms: -
2D_IMAGE:
- attributes: vec3 pos, vec2 texCoord
- uniforms: sampler2D image
+ attributes: vec3 pos, vec2 texCoord
+ uniforms: sampler2D image
3D_UNIFORM_COLOR:
- attributes: vec3 pos
- uniforms: vec4 color
+ attributes: vec3 pos
+ uniforms: vec4 color
3D_FLAT_COLOR:
- attributes: vec3 pos, vec4 color
- uniforms: -
+ attributes: vec3 pos, vec4 color
+ uniforms: -
3D_SMOOTH_COLOR:
- attributes: vec3 pos, vec4 color
- uniforms: -
+ attributes: vec3 pos, vec4 color
+ uniforms: -
+
+"""
diff --git a/doc/python_api/sphinx_doc_gen.py b/doc/python_api/sphinx_doc_gen.py
index ae6e53491fd..299eebfe295 100644
--- a/doc/python_api/sphinx_doc_gen.py
+++ b/doc/python_api/sphinx_doc_gen.py
@@ -340,11 +340,11 @@ RST_DIR = os.path.abspath(os.path.join(SCRIPT_DIR, "rst"))
# stored in ./rst/info_*
INFO_DOCS = (
("info_quickstart.rst",
- "Blender/Python Quickstart: new to Blender/scripting and want to get your feet wet?"),
+ "Quickstart: new to Blender or scripting and want to get your feet wet?"),
("info_overview.rst",
- "Blender/Python API Overview: a more complete explanation of Python integration"),
+ "API Overview: a more complete explanation of Python integration"),
("info_api_reference.rst",
- "Blender/Python API Reference Usage: examples of how to use the API reference docs"),
+ "API Reference Usage: examples of how to use the API reference docs"),
("info_best_practice.rst",
"Best Practice: Conventions to follow for writing good scripts"),
("info_tips_and_tricks.rst",
@@ -1620,6 +1620,7 @@ def write_sphinx_conf_py(basepath):
fw(" 'include__bmesh.rst',\n")
fw("]\n\n")
+ fw("html_title = 'Blender %s Python API'\n" % BLENDER_VERSION_DOTS)
fw("html_theme = 'sphinx_rtd_theme'\n")
# not helpful since the source is generated, adds to upload size.
fw("html_copy_source = False\n")
@@ -1671,21 +1672,21 @@ def write_rst_contents(basepath):
file = open(filepath, "w", encoding="utf-8")
fw = file.write
- fw(title_string("Blender Documentation Contents", "%", double=True))
+ fw(title_string("Blender Python API Documentation", "%", double=True))
fw("\n")
- fw("Welcome, this document is an API reference for Blender %s, built %s.\n" %
+ fw("Welcome to the API reference for Blender %s, built %s.\n" %
(BLENDER_VERSION_DOTS, BLENDER_DATE))
fw("\n")
# fw("`A PDF version of this document is also available <%s>`_\n" % BLENDER_PDF_FILENAME)
- fw("This site can be downloaded for offline use `Download the full Documentation (zipped HTML files) <%s>`_\n" %
+ fw("This site can be downloaded for offline use: `Download the full Documentation (zipped HTML files) <%s>`_\n" %
BLENDER_ZIP_FILENAME)
fw("\n")
if not EXCLUDE_INFO_DOCS:
fw(".. toctree::\n")
fw(" :maxdepth: 1\n")
- fw(" :caption: Blender/Python Documentation\n\n")
+ fw(" :caption: Documentation\n\n")
for info, info_desc in INFO_DOCS:
fw(" %s <%s>\n" % (info_desc, info))
fw("\n")
diff --git a/intern/cycles/kernel/geom/geom_triangle_intersect.h b/intern/cycles/kernel/geom/geom_triangle_intersect.h
index 6b4fbcbbb7c..57f4c86d403 100644
--- a/intern/cycles/kernel/geom/geom_triangle_intersect.h
+++ b/intern/cycles/kernel/geom/geom_triangle_intersect.h
@@ -71,28 +71,23 @@ ccl_device_inline bool triangle_intersect(KernelGlobals *kg,
}
#ifdef __KERNEL_AVX2__
-
#define cross256(A,B, C,D) _mm256_fmsub_ps(A,B, _mm256_mul_ps(C,D))
-#if defined(__KERNEL_CUDA__) && __CUDA_ARCH__ < 300
-ccl_device_inline
-#else
-ccl_device_forceinline
-#endif
-int ray_triangle_intersect8(KernelGlobals *kg,
- float3 ray_P,
- float3 ray_dir,
- Intersection **isect,
- uint visibility,
- int object,
- __m256 *triA,
- __m256 *triB,
- __m256 *triC,
- int prim_addr,
- int prim_num,
- uint *num_hits,
- uint max_hits,
- int *num_hits_in_instance,
- float isec_t)
+ccl_device_inline int ray_triangle_intersect8(
+ KernelGlobals *kg,
+ float3 ray_P,
+ float3 ray_dir,
+ Intersection **isect,
+ uint visibility,
+ int object,
+ __m256 *triA,
+ __m256 *triB,
+ __m256 *triC,
+ int prim_addr,
+ int prim_num,
+ uint *num_hits,
+ uint max_hits,
+ int *num_hits_in_instance,
+ float isect_t)
{
const unsigned char prim_num_mask = (1 << prim_num) - 1;
@@ -108,10 +103,6 @@ int ray_triangle_intersect8(KernelGlobals *kg,
const __m256 dirz256 = _mm256_set1_ps(ray_dir.z);
/* Calculate vertices relative to ray origin. */
- /* const float3 v0 = tri_c - P;
- const float3 v1 = tri_a - P;
- const float3 v2 = tri_b - P; */
-
__m256 v0_x_256 = _mm256_sub_ps(triC[0], Px256);
__m256 v0_y_256 = _mm256_sub_ps(triC[1], Py256);
__m256 v0_z_256 = _mm256_sub_ps(triC[2], Pz256);
@@ -136,11 +127,7 @@ int ray_triangle_intersect8(KernelGlobals *kg,
__m256 v1_v2_y_256 = _mm256_add_ps(v1_y_256, v2_y_256);
__m256 v1_v2_z_256 = _mm256_add_ps(v1_z_256, v2_z_256);
- /* Calculate triangle edges.
- const float3 e0 = v2 - v0;
- const float3 e1 = v0 - v1;
- const float3 e2 = v1 - v2;*/
-
+ /* Calculate triangle edges. */
__m256 e0_x_256 = _mm256_sub_ps(v2_x_256, v0_x_256);
__m256 e0_y_256 = _mm256_sub_ps(v2_y_256, v0_y_256);
__m256 e0_z_256 = _mm256_sub_ps(v2_z_256, v0_z_256);
@@ -153,48 +140,32 @@ int ray_triangle_intersect8(KernelGlobals *kg,
__m256 e2_y_256 = _mm256_sub_ps(v1_y_256, v2_y_256);
__m256 e2_z_256 = _mm256_sub_ps(v1_z_256, v2_z_256);
- /* Perform edge tests.
- const float U = dot(cross(v2 + v0, e0), ray_dir);
- const float V = dot(cross(v0 + v1, e1), ray_dir);
- const float W = dot(cross(v1 + v2, e2), ray_dir);*/
-
- //cross (AyBz - AzBy, AzBx -AxBz, AxBy - AyBx)
+ /* Perform edge tests. */
+ /* cross (AyBz - AzBy, AzBx -AxBz, AxBy - AyBx) */
__m256 U_x_256 = cross256(v0_v2_y_256, e0_z_256, v0_v2_z_256, e0_y_256);
__m256 U_y_256 = cross256(v0_v2_z_256, e0_x_256, v0_v2_x_256, e0_z_256);
__m256 U_z_256 = cross256(v0_v2_x_256, e0_y_256, v0_v2_y_256, e0_x_256);
- //vertical dot
+ /* vertical dot */
__m256 U_256 = _mm256_mul_ps(U_x_256, dirx256);
- U_256 = _mm256_fmadd_ps(U_y_256, diry256, U_256); //_mm256_add_ps(U_256, _mm256_mul_ps(U_y_256, diry256));
- U_256 = _mm256_fmadd_ps(U_z_256, dirz256, U_256); //_mm256_add_ps(U_256, _mm256_mul_ps(U_z_256, dirz256));
+ U_256 = _mm256_fmadd_ps(U_y_256, diry256, U_256);
+ U_256 = _mm256_fmadd_ps(U_z_256, dirz256, U_256);
__m256 V_x_256 = cross256(v0_v1_y_256, e1_z_256, v0_v1_z_256, e1_y_256);
__m256 V_y_256 = cross256(v0_v1_z_256, e1_x_256, v0_v1_x_256, e1_z_256);
__m256 V_z_256 = cross256(v0_v1_x_256, e1_y_256, v0_v1_y_256, e1_x_256);
- //vertical dot
+ /* vertical dot */
__m256 V_256 = _mm256_mul_ps(V_x_256, dirx256);
- V_256 = _mm256_fmadd_ps(V_y_256, diry256, V_256);// _mm256_add_ps(V_256, _mm256_mul_ps(V_y_256, diry256));
- V_256 = _mm256_fmadd_ps(V_z_256, dirz256, V_256);// _mm256_add_ps(V_256, _mm256_mul_ps(V_z_256, dirz256));
+ V_256 = _mm256_fmadd_ps(V_y_256, diry256, V_256);
+ V_256 = _mm256_fmadd_ps(V_z_256, dirz256, V_256);
__m256 W_x_256 = cross256(v1_v2_y_256, e2_z_256, v1_v2_z_256, e2_y_256);
__m256 W_y_256 = cross256(v1_v2_z_256, e2_x_256, v1_v2_x_256, e2_z_256);
__m256 W_z_256 = cross256(v1_v2_x_256, e2_y_256, v1_v2_y_256, e2_x_256);
- //vertical dot
+ /* vertical dot */
__m256 W_256 = _mm256_mul_ps(W_x_256, dirx256);
- W_256 = _mm256_fmadd_ps(W_y_256, diry256,W_256);//_mm256_add_ps(W_256, _mm256_mul_ps(W_y_256, diry256));
- W_256 = _mm256_fmadd_ps(W_z_256, dirz256,W_256);//_mm256_add_ps(W_256, _mm256_mul_ps(W_z_256, dirz256));
-
- //const float minUVW = min(U, min(V, W));
- //const float maxUVW = max(U, max(V, W));
-#if 0
- __m256 minUVW_256 = _mm256_min_ps(U_256, _mm256_min_ps(V_256, W_256));
- __m256 maxUVW_256 = _mm256_max_ps(U_256, _mm256_max_ps(V_256, W_256));
-
- //if(minUVW < 0.0f && maxUVW > 0.0f)
- __m256i mask_minmaxUVW_256 = _mm256_and_si256(
- _mm256_cmpgt_epi32(zero256, _mm256_castps_si256(minUVW_256)),
- //_mm256_castps_si256(minUVW_256),
- _mm256_cmpgt_epi32(_mm256_castps_si256(maxUVW_256), zero256));
-#else
+ W_256 = _mm256_fmadd_ps(W_y_256, diry256,W_256);
+ W_256 = _mm256_fmadd_ps(W_z_256, dirz256,W_256);
+
__m256i U_256_1 = _mm256_srli_epi32(_mm256_castps_si256(U_256), 31);
__m256i V_256_1 = _mm256_srli_epi32(_mm256_castps_si256(V_256), 31);
__m256i W_256_1 = _mm256_srli_epi32(_mm256_castps_si256(W_256), 31);
@@ -204,9 +175,8 @@ int ray_triangle_intersect8(KernelGlobals *kg,
const __m256i two256 = _mm256_set1_epi32(2);
__m256i mask_minmaxUVW_256 = _mm256_or_si256(
- _mm256_cmpeq_epi32(one256, UVW_256_1),
- _mm256_cmpeq_epi32(two256, UVW_256_1) );
-#endif
+ _mm256_cmpeq_epi32(one256, UVW_256_1),
+ _mm256_cmpeq_epi32(two256, UVW_256_1));
unsigned char mask_minmaxUVW_pos = _mm256_movemask_ps(_mm256_castsi256_ps(mask_minmaxUVW_256));
if((mask_minmaxUVW_pos & prim_num_mask) == prim_num_mask) { //all bits set
@@ -214,231 +184,187 @@ int ray_triangle_intersect8(KernelGlobals *kg,
}
/* Calculate geometry normal and denominator. */
- // const float3 Ng1 = cross(e1, e0);
- //const Vec3vfM Ng1 = stable_triangle_normal(e2,e1,e0);
-
__m256 Ng1_x_256 = cross256(e1_y_256, e0_z_256, e1_z_256, e0_y_256);
__m256 Ng1_y_256 = cross256(e1_z_256, e0_x_256, e1_x_256, e0_z_256);
__m256 Ng1_z_256 = cross256(e1_x_256, e0_y_256, e1_y_256, e0_x_256);
- //const float3 Ng = Ng1 + Ng1;
Ng1_x_256 = _mm256_add_ps(Ng1_x_256, Ng1_x_256);
Ng1_y_256 = _mm256_add_ps(Ng1_y_256, Ng1_y_256);
Ng1_z_256 = _mm256_add_ps(Ng1_z_256, Ng1_z_256);
- //const float den = dot3(Ng, dir);
- //vertical dot
+ /* vertical dot */
__m256 den_256 = _mm256_mul_ps(Ng1_x_256, dirx256);
- den_256 = _mm256_fmadd_ps(Ng1_y_256, diry256,den_256);//_mm256_add_ps(den_256, _mm256_mul_ps(Ng1_y_256, diry256));
- den_256 = _mm256_fmadd_ps(Ng1_z_256, dirz256,den_256);//_mm256_add_ps(den_256, _mm256_mul_ps(Ng1_z_256, dirz256));
-
- // __m256i maskden256 = _mm256_cmpeq_epi32(_mm256_castps_si256(den_256), zero256);
+ den_256 = _mm256_fmadd_ps(Ng1_y_256, diry256,den_256);
+ den_256 = _mm256_fmadd_ps(Ng1_z_256, dirz256,den_256);
/* Perform depth test. */
- //const float T = dot3(v0, Ng);
__m256 T_256 = _mm256_mul_ps(Ng1_x_256, v0_x_256);
- T_256 = _mm256_fmadd_ps(Ng1_y_256, v0_y_256,T_256);//_mm256_add_ps(T_256, _mm256_mul_ps(Ng1_y_256, v0_y_256));
- T_256 = _mm256_fmadd_ps(Ng1_z_256, v0_z_256,T_256);//_mm256_add_ps(T_256, _mm256_mul_ps(Ng1_z_256, v0_z_256));
+ T_256 = _mm256_fmadd_ps(Ng1_y_256, v0_y_256,T_256);
+ T_256 = _mm256_fmadd_ps(Ng1_z_256, v0_z_256,T_256);
- //const int sign_den = (__float_as_int(den) & 0x80000000);
const __m256i c0x80000000 = _mm256_set1_epi32(0x80000000);
__m256i sign_den_256 = _mm256_and_si256(_mm256_castps_si256(den_256), c0x80000000);
- //const float sign_T = xor_signmask(T, sign_den);
__m256 sign_T_256 = _mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(T_256), sign_den_256));
- /*if((sign_T < 0.0f) || mask_minmaxUVW_pos { return false;} */
unsigned char mask_sign_T = _mm256_movemask_ps(sign_T_256);
if(((mask_minmaxUVW_pos | mask_sign_T) & prim_num_mask) == prim_num_mask) {
return false;
- } /**/
+ }
__m256 xor_signmask_256 = _mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256));
-
ccl_align(32) float den8[8], U8[8], V8[8], T8[8], sign_T8[8], xor_signmask8[8];
ccl_align(32) unsigned int mask_minmaxUVW8[8];
- if(visibility == PATH_RAY_SHADOW_OPAQUE){
- __m256i mask_final_256 = _mm256_cmpeq_epi32(mask_minmaxUVW_256, zero256);//~mask_minmaxUVW_256
-
- __m256i maskden256 = _mm256_cmpeq_epi32(_mm256_castps_si256(den_256), zero256);
-
- __m256i mask0 = _mm256_cmpgt_epi32(zero256, _mm256_castps_si256(sign_T_256));
- __m256 rayt_256 = _mm256_set1_ps((*isect)->t);
-
- __m256i mask1 = _mm256_cmpgt_epi32(_mm256_castps_si256(sign_T_256),
- _mm256_castps_si256(
- _mm256_mul_ps(_mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)), rayt_256)
- )
- );
- /* __m256i mask1 = _mm256_castps_si256(_mm256_cmp_ps(sign_T_256,
- _mm256_mul_ps(_mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)), rayt_256),
- _CMP_GT_OS
- ) );*/
-
- mask0 = _mm256_or_si256(mask1, mask0);
- //unsigned char mask = _mm256_movemask_ps(_mm256_castsi256_ps(mask0));
- //unsigned char maskden = _mm256_movemask_ps(_mm256_castsi256_ps(maskden256));
- //unsigned char mask_final = ((~mask) & (~maskden) & (~mask_minmaxUVW_pos));
- mask_final_256 = _mm256_andnot_si256(mask0, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask)
- mask_final_256 = _mm256_andnot_si256(maskden256, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask) & (~maskden)
-
- unsigned char mask_final = _mm256_movemask_ps(_mm256_castsi256_ps(mask_final_256));
- if((mask_final & prim_num_mask) == 0) { //all bits NOT set
- return false;
- } /**/
-
- unsigned long i = 0;
-#if defined(_MSC_VER)
- unsigned char res = _BitScanForward(&i, (unsigned long)mask_final);
-#else
- i = __builtin_ffs(mask_final)-1;
-#endif
-
- den_256 = _mm256_rcp_ps(den_256); //inv_den
- U_256 = _mm256_mul_ps(U_256, den_256); //*inv_den
- V_256 = _mm256_mul_ps(V_256, den_256); //*inv_den
- T_256 = _mm256_mul_ps(T_256, den_256); //*inv_den
-
- _mm256_store_ps(U8, U_256);
- _mm256_store_ps(V8, V_256);
- _mm256_store_ps(T8, T_256);
-
-
- //here we assume (kernel_tex_fetch(__prim_visibility, (prim_addr +i)) & visibility) is always true
-
- (*isect)->u = U8[i];
- (*isect)->v = V8[i];
- (*isect)->t = T8[i];
-
- (*isect)->prim = (prim_addr + i);
- (*isect)->object = object;
- (*isect)->type = PRIMITIVE_TRIANGLE;
-
- return true;
+ if(visibility == PATH_RAY_SHADOW_OPAQUE) {
+ __m256i mask_final_256 = _mm256_cmpeq_epi32(mask_minmaxUVW_256, zero256);
+ __m256i maskden256 = _mm256_cmpeq_epi32(_mm256_castps_si256(den_256), zero256);
+ __m256i mask0 = _mm256_cmpgt_epi32(zero256, _mm256_castps_si256(sign_T_256));
+ __m256 rayt_256 = _mm256_set1_ps((*isect)->t);
+ __m256i mask1 = _mm256_cmpgt_epi32(_mm256_castps_si256(sign_T_256),
+ _mm256_castps_si256(
+ _mm256_mul_ps(_mm256_castsi256_ps(_mm256_xor_si256(_mm256_castps_si256(den_256), sign_den_256)), rayt_256)
+ )
+ );
+ mask0 = _mm256_or_si256(mask1, mask0);
+ mask_final_256 = _mm256_andnot_si256(mask0, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask)
+ mask_final_256 = _mm256_andnot_si256(maskden256, mask_final_256); //(~mask_minmaxUVW_pos) &(~mask) & (~maskden)
+ unsigned char mask_final = _mm256_movemask_ps(_mm256_castsi256_ps(mask_final_256));
+ if((mask_final & prim_num_mask) == 0) {
+ return false;
}
+ const int i = __bsf(mask_final);
+ __m256 inv_den_256 = _mm256_rcp_ps(den_256);
+ U_256 = _mm256_mul_ps(U_256, inv_den_256);
+ V_256 = _mm256_mul_ps(V_256, inv_den_256);
+ T_256 = _mm256_mul_ps(T_256, inv_den_256);
+ _mm256_store_ps(U8, U_256);
+ _mm256_store_ps(V8, V_256);
+ _mm256_store_ps(T8, T_256);
+ /* NOTE: Here we assume visibility for all triangles in the node is
+ * the same. */
+ (*isect)->u = U8[i];
+ (*isect)->v = V8[i];
+ (*isect)->t = T8[i];
+ (*isect)->prim = (prim_addr + i);
+ (*isect)->object = object;
+ (*isect)->type = PRIMITIVE_TRIANGLE;
+ return true;
+ }
else {
- _mm256_store_ps(den8, den_256);
- _mm256_store_ps(U8, U_256);
- _mm256_store_ps(V8, V_256);
- _mm256_store_ps(T8, T_256);
+ _mm256_store_ps(den8, den_256);
+ _mm256_store_ps(U8, U_256);
+ _mm256_store_ps(V8, V_256);
+ _mm256_store_ps(T8, T_256);
- _mm256_store_ps(sign_T8, sign_T_256);
- _mm256_store_ps(xor_signmask8, xor_signmask_256);
- _mm256_store_si256((__m256i*)mask_minmaxUVW8, mask_minmaxUVW_256);
+ _mm256_store_ps(sign_T8, sign_T_256);
+ _mm256_store_ps(xor_signmask8, xor_signmask_256);
+ _mm256_store_si256((__m256i*)mask_minmaxUVW8, mask_minmaxUVW_256);
- int ret = false;
+ int ret = false;
- if(visibility == PATH_RAY_SHADOW) {
- for(int i = 0; i < prim_num; i++) {
- if(!mask_minmaxUVW8[i]) {
+ if(visibility == PATH_RAY_SHADOW) {
+ for(int i = 0; i < prim_num; i++) {
+ if(mask_minmaxUVW8[i]) {
+ continue;
+ }
#ifdef __VISIBILITY_FLAG__
- if(kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility)
+ if((kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility) == 0) {
+ continue;
+ }
#endif
- {
- if((sign_T8[i] >= 0.0f) &&
- (sign_T8[i] <= (*isect)->t * xor_signmask8[i]))
- {
- if(den8[i]) {
- const float inv_den = 1.0f / den8[i];
-
- (*isect)->u = U8[i] * inv_den;
- (*isect)->v = V8[i] * inv_den;
- (*isect)->t = T8[i] * inv_den;
-
- (*isect)->prim = (prim_addr + i);
- (*isect)->object = object;
- (*isect)->type = PRIMITIVE_TRIANGLE;
-
- int prim = kernel_tex_fetch(__prim_index, (*isect)->prim);
- int shader = 0;
-
+ if((sign_T8[i] < 0.0f) ||
+ (sign_T8[i] > (*isect)->t * xor_signmask8[i]))
+ {
+ continue;
+ }
+ if(!den8[i]) {
+ continue;
+ }
+ const float inv_den = 1.0f / den8[i];
+ (*isect)->u = U8[i] * inv_den;
+ (*isect)->v = V8[i] * inv_den;
+ (*isect)->t = T8[i] * inv_den;
+ (*isect)->prim = (prim_addr + i);
+ (*isect)->object = object;
+ (*isect)->type = PRIMITIVE_TRIANGLE;
+ const int prim = kernel_tex_fetch(__prim_index, (*isect)->prim);
+ int shader = 0;
#ifdef __HAIR__
- if(kernel_tex_fetch(__prim_type, (*isect)->prim) & PRIMITIVE_ALL_TRIANGLE)
+ if(kernel_tex_fetch(__prim_type, (*isect)->prim) & PRIMITIVE_ALL_TRIANGLE)
#endif
- {
- shader = kernel_tex_fetch(__tri_shader, prim);
- }
+ {
+ shader = kernel_tex_fetch(__tri_shader, prim);
+ }
#ifdef __HAIR__
- else {
- float4 str = kernel_tex_fetch(__curves, prim);
- shader = __float_as_int(str.z);
- }
+ else {
+ float4 str = kernel_tex_fetch(__curves, prim);
+ shader = __float_as_int(str.z);
+ }
#endif
- int flag = kernel_tex_fetch(__shaders, (shader & SHADER_MASK)).flags;
-
- /* if no transparent shadows, all light is blocked */
- if(!(flag & SD_HAS_TRANSPARENT_SHADOW)) {
- return 2;
- }
- /* if maximum number of hits reached, block all light */
- else if(*num_hits == max_hits) {
- return 2;
- }
- /* move on to next entry in intersections array */
- ret = true;
-
- (*isect)++;
- (*num_hits)++;
-
- (*num_hits_in_instance)++;
-
- (*isect)->t = isec_t;
-
- } //den
- } //if sign
- } //vis
- }//if mask
- } //for
+ const int flag = kernel_tex_fetch(__shaders, (shader & SHADER_MASK)).flags;
+ /* If no transparent shadows, all light is blocked. */
+ if(!(flag & SD_HAS_TRANSPARENT_SHADOW)) {
+ return 2;
+ }
+ /* If maximum number of hits reached, block all light. */
+ else if(num_hits == NULL || *num_hits == max_hits) {
+ return 2;
+ }
+ /* Move on to next entry in intersections array. */
+ ret = true;
+ (*isect)++;
+ (*num_hits)++;
+ (*num_hits_in_instance)++;
+ (*isect)->t = isect_t;
+ }
}
- else { //default case
+ else {
for(int i = 0; i < prim_num; i++) {
- if(!mask_minmaxUVW8[i]) {
+ if(mask_minmaxUVW8[i]) {
+ continue;
+ }
#ifdef __VISIBILITY_FLAG__
- if(kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility)
+ if((kernel_tex_fetch(__prim_visibility, (prim_addr + i)) & visibility) == 0) {
+ continue;
+ }
#endif
- {
- if((sign_T8[i] >= 0.0f) &&
- (sign_T8[i] <= (*isect)->t * xor_signmask8[i]))
- {
- if(den8[i]) {
- const float inv_den = 1.0f / den8[i];
-
- (*isect)->u = U8[i] * inv_den;
- (*isect)->v = V8[i] * inv_den;
- (*isect)->t = T8[i] * inv_den;
-
- (*isect)->prim = (prim_addr + i);
- (*isect)->object = object;
- (*isect)->type = PRIMITIVE_TRIANGLE;
-
- ret = true;
- } //den
- } //if sign
- } //vis
- }//if mask
- } //for
- } //default
- return ret;
-}// else PATH_RAY_SHADOW_OPAQUE
-
+ if((sign_T8[i] < 0.0f) ||
+ (sign_T8[i] > (*isect)->t * xor_signmask8[i]))
+ {
+ continue;
+ }
+ if(!den8[i]) {
+ continue;
+ }
+ const float inv_den = 1.0f / den8[i];
+ (*isect)->u = U8[i] * inv_den;
+ (*isect)->v = V8[i] * inv_den;
+ (*isect)->t = T8[i] * inv_den;
+ (*isect)->prim = (prim_addr + i);
+ (*isect)->object = object;
+ (*isect)->type = PRIMITIVE_TRIANGLE;
+ ret = true;
+ }
+ }
+ return ret;
+ }
}
-//vz static
-ccl_device_inline
-int triangle_intersect8(KernelGlobals *kg,
- Intersection **isect,
- float3 P,
- float3 dir,
- uint visibility,
- int object,
- int prim_addr,
- int prim_num,
- uint *num_hits,
- uint max_hits,
- int *num_hits_in_instance,
- float isec_t)
+ccl_device_inline int triangle_intersect8(
+ KernelGlobals *kg,
+ Intersection **isect,
+ float3 P,
+ float3 dir,
+ uint visibility,
+ int object,
+ int prim_addr,
+ int prim_num,
+ uint *num_hits,
+ uint max_hits,
+ int *num_hits_in_instance,
+ float isect_t)
{
__m128 tri_a[8], tri_b[8], tri_c[8];
__m256 tritmp[12], tri[12];
@@ -540,7 +466,7 @@ int triangle_intersect8(KernelGlobals *kg,
num_hits,
max_hits,
num_hits_in_instance,
- isec_t);
+ isect_t);
return result;
}
diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg
index e94a26e3eda..2202aba44ba 100644
--- a/release/datafiles/blender_icons.svg
+++ b/release/datafiles/blender_icons.svg
@@ -2510,7 +2510,7 @@
</g>
<rect style="display:inline;overflow:visible;visibility:visible;fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect28448" width="0" height="0" x="217.25" y="263.5"/>
</g>
- <g inkscape:groupmode="layer" id="layer4" inkscape:label="sheet layout" style="display:inline" sodipodi:insensitive="true">
+ <g inkscape:groupmode="layer" id="layer4" inkscape:label="sheet layout" style="display:inline">
<g style="display:inline;opacity:0.3;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" transform="translate(21)" id="g28552-1">
<path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 536,14 v 0.75 h -1 v 1.5 h 1 V 17 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 16 h -1 v -1 h 1.5 v -1 z" id="path28554-7" inkscape:connector-curvature="0"/>
<path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 539,14 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path28556-4" inkscape:connector-curvature="0"/>
@@ -2907,6 +2907,111 @@
<path inkscape:connector-curvature="0" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 536,636 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 V 636 Z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z" id="path41126-5"/>
<path inkscape:connector-curvature="0" id="path41128-9" d="m 541,636 v 0.75 h -1 V 640 h 0.75 v 1 h 1.5 v -1 H 543 v -1 h -0.75 v -1 H 541 v -1 h 1.5 v -1 z m 0,3 h 1 v 1 h -1 z" style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b3b3b3;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
<path style="display:inline;overflow:visible;visibility:visible;opacity:0.4;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 545,238 v 1 h 9 v 41 h -9 v 1 h 9 1 v -21 h 1 v -1 h -1 v -21 h -1 z" id="rect11044-9-4" sodipodi:nodetypes="ccccccccccccccc" inkscape:connector-curvature="0"/>
+ <g transform="rotate(-90,960,561)" style="display:inline;enable-background:new" id="g3789">
+ <g id="g6242" transform="translate(5,-1)">
+ <path id="path72434" d="m 1091,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <rect y="197" x="1124" height="5" width="1" id="rect72436" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path id="path72438" d="m 1049,197 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 h 0.75 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72440" d="m 1094,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72442" d="m 1070,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72446" d="m 1035,197 v 0.75 h -1 v 1.5 h 1 V 200 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 199 h -1 v -1 h 1.5 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72448" d="m 1059,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72450" d="m 1038,197 v 4.25 h 1 V 202 h 2 v -0.75 h 1 V 197 h -1 v 4 h -2 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72452" d="m 1043,197 v 5 h 1 1 v -0.5 h 1 V 200 h -0.75 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72454" d="m 1056,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72456" d="m 1051,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1114,197 v 5 h 1 2 v -1 h -2 v -4 z" id="path72458" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1065,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" id="path72460"/>
+ <path id="path72462" d="m 1076,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72464" d="m 1080,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1084,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path72466"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1099,197 v 4.25 h 1 V 202 h 2 v -0.75 h 1 V 197 h -1 v 4 h -2 v -4 z" id="path72468"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1107,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" id="path72470"/>
+ <path id="path72472" d="m 1110,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path72474" d="m 1120,197 v 5 h 1 2 v -1 h -2 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1127,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" id="path72476"/>
+ <path id="path72478" d="m 1130,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1134,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path72480"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1140,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" id="path72482"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1143,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path72484"/>
+ <path id="path72486" d="m 1147.75,201 v 1 H 1147 v 1 h 1 v -1 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path32008-7" d="m 977,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32010-4" d="m 981,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <rect y="197" x="985" height="5" width="1" id="rect32012-0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32015-9" d="m 988,197 v 0.75 h -1 v 1.5 h 1 V 200 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 199 h -1 v -1 h 1.5 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32017-4" d="m 994,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32019-8" d="m 1002,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32021-8" d="m 998,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32023-2" d="m 1007,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32026-4" d="m 1011,197 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1015,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path32029-5"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1020,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" id="path32031-5"/>
+ <rect y="197" x="1026" height="5" width="1" id="rect32033-1" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1029,197 v 0.75 h -1 v 1.5 h 1 V 200 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 199 h -1 v -1 h 1.5 v -1 z" id="path32035-7"/>
+ <path id="path72562" d="m 1158,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <rect y="197" x="1162" height="5" width="1" id="rect72564" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path id="path72576" d="m 1152,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72578" d="m 1210,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72580" d="m 1174.75,197 v 1 H 1174 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72582" d="m 1165,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1168,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" id="path72588"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1179,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" id="path72590"/>
+ <path id="path72592" d="m 1183,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1187,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" id="path72594"/>
+ <path id="path72596" d="m 1191,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1197,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" id="path72598"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1201.75,197 v 1 H 1201 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" id="path72600"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1205,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path72602"/>
+ <rect style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect72604" width="1" height="5" x="1216" y="197"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1218,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" id="path72606"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1224.75,197 v 1 H 1224 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" id="path72608"/>
+ <path inkscape:connector-curvature="0" id="path72610" d="m 1228,197 v 5 h 1 2 v -1 h -2 v -4 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1233,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" id="path72612"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1237,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path72614"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1243,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" id="path72616"/>
+ <rect style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect72618" width="1" height="5" x="1254" y="197"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1248,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z" id="path72620"/>
+ <path id="path72622" d="m 1260,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path72624" d="m 1256,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path32207-9-7" d="m 1267,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32209-6-7" d="m 1271,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32211-3-7" d="m 1275,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32213-7-3" d="m 1279,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32216-8-3" d="m 1283,197 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <rect style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect32218-8-5" width="1" height="5" x="1287" y="197"/>
+ <path inkscape:connector-curvature="0" id="path32220-2-9" d="m 1290,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32222-9-9" d="m 1293,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path32224-1-8" d="m 1297,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path id="path72678" d="m 1305,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 1315,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" id="path72680" inkscape:connector-curvature="0"/>
+ <rect y="197" x="1303" height="5" width="1" id="rect72682" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <rect y="201" x="1319" height="1" width="1" id="rect72684" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ <path id="path72686" d="m 1310,197 v 5 h 1 v -2 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ </g>
+ <g id="g6265" transform="translate(1,2)">
+ <path id="path32244-2" d="m 945.75,194 v 1 H 945 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32246-0" d="m 949,194 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32248-9" d="m 955,194 v 5 h 1 1 v -0.5 h 1 V 197 h -0.75 v -1 H 958 v -1.25 h -1 V 194 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32250-7" d="m 959,194 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 H 962 v -1.25 h -1 V 194 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32252-3" d="m 964,194 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32254-7" d="m 968,194 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32256-2" d="m 914.75,194 v 1 H 914 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 918,194 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z" id="path32258-6" inkscape:connector-curvature="0"/>
+ <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 923,194 v 1 3 1 h 2 v -0.75 h 1 v -3.5 h -1 V 194 Z m 1,1 h 1 v 3 h -1 z" id="path32260-0" inkscape:connector-curvature="0"/>
+ <path id="path32262-1" d="m 927,194 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 H 930 v -1.25 h -1 V 194 h -1 z m 1,1 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path id="path32264-6" d="m 931,194 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 935,194 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z" id="path32266-5" inkscape:connector-curvature="0"/>
+ <path style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 941,194 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 H 942 v -4 z" id="path32268-7" inkscape:connector-curvature="0"/>
+ <rect style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" id="rect32270-5" width="1" height="1" x="969" y="192"/>
+ <path sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc" id="path32272-1" d="m 886.9687,193 v 0.75 h -1 V 194 h -0.25 v 1 h -0.75 v 3 h 0.75 v 1 h 0.25 v 0.25 h 1 V 200 h 3 v -0.75 h 1 V 199 h 0.25 v -1 h 0.75 v -3 h -0.75 v -1 h -0.25 v -0.25 h -1 V 193 Z m 0,1 h 3 v 1 h 1 v 3 h -1 v 1 h -3 v -1 h -1 v -3 h 1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path sodipodi:nodetypes="ccccccccccccc" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 887.9687,195 v 0.75 h -1 v 1.5 h 1 V 198 h 1.25 v -1 h -1.25 v -1 h 1.25 v -1 z" id="path32274-2" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 898.7187,194 v 1 h -0.75 v 3 h 0.75 v 1 h 1.5 v -1 h 0.75 v -3 h -0.75 v -1 z m 0.25,1 h 1 v 3 h -1 z m 0.25,1 v 1 h 0.5 v -1 z" id="path72688"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 902.9687,194 v 1 h -1 v 1 h 1 v 3 h 1 v -5 z" id="path72690"/>
+ <path id="path72694" d="m 893.9687,194 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 V 194 Z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" d="m 909.9687,195 v 1 h 1 v -1 z m -0.2187,3 v 1 H 909 v 1 h 1 v -1 h 1 v -1 z" id="path72696"/>
+ <path inkscape:connector-curvature="0" id="path19551-18-1" d="m 905.75,194 v 1 h -0.5 v 1 h 0.5 v 1 H 905 v 1 h 0.75 v 1 h 1.5 v -1 H 908 v -1 h -0.75 v -1 h 0.5 v -1 h -0.5 v -1 z m 0.25,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z" style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"/>
+ </g>
+ </g>
</g>
<g inkscape:groupmode="layer" id="layer8" inkscape:label="2.8" style="display:inline">
<g id="g10975" transform="translate(-378.00707,-293.99994)" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
@@ -2948,7 +3053,6 @@
<g transform="matrix(-1,0,0,1,761,0)" id="g23294" style="display:inline;enable-background:new"/>
<g style="display:inline;enable-background:new" transform="rotate(90,681.00003,3.9999745)" id="g23519"/>
<g id="g23547" style="display:inline;opacity:1;enable-background:new" transform="matrix(-1,0,0,1,985.8323,-544.99999)"/>
- <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 342.5,159 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 12 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 12 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -12 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 6,3 c 1.92707,0 3.5,1.57293 3.5,3.5 0,1.92707 -1.57293,3.5 -3.5,3.5 -1.92707,0 -3.5,-1.57293 -3.5,-3.5 0,-1.92707 1.57293,-3.5 3.5,-3.5 z" id="rect13348" inkscape:connector-curvature="0"/>
<path sodipodi:nodetypes="cscc" id="path13146" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m 91.507377,483.0012 c 0,-2.142 1.888178,-3.5012 4.242623,-3.5012 h 1.75 4" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
<g transform="matrix(0.866668,0,0,0.866668,-9.466992,121.39943)" id="g16793" style="display:inline;opacity:1;fill:#ffffff;stroke-width:1.15384436;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g id="g16791" style="fill:#ffffff;stroke-width:1.15384436">
@@ -3067,8 +3171,6 @@
<path inkscape:connector-curvature="0" id="path10735" d="M 61.503911,123 A 6.5039066,6.5039066 0 0 1 55.000005,129.50391 6.5039066,6.5039066 0 0 1 48.496099,123 6.5039066,6.5039066 0 0 1 55.000005,116.4961 6.5039066,6.5039066 0 0 1 61.503911,123 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
<path sodipodi:nodetypes="sssss" inkscape:connector-curvature="0" id="path10739" d="m 61.503911,123 c 0,3.59202 -2.911894,6.50391 -6.503906,6.50391 -3.592012,0 -6.503906,-2.91189 -6.503906,-6.50391 0,-3.59201 2.911894,-6.5039 6.503906,-6.5039 3.592012,0 6.503906,2.91189 6.503906,6.5039 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.3;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
</g>
- <path inkscape:connector-curvature="0" id="path10780" d="m 103.49999,122.99999 a 6.5000001,6.5000001 0 0 1 -6.500002,6.5 6.5000001,6.5000001 0 0 1 -6.5,-6.5 6.5000001,6.5000001 0 0 1 6.5,-6.5 6.5000001,6.5000001 0 0 1 6.500002,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
- <path inkscape:connector-curvature="0" id="path10788" d="m 94.51367,117 a 6.5000001,6.5000001 0 0 0 -0.513672,0.23633 V 120 h 3 v -3 z m 2.486328,3 v 3 h 3 v -3 z m 3,0 h 2.763672 a 6.5000001,6.5000001 0 0 0 -2.763672,-2.76172 z m 0,3 v 3 h 2.761722 A 6.5000001,6.5000001 0 0 0 103,125.49414 V 123 Z m 0,3 h -3 v 3 h 2.486328 a 6.5000001,6.5000001 0 0 0 0.513672,-0.23633 z m -3,0 v -3 h -3 v 3 z m -3,0 h -2.763672 a 6.5000001,6.5000001 0 0 0 2.763672,2.76172 z m 0,-3 v -3 h -2.761719 a 6.5000001,6.5000001 0 0 0 -0.238281,0.50586 V 123 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
<g style="display:inline;enable-background:new" id="g15737" transform="translate(49.999998,4.4999696e-6)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path style="display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:accumulate" d="m -20.5,583 v 3 c 0,1.66667 0,2.25 -1,3.5 v 2 h 1 1 l 2,-1.75 1.75,1.75 h 0.5 l 1.75,-1.75 1.75,1.75 h 1.25 v -2 -1 -5.5 c 0,-2.76 -2.24,-4.5 -5,-4.5 -2.76,0 -5,1.74 -5,4.5 z" id="path36693" sodipodi:nodetypes="csccccccccccccssc" inkscape:connector-curvature="0"/>
<path id="path36695" d="m -17,583 v 1 h 1 v 1 h -2 v -2 z" style="display:inline;opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;enable-background:new" sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0"/>
@@ -3470,11 +3572,6 @@
<path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 16.500019,496.99999 A 1.4999817,1.4999918 0 0 0 18,498.49998 1.4999817,1.4999918 0 0 0 19.499982,496.99999 1.4999817,1.4999918 0 0 0 18,495.5 a 1.4999817,1.4999918 0 0 0 -1.499981,1.49999 z" id="path10651" inkscape:connector-curvature="0"/>
<path sodipodi:nodetypes="cc" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 14.499317,504.49361 c 0,-0.53003 0.429679,-0.9597 0.959709,-0.9597" id="path12124" inkscape:connector-curvature="0"/>
</g>
- <g style="display:inline;opacity:1;enable-background:new" id="g12828-9" transform="translate(17.999998,3.0000045)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <path style="display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" inkscape:connector-curvature="0" id="path12823-1" d="m 357.5,599.99999 c 0,1.35417 -1.14583,2.5 -2.5,2.5 -1.35417,0 -2.5,-1.14583 -2.5,-2.5 0,-1.35416 1.14583,-2.5 2.5,-2.5 1.35417,0 2.5,1.14584 2.5,2.5 z" class="st11"/>
- <path style="display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" d="m 353,602 -3.5,3.5" id="path12826-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
- <path style="opacity:0.4;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path12832-8" sodipodi:type="arc" sodipodi:cx="349.5" sodipodi:cy="605.5" sodipodi:rx="3" sodipodi:ry="3" sodipodi:start="0" sodipodi:end="4.712389" d="m 352.5,605.5 a 3,3 0 0 1 -1.85195,2.77164 3,3 0 0 1 -3.26937,-0.65032 3,3 0 0 1 -0.65032,-3.26937 A 3,3 0 0 1 349.5,602.5" sodipodi:open="true"/>
- </g>
<g transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;enable-background:new" id="g13451" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g id="g23046" style="opacity:1">
<path inkscape:connector-curvature="0" id="circle12697" d="m 16.501953,536.5 a 2.9985299,2.9985299 0 0 0 -2.998047,2.99805 2.9985299,2.9985299 0 0 0 2.998047,2.99804 A 2.9985299,2.9985299 0 0 0 19.5,539.49805 2.9985299,2.9985299 0 0 0 16.501953,536.5 Z m 0,0.49609 a 0.50005,0.50005 0 1 1 0,1 C 15.666793,537.99609 15,538.66288 15,539.49805 a 0.50005,0.50005 0 1 1 -1,0 c 0,-1.37561 1.126353,-2.50196 2.501953,-2.50196 z" style="opacity:0.98999999;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
@@ -3723,15 +3820,6 @@
<path inkscape:connector-curvature="0" id="path12522" d="m 418.5,186 a 6.5000004,6.5000004 0 0 1 -6.5,6.5 6.5000004,6.5000004 0 0 1 -6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.3;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
<path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 413.50001,186.00001 a 1.499999,1.499999 0 0 1 -1.5,1.5 1.499999,1.499999 0 0 1 -1.5,-1.5 1.499999,1.499999 0 0 1 1.5,-1.5 1.499999,1.499999 0 0 1 1.5,1.5 z" id="path12526" inkscape:connector-curvature="0"/>
</g>
- <g style="display:inline;opacity:1;enable-background:new" id="g5294-1" transform="translate(41.999988,-357)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 434.5,543 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" id="path5168-0" inkscape:connector-curvature="0"/>
- <path d="m 438.50001,538.5 h 1 z m -3,0 h 1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path5188-0" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
- <path d="m 438.50001,536.5 h 1 z m -3,0 h 1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path5221-3" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
- <path id="path5233-8" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 438.50001,547.5 h 1 z m -3,0 h 1 z" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccc"/>
- <path inkscape:connector-curvature="0" id="path5237-9" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 438.50001,549.5 h 1 z m -3,0 h 1 z" sodipodi:nodetypes="cccccc"/>
- <path sodipodi:nodetypes="ccscc" inkscape:connector-curvature="0" d="M 433.50001,547.5 H 433 c -2.50853,0 -4.5,-2.01446 -4.5,-4.5 0,-2.48553 1.99147,-4.5009 4.5,-4.5009 l 0.50001,9e-4" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path5260-6"/>
- <path id="path12602" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="M 433.50001,536.5 H 433 c -2.32223,0 -4.46806,1.23889 -5.62917,3.25 -1.16111,2.01111 -1.16111,4.48889 0,6.5 1.16111,2.01111 3.30694,3.25 5.62917,3.25 h 0.50001" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsscc"/>
- </g>
<g id="g12636" style="display:inline;opacity:0.98999999;enable-background:new" transform="matrix(-1,0,0,1,1290,764.99979)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m 1262.5,-278.49979 -4,-7 -4,7 z" id="path12630" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/>
<ellipse ry="1.0000036" rx="1" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="ellipse12632" cx="1253.5" cy="-287.49979"/>
@@ -3822,12 +3910,6 @@
</g>
<path inkscape:connector-curvature="0" id="path4281-8" d="m 389.5,390.5 v 4 h -4 v -4 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" sodipodi:nodetypes="ccccc"/>
</g>
- <g style="display:inline;opacity:1;enable-background:new" id="g8419-9" transform="translate(1279.001,-241)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <rect style="display:inline;opacity:0;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="rect8368-4" width="16" height="16" x="-1148" y="398"/>
- <path sodipodi:open="true" d="m -1135.6854,405.58384 a 5.499999,5.5 0 0 1 -2.5743,6.18491 5.499999,5.5 0 0 1 -6.6399,-0.89021 5.499999,5.5 0 0 1 -0.8542,-6.64459 5.499999,5.5 0 0 1 6.1987,-2.54075" sodipodi:end="4.9782235" sodipodi:start="6.0227681" sodipodi:ry="5.5" sodipodi:rx="5.499999" sodipodi:cy="407" sodipodi:cx="-1141" sodipodi:type="arc" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" id="ellipse8370-9" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"/>
- <rect ry="1" rx="1" y="403.5" x="-1139.5" height="2" width="2" id="rect8385-9" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
- <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8387-7" d="m -1137.75,403.75 3.749,-3.75" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
- </g>
<g id="g22955-6" transform="matrix(-1,0,0,1,110,-127.00001)" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<rect style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#b3b3b3;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;enable-background:accumulate" id="rect22949-6" width="16" height="16" x="-63" y="535" rx="0" ry="0" transform="scale(-1,1)"/>
<path sodipodi:nodetypes="cccccccccc" inkscape:connector-curvature="0" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 57.499996,537.50001 v 3 h -3 v -3 z m 4,10 v 3 h -3 v -3 z" id="path22951-5"/>
@@ -4208,7 +4290,6 @@
<path inkscape:connector-curvature="0" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 304.25,349 h 7 l -2,2 h -7 z" id="path13647"/>
<path id="path13652" d="m 312,356.75 v -7 l -2,2 v 7 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" inkscape:connector-curvature="0"/>
</g>
- <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 157.5,536 c -0.82251,0 -1.5,0.6775 -1.5,1.5 v 8 c 1e-5,0.41125 0.16922,0.78445 0.44141,1.05664 C 156.71359,546.82883 157.08875,547 157.5,547 h 0.5 c 0.45232,0 1,0.47106 1,0.99805 0,0.26349 -0.1383,0.51259 -0.33203,0.69726 C 158.47455,548.879 158.22499,549 158,549 v -0.5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 -1.38664,0 -2.5,-1.11336 -2.5,-2.5 v -4 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 h -1 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 8 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 4 0.5 c 1.04866,-10e-4 2,-0.8716 2,-2.00195 V 546.5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 h -1.5 -0.5 c -0.28206,0 -0.5,-0.21794 -0.5,-0.5 0,-0.28206 0.21794,-0.5 0.5,-0.5 h 9 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 542 h -2 v -3 h 2 v -2.5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m -0.5,1 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m -8,2 h 3 v 3 h -3 z m 4,0 h 3 v 3 h -3 z m -4,4 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z" id="path13810" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
<g style="display:inline;enable-background:new" transform="rotate(-90,349.00001,354)" id="g13933" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<g id="g13929" transform="translate(21,-21)">
<path id="path13917" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:1, 3;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 304.5,360.5 9,-2" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
@@ -4231,10 +4312,6 @@
</g>
<path inkscape:connector-curvature="0" id="path13692" d="m 490.53675,227.48742 c 1.26521,1.13004 2.31955,3.01344 5.48257,3.01344 3.16302,0 4.21736,-1.8834 5.48257,-3.01344" style="display:inline;opacity:0.6;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="csc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
<circle style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="path13733" cx="540.5" cy="267.5" r="4" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
- <g style="display:inline;enable-background:new" transform="translate(41.999998,4.4999696e-6)" id="g13710" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 406.75,66.5 h 10.5 c 1,0 1.79167,-1.25 0.75,-2.5 l -4.5,-5.5 v -3 l 1,-1 v -1 h -5 v 1 l 1,1 v 3 L 406,64 c -1,1.25 -0.25,2.5 0.75,2.5 z" id="path13700" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/>
- <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 410,62.5 -1.75,2 h 7.5 l -1.75,-2 z" id="path13708" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
- </g>
<g transform="translate(-405.99706,-183.50454)" id="g13642" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
<path style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.80000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 695.49706,256.50454 c -1.933,0 -3.5,1.567 -3.5,3.5 0,1.933 1.567,3.5 3.5,3.5 1.933,0 3.5,-1.567 3.5,-3.5 0,-1.933 -1.567,-3.5 -3.5,-3.5 z m -0.5,1 h 1 v 2 h 2 v 1 h -2 v 2 h -1 v -2 h -2 v -1 h 2 z" id="path13640" inkscape:connector-curvature="0" sodipodi:nodetypes="sssssccccccccccccc"/>
</g>
@@ -4319,10 +4396,6 @@
<path sodipodi:nodetypes="ccc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 92.5,326.5 4.5,5.5 4.5,-5.5" id="path14250" inkscape:connector-curvature="0"/>
<path id="path14254" d="m 91.25,334 c -0.683851,0 -1.25,0.56615 -1.25,1.25 v 3.5 c 0,0.68385 0.566149,1.25 1.25,1.25 h 3.5 c 0.683851,0 1.25,-0.56615 1.25,-1.25 v -3.5 C 96,334.56615 95.433851,334 94.75,334 Z m 8,0 c -0.683851,0 -1.25,0.56615 -1.25,1.25 v 3.5 c 0,0.68385 0.566149,1.25 1.25,1.25 h 3.5 c 0.68385,0 1.25,-0.56615 1.25,-1.25 v -3.5 c 0,-0.68385 -0.56615,-1.25 -1.25,-1.25 z m -7.75,4 h 2 1 a 0.50005,0.50005 0 1 1 0,1 h -1 -2 a 0.50005,0.50005 0 1 1 0,-1 z m 8,0 h 2 1 a 0.50005,0.50005 0 1 1 0,1 h -1 -2 a 0.50005,0.50005 0 1 1 0,-1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" inkscape:connector-curvature="0"/>
</g>
- <g transform="translate(-1.8536743e-6,4.4999696e-6)" id="g12821-4" style="display:inline;opacity:0.6;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <path class="st11" d="m 355.5,602 c 0,1.35416 -1.14583,2.5 -2.5,2.5 -1.35417,0 -2.5,-1.14584 -2.5,-2.5 0,-1.35417 1.14583,-2.5 2.5,-2.5 1.35417,0 2.5,1.14583 2.5,2.5 z" id="path2929-3" inkscape:connector-curvature="0" style="display:inline;fill:none;stroke:#ffffff;stroke-width:1;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"/>
- <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="line3784-9" d="m 351,604 -8.5,8.5" style="display:inline;fill:#ffffff;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"/>
- </g>
<path sodipodi:nodetypes="cccccccccccc" d="m 19.507198,125.50712 v 4 h -4 m -9.0071,-4 v 4 h 4 m 9.0071,-9.00707 v -4 h -4 m -9.0071,4 v -4 h 4" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path13927" inkscape:connector-curvature="0"/>
<path id="path14341" style="display:inline;opacity:1;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" d="m 49.499998,12.500004 h -1 m 3,4 h -1 m 3,3 h -1 m 4,3.000001 h -1 m 3,1 h -1.5 m 4.5,1 h -2" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccc"/>
<g transform="matrix(-1,0,0,1,1290,302.99979)" style="display:inline;opacity:0.98999999;enable-background:new" id="g8530-0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
@@ -4469,14 +4542,6 @@
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 478.14648,418.14648 -3,3 c -0.31399,0.31533 -0.0915,0.85354 0.35352,0.85352 h 3 2 c 0.27591,-1.9e-4 0.49982,-0.22409 0.5,-0.5 v -3 c -7e-5,-0.28163 -0.23215,-0.50794 -0.51367,-0.5 h -2 c -0.12731,0.004 -0.24956,0.0566 -0.33985,0.14648 z" id="path12972" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccc"/>
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.75;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 477.49257,412.00014 c -0.12999,0.002 -0.25408,0.0546 -0.34596,0.14655 l -2.00065,1.99942 c -0.094,0.094 -0.14673,0.22146 -0.14655,0.35436 v 4.0001 c -2e-5,0.4458 0.53925,0.66879 0.85409,0.35316 l 3.99954,-4.00067 c 0.19472,-0.19518 0.19472,-0.51115 0,-0.70633 l -2.00009,-2.00004 c -0.0954,-0.0955 -0.2254,-0.14835 -0.36038,-0.14655 z" id="path12974" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccc"/>
</g>
- <g transform="translate(-84.000014,21.000005)" style="display:inline;enable-background:new" id="g9974-4">
- <path inkscape:connector-curvature="0" id="path14003" d="M 391.98438,535.98633 C 391.43286,535.99495 390.99245,536.44847 391,537 v 1.51367 c -10e-6,0.002 -10e-6,0.004 0,0.006 0.008,1.37595 0.83084,2.56107 2,3.125 V 548.5 c -0.0287,2.02848 3.02869,2.02848 3,0 v -6.85352 c 1.17556,-0.56682 2,-1.76346 2,-3.14648 V 537 c 0.0191,-1.35232 -2.01913,-1.35232 -2,0 v 1.5 c 0,0.11423 -0.0139,0.22371 -0.0371,0.33008 l -1.13281,1.13281 -0.66211,-0.002 -1.13086,-1.13086 c -0.0226,-0.10381 -0.0365,-0.2109 -0.0371,-0.32227 V 537 c 0.008,-0.56377 -0.45187,-1.02247 -1.01562,-1.01367 z M 394,548 h 1 v 1 h -1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path inkscape:connector-curvature="0" d="M 386.49219,535.99219 A 0.50005,0.50005 0 0 0 386,536.5 v 6.5 h -1.5 a 0.50005,0.50005 0 1 0 0,1 h 1.91992 a 0.50005,0.50005 0 0 0 0.16211,0 H 388.5 a 0.50005,0.50005 0 1 0 0,-1 H 387 v -6.5 a 0.50005,0.50005 0 0 0 -0.50781,-0.50781 z M 384.5,545 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 2 c 0,0.78517 0.31169,1.44054 0.78516,1.86719 0.47346,0.42664 1.08725,0.63281 1.69726,0.63281 0.61001,0 1.22902,-0.20449 1.71094,-0.62891 C 388.67528,548.94668 389,548.28953 389,547.5 v -2 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14013"/>
- </g>
- <g transform="translate(-1.8536743e-6,4.4999696e-6)" style="display:inline;enable-background:new" id="g10204">
- <path sodipodi:nodetypes="cccccccccccc" inkscape:connector-curvature="0" id="rect14891" d="m 385.5,159.5 v 4 3 4 h 4 7 v -3 h -8 v -5 h 8 v -3 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/>
- <circle r="1" cy="165" cx="391" id="path10200" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
- </g>
<path id="rect13801" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 309.5,164.5 h 3 v 3 h -3 z m -8,3 h 3 v 3 h -3 z m 3,-9 h 3 v 3 h -3 z" inkscape:connector-curvature="0"/>
<g style="display:inline;enable-background:new" id="g14472" transform="translate(-42.000002,4.4999696e-6)">
<path id="rect14387" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 373.5,158.5 h 3 v 3 h -3 z m -10,10 h 3 v 3 h -3 z" inkscape:connector-curvature="0"/>
@@ -4540,21 +4605,6 @@
<ellipse cy="33.499996" cx="-154.5" id="ellipse12632-2" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" rx="0.99999642" ry="1.0000018" transform="scale(-1,1)"/>
</g>
<path id="path14294" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000057;stroke-opacity:1;marker:none;enable-background:new" d="m 282.5,378.5 10,-10" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
- <g style="display:inline;enable-background:new" id="g14135" transform="translate(696.99456,-488.99997)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <g id="g14103">
- <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path14068" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m -563.5,611.49287 v 5 m 1,-6 h 5 m -5,6.99995 h 5 m 1,-0.99995 v -5"/>
- <path inkscape:connector-curvature="0" id="path14078" d="m -562.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
- <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,618.49999 v -2 h -2 v 2 z" id="path14080" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path14083" d="m -555.5,618.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
- <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,611.49999 v -2 h -2 v 2 z" id="path14093" inkscape:connector-curvature="0"/>
- </g>
- <g style="opacity:0.6" transform="translate(4,-4)" id="g14122">
- <path d="m -563.5,611.49287 v 1 m 1,-2 h 5 m -1,6.99995 h 1 m 1,-0.99995 v -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path14105" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/>
- <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,611.49999 v -2 h -2 v 2 z" id="path14109" inkscape:connector-curvature="0"/>
- <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,618.49999 v -2 h -2 v 2 z" id="path14118" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path14120" d="m -555.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
- </g>
- </g>
<g style="display:inline;enable-background:new" id="g14429" transform="translate(-1.8536743e-6,42.000005)">
<path inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\jendrzych's iconset.png" sodipodi:nodetypes="csc" id="path14357" d="m 198.5,337.5 c 3.75,2 7,0.75 7,-2.5 0,-2.25 -1.5,-4 -3,-6.5" style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" inkscape:connector-curvature="0"/>
<path inkscape:connector-curvature="0" d="m 202.49718,327.49495 h -1 v 1 h 1 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path14372" sodipodi:nodetypes="ccccc"/>
@@ -4705,8 +4755,6 @@
<path inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" id="path13309" d="m 478.50037,161.49023 v 1 c -3.7e-4,2.75977 -7.00037,2.25977 -7,5 v 1" style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/>
<path style="display:inline;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new" d="m 478.49966,161.49677 v -1 c 0,-0.9872 0,-2.00001 -3.5,-2 -3.5,1e-5 -3.5,1.0128 -3.5,2 l 3.7e-4,1.00323 3.00037,-0.01 -3.50074,0.007 c -0.25,0 -2.50037,0.003 -2.5,3.50303 1.7e-4,1.59588 0.4677,2.02832 1.00035,2.49997" id="path13311" sodipodi:nodetypes="ccsccccsc" inkscape:connector-curvature="0" inkscape:transform-center-x="1.500353" inkscape:transform-center-y="-1.503115"/>
</g>
- <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 369.5,162 c -1.92707,0 -3.5,1.57293 -3.5,3.5 0,1.92707 1.57293,3.5 3.5,3.5 1.92707,0 3.5,-1.57293 3.5,-3.5 0,-1.92707 -1.57293,-3.5 -3.5,-3.5 z" id="path13329" inkscape:connector-curvature="0" sodipodi:nodetypes="sssss"/>
- <rect y="159.5" x="363.5" height="12" width="12" id="rect13350" style="display:inline;opacity:0.3;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/>
<circle style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="circle13367" cx="433" cy="123" r="2.5"/>
<g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g13384" transform="translate(-21.000002,-105)" style="display:inline;opacity:0.6;enable-background:new">
<rect style="display:inline;opacity:0;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="rect13372" width="16" height="16" x="236" y="325" rx="0" ry="0"/>
@@ -4835,7 +4883,7 @@
</g>
<path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" d="m 94.499998,630.5 v -7 0 l 5,3.25 v 0.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14742"/>
<path id="path14759" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 114.5,624.5 h 7 v 0 l -3.25,5 h -0.5 z" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/>
- <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" d="m 136.5,630.5 v -7 0 l 5,3.25 v 0.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14762"/>
+ <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" d="m 141.5,630.5 v -7 0 l -5,3.25 v 0.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14762"/>
<path id="path14764" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 163.5,629.5 h -7 v 0 l 3.25,-5 h 0.5 z" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc"/>
<path style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m 241.25,624.5 h 4.5 l -2.25,4.75 z" id="path14837" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/>
<g style="display:inline;enable-background:new" id="g13609" transform="translate(-187,-89.999995)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
@@ -4912,8 +4960,6 @@
<path inkscape:connector-curvature="0" d="m -162.48485,144.5 h 4 v 4 m -6,2 6,-6" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" id="path20456" sodipodi:nodetypes="ccccc"/>
</g>
</g>
- <path id="circle20487" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 454.25,455.5 c 0.25,-1.25 1.04248,-2.3927 2.23158,-2.82185 1.18911,-0.42915 2.51964,-0.0668 3.32697,0.90597 0.80734,0.9728 0.91821,2.34732 0.27724,3.43695 L 454.25,465.5 h -0.5 l -5.84808,-8.5 c -0.63059,-1.09223 -0.51073,-2.46223 0.29995,-3.42836 0.81068,-0.96613 2.13905,-1.32207 3.32419,-0.89072 C 452.7112,453.11227 453.5,454.25 453.75,455.5 Z" inkscape:connector-curvature="0" sodipodi:nodetypes="csscccccccc"/>
- <path inkscape:connector-curvature="0" id="path20628" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 471.62109,452.50195 c -0.91158,-0.0366 -1.81191,0.34572 -2.41992,1.07032 -0.81068,0.96613 -0.92942,2.3355 -0.29883,3.42773 l 1.26172,1.83594 L 473.5,455.5 l 2,2 3,-3 2.56055,2.56055 0.0254,-0.0391 c 0.64097,-1.08963 0.52999,-2.4647 -0.27735,-3.4375 -0.80733,-0.97277 -2.13706,-1.3354 -3.32617,-0.90625 -1.1891,0.42915 -1.98242,1.57227 -2.23242,2.82227 h -0.5 c -0.25,-1.25 -1.03947,-2.38701 -2.22461,-2.81836 -0.29628,-0.10784 -0.60043,-0.16749 -0.9043,-0.17969 z M 478.5,458.5 l -3,3 -2,-2 -1.70508,1.70508 L 474.75,465.5 h 0.5 l 4.17969,-6.07031 z"/>
<g style="display:inline;enable-background:new" id="g21550" transform="translate(-21.000002,189)">
<path inkscape:connector-curvature="0" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 498.49288,297.50712 h -9 v -9 L 498.5,288.5 Z" id="path21430" sodipodi:nodetypes="ccccc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
<path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" sodipodi:nodetypes="ccccc" id="path21432" d="m 502.5,286.25 v 8 l -2,2 v -8 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/>
@@ -4972,10 +5018,6 @@
<path sodipodi:nodetypes="ccccc" d="m 371.5,150.5 -8,-8 m 4.00002,8.00505 h 4 v -4" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path14485" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
<path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:connector-curvature="0" id="path14491" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 368.50001,137.50505 8,8 M 372.49999,137.5 h -4 v 4" sodipodi:nodetypes="ccccc"/>
</g>
- <g style="display:inline;enable-background:new" id="g20455" transform="rotate(-180,359.49632,417.00344)">
- <path inkscape:connector-curvature="0" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 281.49288,332.50712 2,-2 h 5 v 5 l -2,2 h -5 z" id="path20447" sodipodi:nodetypes="ccccccc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
- <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" sodipodi:nodetypes="ccccccc" id="path20449" d="m 279.5,331.25 4.75,-4.75 8.24288,0.007 0.007,8.24288 -4.75,4.75 -8.25712,0.007 z" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/>
- </g>
<g style="display:inline;enable-background:new" id="g20430" transform="translate(41.999998,4.4999696e-6)">
<g id="g20456">
<path id="circle20459" transform="translate(-42)" d="m 469.08398,415.58594 c -0.81593,0.95753 -1.21878,2.22985 -1.04296,3.52148 0.24625,1.80912 1.56436,3.29294 3.33203,3.75 1.43669,0.37149 2.93514,-0.006 4.03515,-0.9414 -0.29636,0.0501 -0.5984,0.084 -0.9082,0.084 -0.38579,0 -0.76279,-0.0423 -1.12695,-0.11914 -0.56283,0.14546 -1.16207,0.15983 -1.75,0.008 -1.37737,-0.35614 -2.39992,-1.50634 -2.5918,-2.91601 -0.0626,-0.45958 -0.0236,-0.91417 0.0879,-1.34571 C 469.04268,417.26409 469,416.88831 469,416.50391 c 0,-0.31305 0.0328,-0.61873 0.084,-0.91797 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:connector-curvature="0"/>
@@ -5279,15 +5321,6 @@
</g>
<rect transform="scale(-1,1)" y="284.5" x="-40.5" height="3" width="5" id="rect22200" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
</g>
- <g style="display:inline;opacity:1;enable-background:new" id="g16957-2" transform="matrix(0,-1,-1,0,556.00846,744.00467)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path16943-7" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path16945-5" d="m 467.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,359.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path16947-3" inkscape:connector-curvature="0"/>
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path16949-6" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path16951-1" d="m 468.49998,349.5 2e-5,5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
- <path inkscape:connector-curvature="0" id="path16953-0" d="m 478.5,359.5 h -5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
- <path inkscape:connector-curvature="0" id="path16955-3" d="m 472.5,355.5 4.99998,-5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
- </g>
<g style="display:inline;opacity:1;enable-background:new" id="g21692" transform="translate(-1.8536743e-6,-41.999984)">
<g transform="translate(-63)" style="display:inline;opacity:1;stroke:#f9f9f9;enable-background:new" id="g21667">
<path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#f9f9f9;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:6.5999999;stroke-opacity:1;marker:none;paint-order:normal" d="m 208.5,284.5 c 0,1.5 -1,2.76727 -2.91693,3.87401 -1.82216,1.05203 -4.5035,1.26353 -6.58307,1.12595 -2.07958,-0.13754 -3.5,-1 -3.5,-2" id="path21655" inkscape:connector-curvature="0" sodipodi:nodetypes="cssc"/>
@@ -5460,40 +5493,6 @@
<path sodipodi:nodetypes="cccccc" inkscape:connector-curvature="0" d="M 185.52536,291.52503 187.5,289.5 m -3.97464,0.025 L 187.5,285.5 m -7,3 3,-3" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path22765"/>
<path inkscape:connector-curvature="0" d="m 174.49293,297.5 h 12" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path22770" sodipodi:nodetypes="cc"/>
</g>
- <g transform="translate(41.999998,126)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g22536" style="display:inline;enable-background:new">
- <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path22498" d="m 31.5,377.5 -4.00005,4.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path inkscape:connector-curvature="0" id="path22500" d="m 31.5,377.5 h 9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 31.5,377.5 v -9" id="path22502" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path22504" d="m 27.5,378.5 v 3 h 3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path inkscape:connector-curvature="0" id="path22506" d="m 29.5,370.5 2,-2 2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path inkscape:connector-curvature="0" id="path22534" d="m 38.5,375.5 2,2 -2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- </g>
- <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g22880" style="display:inline;opacity:0.98999999;enable-background:new" transform="translate(-753,836.9998)">
- <path inkscape:connector-curvature="0" id="path22875" d="m 856.5,-272.99979 a 6.5000004,6.5000004 0 0 1 -6.5,6.5 6.5000004,6.5000004 0 0 1 -6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path sodipodi:nodetypes="ccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path22878" d="m 848,-278.99979 -2,1 -2,2 h 1 l 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 c 0.16747,-0.0294 0.58327,0.0446 0.75,0 1.49768,-0.4013 2.25,-0.75 3.25,-2 l -2,-2 h -1 -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"/>
- </g>
- <g id="g15967">
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 246.5,564 a 2.5000002,2.5000002 0 0 1 -2.5,2.5 2.5000002,2.5000002 0 0 1 -2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,2.5 z" id="path17035" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path17037" d="m 250.5,559 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path d="m 250.47669,563.45043 a 6.4999542,6.4999495 0 0 1 -3.74196,6.44611 6.4999542,6.4999495 0 0 1 -7.33792,-1.30755 6.4999542,6.4999495 0 0 1 -1.28507,-7.34188 6.4999542,6.4999495 0 0 1 6.45754,-3.7222" sodipodi:open="true" sodipodi:end="4.800084" sodipodi:start="6.1985526" sodipodi:ry="6.4999495" sodipodi:rx="6.4999542" sodipodi:cy="563.99988" sodipodi:cx="244" sodipodi:type="arc" id="path17043" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
- </g>
- <g transform="matrix(0,-1,-1,0,577,1038)" id="g12586" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
- <path inkscape:connector-curvature="0" id="path12572" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <g id="g23031" style="opacity:0.7">
- <path inkscape:connector-curvature="0" id="path12574" d="m 467.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,359.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path12576" inkscape:connector-curvature="0"/>
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path12578" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path12580" d="m 468.49998,349.5 2e-5,5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
- <path inkscape:connector-curvature="0" id="path12582" d="m 478.5,359.5 h -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
- <path inkscape:connector-curvature="0" id="path12584" d="m 472.5,355.5 4.99998,-5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
- </g>
- </g>
- <path id="path22802" d="m 531.5,557 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 2.5 h 1 v -2 h 12 v 11 h -12 v -2 h -1 v 2.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 0.5 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 570 h 8 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 570 h 0.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -12 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 1.5,2 v 9 h 10 v -9 z m 2.49414,0.99414 c 0.13548,0 0.26517,0.055 0.35938,0.15234 l 1.27148,1.27149 C 537.52056,561.15509 537.99223,561 538.5,561 c 0.50777,0 0.97944,0.15509 1.375,0.41797 l 1.27148,-1.27149 c 0.0907,-0.0928 0.21399,-0.14677 0.34375,-0.15039 0.45473,-0.0125 0.68856,0.53942 0.36329,0.85743 l -1.27149,1.27148 c 0.26288,0.39556 0.41797,0.86723 0.41797,1.375 0,0.50777 -0.15509,0.97944 -0.41797,1.375 l 1.27149,1.27148 c 0.4905,0.47127 -0.23578,1.19754 -0.70704,0.70704 L 539.875,565.58203 C 539.47944,565.84491 539.00777,566 538.5,566 c -0.50777,0 -0.97944,-0.15509 -1.375,-0.41797 l -1.27148,1.27149 c -0.47126,0.4905 -1.19754,-0.23577 -0.70704,-0.70704 l 1.27149,-1.27148 C 536.15509,564.47944 536,564.00777 536,563.5 c 0,-0.50777 0.15509,-0.97944 0.41797,-1.375 l -1.27149,-1.27148 c -0.32293,-0.31254 -0.10174,-0.85929 0.34766,-0.85938 z M 531,561 v 5 h 1 v -5 z m 7.5,1 c -0.83435,0 -1.5,0.66565 -1.5,1.5 0,0.83435 0.66565,1.5 1.5,1.5 0.83435,0 1.5,-0.66565 1.5,-1.5 0,-0.83435 -0.66565,-1.5 -1.5,-1.5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccscccccsccccsccccsccccccccsssss"/>
- <g id="g23083" style="display:inline;opacity:0.6;enable-background:new" transform="translate(126,252)">
- <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 510.5,557 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 2.5 h 1 v -0.5 -1.5 h 0.87891 l 1,-1 z m 6.4082,0 c 0.0558,0.15706 0.0918,0.3238 0.0918,0.5 v 0.5 h 6 v 11 h -6 v 0.5 c -2e-5,0.1762 -0.036,0.34294 -0.0918,0.5 H 521 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 570 h 0.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -12 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z M 510,561 v 5 h 1 v -5 z m 0,6 v 2.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 0.5 v 0.5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 1 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -0.37891 L 511.87891,569 H 511 v -1.5 -0.5 z" transform="translate(-126,-252)" id="path22995"/>
- <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="rect22997" d="m 386.5,307.5 2,-2 h 1 v 12 h -1 l -2,-2 z" style="opacity:0.8;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
- <path sodipodi:nodetypes="ccccccc" inkscape:connector-curvature="0" id="path23075" d="m 388.5,307.5 v -2 h 1 v 12 h -1 v -2 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
- </g>
<g style="display:inline;enable-background:new" id="g22484" transform="translate(-220,-220)">
<path id="path22480" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 334.5,777 c -0.15738,-3e-4 -0.30571,0.0735 -0.40039,0.19922 L 332.75,779 H 332 c -0.54535,0 -1,0.45465 -1,1 v 9 c 0,0.54535 0.45465,1 1,1 h 12 c 0.54535,0 1,-0.45465 1,-1 v -9 c 0,-0.54535 -0.45465,-1 -1,-1 h -3.75 l -1.34961,-1.80078 C 338.80571,777.07351 338.65738,776.9997 338.5,777 Z m 1,1 h 2 c 0.27613,3e-5 0.49997,0.22387 0.5,0.5 v 1 c -3e-5,0.27613 -0.22387,0.49997 -0.5,0.5 h -2 c -0.27613,-3e-5 -0.49997,-0.22387 -0.5,-0.5 v -1 c 3e-5,-0.27613 0.22387,-0.49997 0.5,-0.5 z m -3.5,3 h 9 v 7 h -9 v -6.5 z m 11,1 c 0.54636,0 1,0.45364 1,1 0,0.54636 -0.45364,1 -1,1 -0.54636,0 -1,-0.45364 -1,-1 0,-0.54636 0.45364,-1 1,-1 z m 0,4 c 0.54636,0 1,0.45364 1,1 0,0.54636 -0.45364,1 -1,1 -0.54636,0 -1,-0.45364 -1,-1 0,-0.54636 0.45364,-1 1,-1 z" inkscape:connector-curvature="0" sodipodi:nodetypes="cccsssssssscccccccccccccccccccssssssssss"/>
<path inkscape:connector-curvature="0" id="path22526" style="display:inline;opacity:0.2;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.00000012;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0.5;stroke-opacity:1;marker:none;enable-background:new" d="m 333.5,786.5 6.00128,1.9e-4 M 333.5,784.5 l 6.00128,1.9e-4 M 333.5,782.5 l 6.00128,1.9e-4"/>
@@ -5551,17 +5550,6 @@
</g>
<path sodipodi:nodetypes="ccccc" d="m 313.5,528.5 -12,-12 m 12,7.75 v 4.25 h -4.25" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path23333" inkscape:connector-curvature="0"/>
</g>
- <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:1;enable-background:new" id="g23365" transform="matrix(0,-1,-1,0,640,975)">
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path23346" inkscape:connector-curvature="0"/>
- <g style="opacity:0.7" id="g23363">
- <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" id="path23349" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path23351" d="m 478.49998,359.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path inkscape:connector-curvature="0" id="path23355" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 468.49998,349.5 2e-5,5" id="path23357" inkscape:connector-curvature="0"/>
- <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 478.5,359.5 h -5" id="path23359" inkscape:connector-curvature="0"/>
- <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 472.5,355.5 4.99998,-5" id="path23361" inkscape:connector-curvature="0"/>
- </g>
- </g>
<g style="display:inline;enable-background:new" id="g22284-9" transform="translate(168,-252)">
<path sodipodi:nodetypes="ssccccs" inkscape:connector-curvature="0" d="m 57.892544,296.4472 c -1.672904,1.40373 -4.112184,1.40373 -5.785088,0 -1.672904,-1.40373 -2.096481,-3.80596 -1.00457,-5.6972 L 54.75,284.5 h 0.5 l 3.647114,6.25 c 1.091911,1.89124 0.668334,4.29347 -1.00457,5.6972 z" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" id="path22260-6"/>
<path id="path22264-7" d="m 52.501454,292.49305 a 2.5629914,2.5493243 0 0 1 0.292656,-0.77 L 54.5,288.5" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/>
@@ -5570,23 +5558,6 @@
<path sodipodi:nodetypes="ccsscccc" inkscape:connector-curvature="0" id="ellipse22388-7" d="m 15.5,242.5 -2.7e-4,0.50006 c 0,0.89314 -0.476446,1.71844 -1.249865,2.16501 -0.773419,0.44657 -1.726311,0.44657 -2.49973,0 -0.773419,-0.44657 -1.249865,-1.27187 -1.249865,-2.16501 L 10.5,242.5 v 0 0" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999988;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new"/>
<path inkscape:connector-curvature="0" style="display:inline;overflow:visible;visibility:visible;opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:7.40000248;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 15.5,242.5 h 4 v 5 h -2 l -2.9e-4,8 -8.99971,-5e-5 V 247.5 h -2 v -5 h 4" id="path22384-8" sodipodi:nodetypes="cccccccccc"/>
</g>
- <g style="display:inline;enable-background:new" id="g23608" transform="translate(-168,-294)">
- <path d="m 345.67581,336.31883 a 5.4499998,5.4499998 0 0 1 -1.8611,-5.9967 5.4499998,5.4499998 0 0 1 5.02132,-3.76966 5.4499998,5.4499998 0 0 1 5.23896,3.46083 5.4499998,5.4499998 0 0 1 -1.49707,6.09778" sodipodi:open="true" sodipodi:end="0.8546274" sodipodi:start="2.2267848" sodipodi:ry="5.4499998" sodipodi:rx="5.4499998" sodipodi:cy="332" sodipodi:cx="349" sodipodi:type="arc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path23602"/>
- <path sodipodi:nodetypes="cccccc" inkscape:connector-curvature="0" id="path23604" d="m 352.5,336.5 h 3 v 3 h -13 v -3 h 6" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
- <path id="path23606" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:type="arc" sodipodi:cx="349" sodipodi:cy="332" sodipodi:rx="2.84375" sodipodi:ry="2.84375" sodipodi:start="3.2977779" sodipodi:end="4.5530322" d="m 346.19086,331.55765 a 2.84375,2.84375 0 0 1 2.35788,-2.36537" sodipodi:open="true"/>
- </g>
- <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g8542" style="display:inline;opacity:0.98999999;enable-background:new" transform="translate(-795,773.9998)">
- <path inkscape:connector-curvature="0" id="path8571" d="m 856.5,-272.99979 a 6.5000004,6.5000004 0 0 1 -6.5,6.5 6.5000004,6.5000004 0 0 1 -6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,-6.5 6.5000004,6.5000004 0 0 1 6.5,6.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path sodipodi:nodetypes="ccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path8573" d="m 848,-278.99979 -2,1 -2,2 h 1 l 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 c 0.16747,-0.0294 0.58327,0.0446 0.75,0 1.49768,-0.4013 2.25,-0.75 3.25,-2 l -2,-2 h -1 -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"/>
- </g>
- <g transform="translate(-21.000002,147)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g12973" style="display:inline;enable-background:new">
- <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12961" d="m 31.5,377.5 -4.00005,4.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path inkscape:connector-curvature="0" id="path12963" d="m 31.5,377.5 h 9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 31.5,377.5 v -9" id="path12965" inkscape:connector-curvature="0"/>
- <path inkscape:connector-curvature="0" id="path12967" d="m 27.5,378.5 v 3 h 3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path inkscape:connector-curvature="0" id="path12969" d="m 29.5,370.5 2,-2 2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- <path inkscape:connector-curvature="0" id="path12971" d="m 38.5,375.5 2,2 -2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
- </g>
<g id="g8815" style="display:inline;opacity:0.98999999;enable-background:new" transform="translate(-627,857.9998)">
<path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 665.5,-352.49979 h -9 v -9" id="path8745" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
<g id="g8805" transform="matrix(-1,0,0,1,1321,-5)">
@@ -5803,11 +5774,6 @@
<path inkscape:connector-curvature="0" id="rect15415-8" d="m 548,653 c -0.54532,0 -1,0.45468 -1,1 v 9 c 0,0.54532 0.45468,1 1,1 h 10 c 0.54532,0 1,-0.45468 1,-1 v -1 h -1 v 1 h -10 v -4 -5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
<path inkscape:connector-curvature="0" id="rect15379-7" d="m 550,650 c -0.54532,0 -1,0.45468 -1,1 v 9 c 0,0.54532 0.45468,1 1,1 h 10 c 0.54532,0 1,-0.45468 1,-1 v -9 c 0,-0.54532 -0.45468,-1 -1,-1 z m 0,1 h 2 v 2 h -2 z m 0,3 h 10 v 6 h -10 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
</g>
- <g id="g15556" transform="translate(-21,63)">
- <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path15502" d="m 460.50004,567.49996 h -10 v -10 h 10 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path15506" d="m 448.5,560.5 -0.99996,-4e-5 v 10 h 10 L 457.5,569.5" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
- <path d="m 455.49287,559.50712 v 6 m 3.00001,-3 h -6.00001" style="fill:#5fd38d;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" id="path7085-6-6" inkscape:connector-curvature="0"/>
- </g>
<g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:0.6;enable-background:new" transform="translate(-64,43)" id="g5919">
<path inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png" sodipodi:nodetypes="csccc" id="path5911" d="M 411.49912,414.98781 411.5,413 c 6.6e-4,-1.5 -1,-2.5 -2.49955,-2.49989 C 407.5,410.5 406.5,411.5 406.5,413 l 0.002,0.98781" style="fill:none;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" inkscape:connector-curvature="0"/>
<path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path5913" d="m 417.5,415.49994 h -7 v 5.00003 h 7 z" style="fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
@@ -5818,6 +5784,237 @@
<path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 414,410 c -0.86131,-6e-5 -1.62742,0.29548 -2.16602,0.83398 C 411.29539,411.37249 411,412.13889 411,413 c 0,6.7e-4 0,10e-4 0,0.002 l 0.002,1.98633 1,-0.002 -0.002,-1.98828 c 4.8e-4,-0.63777 0.20489,-1.12097 0.54102,-1.45703 0.33651,-0.33647 0.81984,-0.54107 1.45898,-0.54102 0.63862,-5e-5 1.12246,0.20455 1.45898,0.54102 0.33653,0.33646 0.54145,0.82028 0.54102,1.45898 v 1.98828 h 1 V 413 c 5.7e-4,-0.8613 -0.29537,-1.62751 -0.83398,-2.16602 C 415.62741,410.29548 414.86093,409.99994 414,410 Z" id="path5921" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccccccc"/>
<path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 324.5,605 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 5 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 7 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -5 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 2.5,2 h 1 1 v 1 1 h -1 v -1 h -1 z" transform="translate(86,-190)" id="path5923"/>
</g>
+ <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 342.5,158 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 13 c 3e-5,0.27613 0.22387,0.49997 0.5,0.5 h 13 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -13 c -3e-5,-0.27613 -0.22387,-0.49997 -0.5,-0.5 z m 6.5,3 c 2.20237,0 4,1.79764 4,4 0,2.20237 -1.79763,4 -4,4 -2.20236,0 -4,-1.79763 -4,-4 0,-2.20236 1.79764,-4 4,-4 z" id="rect13348"/>
+ <g id="g15500" style="display:inline;enable-background:new">
+ <path style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" d="m 397.5,161.5 v -3 h -13 v 3 z m -13,7 v 3 h 5 8 v -3 z" id="path15496" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccc"/>
+ <circle style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="circle15498" cx="391" cy="165" r="2.000005"/>
+ </g>
+ <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new" d="m 493.5,487 c -0.82251,0 -1.5,-0.6775 -1.5,-1.5 v -8 c 10e-6,-0.41125 0.16922,-0.78445 0.44141,-1.05664 C 492.71359,476.17117 493.08875,476 493.5,476 h 0.5 c 0.45232,0 1,-0.47106 1,-0.99805 0,-0.26349 -0.1383,-0.51259 -0.33203,-0.69726 C 494.47455,474.121 494.22499,474 494,474 v 0.5 c -3e-5,0.27613 -0.22387,0.49997 -0.5,0.5 -1.38664,0 -2.5,1.11336 -2.5,2.5 v 4 0.5 h -1.5 c -0.27613,-3e-5 -0.49997,-0.22387 -0.5,-0.5 v -8 c 3e-5,-0.27613 0.22387,-0.49997 0.5,-0.5 h 4 0.5 c 1.04866,10e-4 2,0.8716 2,2.00195 V 477 h -0.5 -1.5 -0.5 c -0.28206,0 -0.5,0.21794 -0.5,0.5 0,0.28206 0.21794,0.5 0.5,0.5 h 9 c 0.27613,3e-5 0.49997,0.22387 0.5,0.5 v 2.5 h -2 v 3 h 2 v 2.5 c -3e-5,0.27613 -0.22387,0.49997 -0.5,0.5 z m -0.5,-1 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m -8,-2 h 3 v -3 h -3 z m 4,0 h 3 v -3 h -3 z m -4,-4 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z m 2,0 h 1 v -1 h -1 z" id="path13810" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" sodipodi:nodetypes="ssccsssccccsccccccccscccsssccccccccscccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"/>
+ <g transform="translate(-84.000014,21.00001)" style="display:inline;enable-background:new" id="g9974-4">
+ <path inkscape:connector-curvature="0" id="path14003" d="M 391.98438,535.98633 C 391.43286,535.99495 390.99245,536.44847 391,537 v 1.51367 c -10e-6,0.002 -10e-6,0.004 0,0.006 0.008,1.37595 0.83084,2.56107 2,3.125 V 548.5 c -0.0287,2.02848 3.02869,2.02848 3,0 v -6.85352 c 1.17556,-0.56682 2,-1.76346 2,-3.14648 V 537 c 0.0191,-1.35232 -2.01913,-1.35232 -2,0 v 1.5 c 0,0.11423 -0.0139,0.22371 -0.0371,0.33008 l -1.13281,1.13281 -0.66211,-0.002 -1.13086,-1.13086 c -0.0226,-0.10381 -0.0365,-0.2109 -0.0371,-0.32227 V 537 c 0.008,-0.56377 -0.45187,-1.02247 -1.01562,-1.01367 z M 394,548 h 1 v 1 h -1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" d="M 387.00001,542 387,536.5 c 0.004,-0.28226 -0.22555,-0.51223 -0.50781,-0.50781 -0.27614,0.004 -0.49651,0.23167 -0.49219,0.50781 l 10e-6,5.5 z m -1,1 H 384.5 c -0.67616,-0.01 -0.67616,1.00956 0,1 h 0.75001 v 1.25 h 2.5 V 544 H 388.5 c 0.67616,0.01 0.67616,-1.00956 0,-1 H 387 Z m -0.75,2 c -0.75,0 -1.25,0.5 -1.25,1.25 L 384,547.5 c -10e-6,0.78517 0.31169,1.44054 0.78516,1.86719 0.47346,0.42664 1.08725,0.63281 1.69726,0.63281 0.61001,0 1.22902,-0.20449 1.71094,-0.62891 0.48192,-0.42441 0.80663,-1.08156 0.80664,-1.87109 l 10e-6,-1.25 c 0,-0.75 -0.5,-1.25 -1.25,-1.25 h -1.25 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" id="path14013" sodipodi:nodetypes="cccccccccccccccccccscscscccc"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g14135" transform="translate(696.99456,-488.99997)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <g id="g14103">
+ <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path14068" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m -563.5,611.49287 v 5 m 1,-6 h 5 m -5,6.99995 h 5 m 1,-0.99995 v -5"/>
+ <path inkscape:connector-curvature="0" id="path14078" d="m -562.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
+ <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,618.49999 v -2 h -2 v 2 z" id="path14080" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path14083" d="m -555.5,618.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
+ <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,611.49999 v -2 h -2 v 2 z" id="path14093" inkscape:connector-curvature="0"/>
+ </g>
+ <g style="opacity:0.6" transform="translate(4,-4)" id="g14122">
+ <path d="m -563.5,611.49287 v 1 m 1,-2 h 5 m -1,6.99995 h 1 m 1,-0.99995 v -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path14105" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/>
+ <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -562.5,611.49999 v -2 h -2 v 2 z" id="path14109" inkscape:connector-curvature="0"/>
+ <path sodipodi:nodetypes="ccccc" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" d="m -555.5,618.49999 v -2 h -2 v 2 z" id="path14118" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path14120" d="m -555.5,611.49999 v -2 h -2 v 2 z" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
+ <path inkscape:connector-curvature="0" id="path16212" d="m -563.49456,616.49997 -1.00544,2e-5 v 2 h 2 l 0.005,-1.00002" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
+ </g>
+ </g>
+ <g style="display:inline;enable-background:new" id="g20455" transform="rotate(-180,359.49632,417.00345)">
+ <path inkscape:connector-curvature="0" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 281.49288,332.50712 2,-2 h 5 v 5 l -2,2 h -5 z" id="path20447" sodipodi:nodetypes="ccccccc" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
+ <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" sodipodi:nodetypes="ccccccc" id="path20449" d="m 279.5,331.25 4.75,-4.75 8.24288,0.007 0.007,8.24288 -4.75,4.75 -8.25712,0.007 z" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g15543" transform="translate(42,-41.999994)">
+ <g id="g15520" transform="translate(231.99999,-397.99995)" style="display:inline;opacity:0.6;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path15514" d="m 155.5,493.5 8.00001,2e-5 v 3.99993 m -6.75,9 -4.25,7e-5 -1e-5,-7.9929" style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="cccccc"/>
+ <path inkscape:connector-curvature="0" id="path15517" d="m 152.5,496.5 h 3 v -3 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" sodipodi:nodetypes="cccc"/>
+ </g>
+ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:1;stroke-width:1.25111365;enable-background:new" transform="matrix(-0.79928788,0,0,0.79928788,686.43544,-75.73586)" id="g12909-3">
+ <path inkscape:connector-curvature="0" id="path12903-0" d="m 366.49554,222.99332 c -1.65832,0 -2.50221,0.8439 -2.50222,2.50222 0,1.65833 0.8439,2.50223 2.50222,2.50223 1.65833,0 2.50223,-0.8439 2.50223,-2.50223 -10e-6,-1.65832 -0.84391,-2.50222 -2.50223,-2.50222 z m 0,1.00089 c 0.82915,1e-5 1.50131,0.67217 1.50131,1.50132 0,0.82916 -0.67215,1.50133 -1.50131,1.50134 -0.82916,0 -1.50133,-0.67218 -1.50133,-1.50134 10e-6,-0.82916 0.67217,-1.50132 1.50133,-1.50132 z" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.25111353;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" sodipodi:nodetypes="cccccccccc"/>
+ <circle r="2.7854042" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.25111365;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="circle12905-5" cx="366.47485" cy="225.52515"/>
+ <path inkscape:connector-curvature="0" d="M 364.61887,227.37222 362.75,229.25 m 5.62222,-1.87778 L 370.25,229.25 M 368.37222,223.61887 370.25,221.75 m -5.63113,1.86887 L 362.75,221.75 m 3.74554,6.56055 0.004,2.18945 m -2.81946,-5.00446 h -2.18945 M 366.5,220.5 l -0.004,2.18054 m 2.81501,2.815 2.18945,0.004" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.25111365;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path12907-2" sodipodi:nodetypes="cccccccccccccccc"/>
+ </g>
+ </g>
+ <g style="display:inline;enable-background:new" id="g15412" transform="translate(106,1e-5)">
+ <path style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 426.5,558 a 0.50004997,0.50004997 0 0 0 -0.5,0.5 v 12 a 0.50004997,0.50004997 0 0 0 0.5,0.5 h 10 a 0.50004997,0.50004997 0 0 0 0.5,-0.5 v -4.37891 l -1,1 V 570 h -9 v -11 h 4.87891 l 1,-1 z" id="rect15389" inkscape:connector-curvature="0"/>
+ <path sodipodi:nodetypes="ccccccccccc" inkscape:connector-curvature="0" id="path15387" d="m 435.5,557.5 v 2 h 2 v 2 h 2 l -6,6 v -2 h -2 v -2 h -2 z" style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g15564-8" transform="translate(-238,-111)">
+ <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 301.5,305 c -0.82235,0 -1.5,0.67765 -1.5,1.5 v 5 c 0,0.82235 0.67765,1.5 1.5,1.5 h 0.5 v -2 h -0.5 c -0.67616,0.01 -0.67616,-1.01 0,-1 h 11 c 0.67616,-0.01 0.67616,1.01 0,1 H 312 v 2 h 0.5 c 0.82235,0 1.5,-0.67765 1.5,-1.5 v -5 c 0,-0.82235 -0.67765,-1.5 -1.5,-1.5 H 312 302 Z m 10.5,1 a 1,1 0 0 1 1,1 1,1 0 0 1 -1,1 1,1 0 0 1 -1,-1 1,1 0 0 1 1,-1 z" transform="translate(70,363)" id="path15558-1"/>
+ <path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path15562-6" d="m 380.5,674 v 7.5 h -7 V 674" style="display:inline;opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/>
+ </g>
+ <g style="display:inline;opacity:1;enable-background:new" id="g15578-7" transform="translate(894.00002,333.00003)">
+ <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path15572-4" d="m -465.50001,296.49999 -1.00001,-2e-5 v -8 h 8 l 1e-5,1.00002" style="display:inline;opacity:0.6;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
+ <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path15574-3" d="m -455.50002,291.49995 1e-5,4.75002 -3.25,3.25 -4.75001,-2e-5 v -8 z" style="display:inline;opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="cccccc"/>
+ <path inkscape:connector-curvature="0" id="path15576-7" d="m -455.75001,296.49997 h -2.75 v 2.75" style="display:inline;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccc"/>
+ </g>
+ <g transform="translate(-11,-778)" style="display:inline;enable-background:new" id="g16284-6">
+ <path inkscape:connector-curvature="0" id="path16192-3" d="m 166.25,1316 v 1 H 167 v 1 h -0.75 v 1 H 169 v 4 h -2.75 v 1 H 167 v 1 h -0.75 v 1 h 11.25 c 0.27613,0 0.49997,-0.2239 0.5,-0.5 v -9 c -3e-5,-0.2761 -0.22387,-0.5 -0.5,-0.5 z m 1.75,1 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m -6,2 h 3 v 4 h -3 z m 4,0 h 3 v 4 h -3 z m -6,5 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z m 2,0 h 1 v 1 h -1 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.8;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"/>
+ <path sodipodi:nodetypes="cccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path16225-3" d="m 164.49219,1313.9922 c -0.27614,0 -0.4965,0.2317 -0.49219,0.5078 v 1.5 h 1 v -1.5 c 0.004,-0.2823 -0.22555,-0.5122 -0.50781,-0.5078 z M 164,1317 v 2 h 1 v -2 z m 0,3 v 2 h 1 v -2 z m 0,3 v 2 h 1 v -2 z m 0,3 v 1.5 c -0.01,0.6762 1.00956,0.6762 1,0 v -1.5 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:square;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"/>
+ </g>
+ <g transform="translate(0,1e-5)" style="display:inline;opacity:0.6;enable-background:new" id="g15908">
+ <g transform="translate(-77.99975,31.00025)" id="g15904">
+ <path inkscape:connector-curvature="0" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 702.49805,1150.998 c -0.27613,10e-5 -0.49997,0.2239 -0.5,0.5 v 12 c 3e-5,0.2762 0.22387,0.5 0.5,0.5 h 10 c 0.27613,0 0.49997,-0.2238 0.5,-0.5 v -4.0019 c -2.1e-4,-0.9362 -0.57149,-1.7779 -1.14453,-2.3496 l -5.00196,-5.002 c -0.57045,-0.5704 -1.4115,-1.1408 -2.34765,-1.1445 h -0.002 z m 1.93945,0.9981 a 0.50005,0.50005 0 0 1 0.0508,0 0.50005,0.50005 0 0 1 0.23828,0.068 c 0.78325,0.4432 1.26758,1.2757 1.26758,2.1757 a 0.50005,0.50005 0 0 1 0,0.01 H 706 l -0.002,3.748 h 3.7207 a 0.50005,0.50005 0 0 1 0.0488,0 c 0.89236,0 1.71983,0.4772 2.16601,1.25 a 0.50050437,0.50050437 0 1 1 -0.86718,0.5 c -0.26835,-0.4648 -0.76213,-0.75 -1.29883,-0.75 a 0.50005,0.50005 0 0 1 -0.0176,0 v 0 h -4.25195 a 0.50005,0.50005 0 0 1 -0.5,-0.5 l 0.002,-4.1835 a 0.50005,0.50005 0 0 1 -0.006,-0.074 c 0,-0.5413 -0.29061,-1.038 -0.76172,-1.3047 a 0.50005,0.50005 0 0 1 0.20508,-0.9394 z" transform="translate(-112.99831,-623.99859)" id="path15896"/>
+ </g>
+ <path inkscape:connector-curvature="0" d="m 520.00025,560.00025 v 1 h -1 v -1.00003 z m 0,-2 v 1 h -1 v -1.00003 z m 2,0 v 1 h -1 v -1.00003 z m 0,4 v 1 h -1 v -1.00003 z m 0,-2 v 1 h -1 v -1.00003 z m -4,-2 v 1 h -1 v -1.00003 z" style="display:inline;opacity:0.8;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;enable-background:new" id="path15906"/>
+ </g>
+ <g transform="translate(-583.99495,-390.00505)" id="g15882-7" style="display:inline;opacity:0.6;enable-background:new">
+ <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path15847-7" d="m 926.5,1002.5 3.75,-3.75" style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"/>
+ <path sodipodi:nodetypes="ccccccccccccccc" inkscape:connector-curvature="0" id="path15849-3" d="m 928.5,994.5 6,6 1,-1 v -3 l 3,-3 h 1 v 0 -1 l -3,-3 h -1 v 0 1 l -3,3 h -3 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+ </g>
+ <g transform="translate(-583.99495,-390.00505)" style="display:inline;enable-background:new" id="g16002-8">
+ <path style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1" d="m 947.5,1002.5 3.75,-3.75" id="path15876-9" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
+ <path inkscape:connector-curvature="0" id="path15878-8" d="m 956.5,989 c -0.27613,3e-5 -0.49997,0.22387 -0.5,0.5 v 0.79297 L 959.70703,994 H 960.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 v -1 c -2e-5,-0.1326 -0.0527,-0.25976 -0.14648,-0.35352 l -3,-3 C 957.75976,989.05271 957.6326,989.00002 957.5,989 Z m -1.20703,2 -2,2 H 950.5 c -0.1326,2e-5 -0.25976,0.0527 -0.35352,0.14648 l -1,1 c -0.19519,0.19527 -0.19519,0.51177 0,0.70704 l 6,5.99998 c 0.19527,0.1952 0.51177,0.1952 0.70704,0 l 1,-0.99998 c 0.0938,-0.0938 0.14646,-0.22092 0.14648,-0.35352 v -2.79297 l 2,-2 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ </g>
+ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" transform="translate(-21.000047,168)" id="g15951-6" style="display:inline;opacity:1;enable-background:new">
+ <path style="display:inline;overflow:visible;visibility:visible;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" d="m 37.5,347.5 h 3.000047 l -4.7e-5,3 m 0,7 4.7e-5,3.00005 L 37.5,360.5 m -7,0 -3,5e-5 V 357.5 m 0,-7 v -3 h 3" id="path15947-7" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccccccc"/>
+ <rect y="350.5" x="30.5" height="7" width="7" id="rect15949-3" style="display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g16385" transform="translate(-21,21.00001)">
+ <path id="path16351" d="m 118,95.5 c -3.58986,0 -6.5,2.41014 -6.5,6 1,1 3,2.5 6.5,2.5 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/>
+ <path inkscape:connector-curvature="0" id="path16353" d="M 111.49999,102 A 6.5000103,6.5000103 0 0 0 118,108.50001 6.5000103,6.5000103 0 0 0 124.50001,102 6.5000103,6.5000103 0 0 0 118,95.499994 6.5000103,6.5000103 0 0 0 111.49999,102 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" d="m 118.5,107.5 0.75,0.75 m -0.75,-3.75 2.75,2.75 m 2,-4 0.5,0.5 M 121,104 l 1.75,1.75" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.20000005;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path16355" sodipodi:nodetypes="cccccccc"/>
+ </g>
+ <g style="display:inline;opacity:1;enable-background:new" id="g15989" transform="translate(41.999953,147)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path sodipodi:nodetypes="cccccccccccc" inkscape:connector-curvature="0" id="path15985" d="m 37.5,347.5 h 3.000047 l -4.7e-5,3 m 0,7 4.7e-5,3.00005 L 37.5,360.5 m -7,0 -3,5e-5 V 357.5 m 0,-7 v -3 h 3" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/>
+ <rect style="display:inline;overflow:visible;visibility:visible;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate" id="rect15987" width="7" height="7" x="30.5" y="350.5"/>
+ </g>
+ <g transform="translate(-168,-294)" id="g16054" style="display:inline;enable-background:new">
+ <path id="path16048" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:type="arc" sodipodi:cx="349" sodipodi:cy="332" sodipodi:rx="5.4499998" sodipodi:ry="5.4499998" sodipodi:start="2.2267848" sodipodi:end="0.8546274" sodipodi:open="true" d="m 345.67581,336.31883 a 5.4499998,5.4499998 0 0 1 -1.8611,-5.9967 5.4499998,5.4499998 0 0 1 5.02132,-3.76966 5.4499998,5.4499998 0 0 1 5.23896,3.46083 5.4499998,5.4499998 0 0 1 -1.49707,6.09778"/>
+ <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 348.5,336.5 h -4.25 l -1.75,1.75 v 1.25 h 13 v -1.25 l -1.75,-1.75 h -2.25" id="path16050" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/>
+ <path sodipodi:open="true" d="m 346.19086,331.55765 a 2.84375,2.84375 0 0 1 2.35788,-2.36537" sodipodi:end="4.5530322" sodipodi:start="3.2977779" sodipodi:ry="2.84375" sodipodi:rx="2.84375" sodipodi:cy="332" sodipodi:cx="349" sodipodi:type="arc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" id="path16052"/>
+ </g>
+ <g transform="translate(420.00505,-159.00506)" style="display:inline;enable-background:new" id="g16147-6">
+ <circle style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="circle23264-7-0" r="6.4999924" cy="660" cx="-365"/>
+ <path style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="M -360.24999,655.25 -358.5,653.50001" id="path23266-0-5" inkscape:connector-curvature="0" sodipodi:nodetypes="cc"/>
+ <path inkscape:connector-curvature="0" id="path23268-3-2" d="m -371.5,666.50001 1.75001,-1.75001" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" sodipodi:nodetypes="cc"/>
+ <path style="display:inline;opacity:1;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new" d="m -368,654.00001 -1,0.99999 -2,2.00001 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 h 0.75 L -364,665 l 1,-1 1,-1 v -1 l -1,-1 -2,10e-6 h -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" id="path16039-7-7" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccccccccccccccccccc"/>
+ </g>
+ <g id="g16187" style="display:inline;enable-background:new" transform="translate(462.00505,-96.005057)">
+ <circle cx="-365" cy="660" r="6.4999924" id="circle16176" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.9999997;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path16179" d="M -360.24999,655.25 -358.5,653.50001" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path sodipodi:nodetypes="cc" style="opacity:0.98999999;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m -371.5,666.50001 1.75001,-1.75001" id="path16183" inkscape:connector-curvature="0"/>
+ <path sodipodi:nodetypes="ccccccccccccccccccccccccccccc" inkscape:connector-curvature="0" id="path16185" d="m -368,654.00001 -1,0.99999 -2,2.00001 1,1 1,1 v 2 h 2 v 1 l 1,1 v 2 h 0.75 L -364,665 l 1,-1 1,-1 v -1 l -1,-1 -2,10e-6 h -1 l -1,-1 h -1 l 1,-1 h 1 l 2,-2 -1,-1 h -1 l -1,-1 1,-1 v -0.5 z" style="display:inline;opacity:0.98999999;fill:#ffffff;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;enable-background:new"/>
+ </g>
+ <g style="display:inline;opacity:1;enable-background:new" id="g8419-9" transform="translate(1279.001,-241)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <rect style="display:inline;opacity:0;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:2;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new" id="rect8368-4" width="16" height="16" x="-1148" y="398"/>
+ <path sodipodi:open="true" d="m -1134.6106,405.3599 a 5.9994435,5.9994445 0 0 1 -3.1745,6.4904 5.9994435,5.9994445 0 0 1 -7.1129,-1.26844 5.9994435,5.9994445 0 0 1 -0.7352,-7.18762 5.9994435,5.9994445 0 0 1 6.7087,-2.68234" sodipodi:end="4.9782235" sodipodi:start="6.091884" sodipodi:ry="5.9994445" sodipodi:rx="5.9994435" sodipodi:cy="406.50061" sodipodi:cx="-1140.5006" sodipodi:type="arc" style="display:inline;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;enable-background:new" id="ellipse8370-9" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90"/>
+ <rect ry="1" rx="1" y="403.5" x="-1139.5" height="2" width="2" id="rect8385-9" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
+ <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path8387-7" d="m -1137.75,403.75 3.749,-3.75" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+ </g>
+ <g id="g15336" style="display:inline;opacity:0.6;enable-background:new">
+ <path sodipodi:nodetypes="sssss" inkscape:connector-curvature="0" id="path13329" d="m 369.99998,160.99999 c -2.20236,0 -4,1.79764 -4,4 0,2.20237 1.79764,4 4,4 2.20237,0 4,-1.79763 4,-4 0,-2.20236 -1.79763,-4 -4,-4 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:new"/>
+ <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="rect13350" d="m 363.5,158.5 h 13 v 13 h -13 z" style="display:inline;opacity:0.3;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g23051-0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96" transform="translate(210,20.999991)">
+ <path inkscape:connector-curvature="0" id="path23043-3" d="m 33.5,381.5 v -13" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" sodipodi:nodetypes="cc"/>
+ <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 30.5,371.5 3,-3 3,3" id="path23047-2" inkscape:connector-curvature="0" sodipodi:nodetypes="ccc"/>
+ <path inkscape:connector-curvature="0" id="path22616-9" d="m 31.5,381.5 h 2 2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" sodipodi:nodetypes="ccc"/>
+ </g>
+ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g22966-4" transform="translate(-504,167.99288)" style="display:inline;opacity:1;enable-background:new">
+ <path sodipodi:nodetypes="ccccccc" d="m 870.49995,221.50711 h 10 v 10.00001 l -3,3 h -10 v -10.00001 z" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path22960-9" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path22963-0" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="M 877.49995,224.50711 880.5,221.5 m -13.00005,3.00712 h 10 v 10" sodipodi:nodetypes="ccccc"/>
+ <path sodipodi:nodetypes="ccccc" d="m 870.50001,231.5 -3.00006,3.00711 M 880.50001,231.5 h -10 v -10" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="path23055-1" inkscape:connector-curvature="0"/>
+ </g>
+ <g transform="translate(-327,477.99999)" style="display:inline;enable-background:new" id="g16423-6">
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 724.5001,-81.99991 A 6.5000907,6.5000907 0 0 1 718,-75.49982 6.5000907,6.5000907 0 0 1 711.4999,-81.99991 6.5000907,6.5000907 0 0 1 718,-88.5 a 6.5000907,6.5000907 0 0 1 6.5001,6.50009 z" id="path22958-5" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
+ <g transform="translate(327,-415)" id="g23066-1" style="display:inline;enable-background:new">
+ <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:connector-curvature="0" id="path23059-7" d="m 397.50009,333.0001 c 0,1.38076 -2.91019,2.50009 -6.50009,2.50009 -3.5899,0 -6.50009,-1.11933 -6.50009,-2.50009" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" sodipodi:nodetypes="csc"/>
+ <path sodipodi:nodetypes="csc" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.5;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 397.50009,333.00009 c 0,-1.38076 -2.91019,-2.50009 -6.50009,-2.50009 -3.5899,0 -6.50009,1.11933 -6.50009,2.50009" id="path23061-5" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
+ <path inkscape:transform-center-x="1.250145" sodipodi:nodetypes="csc" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 390.9999,339.50009 c -1.38076,0 -2.50009,-2.91019 -2.50009,-6.50009 0,-3.5899 1.11933,-6.50009 2.50009,-6.50009" id="path23074-1" inkscape:connector-curvature="0" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
+ </g>
+ </g>
+ <g transform="translate(-348,477.99999)" style="display:inline;enable-background:new" id="g16413-1">
+ <path sodipodi:nodetypes="ccsssccc" inkscape:connector-curvature="0" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 759.5,-88.5 -5.75,8.49999 c -0.1702,0.31279 -0.25,0.65756 -0.25,1 0,1.933 2.9102,3.5 6.5,3.5 3.5898,0 6.5,-1.567 6.5,-3.5 0,-0.34545 -0.077,-0.68479 -0.25,-1 L 760.5,-88.5 Z" id="path22956-5" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96"/>
+ <path inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="path23072-3" d="m 766.5,-78.75 c 0,-1.38127 -2.9102,-2.74949 -6.5,-2.74949 -3.5898,0 -6.5,1.36822 -6.5,2.74949" style="display:inline;opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" inkscape:connector-curvature="0" sodipodi:nodetypes="csc"/>
+ </g>
+ <g transform="translate(147)" inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g12973-3-2" style="display:inline;enable-background:new">
+ <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12961-3-0" d="m 31.5,377.5 -4.00005,4.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path inkscape:connector-curvature="0" id="path12963-9-4" d="m 31.5,377.5 h 9" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 31.5,377.5 v -9" id="path12965-4-0" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path12967-0-0" d="m 27.5,378.5 v 3 h 3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path inkscape:connector-curvature="0" id="path12969-3-7" d="m 29.5,370.5 2,-2 2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path inkscape:connector-curvature="0" id="path12971-9-7" d="m 38.5,375.5 2,2 -2,2" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ </g>
+ <g style="display:inline;opacity:1;enable-background:new" id="g5294-1" transform="translate(41.99999,-357)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 434.5,543 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" id="path5168-0" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path5260-6" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="M 433.50001,547.5 H 433 c -2.50853,0 -4.5,-2.01446 -4.5,-4.5 0,-2.48553 1.99147,-4.5009 4.5,-4.5009 l 0.50001,9e-4 m 0,9 h 6 z m 0,-9 h 6 z"/>
+ <path id="path12602" style="opacity:0.5;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="M 433.50001,536.5 H 433 c -2.32223,0 -4.46806,1.23889 -5.62917,3.25 -1.16111,2.01111 -1.16111,4.48889 0,6.5 1.16111,2.01111 3.30694,3.25 5.62917,3.25 h 0.50001 m 0,0 h 6 z m 0,-13 h 6 z" inkscape:connector-curvature="0" sodipodi:nodetypes="cssssccccccc"/>
+ </g>
+ <g style="display:inline;opacity:1;enable-background:new" id="g16957-2" transform="matrix(0,-1,-1,0,556.00846,744.00467)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path16943-7" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path16945-5" d="m 468.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,358.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path16947-3" inkscape:connector-curvature="0"/>
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path16949-6" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path16951-1" d="m 469.49998,349.5 2e-5,5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
+ <path inkscape:connector-curvature="0" id="path16953-0" d="m 478.5,358.5 h -5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
+ <path inkscape:connector-curvature="0" id="path16955-3" d="m 472.5,355.5 4.99998,-5" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g15967">
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:0.99999994;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 246.5,564 a 2.5000002,2.5000002 0 0 1 -2.5,2.5 2.5000002,2.5000002 0 0 1 -2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,-2.5 2.5000002,2.5000002 0 0 1 2.5,2.5 z" id="path17035" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path17037" d="m 250.5,559 a 1.5000001,1.5000001 0 0 1 -1.5,1.5 1.5000001,1.5000001 0 0 1 -1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,-1.5 1.5000001,1.5000001 0 0 1 1.5,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.7;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path d="m 249.46062,567.52564 a 6.4999542,6.4999495 0 0 1 -8.41803,2.26242 6.4999542,6.4999495 0 0 1 -3.09939,-8.14711 6.4999542,6.4999495 0 0 1 7.79322,-3.90479" sodipodi:open="true" sodipodi:end="4.9828172" sodipodi:start="0.57332633" sodipodi:ry="6.4999495" sodipodi:rx="6.4999542" sodipodi:cy="563.99988" sodipodi:cx="244" sodipodi:type="arc" id="path17043" style="opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"/>
+ </g>
+ <g transform="matrix(0,-1,-1,0,577,1038)" id="g12586" style="display:inline;opacity:1;enable-background:new" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path inkscape:connector-curvature="0" id="path12572" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <g id="g23031" style="opacity:0.7">
+ <path inkscape:connector-curvature="0" id="path12574" d="m 468.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 478.49998,358.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" id="path12576" inkscape:connector-curvature="0"/>
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" id="path12578" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path12580" d="m 469.49998,349.5 2e-5,5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
+ <path inkscape:connector-curvature="0" id="path12582" d="m 478.5,358.5 h -5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
+ <path inkscape:connector-curvature="0" id="path12584" d="m 472.5,355.5 4.99998,-5" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" sodipodi:nodetypes="cc"/>
+ </g>
+ </g>
+ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" style="display:inline;opacity:1;enable-background:new" id="g23365" transform="matrix(0,-1,-1,0,640,975)">
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 467.5,358.49999 a 1.9999902,1.9999902 0 0 0 1.99999,1.99999 1.9999902,1.9999902 0 0 0 1.99999,-1.99999 A 1.9999902,1.9999902 0 0 0 469.49999,356.5 1.9999902,1.9999902 0 0 0 467.5,358.49999 Z" id="path23346" inkscape:connector-curvature="0"/>
+ <g style="opacity:0.7" id="g23363">
+ <path style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" d="m 468.49997,348.50001 a 1.0000051,1.0000051 0 0 0 1.00001,1 1.0000051,1.0000051 0 0 0 1,-1 1.0000051,1.0000051 0 0 0 -1,-1.00001 1.0000051,1.0000051 0 0 0 -1.00001,1.00001 z" id="path23349" inkscape:connector-curvature="0"/>
+ <path inkscape:connector-curvature="0" id="path23351" d="m 478.49998,358.5 a 1.0000001,1.0000001 0 0 0 1,1 1.0000001,1.0000001 0 0 0 1,-1 1.0000001,1.0000001 0 0 0 -1,-1 1.0000001,1.0000001 0 0 0 -1,1 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path inkscape:connector-curvature="0" id="path23355" d="m 477.49998,348.99999 a 1.5000101,1.5000098 0 0 0 1.50001,1.50001 1.5000101,1.5000098 0 0 0 1.50001,-1.50001 1.5000101,1.5000098 0 0 0 -1.50001,-1.5 1.5000101,1.5000098 0 0 0 -1.50001,1.5 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 469.49998,349.5 2e-5,5" id="path23357" inkscape:connector-curvature="0"/>
+ <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 478.5,358.5 h -5" id="path23359" inkscape:connector-curvature="0"/>
+ <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 472.5,355.5 4.99998,-5" id="path23361" inkscape:connector-curvature="0"/>
+ </g>
+ </g>
+ <g transform="translate(-21.00225)" style="display:inline;stroke:#ffffff;enable-background:new" id="g13169-8-6" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path inkscape:connector-curvature="0" id="path13150-5-2" style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 473.5014,58.5 v 7 m -2,-8 v 7 m 4,-5 v 7 m -6,-10 v 7"/>
+ <path d="m 475.5014,57.5 -10e-4,0.25 m -1.9986,-1.25 -10e-4,0.25 m 4.0014,1.75 v 7 m -6,-10 -0.001,0.25" style="display:inline;opacity:0.9;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path13154-7-3" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/>
+ <path sodipodi:nodetypes="cccccccc" inkscape:connector-curvature="0" id="path13161-0-0" style="display:inline;opacity:0.8;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" d="m 477.5014,56.5 -10e-4,0.25 m -1.9986,-1.25 -10e-4,0.25 m 4.0014,1.75 v 7 m -6,-10 -0.001,0.25"/>
+ <path d="m 479.5014,55.5 -10e-4,0.25 m -1.9986,-1.25 -10e-4,0.25 m 4.0014,1.75 v 7 m -6,-10 -0.001,0.25" style="display:inline;opacity:0.7;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:0.99999964;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:new" id="path13163-4-8" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc"/>
+ </g>
+ <g style="display:inline;enable-background:new" transform="translate(126,441)" id="g13710" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 406.75,66.5 h 10.5 c 1,0 1.79167,-1.25 0.75,-2.5 l -4.5,-5.5 v -3 l 1,-1 v -1 h -5 v 1 l 1,1 v 3 L 406,64 c -1,1.25 -0.25,2.5 0.75,2.5 z" id="path13700" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccccc"/>
+ <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 410,62.5 -1.75,2 h 7.5 l -1.75,-2 z" id="path13708" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc"/>
+ </g>
+ <g style="display:inline;enable-background:new" id="g16377" transform="translate(-217,44.000001)">
+ <path id="path16340" d="m 589,450 c -1.09935,0 -2,0.90065 -2,2 v 0.42969 c 0.73665,0.57364 1.18952,1.45204 1.23438,2.41601 C 588.47082,454.9447 588.72885,455 589,455 h 1 c 1.09935,0 2,-0.90065 2,-2 v -1 c 0,-1.09935 -0.90065,-2 -2,-2 z m 2.58789,6.00586 c -0.28431,-0.0492 -0.58776,0.16015 -0.58789,0.49414 0,0.25 -0.25,0.5 -0.5,0.5 h -2 c -0.25,0 -0.5,-0.25 -0.5,-0.5 v 0.5 c 0,0.36306 -0.26134,0.68419 -0.44336,0.93555 l 0.004,0.004 c 0.41161,0.41161 0.88215,0.75715 1.375,1.25 0.40738,0.40739 0.86402,1.03976 1.01172,1.81055 H 593.5 c 0.27613,-3e-5 0.49997,-0.22387 0.5,-0.5 V 459 c 0,-0.66667 -0.3572,-1.18923 -0.77148,-1.60352 -0.41429,-0.41428 -0.90447,-0.77946 -1.375,-1.25 -0.0788,-0.0787 -0.17086,-0.12422 -0.26563,-0.14062 z" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" inkscape:connector-curvature="0" sodipodi:nodetypes="ssccsssssscccccccsccccsccc"/>
+ <path d="m 580.5,463.5 h 8 V 462 c 0,-1 -1,-1.5 -2,-2.5 0.0142,0.44837 -0.5,1 -1,1 h -2 c -0.5,0 -0.99931,-0.50922 -1,-1 -1,1 -2,1.5 -2,2.5 z m 3.5,-10 h 1 c 0.831,0 1.5,0.669 1.5,1.5 v 1 c 0,0.831 -0.669,1.5 -1.5,1.5 h -1 c -0.831,0 -1.5,-0.669 -1.5,-1.5 v -1 c 0,-0.831 0.669,-1.5 1.5,-1.5 z" style="fill:#ffffff;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" id="path16332" inkscape:connector-curvature="0" sodipodi:nodetypes="ccsccccscsssssssss"/>
+ </g>
+ <path id="path6081" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="m 453.75,465.5 c -2.25,-2 -6.25,-5.75 -6.25,-9.5 0,-4.5 5.5,-4.5 6.25,-0.5 h 0.5 c 0.75,-4 6.25,-4 6.25,0.5 0,3.75 -4,7.5 -6.25,9.5 z" inkscape:connector-curvature="0" sodipodi:nodetypes="csccscc"/>
+ <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke" d="M 471.34375,452.5625 C 469.875,452.625 468.5,453.75 468.5,456 c 0,1.18095 0.3979,2.36198 1.01172,3.48828 L 473.5,455.5 l 2,2 3,-3 2.83594,2.83594 C 481.43966,456.89236 481.5,456.44653 481.5,456 c 0,-4.5 -5.5,-4.5 -6.25,-0.5 h -0.5 c -0.375,-2 -1.9375,-3 -3.40625,-2.9375 z M 478.5,458.5 l -3,3 -2,-2 -2.34766,2.34766 c 1.20452,1.46494 2.57655,2.74468 3.59766,3.65234 h 0.5 c 1.40784,-1.25142 3.4996,-3.18786 4.86914,-5.38086 z" id="path6086" inkscape:connector-curvature="0"/>
+ <g style="display:inline;enable-background:new" id="g16467" transform="translate(-221.99998,478)">
+ <g style="display:inline;enable-background:new" id="g12626-8" transform="translate(726.00003,-499.00001)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12181-0" d="m 30.5,378.5 -3.00005,3.00001" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path sodipodi:nodetypes="cc" inkscape:connector-curvature="0" id="path12186-9" d="m 30.5,378.5 h 10" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ <path sodipodi:nodetypes="cc" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" d="m 30.5,378.5 v -10" id="path12205-4" inkscape:connector-curvature="0"/>
+ </g>
+ <g transform="matrix(-1,0,0,1,1420,227.99979)" id="g8805-9" style="display:inline;opacity:0.98999999;enable-background:new">
+ <path sodipodi:nodetypes="ccc" inkscape:connector-curvature="0" id="path8743-5" d="m 653.5,-350.49979 v -8 h 8" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:0.6;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path8759-7" d="m 661.75,-350.49979 -2.25,-4 -2.25,4 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+ <circle r="0.5" cy="-355.99979" cx="656" id="circle8761-0" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ </g>
+ </g>
+ <g style="display:inline;enable-background:new" id="g16449" transform="translate(-284.99998,478)">
+ <g style="display:inline;opacity:1;enable-background:new" id="g15951-6-3" transform="translate(746.99995,-478)" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" inkscape:export-xdpi="96" inkscape:export-ydpi="96">
+ <path sodipodi:nodetypes="cccccccccccc" inkscape:connector-curvature="0" id="path15947-7-2" d="m 37.5,347.5 h 3.000047 l -4.7e-5,3 m 0,7 4.7e-5,3.00005 L 37.5,360.5 m -7,0 -3,5e-5 V 357.5 m 0,-7 v -3 h 3" style="display:inline;overflow:visible;visibility:visible;opacity:0.6;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"/>
+ </g>
+ <g transform="matrix(-1,0,0,1,1439,229.99979)" id="g8805-98" style="display:inline;opacity:0.98999999;enable-background:new">
+ <path sodipodi:nodetypes="ccccc" inkscape:connector-curvature="0" id="path8743-9" d="m 653.5,-358.49979 h 9 v 9 h -9 z" style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/>
+ <path sodipodi:nodetypes="cccc" inkscape:connector-curvature="0" id="path8759-74" d="m 662.25,-349.99979 -2.75,-5.5 -3,5.5 z" style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"/>
+ <circle r="0.5" cy="-355.99979" cx="656" id="circle8761-3" style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none"/>
+ </g>
+ </g>
+ <g style="display:inline;enable-background:new" id="g16457" transform="translate(-284.99998,478)">
+ <g inkscape:export-ydpi="96" inkscape:export-xdpi="96" inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png" id="g7406-1-2-5" transform="translate(347.99997,-290.00356)" style="display:inline;opacity:1;enable-background:new">
+ <path inkscape:connector-curvature="0" inkscape:export-ydpi="90" inkscape:export-xdpi="90" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" id="path7395-0-0-3" d="m 460.49999,168.5 h -13 v -9 l 13.00002,-1e-5 z" style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" sodipodi:nodetypes="ccccc"/>
+ <path sodipodi:nodetypes="cccccc" style="display:inline;fill:none;fill-opacity:1;fill-rule:evenodd;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;enable-background:new" d="m 450.49999,172.5 h 7 m -2.99997,5e-5 v -2 h -1 v 2" id="path7416-1-8-5" inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png" inkscape:export-xdpi="90" inkscape:export-ydpi="90" inkscape:connector-curvature="0"/>
+ </g>
+ <g style="display:inline;opacity:0.98999999;enable-background:new" id="g16437" transform="matrix(-1,0,0,1,1460,227.99979)">
+ <path style="opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.89999998;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" d="m 662.25,-349.99979 -2.75,-5.5 -3,5.5 z" id="path16433" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc"/>
+ <circle style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none" id="circle16435" cx="655" cy="-355.99979" r="0.5"/>
+ </g>
+ </g>
</g>
<g inkscape:groupmode="layer" id="layer2" inkscape:label="TRACKING">
<g id="g16331" style="fill:#ffcc00">
@@ -5836,14 +6033,11 @@
<text inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381" id="text16123" y="340" x="5.8695679" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="340" x="5.8695679" id="tspan16121" sodipodi:role="line">D</tspan></text>
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="26.869568" y="340" id="text16127" inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423"><tspan sodipodi:role="line" id="tspan16125" x="26.869568" y="340" style="fill:#ffcc00;stroke-width:0.99999988">E</tspan></text>
<text inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381" id="text16131" y="340" x="49.869568" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="340" x="49.869568" id="tspan16129" sodipodi:role="line">F</tspan></text>
- <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="404.86957" y="403" id="text16135" inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423"><tspan sodipodi:role="line" id="tspan16133" x="404.86957" y="403" style="fill:#ffcc00;stroke-width:0.99999988">G</tspan></text>
- <text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="361.86957" y="507" id="text16151" inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423"><tspan sodipodi:role="line" id="tspan16149" x="361.86957" y="507" style="fill:#ffcc00;stroke-width:0.99999988">M</tspan></text>
<text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16155" y="529" x="194.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="529" x="194.86957" id="tspan16153" sodipodi:role="line">N</tspan></text>
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="215.86957" y="529" id="text16159" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16157" x="215.86957" y="529" style="fill:#ffcc00;stroke-width:0.99999988">O</tspan></text>
<text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16167" y="550" x="194.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="550" x="194.86957" id="tspan16165" sodipodi:role="line">P</tspan></text>
<text transform="scale(1.0088573,0.99122046)" xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:16.21410179px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="339.99878" y="553.21686" id="text16171" inkscape:transform-center-y="2.6620037" inkscape:transform-center-x="2.773985"><tspan sodipodi:role="line" id="tspan16169" x="339.99878" y="553.21686" style="fill:#ffcc00;stroke-width:0.99999988">Q</tspan><tspan id="tspan16173" sodipodi:role="line" x="339.99878" y="553.21686" style="fill:#ffcc00;stroke-width:0.99999988"/></text>
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="384.86957" y="550" id="text16177" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16175" x="384.86957" y="550" style="fill:#ffcc00;stroke-width:0.99999988">R</tspan></text>
- <text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16181" y="571" x="132.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="571" x="132.86957" id="tspan16179" sodipodi:role="line">S</tspan></text>
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="154.86957" y="571" id="text16185" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16183" x="154.86957" y="571" style="fill:#ffcc00;stroke-width:0.99999988">T</tspan></text>
<text inkscape:transform-center-x="3.1988381" inkscape:transform-center-y="3.1243423" id="text16189" y="571" x="174.86957" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" xml:space="preserve"><tspan style="fill:#ffcc00;stroke-width:0.99999988" y="571" x="174.86957" id="tspan16187" sodipodi:role="line">U</tspan></text>
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315727px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999988" x="279.86957" y="571" id="text16193" inkscape:transform-center-y="3.1243423" inkscape:transform-center-x="3.1988381"><tspan sodipodi:role="line" id="tspan16191" x="279.86957" y="571" style="fill:#ffcc00;stroke-width:0.99999988">V</tspan></text>
@@ -5857,4 +6051,4 @@
<text xml:space="preserve" style="font-style:normal;font-weight:normal;font-size:18.86315918px;line-height:0;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#ffcc00;fill-opacity:1;stroke:none;stroke-width:0.99999994" x="491.83517" y="634.06061" id="text16243" inkscape:transform-center-y="3.124405" inkscape:transform-center-x="3.1987998"><tspan sodipodi:role="line" id="tspan16241" x="491.83517" y="634.06061" style="fill:#ffcc00;stroke-width:0.99999994">?</tspan></text>
</g>
</g>
-</svg>
+</svg> \ No newline at end of file
diff --git a/release/datafiles/blender_icons16/icon16_30.dat b/release/datafiles/blender_icons16/icon16_30.dat
deleted file mode 100644
index 031fe465b23..00000000000
--- a/release/datafiles/blender_icons16/icon16_30.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_alembic.dat b/release/datafiles/blender_icons16/icon16_alembic.dat
index d0695d8d111..856639b190c 100644
--- a/release/datafiles/blender_icons16/icon16_alembic.dat
+++ b/release/datafiles/blender_icons16/icon16_alembic.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_border_lasso.dat b/release/datafiles/blender_icons16/icon16_border_lasso.dat
deleted file mode 100644
index f8e7d173090..00000000000
--- a/release/datafiles/blender_icons16/icon16_border_lasso.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_border_rect.dat b/release/datafiles/blender_icons16/icon16_border_rect.dat
deleted file mode 100644
index d20f4ce96ed..00000000000
--- a/release/datafiles/blender_icons16/icon16_border_rect.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat b/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat
index 11eba16ef8c..5be72bbdb9f 100644
--- a/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat
+++ b/release/datafiles/blender_icons16/icon16_clipuv_dehlt.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat b/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat
index 8f6532da1e1..f8aa93b6dea 100644
--- a/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat
+++ b/release/datafiles/blender_icons16/icon16_clipuv_hlt.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_community.dat b/release/datafiles/blender_icons16/icon16_community.dat
new file mode 100644
index 00000000000..f5aededb6e4
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_community.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_cone.dat b/release/datafiles/blender_icons16/icon16_cone.dat
new file mode 100644
index 00000000000..1437f963b22
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_cone.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_constraint_data.dat b/release/datafiles/blender_icons16/icon16_constraint_data.dat
deleted file mode 100644
index ef7bf561cc5..00000000000
--- a/release/datafiles/blender_icons16/icon16_constraint_data.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_cube.dat b/release/datafiles/blender_icons16/icon16_cube.dat
new file mode 100644
index 00000000000..56e12fb82a6
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_cube.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_dotsdown.dat b/release/datafiles/blender_icons16/icon16_dotsdown.dat
deleted file mode 100644
index e696794d69f..00000000000
--- a/release/datafiles/blender_icons16/icon16_dotsdown.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_dotsup.dat b/release/datafiles/blender_icons16/icon16_dotsup.dat
deleted file mode 100644
index d0bd1e0ab31..00000000000
--- a/release/datafiles/blender_icons16/icon16_dotsup.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_duplicate.dat b/release/datafiles/blender_icons16/icon16_duplicate.dat
index 5d2a2459882..1a899e843fd 100644
--- a/release/datafiles/blender_icons16/icon16_duplicate.dat
+++ b/release/datafiles/blender_icons16/icon16_duplicate.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_edit.dat b/release/datafiles/blender_icons16/icon16_edit.dat
deleted file mode 100644
index 8a6a122dc16..00000000000
--- a/release/datafiles/blender_icons16/icon16_edit.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_empty_arrows.dat b/release/datafiles/blender_icons16/icon16_empty_arrows.dat
new file mode 100644
index 00000000000..2db020c3be7
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_empty_arrows.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_gp_empty.dat b/release/datafiles/blender_icons16/icon16_empty_axis.dat
index 86936eae084..86936eae084 100644
--- a/release/datafiles/blender_icons16/icon16_gp_empty.dat
+++ b/release/datafiles/blender_icons16/icon16_empty_axis.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_empty_single_arrow.dat b/release/datafiles/blender_icons16/icon16_empty_single_arrow.dat
new file mode 100644
index 00000000000..296cff12fe5
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_empty_single_arrow.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_experimental.dat b/release/datafiles/blender_icons16/icon16_experimental.dat
new file mode 100644
index 00000000000..cf3cb4cdc75
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_experimental.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_external_data.dat b/release/datafiles/blender_icons16/icon16_external_data.dat
deleted file mode 100644
index 80be593729d..00000000000
--- a/release/datafiles/blender_icons16/icon16_external_data.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_facesel_hlt.dat b/release/datafiles/blender_icons16/icon16_facesel_hlt.dat
deleted file mode 100644
index 1fcffbe02f5..00000000000
--- a/release/datafiles/blender_icons16/icon16_facesel_hlt.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_fake_user.dat b/release/datafiles/blender_icons16/icon16_fake_user.dat
deleted file mode 100644
index c5c1710c456..00000000000
--- a/release/datafiles/blender_icons16/icon16_fake_user.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_fake_user_off.dat b/release/datafiles/blender_icons16/icon16_fake_user_off.dat
index e427ca03c12..e32d023cc91 100644
--- a/release/datafiles/blender_icons16/icon16_fake_user_off.dat
+++ b/release/datafiles/blender_icons16/icon16_fake_user_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_fake_user_on.dat b/release/datafiles/blender_icons16/icon16_fake_user_on.dat
index 114aea89c37..4f36bf6a900 100644
--- a/release/datafiles/blender_icons16/icon16_fake_user_on.dat
+++ b/release/datafiles/blender_icons16/icon16_fake_user_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_file_volume.dat b/release/datafiles/blender_icons16/icon16_file_volume.dat
new file mode 100644
index 00000000000..bd00c5f62fc
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_file_volume.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_fullscreen.dat b/release/datafiles/blender_icons16/icon16_fullscreen.dat
deleted file mode 100644
index 8b641e41ee4..00000000000
--- a/release/datafiles/blender_icons16/icon16_fullscreen.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_game.dat b/release/datafiles/blender_icons16/icon16_game.dat
deleted file mode 100644
index d9823bb0e0d..00000000000
--- a/release/datafiles/blender_icons16/icon16_game.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_gear.dat b/release/datafiles/blender_icons16/icon16_gear.dat
deleted file mode 100644
index 6052e4db88d..00000000000
--- a/release/datafiles/blender_icons16/icon16_gear.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_ghost.dat b/release/datafiles/blender_icons16/icon16_ghost.dat
deleted file mode 100644
index 4f16d1c449c..00000000000
--- a/release/datafiles/blender_icons16/icon16_ghost.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_go_left.dat b/release/datafiles/blender_icons16/icon16_go_left.dat
deleted file mode 100644
index 90648c555dd..00000000000
--- a/release/datafiles/blender_icons16/icon16_go_left.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat b/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat
deleted file mode 100644
index 5d9b10eef1a..00000000000
--- a/release/datafiles/blender_icons16/icon16_greasepencil_stroke_paint.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_heart.dat b/release/datafiles/blender_icons16/icon16_heart.dat
index c5c1710c456..0e9e0a1e7c1 100644
--- a/release/datafiles/blender_icons16/icon16_heart.dat
+++ b/release/datafiles/blender_icons16/icon16_heart.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_hide_off.dat b/release/datafiles/blender_icons16/icon16_hide_off.dat
index 1ebceb3288d..8af5120e068 100644
--- a/release/datafiles/blender_icons16/icon16_hide_off.dat
+++ b/release/datafiles/blender_icons16/icon16_hide_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_hide_on.dat b/release/datafiles/blender_icons16/icon16_hide_on.dat
index 8af5120e068..1ebceb3288d 100644
--- a/release/datafiles/blender_icons16/icon16_hide_on.dat
+++ b/release/datafiles/blender_icons16/icon16_hide_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_image_background.dat b/release/datafiles/blender_icons16/icon16_image_background.dat
new file mode 100644
index 00000000000..aa089a3948f
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_image_background.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_image_plane.dat b/release/datafiles/blender_icons16/icon16_image_plane.dat
new file mode 100644
index 00000000000..33f5101c4b7
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_image_plane.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_image_reference.dat b/release/datafiles/blender_icons16/icon16_image_reference.dat
new file mode 100644
index 00000000000..a694892f125
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_image_reference.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_imagefile.dat b/release/datafiles/blender_icons16/icon16_imagefile.dat
deleted file mode 100644
index d5dac564d06..00000000000
--- a/release/datafiles/blender_icons16/icon16_imagefile.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_inlink.dat b/release/datafiles/blender_icons16/icon16_inlink.dat
deleted file mode 100644
index a01348c4ef8..00000000000
--- a/release/datafiles/blender_icons16/icon16_inlink.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_lightpaint.dat b/release/datafiles/blender_icons16/icon16_lightpaint.dat
deleted file mode 100644
index 49abde94c6a..00000000000
--- a/release/datafiles/blender_icons16/icon16_lightpaint.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_link.dat b/release/datafiles/blender_icons16/icon16_link.dat
deleted file mode 100644
index df4b0211f29..00000000000
--- a/release/datafiles/blender_icons16/icon16_link.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_link_area.dat b/release/datafiles/blender_icons16/icon16_link_area.dat
deleted file mode 100644
index 75f7b6d4a81..00000000000
--- a/release/datafiles/blender_icons16/icon16_link_area.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_logic.dat b/release/datafiles/blender_icons16/icon16_logic.dat
deleted file mode 100644
index 2ce7bb15f54..00000000000
--- a/release/datafiles/blender_icons16/icon16_logic.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_man_rot.dat b/release/datafiles/blender_icons16/icon16_man_rot.dat
deleted file mode 100644
index b84df37a9c5..00000000000
--- a/release/datafiles/blender_icons16/icon16_man_rot.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_man_scale.dat b/release/datafiles/blender_icons16/icon16_man_scale.dat
deleted file mode 100644
index 301e42a764f..00000000000
--- a/release/datafiles/blender_icons16/icon16_man_scale.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_man_trans.dat b/release/datafiles/blender_icons16/icon16_man_trans.dat
deleted file mode 100644
index 260fab4f1ee..00000000000
--- a/release/datafiles/blender_icons16/icon16_man_trans.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_manipul.dat b/release/datafiles/blender_icons16/icon16_manipul.dat
deleted file mode 100644
index 91d33fa2dea..00000000000
--- a/release/datafiles/blender_icons16/icon16_manipul.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_matshaderball.dat b/release/datafiles/blender_icons16/icon16_matshaderball.dat
index 254f47ec1bd..5dbbd9158c0 100644
--- a/release/datafiles/blender_icons16/icon16_matshaderball.dat
+++ b/release/datafiles/blender_icons16/icon16_matshaderball.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_meta_empty.dat b/release/datafiles/blender_icons16/icon16_meta_empty.dat
deleted file mode 100644
index d7c94ae8f93..00000000000
--- a/release/datafiles/blender_icons16/icon16_meta_empty.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_mod_particles.dat b/release/datafiles/blender_icons16/icon16_mod_particles.dat
index 9376f765d5f..f84236d3ae5 100644
--- a/release/datafiles/blender_icons16/icon16_mod_particles.dat
+++ b/release/datafiles/blender_icons16/icon16_mod_particles.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_node_insert_top.dat b/release/datafiles/blender_icons16/icon16_node_insert_top.dat
deleted file mode 100644
index 0085af4c972..00000000000
--- a/release/datafiles/blender_icons16/icon16_node_insert_top.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_object_data.dat b/release/datafiles/blender_icons16/icon16_object_data.dat
index b9ac24f0253..c1ad1a48da1 100644
--- a/release/datafiles/blender_icons16/icon16_object_data.dat
+++ b/release/datafiles/blender_icons16/icon16_object_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_object_datamode.dat b/release/datafiles/blender_icons16/icon16_object_datamode.dat
index fad52577f1a..66b5a8fa103 100644
--- a/release/datafiles/blender_icons16/icon16_object_datamode.dat
+++ b/release/datafiles/blender_icons16/icon16_object_datamode.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_open_recent.dat b/release/datafiles/blender_icons16/icon16_open_recent.dat
deleted file mode 100644
index 40a0e332db3..00000000000
--- a/release/datafiles/blender_icons16/icon16_open_recent.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_orphan_data.dat b/release/datafiles/blender_icons16/icon16_orphan_data.dat
index fa5cddaadfe..4ff41f0a678 100644
--- a/release/datafiles/blender_icons16/icon16_orphan_data.dat
+++ b/release/datafiles/blender_icons16/icon16_orphan_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_outliner_data_pose.dat b/release/datafiles/blender_icons16/icon16_outliner_data_pose.dat
deleted file mode 100644
index 1a13a01a820..00000000000
--- a/release/datafiles/blender_icons16/icon16_outliner_data_pose.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_output.dat b/release/datafiles/blender_icons16/icon16_output.dat
new file mode 100644
index 00000000000..0f2d3ba4755
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_output.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_particle_data.dat b/release/datafiles/blender_icons16/icon16_particle_data.dat
index fec6c73fda6..c8ae91c15d7 100644
--- a/release/datafiles/blender_icons16/icon16_particle_data.dat
+++ b/release/datafiles/blender_icons16/icon16_particle_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_particles.dat b/release/datafiles/blender_icons16/icon16_particles.dat
index 23f9d049c2b..00a18636539 100644
--- a/release/datafiles/blender_icons16/icon16_particles.dat
+++ b/release/datafiles/blender_icons16/icon16_particles.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_physics.dat b/release/datafiles/blender_icons16/icon16_physics.dat
index 9f16b4ece6d..fa571134415 100644
--- a/release/datafiles/blender_icons16/icon16_physics.dat
+++ b/release/datafiles/blender_icons16/icon16_physics.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_pinned.dat b/release/datafiles/blender_icons16/icon16_pinned.dat
index c5a7b07a996..c82bb797f1e 100644
--- a/release/datafiles/blender_icons16/icon16_pinned.dat
+++ b/release/datafiles/blender_icons16/icon16_pinned.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_plug.dat b/release/datafiles/blender_icons16/icon16_plug.dat
deleted file mode 100644
index 198f47a35fc..00000000000
--- a/release/datafiles/blender_icons16/icon16_plug.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_pose_data.dat b/release/datafiles/blender_icons16/icon16_pose_data.dat
deleted file mode 100644
index b15edbbe82d..00000000000
--- a/release/datafiles/blender_icons16/icon16_pose_data.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_radio.dat b/release/datafiles/blender_icons16/icon16_radio.dat
deleted file mode 100644
index 387081d8f42..00000000000
--- a/release/datafiles/blender_icons16/icon16_radio.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_render_region.dat b/release/datafiles/blender_icons16/icon16_render_region.dat
deleted file mode 100644
index 6e6a57d8f0a..00000000000
--- a/release/datafiles/blender_icons16/icon16_render_region.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_restrict_render_off.dat b/release/datafiles/blender_icons16/icon16_restrict_render_off.dat
index 8f448345d13..f62bbd408a5 100644
--- a/release/datafiles/blender_icons16/icon16_restrict_render_off.dat
+++ b/release/datafiles/blender_icons16/icon16_restrict_render_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_restrict_render_on.dat b/release/datafiles/blender_icons16/icon16_restrict_render_on.dat
index f62bbd408a5..8f448345d13 100644
--- a/release/datafiles/blender_icons16/icon16_restrict_render_on.dat
+++ b/release/datafiles/blender_icons16/icon16_restrict_render_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_restrict_select_off.dat b/release/datafiles/blender_icons16/icon16_restrict_select_off.dat
index a7c55e6b522..226a64d2b51 100644
--- a/release/datafiles/blender_icons16/icon16_restrict_select_off.dat
+++ b/release/datafiles/blender_icons16/icon16_restrict_select_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_restrict_select_on.dat b/release/datafiles/blender_icons16/icon16_restrict_select_on.dat
index 226a64d2b51..a7c55e6b522 100644
--- a/release/datafiles/blender_icons16/icon16_restrict_select_on.dat
+++ b/release/datafiles/blender_icons16/icon16_restrict_select_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_restrict_view_off.dat b/release/datafiles/blender_icons16/icon16_restrict_view_off.dat
index 4b2e00677d8..36d1de55f9e 100644
--- a/release/datafiles/blender_icons16/icon16_restrict_view_off.dat
+++ b/release/datafiles/blender_icons16/icon16_restrict_view_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_restrict_view_on.dat b/release/datafiles/blender_icons16/icon16_restrict_view_on.dat
index 36d1de55f9e..4b2e00677d8 100644
--- a/release/datafiles/blender_icons16/icon16_restrict_view_on.dat
+++ b/release/datafiles/blender_icons16/icon16_restrict_view_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_retopo.dat b/release/datafiles/blender_icons16/icon16_retopo.dat
deleted file mode 100644
index 786600d06fa..00000000000
--- a/release/datafiles/blender_icons16/icon16_retopo.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat b/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat
index 89dc93621a4..951af8a0f1d 100644
--- a/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat
+++ b/release/datafiles/blender_icons16/icon16_sculpt_dyntopo.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_sequence.dat b/release/datafiles/blender_icons16/icon16_sequence.dat
index ccd2b223343..0731670a656 100644
--- a/release/datafiles/blender_icons16/icon16_sequence.dat
+++ b/release/datafiles/blender_icons16/icon16_sequence.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_shading_texture.dat b/release/datafiles/blender_icons16/icon16_shading_texture.dat
index 6e6555dff56..3c5becaa98c 100644
--- a/release/datafiles/blender_icons16/icon16_shading_texture.dat
+++ b/release/datafiles/blender_icons16/icon16_shading_texture.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_shapekey_data.dat b/release/datafiles/blender_icons16/icon16_shapekey_data.dat
index 27d71c66886..e560de479c3 100644
--- a/release/datafiles/blender_icons16/icon16_shapekey_data.dat
+++ b/release/datafiles/blender_icons16/icon16_shapekey_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_snap_normal.dat b/release/datafiles/blender_icons16/icon16_snap_normal.dat
index e30b9f47008..3c4f328f2d6 100644
--- a/release/datafiles/blender_icons16/icon16_snap_normal.dat
+++ b/release/datafiles/blender_icons16/icon16_snap_normal.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_snap_peel_object.dat b/release/datafiles/blender_icons16/icon16_snap_peel_object.dat
index 306a89b368e..51cac46c3e5 100644
--- a/release/datafiles/blender_icons16/icon16_snap_peel_object.dat
+++ b/release/datafiles/blender_icons16/icon16_snap_peel_object.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_sphere.dat b/release/datafiles/blender_icons16/icon16_sphere.dat
new file mode 100644
index 00000000000..d7109cf22f0
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_sphere.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_gp_stroke.dat b/release/datafiles/blender_icons16/icon16_stroke.dat
index ff0c820651a..ff0c820651a 100644
--- a/release/datafiles/blender_icons16/icon16_gp_stroke.dat
+++ b/release/datafiles/blender_icons16/icon16_stroke.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_temperature.dat b/release/datafiles/blender_icons16/icon16_temperature.dat
deleted file mode 100644
index 6bb3835c7ea..00000000000
--- a/release/datafiles/blender_icons16/icon16_temperature.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_texture_shaded.dat b/release/datafiles/blender_icons16/icon16_texture_shaded.dat
deleted file mode 100644
index e83dda3e23a..00000000000
--- a/release/datafiles/blender_icons16/icon16_texture_shaded.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_tool_settings.dat b/release/datafiles/blender_icons16/icon16_tool_settings.dat
index 52568e4d040..7755b32ff38 100644
--- a/release/datafiles/blender_icons16/icon16_tool_settings.dat
+++ b/release/datafiles/blender_icons16/icon16_tool_settings.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_tria_left.dat b/release/datafiles/blender_icons16/icon16_tria_left.dat
index df00a01e313..dc7680e324c 100644
--- a/release/datafiles/blender_icons16/icon16_tria_left.dat
+++ b/release/datafiles/blender_icons16/icon16_tria_left.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_ui.dat b/release/datafiles/blender_icons16/icon16_ui.dat
deleted file mode 100644
index 42fc040ae8c..00000000000
--- a/release/datafiles/blender_icons16/icon16_ui.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_unpinned.dat b/release/datafiles/blender_icons16/icon16_unpinned.dat
index 273e3e32d70..d381c48af66 100644
--- a/release/datafiles/blender_icons16/icon16_unpinned.dat
+++ b/release/datafiles/blender_icons16/icon16_unpinned.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_world.dat b/release/datafiles/blender_icons16/icon16_world.dat
index d68756ff789..8c73050a84b 100644
--- a/release/datafiles/blender_icons16/icon16_world.dat
+++ b/release/datafiles/blender_icons16/icon16_world.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_world_data.dat b/release/datafiles/blender_icons16/icon16_world_data.dat
index 8ec53887896..1852690c06f 100644
--- a/release/datafiles/blender_icons16/icon16_world_data.dat
+++ b/release/datafiles/blender_icons16/icon16_world_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_xray.dat b/release/datafiles/blender_icons16/icon16_xray.dat
index 73e36863f5d..9a19a88f91a 100644
--- a/release/datafiles/blender_icons16/icon16_xray.dat
+++ b/release/datafiles/blender_icons16/icon16_xray.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_30.dat b/release/datafiles/blender_icons32/icon32_30.dat
deleted file mode 100644
index 8022d377400..00000000000
--- a/release/datafiles/blender_icons32/icon32_30.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_alembic.dat b/release/datafiles/blender_icons32/icon32_alembic.dat
index 01c0737a550..d44abf64173 100644
--- a/release/datafiles/blender_icons32/icon32_alembic.dat
+++ b/release/datafiles/blender_icons32/icon32_alembic.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_border_lasso.dat b/release/datafiles/blender_icons32/icon32_border_lasso.dat
deleted file mode 100644
index b549de9e45f..00000000000
--- a/release/datafiles/blender_icons32/icon32_border_lasso.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_border_rect.dat b/release/datafiles/blender_icons32/icon32_border_rect.dat
deleted file mode 100644
index 9f988a97ae3..00000000000
--- a/release/datafiles/blender_icons32/icon32_border_rect.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat b/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat
index 72ae1cac8c8..d7f1139a0de 100644
--- a/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat
+++ b/release/datafiles/blender_icons32/icon32_clipuv_dehlt.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat b/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat
index 28c02768b49..4e41468d725 100644
--- a/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat
+++ b/release/datafiles/blender_icons32/icon32_clipuv_hlt.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_community.dat b/release/datafiles/blender_icons32/icon32_community.dat
new file mode 100644
index 00000000000..0afa58991c5
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_community.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_cone.dat b/release/datafiles/blender_icons32/icon32_cone.dat
new file mode 100644
index 00000000000..977776b6339
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_cone.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_constraint_data.dat b/release/datafiles/blender_icons32/icon32_constraint_data.dat
deleted file mode 100644
index 086f5dc05c1..00000000000
--- a/release/datafiles/blender_icons32/icon32_constraint_data.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_cube.dat b/release/datafiles/blender_icons32/icon32_cube.dat
new file mode 100644
index 00000000000..1eba0f5dfc2
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_cube.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_dotsdown.dat b/release/datafiles/blender_icons32/icon32_dotsdown.dat
deleted file mode 100644
index 239de1227a2..00000000000
--- a/release/datafiles/blender_icons32/icon32_dotsdown.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_dotsup.dat b/release/datafiles/blender_icons32/icon32_dotsup.dat
deleted file mode 100644
index f25ee2bde1d..00000000000
--- a/release/datafiles/blender_icons32/icon32_dotsup.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_duplicate.dat b/release/datafiles/blender_icons32/icon32_duplicate.dat
index 3060365c3d7..a61a5562e5d 100644
--- a/release/datafiles/blender_icons32/icon32_duplicate.dat
+++ b/release/datafiles/blender_icons32/icon32_duplicate.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_edit.dat b/release/datafiles/blender_icons32/icon32_edit.dat
deleted file mode 100644
index 20157258b29..00000000000
--- a/release/datafiles/blender_icons32/icon32_edit.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_empty_arrows.dat b/release/datafiles/blender_icons32/icon32_empty_arrows.dat
new file mode 100644
index 00000000000..cd849c3944f
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_empty_arrows.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_gp_empty.dat b/release/datafiles/blender_icons32/icon32_empty_axis.dat
index 79e53c31d1b..79e53c31d1b 100644
--- a/release/datafiles/blender_icons32/icon32_gp_empty.dat
+++ b/release/datafiles/blender_icons32/icon32_empty_axis.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_empty_single_arrow.dat b/release/datafiles/blender_icons32/icon32_empty_single_arrow.dat
new file mode 100644
index 00000000000..a2dead97a3a
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_empty_single_arrow.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_experimental.dat b/release/datafiles/blender_icons32/icon32_experimental.dat
new file mode 100644
index 00000000000..8613daea7e0
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_experimental.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_external_data.dat b/release/datafiles/blender_icons32/icon32_external_data.dat
deleted file mode 100644
index 1d1a3bcaff4..00000000000
--- a/release/datafiles/blender_icons32/icon32_external_data.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_facesel_hlt.dat b/release/datafiles/blender_icons32/icon32_facesel_hlt.dat
deleted file mode 100644
index 99e79fdd432..00000000000
--- a/release/datafiles/blender_icons32/icon32_facesel_hlt.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_fake_user.dat b/release/datafiles/blender_icons32/icon32_fake_user.dat
deleted file mode 100644
index 6c010f275d8..00000000000
--- a/release/datafiles/blender_icons32/icon32_fake_user.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_fake_user_off.dat b/release/datafiles/blender_icons32/icon32_fake_user_off.dat
index a25fcf8bc95..b8512edbc28 100644
--- a/release/datafiles/blender_icons32/icon32_fake_user_off.dat
+++ b/release/datafiles/blender_icons32/icon32_fake_user_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_fake_user_on.dat b/release/datafiles/blender_icons32/icon32_fake_user_on.dat
index d0cb988b072..c66c8e1b93b 100644
--- a/release/datafiles/blender_icons32/icon32_fake_user_on.dat
+++ b/release/datafiles/blender_icons32/icon32_fake_user_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_file_volume.dat b/release/datafiles/blender_icons32/icon32_file_volume.dat
new file mode 100644
index 00000000000..51f7c4084aa
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_file_volume.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_fullscreen.dat b/release/datafiles/blender_icons32/icon32_fullscreen.dat
deleted file mode 100644
index 1d9098676a1..00000000000
--- a/release/datafiles/blender_icons32/icon32_fullscreen.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_game.dat b/release/datafiles/blender_icons32/icon32_game.dat
deleted file mode 100644
index db3d727b236..00000000000
--- a/release/datafiles/blender_icons32/icon32_game.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_gear.dat b/release/datafiles/blender_icons32/icon32_gear.dat
deleted file mode 100644
index 44287225776..00000000000
--- a/release/datafiles/blender_icons32/icon32_gear.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_ghost.dat b/release/datafiles/blender_icons32/icon32_ghost.dat
deleted file mode 100644
index 50428d8a33d..00000000000
--- a/release/datafiles/blender_icons32/icon32_ghost.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_go_left.dat b/release/datafiles/blender_icons32/icon32_go_left.dat
deleted file mode 100644
index 33d852f6d60..00000000000
--- a/release/datafiles/blender_icons32/icon32_go_left.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat b/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat
deleted file mode 100644
index b6aabfedc01..00000000000
--- a/release/datafiles/blender_icons32/icon32_greasepencil_stroke_paint.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_heart.dat b/release/datafiles/blender_icons32/icon32_heart.dat
index 6c010f275d8..263add4ad57 100644
--- a/release/datafiles/blender_icons32/icon32_heart.dat
+++ b/release/datafiles/blender_icons32/icon32_heart.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_hide_off.dat b/release/datafiles/blender_icons32/icon32_hide_off.dat
index 85d285fc25c..82ce963ad2d 100644
--- a/release/datafiles/blender_icons32/icon32_hide_off.dat
+++ b/release/datafiles/blender_icons32/icon32_hide_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_hide_on.dat b/release/datafiles/blender_icons32/icon32_hide_on.dat
index 82ce963ad2d..85d285fc25c 100644
--- a/release/datafiles/blender_icons32/icon32_hide_on.dat
+++ b/release/datafiles/blender_icons32/icon32_hide_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_image_background.dat b/release/datafiles/blender_icons32/icon32_image_background.dat
new file mode 100644
index 00000000000..2d38f63026c
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_image_background.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_image_plane.dat b/release/datafiles/blender_icons32/icon32_image_plane.dat
new file mode 100644
index 00000000000..57721a8bc8d
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_image_plane.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_image_reference.dat b/release/datafiles/blender_icons32/icon32_image_reference.dat
new file mode 100644
index 00000000000..d82a7b087f8
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_image_reference.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_imagefile.dat b/release/datafiles/blender_icons32/icon32_imagefile.dat
deleted file mode 100644
index c27f078d556..00000000000
--- a/release/datafiles/blender_icons32/icon32_imagefile.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_inlink.dat b/release/datafiles/blender_icons32/icon32_inlink.dat
deleted file mode 100644
index e533cead942..00000000000
--- a/release/datafiles/blender_icons32/icon32_inlink.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_lightpaint.dat b/release/datafiles/blender_icons32/icon32_lightpaint.dat
deleted file mode 100644
index dd14ce00547..00000000000
--- a/release/datafiles/blender_icons32/icon32_lightpaint.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_link.dat b/release/datafiles/blender_icons32/icon32_link.dat
deleted file mode 100644
index 94629cc0de9..00000000000
--- a/release/datafiles/blender_icons32/icon32_link.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_link_area.dat b/release/datafiles/blender_icons32/icon32_link_area.dat
deleted file mode 100644
index ae834d98260..00000000000
--- a/release/datafiles/blender_icons32/icon32_link_area.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_logic.dat b/release/datafiles/blender_icons32/icon32_logic.dat
deleted file mode 100644
index 59725f1a98a..00000000000
--- a/release/datafiles/blender_icons32/icon32_logic.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_man_rot.dat b/release/datafiles/blender_icons32/icon32_man_rot.dat
deleted file mode 100644
index b1037c62903..00000000000
--- a/release/datafiles/blender_icons32/icon32_man_rot.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_man_scale.dat b/release/datafiles/blender_icons32/icon32_man_scale.dat
deleted file mode 100644
index b49d163de93..00000000000
--- a/release/datafiles/blender_icons32/icon32_man_scale.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_man_trans.dat b/release/datafiles/blender_icons32/icon32_man_trans.dat
deleted file mode 100644
index b23199f6dc1..00000000000
--- a/release/datafiles/blender_icons32/icon32_man_trans.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_manipul.dat b/release/datafiles/blender_icons32/icon32_manipul.dat
deleted file mode 100644
index f4adb64d6d0..00000000000
--- a/release/datafiles/blender_icons32/icon32_manipul.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_matshaderball.dat b/release/datafiles/blender_icons32/icon32_matshaderball.dat
index 2cf1af4122e..1ff46c6b413 100644
--- a/release/datafiles/blender_icons32/icon32_matshaderball.dat
+++ b/release/datafiles/blender_icons32/icon32_matshaderball.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_meta_empty.dat b/release/datafiles/blender_icons32/icon32_meta_empty.dat
deleted file mode 100644
index 9bbf02a57a3..00000000000
--- a/release/datafiles/blender_icons32/icon32_meta_empty.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_mod_particles.dat b/release/datafiles/blender_icons32/icon32_mod_particles.dat
index 84a51343313..89b89ca0433 100644
--- a/release/datafiles/blender_icons32/icon32_mod_particles.dat
+++ b/release/datafiles/blender_icons32/icon32_mod_particles.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_node_insert_top.dat b/release/datafiles/blender_icons32/icon32_node_insert_top.dat
deleted file mode 100644
index de1c72f449d..00000000000
--- a/release/datafiles/blender_icons32/icon32_node_insert_top.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_object_data.dat b/release/datafiles/blender_icons32/icon32_object_data.dat
index 40ab431a24d..2a7316a3a48 100644
--- a/release/datafiles/blender_icons32/icon32_object_data.dat
+++ b/release/datafiles/blender_icons32/icon32_object_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_object_datamode.dat b/release/datafiles/blender_icons32/icon32_object_datamode.dat
index 8209305cfe8..495717fd1e4 100644
--- a/release/datafiles/blender_icons32/icon32_object_datamode.dat
+++ b/release/datafiles/blender_icons32/icon32_object_datamode.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_open_recent.dat b/release/datafiles/blender_icons32/icon32_open_recent.dat
deleted file mode 100644
index 86417937e36..00000000000
--- a/release/datafiles/blender_icons32/icon32_open_recent.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_orphan_data.dat b/release/datafiles/blender_icons32/icon32_orphan_data.dat
index 8ece0b7026c..fbe00298b5c 100644
--- a/release/datafiles/blender_icons32/icon32_orphan_data.dat
+++ b/release/datafiles/blender_icons32/icon32_orphan_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_outliner_data_pose.dat b/release/datafiles/blender_icons32/icon32_outliner_data_pose.dat
deleted file mode 100644
index f1beb2313fa..00000000000
--- a/release/datafiles/blender_icons32/icon32_outliner_data_pose.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_output.dat b/release/datafiles/blender_icons32/icon32_output.dat
new file mode 100644
index 00000000000..0892fd1a7e5
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_output.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_particle_data.dat b/release/datafiles/blender_icons32/icon32_particle_data.dat
index eb1ea031df1..2bc2ce76c6d 100644
--- a/release/datafiles/blender_icons32/icon32_particle_data.dat
+++ b/release/datafiles/blender_icons32/icon32_particle_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_particles.dat b/release/datafiles/blender_icons32/icon32_particles.dat
index 1a716802303..b99156dc98e 100644
--- a/release/datafiles/blender_icons32/icon32_particles.dat
+++ b/release/datafiles/blender_icons32/icon32_particles.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_physics.dat b/release/datafiles/blender_icons32/icon32_physics.dat
index e9c5072cc57..52356fa2118 100644
--- a/release/datafiles/blender_icons32/icon32_physics.dat
+++ b/release/datafiles/blender_icons32/icon32_physics.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_pinned.dat b/release/datafiles/blender_icons32/icon32_pinned.dat
index 08fc5cc9fb9..96c29a37feb 100644
--- a/release/datafiles/blender_icons32/icon32_pinned.dat
+++ b/release/datafiles/blender_icons32/icon32_pinned.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_plug.dat b/release/datafiles/blender_icons32/icon32_plug.dat
deleted file mode 100644
index a93da245617..00000000000
--- a/release/datafiles/blender_icons32/icon32_plug.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_pose_data.dat b/release/datafiles/blender_icons32/icon32_pose_data.dat
deleted file mode 100644
index 71e34c96345..00000000000
--- a/release/datafiles/blender_icons32/icon32_pose_data.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_radio.dat b/release/datafiles/blender_icons32/icon32_radio.dat
deleted file mode 100644
index cf3e2485b95..00000000000
--- a/release/datafiles/blender_icons32/icon32_radio.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_render_region.dat b/release/datafiles/blender_icons32/icon32_render_region.dat
deleted file mode 100644
index ebe4cb8bfd6..00000000000
--- a/release/datafiles/blender_icons32/icon32_render_region.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_restrict_render_off.dat b/release/datafiles/blender_icons32/icon32_restrict_render_off.dat
index 9b292bc8f69..7f23b246d13 100644
--- a/release/datafiles/blender_icons32/icon32_restrict_render_off.dat
+++ b/release/datafiles/blender_icons32/icon32_restrict_render_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_restrict_render_on.dat b/release/datafiles/blender_icons32/icon32_restrict_render_on.dat
index 7f23b246d13..9b292bc8f69 100644
--- a/release/datafiles/blender_icons32/icon32_restrict_render_on.dat
+++ b/release/datafiles/blender_icons32/icon32_restrict_render_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_restrict_select_off.dat b/release/datafiles/blender_icons32/icon32_restrict_select_off.dat
index 43a1d88ae73..714fe951b46 100644
--- a/release/datafiles/blender_icons32/icon32_restrict_select_off.dat
+++ b/release/datafiles/blender_icons32/icon32_restrict_select_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_restrict_select_on.dat b/release/datafiles/blender_icons32/icon32_restrict_select_on.dat
index 714fe951b46..43a1d88ae73 100644
--- a/release/datafiles/blender_icons32/icon32_restrict_select_on.dat
+++ b/release/datafiles/blender_icons32/icon32_restrict_select_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_restrict_view_off.dat b/release/datafiles/blender_icons32/icon32_restrict_view_off.dat
index 26059e4eedf..7ed3928b4b0 100644
--- a/release/datafiles/blender_icons32/icon32_restrict_view_off.dat
+++ b/release/datafiles/blender_icons32/icon32_restrict_view_off.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_restrict_view_on.dat b/release/datafiles/blender_icons32/icon32_restrict_view_on.dat
index 7ed3928b4b0..26059e4eedf 100644
--- a/release/datafiles/blender_icons32/icon32_restrict_view_on.dat
+++ b/release/datafiles/blender_icons32/icon32_restrict_view_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_retopo.dat b/release/datafiles/blender_icons32/icon32_retopo.dat
deleted file mode 100644
index f8c3b46e729..00000000000
--- a/release/datafiles/blender_icons32/icon32_retopo.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat b/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat
index 78f5d680acb..68ea906002c 100644
--- a/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat
+++ b/release/datafiles/blender_icons32/icon32_sculpt_dyntopo.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_sequence.dat b/release/datafiles/blender_icons32/icon32_sequence.dat
index 70378ea8364..eda9fdd7876 100644
--- a/release/datafiles/blender_icons32/icon32_sequence.dat
+++ b/release/datafiles/blender_icons32/icon32_sequence.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_shading_texture.dat b/release/datafiles/blender_icons32/icon32_shading_texture.dat
index a72c06bbaf1..1bd76317a0e 100644
--- a/release/datafiles/blender_icons32/icon32_shading_texture.dat
+++ b/release/datafiles/blender_icons32/icon32_shading_texture.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_shapekey_data.dat b/release/datafiles/blender_icons32/icon32_shapekey_data.dat
index 505f796ad0c..ec8346abb8f 100644
--- a/release/datafiles/blender_icons32/icon32_shapekey_data.dat
+++ b/release/datafiles/blender_icons32/icon32_shapekey_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_snap_normal.dat b/release/datafiles/blender_icons32/icon32_snap_normal.dat
index df2e6337011..e5f6420b635 100644
--- a/release/datafiles/blender_icons32/icon32_snap_normal.dat
+++ b/release/datafiles/blender_icons32/icon32_snap_normal.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_snap_peel_object.dat b/release/datafiles/blender_icons32/icon32_snap_peel_object.dat
index a4ec4a63d28..dc6ccd4966d 100644
--- a/release/datafiles/blender_icons32/icon32_snap_peel_object.dat
+++ b/release/datafiles/blender_icons32/icon32_snap_peel_object.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_sphere.dat b/release/datafiles/blender_icons32/icon32_sphere.dat
new file mode 100644
index 00000000000..9067be4f85d
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_sphere.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_gp_stroke.dat b/release/datafiles/blender_icons32/icon32_stroke.dat
index 9e27b6f228b..9e27b6f228b 100644
--- a/release/datafiles/blender_icons32/icon32_gp_stroke.dat
+++ b/release/datafiles/blender_icons32/icon32_stroke.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_temperature.dat b/release/datafiles/blender_icons32/icon32_temperature.dat
deleted file mode 100644
index c564327f9fd..00000000000
--- a/release/datafiles/blender_icons32/icon32_temperature.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_texture_shaded.dat b/release/datafiles/blender_icons32/icon32_texture_shaded.dat
deleted file mode 100644
index 0bc061de5b2..00000000000
--- a/release/datafiles/blender_icons32/icon32_texture_shaded.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_tool_settings.dat b/release/datafiles/blender_icons32/icon32_tool_settings.dat
index 9dc63a2c77c..4afd71043e4 100644
--- a/release/datafiles/blender_icons32/icon32_tool_settings.dat
+++ b/release/datafiles/blender_icons32/icon32_tool_settings.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_tria_left.dat b/release/datafiles/blender_icons32/icon32_tria_left.dat
index 241372e8a24..2387d3b6958 100644
--- a/release/datafiles/blender_icons32/icon32_tria_left.dat
+++ b/release/datafiles/blender_icons32/icon32_tria_left.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_ui.dat b/release/datafiles/blender_icons32/icon32_ui.dat
deleted file mode 100644
index bd6fe825763..00000000000
--- a/release/datafiles/blender_icons32/icon32_ui.dat
+++ /dev/null
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_unpinned.dat b/release/datafiles/blender_icons32/icon32_unpinned.dat
index 1fa5d0b0c4b..b67963a223b 100644
--- a/release/datafiles/blender_icons32/icon32_unpinned.dat
+++ b/release/datafiles/blender_icons32/icon32_unpinned.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_world.dat b/release/datafiles/blender_icons32/icon32_world.dat
index 2882c20d03a..8bb79784ac9 100644
--- a/release/datafiles/blender_icons32/icon32_world.dat
+++ b/release/datafiles/blender_icons32/icon32_world.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_world_data.dat b/release/datafiles/blender_icons32/icon32_world_data.dat
index 0fb902a9ff9..c5caaf66203 100644
--- a/release/datafiles/blender_icons32/icon32_world_data.dat
+++ b/release/datafiles/blender_icons32/icon32_world_data.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_xray.dat b/release/datafiles/blender_icons32/icon32_xray.dat
index be58ab02c41..010637f72fc 100644
--- a/release/datafiles/blender_icons32/icon32_xray.dat
+++ b/release/datafiles/blender_icons32/icon32_xray.dat
Binary files differ
diff --git a/release/datafiles/prvicons.png b/release/datafiles/prvicons.png
index d86d54f4599..edbffae420b 100644
--- a/release/datafiles/prvicons.png
+++ b/release/datafiles/prvicons.png
Binary files differ
diff --git a/release/datafiles/prvicons.svg b/release/datafiles/prvicons.svg
index 0d64bf78865..63cd8dc1954 100644
--- a/release/datafiles/prvicons.svg
+++ b/release/datafiles/prvicons.svg
@@ -14,7 +14,7 @@
height="192"
id="svg2"
sodipodi:version="0.32"
- inkscape:version="0.91 r13725"
+ inkscape:version="0.92.2 2405546, 2018-03-11"
version="1.0"
sodipodi:docname="prvicons.svg"
inkscape:output_extension="org.inkscape.output.svg.inkscape"
@@ -22,67 +22,38 @@
inkscape:export-filename="blender_icons.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
+ <metadata
+ id="metadata2373">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
<sodipodi:namedview
- id="base"
pagecolor="#ffffff"
bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10000"
- objecttolerance="10000"
- inkscape:pageopacity="0.0"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:zoom="4.29"
- inkscape:cx="86.93017"
- inkscape:cy="96"
- inkscape:document-units="px"
- inkscape:current-layer="layer1"
- showgrid="true"
- inkscape:window-width="1920"
- inkscape:window-height="1005"
- inkscape:window-x="-2"
- inkscape:window-y="27"
- inkscape:snap-nodes="true"
- inkscape:snap-bbox="true"
- showguides="false"
- inkscape:guide-bbox="true"
- inkscape:object-nodes="false"
- inkscape:object-paths="false"
- inkscape:snap-intersection-line-segments="true"
- inkscape:snap-intersection-grid-guide="false"
- inkscape:window-maximized="1"
- inkscape:bbox-paths="false"
- inkscape:snap-global="true"
- inkscape:snap-bbox-midpoints="true"
- inkscape:snap-grids="true"
- inkscape:snap-to-guides="true"
- inkscape:snap-page="false"
- units="px"
- inkscape:snap-center="false"
- fit-margin-top="0"
- fit-margin-left="0"
- fit-margin-right="0"
- fit-margin-bottom="0"
- inkscape:snap-bbox-edge-midpoints="false">
- <inkscape:grid
- originy="0px"
- originx="0px"
- snapvisiblegridlinesonly="true"
- empopacity="0.25098039"
- empcolor="#7f1118"
- dotted="false"
- opacity="0.09803922"
- color="#808080"
- empspacing="4"
- spacingy="4"
- spacingx="4"
- enabled="true"
- visible="true"
- id="grid17394"
- type="xygrid" />
- </sodipodi:namedview>
- <title
- id="title49470">Blender icons v. 2.5.06</title>
+ inkscape:window-width="1074"
+ inkscape:window-height="1896"
+ id="namedview2371"
+ showgrid="false"
+ inkscape:zoom="1.2291667"
+ inkscape:cx="60.20339"
+ inkscape:cy="13.830508"
+ inkscape:window-x="1080"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="layer1" />
<defs
id="defs4">
<linearGradient
@@ -480,18 +451,6 @@
id="stop23308" />
</linearGradient>
<linearGradient
- id="linearGradient24735"
- inkscape:collect="always">
- <stop
- id="stop24737"
- offset="0"
- style="stop-color:#000000;stop-opacity:1;" />
- <stop
- id="stop24739"
- offset="1"
- style="stop-color:#000000;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
id="linearGradient24727">
<stop
id="stop24729"
@@ -759,29 +718,6 @@
id="linearGradient23199"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask23189"
- maskUnits="userSpaceOnUse">
- <g
- id="g23193"
- transform="translate(-28,49)">
- <rect
- style="fill:url(#linearGradient23199);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect23195"
- width="9"
- height="16"
- x="22"
- y="237" />
- <rect
- y="237"
- x="-38"
- height="16"
- width="9"
- id="rect23197"
- style="fill:url(#linearGradient23201);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(-1,1)" />
- </g>
- </mask>
<linearGradient
y2="388"
x2="272"
@@ -917,57 +853,6 @@
id="linearGradient23274"
xlink:href="#linearGradient14418"
inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient30777">
- <stop
- style="stop-color:#acacac;stop-opacity:1"
- offset="0"
- id="stop30779" />
- <stop
- style="stop-color:black;stop-opacity:0;"
- offset="1"
- id="stop30781" />
- </linearGradient>
- <linearGradient
- id="linearGradient29485"
- inkscape:collect="always">
- <stop
- id="stop29487"
- offset="0"
- style="stop-color:black;stop-opacity:1;" />
- <stop
- id="stop29489"
- offset="1"
- style="stop-color:black;stop-opacity:0;" />
- </linearGradient>
- <filter
- color-interpolation-filters="sRGB"
- id="filter20578"
- height="3.0439126"
- y="-1.0219563"
- width="2.1164308"
- x="-0.55821538"
- inkscape:collect="always">
- <feGaussianBlur
- id="feGaussianBlur20580"
- stdDeviation="2.0410255"
- inkscape:collect="always" />
- </filter>
- <clipPath
- id="clipPath20586"
- clipPathUnits="userSpaceOnUse">
- <path
- transform="matrix(1.870472,0.1894819,-0.6587894,2.4281336,319.59052,-798.11661)"
- d="m 57.5,554 a 4.5,2.25 0 1 1 -9,0 4.5,2.25 0 1 1 9,0 z"
- sodipodi:ry="2.25"
- sodipodi:rx="4.5"
- sodipodi:cy="554"
- sodipodi:cx="53"
- id="path34889"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- </clipPath>
<radialGradient
gradientUnits="userSpaceOnUse"
fy="114.5684"
@@ -985,32 +870,6 @@
style="stop-color:#9a9a9a;stop-opacity:1.0000000;"
offset="1.0000000" />
</radialGradient>
- <filter
- color-interpolation-filters="sRGB"
- id="filter63011"
- height="2.0133312"
- y="-0.50666559"
- width="1.9120018"
- x="-0.45600089"
- inkscape:collect="always">
- <feGaussianBlur
- id="feGaussianBlur63013"
- stdDeviation="1.899998"
- inkscape:collect="always" />
- </filter>
- <clipPath
- id="clipPath13106"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path34850"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" />
- </clipPath>
<linearGradient
id="linearGradient58334">
<stop
@@ -1311,17 +1170,6 @@
id="linearGradient20961"
xlink:href="#linearGradient21609"
inkscape:collect="always" />
- <mask
- id="mask20957"
- maskUnits="userSpaceOnUse">
- <rect
- style="fill:url(#linearGradient20961);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect20959"
- width="8"
- height="5"
- x="162"
- y="101" />
- </mask>
<linearGradient
y2="325"
x2="286.60001"
@@ -1638,15 +1486,6 @@
offset="1"
id="stop14266" />
</linearGradient>
- <clipPath
- id="clipPath17188"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- id="path17190"
- d="m 240.5,-19.90625 c -1.87005,0 -3.40625,1.536202 -3.40625,3.40625 l 0,2 c 0,1.87005 1.53621,3.40625 3.40625,3.40625 l 0,-2.8125 c -0.33932,0 -0.59375,-0.254431 -0.59375,-0.59375 l 0,-2 c 0,-0.339319 0.25443,-0.59375 0.59375,-0.59375 l 0,-2.8125 z"
- style="fill:#d3d7cf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
<linearGradient
id="linearGradient18344">
<stop
@@ -2894,17 +2733,6 @@
id="linearGradient18670"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask18666"
- maskUnits="userSpaceOnUse">
- <rect
- style="fill:url(#linearGradient18670);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect18668"
- width="15.098035"
- height="14.000001"
- x="62.921577"
- y="6" />
- </mask>
<linearGradient
y2="118.69846"
x2="132.35237"
@@ -3709,17 +3537,6 @@
id="linearGradient13046"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask13041"
- maskUnits="userSpaceOnUse">
- <rect
- y="-12"
- x="276"
- height="8"
- width="7"
- id="rect13043"
- style="fill:url(#linearGradient13046);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </mask>
<linearGradient
y2="152.24998"
x2="-80"
@@ -3730,18 +3547,6 @@
id="linearGradient13056"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask13052"
- maskUnits="userSpaceOnUse">
- <rect
- transform="scale(1,-1)"
- style="fill:url(#linearGradient13056);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect13054"
- width="7"
- height="8"
- x="276"
- y="4.0625" />
- </mask>
<linearGradient
y2="143.58749"
x2="451.98389"
@@ -4559,16 +4364,6 @@
id="linearGradient17431"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <mask
- id="mask17570"
- maskUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- id="path17572"
- d="m -44,358 0,14 14,-14 -14,0 z"
- style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- sodipodi:nodetypes="cccc" />
- </mask>
<linearGradient
y2="248.37102"
x2="35.029804"
@@ -4980,35 +4775,6 @@
id="radialGradient35967"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <clipPath
- id="clipPath18524"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:transform-center-y="-6.3853012"
- inkscape:transform-center-x="-6.3473305"
- sodipodi:type="arc"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:0.69954133;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;display:inline"
- id="path18526"
- sodipodi:cx="258.5"
- sodipodi:cy="78.5"
- sodipodi:rx="3.5"
- sodipodi:ry="3.5"
- d="m 262,78.5 a 3.5,3.5 0 1 1 -7,0 3.5,3.5 0 1 1 7,0 z"
- transform="matrix(-1.1435655,0,0,1.1436475,512.11415,45.72091)"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\blender-cvs-windows\.blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- </clipPath>
- <mask
- id="mask18634"
- maskUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- id="path18636"
- d="m 207,134 0,14 11,0 0,-7.5625 c -1.97252,-0.24738 -3.5,-1.89814 -3.5,-3.9375 0,-0.94675 0.35614,-1.81444 0.90625,-2.5 L 207,134 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:nodetypes="ccccscc" />
- </mask>
<linearGradient
y2="585.28772"
x2="159.13864"
@@ -5419,17 +5185,6 @@
id="linearGradient69009"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask69005"
- maskUnits="userSpaceOnUse">
- <rect
- y="39.580433"
- x="596.30127"
- height="26.383913"
- width="24.746082"
- id="rect69007"
- style="fill:url(#linearGradient69009);fill-opacity:1;display:inline" />
- </mask>
<linearGradient
y2="94"
x2="247"
@@ -5478,99 +5233,6 @@
id="linearGradient20309"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <radialGradient
- r="5.256"
- fy="114.5684"
- fx="20.892099"
- cy="114.5684"
- cx="20.892099"
- gradientTransform="matrix(0.2798768,0,0,0.279916,6.0465962,-0.3619733)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21565"
- xlink:href="#aigrd2"
- inkscape:collect="always" />
- <radialGradient
- r="5.256"
- fy="114.5684"
- fx="20.892099"
- cy="114.5684"
- cx="20.892099"
- gradientTransform="matrix(0.2798768,0,0,0.279916,6.0465962,-0.3619733)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21567"
- xlink:href="#aigrd2"
- inkscape:collect="always" />
- <linearGradient
- y2="32.076183"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21594"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21596"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="31.515814"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21647"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21649"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="31.515814"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21977"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21979"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <clipPath
- id="clipPath22590"
- clipPathUnits="userSpaceOnUse">
- <rect
- y="490.00012"
- x="-30"
- height="14"
- width="12"
- id="rect22592"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
<linearGradient
y2="358.85715"
x2="772"
@@ -5581,92 +5243,6 @@
id="linearGradient23595"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask23591"
- maskUnits="userSpaceOnUse">
- <rect
- y="768"
- x="30"
- height="14"
- width="11"
- id="rect23593"
- style="fill:url(#linearGradient23595);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- mask="none" />
- </mask>
- <clipPath
- id="clipPath23877"
- clipPathUnits="userSpaceOnUse">
- <rect
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect23879"
- width="15"
- height="6"
- x="952"
- y="-540"
- transform="scale(1,-1)" />
- </clipPath>
- <linearGradient
- y2="31.515814"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23978"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23980"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="237"
- x2="150.5"
- y1="239.9987"
- x1="150.5"
- gradientTransform="matrix(1,0,0,0.733333,808.99997,-697.8)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23982"
- xlink:href="#linearGradient31320"
- inkscape:collect="always" />
- <linearGradient
- y2="243.69914"
- x2="142.9375"
- y1="243.76387"
- x1="147.0625"
- gradientTransform="matrix(0,1,1,0,715,364)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23986"
- xlink:href="#linearGradient29485"
- inkscape:collect="always" />
- <linearGradient
- y2="244.11113"
- x2="144"
- y1="244.11113"
- x1="148"
- gradientTransform="matrix(1,0,0,1.2857143,364,645.14283)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient23988"
- xlink:href="#linearGradient30777"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3564">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop3566" />
- <stop
- style="stop-color:white;stop-opacity:0;"
- offset="1"
- id="stop3568" />
- </linearGradient>
<linearGradient
id="linearGradient39155">
<stop
@@ -5679,79 +5255,6 @@
id="stop39159" />
</linearGradient>
<linearGradient
- inkscape:collect="always"
- id="linearGradient39171">
- <stop
- style="stop-color:white;stop-opacity:1;"
- offset="0"
- id="stop39173" />
- <stop
- style="stop-color:white;stop-opacity:0;"
- offset="1"
- id="stop39175" />
- </linearGradient>
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21442"
- xlink:href="#linearGradient18821"
- inkscape:collect="always" />
- <linearGradient
- y2="34.375"
- x2="29.875"
- y1="18.875"
- x1="31.1875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21444"
- xlink:href="#linearGradient39155"
- inkscape:collect="always" />
- <linearGradient
- y2="-458.05771"
- x2="190.46461"
- y1="193.33229"
- x1="185.9903"
- gradientTransform="matrix(0.06818845,0,0,0.06818845,22.51112,27.02885)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21446"
- xlink:href="#linearGradient3564"
- inkscape:collect="always" />
- <radialGradient
- r="20.278975"
- fy="19.668886"
- fx="26.109201"
- cy="19.668886"
- cx="26.109201"
- gradientTransform="matrix(1.647222,0,0,1.26792,-15.47413,-5.79794)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21448"
- xlink:href="#linearGradient39171"
- inkscape:collect="always" />
- <linearGradient
- y2="32.076183"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22274"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22276"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
y2="56.357628"
x2="121.22078"
y1="53.227627"
@@ -5989,17 +5492,6 @@
id="linearGradient57454"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask57450"
- maskUnits="userSpaceOnUse">
- <rect
- style="fill:url(#linearGradient57454);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect57452"
- width="15"
- height="15"
- x="326.00305"
- y="154.99899" />
- </mask>
<linearGradient
y2="12.551482"
x2="167.59578"
@@ -6544,18 +6036,6 @@
id="linearGradient24460"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask24456"
- maskUnits="userSpaceOnUse">
- <rect
- mask="none"
- style="fill:url(#linearGradient24460);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect24458"
- width="7"
- height="17"
- x="299"
- y="108" />
- </mask>
<linearGradient
y2="152.24998"
x2="-80"
@@ -6566,18 +6046,6 @@
id="linearGradient24470"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask24466"
- maskUnits="userSpaceOnUse">
- <rect
- y="4.0625"
- x="276"
- height="9"
- width="7"
- id="rect24468"
- style="fill:url(#linearGradient24470);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(1,-1)" />
- </mask>
<linearGradient
y2="-22.846634"
x2="134.08138"
@@ -6682,16 +6150,6 @@
id="linearGradient24551"
xlink:href="#linearGradient18105"
inkscape:collect="always" />
- <clipPath
- id="clipPath24168"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc"
- id="path24170"
- d="m 134.27489,222.11125 c -3.9249,-6.46418 -7.61892,6.46419 -11.54381,0 l 0,0 -1.61614,0 0,8.77283 14.77608,0 0,-8.77283 -1.61613,0 z"
- style="fill:#808080;fill-rule:evenodd;stroke:none" />
- </clipPath>
<linearGradient
y2="120.87388"
x2="135.36497"
@@ -8539,123 +7997,6 @@
xlink:href="#linearGradient9030"
inkscape:collect="always" />
<linearGradient
- y2="349.81818"
- x2="45.021851"
- y1="437.02835"
- x1="59.158501"
- gradientTransform="matrix(1.043478,0,0,0.956667,765.84783,-274.57833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24809"
- xlink:href="#linearGradient24727"
- inkscape:collect="always" />
- <linearGradient
- y2="101.5"
- x2="841"
- y1="101.5"
- x1="807"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24811"
- xlink:href="#linearGradient24735"
- inkscape:collect="always" />
- <linearGradient
- y2="347.78201"
- x2="63.407566"
- y1="421.80756"
- x1="63.539974"
- gradientTransform="matrix(1.043478,0,0,0.956667,767.34783,-275.07833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24813"
- xlink:href="#linearGradient24711"
- inkscape:collect="always" />
- <linearGradient
- y2="114.99999"
- x2="936"
- y1="102"
- x1="954"
- gradientTransform="translate(-127,4e-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24815"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="349.81818"
- x2="45.021851"
- y1="437.02835"
- x1="59.158501"
- gradientTransform="matrix(1.043478,0,0,0.956667,765.84783,-274.57833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24839"
- xlink:href="#linearGradient24727"
- inkscape:collect="always" />
- <linearGradient
- y2="101.5"
- x2="841"
- y1="101.5"
- x1="807"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24841"
- xlink:href="#linearGradient24735"
- inkscape:collect="always" />
- <linearGradient
- y2="347.78201"
- x2="63.407566"
- y1="419.06366"
- x1="64.019142"
- gradientTransform="matrix(1.043478,0,0,0.956667,767.34783,-275.07833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24843"
- xlink:href="#linearGradient24144"
- inkscape:collect="always" />
- <linearGradient
- y2="114.99999"
- x2="936"
- y1="102"
- x1="954"
- gradientTransform="translate(-127,4e-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24845"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
- y2="349.81818"
- x2="45.021851"
- y1="437.02835"
- x1="59.158501"
- gradientTransform="matrix(1.043478,0,0,0.956667,765.84783,-274.57833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24867"
- xlink:href="#linearGradient24727"
- inkscape:collect="always" />
- <linearGradient
- y2="101.5"
- x2="841"
- y1="101.5"
- x1="807"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24869"
- xlink:href="#linearGradient24735"
- inkscape:collect="always" />
- <linearGradient
- y2="347.78201"
- x2="63.407566"
- y1="422.46088"
- x1="63.659767"
- gradientTransform="matrix(1.043478,0,0,0.956667,767.34783,-275.07833)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24871"
- xlink:href="#linearGradient24711"
- inkscape:collect="always" />
- <linearGradient
- y2="114.99999"
- x2="936"
- y1="102"
- x1="954"
- gradientTransform="translate(-127,4e-6)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient24873"
- xlink:href="#linearGradient16500"
- inkscape:collect="always" />
- <linearGradient
y2="250.69945"
x2="114.66669"
y1="283.00519"
@@ -8857,42 +8198,6 @@
id="linearGradient25387"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask25369"
- maskUnits="userSpaceOnUse">
- <g
- transform="translate(-21,-21)"
- id="g25371">
- <path
- inkscape:connector-curvature="0"
- inkscape:transform-center-x="4"
- sodipodi:nodetypes="cccc"
- id="path25373"
- d="m 341,302 8,8 -8,8 0,-16 z"
- style="fill:url(#linearGradient25381);fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- style="fill:url(#linearGradient25383);fill-rule:evenodd;stroke:none"
- d="m 357,302 -8,8 -8,-8 16,0 z"
- id="path25375"
- sodipodi:nodetypes="cccc"
- inkscape:transform-center-y="-4" />
- <path
- inkscape:connector-curvature="0"
- style="fill:url(#linearGradient25385);fill-rule:evenodd;stroke:none"
- d="m 357,318 -8,-8 8,-8 0,16 z"
- id="path25377"
- sodipodi:nodetypes="cccc"
- inkscape:transform-center-x="-4" />
- <path
- inkscape:connector-curvature="0"
- style="fill:url(#linearGradient25387);fill-rule:evenodd;stroke:none"
- d="m 341,318 8,-8 8,8 -16,0 z"
- id="path25379"
- sodipodi:nodetypes="cccc"
- inkscape:transform-center-y="4" />
- </g>
- </mask>
<linearGradient
y2="288.5"
x2="344.01321"
@@ -8933,42 +8238,6 @@
id="linearGradient25579"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask25561"
- maskUnits="userSpaceOnUse">
- <g
- id="g25563"
- transform="translate(-21,-21)">
- <path
- inkscape:connector-curvature="0"
- style="fill:url(#linearGradient25573);fill-rule:evenodd;stroke:none"
- d="m 341,302 8,8 -8,8 0,-16 z"
- id="path25565"
- sodipodi:nodetypes="cccc"
- inkscape:transform-center-x="4" />
- <path
- inkscape:connector-curvature="0"
- inkscape:transform-center-y="-4"
- sodipodi:nodetypes="cccc"
- id="path25567"
- d="m 357,302 -8,8 -8,-8 16,0 z"
- style="fill:url(#linearGradient25575);fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:transform-center-x="-4"
- sodipodi:nodetypes="cccc"
- id="path25569"
- d="m 357,318 -8,-8 8,-8 0,16 z"
- style="fill:url(#linearGradient25577);fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:transform-center-y="4"
- sodipodi:nodetypes="cccc"
- id="path25571"
- d="m 341,318 8,-8 8,8 -16,0 z"
- style="fill:url(#linearGradient25579);fill-rule:evenodd;stroke:none" />
- </g>
- </mask>
<linearGradient
y2="30.023426"
x2="278.25537"
@@ -9577,29 +8846,6 @@
id="radialGradient31865"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask31861"
- maskUnits="userSpaceOnUse">
- <path
- d="m 213,58 a 11,11 0 1 1 -22,0 11,11 0 1 1 22,0 z"
- sodipodi:ry="11"
- sodipodi:rx="11"
- sodipodi:cy="58"
- sodipodi:cx="202"
- id="path31863"
- style="fill:url(#radialGradient31865);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- sodipodi:type="arc" />
- </mask>
- <clipPath
- id="clipPath31849"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path31851"
- d="m 232.13187,93.950853 4.84276,0 4.23742,4.237465 0,4.842822 -9.08018,0 0,-9.080287 0,0 z"
- style="fill:#ff0000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
<linearGradient
gradientTransform="translate(258,-96.99999)"
y2="429.5"
@@ -9610,17 +8856,6 @@
id="linearGradient32298"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask32294"
- maskUnits="userSpaceOnUse">
- <rect
- style="fill:url(#linearGradient32298);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect32296"
- width="9"
- height="16"
- x="134"
- y="323" />
- </mask>
<radialGradient
r="1.5"
fy="14.5"
@@ -12087,28 +11322,6 @@
id="linearGradient38572"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask38561"
- maskUnits="userSpaceOnUse">
- <g
- id="g38563">
- <rect
- style="fill:url(#linearGradient38570);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect38565"
- width="16"
- height="13"
- x="-23"
- y="278" />
- <rect
- y="-304"
- x="-23"
- height="13"
- width="16"
- id="rect38567"
- style="fill:url(#linearGradient38572);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- transform="scale(1,-1)" />
- </g>
- </mask>
<linearGradient
id="linearGradient16500-7"
inkscape:collect="always">
@@ -12445,17 +11658,6 @@
id="linearGradient42437"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <clipPath
- id="clipPath42711"
- clipPathUnits="userSpaceOnUse">
- <rect
- y="214.76154"
- x="127.4093"
- height="17.464855"
- width="8.7252884"
- id="rect42713"
- style="fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
<linearGradient
id="linearGradient38796-7-9">
<stop
@@ -12558,17 +11760,6 @@
id="linearGradient38007"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <clipPath
- id="clipPath43368-1"
- clipPathUnits="userSpaceOnUse">
- <rect
- y="26"
- x="-79"
- height="16"
- width="16"
- id="rect43370-7"
- style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
<radialGradient
r="3.1501868"
fy="33.548397"
@@ -13599,17 +12790,6 @@
id="linearGradient38367"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <clipPath
- id="clipPath43368-7"
- clipPathUnits="userSpaceOnUse">
- <rect
- y="26"
- x="-79"
- height="16"
- width="16"
- id="rect43370-1"
- style="fill:#999999;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </clipPath>
<linearGradient
id="linearGradient43276-6"
inkscape:collect="always">
@@ -14395,19 +13575,6 @@
id="linearGradient38961"
xlink:href="#linearGradient1610-83"
inkscape:collect="always" />
- <mask
- id="mask38956"
- maskUnits="userSpaceOnUse">
- <rect
- ry="0"
- rx="0"
- y="560"
- x="488"
- height="12"
- width="16"
- id="rect38958"
- style="fill:url(#linearGradient38961);stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </mask>
<linearGradient
y2="580.63715"
x2="490.65796"
@@ -14578,16 +13745,6 @@
id="linearGradient40297"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <mask
- id="mask40306"
- maskUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- style="fill:#ffffff;fill-rule:evenodd;stroke:none"
- d="m 195,11.00001 0,14 0.5,0 13.5,-13.5 0,-0.5 -14,0 z"
- id="path40308" />
- </mask>
<linearGradient
y2="133.4879"
x2="145.20987"
@@ -15001,30 +14158,6 @@
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
- <clipPath
- id="clipPath40897"
- clipPathUnits="userSpaceOnUse">
- <rect
- transform="scale(-1,1)"
- style="opacity:0.45;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect40899"
- width="15"
- height="16"
- x="-41"
- y="198" />
- </clipPath>
- <clipPath
- id="clipPath40902"
- clipPathUnits="userSpaceOnUse">
- <rect
- transform="scale(-1,1)"
- style="opacity:0.45;fill:#80b3ff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:3.29999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- id="rect40904"
- width="15"
- height="17"
- x="-22"
- y="197" />
- </clipPath>
<linearGradient
y2="391.21976"
x2="94.246101"
@@ -15035,17 +14168,6 @@
id="linearGradient38478"
xlink:href="#linearGradient1610"
inkscape:collect="always" />
- <mask
- id="mask38474"
- maskUnits="userSpaceOnUse">
- <rect
- y="174.99901"
- x="343.01611"
- height="15"
- width="15"
- id="rect38476"
- style="fill:url(#linearGradient38478);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </mask>
<radialGradient
r="1.5"
fy="14.5"
@@ -15150,24 +14272,6 @@
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
- y2="108.00847"
- x2="345.40625"
- y1="108.35222"
- x1="351.15625"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44402"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
- y2="106.7795"
- x2="347.1875"
- y1="106.93575"
- x1="351.71875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient44404"
- xlink:href="#linearGradient44939-8"
- inkscape:collect="always" />
- <linearGradient
y2="106.5"
x2="284.5"
y1="101.5"
@@ -15216,16 +14320,6 @@
id="linearGradient44954"
xlink:href="#linearGradient44939-8"
inkscape:collect="always" />
- <clipPath
- id="clipPath45147"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.2;fill:#3771c8;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:3.0999999;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- d="m 5,261 13,0 0,1 -1,0 0,1 1,0 0,1 -1,0 0,1 -1,0 0,2 2,0 0,-1 1,0 0,-1 1,0 0,1 1,0 0,-1 1,0 0,13 -17,0 0,-17 z"
- id="path45149"
- sodipodi:nodetypes="ccccccccccccccccccccccc" />
- </clipPath>
<linearGradient
y2="19.9375"
x2="106.125"
@@ -15275,17 +14369,6 @@
id="linearGradient43826"
xlink:href="#linearGradient44627"
inkscape:collect="always" />
- <mask
- id="mask43822"
- maskUnits="userSpaceOnUse">
- <rect
- style="opacity:0.93999993;fill:url(#linearGradient43826);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new"
- id="rect43824"
- width="12"
- height="9"
- x="754"
- y="208" />
- </mask>
<linearGradient
y2="30.743095"
x2="277.68143"
@@ -15636,46 +14719,6 @@
xlink:href="#linearGradient319"
inkscape:collect="always" />
<linearGradient
- y2="31.515814"
- x2="276.89801"
- y1="-9.4293213"
- x1="240.70209"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30321"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30323"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
- y2="31.515814"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30368"
- xlink:href="#linearGradient1610"
- inkscape:collect="always" />
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient30370"
- xlink:href="#linearGradient5060"
- inkscape:collect="always" />
- <linearGradient
y2="726.37006"
x2="1661.8125"
y1="722"
@@ -15865,19 +14908,6 @@
offset="1"
id="stop23978-1" />
</linearGradient>
- <clipPath
- id="clipPath28964"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- id="path28966"
- d="m 117.50984,228.63415 0,-15.01646 11.71735,5.49383 0,15.38271 -11.71735,-5.86008 z"
- style="fill:url(#linearGradient28968);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- sodipodi:nodetypes="ccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- </clipPath>
<linearGradient
y2="253.23859"
x2="-20.826464"
@@ -15909,19 +14939,6 @@
id="linearGradient29424"
xlink:href="#linearGradient37542-7"
inkscape:collect="always" />
- <mask
- id="mask29419"
- maskUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\4.png"
- sodipodi:nodetypes="ccccc"
- style="opacity:0.5;fill:url(#linearGradient29424);fill-opacity:1;fill-rule:evenodd;stroke:none;display:inline;enable-background:new"
- d="m 117.50984,229.00041 0,-15.38272 11.71735,5.49383 0,15.74897 -11.71735,-5.86008 z"
- id="path29422" />
- </mask>
<linearGradient
y2="252.03563"
x2="-23.636715"
@@ -16151,17 +15168,6 @@
id="radialGradient29805"
xlink:href="#linearGradient1610-52-2"
inkscape:collect="always" />
- <mask
- id="mask29801"
- maskUnits="userSpaceOnUse">
- <rect
- y="257"
- x="204"
- height="16"
- width="15"
- id="rect29803"
- style="opacity:0.35;color:#000000;fill:url(#radialGradient29805);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.71217775;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:new" />
- </mask>
<linearGradient
y2="248.09296"
x2="389.59052"
@@ -16181,15 +15187,6 @@
id="linearGradient29886"
xlink:href="#linearGradient319"
inkscape:collect="always" />
- <clipPath
- id="clipPath50172-0"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;color:#000000;fill:#ff0000;fill-opacity:1;stroke:none;stroke-width:2;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Bitstream Vera Sans;-inkscape-font-specification:Bitstream Vera Sans"
- d="m -177.34375,498 a 1.001098,1.001098 0 1 0 0.0937,2 l 3.65625,0 -4.25,5.9375 a 1.0001,1.0001 0 0 0 -0.1875,0.59375 l 0,0.5 a 1.0001,1.0001 0 0 0 1,1 L -171.75,508 a 1.0001,1.0001 0 1 0 0,-2 l -3.6875,0.0312 4.25,-5.9375 A 1.0001,1.0001 0 0 0 -171,499.5 l 0,-0.5 a 1.0001,1.0001 0 0 0 -1,-1 l -5.25,0 a 1.0001,1.0001 0 0 0 -0.0937,0 z"
- id="path50174-8" />
- </clipPath>
<radialGradient
gradientUnits="userSpaceOnUse"
fy="64.567902"
@@ -16826,20 +15823,6 @@
offset="1"
style="stop-color:#000000;stop-opacity:0;" />
</linearGradient>
- <mask
- id="mask52637-8-8"
- maskUnits="userSpaceOnUse">
- <rect
- ry="0"
- rx="0"
- y="458"
- x="-354"
- height="8.9366941"
- width="7.9918551"
- id="rect52639-8-9"
- style="fill:url(#radialGradient52641-2-8);fill-opacity:1;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- mask="none" />
- </mask>
<radialGradient
r="8"
fy="462.0358"
@@ -16883,20 +15866,6 @@
offset="1"
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
- <mask
- id="mask52879-0-5"
- maskUnits="userSpaceOnUse">
- <rect
- ry="0"
- rx="0"
- y="458"
- x="-354.95001"
- height="8.9366941"
- width="7.9918551"
- id="rect52881-7-3"
- style="fill:url(#radialGradient52883-6-8);fill-opacity:1;stroke:none;stroke-width:2.79999995;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
- mask="none" />
- </mask>
<radialGradient
r="8"
fy="462.0358"
@@ -17043,16 +16012,6 @@
x2="470.73633"
y2="-102.52942" />
<linearGradient
- y2="32.902874"
- x2="278.34866"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21875-7-1-0-1"
- xlink:href="#linearGradient1610-71-6-9-7"
- inkscape:collect="always" />
- <linearGradient
id="linearGradient1610-71-6-9-7">
<stop
id="stop1611-26-8-5-4"
@@ -17063,42 +16022,6 @@
offset="1"
style="stop-color:white;stop-opacity:1;" />
</linearGradient>
- <clipPath
- id="clipPath13106-9-2-9-9"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path34850-4-7-0-4"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline"
- inkscape:connector-curvature="0" />
- </clipPath>
- <filter
- color-interpolation-filters="sRGB"
- id="filter63011-6-7-0-8"
- height="2.0133312"
- y="-0.50666559"
- width="1.9120018"
- x="-0.45600089"
- inkscape:collect="always">
- <feGaussianBlur
- id="feGaussianBlur63013-0-1-0-8"
- stdDeviation="1.899998"
- inkscape:collect="always" />
- </filter>
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21877-3-2-7-2"
- xlink:href="#linearGradient5060-6-6-2-4"
- inkscape:collect="always" />
<linearGradient
id="linearGradient5060-6-6-2-4">
<stop
@@ -17111,16 +16034,6 @@
id="stop5064-4-4-5-5" />
</linearGradient>
<linearGradient
- y2="629.23273"
- x2="1659.0875"
- y1="639.65356"
- x1="1666.1765"
- gradientTransform="matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34959-9-2-1"
- xlink:href="#linearGradient4671-6-4-1-7"
- inkscape:collect="always" />
- <linearGradient
id="linearGradient4671-6-4-1-7">
<stop
style="stop-color:#ffd43b;stop-opacity:1;"
@@ -17132,16 +16045,6 @@
id="stop4675-8-0-8-1" />
</linearGradient>
<linearGradient
- y2="626.40344"
- x2="1663.2872"
- y1="607.50525"
- x1="1641.4773"
- gradientTransform="matrix(0.562541,0,0,0.567972,-9.399749,-5.305317)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34961-3-6-5"
- xlink:href="#linearGradient4689-1-6-4-2"
- inkscape:collect="always" />
- <linearGradient
id="linearGradient4689-1-6-4-2">
<stop
style="stop-color:#5a9fd4;stop-opacity:1;"
@@ -17153,95 +16056,6 @@
id="stop4693-0-4-8-6" />
</linearGradient>
<linearGradient
- y2="344.10001"
- x2="924.10608"
- y1="339.66599"
- x1="922.89703"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34963-5-9-1"
- xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always">
- <stop
- id="stop3968-7-9-0-8-2-1-3-2"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3970-6-6-6-2-8-2-5-3"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="355.75"
- x2="922.104"
- y1="345.42163"
- x1="919.09998"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34965-1-5-2"
- xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always" />
- <linearGradient
- y2="341.98108"
- x2="921.82654"
- y1="342.71866"
- x1="922.64624"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34967-4-1-8"
- xlink:href="#linearGradient3966-5-1-4-8-9-8-9-5-5"
- inkscape:collect="always" />
- <linearGradient
- id="linearGradient3966-5-1-4-8-9-8-9-5-5"
- inkscape:collect="always">
- <stop
- id="stop3968-7-9-0-8-2-9-8-5-7"
- offset="0"
- style="stop-color:#ffffff;stop-opacity:1;" />
- <stop
- id="stop3970-6-6-6-2-8-0-2-8-6"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0;" />
- </linearGradient>
- <linearGradient
- y2="353"
- x2="917.25"
- y1="355.5"
- x1="917.75"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34969-4-4-1"
- xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always" />
- <linearGradient
- y2="344.75"
- x2="923"
- y1="343.75"
- x1="923"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34971-5-0-9"
- xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always" />
- <radialGradient
- r="6"
- fy="349.20001"
- fx="924"
- cy="349.20001"
- cx="924"
- gradientTransform="matrix(2.4166677,-7.678944e-6,1.853542e-6,0.58333478,-1309.0016,145.80659)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient34973-2-5-7"
- xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always" />
- <linearGradient
- y2="342.16492"
- x2="922.16492"
- y1="341.34042"
- x1="921.34045"
- gradientUnits="userSpaceOnUse"
- id="linearGradient34975-9-4-9"
- xlink:href="#linearGradient3966-5-1-4-8-9-88-8-4"
- inkscape:collect="always" />
- <linearGradient
y2="601.36218"
x2="218.99957"
y1="592.95746"
@@ -17476,16 +16290,6 @@
xlink:href="#linearGradient3966-8-9-6-4-5"
inkscape:collect="always" />
<linearGradient
- y2="32.076183"
- x2="276.89801"
- y1="-14.103641"
- x1="236.94902"
- gradientTransform="matrix(2.4126967,0,0,2.7035619,-536.07088,379.29465)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22274-8"
- xlink:href="#linearGradient1610-2"
- inkscape:collect="always" />
- <linearGradient
id="linearGradient1610-2">
<stop
id="stop1611-8"
@@ -17500,42 +16304,6 @@
offset="1"
style="stop-color:#c8c8c8;stop-opacity:1;" />
</linearGradient>
- <clipPath
- id="clipPath13106-5"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path34850-6"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" />
- </clipPath>
- <filter
- color-interpolation-filters="sRGB"
- id="filter63011-5"
- height="2.0133312"
- y="-0.50666559"
- width="1.9120018"
- x="-0.45600089"
- inkscape:collect="always">
- <feGaussianBlur
- id="feGaussianBlur63013-8"
- stdDeviation="1.899998"
- inkscape:collect="always" />
- </filter>
- <linearGradient
- y2="383.69843"
- x2="174.29811"
- y1="376.27383"
- x1="160.14388"
- gradientTransform="translate(-47.00001,58.00194)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient22276-5"
- xlink:href="#linearGradient5060-4"
- inkscape:collect="always" />
<linearGradient
id="linearGradient5060-4">
<stop
@@ -17547,19 +16315,6 @@
offset="1"
id="stop5064-6" />
</linearGradient>
- <clipPath
- id="clipPath5613"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path5615"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" />
- </clipPath>
<radialGradient
r="3.1650217"
fy="500.26215"
@@ -17647,17 +16402,6 @@
offset="1"
id="stop39175-1" />
</linearGradient>
- <radialGradient
- r="3.1650217"
- fy="500.26215"
- fx="75.554794"
- cy="500.26215"
- cx="75.554794"
- gradientTransform="matrix(0.8728692,0.8400852,-1.1671853,1.2200916,594.18579,-173.07738)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21442-6-790"
- xlink:href="#linearGradient18821-1-16"
- inkscape:collect="always" />
<linearGradient
id="linearGradient18821-1-16">
<stop
@@ -17670,15 +16414,6 @@
style="stop-color:#e3604f;stop-opacity:0;" />
</linearGradient>
<linearGradient
- y2="34.375"
- x2="29.875"
- y1="18.875"
- x1="31.1875"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21444-0-352"
- xlink:href="#linearGradient39155-0-813"
- inkscape:collect="always" />
- <linearGradient
id="linearGradient39155-0-813">
<stop
style="stop-color:#e6e6e6;stop-opacity:1;"
@@ -17690,51 +16425,6 @@
id="stop20597" />
</linearGradient>
<linearGradient
- y2="-458.05771"
- x2="190.46461"
- y1="193.33229"
- x1="185.9903"
- gradientTransform="matrix(0.06818845,0,0,0.06818845,22.51112,27.02885)"
- gradientUnits="userSpaceOnUse"
- id="linearGradient21446-3-145"
- xlink:href="#linearGradient3564-2-380"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient3564-2-380">
- <stop
- style="stop-color:#e6e6e6;stop-opacity:1;"
- offset="0"
- id="stop20601" />
- <stop
- style="stop-color:#e6e6e6;stop-opacity:0;"
- offset="1"
- id="stop20603" />
- </linearGradient>
- <radialGradient
- r="20.278975"
- fy="19.668886"
- fx="26.109201"
- cy="19.668886"
- cx="26.109201"
- gradientTransform="matrix(1.647222,0,0,1.26792,-15.47413,-5.79794)"
- gradientUnits="userSpaceOnUse"
- id="radialGradient21448-8-143"
- xlink:href="#linearGradient39171-9-89"
- inkscape:collect="always" />
- <linearGradient
- inkscape:collect="always"
- id="linearGradient39171-9-89">
- <stop
- style="stop-color:#e6e6e6;stop-opacity:1;"
- offset="0"
- id="stop20607" />
- <stop
- style="stop-color:#e6e6e6;stop-opacity:0;"
- offset="1"
- id="stop20609" />
- </linearGradient>
- <linearGradient
y2="32.076183"
x2="276.89801"
y1="-14.103641"
@@ -17755,19 +16445,6 @@
offset="1"
style="stop-color:white;stop-opacity:1;" />
</linearGradient>
- <clipPath
- id="clipPath13106-4"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path34850-8"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" />
- </clipPath>
<linearGradient
y2="383.69843"
x2="174.29811"
@@ -17789,19 +16466,6 @@
offset="1"
id="stop5064-17" />
</linearGradient>
- <clipPath
- id="clipPath5678"
- clipPathUnits="userSpaceOnUse">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path5680"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="fill:url(#linearGradient13110);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none;display:inline" />
- </clipPath>
<radialGradient
r="3.1650217"
fy="500.26215"
@@ -17890,126 +16554,7 @@
offset="1"
id="stop39175-18" />
</linearGradient>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Drop Shadow"
- id="filter6078"
- x="-0.29999999999999999"
- width="1.3500000000000001"
- height="1.3999999999999999"
- y="-0.14999999999999999">
- <feFlood
- flood-opacity="0.40000000000000002"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood6080" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
- result="composite1"
- id="feComposite6082" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1.5"
- result="blur"
- id="feGaussianBlur6084" />
- <feOffset
- dx="-2"
- dy="2"
- result="offset"
- id="feOffset6086" />
- <feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
- result="composite2"
- id="feComposite6088" />
- </filter>
- <filter
- style="color-interpolation-filters:sRGB;"
- inkscape:label="Drop Shadow"
- id="filter6146"
- x="-0.29999999999999999"
- width="1.3500000000000001"
- y="-0.14999999999999999"
- height="1.3999999999999999">
- <feFlood
- flood-opacity="0.40000000000000002"
- flood-color="rgb(0,0,0)"
- result="flood"
- id="feFlood6148" />
- <feComposite
- in="flood"
- in2="SourceGraphic"
- operator="in"
- result="composite1"
- id="feComposite6150" />
- <feGaussianBlur
- in="composite1"
- stdDeviation="1.5"
- result="blur"
- id="feGaussianBlur6152" />
- <feOffset
- dx="-2"
- dy="2"
- result="offset"
- id="feOffset6154" />
- <feComposite
- in="SourceGraphic"
- in2="offset"
- operator="over"
- result="composite2"
- id="feComposite6156" />
- </filter>
</defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title>Blender icons v. 2.5.06</dc:title>
- <dc:date>21.05.2012</dc:date>
- <dc:creator>
- <cc:Agent>
- <dc:title>Andrzej Ambroż</dc:title>
- </cc:Agent>
- </dc:creator>
- <dc:rights>
- <cc:Agent>
- <dc:title>Andrzej Ambroż</dc:title>
- </cc:Agent>
- </dc:rights>
- <dc:publisher>
- <cc:Agent>
- <dc:title>Andrzej Ambroż</dc:title>
- </cc:Agent>
- </dc:publisher>
- <dc:coverage />
- <cc:license
- rdf:resource="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" />
- <dc:description>GNU General Public License, version 2 or later.</dc:description>
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- transform="translate(-872,-180)"
- sodipodi:insensitive="true"
- style="display:none"
- inkscape:label="bckgrnd"
- id="layer3"
- inkscape:groupmode="layer">
- <rect
- y="-4"
- x="-4"
- height="650"
- width="1083.874"
- id="rect20607"
- style="fill:#4d4d4d;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
- </g>
<path
inkscape:connector-curvature="0"
d=""
@@ -18026,596 +16571,7 @@
inkscape:groupmode="layer"
id="layer4"
inkscape:label="sheet_layout"
- sodipodi:insensitive="true">
- <path
- inkscape:connector-curvature="0"
- id="path19551-18-1"
- d="m 35.75,29.5 0,1 -0.5,0 0,1 0.5,0 0,1 -0.75,0 0,1 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-1 -0.75,0 0,-1 0.5,0 0,-1 -0.5,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z m 0,2 1,0 0,1 -1,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- id="path30643-7-0"
- d="m 31.75,29.5 0,1 -0.75,0 0,3 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-3 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,3 -1,0 0,-3 z m 0.25,1 0,1 0.5,0 0,-1 -0.5,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path30647-6-1"
- d="m 19,29.5 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path30649-7-4"
- d="m 25,29.5 0,3 1,0 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <rect
- y="33.5"
- x="23"
- height="1"
- width="1"
- id="rect30651-8-6"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect30653-7-0"
- width="1"
- height="1"
- x="29"
- y="33.5" />
- <rect
- y="33.5"
- x="15"
- height="1"
- width="1"
- id="rect30725-8-7"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- id="path30723-1-1"
- d="m 11,31.5 0,2.25 1,0 0,0.75 1,0 0,-0.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- sodipodi:nodetypes="ccccccccccccc"
- inkscape:connector-curvature="0" />
- <g
- transform="translate(-62,136.5)"
- id="g72798"
- style="display:inline;opacity:0.5;enable-background:new">
- <g
- id="g72716">
- <path
- id="path72434"
- d="m 186,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <rect
- y="-127"
- x="219"
- height="5"
- width="1"
- id="rect72436"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- id="path72438"
- d="m 144,-127 0,4 -1,0 0,-1 -1,0 0,1 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-4 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72440"
- d="m 189,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72442"
- d="m 165,-127 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72446"
- d="m 130,-127 0,0.75 -1,0 0,1.5 1,0 0,0.75 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 1.5,0 0,-1 -1.5,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72448"
- d="m 154,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72450"
- d="m 133,-127 0,4.25 1,0 0,0.75 2,0 0,-0.75 1,0 0,-4.25 -1,0 0,4 -2,0 0,-4 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72452"
- d="m 138,-127 0,5 1,0 1,0 0,-0.5 1,0 0,-1.5 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z m 0,2 1,0 0,1 -1,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72454"
- d="m 151,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72456"
- d="m 146,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 209,-127 0,5 1,0 2,0 0,-1 -2,0 0,-4 -1,0 z"
- id="path72458"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 160,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- id="path72460" />
- <path
- id="path72462"
- d="m 171,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72464"
- d="m 175,-127 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 179,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- id="path72466" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 194,-127 0,4.25 1,0 0,0.75 2,0 0,-0.75 1,0 0,-4.25 -1,0 0,4 -2,0 0,-4 -1,0 z"
- id="path72468" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 202,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z"
- id="path72470" />
- <path
- id="path72472"
- d="m 205,-127 0,5 1,0 0,-2 1.25,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- id="path72474"
- d="m 215,-127 0,5 1,0 2,0 0,-1 -2,0 0,-4 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 222,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- id="path72476" />
- <path
- id="path72478"
- d="m 225,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 229,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- id="path72480" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 235,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- id="path72482" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 238,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- id="path72484" />
- <path
- id="path72486"
- d="m 242.75,-123 0,1 -0.75,0 0,1 1,0 0,-1 1,0 0,-1 -1.25,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- id="path32008-7"
- d="m 72,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32010-4"
- d="m 76,-127 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- y="-127"
- x="80"
- height="5"
- width="1"
- id="rect32012-0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32015-9"
- d="m 83,-127 0,0.75 -1,0 0,1.5 1,0 0,0.75 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 1.5,0 0,-1 -1.5,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32017-4"
- d="m 89,-127 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32019-8"
- d="m 97,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32021-8"
- d="m 93,-127 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32023-2"
- d="m 102,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32026-4"
- d="m 106,-127 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 110,-127 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- id="path32029-5" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 115,-127 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- id="path32031-5" />
- <rect
- y="-127"
- x="121"
- height="5"
- width="1"
- id="rect32033-1"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 124,-127 0,0.75 -1,0 0,1.5 1,0 0,0.75 1,0 0,1 -2,0 0,1 2,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -1,0 0,-1 1.5,0 0,-1 -1.5,0 z"
- id="path32035-7" />
- </g>
- <g
- id="g72757">
- <path
- id="path72562"
- d="m 78,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <rect
- y="-119"
- x="82"
- height="5"
- width="1"
- id="rect72564"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- id="path72576"
- d="m 72,-119 0,3.25 1,0 0,1.75 1,0 0,-1.75 1,0 0,1.75 1,0 0,-1.75 1,0 0,-3.25 -1,0 0,3 -1,0 0,-2 -1,0 0,2 -1,0 0,-3 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72578"
- d="m 130,-119 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72580"
- d="m 94.75,-119 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72582"
- d="m 85,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 88,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z"
- id="path72588" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 99,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- id="path72590" />
- <path
- id="path72592"
- d="m 103,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 107,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- id="path72594" />
- <path
- id="path72596"
- d="m 111,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,3 1,0 0,-5 -1,0 0,1 -1,0 0,1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 117,-119 0,5 1,0 0,-2 1.25,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- id="path72598" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 121.75,-119 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z"
- id="path72600" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 125,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- id="path72602" />
- <rect
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect72604"
- width="1"
- height="5"
- x="136"
- y="-119" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 138,-119 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- id="path72606" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 144.75,-119 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z"
- id="path72608" />
- <path
- inkscape:connector-curvature="0"
- id="path72610"
- d="m 148,-119 0,5 1,0 2,0 0,-1 -2,0 0,-4 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 153,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- id="path72612" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 157,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- id="path72614" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 163,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z"
- id="path72616" />
- <rect
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect72618"
- width="1"
- height="5"
- x="174"
- y="-119" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 168,-119 0,3.25 1,0 0,1.75 1,0 0,-1.75 1,0 0,1.75 1,0 0,-1.75 1,0 0,-3.25 -1,0 0,3 -1,0 0,-2 -1,0 0,2 -1,0 0,-3 -1,0 z"
- id="path72620" />
- <path
- id="path72622"
- d="m 180,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- id="path72624"
- d="m 176,-119 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- id="path32207-9-7"
- d="m 187,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 -2,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32209-6-7"
- d="m 191,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32211-3-7"
- d="m 195,-119 0,5 1,0 0,-2 1.25,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32213-7-3"
- d="m 199,-119 0,2.25 1,0 0,2.75 1,0 0,-2.75 1,0 0,-2.25 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32216-8-3"
- d="m 203,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-2 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect32218-8-5"
- width="1"
- height="5"
- x="207"
- y="-119" />
- <path
- inkscape:connector-curvature="0"
- id="path32220-2-9"
- d="m 210,-119 0,0.75 -1,0 0,3.5 1,0 0,0.75 2,0 0,-1 0,-1.25 -1,0 0,1.25 -1,0 0,-3 2,0 0,-1 -2,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32222-9-9"
- d="m 213,-119 0,5 1,0 0,-2 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 0,-2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32224-1-8"
- d="m 217,-119 0,1 1,0 0,4 1,0 0,-4 1,0 0,-1 -3,0 0,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- id="path72678"
- d="m 225,-119 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 235,-119 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- id="path72680"
- inkscape:connector-curvature="0" />
- <rect
- y="-119"
- x="223"
- height="5"
- width="1"
- id="rect72682"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- y="-115"
- x="239"
- height="1"
- width="1"
- id="rect72684"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- id="path72686"
- d="m 230,-119 0,5 1,0 0,-2 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <g
- transform="translate(-62,136.5)"
- style="display:inline;enable-background:new"
- id="g72880">
- <g
- transform="translate(231,-90)"
- id="g32242-4">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m -12.25,-17 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z"
- id="path32244-2" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m -9,-17 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,-1 -1,0 z m 1,0 1,0 0,3 1,0 0,-5 -1,0 0,1 -1,0 0,1 z"
- id="path32246-0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m -3,-17 0,5 1,0 1,0 0,-0.5 1,0 0,-1.5 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z m 0,2 1,0 0,1 -1,0 0,-1 z"
- id="path32248-9" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 1,-17 0,5 1,0 0,-2 1,0 0,2 1,0 0,-2 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- id="path32250-7" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 6,-17 0,1 2,0 0,-1 -2,0 z m 2,1 0,3 1,0 0,-3 -1,0 z m 0,3 -2,0 0,1 2,0 0,-1 z m -2,0 0,-3 -1,0 0,3 1,0 z"
- id="path32252-3" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 10,-17 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- id="path32254-7" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m -43.25,-17 0,1 -0.75,0 0,4 1,0 0,-2 1,0 0,2 1,0 0,-4 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,1 -1,0 0,-1 z"
- id="path32256-2" />
- <path
- inkscape:connector-curvature="0"
- id="path32258-6"
- d="m -40,-17 0,5 1,0 0,-3 1,0 0,-1 -1,0 0,-1 -1,0 z m 2,2 0,1 1,0 0,2 1,0 0,-5 -1,0 0,2 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32260-0"
- d="m -35,-17 0,1 0,3 0,1 2,0 0,-0.75 1,0 0,-3.5 -1,0 0,-0.75 -2,0 z m 1,1 1,0 0,3 -1,0 0,-3 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m -31,-17 0,5 1,0 0,-2 1,0 0,2 1,0 0,-2 -0.75,0 0,-1 0.75,0 0,-1.25 -1,0 0,-0.75 -1,0 -1,0 z m 1,1 1,0 0,1 -1,0 0,-1 z"
- id="path32262-1" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m -27,-17 0,1 2,0 0,1 1,0 0,-1 0,-1 -3,0 z m 2,2 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- id="path32264-6" />
- <path
- inkscape:connector-curvature="0"
- id="path32266-5"
- d="m -23,-17 0,5 1,0 2,0 0,-1 -2,0 0,-1 1,0 0,-1 -1,0 0,-1 2,0 0,-1 -2,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- id="path32268-7"
- d="m -17,-17 0,4 -1,0 0,-1 -1,0 0,1 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-4 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- y="-19"
- x="11"
- height="1"
- width="1"
- id="rect32270-5"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- </g>
- <g
- id="g21967-4"
- transform="translate(111.96875,-88)">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 48,-20 0,0.75 -1,0 0,0.25 -0.25,0 0,1 -0.75,0 0,3 0.75,0 0,1 0.25,0 0,0.25 1,0 0,0.75 3,0 0,-0.75 1,0 0,-0.25 0.25,0 0,-1 0.75,0 0,-3 -0.75,0 0,-1 -0.25,0 0,-0.25 -1,0 0,-0.75 -3,0 z m 0,1 3,0 0,1 1,0 0,3 -1,0 0,1 -3,0 0,-1 -1,0 0,-3 1,0 0,-1 z"
- id="path32272-1"
- sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc" />
- <path
- inkscape:connector-curvature="0"
- id="path32274-2"
- d="m 49,-18 0,0.75 -1,0 0,1.5 1,0 0,0.75 1.25,0 0,-1 -1.25,0 0,-1 1.25,0 0,-1 -1.25,0 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- sodipodi:nodetypes="ccccccccccccc" />
- </g>
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 171.71875,-107 0,1 -0.75,0 0,3 0.75,0 0,1 1.5,0 0,-1 0.75,0 0,-3 -0.75,0 0,-1 -1.5,0 z m 0.25,1 1,0 0,3 -1,0 0,-3 z m 0.25,1 0,1 0.5,0 0,-1 -0.5,0 z"
- id="path72688" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 175.96875,-107 0,1 -1,0 0,1 1,0 0,3 1,0 0,-5 -1,0 z"
- id="path72690" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 177.96875,-107 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- id="path72692" />
- <path
- id="path72694"
- d="m 166.96875,-107 0,1 2,0 0,1 -1,0 0,1 1,0 0,-0.75 1,0 0,-1.5 -1,0 0,-0.75 -2,0 z m 1,3 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- d="m 182.96875,-106 0,1 1,0 0,-1 -1,0 z m -0.21875,3 0,1 -0.75,0 0,1 1,0 0,-1 1,0 0,-1 -1.25,0 z"
- id="path72696" />
- </g>
- </g>
+ style="display:inline" />
<g
transform="translate(-872,-180)"
style="display:inline"
@@ -18970,1876 +16926,725 @@
id="rect30285"
style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:5.39191818;marker:none;enable-background:accumulate" />
<g
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- transform="translate(860,-202)"
- id="g21955"
- style="display:inline;opacity:0.3;enable-background:new">
- <rect
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
- id="rect21957"
- width="48"
- height="48"
- x="108"
- y="430"
- rx="2.4004419"
- ry="0" />
- <g
- id="g21959">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path21961"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="display:inline;fill:url(#linearGradient21977);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc"
- id="path21963"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- id="path21965"
- sodipodi:nodetypes="cccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="url(#clipPath13106)" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path21967"
- style="fill:none;stroke:url(#linearGradient21979);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 117.5,443.75 9,-2.5 0,-6"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21969"
- sodipodi:nodetypes="cccccc" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- id="path21971"
- sodipodi:nodetypes="cccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="url(#clipPath13106)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path21973"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.5,435 0,38.5 -30.5,0"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21975"
- sodipodi:nodetypes="ccc" />
- </g>
- </g>
+ transform="translate(0,12)"
+ id="g46790" />
<g
- transform="translate(4,0)"
- id="g30335">
- <g
- id="g21367"
- transform="translate(760,-202)">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path21369"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="display:inline;fill:url(#linearGradient30321);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc"
- id="path21371"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- id="path21373"
- sodipodi:nodetypes="cccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="url(#clipPath13106)" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path21375"
- style="fill:none;stroke:url(#linearGradient30323);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 117.5,443.75 9,-2.5 0,-6"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21377"
- sodipodi:nodetypes="cccccc" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- id="path21569"
- sodipodi:nodetypes="cccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="url(#clipPath13106)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path21379"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.5,435 0,38.5 -30.5,0"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21381"
- sodipodi:nodetypes="ccc" />
- </g>
+ id="g46890" />
+ <path
+ sodipodi:nodetypes="cc"
+ id="path34332"
+ style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
+ d=""
+ inkscape:connector-curvature="0" />
+ <g
+ id="g15770-4"
+ transform="translate(-1653.0047,902.99644)"
+ style="display:inline;opacity:0.6;enable-background:new">
<path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ id="path15766-8"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
- style="font-style:normal;font-weight:normal;font-size:33.49144363px;font-family:'Bitstream Vera Sans';display:inline;fill:#214478;fill-opacity:1;stroke:none"
- d="m 891.07148,245 -0.0715,9 2.39012,0 C 896,254 896,253 896.5,251 l 0.5,0 0,7 -0.5,0 c -0.5,-2 -0.5,-3 -3.10988,-3 L 891,255 l 0,7 c 0,2.5 1,3.25 3.14146,3.39973 l -0.004,0.60029 L 885,266 l 0.004,-0.60029 C 887,265.25 888,264.5 888.00001,262 L 888,248 c 0,-2.5 -1,-3.25 -3,-3.5 l 0,-0.5 16,0 0,5 -0.5,0 c -0.50001,-1.99999 -1.5,-4 -4.5,-4 l -4.92852,0 z"
- id="text13209"
- sodipodi:nodetypes="ccccccccccccccccccccccc" />
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ id="path15768-2" />
</g>
+ <path
+ sodipodi:nodetypes="ccssssssccccscssscccccsscscsccccssccc"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 875.49998,329 c -0.4167,0 -0.7749,0.19292 -1.041,0.45898 -0.2661,0.26607 -0.459,0.62435 -0.459,1.04102 v 32 c 0,3.03164 2.4684,5.5 5.5,5.5 H 912.5 c 3.0316,0 5.5,-2.46836 5.5,-5.5 v -20 c 0,-0.42425 -0.1991,-0.77237 -0.4648,-1.04883 -0.2658,-0.27646 -0.6395,-0.51191 -1.1055,-0.44531 l 0.07,-0.006 h -6.5 -27.50002 c -0.095,0 -0.1807,0.0361 -0.3223,0.17773 -0.1417,0.14177 -0.1777,0.22697 -0.1777,0.32227 v 21 c 0,1.20549 -0.8756,2.25014 -2.0625,2.46094 -1.1869,0.2108 -2.3701,-0.46784 -2.7852,-1.59961 -0.041,-0.1158 -0.061,-0.23824 -0.058,-0.36119 h 2.4062 v -0.008 c 0.03,-2.1e-4 0.058,0.005 0.088,0 0.2451,-0.0435 0.4121,-0.2432 0.4121,-0.49219 v -21 c 0,-0.74923 0.3782,-1.35083 0.7637,-1.73633 0.3856,-0.38565 0.9871,-0.76367 1.7363,-0.76367 h 27.50002 v -4.5 c 0,-0.41667 -0.1929,-0.77495 -0.459,-1.04102 -0.2661,-0.26606 -0.6243,-0.45898 -1.041,-0.45898 l -18.02732,0.0449 c -0.055,1.2e-4 -0.1892,-0.0544 -0.2989,-0.17383 -0.1114,-0.1193 -0.1738,-0.28349 -0.1738,-0.37109 v -2 c 0,-0.41667 -0.1929,-0.77495 -0.459,-1.04102 -0.2661,-0.26606 -0.6243,-0.45898 -1.041,-0.45898 z"
+ id="path15794"
+ inkscape:connector-curvature="0" />
<g
+ transform="translate(-1139.094,997)"
style="display:inline;enable-background:new"
- id="g21625"
- transform="translate(908,-154)"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- ry="0"
- rx="2.4004419"
- y="430"
- x="108"
- height="48"
- width="48"
- id="rect21627"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
+ id="g16516">
<g
- id="g21629">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:url(#linearGradient21647);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- id="path21631"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- style="display:inline;opacity:0.5;fill:#000000"
- id="g16261"
- transform="matrix(1.2499985,0,0,1,-87.6203,-147.85351)">
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect35099"
- width="17.600004"
- height="1"
- x="167.69646"
- y="598.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect35101"
- width="17.600004"
- height="1"
- x="167.69646"
- y="600.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15690"
- width="17.600004"
- height="1"
- x="167.69646"
- y="602.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15692"
- width="17.600004"
- height="1"
- x="167.69646"
- y="604.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15694"
- width="17.600004"
- height="1"
- x="167.69646"
- y="606.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15696"
- width="17.600004"
- height="1"
- x="167.69646"
- y="608.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15698"
- width="17.600004"
- height="1"
- x="167.69646"
- y="610.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15700"
- width="17.600004"
- height="1"
- x="167.69646"
- y="612.85352"
- rx="0.12125195"
- ry="0.065390877" />
- <rect
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="rect15732"
- width="14.400002"
- height="1"
- x="167.69646"
- y="614.85352"
- rx="0.09920612"
- ry="0.065390877" />
- <g
- transform="translate(150.89645,557.85352)"
- id="g4849"
- style="display:inline;fill:#000000">
- <rect
- ry="0.065390877"
- rx="0.12125195"
- y="29"
- x="16.799992"
- height="1"
- width="17.600004"
- id="rect15736"
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- ry="0.065390877"
- rx="0.12125195"
- y="31"
- x="16.799992"
- height="1"
- width="17.600004"
- id="rect15738"
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- ry="0.065390877"
- rx="0.12125195"
- y="33"
- x="16.799992"
- height="1"
- width="17.600004"
- id="rect15740"
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- ry="0.065390877"
- rx="0.12125195"
- y="35"
- x="16.799992"
- height="1"
- width="17.600004"
- id="rect15742"
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <rect
- ry="0.065390877"
- rx="0.055114571"
- y="37"
- x="16.799992"
- height="1"
- width="8.0000095"
- id="rect15744"
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- </g>
- <rect
- ry="0.065390304"
- rx="0.0057410933"
- y="617.85352"
- x="184.49646"
- height="0.99999124"
- width="0.83333319"
- id="rect16334"
- style="display:block;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- </g>
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21633"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path21635"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
+ id="g15792"
+ transform="translate(-500,-182)"
+ style="opacity:0.6">
<path
+ sodipodi:nodetypes="cscssscssssssssssccsc"
inkscape:connector-curvature="0"
- clip-path="none"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
- style="fill:none;stroke:url(#linearGradient21649);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path21637"
- sodipodi:nodetypes="ccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path21639"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path21641"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- id="path21643"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <g
- id="g35119"
- transform="translate(2,-160.99999)"
- style="display:inline">
- <g
- style="display:inline"
- transform="translate(105.39645,589.71201)"
- id="g16097">
- <g
- id="g16099"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
- transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)">
- <radialGradient
- id="radialGradient16101"
- cx="20.892099"
- cy="114.5684"
- r="5.256"
- fx="20.892099"
- fy="114.5684"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop16103" />
- <stop
- offset="1"
- style="stop-color:#474747"
- id="stop16105" />
- </radialGradient>
- <radialGradient
- id="radialGradient16109"
- cx="20.892099"
- cy="64.567902"
- r="5.257"
- fx="20.892099"
- fy="64.567902"
- gradientUnits="userSpaceOnUse">
- <stop
- offset="0"
- style="stop-color:#F0F0F0"
- id="stop16111" />
- <stop
- offset="1"
- style="stop-color:#474747"
- id="stop16113" />
- </radialGradient>
- </g>
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 l 0,0 0,0 0,0 z"
- id="path16107" />
- <path
- inkscape:connector-curvature="0"
- style="fill:url(#radialGradient21565);fill-rule:nonzero;stroke:none"
- d="m 12.60355,31.288131 c 0,0.552274 -0.447803,0.999859 -1,0.999859 -0.552477,0 -1,-0.447865 -1,-0.999859 0,-0.552556 0.447803,-1.000141 1,-1.000141 0.552197,0 1,0.447866 1,1.000141 z"
- id="path16117" />
- </g>
- <g
- id="g16131"
- transform="translate(105.39645,579.71201)"
- style="display:inline">
- <g
- transform="matrix(0.229703,0,0,0.229703,4.967081,4.244972)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-miterlimit:4"
- id="g16133">
- <radialGradient
- gradientUnits="userSpaceOnUse"
- fy="114.5684"
- fx="20.892099"
- r="5.256"
- cy="114.5684"
- cx="20.892099"
- id="radialGradient16135">
- <stop
- id="stop16137"
- style="stop-color:#F0F0F0"
- offset="0" />
- <stop
- id="stop16140"
- style="stop-color:#474747"
- offset="1" />
- </radialGradient>
- <radialGradient
- gradientUnits="userSpaceOnUse"
- fy="64.567902"
- fx="20.892099"
- r="5.257"
- cy="64.567902"
- cx="20.892099"
- id="radialGradient16142">
- <stop
- id="stop16144"
- style="stop-color:#F0F0F0"
- offset="0" />
- <stop
- id="stop16146"
- style="stop-color:#474747"
- offset="1" />
- </radialGradient>
- </g>
- <path
- inkscape:connector-curvature="0"
- id="path35139"
- d="m 12.85355,31.53813 c 0,0.552274 -0.447803,0.99986 -1,0.99986 -0.552477,0 -1,-0.447865 -1,-0.99986 0,-0.552554 0.447803,-1.00014 1,-1.00014 0.552197,0 1,0.447866 1,1.00014 l 0,0 0,0 0,0 z"
- style="display:inline;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- id="path35141"
- d="m 12.60355,31.288131 c 0,0.552274 -0.447803,0.999859 -1,0.999859 -0.552477,0 -1,-0.447865 -1,-0.999859 0,-0.552556 0.447803,-1.000141 1,-1.000141 0.552197,0 1,0.447866 1,1.000141 z"
- style="fill:url(#radialGradient21567);fill-rule:nonzero;stroke:none" />
- </g>
- </g>
+ d="m 2564.8618,-451.50005 c 0.3211,0.5561 0.8787,0.91004 1.4878,0.98518 0.2496,0.0308 0.5078,0.0148 0.7619,-0.0533 0.8744,-0.23427 1.4824,-1.02663 1.4824,-1.93185 v -22 c 0,-0.4714 0.5286,-1 1,-1 l 34,2e-5 c 0.4667,-0.0667 1,0.52863 1,1.00003 v 22 c 0,2.76142 -2.2386,5 -5,5 h -33 c -2.7614,0 -5,-2.23858 -5,-5 v -33 c 0,-0.5 0.5,-1 1,-1 h 13 c 0.5,0 1,0.5 1,1 v 2 c 0,0.5 0.4872,1.0452 0.9723,1.0442 l 18.0277,-0.0442 c 0.5,0 1,0.5 1,1 v 2"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ id="path15787" />
<path
+ sodipodi:nodetypes="cc"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path21645"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ id="path15790"
+ d="m 2596.5,-479.5 v 1.5"
+ style="fill:none;stroke:#ffffff;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
- </g>
- <g
- style="display:inline;enable-background:new"
- id="g21572"
- transform="translate(812,-202)"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- ry="0"
- rx="2.4004419"
- y="430"
- x="108"
- height="48"
- width="48"
- id="rect21574"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
<g
- id="g21576">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:url(#linearGradient21594);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- id="path21578"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21580"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path21582"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
+ id="g15799"
+ transform="matrix(0,1,1,0,2028.5,-908.5)"
+ style="display:inline;opacity:1;stroke:#ffffff;stroke-width:2;stroke-miterlimit:4;stroke-dasharray:none;enable-background:new"
+ inkscape:export-filename="C:\Users\Andrzej Ambroż\Desktop\mtrx.png"
+ inkscape:export-xdpi="96"
+ inkscape:export-ydpi="96">
<path
+ id="path15797"
+ style="opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke"
+ d="m 271.5,63.5 v -5 c 0,-1.104569 -0.89543,-2 -2,-2 h -11 m 4,5 -5,-5 5,-5"
inkscape:connector-curvature="0"
- clip-path="none"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
- style="fill:none;stroke:url(#linearGradient21596);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path21584"
- sodipodi:nodetypes="ccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path21586"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path21588"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- id="path21590"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path21592"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
+ sodipodi:nodetypes="ccccccc" />
</g>
</g>
<g
- transform="translate(4,0)"
- id="g30382">
- <g
- id="g23655"
- transform="translate(760,-154)">
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path23657"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- style="display:inline;fill:url(#linearGradient30368);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccc"
- id="path23659"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- id="path23661"
- sodipodi:nodetypes="cccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="url(#clipPath13106)" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path23663"
- style="fill:none;stroke:url(#linearGradient30370);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 117.5,443.75 9,-2.5 0,-6"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path23665"
- sodipodi:nodetypes="cccccc" />
- <path
- inkscape:connector-curvature="0"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- id="path23667"
- sodipodi:nodetypes="cccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90"
- clip-path="url(#clipPath13106)" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccccc"
- id="path23669"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.5,435 0,38.5 -30.5,0"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path23671"
- sodipodi:nodetypes="ccc" />
- </g>
+ style="display:inline;opacity:0.6;enable-background:new"
+ transform="translate(-1653.0001,855.00002)"
+ id="g6937">
+ <path
+ inkscape:connector-curvature="0"
+ id="path6933"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
+ id="path6935"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
- d="m 888,295 1,0 0,14 -1,0 0,-14 z"
- id="path23675"
- sodipodi:nodetypes="ccccc" />
+ sodipodi:nodetypes="cccccccc" />
+ </g>
+ <g
+ id="g6943"
+ transform="translate(-1701.0001,855.00002)"
+ style="display:inline;opacity:0.6;enable-background:new">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ id="path6939"
+ inkscape:connector-curvature="0" />
<path
+ sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
- id="path23677"
- d="m 900,294 1.00002,-1 0,14 -1.00002,0 0,-13 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
- sodipodi:nodetypes="ccccc" />
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ id="path6941" />
+ </g>
+ <g
+ style="display:inline;opacity:0.6;enable-background:new"
+ transform="translate(-1749.0047,854.99644)"
+ id="g6949">
<path
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccc"
- id="path23679"
- d="m 901.00003,292 0,2.25 -13.00002,2 0,-2.25 13.00002,-2 z"
- style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
- <g
- id="g23681"
- transform="matrix(1.1428564,0,0,1.2000001,822.71436,-355.40005)">
- <ellipse
- ry="2.25"
- rx="4.5"
- cy="554"
- cx="53"
- transform="matrix(0.7630859,-0.2494396,0.2996015,0.9926766,-151.92281,17.77746)"
- id="path23683"
- style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate" />
- <ellipse
- ry="2.25"
- rx="4.5"
- cy="554"
- cx="53"
- style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;filter:url(#filter20578);enable-background:accumulate"
- id="path23685"
- transform="matrix(0.3848865,-0.1700959,0.2278131,0.3626733,-93.107467,361.59408)"
- inkscape:transform-center-y="0.3813435"
- clip-path="url(#clipPath20586)" />
- </g>
+ id="path6945"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
+ id="path6947"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
inkscape:connector-curvature="0"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.38999999;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
- d="m 901.00003,292 -1e-5,1 -13.00002,2 10e-6,-1 13.00002,-2 z"
- id="path23694"
- sodipodi:nodetypes="ccccc" />
- <g
- transform="matrix(1.1428564,0,0,1.2000001,834.71436,-357.40005)"
- id="g23717">
- <ellipse
- ry="2.25"
- rx="4.5"
- cy="554"
- cx="53"
- style="display:inline;overflow:visible;visibility:visible;fill:#112b00;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;enable-background:accumulate"
- id="path23724"
- transform="matrix(0.7630859,-0.2494396,0.2996015,0.9926766,-151.92281,17.77746)" />
- <ellipse
- ry="2.25"
- rx="4.5"
- cy="554"
- cx="53"
- clip-path="url(#clipPath20586)"
- inkscape:transform-center-y="0.3813435"
- transform="matrix(0.3848865,-0.1700959,0.2278131,0.3626733,-93.107467,361.59408)"
- id="path23726"
- style="display:inline;overflow:visible;visibility:visible;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1px;marker:none;filter:url(#filter20578);enable-background:accumulate" />
- </g>
+ sodipodi:nodetypes="cccccccc" />
</g>
<g
- id="g23922"
- transform="translate(-12,-220)"
- style="display:inline;enable-background:new">
- <g
- style="display:inline"
- id="g23924"
- transform="translate(824,66)"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- ry="0"
- rx="2.4004419"
- y="430"
- x="108"
- height="48"
- width="48"
- id="rect23926"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
- <g
- id="g23928">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:url(#linearGradient23978);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- id="path23930"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path23932"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path23934"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
- <path
- inkscape:connector-curvature="0"
- clip-path="none"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
- style="fill:none;stroke:url(#linearGradient23980);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path23936"
- sodipodi:nodetypes="ccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path23938"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path23940"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- id="path23942"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path23944"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- </g>
- </g>
+ id="g6955"
+ transform="translate(-1797.0001,855.00002)"
+ style="display:inline;opacity:0.6;enable-background:new">
<path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccc"
- id="path23946"
- d="m 952,530 0,10 1,0 1,0 11,0 1,0 1,0 0,-10 -15,0 z m 1,2 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- transform="scale(1,-1)"
- style="fill:url(#linearGradient23982);fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect23948"
- width="13"
- height="5.5"
- x="953"
- y="-524" />
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ id="path6951"
+ inkscape:connector-curvature="0" />
<path
+ sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
- id="path23952"
- transform="translate(76,0)"
- d="m 876,514 0,17 15,0 0,-17 -1,0 0,1 -1,0 0,-1 -11,0 0,1 -1,0 0,-1 -1,0 z m 1,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z m -12,3 1,0 0,1 -1,0 0,-1 z m 12,0 1,0 0,1 -1,0 0,-1 z"
- style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ id="path6953" />
+ </g>
+ <g
+ id="g6961"
+ transform="translate(-1653.0001,807.00002)"
+ style="display:inline;opacity:0.6;enable-background:new">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ id="path6957"
+ inkscape:connector-curvature="0" />
<path
+ sodipodi:nodetypes="cccccccc"
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccc"
- style="fill:url(#linearGradient23986);fill-opacity:1;fill-rule:nonzero;stroke:none"
- d="m 952,507 3,0 0,3 9,0 0,-3 3,0 0,7 -15,0 0,-7 z m 1,0 1,0 -1,0 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,3 0,1 1,0 0,-1 -1,0 z m 12,-4 1,0 -1,0 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,3 0,1 1,0 0,-1 -1,0 z"
- id="path23954" />
- <rect
- transform="matrix(0,1,1,0,0,0)"
- ry="0"
- y="955"
- x="507"
- height="9"
- width="3"
- id="rect23956"
- style="fill:url(#linearGradient23988);fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <rect
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect23958"
- width="9"
- height="9"
- x="512"
- y="955"
- ry="0"
- transform="matrix(0,1,1,0,0,0)" />
- <rect
- transform="matrix(0,1,1,0,0,0)"
- ry="0"
- y="955"
- x="523"
- height="9"
- width="9"
- id="rect23960"
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none" />
- <circle
- r="8"
- cy="118"
- cx="132"
- transform="matrix(0,-0.5624971,0.5624971,0,893.12531,590.74965)"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path23962"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <circle
- r="8"
- cy="118"
- cx="132"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- id="path23964"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-0.5624964,0.5624964,0,893.12545,601.74956)" />
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ id="path6959" />
+ </g>
+ <g
+ style="display:inline;opacity:0.6;enable-background:new"
+ transform="translate(-1701.0001,807.00002)"
+ id="g6967">
<path
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccccccc"
- id="path23966"
- d="m 961.00001,519.00005 -3,0 0,-0.99992 0.99994,0 6e-5,-2.00008 -1,0 0,-1 1,0 0,-1 1.00006,0 0,4.00008 0.99994,0 0,0.99992 z" />
+ id="path6963"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
<path
+ id="path6965"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
inkscape:connector-curvature="0"
- d="m 958,525 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m -1,1 -1,0 0,1 0,1 3,0 0,-1 -2,0 0,-1 z"
- id="path23968" />
- <rect
- style="fill:#808080;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="rect23970"
- width="6"
- height="9"
- x="534"
- y="955"
- ry="0"
- transform="matrix(0,1,1,0,0,0)" />
- <g
- clip-path="url(#clipPath23877)"
- id="g23972">
- <circle
- r="8"
- cy="118"
- cx="132"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\Kopia blender\.blender\icons\blender's iconset.png"
- id="path23974"
- style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- transform="matrix(0,-0.5624964,0.5624964,0,893.12545,612.74956)" />
- <path
- inkscape:connector-curvature="0"
- d="m 958,536 0,1 2,0 0,-1 -2,0 z m 2,1 0,1 1,0 0,-1 -1,0 z m 0,1 -1,0 0,1 1,0 0,-1 z m 0,1 0,1 1,0 0,-1 -1,0 z m 0,1 -2,0 0,1 2,0 0,-1 z"
- id="path23976" />
- </g>
+ sodipodi:nodetypes="cccccccc" />
</g>
<g
- transform="translate(212,88)"
- id="g45475"
- style="display:inline;enable-background:new">
- <g
- style="display:inline"
- id="g22242"
- transform="translate(696,-194)"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- ry="0"
- rx="2.4004419"
- y="430"
- x="108"
- height="48"
- width="48"
- id="rect22244"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
- <g
- id="g22246">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:url(#linearGradient22274);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- id="path22249"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path22251"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path22253"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
- <path
- inkscape:connector-curvature="0"
- clip-path="none"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
- style="fill:none;stroke:url(#linearGradient22276);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path22264"
- sodipodi:nodetypes="ccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path22266"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path22268"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011)" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- id="path22270"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path22272"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- </g>
- </g>
- <g
- id="g21517"
- inkscape:label="Layer 1"
- transform="matrix(0.5406242,0,0,0.5829534,814.13667,247.65542)">
- <ellipse
- ry="5.3033009"
- rx="15.467961"
- cy="38.98439"
- cx="28.019106"
- transform="matrix(1.274286,0,0,1.377124,-7.569123,-16.70193)"
- id="path35486"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.54857142;fill:url(#radialGradient21442);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csssssssssscccsscccscccssccc"
- d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 l 1e-6,2.6e-5 0,0 0,0 z"
- id="path2482"
- style="fill:#f57900;fill-rule:evenodd;stroke:#aa4400;stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
- <ellipse
- ry="10.125"
- rx="11.5625"
- cy="25.75"
- cx="31.1875"
- transform="matrix(0.8018194,0,0,0.8471126,6.257567,4.5089892)"
- id="path39153"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient21444);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.4857143;fill:none;stroke:url(#linearGradient21446);stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
- d="m 25.8125,6.40625 c -0.334829,4.572e-4 -0.72202,0.089606 -0.90625,0.21875 4.5e-4,0.010412 4.5e-4,0.020838 0,0.03125 -0.212626,0.1484635 -0.188235,0.1956271 -0.1875,0.1875 0.0092,0.010621 -0.0072,-4.246e-4 0.03125,0.03125 0.01962,0.00828 0.03527,0.012546 0.0625,0.03125 0.01676,0.01151 0.01357,0.014555 0.03125,0.03125 0.193748,0.1576058 4.954976,4.005164 4.954976,4.005164 0.489837,0.39864 0.677395,1.066352 0.46875,1.65625 -0.115662,0.32703 -0.422813,0.541217 -0.6875,0.59375 -0.264687,0.05253 -0.498447,0.03054 -0.71875,0.03125 -5.639658,0.05119 -16.87989,0.03851 -16.87989,0.03851 -0.4102,2.75e-4 -0.935835,0.115997 -1.34375,0.34375 -0.407915,0.227753 -0.6637862,0.523861 -0.6875002,0.90625 -0.024417,0.393728 0.098829,0.605767 0.3437502,0.78125 0.244921,0.175483 0.614978,0.25 0.875,0.25 0,0 8.8125,0 8.8125,0 0.600305,-7.28e-4 1.223895,0.311058 1.4375,0.9375 0.04676,0.137121 0.06335,0.269976 0.0625,0.40625 -8.49e-4,0.136274 -0.02214,0.268794 -0.09375,0.375 -0.143211,0.212412 -0.319507,0.298568 -0.5,0.4375 0,0 -15.7871819,12.746851 -15.856336,12.800078 C 5.0310984,30.500117 5,30.53125 5,30.53125 5.0100745,30.519077 5.000335,30.499512 5,30.5 L 4.8125,30.3125 c 0.012336,0.02165 0.014481,0.03307 0.03125,0.0625 0.063558,0.0774 0.125,0.15625 0.125,0.15625 -0.00585,0.0056 -0.031233,0.03124 -0.03125,0.03125 0,0 -0.043442,-0.09921 -0.09375,-0.1875 0.037843,0.09884 0.06253,0.218739 0.0625,0.21875 -0.4662091,0.37119 -0.7783348,0.889746 -0.875,1.28125 -0.1043319,0.422581 -0.046,0.62455 0.125,0.84375 0.2999827,0.384295 1.3975356,0.595547 2.40625,-0.21875 0,0 8.65625,-7.09375 8.65625,-7.09375 0.473718,-0.387074 1.1446,-0.458625 1.6875,-0.15625 0.544608,0.303331 0.798054,0.927572 0.71875,1.53125 0,0 -0.0626,0.908319 -0.0625,1.25 2e-6,0.0085 -1.19e-4,0.02348 0,0.03125 0.192796,2.523718 1.400736,4.762818 3.03125,6.71875 2.801818,3.089095 6.627659,4.401619 10.75,4.5625 4.113324,-0.043 7.964529,-1.606111 10.75,-4.625 2.546631,-3.125326 3.513872,-6.363859 3.15625,-9.375 C 44.891575,22.325847 43.222923,19.516566 40.4375,17.25 35.951885,13.599946 31.206991,10.168434 26.59375,6.625 26.57515,6.610386 26.56455,6.59802 26.5625,6.59375 26.43835,6.498703 26.144223,6.4057899 25.8125,6.40625 Z"
- id="path21414"
- sodipodi:nodetypes="csssssscssscsssccssscscccsccssssccscsscccssssc" />
- <path
- inkscape:connector-curvature="0"
- d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 l 0,0 0,0 0,0 z"
- id="path2478"
- style="fill:#3465a4;fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csssscsccsscsccssssscsscccsssc"
- id="path39166"
- d="m 25.8125,6.03125 c -0.404852,5.53e-4 -2.204797,-0.059029 -2.48145,0.1349032 -0.280209,0.195652 -0.335403,0.376484 -0.34375,0.46875 -0.0083,0.092266 -0.01539,0.17648 0.1875,0.34375 0.01899,0.015735 0.04457,0.014317 0.0625,0.03125 0.124258,0.101028 4.748869,4.1248618 4.748869,4.1248618 0.373658,0.304091 0.504393,0.795817 0.34375,1.25 -0.160635,0.454191 -0.580748,0.373449 -1.0625,0.375 -5.634142,0.05114 -15.087371,-0.129601 -15.087371,-0.129601 -0.952967,6.38e-4 -2.339958,0.524782 -2.4062504,1.59375 -0.063562,1.024947 0.9247974,1.4375 1.5937504,1.4375 0,-1e-6 8.8125,0 8.8125,0 0.488364,-5.92e-4 0.936141,0.225277 1.09375,0.6875 0.157609,0.462231 -0.01926,0.514621 -0.40625,0.8125 0,0 -16.086298,13.088586 -16.086298,13.088586 -0.00142,0.0014 -0.029829,-0.0014 -0.03125,0 -0.064037,0.04879 -0.054226,0.04875 -0.03125,0.03125 -0.5536758,0.424619 -0.9087886,1.004019 -1.03125,1.5 -0.1224536,0.495981 -0.04661,0.856152 0.1875,1.15625 0.4788333,0.613413 1.777612,0.754857 2.90625,-0.15625 1e-7,10e-7 8.65625,-7.09375 8.65625,-7.09375 0.361955,-0.295753 0.872897,-0.352437 1.28125,-0.125 0.408345,0.227436 0.623381,0.692814 0.5625,1.15625 0,-1e-6 -0.0997,0.953636 -0.09375,1.34375 0.09498,1.301756 0.451616,2.521825 0.989039,3.664234 C 20.799917,36.321089 27.770982,19.392853 44.1875,21.03125 43.339652,19.54368 42.151282,18.185293 40.65625,16.96875 36.159865,13.309932 31.42016,9.882897 26.8125,6.34375 26.805335,6.338858 26.788292,6.317553 26.78125,6.3125 26.570707,6.151312 26.216591,6.030689 25.8125,6.03125 Z"
- style="opacity:0.51999996;fill:url(#radialGradient21448);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- </g>
+ id="g6973"
+ transform="translate(-1749.0047,806.99644)"
+ style="display:inline;opacity:0.6;enable-background:new">
+ <path
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ id="path6969"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccccccc"
+ inkscape:connector-curvature="0"
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ id="path6971" />
</g>
<g
- id="g6090">
- <g
- id="g24784"
- transform="translate(116,247.5)"
- style="opacity:0.5">
- <path
- sodipodi:nodetypes="ccccccssssccc"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24809);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="path24789"
- d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z"
- inkscape:connector-curvature="0" />
- <path
- id="path24791"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24811);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0"
- sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
- inkscape:connector-curvature="0" />
- <path
- inkscape:export-ydpi="74.800003"
- inkscape:export-xdpi="74.800003"
- inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
- sodipodi:nodetypes="csccsczc"
- id="path24793"
- d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-18.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,19.5 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24813);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z"
- id="path24796"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:nodetypes="ccssccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cc"
- d="m 840.5,89 0,4.5"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- id="path24799"
- inkscape:connector-curvature="0" />
- <path
- id="path24801"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 848.5,95.5 0,18 c 0,1.25 0.25,3 -1.25,4"
- sodipodi:nodetypes="ccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccccccsc"
- d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-18 34,0 m -29,-8 c 0,0.5 0.5286,1 1,1 l 20,0"
- style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path24803"
- inkscape:connector-curvature="0" />
- <path
- d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-18 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z"
- id="path24805"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- sodipodi:nodetypes="ccccsscccssssccc"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:url(#linearGradient24815);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 841.5,94.5 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,18 c 0,2.25 -1.25,3 -2.5,3"
- id="path24807"
- sodipodi:nodetypes="csscc"
- inkscape:connector-curvature="0" />
- </g>
- <g
- style="display:inline;filter:url(#filter6078);enable-background:new"
- id="g44334"
- transform="translate(619,272.5)">
- <rect
- y="73"
- x="320"
- height="16"
- width="16"
- id="rect44336"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate" />
- <g
- id="g44338"
- transform="translate(0,-21)">
- <g
- id="g44340">
- <g
- id="g44342"
- transform="translate(0,21)">
- <path
- style="fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 333.25,87 -5.25,0 -1,-1 0,-10"
- id="path44344"
- sodipodi:nodetypes="cccc"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="M 331.25,79.25 327,75.005631 322.75,79.25"
- id="path44346"
- sodipodi:nodetypes="ccc"
- inkscape:connector-curvature="0" />
- </g>
- <g
- id="g44348"
- transform="translate(0,21)">
- <path
- sodipodi:nodetypes="cccc"
- id="path44350"
- d="m 333.25,87 -5.25,0 -1,-1 0,-10"
- style="fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccc"
- id="path44352"
- d="M 331.25,79.25 327,75.005631 322.75,79.25"
- style="fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- <path
- sodipodi:nodetypes="cccccc"
- id="path44354"
- d="m 328.5,107.5 5,0 m -7,-9 0,8.5 m -4.25,-7 4.5,-4.5"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- </g>
+ style="display:inline;opacity:0.6;enable-background:new"
+ transform="translate(-1797.0001,807.00002)"
+ id="g6979">
+ <path
+ inkscape:connector-curvature="0"
+ id="path6975"
+ d="m 2691.4961,-577 c -1.4585,10e-6 -2.8611,0.57961 -3.877,1.63477 L 2673.293,-561 h 14.705 c 0.5523,-6e-5 0.9999,-0.44774 1,-1 v -10.5 c 0,-1.94484 1.5551,-3.5 3.5,-3.5 0.6573,-0.009 0.9864,-0.50465 0.9864,-1 z"
+ style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" />
+ <path
+ id="path6977"
+ style="display:inline;opacity:1;vector-effect:none;fill:none;fill-opacity:1;stroke:#ffffff;stroke-width:1;stroke-linecap:square;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;paint-order:fill markers stroke;enable-background:new"
+ d="m 2691.4963,-576.50002 h 19.9969 c 0.5523,-3e-5 1,0.44769 1.0015,0.99998 l 0.01,41.00357 c 0,0.55581 -0.4477,1.00353 -1,1 h -37.0035 c -0.5559,0.004 -1.0036,-0.44419 -1,-1 v -24.00355"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccc" />
</g>
<g
- transform="translate(68,247.5)"
- id="g24818"
- style="display:inline;enable-background:new">
+ transform="translate(810,316.5)"
+ style="display:inline;enable-background:new"
+ id="g72880" />
+ <g
+ id="g3789">
<path
inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccssssccc"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24839);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- id="path24821"
- d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 996,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 -1.25 h -1 V 193 h -1 v -3 h 2 v -1 z"
+ id="path72434" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ id="rect72436"
+ width="1"
+ height="5"
+ x="1029"
+ y="189" />
<path
inkscape:connector-curvature="0"
- id="path24823"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24841);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0"
- sodipodi:nodetypes="cccccccccccccccccccccccccccccc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 954,189 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 H 955 v -4 z"
+ id="path72438" />
<path
inkscape:connector-curvature="0"
- inkscape:export-ydpi="74.800003"
- inkscape:export-xdpi="74.800003"
- inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
- sodipodi:nodetypes="csccsczc"
- id="path24825"
- d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-16 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,17 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24843);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 999,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ id="path72440" />
<path
inkscape:connector-curvature="0"
- d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z"
- id="path24827"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- sodipodi:nodetypes="ccssccc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 975,189 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ id="path72442" />
<path
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cc"
- d="m 840.5,89 0,7.5"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- id="path24829" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 940,189 v 0.75 h -1 v 1.5 h 1 V 192 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 191 h -1 v -1 h 1.5 v -1 z"
+ id="path72446" />
<path
inkscape:connector-curvature="0"
- id="path24831"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 848.5,98.75 0,14.75 c 0,1.25 0.25,3 -1.25,4"
- sodipodi:nodetypes="ccc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 964,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ id="path72448" />
<path
inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccsc"
- d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-16 34,0 m -29,-10 c 0,0.5 0.5286,1 1,1 l 20,0"
- style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path24833" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 943,189 v 4.25 h 1 V 194 h 2 v -0.75 h 1 V 189 h -1 v 4 h -2 v -4 z"
+ id="path72450" />
<path
inkscape:connector-curvature="0"
- d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-16 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-8 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z"
- id="path24835"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- sodipodi:nodetypes="ccccsscccssssccc" />
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 948,189 v 5 h 1 1 v -0.5 h 1 V 192 h -0.75 v -1 H 951 v -1.25 h -1 V 189 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z"
+ id="path72452" />
<path
inkscape:connector-curvature="0"
- style="fill:none;stroke:url(#linearGradient24845);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 841.5,96.500004 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,15.999996 c 0,2.25 -1.25,3 -2.5,3"
- id="path24837"
- sodipodi:nodetypes="csscc" />
- </g>
- <g
- id="g6158">
- <g
- transform="translate(164,247.5)"
- id="g24847"
- style="opacity:0.5">
- <path
- d="m 806.5,114.5 c 0,2.25 2,4 4,4 l 30,0 c 0.4163,0 1,-0.5 1,-1 l 0,-29 c 0,-0.5 -0.5,-1 -1,-1 l -21.02773,0.04419 C 818.98721,87.545209 818.5,87 818.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -10,0 c -0.5,0 -1,0.5 -1,1 l 0,31 z"
- id="path24849"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24867);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
- sodipodi:nodetypes="ccccccssssccc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccccccccccccccccccccccccccccc"
- d="m 807.5,89.5 33,0 m -33,12 33,0 m -33,-4 33,0 m -33,-6 33,0 m -33,20 33,0 m -33,2 33,0 m -33,-18 33,0 m -33,-2 33,0 m -20,-6 -13,0 m 0,20 33,0 m -33,-2 33,0 m -33,-2 33,0 m -33,-4 33,0 m -33,10 33,0 m -33,6 33,0"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.07999998;fill:url(#linearGradient24869);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- id="path24851"
- inkscape:connector-curvature="0" />
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient24871);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate"
- d="m 844,118.5 c 3.5,0 5.5,-2 5.5,-5.5 l 0,-18.5 c -11.75604,-1.11e-4 -23.91623,0 -35.5,0 l 0,19.5 c 0,4.5 -7,4 -7,0.25 0,2 2.00002,3.73529 3,3.75 l 34,0.5 z"
- id="path24853"
- sodipodi:nodetypes="csccsczc"
- inkscape:export-filename="/home/jimmac/ximian_art/icons/nautilus/suse93/gnome-fs-directory.png"
- inkscape:export-xdpi="74.800003"
- inkscape:export-ydpi="74.800003"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccssccc"
- style="opacity:0.7;fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
- id="path24855"
- d="m 807,87 12,0 0.0385,-3.33333 C 819.04423,83.166705 818.97512,83 818.5,83 l -10.92308,0 c -0.47512,0 -0.53846,0.16667 -0.53846,0.66667 L 807,87 Z"
- inkscape:connector-curvature="0" />
- <path
- id="path24857"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- d="m 840.5,89 0,4.5"
- sodipodi:nodetypes="cc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccc"
- d="m 848.5,95.5 0,18 c 0,1.25 0.25,3 -1.25,4"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:none;stroke:#000000;stroke-width:1.00000024;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dashoffset:0;stroke-opacity:1;marker:none"
- id="path24859"
- inkscape:connector-curvature="0" />
- <path
- id="path24861"
- style="display:inline;opacity:0.75;fill:none;stroke:#ffffff;stroke-width:1.29999995;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- d="m 818.5,83.5 -11,0 0,30 c 0,5 7,5 7,0 l 0,-18 34,0 m -29,-8 c 0,0.5 0.5286,1 1,1 l 20,0"
- sodipodi:nodetypes="cccccccsc"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccccsscccssssccc"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- id="path24863"
- d="m 806.5,113.5 c 0,2.75 2,5 5,5 l 33,0 c 3,0 5,-2 5,-5 l 0,-18 c 0,-0.471405 -0.5286,-1 -1,-1 l -7,0 0,-6 c 0,-0.5 -0.5,-1 -1,-1 l -20.02773,0.04419 C 819.98721,87.54526 819.5,87 819.5,86.5 l 0,-3 c 0,-0.5 -0.5,-1 -1,-1 l -11,0 c -0.5,0 -1,0.5 -1,1 l 0,30 z"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="csscc"
- id="path24865"
- d="m 841.5,94.5 -27,0 c -0.4714,0 -1,0.528595 -1,1 l 0,18 c 0,2.25 -1.25,3 -2.5,3"
- style="fill:none;stroke:url(#linearGradient24873);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- inkscape:connector-curvature="0" />
- </g>
- <g
- style="display:inline;filter:url(#filter6146);enable-background:new"
- id="g44356"
- transform="translate(647,272.55)">
- <rect
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#1a1a1a;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1.20000005;marker:none;enable-background:accumulate"
- id="rect44358"
- width="16"
- height="16"
- x="341"
- y="73" />
- <g
- id="g44360"
- transform="translate(0,-21)">
- <g
- id="g44362">
- <g
- id="g44364">
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5"
- id="path44366"
- sodipodi:nodetypes="cs"
- inkscape:connector-curvature="0" />
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
- id="path44368"
- sodipodi:nodetypes="ccc"
- inkscape:connector-curvature="0" />
- </g>
- <g
- id="g44370">
- <path
- sodipodi:nodetypes="ccc"
- id="path44372"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cs"
- id="path44374"
- d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <path
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
- d="m 344,105 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z"
- id="path44376"
- inkscape:connector-curvature="0" />
- </g>
- <g
- transform="matrix(-1,0,0,-1,698,204)"
- id="g44378">
- <g
- id="g44380">
- <path
- sodipodi:nodetypes="cs"
- id="path44382"
- d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccc"
- id="path44384"
- d="m 343,108.25 0,-4.25 4.25,0"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:3.4000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <g
- id="g44386">
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 343,108.25 0,-4.25 4.25,0"
- id="path44388"
- sodipodi:nodetypes="ccc"
- inkscape:connector-curvature="0" />
- <path
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#e6e6e6;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 343.5,104.5 1.75,1.75 c 2.3454,2.33848 6.16153,2.34539 8.5,0 l 0.5,-0.5"
- id="path44390"
- sodipodi:nodetypes="cs"
- inkscape:connector-curvature="0" />
- </g>
- <path
- id="path44392"
- d="m 344,105 0,1 0,1.5 1,0 0,-1.5 1.5,0 0,-1 -1.5,0 -1,0 z"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:2;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccc"
- id="path44394"
- d="m 344.90625,106.59375 c 2.52573,2.51828 6.66805,2.52691 9.1875,0 l 0.5,-0.5"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44402);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- <path
- sodipodi:nodetypes="ccc"
- id="path44396"
- d="m 350.5,99.5 4,0 0,-4"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="cccc"
- id="path44398"
- d="m 347.5,103.5 -4.5,0 c -0.25,0 -0.5,0.25 -0.5,0.5 l 0,4.5"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- <path
- sodipodi:nodetypes="ccc"
- id="path44400"
- d="m 345.59375,105.90625 c 2.07803,2.0719 5.36384,2.10325 7.53125,0.1875 L 354,105.25"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient44404);stroke-width:1.10000002;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- inkscape:connector-curvature="0" />
- </g>
- </g>
- </g>
- <g
- transform="translate(4,0)"
- id="g34977"
- style="display:inline;enable-background:new">
- <g
- style="display:inline"
- id="g21853-3"
- transform="translate(856,-154)"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- ry="0"
- rx="2.4004419"
- y="430"
- x="108"
- height="48"
- width="48"
- id="rect21855-8"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
- <g
- id="g21857-6">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:url(#linearGradient21875-7-1-0-1);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- id="path21859-9"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path21861-8"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106-9-2-9-9)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path21863-6"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-6-7-0-8)" />
- <path
- inkscape:connector-curvature="0"
- clip-path="none"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
- style="fill:none;stroke:url(#linearGradient21877-3-2-7-2);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path21865-6"
- sodipodi:nodetypes="ccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path21867-2"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106-9-2-9-9)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path21869-3"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-6-7-0-8)" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- id="path21871-8"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path21873-2"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- </g>
- </g>
- <g
- id="g34938"
- transform="translate(63,-47)">
- <path
- id="path61236"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient34959-9-2-1);fill-opacity:1;fill-rule:nonzero;stroke:#ff0000;stroke-width:0.17893334;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d="m 919.5,356.5067 0,-3 c 0,-1.73575 1.26424,-3 3,-3 l 5,0 c 1.73576,0 3,-1.26425 3,-3 l 0,-3.0064 2.5,0.006 c 2,0 3.5,2.5 3.5,6 0,3.5 -1.25,6 -3.5,6 -4.98134,0 -12.77318,0 -2.5,0 l 0,2.75 c 0,2.5 -2,3.24997 -5.5,3.24998 l 0,2e-5 c -3.5,0.0104 -5.5,-0.75 -5.5,-3.25 l 0,-2.7628"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cssssccsscsccsc" />
- <path
- sodipodi:nodetypes="cssssccsscsccsc"
- inkscape:connector-curvature="0"
- d="m 930.5,344.5 0,3 c 0,1.73575 -1.26424,3 -3,3 l -5,0 c -1.73576,0 -3,1.26425 -3,3 l 0,3.0064 -2.5,-0.006 c -2,0 -3.5,-2.5 -3.5,-6 0,-3.5 1.25,-6 3.5,-6 4.98134,0 12.77318,0 2.5,0 l 0,-2.75 c 0,-2.5 2,-3.24997 5.5,-3.24998 l 0,-2e-5 c 3.5,-0.0104 5.5,0.75 5.5,3.25 l 0,2.7628"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient34961-3-6-5);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.17893334;marker:none;enable-background:accumulate"
- id="path61233" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccscccsccccsccccc"
- id="path61167"
- d="m 925,338.50002 c -3.5,10e-6 -5.5,0.74998 -5.5,3.24998 l 0,2.75 5.5,0 -8,0 c -2.25,0 -3.5,2.5 -3.5,6 0,3.5 1.5,6 3.5,6 l 2.5,0.0128 0,2.9872 c 0,2 2,3.01281 5.5,3.0128 3.5,-1e-5 5.5,-1.0128 5.5,-3.0128 l 0,-3 -5.5,0 8,0 c 2,0 3.5,-2.5 3.5,-6 0,-3.5 -1.5,-6 -3.5,-6 l -2.5,0.0128 0,-2.7628 c 0,-2.5 -2,-3.26045 -5.5,-3.25 z"
- style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:0.8627451" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path61169"
- d="m 930.5,344.5 0,3 c 0,1.73575 -1.26424,3 -3,3 l -5,0 c -1.73576,0 -3,1.26425 -3,3 l 0,3"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:0.78431373;marker:none;enable-background:accumulate" />
- <circle
- r="1"
- cy="342"
- cx="922"
- id="path61220"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
- <circle
- r="1"
- cy="359"
- cx="928"
- id="path61222"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.80000001;marker:none;enable-background:accumulate" />
- <g
- style="opacity:0.4"
- id="g61345">
- <path
- style="fill:none;stroke:url(#linearGradient34963-5-9-1);stroke-width:1px;stroke-linecap:round;stroke-linejoin:miter;stroke-opacity:1"
- d="m 920.5,343.25 0,-1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 l 0,4.75"
- id="path61333"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cszsc" />
- <path
- style="fill:none;stroke:url(#linearGradient34965-1-5-2);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 925.5,345 0,0.25 -0.25,0.25 -8.25,0 c -1.5,0 -2.5,2 -2.5,5 0,3 1.28917,5 2.5,5 l 1.5,0"
- id="path61335"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccszsc" />
- <path
- style="fill:none;stroke:none"
- d="m 920.75,343.5 4.5,0 0.25,0.25 0,0.5"
- id="path61337"
- inkscape:connector-curvature="0" />
- <path
- style="fill:none;stroke:none"
- d="m 918.5,355.25 0,-1.75 c 0,-2.25 1.75,-4 4,-4 l 4.5,0 c 1.75,0 2.5,-0.75 2.5,-2.5 l 0,-0.5"
- id="path61339"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cssssc" />
- <circle
- r="1"
- cy="342"
- cx="922"
- transform="matrix(1.5161021,0,0,1.5161021,-475.84616,-176.50693)"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient34967-4-1-8);stroke-width:0.52766895;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
- id="path61355" />
- </g>
- <g
- style="opacity:0.8;stroke:#ff0000"
- transform="matrix(-1,0,0,-1,1850,701)"
- id="g34104">
- <path
- sodipodi:nodetypes="cszsc"
- inkscape:connector-curvature="0"
- id="path34106"
- d="m 920.5,343.25 0,-1.5 c 0,-1.75 1.5,-2.25 4.5,-2.25 3,0 4.5,0.5 4.5,2.25 l 0,4.75"
- style="fill:none;stroke:none" />
- <path
- sodipodi:nodetypes="csc"
- inkscape:connector-curvature="0"
- id="path34108"
- d="m 914.5,350.5 c 0,3 1.28917,5 2.5,5 l 1.5,0"
- style="fill:none;stroke:url(#linearGradient34969-4-4-1);stroke-width:1px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1" />
- <path
- inkscape:connector-curvature="0"
- id="path34110"
- d="m 920.75,343.5 4.5,0 0.25,0.25 0,0.5"
- style="fill:none;stroke:url(#linearGradient34971-5-0-9);stroke-linecap:round;stroke-linejoin:round" />
- <path
- sodipodi:nodetypes="cssssc"
- inkscape:connector-curvature="0"
- id="path34113"
- d="m 918.5,355.5 0,-2 c 0,-2.25 1.75,-4 4,-4 l 4.5,0 c 1.75,0 2.5,-0.75 2.5,-2.5 l 0,-0.5"
- style="fill:none;stroke:url(#radialGradient34973-2-5-7);stroke-linecap:round;stroke-linejoin:round" />
- <circle
- r="1"
- cy="342"
- cx="922"
- id="path34115"
- style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:none;stroke:url(#linearGradient34975-9-4-9);stroke-width:0.52766895;stroke-miterlimit:4;stroke-dasharray:none;marker:none;enable-background:accumulate"
- transform="matrix(1.5161021,0,0,1.5161021,-475.84616,-176.50693)" />
- <path
- style="fill:none;stroke:none"
- d="m 925.5,345 0,0.25 -0.25,0.25 -8.25,0 c -1.5,0 -2.5,2 -2.5,5"
- id="path34901"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccsc" />
- </g>
- </g>
- </g>
- <g
- transform="translate(212,-8)"
- id="g45475-4"
- style="display:inline;enable-background:new">
- <g
- style="display:inline"
- id="g22242-6"
- transform="translate(696,-194)"
- inkscape:export-filename="C:\Documents and Settings\Pracowniaa\Moje dokumenty\Moje obrazy\BLENDER ICONS redesign\ver 2\IMAGE BROWSER ICONS.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90">
- <rect
- ry="0"
- rx="2.4004419"
- y="430"
- x="108"
- height="48"
- width="48"
- id="rect22244-9"
- style="display:inline;overflow:visible;visibility:visible;opacity:0;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00000012;marker:none;enable-background:accumulate" />
- <g
- id="g22246-2">
- <path
- inkscape:connector-curvature="0"
- style="display:inline;fill:url(#linearGradient22274-8);fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1;marker:none"
- d="m 125.5,433.5 23,0 0,41 -33,0 0,-31 10,-10 z"
- id="path22249-8"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 147.25,434.5 c -4.875,0 -21.75,0 -21.75,0 m -8.9447,8.5 -0.0553,30"
- style="opacity:0.7;fill:none;stroke:#ffffff;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- id="path22251-9"
- sodipodi:nodetypes="cccc" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106-5)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path22253-5"
- d="m 115,444 12,0 -1,-11 -11,11 z"
- style="opacity:0.2;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-5)" />
- <path
- inkscape:connector-curvature="0"
- clip-path="none"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- d="m 117.5,443.75 9,-2.5 0,-6"
- style="fill:none;stroke:url(#linearGradient22276-5);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
- id="path22264-3"
- sodipodi:nodetypes="ccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc"
- id="path22266-6"
- style="fill:none;stroke:#333333;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 115.5,442.75 0,31.75 33,0 0,-41 -23.75,0 -9.25,9.25 z"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- clip-path="url(#clipPath13106-5)"
- inkscape:export-ydpi="90"
- inkscape:export-xdpi="90"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- sodipodi:nodetypes="cccc"
- id="path22268-0"
- d="m 116,443 11,1 -2,-10 -9,9 z"
- style="display:inline;opacity:0.16000001;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;filter:url(#filter63011-5)" />
- <path
- inkscape:connector-curvature="0"
- style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none"
- d="m 116,443 0.0108,0.72434 L 126,441 l 0,-7 -1,0 -9,9 z"
- id="path22270-1"
- sodipodi:nodetypes="cccccc"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccc"
- id="path22272-3"
- style="opacity:0.15;fill:none;stroke:#000000;stroke-width:0.99999994px;stroke-linecap:round;stroke-linejoin:round;stroke-opacity:1"
- d="m 147.5,435 0,38.5 -30.5,0"
- inkscape:export-filename="C:\Documents and Settings\Tata\Pulpit\BLENDER ICONSET\Kopia blender\.blender\icons\jendrzych's iconset.png"
- inkscape:export-xdpi="90"
- inkscape:export-ydpi="90" />
- </g>
- </g>
- <g
- id="g21517-6"
- inkscape:label="Layer 1"
- transform="matrix(0.5406242,0,0,0.5829534,814.13667,247.65542)">
- <ellipse
- ry="5.3033009"
- rx="15.467961"
- cy="38.98439"
- cx="28.019106"
- transform="matrix(1.274286,0,0,1.377124,-7.569123,-16.70193)"
- id="path35486-4"
- style="display:inline;overflow:visible;visibility:visible;opacity:0.54857142;fill:url(#radialGradient21442-6-790);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csssssssssscccsscccscccssccc"
- d="m 16.048489,28.093447 c 0.0098,0.576682 0.196474,1.697902 0.471116,2.577425 0.581566,1.854137 1.56684,3.572658 2.939126,5.086496 1.407488,1.553118 3.138519,2.803227 5.139315,3.68976 2.105357,0.931573 4.384795,1.407488 6.750134,1.403741 2.365339,-0.005 4.644601,-0.488686 6.74896,-1.427017 2.00002,-0.895288 3.731043,-2.148391 5.13754,-3.705517 1.369207,-1.519844 2.352576,-3.241114 2.934089,-5.096258 0.294262,-0.938353 0.476921,-1.889392 0.553238,-2.845308 0.07331,-0.939306 0.04204,-1.883511 -0.09183,-2.823792 -0.259981,-1.835599 -0.896294,-3.556847 -1.872652,-5.12758 -0.895541,-1.441699 -2.047808,-2.70454 -3.417268,-3.766975 0,0 0.002,-0.002 0.002,-0.002 0,0 -13.828458,-10.6197195 -13.828458,-10.6197195 -0.01176,-0.00978 -0.02252,-0.019551 -0.03529,-0.028344 -0.909003,-0.6959264 -3.879837,-0.7738945 -4.87679,-0.075035 -1.01067,0.7057021 -1.091821,1.8092613 -0.195527,2.5482146 1.899775,1.4997633 2.656207,2.2801589 4.566507,3.7797379 0,0 -14.852491,0.167033 -14.852491,0.167033 -1.994685,0 -3.1682609,0.947915 -3.4153947,2.333683 -0.2180771,1.222836 0.7479213,2.738129 2.4800217,2.738129 2.956573,0.0039 5.942111,-0.0069 8.909215,-0.01272 0,0 -16.01999,12.453223 -16.01999,12.453223 -0.020527,0.01564 -0.041053,0.02933 -0.06158,0.04497 -1.4974197,1.148389 -1.9831951,3.059322 -1.0399808,4.268393 0.9598323,1.22959 2.9977653,1.230588 4.5147288,0.006 0,0 8.677593,-7.102098 8.677593,-7.102098 0,0 -0.12511,0.959824 -0.116333,1.535532 l 1e-6,2.6e-5 0,0 0,0 z"
- id="path2482-9"
- style="fill:#dd6d00;fill-rule:evenodd;stroke:#993d00;stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none" />
- <ellipse
- ry="10.125"
- rx="11.5625"
- cy="25.75"
- cx="31.1875"
- transform="matrix(0.8018194,0,0,0.8471126,6.257567,4.5089892)"
- id="path39153-3"
- style="display:inline;overflow:visible;visibility:visible;fill:url(#linearGradient21444-0-352);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
- <path
- inkscape:connector-curvature="0"
- style="opacity:0.4857143;fill:none;stroke:url(#linearGradient21446-3-145);stroke-width:1.7812928;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
- d="m 25.8125,6.40625 c -0.334829,4.572e-4 -0.72202,0.089606 -0.90625,0.21875 4.5e-4,0.010412 4.5e-4,0.020838 0,0.03125 -0.212626,0.1484635 -0.188235,0.1956271 -0.1875,0.1875 0.0092,0.010621 -0.0072,-4.246e-4 0.03125,0.03125 0.01962,0.00828 0.03527,0.012546 0.0625,0.03125 0.01676,0.01151 0.01357,0.014555 0.03125,0.03125 0.193748,0.1576058 4.954976,4.005164 4.954976,4.005164 0.489837,0.39864 0.677395,1.066352 0.46875,1.65625 -0.115662,0.32703 -0.422813,0.541217 -0.6875,0.59375 -0.264687,0.05253 -0.498447,0.03054 -0.71875,0.03125 -5.639658,0.05119 -16.87989,0.03851 -16.87989,0.03851 -0.4102,2.75e-4 -0.935835,0.115997 -1.34375,0.34375 -0.407915,0.227753 -0.6637862,0.523861 -0.6875002,0.90625 -0.024417,0.393728 0.098829,0.605767 0.3437502,0.78125 0.244921,0.175483 0.614978,0.25 0.875,0.25 0,0 8.8125,0 8.8125,0 0.600305,-7.28e-4 1.223895,0.311058 1.4375,0.9375 0.04676,0.137121 0.06335,0.269976 0.0625,0.40625 -8.49e-4,0.136274 -0.02214,0.268794 -0.09375,0.375 -0.143211,0.212412 -0.319507,0.298568 -0.5,0.4375 0,0 -15.7871819,12.746851 -15.856336,12.800078 C 5.0310984,30.500117 5,30.53125 5,30.53125 5.0100745,30.519077 5.000335,30.499512 5,30.5 L 4.8125,30.3125 c 0.012336,0.02165 0.014481,0.03307 0.03125,0.0625 0.063558,0.0774 0.125,0.15625 0.125,0.15625 -0.00585,0.0056 -0.031233,0.03124 -0.03125,0.03125 0,0 -0.043442,-0.09921 -0.09375,-0.1875 0.037843,0.09884 0.06253,0.218739 0.0625,0.21875 -0.4662091,0.37119 -0.7783348,0.889746 -0.875,1.28125 -0.1043319,0.422581 -0.046,0.62455 0.125,0.84375 0.2999827,0.384295 1.3975356,0.595547 2.40625,-0.21875 0,0 8.65625,-7.09375 8.65625,-7.09375 0.473718,-0.387074 1.1446,-0.458625 1.6875,-0.15625 0.544608,0.303331 0.798054,0.927572 0.71875,1.53125 0,0 -0.0626,0.908319 -0.0625,1.25 2e-6,0.0085 -1.19e-4,0.02348 0,0.03125 0.192796,2.523718 1.400736,4.762818 3.03125,6.71875 2.801818,3.089095 6.627659,4.401619 10.75,4.5625 4.113324,-0.043 7.964529,-1.606111 10.75,-4.625 2.546631,-3.125326 3.513872,-6.363859 3.15625,-9.375 C 44.891575,22.325847 43.222923,19.516566 40.4375,17.25 35.951885,13.599946 31.206991,10.168434 26.59375,6.625 26.57515,6.610386 26.56455,6.59802 26.5625,6.59375 26.43835,6.498703 26.144223,6.4057899 25.8125,6.40625 Z"
- id="path21414-5"
- sodipodi:nodetypes="csssssscssscsssccssscscccsccssssccscsscccssssc" />
- <path
- inkscape:connector-curvature="0"
- d="m 25.708956,26.064593 c 0.07649,-1.397943 0.759369,-2.631914 1.78592,-3.505519 1.010226,-0.858782 2.366788,-1.383145 3.848625,-1.383145 1.480894,0 2.837456,0.524363 3.847446,1.383145 1.027685,0.873605 1.709741,2.106651 1.787122,3.504594 0.07927,1.438713 -0.49591,2.77459 -1.504012,3.764001 -1.027686,1.007933 -2.493008,1.640678 -4.130556,1.640678 -1.63849,0 -3.103814,-0.632745 -4.131451,-1.640678 -1.00914,-0.989411 -1.58234,-2.325288 -1.503094,-3.763076 l 0,0 0,0 0,0 z"
- id="path2478-8"
- style="fill:#2f5b94;fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="csssscsccsscsccssssscsscccsssc"
- id="path39166-5"
- d="m 25.8125,6.03125 c -0.404852,5.53e-4 -2.204797,-0.059029 -2.48145,0.1349032 -0.280209,0.195652 -0.335403,0.376484 -0.34375,0.46875 -0.0083,0.092266 -0.01539,0.17648 0.1875,0.34375 0.01899,0.015735 0.04457,0.014317 0.0625,0.03125 0.124258,0.101028 4.748869,4.1248618 4.748869,4.1248618 0.373658,0.304091 0.504393,0.795817 0.34375,1.25 -0.160635,0.454191 -0.580748,0.373449 -1.0625,0.375 -5.634142,0.05114 -15.087371,-0.129601 -15.087371,-0.129601 -0.952967,6.38e-4 -2.339958,0.524782 -2.4062504,1.59375 -0.063562,1.024947 0.9247974,1.4375 1.5937504,1.4375 0,-1e-6 8.8125,0 8.8125,0 0.488364,-5.92e-4 0.936141,0.225277 1.09375,0.6875 0.157609,0.462231 -0.01926,0.514621 -0.40625,0.8125 0,0 -16.086298,13.088586 -16.086298,13.088586 -0.00142,0.0014 -0.029829,-0.0014 -0.03125,0 -0.064037,0.04879 -0.054226,0.04875 -0.03125,0.03125 -0.5536758,0.424619 -0.9087886,1.004019 -1.03125,1.5 -0.1224536,0.495981 -0.04661,0.856152 0.1875,1.15625 0.4788333,0.613413 1.777612,0.754857 2.90625,-0.15625 1e-7,10e-7 8.65625,-7.09375 8.65625,-7.09375 0.361955,-0.295753 0.872897,-0.352437 1.28125,-0.125 0.408345,0.227436 0.623381,0.692814 0.5625,1.15625 0,-1e-6 -0.0997,0.953636 -0.09375,1.34375 0.09498,1.301756 0.451616,2.521825 0.989039,3.664234 C 20.799917,36.321089 27.770982,19.392853 44.1875,21.03125 43.339652,19.54368 42.151282,18.185293 40.65625,16.96875 36.159865,13.309932 31.42016,9.882897 26.8125,6.34375 26.805335,6.338858 26.788292,6.317553 26.78125,6.3125 26.570707,6.151312 26.216591,6.030689 25.8125,6.03125 Z"
- style="opacity:0.51999996;fill:url(#radialGradient21448-8-143);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- </g>
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 961,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ id="path72454" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 956,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ id="path72456" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path72458"
+ d="m 1019,189 v 5 h 1 2 v -1 h -2 v -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" />
+ <path
+ id="path72460"
+ d="m 970,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 981,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ id="path72462" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 985,189 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z"
+ id="path72464" />
+ <path
+ id="path72466"
+ d="m 989,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72468"
+ d="m 1004,189 v 4.25 h 1 V 194 h 2 v -0.75 h 1 V 189 h -1 v 4 h -2 v -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72470"
+ d="m 1012,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 -1.25 h -1 V 193 h -1 v -3 h 2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1015,189 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 189 h -1 z m 1,1 h 1 v 1 h -1 z"
+ id="path72472" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1025,189 v 5 h 1 2 v -1 h -2 v -4 z"
+ id="path72474"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72476"
+ d="m 1032,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1035,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ id="path72478" />
+ <path
+ id="path72480"
+ d="m 1039,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72482"
+ d="m 1045,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72484"
+ d="m 1048,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1052.75,193 v 1 H 1052 v 1 h 1 v -1 h 1 v -1 z"
+ id="path72486" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 882,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ id="path32008-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 886,189 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z"
+ id="path32010-4"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ id="rect32012-0"
+ width="1"
+ height="5"
+ x="890"
+ y="189" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 893,189 v 0.75 h -1 v 1.5 h 1 V 192 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 191 h -1 v -1 h 1.5 v -1 z"
+ id="path32015-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 899,189 v 0.75 h -1 v 3.5 h 1 V 194 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ id="path32017-4"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 907,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ id="path32019-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 903,189 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ id="path32021-8"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 912,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ id="path32023-2"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 916,189 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ id="path32026-4"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path32029-5"
+ d="m 920,189 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path32031-5"
+ d="m 925,189 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ id="rect32033-1"
+ width="1"
+ height="5"
+ x="931"
+ y="189" />
+ <path
+ id="path32035-7"
+ d="m 934,189 v 0.75 h -1 v 1.5 h 1 V 192 h 1 v 1 h -2 v 1 h 2 v -0.75 h 1 v -1.5 h -1 V 191 h -1 v -1 h 1.5 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 888,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z"
+ id="path72562" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ id="rect72564"
+ width="1"
+ height="5"
+ x="892"
+ y="197" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 882,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z"
+ id="path72576" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 940,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z"
+ id="path72578" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 904.75,197 v 1 H 904 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z"
+ id="path72580" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 895,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ id="path72582" />
+ <path
+ id="path72588"
+ d="m 898,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72590"
+ d="m 909,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 913,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ id="path72592" />
+ <path
+ id="path72594"
+ d="m 917,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 921,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z"
+ id="path72596" />
+ <path
+ id="path72598"
+ d="m 927,197 v 5 h 1 v -2 h 1.25 v -1 H 930 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72600"
+ d="m 931.75,197 v 1 H 931 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72602"
+ d="m 935,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="197"
+ x="946"
+ height="5"
+ width="1"
+ id="rect72604"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" />
+ <path
+ id="path72606"
+ d="m 948,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72608"
+ d="m 954.75,197 v 1 H 954 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 958,197 v 5 h 1 2 v -1 h -2 v -4 z"
+ id="path72610"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72612"
+ d="m 963,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72614"
+ d="m 967,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72616"
+ d="m 973,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="197"
+ x="984"
+ height="5"
+ width="1"
+ id="rect72618"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" />
+ <path
+ id="path72620"
+ d="m 978,197 v 3.25 h 1 V 202 h 1 v -1.75 h 1 V 202 h 1 v -1.75 h 1 V 197 h -1 v 3 h -1 v -2 h -1 v 2 h -1 v -3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 990,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z"
+ id="path72622" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 986,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ id="path72624" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 997,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 h -2 v -3 h 2 v -1 z"
+ id="path32207-9-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1001,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ id="path32209-6-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1005,197 v 5 h 1 v -2 h 1.25 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z"
+ id="path32211-3-7"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1009,197 v 2.25 h 1 V 202 h 1 v -2.75 h 1 V 197 h -1 v 2 h -1 v -2 z"
+ id="path32213-7-3"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1013,197 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 197 h -1 z m 1,1 h 1 v 1 h -1 z"
+ id="path32216-8-3"
+ inkscape:connector-curvature="0" />
+ <rect
+ y="197"
+ x="1017"
+ height="5"
+ width="1"
+ id="rect32218-8-5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1020,197 v 0.75 h -1 v 3.5 h 1 V 202 h 2 v -1 -1.25 h -1 V 201 h -1 v -3 h 2 v -1 z"
+ id="path32220-2-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1023,197 v 5 h 1 v -2 h 1 v 2 h 1 v -5 h -1 v 2 h -1 v -2 z"
+ id="path32222-9-9"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1027,197 v 1 h 1 v 4 h 1 v -4 h 1 v -1 z"
+ id="path32224-1-8"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1035,197 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ id="path72678" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path72680"
+ d="m 1045,197 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ id="rect72682"
+ width="1"
+ height="5"
+ x="1033"
+ y="197" />
+ <rect
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ id="rect72684"
+ width="1"
+ height="1"
+ x="1049"
+ y="201" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate;opacity:0.6"
+ d="m 1040,197 v 5 h 1 v -2 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ id="path72686" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1028.75,209 v 1 H 1028 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z"
+ id="path32244-2" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1032,209 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v -1 z m 1,0 h 1 v 3 h 1 v -5 h -1 v 1 h -1 z"
+ id="path32246-0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1038,209 v 5 h 1 1 v -0.5 h 1 V 212 h -0.75 v -1 h 0.75 v -1.25 h -1 V 209 h -1 z m 1,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z"
+ id="path32248-9" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1042,209 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 209 h -1 z m 1,1 h 1 v 1 h -1 z"
+ id="path32250-7" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1047,209 v 1 h 2 v -1 z m 2,1 v 3 h 1 v -3 z m 0,3 h -2 v 1 h 2 z m -2,0 v -3 h -1 v 3 z"
+ id="path32252-3" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1051,209 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z"
+ id="path32254-7" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 997.75,209 v 1 H 997 v 4 h 1 v -2 h 1 v 2 h 1 v -4 h -0.75 v -1 z m 0.25,1 h 1 v 1 h -1 z"
+ id="path32256-2" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32258-6"
+ d="m 1001,209 v 5 h 1 v -3 h 1 v -1 h -1 v -1 z m 2,2 v 1 h 1 v 2 h 1 v -5 h -1 v 2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32260-0"
+ d="m 1006,209 v 1 3 1 h 2 v -0.75 h 1 v -3.5 h -1 V 209 Z m 1,1 h 1 v 3 h -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1010,209 v 5 h 1 v -2 h 1 v 2 h 1 v -2 h -0.75 v -1 h 0.75 v -1.25 h -1 V 209 h -1 z m 1,1 h 1 v 1 h -1 z"
+ id="path32262-1" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 1014,209 v 1 h 2 v 1 h 1 v -1 -1 z m 2,2 h -1 v 1 h 1 z m -1,1 h -1 v 1 1 h 3 v -1 h -2 z"
+ id="path32264-6" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32266-5"
+ d="m 1018,209 v 5 h 1 2 v -1 h -2 v -1 h 1 v -1 h -1 v -1 h 2 v -1 h -2 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32268-7"
+ d="m 1024,209 v 4 h -1 v -1 h -1 v 1 h 0.75 v 1 h 1.5 v -1 h 0.75 v -4 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <rect
+ y="207"
+ x="1052"
+ height="1"
+ width="1"
+ id="rect32270-5"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 969.96875,208 v 0.75 h -1 V 209 h -0.25 v 1 h -0.75 v 3 h 0.75 v 1 h 0.25 v 0.25 h 1 V 215 h 3 v -0.75 h 1 V 214 h 0.25 v -1 h 0.75 v -3 h -0.75 v -1 h -0.25 v -0.25 h -1 V 208 Z m 0,1 h 3 v 1 h 1 v 3 h -1 v 1 h -3 v -1 h -1 v -3 h 1 z"
+ id="path32272-1"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccc" />
+ <path
+ inkscape:connector-curvature="0"
+ id="path32274-2"
+ d="m 970.96875,210 v 0.75 h -1 v 1.5 h 1 V 213 h 1.25 v -1 h -1.25 v -1 h 1.25 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ sodipodi:nodetypes="ccccccccccccc" />
+ <path
+ id="path72688"
+ d="m 981.71875,209 v 1 h -0.75 v 3 h 0.75 v 1 h 1.5 v -1 h 0.75 v -3 h -0.75 v -1 z m 0.25,1 h 1 v 3 h -1 z m 0.25,1 v 1 h 0.5 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path72690"
+ d="m 985.96875,209 v 1 h -1 v 1 h 1 v 3 h 1 v -5 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <path
+ inkscape:connector-curvature="0"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 976.96875,209 v 1 h 2 v 1 h -1 v 1 h 1 v -0.75 h 1 v -1.5 h -1 V 209 Z m 1,3 h -1 v 1 1 h 3 v -1 h -2 z"
+ id="path72694" />
+ <path
+ id="path72696"
+ d="m 992.96875,210 v 1 h 1 v -1 z m -0.21875,3 v 1 H 992 v 1 h 1 v -1 h 1 v -1 z"
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ inkscape:connector-curvature="0" />
+ <path
+ style="display:inline;overflow:visible;visibility:visible;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;enable-background:accumulate"
+ d="m 988.75,209 v 1 h -0.5 v 1 h 0.5 v 1 H 988 v 1 h 0.75 v 1 h 1.5 v -1 H 991 v -1 h -0.75 v -1 h 0.5 v -1 h -0.5 v -1 z m 0.25,1 h 1 v 1 h -1 z m 0,2 h 1 v 1 h -1 z"
+ id="path19551-18-1"
+ inkscape:connector-curvature="0" />
</g>
- <g
- transform="translate(0,12)"
- id="g46790" />
- <g
- id="g46890" />
- <path
- sodipodi:nodetypes="cc"
- id="path34332"
- style="display:inline;overflow:visible;visibility:visible;fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;marker:none;enable-background:accumulate"
- d=""
- inkscape:connector-curvature="0" />
</g>
</svg>
diff --git a/release/datafiles/userdef/userdef_default_theme.c b/release/datafiles/userdef/userdef_default_theme.c
index eae3f0bf5be..b7b9c1aa9b8 100644
--- a/release/datafiles/userdef/userdef_default_theme.c
+++ b/release/datafiles/userdef/userdef_default_theme.c
@@ -24,7 +24,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x585858ff),
.inner_sel = RGBA(0x5680c2e6),
.item = RGBA(0x3e3e3eff),
- .text = RGBA(0xebebebff),
+ .text = RGBA(0xd9d9d9ff),
.text_sel = RGBA(0xffffffff),
.shadedown = -5,
.roundness = 0.2f,
@@ -34,17 +34,17 @@ const bTheme U_theme_default = {
.inner = RGBA(0x585858ff),
.inner_sel = RGBA(0x5680c2ff),
.item = RGBA(0xffffffff),
- .text = RGBA(0xf2f2f2ff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shadedown = -5,
.roundness = 0.2f,
},
.wcol_toolbar_item = {
.outline = RGBA(0x373737ff),
- .inner = RGBA(0x585858ff),
+ .inner = RGBA(0x313131ff),
.inner_sel = RGBA(0x5680c2ff),
.item = RGBA(0xffffff8f),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -53,7 +53,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x1f1f1fff),
.inner_sel = RGBA(0x808080ff),
.item = RGBA(0x333333ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shaded = 1,
.shadetop = -3,
@@ -64,7 +64,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x595959ff),
.inner_sel = RGBA(0x597cb3e6),
.item = RGBA(0xffffffff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 5,
.shadedown = -5,
@@ -75,7 +75,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x666666ff),
.inner_sel = RGBA(0x5680c2e6),
.item = RGBA(0xffffffff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shadedown = -15,
.roundness = 0.2f,
@@ -85,7 +85,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x595959ff),
.inner_sel = RGBA(0x5680c2e6),
.item = RGBA(0x191919ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -94,7 +94,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x595959ff),
.inner_sel = RGBA(0xb3b3b366),
.item = RGBA(0x333333ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -103,18 +103,18 @@ const bTheme U_theme_default = {
.inner = RGBA(0x595959ff),
.inner_sel = RGBA(0x333333ff),
.item = RGBA(0x5680c2e6),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shaded = 1,
.shadetop = -4,
.roundness = 0.2f,
},
.wcol_tab = {
- .outline = RGBA(0x2d2d2dff),
+ .outline = RGBA(0x202020ff),
.inner = RGBA(0x2b2b2bff),
.inner_sel = RGBA(0x424242ff),
.item = RGBA(0x2d2d2dff),
- .text = RGBA(0xa6a6a6ff),
+ .text = RGBA(0x989898ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -123,7 +123,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x2c2c2cff),
.inner_sel = RGBA(0x696e76ff),
.item = RGBA(0xe6e6e6ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xd9d9d9ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 10,
.shadedown = -10,
@@ -131,10 +131,10 @@ const bTheme U_theme_default = {
},
.wcol_pulldown = {
.outline = RGBA(0x4d4d4dff),
- .inner = RGBA(0x2e2e2e99),
+ .inner = RGBA(0x2e2e2ecc),
.inner_sel = RGBA(0x597cb3ff),
.item = RGBA(0x727272ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xd9d9d9ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 25,
.shadedown = -20,
@@ -145,7 +145,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x1f1f1fef),
.inner_sel = RGBA(0x585858ff),
.item = RGBA(0x727272ff),
- .text = RGBA(0xb3b3b3ff),
+ .text = RGBA(0xa5a5a5ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 25,
.shadedown = -20,
@@ -154,7 +154,7 @@ const bTheme U_theme_default = {
.wcol_menu_item = {
.inner_sel = RGBA(0x597cb3e6),
.item = RGBA(0xffffff8f),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 38,
.roundness = 0.2f,
@@ -164,7 +164,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x19191aef),
.inner_sel = RGBA(0x19191aef),
.item = RGBA(0x19191aef),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 25,
.shadedown = -20,
@@ -175,7 +175,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x00000033),
.inner_sel = RGBA(0x696e76ff),
.item = RGBA(0x191919ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -184,7 +184,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x67676700),
.inner_sel = RGBA(0xb3b3b3ff),
.item = RGBA(0x676767ff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 5,
.shadedown = -5,
@@ -195,7 +195,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x2c2c2cff),
.inner_sel = RGBA(0x5680c2ff),
.item = RGBA(0x5680c2ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -204,7 +204,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x2d2d2d00),
.inner_sel = RGBA(0x696e76ff),
.item = RGBA(0xb3b3b3ff),
- .text = RGBA(0xe1e1e1ff),
+ .text = RGBA(0xe6e6e6ff),
.text_sel = RGBA(0xffffffff),
.roundness = 0.2f,
},
@@ -213,7 +213,7 @@ const bTheme U_theme_default = {
.inner = RGBA(0x212121ef),
.inner_sel = RGBA(0x597cb3ff),
.item = RGBA(0x585858ff),
- .text = RGBA(0xeeeeeeff),
+ .text = RGBA(0xd9d9d9ff),
.text_sel = RGBA(0xffffffff),
.shadetop = 10,
.shadedown = -10,
@@ -253,7 +253,7 @@ const bTheme U_theme_default = {
.tbuts = {
.back = RGBA(0x42424200),
.title = RGBA(0xd4d4d4ff),
- .text = RGBA(0xe5e5e5ff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -278,7 +278,7 @@ const bTheme U_theme_default = {
},
.tv3d = {
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x42424200),
.header_text = RGBA(0xeeeeeeff),
@@ -300,7 +300,7 @@ const bTheme U_theme_default = {
.gradient = RGBA(0x39393900),
.high_gradient = RGBA(0x393939ff),
},
- .grid = RGBA(0x232323ff),
+ .grid = RGBA(0xa7a7a733),
.wire = RGBA(0x000000ff),
.wire_edit = RGBA(0x111111ff),
.select = RGBA(0xed5700ff),
@@ -369,7 +369,7 @@ const bTheme U_theme_default = {
.tfile = {
.back = RGBA(0x35353500),
.title = RGBA(0xffffffff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x2e2e2eff),
.header_text = RGBA(0xeeeeeeff),
@@ -395,7 +395,7 @@ const bTheme U_theme_default = {
.tipo = {
.back = RGBA(0x42424200),
.title = RGBA(0xffffffff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0x000000ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x2e2e2eff),
.header_text = RGBA(0xeeeeeeff),
@@ -446,7 +446,7 @@ const bTheme U_theme_default = {
.tinfo = {
.back = RGBA(0x42424200),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -480,7 +480,7 @@ const bTheme U_theme_default = {
.tact = {
.back = RGBA(0x42424200),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0x000000ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -535,11 +535,11 @@ const bTheme U_theme_default = {
.anim_preview_range = RGBA(0xa14d0066),
},
.tnla = {
- .back = RGBA(0x35353500),
+ .back = RGBA(0x42424200),
.title = RGBA(0xffffffff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0x000000ff),
.text_hi = RGBA(0xffffffff),
- .header = RGBA(0x212121ff),
+ .header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
.header_text_hi = RGBA(0xffffffff),
.tab_active = RGBA(0x4b4b4bff),
@@ -550,9 +550,9 @@ const bTheme U_theme_default = {
.button_title = RGBA(0xffffffff),
.button_text = RGBA(0xe5e5e5ff),
.button_text_hi = RGBA(0xffffffff),
- .list = RGBA(0x2e2e2eff),
+ .list = RGBA(0x333333ff),
.list_title = RGBA(0xffffffff),
- .list_text = RGBA(0xccccccff),
+ .list_text = RGBA(0xb8b8b8ff),
.list_text_hi = RGBA(0xccccccff),
.panelcolors = {
.header = RGBA(0x424242cc),
@@ -560,7 +560,7 @@ const bTheme U_theme_default = {
.sub_back = RGBA(0x0000003e),
},
.shade1 = RGBA(0x96969600),
- .grid = RGBA(0x5e5e5eff),
+ .grid = RGBA(0x2a2a2aff),
.strip = RGBA(0x0c0a0a80),
.strip_select = RGBA(0xff8c00ff),
.cframe = RGBA(0x5680c2ff),
@@ -587,7 +587,7 @@ const bTheme U_theme_default = {
.tseq = {
.back = RGBA(0x42424200),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0x000000ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -629,7 +629,7 @@ const bTheme U_theme_default = {
.tima = {
.back = RGBA(0x44444400),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -683,7 +683,7 @@ const bTheme U_theme_default = {
.text = {
.back = RGBA(0x30303000),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x42424200),
.header_text = RGBA(0xeeeeeeff),
@@ -751,7 +751,7 @@ const bTheme U_theme_default = {
.tnode = {
.back = RGBA(0x23232300),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -806,7 +806,7 @@ const bTheme U_theme_default = {
.tuserpref = {
.back = RGBA(0x42424200),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -831,7 +831,7 @@ const bTheme U_theme_default = {
.tconsole = {
.back = RGBA(0x30303000),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -862,7 +862,7 @@ const bTheme U_theme_default = {
.tclip = {
.back = RGBA(0x42424200),
.title = RGBA(0xeeeeeeff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x424242ff),
.header_text = RGBA(0xeeeeeeff),
@@ -907,7 +907,7 @@ const bTheme U_theme_default = {
.ttopbar = {
.back = RGBA(0x42424200),
.title = RGBA(0xffffffff),
- .text = RGBA(0xffffffff),
+ .text = RGBA(0xe6e6e6ff),
.text_hi = RGBA(0xffffffff),
.header = RGBA(0x232323ff),
.header_text = RGBA(0xeeeeeeff),
diff --git a/release/scripts/addons b/release/scripts/addons
-Subproject c2aef4a98f6cabef9a6d38a33035f02cf8233dd
+Subproject ad39a4b8961e2afb852852e2e3057bc3a770d2e
diff --git a/release/scripts/addons_contrib b/release/scripts/addons_contrib
-Subproject 5c4210d5b78c61137c5f32e7deb7561177ac089
+Subproject ee92205e9687eabb0ef91d8c437014ac720126e
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 fada1255e8b..f22675b481f 100644
--- a/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
+++ b/release/scripts/modules/bl_i18n_utils/bl_extract_messages.py
@@ -437,8 +437,8 @@ def dump_rna_messages(msgs, reports, settings, verbose=False):
reports, check_ctxt_rna, settings)
# And parse keymaps!
- from bpy_extras.keyconfig_utils import km_hierarchy
- walk_keymap_hierarchy(km_hierarchy(), "KM_HIERARCHY")
+ from bl_keymap_utils import keymap_hierarchy
+ walk_keymap_hierarchy(keymap_hierarchy.generate(), "KM_HIERARCHY")
##### Python source code #####
diff --git a/release/scripts/modules/bl_i18n_utils/settings.py b/release/scripts/modules/bl_i18n_utils/settings.py
index 150c2c36623..230c351d80c 100644
--- a/release/scripts/modules/bl_i18n_utils/settings.py
+++ b/release/scripts/modules/bl_i18n_utils/settings.py
@@ -44,7 +44,7 @@ LANGUAGES_CATEGORIES = (
)
LANGUAGES = (
# ID, UI english label, ISO code.
- (0, "Default (Default)", "DEFAULT"),
+ (0, "Automatic (Automatic)", "DEFAULT"),
(1, "English (English)", "en_US"),
(2, "Japanese (日本語)", "ja_JP"),
(3, "Dutch (Nederlandse taal)", "nl_NL"),
diff --git a/release/scripts/modules/bl_keymap_utils/__init__.py b/release/scripts/modules/bl_keymap_utils/__init__.py
new file mode 100644
index 00000000000..1c4a64081f8
--- /dev/null
+++ b/release/scripts/modules/bl_keymap_utils/__init__.py
@@ -0,0 +1,25 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+__all__ = (
+ "io",
+ "keymap_from_toolbar",
+ "keymap_hierarchy",
+)
diff --git a/release/scripts/modules/bl_keymap_utils/io.py b/release/scripts/modules/bl_keymap_utils/io.py
new file mode 100644
index 00000000000..7135d4bf7bd
--- /dev/null
+++ b/release/scripts/modules/bl_keymap_utils/io.py
@@ -0,0 +1,278 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# -----------------------------------------------------------------------------
+# Export Functions
+
+__all__ = (
+ "keyconfig_export_as_data",
+ "keyconfig_import_from_data",
+ "keyconfig_init_from_data",
+ "keyconfig_merge",
+ "keymap_init_from_data",
+)
+
+
+def indent(levels):
+ return levels * " "
+
+
+def round_float_32(f):
+ from struct import pack, unpack
+ return unpack("f", pack("f", f))[0]
+
+
+def repr_f32(f):
+ f_round = round_float_32(f)
+ f_str = repr(f)
+ f_str_frac = f_str.partition(".")[2]
+ if not f_str_frac:
+ return f_str
+ for i in range(1, len(f_str_frac)):
+ f_test = round(f, i)
+ f_test_round = round_float_32(f_test)
+ if f_test_round == f_round:
+ return "%.*f" % (i, f_test)
+ return f_str
+
+
+def kmi_args_as_data(kmi):
+ s = [
+ f"\"type\": '{kmi.type}'",
+ f"\"value\": '{kmi.value}'"
+ ]
+
+ if kmi.any:
+ s.append("\"any\": True")
+ else:
+ if kmi.shift:
+ s.append("\"shift\": True")
+ if kmi.ctrl:
+ s.append("\"ctrl\": True")
+ if kmi.alt:
+ s.append("\"alt\": True")
+ if kmi.oskey:
+ s.append("\"oskey\": True")
+ if kmi.key_modifier and kmi.key_modifier != 'NONE':
+ s.append(f"\"key_modifier\": '{kmi.key_modifier}'")
+
+ return "{" + ", ".join(s) + "}"
+
+
+def _kmi_properties_to_lines_recursive(level, properties, lines):
+ from bpy.types import OperatorProperties
+
+ def string_value(value):
+ if isinstance(value, (str, bool, int)):
+ return repr(value)
+ elif isinstance(value, float):
+ return repr_f32(value)
+ elif getattr(value, '__len__', False):
+ return repr(tuple(value))
+ raise Exception(f"Export key configuration: can't write {value!r}")
+
+ for pname in properties.bl_rna.properties.keys():
+ if pname != "rna_type":
+ value = getattr(properties, pname)
+ if isinstance(value, OperatorProperties):
+ lines_test = []
+ _kmi_properties_to_lines_recursive(level + 2, value, lines_test)
+ if lines_test:
+ lines.append(f"(")
+ lines.append(f"\"{pname}\",\n")
+ lines.append(f"{indent(level + 3)}" "[")
+ lines.extend(lines_test)
+ lines.append("],\n")
+ lines.append(f"{indent(level + 3)}" "),\n" f"{indent(level + 2)}")
+ del lines_test
+ elif properties.is_property_set(pname):
+ value = string_value(value)
+ lines.append((f"(\"{pname}\", {value:s}),\n" f"{indent(level + 2)}"))
+
+
+def _kmi_properties_to_lines(level, kmi_props, lines):
+ if kmi_props is None:
+ return
+
+ lines_test = [f"\"properties\":\n" f"{indent(level + 1)}" "["]
+ _kmi_properties_to_lines_recursive(level, kmi_props, lines_test)
+ if len(lines_test) > 1:
+ lines_test.append("],\n")
+ lines.extend(lines_test)
+
+
+def _kmi_attrs_or_none(level, kmi):
+ lines = []
+ _kmi_properties_to_lines(level + 1, kmi.properties, lines)
+ if kmi.active is False:
+ lines.append(f"{indent(level)}\"active\":" "False,\n")
+ if not lines:
+ return None
+ return "".join(lines)
+
+
+def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False):
+ # Alternate foramt
+
+ # Generate a list of keymaps to export:
+ #
+ # First add all user_modified keymaps (found in keyconfigs.user.keymaps list),
+ # then add all remaining keymaps from the currently active custom keyconfig.
+ #
+ # This will create a final list of keymaps that can be used as a "diff" against
+ # the default blender keyconfig, recreating the current setup from a fresh blender
+ # without needing to export keymaps which haven't been edited.
+
+ class FakeKeyConfig:
+ keymaps = []
+ edited_kc = FakeKeyConfig()
+ for km in wm.keyconfigs.user.keymaps:
+ if all_keymaps or km.is_user_modified:
+ edited_kc.keymaps.append(km)
+ # merge edited keymaps with non-default keyconfig, if it exists
+ if kc != wm.keyconfigs.default:
+ export_keymaps = keyconfig_merge(edited_kc, kc)
+ else:
+ export_keymaps = keyconfig_merge(edited_kc, edited_kc)
+
+ with open(filepath, "w") as fh:
+ fw = fh.write
+ fw("keyconfig_data = \\\n[")
+
+ for km, kc_x in export_keymaps:
+ km = km.active()
+ fw("(")
+ fw(f"\"{km.name:s}\",\n")
+ fw(f"{indent(2)}" "{")
+ fw(f"\"space_type\": '{km.space_type:s}'")
+ fw(f", \"region_type\": '{km.region_type:s}'")
+ # We can detect from the kind of items.
+ if km.is_modal:
+ fw(", \"modal\": True")
+ fw("},\n")
+ fw(f"{indent(2)}" "{")
+ is_modal = km.is_modal
+ fw(f"\"items\":\n")
+ fw(f"{indent(3)}[")
+ for kmi in km.keymap_items:
+ if is_modal:
+ kmi_id = kmi.propvalue
+ else:
+ kmi_id = kmi.idname
+ fw(f"(")
+ kmi_args = kmi_args_as_data(kmi)
+ kmi_data = _kmi_attrs_or_none(4, kmi)
+ fw(f"\"{kmi_id:s}\"")
+ if kmi_data is None:
+ fw(f", ")
+ else:
+ fw(",\n" f"{indent(5)}")
+
+ fw(kmi_args)
+ if kmi_data is None:
+ fw(", None),\n")
+ else:
+ fw(",\n")
+ fw(f"{indent(5)}" "{")
+ fw(kmi_data)
+ fw(f"{indent(6)}")
+ fw("},\n" f"{indent(5)}")
+ fw("),\n")
+ fw(f"{indent(4)}")
+ fw("],\n" f"{indent(3)}")
+ fw("},\n" f"{indent(2)}")
+ fw("),\n" f"{indent(1)}")
+
+ fw("]\n")
+ fw("\n\n")
+ fw("if __name__ == \"__main__\":\n")
+ fw(" import os\n")
+ fw(" from bl_keymap_utils.io import keyconfig_import_from_data\n")
+ fw(" keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n")
+
+
+# -----------------------------------------------------------------------------
+# Import Functions
+
+def _kmi_props_setattr(kmi_props, attr, value):
+ if type(value) is list:
+ kmi_subprop = getattr(kmi_props, attr)
+ for subattr, subvalue in value:
+ _kmi_props_setattr(kmi_subprop, subattr, subvalue)
+ return
+
+ try:
+ setattr(kmi_props, attr, value)
+ except AttributeError:
+ print(f"Warning: property '{attr}' not found in keymap item '{kmi_props.__class__.__name__}'")
+ except Exception as ex:
+ print(f"Warning: {ex!r}")
+
+
+def keymap_init_from_data(km, km_items, is_modal=False):
+ new_fn = getattr(km.keymap_items, "new_modal" if is_modal else "new")
+ for (kmi_idname, kmi_args, kmi_data) in km_items:
+ kmi = new_fn(kmi_idname, **kmi_args)
+ if kmi_data is not None:
+ if not kmi_data.get("active", True):
+ kmi.active = False
+ kmi_props_data = kmi_data.get("properties", None)
+ if kmi_props_data is not None:
+ kmi_props = kmi.properties
+ for attr, value in kmi_props_data:
+ _kmi_props_setattr(kmi_props, attr, value)
+
+
+def keyconfig_init_from_data(kc, keyconfig_data):
+ # Load data in the format defined above.
+ #
+ # Runs at load time, keep this fast!
+ for (km_name, km_args, km_content) in keyconfig_data:
+ km = kc.keymaps.new(km_name, **km_args)
+ keymap_init_from_data(km, km_content["items"], is_modal=km_args.get("modal", False))
+
+
+def keyconfig_import_from_data(name, keyconfig_data):
+ # Load data in the format defined above.
+ #
+ # Runs at load time, keep this fast!
+
+ import bpy
+ wm = bpy.context.window_manager
+ kc = wm.keyconfigs.new(name)
+ keyconfig_init_from_data(kc, keyconfig_data)
+ return kc
+
+
+# -----------------------------------------------------------------------------
+# Utility Functions
+
+def keyconfig_merge(kc1, kc2):
+ """ note: kc1 takes priority over kc2
+ """
+ kc1_names = {km.name for km in kc1.keymaps}
+ merged_keymaps = [(km, kc1) for km in kc1.keymaps]
+ if kc1 != kc2:
+ merged_keymaps.extend(
+ (km, kc2)
+ for km in kc2.keymaps
+ if km.name not in kc1_names
+ )
+ return merged_keymaps
diff --git a/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
new file mode 100644
index 00000000000..3d861763ad6
--- /dev/null
+++ b/release/scripts/modules/bl_keymap_utils/keymap_from_toolbar.py
@@ -0,0 +1,394 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+# Dynamically create a keymap which is used by the popup toolbar
+# for accelerator key access.
+
+__all__ = (
+ "generate",
+)
+
+def generate(context, space_type):
+ """
+ Keymap for popup toolbar, currently generated each time.
+ """
+ from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
+
+ def modifier_keywords_from_item(kmi):
+ kw = {}
+ for (attr, default) in (
+ ("any", False),
+ ("shift", False),
+ ("ctrl", False),
+ ("alt", False),
+ ("oskey", False),
+ ("key_modifier", 'NONE'),
+ ):
+ val = getattr(kmi, attr)
+ if val != default:
+ kw[attr] = val
+ return kw
+
+ def dict_as_tuple(d):
+ return tuple((k, v) for (k, v) in sorted(d.items()))
+
+ tool_blacklist = set()
+
+ use_simple_keymap = False
+
+ # Press the toolbar popup key again to set the default tool,
+ # this is useful because the select box tool is useful as a way
+ # 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
+ # TODO: support other tools for modes which don't use this tool.
+ tap_reset_tool = "Cursor"
+ # Check the tool is available in the current context.
+ if ToolSelectPanelHelper._tool_get_by_name(context, space_type, tap_reset_tool)[1] is None:
+ use_tap_reset = False
+
+ from bl_operators.wm import use_toolbar_release_hack
+
+ # Pie-menu style release to activate.
+ use_release_confirm = True
+
+ # Generate items when no keys are mapped.
+ use_auto_keymap_alpha = False # Map manially in the default keymap
+ use_auto_keymap_num = True
+
+ # Temporary, only create so we can pass 'properties' to find_item_from_operator.
+ use_hack_properties = True
+
+ km_name = "Toolbar Popup"
+ wm = context.window_manager
+ keyconf = wm.keyconfigs.active
+ keymap = keyconf.keymaps.get(km_name)
+ if keymap is None:
+ keymap = keyconf.keymaps.new(km_name, space_type='EMPTY', region_type='TEMPORARY', tool=True)
+
+ kmi_unique_args = set()
+
+ def kmi_unique_or_pass(kmi_args):
+ kmi_unique_len = len(kmi_unique_args)
+ kmi_unique_args.add(dict_as_tuple(kmi_args))
+ return kmi_unique_len != len(kmi_unique_args)
+
+
+ cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
+
+ if use_hack_properties:
+ kmi_hack = keymap.keymap_items.new("wm.tool_set_by_name", 'NONE', 'PRESS')
+ kmi_hack_properties = kmi_hack.properties
+ kmi_hack.active = False
+
+ kmi_hack_brush_select = keymap.keymap_items.new("paint.brush_select", 'NONE', 'PRESS')
+ kmi_hack_brush_select_properties = kmi_hack_brush_select.properties
+ kmi_hack_brush_select.active = False
+
+ if use_release_confirm or use_tap_reset:
+ kmi_toolbar = wm.keyconfigs.find_item_from_operator(idname="wm.toolbar")[1]
+ kmi_toolbar_type = None if not kmi_toolbar else kmi_toolbar.type
+ if use_tap_reset and kmi_toolbar_type is not None:
+ kmi_toolbar_args_type_only = {"type": kmi_toolbar_type}
+ kmi_toolbar_args = {**kmi_toolbar_args_type_only, **modifier_keywords_from_item(kmi_toolbar)}
+ else:
+ use_tap_reset = False
+ del kmi_toolbar
+
+ if use_tap_reset:
+ kmi_found = None
+ if use_hack_properties:
+ # First check for direct assignment, if this tool already has a key, no need to add a new one.
+ kmi_hack_properties.name = tap_reset_tool
+ kmi_found = wm.keyconfigs.find_item_from_operator(
+ idname="wm.tool_set_by_name",
+ context='INVOKE_REGION_WIN',
+ # properties={"name": item.text},
+ properties=kmi_hack_properties,
+ )[1]
+ if kmi_found:
+ use_tap_reset = False
+ del kmi_found
+
+ if use_tap_reset:
+ use_tap_reset = kmi_unique_or_pass(kmi_toolbar_args)
+
+ if use_tap_reset:
+ tool_blacklist.add(tap_reset_tool)
+
+ items_all = [
+ # 0: tool
+ # 1: keymap item (direct access)
+ # 2: keymap item (newly calculated for toolbar)
+ [item, None, None]
+ for item in ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context))
+ if item is not None
+ if item.text not in tool_blacklist
+ ]
+
+ if use_simple_keymap:
+ # Simply assign a key from A-Z.
+ for i, (item, _, _) in enumerate(items_all):
+ key = chr(ord('A') + i)
+ kmi = keymap.keymap_items.new("wm.tool_set_by_name", key, 'PRESS')
+ kmi.properties.name = item.text
+ else:
+ for item_container in items_all:
+ item = item_container[0]
+ # Only check the first item in the tools key-map (a little arbitrary).
+ if use_hack_properties:
+ # First check for direct assignment.
+ kmi_hack_properties.name = item.text
+ kmi_found = wm.keyconfigs.find_item_from_operator(
+ idname="wm.tool_set_by_name",
+ context='INVOKE_REGION_WIN',
+ # properties={"name": item.text},
+ properties=kmi_hack_properties,
+ )[1]
+
+ if kmi_found is None:
+ if item.data_block:
+ # PAINT_OT_brush_select
+ mode = context.active_object.mode
+ # See: BKE_paint_get_tool_prop_id_from_paintmode
+ attr = {
+ 'SCULPT': "sculpt_tool",
+ 'VERTEX_PAINT': "vertex_tool",
+ 'WEIGHT_PAINT': "weight_tool",
+ 'TEXTURE_PAINT': "image_tool",
+ 'GPENCIL_PAINT': "gpencil_tool",
+ }.get(mode, None)
+ if attr is not None:
+ setattr(kmi_hack_brush_select_properties, attr, item.data_block)
+ kmi_found = wm.keyconfigs.find_item_from_operator(
+ idname="paint.brush_select",
+ context='INVOKE_REGION_WIN',
+ properties=kmi_hack_brush_select_properties,
+ )[1]
+ else:
+ print("Unsupported mode:", mode)
+ del mode, attr
+
+ else:
+ kmi_found = None
+
+ if kmi_found is not None:
+ pass
+ elif item.operator is not None:
+ kmi_found = wm.keyconfigs.find_item_from_operator(
+ idname=item.operator,
+ context='INVOKE_REGION_WIN',
+ )[1]
+ elif item.keymap is not None:
+ km = keyconf.keymaps.get(item.keymap[0])
+ if km is None:
+ print("Keymap", repr(item.keymap[0]), "not found for tool", item.text)
+ kmi_found = None
+ else:
+ kmi_first = km.keymap_items
+ kmi_first = kmi_first[0] if kmi_first else None
+ if kmi_first is not None:
+ kmi_found = wm.keyconfigs.find_item_from_operator(
+ idname=kmi_first.idname,
+ # properties=kmi_first.properties, # prevents matches, don't use.
+ context='INVOKE_REGION_WIN',
+ )[1]
+ else:
+ kmi_found = None
+ del kmi_first
+ del km
+ else:
+ kmi_found = None
+ item_container[1] = kmi_found
+
+ # More complex multi-pass test.
+ for item_container in items_all:
+ item, kmi_found = item_container[:2]
+ if kmi_found is None:
+ continue
+ kmi_found_type = kmi_found.type
+
+ # Only for single keys.
+ if (
+ (len(kmi_found_type) == 1) or
+ # When a tool is being activated instead of running an operator, just copy the shortcut.
+ (kmi_found.idname in {"wm.tool_set_by_name", "WM_OT_tool_set_by_name"})
+ ):
+ kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)}
+ if kmi_unique_or_pass(kmi_args):
+ kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
+ kmi.properties.name = item.text
+ item_container[2] = kmi
+
+ # Test for key_modifier, where alpha key is used as a 'key_modifier'
+ # (grease pencil holding 'D' for example).
+ for item_container in items_all:
+ item, kmi_found, kmi_exist = item_container
+ if kmi_found is None or kmi_exist:
+ continue
+
+ kmi_found_type = kmi_found.type
+ if kmi_found_type in {
+ 'LEFTMOUSE',
+ 'RIGHTMOUSE',
+ 'MIDDLEMOUSE',
+ 'BUTTON4MOUSE',
+ 'BUTTON5MOUSE',
+ 'BUTTON6MOUSE',
+ 'BUTTON7MOUSE',
+ }:
+ kmi_found_type = kmi_found.key_modifier
+ # excludes 'NONE'
+ if len(kmi_found_type) == 1:
+ kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)}
+ del kmi_args["key_modifier"]
+ if kmi_unique_or_pass(kmi_args):
+ kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
+ kmi.properties.name = item.text
+ item_container[2] = kmi
+
+ if use_auto_keymap_alpha:
+ # Map all unmapped keys to numbers,
+ # while this is a bit strange it means users will not confuse regular key bindings to ordered bindings.
+
+ # First map A-Z.
+ kmi_type_alpha_char = [chr(i) for i in range(65, 91)]
+ kmi_type_alpha_args = {c: {"type": c} for c in kmi_type_alpha_char}
+ kmi_type_alpha_args_tuple = {c: dict_as_tuple(kmi_type_alpha_args[c]) for c in kmi_type_alpha_char}
+ for item_container in items_all:
+ item, kmi_found, kmi_exist = item_container
+ if kmi_exist:
+ continue
+ kmi_type = item.text[0].upper()
+ kmi_tuple = kmi_type_alpha_args_tuple.get(kmi_type)
+ if kmi_tuple and kmi_tuple not in kmi_unique_args:
+ kmi_unique_args.add(kmi_tuple)
+ kmi = keymap.keymap_items.new(
+ idname="wm.tool_set_by_name",
+ value='PRESS',
+ **kmi_type_alpha_args[kmi_type],
+ )
+ kmi.properties.name = item.text
+ item_container[2] = kmi
+ del kmi_type_alpha_char, kmi_type_alpha_args, kmi_type_alpha_args_tuple
+
+ if use_auto_keymap_num:
+ # Free events (last used first).
+ kmi_type_auto = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'ZERO')
+ # Map both numbers and num-pad.
+ kmi_type_dupe = {
+ 'ONE': 'NUMPAD_1',
+ 'TWO': 'NUMPAD_2',
+ 'THREE': 'NUMPAD_3',
+ 'FOUR': 'NUMPAD_4',
+ 'FIVE': 'NUMPAD_5',
+ 'SIX': 'NUMPAD_6',
+ 'SEVEN': 'NUMPAD_7',
+ 'EIGHT': 'NUMPAD_8',
+ 'NINE': 'NUMPAD_9',
+ 'ZERO': 'NUMPAD_0',
+ }
+
+ def iter_free_events():
+ for mod in ({}, {"shift": True}, {"ctrl": True}, {"alt": True}):
+ for e in kmi_type_auto:
+ yield (e, mod)
+
+ iter_events = iter(iter_free_events())
+
+ for item_container in items_all:
+ item, kmi_found, kmi_exist = item_container
+ if kmi_exist:
+ continue
+ kmi_args = None
+ while True:
+ key, mod = next(iter_events, (None, None))
+ if key is None:
+ break
+ kmi_args = {"type": key, **mod}
+ kmi_tuple = dict_as_tuple(kmi_args)
+ if kmi_tuple in kmi_unique_args:
+ kmi_args = None
+ else:
+ break
+
+ if kmi_args is not None:
+ kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
+ kmi.properties.name = item.text
+ item_container[2] = kmi
+ kmi_unique_args.add(kmi_tuple)
+
+ key = kmi_type_dupe.get(kmi_args["type"])
+ if key is not None:
+ kmi_args["type"] = key
+ kmi_tuple = dict_as_tuple(kmi_args)
+ if not kmi_tuple in kmi_unique_args:
+ kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
+ kmi.properties.name = item.text
+ kmi_unique_args.add(kmi_tuple)
+
+ if use_hack_properties:
+ keymap.keymap_items.remove(kmi_hack)
+
+
+ # Keepo last so we can try add a key without any modifiers
+ # in the case this toolbar was activated with modifiers.
+ if use_tap_reset:
+ if len(kmi_toolbar_args_type_only) == len(kmi_toolbar_args):
+ kmi_toolbar_args_available = kmi_toolbar_args
+ else:
+ # We have modifiers, see if we have a free key w/o modifiers.
+ kmi_toolbar_tuple = dict_as_tuple(kmi_toolbar_args_type_only)
+ if kmi_toolbar_tuple not in kmi_unique_args:
+ kmi_toolbar_args_available = kmi_toolbar_args_type_only
+ kmi_unique_args.add(kmi_toolbar_tuple)
+ else:
+ kmi_toolbar_args_available = kmi_toolbar_args
+ del kmi_toolbar_tuple
+
+ kmi = keymap.keymap_items.new(
+ "wm.tool_set_by_name",
+ value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK',
+ **kmi_toolbar_args_available,
+ )
+ kmi.properties.name = tap_reset_tool
+
+ if use_release_confirm:
+ kmi = keymap.keymap_items.new(
+ "ui.button_execute",
+ type=kmi_toolbar_type,
+ value='RELEASE',
+ any=True,
+ )
+ kmi.properties.skip_depressed = True
+
+ if use_toolbar_release_hack:
+ # ... or pass through to let the toolbar know we're released.
+ # Let the operator know we're released.
+ kmi = keymap.keymap_items.new(
+ "wm.tool_set_by_name",
+ type=kmi_toolbar_type,
+ value='RELEASE',
+ any=True,
+ )
+
+ wm.keyconfigs.update()
+ return keymap
diff --git a/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
new file mode 100644
index 00000000000..a769bb34d1e
--- /dev/null
+++ b/release/scripts/modules/bl_keymap_utils/keymap_hierarchy.py
@@ -0,0 +1,206 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+# <pep8 compliant>
+
+__all__ = (
+ "generate",
+)
+
+def _km_expand_from_toolsystem(space_type, context_mode):
+ def _fn():
+ from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
+ for cls in ToolSelectPanelHelper.__subclasses__():
+ if cls.bl_space_type == space_type:
+ return cls.keymap_ui_hierarchy(context_mode)
+ raise Exception("keymap not found")
+ return _fn
+
+
+def _km_hierarchy_iter_recursive(items):
+ for sub in items:
+ if callable(sub):
+ yield from sub()
+ else:
+ yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3])))
+
+
+def generate():
+ return list(_km_hierarchy_iter_recursive(_km_hierarchy))
+
+
+# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
+
+# ('Script', 'EMPTY', 'WINDOW', []),
+
+
+# Access via 'km_hierarchy'.
+_km_hierarchy = [
+ ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
+ ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
+ ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners
+ ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region)
+ ]),
+
+ ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region)
+ ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation
+
+ ('User Interface', 'EMPTY', 'WINDOW', []),
+
+ ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform)
+ ('Object Mode', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'),
+ ]),
+ ('Mesh', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'),
+ ]),
+ ('Curve', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'),
+ ]),
+ ('Armature', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'),
+ ]),
+ ('Metaball', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'),
+ ]),
+ ('Lattice', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'),
+ ]),
+ ('Font', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'),
+ ]),
+
+ ('Pose', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'POSE'),
+ ]),
+
+ ('Vertex Paint', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'),
+ ]),
+ ('Weight Paint', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'),
+ ]),
+ ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []),
+ ('Face Mask', 'EMPTY', 'WINDOW', []),
+ # image and view3d
+ ('Image Paint', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'),
+ ]),
+ ('Sculpt', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'),
+ ]),
+
+ ('Particle', 'EMPTY', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'),
+ ]),
+
+ ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []),
+ ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []),
+ ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
+ ('Paint Curve', 'EMPTY', 'WINDOW', []),
+
+ ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change
+
+ ('View3D Walk Modal', 'EMPTY', 'WINDOW', []),
+ ('View3D Fly Modal', 'EMPTY', 'WINDOW', []),
+ ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []),
+ ('View3D Move Modal', 'EMPTY', 'WINDOW', []),
+ ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []),
+ ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []),
+
+ # toolbar and properties
+ ('3D View Generic', 'VIEW_3D', 'WINDOW', [
+ _km_expand_from_toolsystem('VIEW_3D', None),
+ ]),
+ ]),
+
+ ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
+ ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []),
+ ]),
+ ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [
+ ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []),
+ ]),
+ ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [
+ ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []),
+ ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []),
+ ]),
+ ('Timeline', 'TIMELINE', 'WINDOW', []),
+
+ ('Image', 'IMAGE_EDITOR', 'WINDOW', [
+ ('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image)
+ ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
+ ('UV Sculpt', 'EMPTY', 'WINDOW', []),
+ ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [
+ _km_expand_from_toolsystem('IMAGE_EDITOR', None),
+ ]),
+ ]),
+
+ ('Outliner', 'OUTLINER', 'WINDOW', []),
+
+ ('Node Editor', 'NODE_EDITOR', 'WINDOW', [
+ ('Node Generic', 'NODE_EDITOR', 'WINDOW', []),
+ ]),
+ ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [
+ ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []),
+ ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []),
+ ]),
+
+ ('File Browser', 'FILE_BROWSER', 'WINDOW', [
+ ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []),
+ ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []),
+ ]),
+
+ ('Info', 'INFO', 'WINDOW', []),
+
+ ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu
+
+ ('Text', 'TEXT_EDITOR', 'WINDOW', [
+ ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []),
+ ]),
+ ('Console', 'CONSOLE', 'WINDOW', []),
+ ('Clip', 'CLIP_EDITOR', 'WINDOW', [
+ ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
+ ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
+ ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []),
+ ]),
+
+ ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region)
+ ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []),
+ ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []),
+ ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []),
+ ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []),
+ ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []),
+ ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []),
+ ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []),
+ ]),
+ ('Mask Editing', 'EMPTY', 'WINDOW', []),
+ ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region)
+ ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region)
+ ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region)
+ ('Animation Channels', 'EMPTY', 'WINDOW', []),
+
+ ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
+ ('Gesture Straight Line', 'EMPTY', 'WINDOW', []),
+ ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []),
+ ('Gesture Box', 'EMPTY', 'WINDOW', []),
+
+ ('Standard Modal Map', 'EMPTY', 'WINDOW', []),
+ ('Transform Modal Map', 'EMPTY', 'WINDOW', []),
+ ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []),
+ ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []),
+]
diff --git a/release/scripts/modules/bpy/utils/__init__.py b/release/scripts/modules/bpy/utils/__init__.py
index 835cbe6c110..9889b16829b 100644
--- a/release/scripts/modules/bpy/utils/__init__.py
+++ b/release/scripts/modules/bpy/utils/__init__.py
@@ -51,6 +51,7 @@ __all__ = (
"units",
"unregister_class",
"user_resource",
+ "execfile",
)
from _bpy import (
@@ -75,6 +76,18 @@ _script_module_dirs = "startup", "modules"
_is_factory_startup = _bpy.app.factory_startup
+def execfile(filepath, mod=None):
+ # module name isn't used or added to 'sys.modules'.
+ # passing in 'mod' allows re-execution without having to reload.
+
+ import importlib.util
+ mod_spec = importlib.util.spec_from_file_location("__main__", filepath)
+ if mod is None:
+ mod = importlib.util.module_from_spec(mod_spec)
+ mod_spec.loader.exec_module(mod)
+ return mod
+
+
def _test_import(module_name, loaded_modules):
use_time = _bpy.app.debug_python
@@ -585,14 +598,7 @@ def keyconfig_set(filepath, report=None):
try:
error_msg = ""
- with open(filepath, 'r', encoding='utf-8') as keyfile:
- exec(
- compile(keyfile.read(), filepath, "exec"),
- {
- "__file__": filepath,
- "__name__": "__main__",
- }
- )
+ execfile(filepath)
except:
import traceback
error_msg = traceback.format_exc()
@@ -607,9 +613,6 @@ def keyconfig_set(filepath, report=None):
# Get name, exception for default keymap to keep backwards compatibility.
name = splitext(basename(filepath))[0]
- if name == 'blender':
- name = 'Blender'
-
kc_new = keyconfigs.get(name)
if kc_new is None:
if report is not None:
diff --git a/release/scripts/modules/bpy_extras/keyconfig_utils.py b/release/scripts/modules/bpy_extras/keyconfig_utils.py
index 51f1980f519..8eea2ede425 100644
--- a/release/scripts/modules/bpy_extras/keyconfig_utils.py
+++ b/release/scripts/modules/bpy_extras/keyconfig_utils.py
@@ -19,527 +19,71 @@
# <pep8 compliant>
-def _km_expand_from_toolsystem(space_type, context_mode):
- def _fn():
- from bl_ui.space_toolsystem_common import ToolSelectPanelHelper
- for cls in ToolSelectPanelHelper.__subclasses__():
- if cls.bl_space_type == space_type:
- return cls.keymap_ui_hierarchy(context_mode)
- raise Exception("keymap not found")
- return _fn
-
-
-def _km_hierarchy_iter_recursive(items):
- for sub in items:
- if callable(sub):
- yield from sub()
- else:
- yield (*sub[:3], list(_km_hierarchy_iter_recursive(sub[3])))
-
-
-def km_hierarchy():
- return list(_km_hierarchy_iter_recursive(_km_hierarchy))
-
-
-# bpy.type.KeyMap: (km.name, km.space_type, km.region_type, [...])
-
-# ('Script', 'EMPTY', 'WINDOW', []),
-
-
-# Access via 'km_hierarchy'.
-_km_hierarchy = [
- ('Window', 'EMPTY', 'WINDOW', []), # file save, window change, exit
- ('Screen', 'EMPTY', 'WINDOW', [ # full screen, undo, screenshot
- ('Screen Editing', 'EMPTY', 'WINDOW', []), # re-sizing, action corners
- ('Header', 'EMPTY', 'WINDOW', []), # header stuff (per region)
- ]),
-
- ('View2D', 'EMPTY', 'WINDOW', []), # view 2d navigation (per region)
- ('View2D Buttons List', 'EMPTY', 'WINDOW', []), # view 2d with buttons navigation
-
- ('User Interface', 'EMPTY', 'WINDOW', []),
-
- ('3D View', 'VIEW_3D', 'WINDOW', [ # view 3d navigation and generic stuff (select, transform)
- ('Object Mode', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'OBJECT'),
- ]),
- ('Mesh', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_MESH'),
- ]),
- ('Curve', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_CURVE'),
- ]),
- ('Armature', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_ARMATURE'),
- ]),
- ('Metaball', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_METABALL'),
- ]),
- ('Lattice', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_LATTICE'),
- ]),
- ('Font', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'EDIT_TEXT'),
- ]),
-
- ('Pose', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'POSE'),
- ]),
-
- ('Vertex Paint', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'PAINT_VERTEX'),
- ]),
- ('Weight Paint', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'PAINT_WEIGHT'),
- ]),
- ('Weight Paint Vertex Selection', 'EMPTY', 'WINDOW', []),
- ('Face Mask', 'EMPTY', 'WINDOW', []),
- # image and view3d
- ('Image Paint', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'PAINT_TEXTURE'),
- ]),
- ('Sculpt', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'SCULPT'),
- ]),
-
- ('Particle', 'EMPTY', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', 'PARTICLE'),
- ]),
-
- ('Knife Tool Modal Map', 'EMPTY', 'WINDOW', []),
- ('Custom Normals Modal Map', 'EMPTY', 'WINDOW', []),
- ('Paint Stroke Modal', 'EMPTY', 'WINDOW', []),
- ('Paint Curve', 'EMPTY', 'WINDOW', []),
-
- ('Object Non-modal', 'EMPTY', 'WINDOW', []), # mode change
-
- ('View3D Walk Modal', 'EMPTY', 'WINDOW', []),
- ('View3D Fly Modal', 'EMPTY', 'WINDOW', []),
- ('View3D Rotate Modal', 'EMPTY', 'WINDOW', []),
- ('View3D Move Modal', 'EMPTY', 'WINDOW', []),
- ('View3D Zoom Modal', 'EMPTY', 'WINDOW', []),
- ('View3D Dolly Modal', 'EMPTY', 'WINDOW', []),
-
- # toolbar and properties
- ('3D View Generic', 'VIEW_3D', 'WINDOW', [
- _km_expand_from_toolsystem('VIEW_3D', None),
- ]),
- ]),
-
- ('Graph Editor', 'GRAPH_EDITOR', 'WINDOW', [
- ('Graph Editor Generic', 'GRAPH_EDITOR', 'WINDOW', []),
- ]),
- ('Dopesheet', 'DOPESHEET_EDITOR', 'WINDOW', [
- ('Dopesheet Generic', 'DOPESHEET_EDITOR', 'WINDOW', []),
- ]),
- ('NLA Editor', 'NLA_EDITOR', 'WINDOW', [
- ('NLA Channels', 'NLA_EDITOR', 'WINDOW', []),
- ('NLA Generic', 'NLA_EDITOR', 'WINDOW', []),
- ]),
- ('Timeline', 'TIMELINE', 'WINDOW', []),
-
- ('Image', 'IMAGE_EDITOR', 'WINDOW', [
- ('UV Editor', 'EMPTY', 'WINDOW', []), # image (reverse order, UVEdit before Image)
- ('Image Paint', 'EMPTY', 'WINDOW', []), # image and view3d
- ('UV Sculpt', 'EMPTY', 'WINDOW', []),
- ('Image Generic', 'IMAGE_EDITOR', 'WINDOW', [
- _km_expand_from_toolsystem('IMAGE_EDITOR', None),
- ]),
- ]),
-
- ('Outliner', 'OUTLINER', 'WINDOW', []),
-
- ('Node Editor', 'NODE_EDITOR', 'WINDOW', [
- ('Node Generic', 'NODE_EDITOR', 'WINDOW', []),
- ]),
- ('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', [
- ('SequencerCommon', 'SEQUENCE_EDITOR', 'WINDOW', []),
- ('SequencerPreview', 'SEQUENCE_EDITOR', 'WINDOW', []),
- ]),
-
- ('File Browser', 'FILE_BROWSER', 'WINDOW', [
- ('File Browser Main', 'FILE_BROWSER', 'WINDOW', []),
- ('File Browser Buttons', 'FILE_BROWSER', 'WINDOW', []),
- ]),
-
- ('Info', 'INFO', 'WINDOW', []),
-
- ('Property Editor', 'PROPERTIES', 'WINDOW', []), # align context menu
-
- ('Text', 'TEXT_EDITOR', 'WINDOW', [
- ('Text Generic', 'TEXT_EDITOR', 'WINDOW', []),
- ]),
- ('Console', 'CONSOLE', 'WINDOW', []),
- ('Clip', 'CLIP_EDITOR', 'WINDOW', [
- ('Clip Editor', 'CLIP_EDITOR', 'WINDOW', []),
- ('Clip Graph Editor', 'CLIP_EDITOR', 'WINDOW', []),
- ('Clip Dopesheet Editor', 'CLIP_EDITOR', 'WINDOW', []),
- ]),
-
- ('Grease Pencil', 'EMPTY', 'WINDOW', [ # grease pencil stuff (per region)
- ('Grease Pencil Stroke Edit Mode', 'EMPTY', 'WINDOW', []),
- ('Grease Pencil Stroke Paint (Draw brush)', 'EMPTY', 'WINDOW', []),
- ('Grease Pencil Stroke Paint (Fill)', 'EMPTY', 'WINDOW', []),
- ('Grease Pencil Stroke Paint (Erase)', 'EMPTY', 'WINDOW', []),
- ('Grease Pencil Stroke Paint Mode', 'EMPTY', 'WINDOW', []),
- ('Grease Pencil Stroke Sculpt Mode', 'EMPTY', 'WINDOW', []),
- ('Grease Pencil Stroke Weight Mode', 'EMPTY', 'WINDOW', []),
- ]),
- ('Mask Editing', 'EMPTY', 'WINDOW', []),
- ('Frames', 'EMPTY', 'WINDOW', []), # frame navigation (per region)
- ('Markers', 'EMPTY', 'WINDOW', []), # markers (per region)
- ('Animation', 'EMPTY', 'WINDOW', []), # frame change on click, preview range (per region)
- ('Animation Channels', 'EMPTY', 'WINDOW', []),
-
- ('View3D Gesture Circle', 'EMPTY', 'WINDOW', []),
- ('Gesture Straight Line', 'EMPTY', 'WINDOW', []),
- ('Gesture Zoom Border', 'EMPTY', 'WINDOW', []),
- ('Gesture Box', 'EMPTY', 'WINDOW', []),
-
- ('Standard Modal Map', 'EMPTY', 'WINDOW', []),
- ('Transform Modal Map', 'EMPTY', 'WINDOW', []),
- ('Eyedropper Modal Map', 'EMPTY', 'WINDOW', []),
- ('Eyedropper ColorBand PointSampling Map', 'EMPTY', 'WINDOW', []),
-]
-
-
# -----------------------------------------------------------------------------
# Add-on helpers to properly (un)register their own keymaps.
-# Example of keymaps_description:
-keymaps_description_doc = """
-keymaps_description is a tuple (((keymap_description), (tuple of keymap_item_descriptions))).
-keymap_description is a tuple (name, space_type, region_type, is_modal).
-keymap_item_description is a tuple ({kw_args_for_keymap_new}, (tuple of properties)).
-kw_args_for_keymap_new is a mapping which keywords match parameters of keymap.new() function.
-tuple of properties is a tuple of pairs (prop_name, prop_value) (properties being those of called operator).
-
-Example:
-
-KEYMAPS = (
- # First, keymap identifiers (last bool is True for modal km).
- (('Sequencer', 'SEQUENCE_EDITOR', 'WINDOW', False), (
- # Then a tuple of keymap items, defined by a dict of kwargs for the km new func, and a tuple of tuples (name, val)
- # for ops properties, if needing non-default values.
- ({"idname": export_strips.SEQExportStrip.bl_idname, "type": 'P', "value": 'PRESS', "shift": True, "ctrl": True},
- ()),
- )),
-)
-"""
-
+def addon_keymap_register(keymap_data):
+ """
+ Register a set of keymaps for addons using a list of keymaps.
-def addon_keymap_register(wm, keymaps_description):
+ See 'blender_defaults.py' for examples of the format this takes.
"""
- Register a set of keymaps for addons.
+ import bpy
+ wm = bpy.context.window_manager
+
+ from bl_keymap_utils.io import keymap_init_from_data
- """ + keymaps_description_doc
kconf = wm.keyconfigs.addon
if not kconf:
return # happens in background mode...
- for km_info, km_items in keymaps_description:
- km_name, km_sptype, km_regtype, km_ismodal = km_info
- kmap = [k for k in kconf.keymaps
- if k.name == km_name and k.region_type == km_regtype and
- k.space_type == km_sptype and k.is_modal == km_ismodal]
- if kmap:
- kmap = kmap[0]
- else:
- kmap = kconf.keymaps.new(km_name, region_type=km_regtype, space_type=km_sptype, modal=km_ismodal)
- for kmi_kwargs, props in km_items:
- kmi = kmap.keymap_items.new(**kmi_kwargs)
- kmi.active = True
- for prop, val in props:
- setattr(kmi.properties, prop, val)
-
-
-def addon_keymap_unregister(wm, keymaps_description):
+ for km_name, km_args, km_content in keymap_data:
+ km_space_type = km_args["space_type"]
+ km_region_type = km_args["region_type"]
+ km_modal = km_args.get("modal", False)
+ kmap = next(iter(
+ k for k in kconf.keymaps
+ if k.name == km_name and
+ k.region_type == km_region_type and
+ k.space_type == km_space_type and
+ k.is_modal == km_modal
+ ), None)
+ if kmap is None:
+ kmap = kconf.keymaps.new(km_name, **km_args)
+ keymap_init_from_data(kmap, km_content["items"], is_modal=km_modal)
+
+def addon_keymap_unregister(keymap_data):
"""
Unregister a set of keymaps for addons.
-
- """ + keymaps_description_doc
+ """
# NOTE: We must also clean up user keyconfig, else, if user has customized one of add-on's shortcut, this
# customization remains in memory, and comes back when re-enabling the addon, causing a segfault... :/
+ import bpy
+ wm = bpy.context.window_manager
+
kconfs = wm.keyconfigs
for kconf in (kconfs.user, kconfs.addon):
- for km_info, km_items in keymaps_description:
- km_name, km_sptype, km_regtype, km_ismodal = km_info
- kmaps = (k for k in kconf.keymaps
- if k.name == km_name and k.region_type == km_regtype and
- k.space_type == km_sptype and k.is_modal == km_ismodal)
+ for km_name, km_args, km_content in keymap_data:
+ km_space_type = km_args["space_type"]
+ km_region_type = km_args["region_type"]
+ km_modal = km_args.get("modal", False)
+ kmaps = (
+ k for k in kconf.keymaps
+ if k.name == km_name and
+ k.region_type == km_region_type and
+ k.space_type == km_space_type and
+ k.is_modal == km_modal
+ )
for kmap in kmaps:
- for kmi_kwargs, props in km_items:
- idname = kmi_kwargs["idname"]
+ for kmi_idname, _, _ in km_content["items"]:
for kmi in kmap.keymap_items:
- if kmi.idname == idname:
+ if kmi.idname == kmi_idname:
kmap.keymap_items.remove(kmi)
# NOTE: We won't remove addons keymaps themselves, other addons might also use them!
# -----------------------------------------------------------------------------
-# Import/Export Functions
-
-
-def indent(levels):
- return levels * " "
-
-
-def round_float_32(f):
- from struct import pack, unpack
- return unpack("f", pack("f", f))[0]
-
-
-def repr_f32(f):
- f_round = round_float_32(f)
- f_str = repr(f)
- f_str_frac = f_str.partition(".")[2]
- if not f_str_frac:
- return f_str
- for i in range(1, len(f_str_frac)):
- f_test = round(f, i)
- f_test_round = round_float_32(f_test)
- if f_test_round == f_round:
- return "%.*f" % (i, f_test)
- return f_str
-
-
-def kmi_args_as_data(kmi):
- s = [
- f"\"type\": '{kmi.type}'",
- f"\"value\": '{kmi.value}'"
- ]
-
- if kmi.any:
- s.append("\"any\": True")
- else:
- if kmi.shift:
- s.append("\"shift\": True")
- if kmi.ctrl:
- s.append("\"ctrl\": True")
- if kmi.alt:
- s.append("\"alt\": True")
- if kmi.oskey:
- s.append("\"oskey\": True")
- if kmi.key_modifier and kmi.key_modifier != 'NONE':
- s.append(f"\"key_modifier\": '{kmi.key_modifier}'")
-
- return "{" + ", ".join(s) + "}"
-
-
-def _kmi_properties_to_lines_recursive(level, properties, lines):
- from bpy.types import OperatorProperties
-
- def string_value(value):
- if isinstance(value, (str, bool, int)):
- return repr(value)
- elif isinstance(value, float):
- return repr_f32(value)
- elif getattr(value, '__len__', False):
- return repr(tuple(value))
- raise Exception(f"Export key configuration: can't write {value!r}")
-
- for pname in properties.bl_rna.properties.keys():
- if pname != "rna_type":
- value = getattr(properties, pname)
- if isinstance(value, OperatorProperties):
- lines_test = []
- _kmi_properties_to_lines_recursive(level + 2, value, lines_test)
- if lines_test:
- lines.append(f"(")
- lines.append(f"\"{pname}\",\n")
- lines.append(f"{indent(level + 3)}" "[")
- lines.extend(lines_test)
- lines.append("],\n")
- lines.append(f"{indent(level + 3)}" "),\n" f"{indent(level + 2)}")
- del lines_test
- elif properties.is_property_set(pname):
- value = string_value(value)
- lines.append((f"(\"{pname}\", {value:s}),\n" f"{indent(level + 2)}"))
-
-
-def _kmi_properties_to_lines(level, kmi_props, lines):
- if kmi_props is None:
- return
-
- lines_test = [f"\"properties\":\n" f"{indent(level + 1)}" "["]
- _kmi_properties_to_lines_recursive(level, kmi_props, lines_test)
- if len(lines_test) > 1:
- lines_test.append("],\n")
- lines.extend(lines_test)
-
-
-def _kmi_attrs_or_none(level, kmi):
- lines = []
- _kmi_properties_to_lines(level + 1, kmi.properties, lines)
- if kmi.active is False:
- lines.append(f"{indent(level)}\"active\":" "False,\n")
- if not lines:
- return None
- return "".join(lines)
-
-
-def keyconfig_export_as_data(wm, kc, filepath, *, all_keymaps=False):
- # Alternate foramt
-
- # Generate a list of keymaps to export:
- #
- # First add all user_modified keymaps (found in keyconfigs.user.keymaps list),
- # then add all remaining keymaps from the currently active custom keyconfig.
- #
- # This will create a final list of keymaps that can be used as a "diff" against
- # the default blender keyconfig, recreating the current setup from a fresh blender
- # without needing to export keymaps which haven't been edited.
-
- from .keyconfig_utils import keyconfig_merge
-
- class FakeKeyConfig:
- keymaps = []
- edited_kc = FakeKeyConfig()
- for km in wm.keyconfigs.user.keymaps:
- if all_keymaps or km.is_user_modified:
- edited_kc.keymaps.append(km)
- # merge edited keymaps with non-default keyconfig, if it exists
- if kc != wm.keyconfigs.default:
- export_keymaps = keyconfig_merge(edited_kc, kc)
- else:
- export_keymaps = keyconfig_merge(edited_kc, edited_kc)
-
- with open(filepath, "w") as fh:
- fw = fh.write
- fw("keyconfig_data = \\\n[")
-
- for km, kc_x in export_keymaps:
- km = km.active()
- fw("(")
- fw(f"\"{km.name:s}\",\n")
- fw(f"{indent(2)}" "{")
- fw(f"\"space_type\": '{km.space_type:s}'")
- fw(f", \"region_type\": '{km.region_type:s}'")
- # We can detect from the kind of items.
- if km.is_modal:
- fw(", \"modal\": True")
- fw("},\n")
- fw(f"{indent(2)}" "{")
- is_modal = km.is_modal
- fw(f"\"items\":\n")
- fw(f"{indent(3)}[")
- for kmi in km.keymap_items:
- if is_modal:
- kmi_id = kmi.propvalue
- else:
- kmi_id = kmi.idname
- fw(f"(")
- kmi_args = kmi_args_as_data(kmi)
- kmi_data = _kmi_attrs_or_none(4, kmi)
- fw(f"\"{kmi_id:s}\"")
- if kmi_data is None:
- fw(f", ")
- else:
- fw(",\n" f"{indent(5)}")
-
- fw(kmi_args)
- if kmi_data is None:
- fw(", None),\n")
- else:
- fw(",\n")
- fw(f"{indent(5)}" "{")
- fw(kmi_data)
- fw(f"{indent(6)}")
- fw("},\n" f"{indent(5)}")
- fw("),\n")
- fw(f"{indent(4)}")
- fw("],\n" f"{indent(3)}")
- fw("},\n" f"{indent(2)}")
- fw("),\n" f"{indent(1)}")
-
- fw("]\n")
- fw("\n\n")
- fw("if __name__ == \"__main__\":\n")
- fw(" import os\n")
- fw(" from bpy_extras.keyconfig_utils import keyconfig_import_from_data\n")
- fw(" keyconfig_import_from_data(os.path.splitext(os.path.basename(__file__))[0], keyconfig_data)\n")
-
-
-def _kmi_props_setattr(kmi_props, attr, value):
- if type(value) is list:
- kmi_subprop = getattr(kmi_props, attr)
- for subattr, subvalue in value:
- _kmi_props_setattr(kmi_subprop, subattr, subvalue)
- return
-
- try:
- setattr(kmi_props, attr, value)
- except AttributeError:
- print(f"Warning: property '{attr}' not found in keymap item '{kmi_props.__class__.__name__}'")
- except Exception as ex:
- print(f"Warning: {ex!r}")
-
-
-def keymap_items_from_data(km, km_items, is_modal=False):
- new_fn = getattr(km.keymap_items, "new_modal" if is_modal else "new")
- for (kmi_idname, kmi_args, kmi_data) in km_items:
- kmi = new_fn(kmi_idname, **kmi_args)
- if kmi_data is not None:
- if not kmi_data.get("active", True):
- kmi.active = False
- kmi_props_data = kmi_data.get("properties", None)
- if kmi_props_data is not None:
- kmi_props = kmi.properties
- for attr, value in kmi_props_data:
- _kmi_props_setattr(kmi_props, attr, value)
-
-
-def keyconfig_import_from_data(name, keyconfig_data):
- # Load data in the format defined above.
- #
- # Runs at load time, keep this fast!
-
- import bpy
- wm = bpy.context.window_manager
- kc = wm.keyconfigs.new(name)
- for (km_name, km_args, km_content) in keyconfig_data:
- km = kc.keymaps.new(km_name, **km_args)
- keymap_items_from_data(km, km_content["items"], is_modal=km_args.get("modal", False))
-
-
-def keyconfig_module_from_preset(name, preset_reference_filename=None):
- import os
- import importlib.util
- if preset_reference_filename is not None:
- preset_path = os.path.join(os.path.dirname(preset_reference_filename), name + ".py")
- else:
- preset_path = None
-
- # External presets may want to re-use other presets too.
- if not (preset_path and os.path.exists(preset_path)):
- preset_path = bpy.utils.preset_find(name, "keyconfig")
-
- # module name isn't used or added to 'sys.modules'.
- mod_spec = importlib.util.spec_from_file_location("__main__", preset_path)
- mod = importlib.util.module_from_spec(mod_spec)
- mod_spec.loader.exec_module(mod)
- return mod
-
-
-# -----------------------------------------------------------------------------
# Utility Functions
-def km_exists_in(km, export_keymaps):
- for km2, kc in export_keymaps:
- if km2.name == km.name:
- return True
- return False
-
-
-def keyconfig_merge(kc1, kc2):
- """ note: kc1 takes priority over kc2
- """
- merged_keymaps = [(km, kc1) for km in kc1.keymaps]
- if kc1 != kc2:
- merged_keymaps.extend((km, kc2) for km in kc2.keymaps if not km_exists_in(km, merged_keymaps))
-
- return merged_keymaps
-
-
def keyconfig_test(kc):
def testEntry(kc, entry, src=None, parent=None):
@@ -592,8 +136,9 @@ def keyconfig_test(kc):
# -------------------------------------------------------------------------
# Function body
+ from bl_keymap_utils import keymap_hierarchy
result = False
- for entry in km_hierarchy():
+ for entry in keymap_hierarchy.generate():
if testEntry(kc, entry):
result = True
return result
diff --git a/release/scripts/modules/bpy_extras/mesh_utils.py b/release/scripts/modules/bpy_extras/mesh_utils.py
index a09282da2fe..85356206482 100644
--- a/release/scripts/modules/bpy_extras/mesh_utils.py
+++ b/release/scripts/modules/bpy_extras/mesh_utils.py
@@ -239,7 +239,7 @@ def edge_loops_from_edges(mesh, edges=None):
return line_polys
-def ngon_tessellate(from_data, indices, fix_loops=True):
+def ngon_tessellate(from_data, indices, fix_loops=True, debug_print=True):
"""
Takes a polyline of indices (fgon) and returns a list of face
index lists. Designed to be used for importers that need indices for an
@@ -405,7 +405,8 @@ def ngon_tessellate(from_data, indices, fix_loops=True):
fill = [[vert_map[i] for i in reversed(f)] for f in fill]
if not fill:
- print('Warning Cannot scanfill, fallback on a triangle fan.')
+ if debug_print:
+ print('Warning Cannot scanfill, fallback on a triangle fan.')
fill = [[0, i - 1, i] for i in range(2, len(indices))]
else:
# Use real scanfill.
diff --git a/release/scripts/modules/bpy_extras/node_shader_utils.py b/release/scripts/modules/bpy_extras/node_shader_utils.py
index 049ae7209c7..393695bc8ce 100644
--- a/release/scripts/modules/bpy_extras/node_shader_utils.py
+++ b/release/scripts/modules/bpy_extras/node_shader_utils.py
@@ -252,6 +252,7 @@ class PrincipledBSDFWrapper(ShaderWrapper):
self._grid_to_location(-1, -2, dst_node=node_normalmap, ref_node=node_principled)
# Link
links.new(node_normalmap.outputs["Normal"], node_principled.inputs["Normal"])
+ self._node_normalmap = node_normalmap
return self._node_normalmap
node_normalmap = property(node_normalmap_get)
diff --git a/release/scripts/modules/rna_keymap_ui.py b/release/scripts/modules/rna_keymap_ui.py
index 752db7fd5ac..756dbde23c9 100644
--- a/release/scripts/modules/rna_keymap_ui.py
+++ b/release/scripts/modules/rna_keymap_ui.py
@@ -355,28 +355,27 @@ def draw_filtered(display_keymaps, filter_type, filter_text, layout):
def draw_hierarchy(display_keymaps, layout):
- from bpy_extras import keyconfig_utils
- for entry in keyconfig_utils.km_hierarchy():
+ from bl_keymap_utils import keymap_hierarchy
+ for entry in keymap_hierarchy.generate():
draw_entry(display_keymaps, entry, layout)
def draw_keymaps(context, layout):
- from bpy_extras import keyconfig_utils
+ from bl_keymap_utils.io import keyconfig_merge
wm = context.window_manager
- kc = wm.keyconfigs.user
+ kc_user = wm.keyconfigs.user
+ kc_active = wm.keyconfigs.active
spref = context.space_data
- col = layout.column()
- sub = col.column()
-
- subsplit = sub.split()
+ subsplit = layout.split()
subcol = subsplit.column()
- row = subcol.row(align=True)
+ col = subcol.column()
+ row = col.row(align=True)
# row.prop_search(wm.keyconfigs, "active", wm, "keyconfigs", text="Key Config")
- text = bpy.path.display_name(wm.keyconfigs.active.name)
+ text = bpy.path.display_name(kc_active.name)
if not text:
text = "Blender (default)"
row.menu("USERPREF_MT_keyconfigs", text=text)
@@ -389,15 +388,15 @@ def draw_keymaps(context, layout):
rowsub = row.split(factor=0.33, align=True)
# postpone drawing into rowsub, so we can set alert!
- col.separator()
- display_keymaps = keyconfig_utils.keyconfig_merge(kc, kc)
+ layout.separator()
+ display_keymaps = keyconfig_merge(kc_user, kc_user)
filter_type = spref.filter_type
filter_text = spref.filter_text.strip()
if filter_text:
filter_text = filter_text.lower()
- ok = draw_filtered(display_keymaps, filter_type, filter_text, col)
+ ok = draw_filtered(display_keymaps, filter_type, filter_text, layout)
else:
- draw_hierarchy(display_keymaps, col)
+ draw_hierarchy(display_keymaps, layout)
ok = True
# go back and fill in rowsub
@@ -406,3 +405,32 @@ def draw_keymaps(context, layout):
if not ok:
rowsubsub.alert = True
rowsubsub.prop(spref, "filter_text", text="", icon='VIEWZOOM')
+
+ if not filter_text:
+ # When the keyconfig defines it's own preferences.
+ kc_prefs = kc_active.preferences
+ if kc_prefs is not None:
+ box = col.box()
+ row = box.row(align=True)
+
+ userpref = context.user_preferences
+ inputs = userpref.inputs
+ show_ui_keyconfig = inputs.show_ui_keyconfig
+ row.prop(
+ inputs,
+ "show_ui_keyconfig",
+ text="",
+ icon='TRIA_DOWN' if show_ui_keyconfig else 'TRIA_RIGHT',
+ emboss=False,
+ )
+ row.label(text="Preferences")
+
+ if show_ui_keyconfig:
+ # Defined by user preset, may contain mistakes out of our control.
+ try:
+ kc_prefs.draw(box)
+ except Exception:
+ import traceback
+ traceback.print_exc()
+ del box
+ del kc_prefs
diff --git a/release/scripts/modules/rna_xml.py b/release/scripts/modules/rna_xml.py
index a4610c65a43..7fc9bcb0261 100644
--- a/release/scripts/modules/rna_xml.py
+++ b/release/scripts/modules/rna_xml.py
@@ -61,22 +61,24 @@ def print_ln(data):
print(data, end="")
-def rna2xml(fw=print_ln,
- root_node="",
- root_rna=None, # must be set
- root_rna_skip=set(),
- root_ident="",
- ident_val=" ",
- skip_classes=(bpy.types.Operator,
- bpy.types.Panel,
- bpy.types.KeyingSet,
- bpy.types.Header,
- bpy.types.PropertyGroup,
- ),
- skip_typemap=None,
- pretty_format=True,
- method='DATA'):
-
+def rna2xml(
+ fw=print_ln,
+ root_node="",
+ root_rna=None, # must be set
+ root_rna_skip=set(),
+ root_ident="",
+ ident_val=" ",
+ skip_classes=(
+ bpy.types.Operator,
+ bpy.types.Panel,
+ bpy.types.KeyingSet,
+ bpy.types.Header,
+ bpy.types.PropertyGroup,
+ ),
+ skip_typemap=None,
+ pretty_format=True,
+ method='DATA',
+):
from xml.sax.saxutils import quoteattr
property_typemap = build_property_typemap(skip_classes, skip_typemap)
@@ -177,11 +179,10 @@ def rna2xml(fw=print_ln,
# declare + attributes
if pretty_format:
if node_attrs:
- tmp_str = "<%s " % value_type_name
- tmp_ident = "\n" + ident + (" " * len(tmp_str))
- fw("%s%s%s>\n" % (ident, tmp_str, tmp_ident.join(node_attrs)))
- del tmp_str
- del tmp_ident
+ fw("%s<%s\n" % (ident, value_type_name))
+ for node_attr in node_attrs:
+ fw("%s%s\n" % (ident_next, node_attr))
+ fw("%s>\n" % (ident_next,))
else:
fw("%s<%s>\n" % (ident, value_type_name))
else:
diff --git a/release/scripts/presets/interaction/3dsmax.py b/release/scripts/presets/interaction/3dsmax.py
deleted file mode 100644
index 681aa4ab4b7..00000000000
--- a/release/scripts/presets/interaction/3dsmax.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# Configuration 3dsmax
-import bpy
-
-bpy.context.user_preferences.edit.use_drag_immediately = False
-bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False
-bpy.context.user_preferences.view.use_auto_perspective = True
-bpy.context.user_preferences.view.use_quit_dialog = True
-bpy.context.user_preferences.inputs.select_mouse = 'LEFT'
-bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY'
-bpy.context.user_preferences.inputs.view_zoom_axis = 'VERTICAL'
-bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE'
-bpy.context.user_preferences.inputs.invert_mouse_zoom = False
diff --git a/release/scripts/presets/interaction/blender.py b/release/scripts/presets/interaction/blender.py
deleted file mode 100644
index 0c79a3fc909..00000000000
--- a/release/scripts/presets/interaction/blender.py
+++ /dev/null
@@ -1,14 +0,0 @@
-# Configuration Blender
-import bpy
-
-bpy.context.user_preferences.view.use_mouse_depth_cursor = False
-bpy.context.user_preferences.view.use_mouse_depth_navigate = False
-bpy.context.user_preferences.view.use_zoom_to_mouse = False
-bpy.context.user_preferences.view.use_rotate_around_active = False
-bpy.context.user_preferences.edit.use_drag_immediately = False
-bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False
-bpy.context.user_preferences.inputs.select_mouse = 'RIGHT'
-bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY'
-bpy.context.user_preferences.inputs.view_zoom_axis = 'VERTICAL'
-bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE'
-bpy.context.user_preferences.inputs.invert_mouse_zoom = False
diff --git a/release/scripts/presets/interaction/maya.py b/release/scripts/presets/interaction/maya.py
deleted file mode 100644
index 059669d6482..00000000000
--- a/release/scripts/presets/interaction/maya.py
+++ /dev/null
@@ -1,10 +0,0 @@
-# Configuration Blender
-import bpy
-
-bpy.context.user_preferences.edit.use_drag_immediately = True
-bpy.context.user_preferences.edit.use_insertkey_xyz_to_rgb = False
-bpy.context.user_preferences.inputs.select_mouse = 'LEFT'
-bpy.context.user_preferences.inputs.view_zoom_method = 'DOLLY'
-bpy.context.user_preferences.inputs.view_zoom_axis = 'HORIZONTAL'
-bpy.context.user_preferences.inputs.view_rotate_method = 'TURNTABLE'
-bpy.context.user_preferences.inputs.invert_mouse_zoom = False
diff --git a/release/scripts/presets/interface_theme/24x_blues.xml b/release/scripts/presets/interface_theme/24x_blues.xml
deleted file mode 100644
index 18b866eeb0f..00000000000
--- a/release/scripts/presets/interface_theme/24x_blues.xml
+++ /dev/null
@@ -1,1177 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.444043"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#616161"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#262626"
- inner="#b2bec6ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#262626"
- inner="#d0d0d0ff"
- inner_sel="#667677ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#262626"
- inner="#b2bec6ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#262626"
- inner="#aababbff"
- inner_sel="#667677ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#262626"
- inner="#d0d0d0ff"
- inner_sel="#7d7d7dff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#262626"
- inner="#a1a1a1a4"
- inner_sel="#999999ff"
- item="#585858ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#262626"
- inner="#808080ff"
- inner_sel="#999999ff"
- item="#d2d2d2ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#262626"
- inner="#aaaaaaff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#262626"
- inner="#d0d0d0ff"
- inner_sel="#464646ff"
- item="#717171ff"
- text="#000000"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#7f7f7fff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#d2d2d2e7"
- inner_sel="#999999ff"
- item="#646464ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-25"
- shadedown="25">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#262626"
- inner="#b4b4b4df"
- inner_sel="#646464b4"
- item="#b4b4b4ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#b0bcc4e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#d2d2d200"
- inner_sel="#7f7f7fff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#262626"
- inner="#b4b4b42e"
- inner_sel="#646464b4"
- item="#b4b4b4ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#7f7f7fff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#f0eb64"
- inner_key_sel="#d7d34b"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#4c4c4c"
- clipping_border_3d="#313131ff"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#dcaedc"
- object_active="#ff88ff"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- text_keyframe="#ddd700"
- camera="#000000"
- empty="#000000"
- light="#00000028"
- speaker="#000000"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#00a5ff"
- vertex_unreferenced="#000000"
- edge_select="#ffa000"
- edge_seam="#db2512"
- edge_sharp="#00abc0"
- edge_crease="#cc0099"
- edge_bevel="#00a5ff"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000000"
- face_select="#ff85003c"
- face_dot="#ff8a30"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#202000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#ffffff80"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- bone_solid="#c8c8c8"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#b44d4d"
- view_overlay="#000000"
- transform="#ffffff"
- frame_current="#60c040"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="1">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b457"
- button_title="#121227"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <gradients>
- <ThemeGradientColors show_grad="TRUE"
- gradient="#a3a3a3"
- high_gradient="#7e7e7e">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#ffffff19"
- back="#7aa5a32e"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#818181"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="3">
- <space>
- <ThemeSpaceGeneric back="#979797"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b457"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#b4b4b4"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#a0a0d0">
- <space>
- <ThemeSpaceGeneric back="#808080"
- title="#000000"
- text="#000000"
- text_hi="#0f0f0f"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#757575"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#b4b4b4"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#858585"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- keyframe_scale_factor="1"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#a0a0a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#b4b4b4"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#b4b4b4ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#353535"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#404040"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#949494"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b442"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#818181"
- selected_text="#c67777"
- cursor="#ff0000"
- syntax_builtin="#800050"
- syntax_symbols="#4c4c4c"
- syntax_special="#5f5f00"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#006432"
- syntax_string="#640000"
- syntax_numbers="#0000c8">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b5b5b"
- frame_current="#60c040"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9ba0"
- converter_node="#c6bfbf"
- color_node="#457b95"
- group_node="#69756e"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#646464"
- output_node="#646464"
- filter_node="#6c696f"
- vector_node="#6f578c"
- texture_node="#8395bf"
- shader_node="#4f9370"
- script_node="#6c696f"
- pattern_node="#6c696f"
- layout_node="#6e6f69">
- <space>
- <ThemeSpaceGeneric back="#757575"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b42f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#000000"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#c6777799">
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#757575"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/back_to_black.xml b/release/scripts/presets/interface_theme/back_to_black.xml
deleted file mode 100644
index 464625d0ba5..00000000000
--- a/release/scripts/presets/interface_theme/back_to_black.xml
+++ /dev/null
@@ -1,1177 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#444444ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#535353"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#a3a3a3ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#2a2a2aff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#111111ff"
- item="#33406bff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#2a2a2aff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#191919e6"
- inner_sel="#8c8c8cff"
- item="#33406be6"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#111111ff"
- inner_sel="#33406bff"
- item="#191919ff"
- text="#929292"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-100"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#56ff00"
- inner_anim_sel="#56ff00"
- inner_key="#fff400"
- inner_key_sel="#fff400"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.1">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#222222"
- clipping_border_3d="#313131ff"
- wire="#888888"
- wire_edit="#6c75ff"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#f15800"
- object_active="#ff8c19"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- text_keyframe="#ddd700"
- camera="#535353"
- empty="#535353"
- light="#fff0d328"
- speaker="#535353"
- vertex="#72cfdd"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#00a5ff"
- vertex_unreferenced="#000000"
- edge_select="#ffa000"
- edge_seam="#db2512"
- edge_sharp="#ff2020"
- edge_crease="#cc0099"
- edge_bevel="#00a5ff"
- edge_facesel="#6b6b6b"
- freestyle_edge_mark="#7fff7f"
- face="#73828f41"
- face_select="#ffa4003c"
- face_dot="#ffa900"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#7f7f7f"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#3b3b3b"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#ffedf8"
- extra_edge_angle="#202000"
- extra_face_angle="#00c900"
- extra_face_area="#fff000"
- editmesh_active="#ff020080"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- bone_solid="#c8c8c8"
- bundle_solid="#c8c8c8"
- camera_path="#5a5a5a"
- skin_root="#000000"
- view_overlay="#000000"
- transform="#ffffff"
- frame_current="#60c040"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="1">
- <space>
- <ThemeSpaceGradient title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#00000057"
- button_title="#929292"
- button_text="#c3c3c3"
- button_text_hi="#e5e5e5"
- tab_active="#212947"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#000000">
- <gradients>
- <ThemeGradientColors show_grad="TRUE"
- gradient="#1d1d1d"
- high_gradient="#000000">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#262626"
- frame_current="#336622"
- window_sliders="#969696"
- channels_region="#6d6d6d"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#ffffff"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- handle_free="#808080"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#808080"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#808080"
- handle_vertex="#808080"
- handle_vertex_select="#ff8500"
- handle_vertex_size="3">
- <space>
- <ThemeSpaceGeneric back="#0d0d0d"
- title="#5d5d5d"
- text="#ffffff"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1a1a1a"
- list_title="#000000"
- list_text="#bbbbbb"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#354d66">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#0d0d0d"
- title="#585858"
- text="#ffffff"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c3c3c3"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#0c0c0c"
- list_title="#383838"
- list_text="#d8d8d8"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#212121"
- frame_current="#2a5c1c"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- keyframe_scale_factor="1"
- summary="#00000000">
- <space>
- <ThemeSpaceGeneric back="#080808"
- title="#5d5d5d"
- text="#ffffff"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#020202"
- list_title="#2c2c2c"
- list_text="#ebebeb"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#0f13bb"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#050505ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#282828"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#2f5f23"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#202020"
- title="#5d5d5d"
- text="#ffffff"
- text_hi="#ffffff"
- header="#000000"
- header_text="#f3f3f3"
- header_text_hi="#ffffff"
- button="#02020242"
- button_title="#bdbdbd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#191919"
- selected_text="#202020"
- cursor="#ff0000"
- syntax_builtin="#cf3d99"
- syntax_symbols="#4c4c4c"
- syntax_special="#969629"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#249d60"
- syntax_string="#cc3535"
- syntax_numbers="#3c68ff">
- <space>
- <ThemeSpaceGeneric back="#050505"
- title="#9e9e9e"
- text="#ebebeb"
- text_hi="#ffffff"
- header="#000000"
- header_text="#b9b9b9"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#d8d8d8"
- button_text="#cccccc"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#272727"
- frame_current="#2e5820"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#c7c7c7"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#6eafff"
- wire_inner="#737373"
- wire_select="#0019ff"
- selected_text="#7f7070"
- node_backdrop="#202030bc"
- converter_node="#113941"
- color_node="#0e3157"
- group_node="#091a07"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#273053"
- output_node="#273053"
- filter_node="#0e3157"
- vector_node="#0e3157"
- texture_node="#0e3157"
- shader_node="#0e3157"
- script_node="#0e3157"
- pattern_node="#0e3157"
- layout_node="#0e3157">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#c7c7c7"
- header_text_hi="#ffffff"
- button="#0000002f"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#ffffff"
- list_text="#ffffff"
- list_text_hi="#b8ffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#070707"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#245824"
- selected_highlight="#212844">
- <space>
- <ThemeSpaceGeneric back="#070707"
- title="#9b9b9b"
- text="#cccccc"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#9b9b9b"
- text_hi="#ffffff"
- header="#000000"
- header_text="#adadad"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#cecece"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#0f0f0f"
- title="#5d5d5d"
- text="#7d7d7d"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#000000ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#0094af"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#1b501b"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#0d0d0d"
- title="#5d5d5d"
- text="#ffffff"
- text_hi="#ffffff"
- header="#000000"
- header_text="#979797"
- header_text_hi="#ffffff"
- button="#070707ff"
- button_title="#c5c5c5"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#000000"
- tab_inactive="#000000"
- tab_back="#060606ff"
- tab_outline="#3a3a3a">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/blender_24x.xml b/release/scripts/presets/interface_theme/blender_24x.xml
deleted file mode 100644
index d0459e02115..00000000000
--- a/release/scripts/presets/interface_theme/blender_24x.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#262626"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#262626"
- inner="#c6bab0ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#262626"
- inner="#d0d0d0ff"
- inner_sel="#667677ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#262626"
- inner="#aea8b2ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#262626"
- inner="#aababbff"
- inner_sel="#667677ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#262626"
- inner="#d0d0d0ff"
- inner_sel="#7d7d7dff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#262626"
- inner="#a1a1a1a4"
- inner_sel="#999999ff"
- item="#585858ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#262626"
- inner="#808080ff"
- inner_sel="#999999ff"
- item="#d2d2d2ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#262626"
- inner="#aaaaaaff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#262626"
- inner="#d0d0d0ff"
- inner_sel="#464646ff"
- item="#717171ff"
- text="#000000"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#7f7f7fff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#d2d2d2ff"
- inner_sel="#999999ff"
- item="#646464ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-25"
- shadedown="25">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#262626"
- inner="#b4b4b42e"
- inner_sel="#646464b4"
- item="#b4b4b4ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#ffffddff"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#d2d2d200"
- inner_sel="#7f7f7fff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#262626"
- inner="#b4b4b42e"
- inner_sel="#646464b4"
- item="#b4b4b4ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#7f7f7fff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#f0eb64"
- inner_key_sel="#d7d34b"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#4c4c4c"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#00000028"
- speaker="#000000"
- camera="#000000"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#dcaedc"
- object_active="#ff88ff"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- transform="#ffffff"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#ffa000"
- edge_seam="#db2512"
- edge_sharp="#00abc0"
- edge_crease="#cc0099"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000000"
- face_select="#ff85003c"
- face_dot="#ff8a30"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#202000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#ffffff80"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#60c040"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#b44d4d"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b457"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#000000"
- high_gradient="#7e7e7e">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#818181"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="3">
- <space>
- <ThemeSpaceGeneric back="#979797"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b457"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#b4b4b4"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#a0a0d0">
- <space>
- <ThemeSpaceGeneric back="#808080"
- title="#000000"
- text="#000000"
- text_hi="#0f0f0f"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#757575"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#b4b4b4"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#858585"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#a0a0a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#b4b4b4"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#b4b4b4ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#353535"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#404040"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#949494"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b442"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#818181"
- selected_text="#c67777"
- cursor="#ff0000"
- syntax_builtin="#800050"
- syntax_symbols="#4c4c4c"
- syntax_special="#5f5f00"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#006432"
- syntax_string="#640000"
- syntax_numbers="#0000c8">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b5b5b"
- frame_current="#60c040"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9ba0"
- converter_node="#c6bfbf"
- color_node="#457b95"
- group_node="#69756e"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#646464"
- output_node="#646464"
- filter_node="#6c696f"
- vector_node="#6f578c"
- texture_node="#8395bf"
- shader_node="#4f9370"
- script_node="#6c696f"
- pattern_node="#6c696f"
- layout_node="#6e6f69">
- <space>
- <ThemeSpaceGeneric back="#757575"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b42f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#000000"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#c6777799">
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#757575"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#b4b4b4"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#b4b4b4"
- tab_inactive="#999999"
- tab_back="#757575ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/blender_27x.xml b/release/scripts/presets/interface_theme/blender_27x.xml
deleted file mode 100644
index db9d042ae55..00000000000
--- a/release/scripts/presets/interface_theme/blender_27x.xml
+++ /dev/null
@@ -1,1242 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- icon_saturation="1"
- widget_emboss="#ffffff05"
- editor_outline="#3f3f3f"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc"
- manipulator_hi="#ffffff"
- manipulator_primary="#deff0d"
- manipulator_secondary="#00ffff"
- manipulator_a="#177f17"
- manipulator_b="#7f1717">
- <wcol_regular>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_toolbar_item>
- <ThemeWidgetColors outline="#000000"
- inner="#464646ff"
- inner_sel="#ccccccff"
- item="#000000ff"
- text="#ffffff"
- text_sel="#333333"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.6">
- </ThemeWidgetColors>
- </wcol_toolbar_item>
- <wcol_radio>
- <ThemeWidgetColors outline="#000000"
- inner="#464646ff"
- inner_sel="#5680c2ff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="25"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#000000"
- inner="#464646ff"
- inner_sel="#464646ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15"
- roundness="0.666666">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#191919"
- inner="#b4b4b4ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0"
- roundness="1">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#191919"
- inner="#b4b4b4ff"
- inner_sel="#999999ff"
- item="#808080ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0"
- roundness="1">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#191919"
- inner="#808080ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#000000"
- inner="#464646ff"
- inner_sel="#464646ff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#5680c2ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#191919e6"
- inner_sel="#8c8c8cff"
- item="#2d2d2de6"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10"
- roundness="1">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#5680c2ff"
- item="#acacac80"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="38"
- shadedown="0"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#323232"
- inner="#505050b4"
- inner_sel="#646464b4"
- item="#808080ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-5"
- roundness="1">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#808080ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#5680c2ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.4">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#f0eb64"
- inner_key_sel="#d7d34b"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- inner_overridden="#000000"
- inner_overridden_sel="#000000"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- <wcol_tab>
- <ThemeWidgetColors outline="#3c3c3c"
- inner="#535353ff"
- inner_sel="#727272ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0"
- roundness="0.5">
- </ThemeWidgetColors>
- </wcol_tab>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#404040"
- clipping_border_3d="#313131ff"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#f15800"
- object_active="#ffaa40"
- text_keyframe="#ddd700"
- camera="#000000"
- empty="#000000"
- light="#00000028"
- speaker="#000000"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#00a5ff"
- vertex_unreferenced="#000000"
- edge_select="#ffa000"
- edge_seam="#db2512"
- edge_sharp="#00ffff"
- edge_crease="#cc0099"
- edge_bevel="#00a5ff"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000012"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#000000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#ffffff80"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- bone_solid="#c8c8c8"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#b44d4d"
- view_overlay="#000000"
- transform="#ffffff"
- frame_current="#60c040"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="1">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#000000"
- high_gradient="#393939">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#5e5e5e"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="6"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#6b6b6b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#ff8c19">
- <space>
- <ThemeSpaceGeneric back="#4c4c4c"
- title="#000000"
- text="#fafafa"
- text_hi="#0f0f0f"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#6b6b6b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#5e5e5e"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- keyframe_scale_factor="1"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#6b6b6b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="3"
- freestyle_face_mark="#00000000"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#0000004c"
- preview_stitch_face="#7f7f0033"
- preview_stitch_edge="#ff00ff33"
- preview_stitch_vert="#0000ff33"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#00000000"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#353535"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#404040"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#747474"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#404040"
- selected_text="#c67777"
- cursor="#ff0000"
- syntax_builtin="#800050"
- syntax_symbols="#4c4c4c"
- syntax_special="#5f5f00"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#006432"
- syntax_string="#640000"
- syntax_numbers="#0000c8">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#f15800"
- node_active="#ffaa40"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9ba0"
- converter_node="#686a75"
- color_node="#6c696f"
- group_node="#69756e"
- group_socket_node="#dfca35"
- frame_node="#9b9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#646464"
- output_node="#646464"
- filter_node="#6c696f"
- vector_node="#6c696f"
- texture_node="#6c696f"
- shader_node="#6c696f"
- script_node="#6c696f"
- pattern_node="#6c696f"
- layout_node="#6c696f">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000019"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <topbar>
- <ThemeTopBar>
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#535353ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000000"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTopBar>
- </topbar>
- <statusbar>
- <ThemeStatusBar>
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272ff"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#72727280"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- sub_back="#00000000"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeStatusBar>
- </statusbar>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/dark_blue_gradient.xml b/release/scripts/presets/interface_theme/dark_blue_gradient.xml
deleted file mode 100644
index 589aeab3a50..00000000000
--- a/release/scripts/presets/interface_theme/dark_blue_gradient.xml
+++ /dev/null
@@ -1,1179 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#801a1a"
- axis_y="#1a801a"
- axis_z="#1a1a80">
- <wcol_regular>
- <ThemeWidgetColors outline="#191919"
- inner="#4179b848"
- inner_sel="#4179b8ff"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="31"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#303030"
- inner="#172e4535"
- inner_sel="#48709e9d"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="56"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#303030"
- inner="#7a8287ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-25">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#303030"
- inner="#4179b851"
- inner_sel="#4179b8ff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-25">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#303030"
- inner="#48607999"
- inner_sel="#577ba1ff"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="17"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#303030"
- inner="#5e6d7d51"
- inner_sel="#667686ff"
- item="#000000ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-25">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#303030"
- inner="#213e5d7e"
- inner_sel="#667686ff"
- item="#3f76b0ff"
- text="#d7d7d7"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-25"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#39424bcc"
- inner_sel="#667686bf"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#2c2c2c"
- inner="#444444ff"
- inner_sel="#41618400"
- item="#7a7a7aff"
- text="#b8b8b8"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="25"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#4978aa75"
- inner_sel="#4978aaff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="25"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#26313ce8"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="25"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#1d2329e6"
- inner_sel="#8c8c8cff"
- item="#416184e6"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#3e79b600"
- inner_sel="#4978aaff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#2d2d2d"
- inner="#376fa91a"
- inner_sel="#85b9ef77"
- item="#264b7079"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#3e79b600"
- inner_sel="#1d4f81b7"
- item="#5a5a5aff"
- text="#f0f0f0"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-35"
- shadedown="20">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#339900"
- inner_anim_sel="#2b8000"
- inner_key="#999300"
- inner_key_sel="#666200"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#666666"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#00000028"
- speaker="#000000"
- camera="#000000"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#0069ff"
- object_active="#80b5ff"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- transform="#ffffff"
- vertex="#657780"
- vertex_select="#ff7c00"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#cb7027"
- edge_seam="#db2512"
- edge_sharp="#00ffff"
- edge_crease="#cc0099"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000036"
- face_select="#a47c5b73"
- face_dot="#be6925"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#000000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#ffffff80"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#60c040"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#000000"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#b8b8b8"
- text_hi="#e9e9e9"
- header="#3b3b3b"
- header_text="#b9b9b9"
- header_text_hi="#ffffff"
- button="#1d232980"
- button_title="#979797"
- button_text="#e8e8e8"
- button_text_hi="#ffffff"
- tab_active="#2f5175"
- tab_inactive="#1d2329"
- tab_back="#42505eff"
- tab_outline="#42505e">
- <gradients>
- <ThemeGradientColors show_grad="TRUE"
- gradient="#0f0f0f"
- high_gradient="#42505e">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#282828b0"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#585858"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#545d66"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#8b8b8b"
- list_text="#8b8b8b"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#755129">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#cacaca"
- text_hi="#0f0f0f"
- header="#3b3b3b"
- header_text="#8b8b8b"
- header_text_hi="#ffffff"
- button="#303030ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#8b8b8b"
- list_text="#8b8b8b"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#585858"
- view_sliders="#969696"
- active_action="#00000000"
- active_action_unset="#00000000"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#000000"
- transition_strips_selected="#000000"
- meta_strips="#000000"
- meta_strips_selected="#000000"
- sound_strips="#000000"
- sound_strips_selected="#000000"
- tweak="#000000"
- tweak_duplicate="#000000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#ded8d7">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#585858"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#bddae8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#ace493"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- summary="#00000000">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#000000"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aaaaaaff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#32adec"
- vertex_select="#be6925"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#a47c5b0a"
- face_select="#a47c5b3c"
- face_dot="#ffffff"
- facedot_size="3"
- freestyle_face_mark="#00000000"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#303030ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#7f7f7f"
- text="#999999"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1a1a1acc"
- button_title="#8b8b8b"
- button_text="#cccccc"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#636363"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#636363"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1a1a1acc"
- button_title="#afafaf"
- button_text="#b3b3b3"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#979797"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#b8b8b8"
- button_text="#b8b8b8"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#0000002a"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#2e2e2e"
- selected_text="#4e4e8f"
- cursor="#8b8bff"
- syntax_builtin="#ed4800"
- syntax_symbols="#ff8f00"
- syntax_special="#c080d0"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#cd8b00"
- syntax_string="#ffcd8b"
- syntax_numbers="#f0ad6d">
- <space>
- <ThemeSpaceGeneric back="#29201f"
- title="#8b8b8b"
- text="#cfbfad"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b5b5b"
- frame_current="#338aff"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#000000"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9ba0"
- converter_node="#575675"
- color_node="#f2b077"
- group_node="#1e7524"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#000000"
- distor_node="#000000"
- noodle_curving="5"
- input_node="#79bef2"
- output_node="#79bef2"
- filter_node="#ff0000"
- vector_node="#6de8e4"
- texture_node="#f2b077"
- shader_node="#e88daa"
- script_node="#f2b077"
- pattern_node="#a67c49"
- layout_node="#000000">
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#8b8b8b"
- text="#dbdbdb"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3b80"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#000000"
- text="#cacaca"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#141414"
- text_hi="#000000"
- header="#3b3b3b"
- header_text="#c2c2c2"
- header_text_hi="#000000"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#000000"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#000000"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#b8b8b8"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#202020"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#303030"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#313131"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1a1a1acc"
- button_title="#999999"
- button_text="#939393"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/default++.xml b/release/scripts/presets/interface_theme/default++.xml
deleted file mode 100644
index 3599a094381..00000000000
--- a/release/scripts/presets/interface_theme/default++.xml
+++ /dev/null
@@ -1,1173 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#ff6d66"
- axis_y="#90ff66"
- axis_z="#6693ff">
- <wcol_regular>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#ff9b5bff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#000000"
- inner="#4d4d4dff"
- inner_sel="#8ebaffff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="25">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#000000"
- inner="#464646ff"
- inner_sel="#abef98ff"
- item="#161616ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#191919"
- inner="#999999ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#191919"
- inner="#b4b4b4ff"
- inner_sel="#ff9b5bff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#191919"
- inner="#b4b4b4ff"
- inner_sel="#ff9b5bff"
- item="#808080ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#191919"
- inner="#808080ff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#000000"
- inner="#464646ff"
- inner_sel="#464646ff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#8ebaffff"
- item="#ffffffff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#727272ff"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#646464ff"
- inner_sel="#8ebaffff"
- item="#8ebaffff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="38"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#8ebaffff"
- item="#646464ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="38"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#323232"
- inner="#505050b4"
- inner_sel="#646464b4"
- item="#808080ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#808080ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#8ebaffff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#f0eb64"
- inner_key_sel="#d7d34b"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#404040"
- clipping_border_3d="#323232ff"
- wire="#1a1a1a"
- wire_edit="#1a1a1a"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#f15800"
- object_active="#ffaa40"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- text_keyframe="#ddd700"
- camera="#000000"
- empty="#000000"
- light="#00000028"
- speaker="#000000"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="5"
- vertex_unreferenced="#000000"
- edge_select="#ffa000"
- edge_seam="#db2512"
- edge_sharp="#00ffff"
- edge_crease="#cc0099"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000012"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#202000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#ffffff80"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- bone_solid="#c8c8c8"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#b44d4d"
- view_overlay="#000000"
- transform="#ffffff"
- frame_current="#60c040"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="3">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#000000"
- high_gradient="#5a5a5a">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#5e5e5e"
- frame_current="#ff9b5b"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ffffff"
- vertex_size="6"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ffffff"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#6b6b6b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#d8834d">
- <space>
- <ThemeSpaceGeneric back="#4c4c4c"
- title="#000000"
- text="#fafafa"
- text_hi="#0f0f0f"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#ff9b5b">
- <space>
- <ThemeSpaceGeneric back="#6b6b6b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#5e5e5e"
- frame_current="#ff9b5b"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- keyframe_scale_factor="1"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#6b6b6b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#ff85003c"
- face_dot="#ff8500"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#0000004c"
- preview_stitch_face="#7f7f0033"
- preview_stitch_edge="#ff00ff33"
- preview_stitch_vert="#0000ff33"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#353535"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#404040"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#ff9b5b"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#000000">
- <space>
- <ThemeSpaceGeneric back="#747474"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#404040"
- selected_text="#c67777"
- cursor="#ff0000"
- syntax_builtin="#800050"
- syntax_symbols="#4c4c4c"
- syntax_special="#5f5f00"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#006432"
- syntax_string="#640000"
- syntax_numbers="#0000c8">
- <space>
- <ThemeSpaceGeneric back="#999999"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b5b5b"
- frame_current="#ff9b5b"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#f15800"
- node_active="#ffaa40"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9be6"
- converter_node="#686a75"
- color_node="#6c696f"
- group_node="#69756e"
- group_socket_node="#dfca35"
- frame_node="#9b9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#646464"
- output_node="#646464"
- filter_node="#6c696f"
- vector_node="#6c696f"
- texture_node="#6c696f"
- shader_node="#6c696f"
- script_node="#6c696f"
- pattern_node="#6c696f"
- layout_node="#6c696f">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#646464"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#8ebaff"
- info_selected_text="#000000"
- info_error="#e24242"
- info_error_text="#000000"
- info_warning="#f18a48"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- marker_outline="#000000"
- marker="#37a879"
- active_marker="#ffffff"
- selected_marker="#eeee0d"
- disabled_marker="#8d4141"
- locked_marker="#7f7f7f"
- path_before="#ff6d66"
- path_after="#8ebaff"
- frame_current="#ff9b5b"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#f48a48"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#727272"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/elsyiun.xml b/release/scripts/presets/interface_theme/elsyiun.xml
deleted file mode 100644
index 51af13a6009..00000000000
--- a/release/scripts/presets/interface_theme/elsyiun.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#191919"
- inner="#4e4e4eff"
- inner_sel="#b67e3eff"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#303030"
- inner="#414141ff"
- inner_sel="#b67e3eff"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#303030"
- inner="#414141ff"
- inner_sel="#b67e3eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#303030"
- inner="#7a8287ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#303030"
- inner="#4e4e4eff"
- inner_sel="#a9753aff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#303030"
- inner="#555555ff"
- inner_sel="#796348ff"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#303030"
- inner="#414141ff"
- inner_sel="#999999ff"
- item="#7a7a7aff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#303030"
- inner="#606068ff"
- inner_sel="#91919dff"
- item="#4b4b4bff"
- text="#a2a2a2"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#4b4b4bff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="-7">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#2c2c2c"
- inner="#444444ff"
- inner_sel="#464646ff"
- item="#7a7a7aff"
- text="#b8b8b8"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#f78805ff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="25"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#3b3b3bff"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#414141e6"
- inner_sel="#8c8c8cff"
- item="#b67e3ee6"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#b67e3eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="20">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#2d2d2d"
- inner="#6c707200"
- inner_sel="#646464b4"
- item="#414141ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#a9753777"
- item="#5a5a5aff"
- text="#e0e0e0"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#339900"
- inner_anim_sel="#2b8000"
- inner_key="#999300"
- inner_key_sel="#666200"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#585858"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#00000028"
- speaker="#000000"
- camera="#000000"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#ff8500"
- object_active="#ffc280"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- transform="#ffffff"
- vertex="#657780"
- vertex_select="#ff7c00"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#cb7027"
- edge_seam="#db2512"
- edge_sharp="#00ffff"
- edge_crease="#cc0099"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000036"
- face_select="#a47c5b73"
- face_dot="#be6925"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#202000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#ffffff80"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#60c040"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#000000"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#b8b8b8"
- text_hi="#e9e9e9"
- header="#3b3b3b"
- header_text="#b9b9b9"
- header_text_hi="#ffffff"
- button="#3b3b3b57"
- button_title="#979797"
- button_text="#c5c5c5"
- button_text_hi="#ffffff"
- tab_active="#b67e3e"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#000000"
- high_gradient="#4b4b4b">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#585858"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#545d66"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#8b8b8b"
- list_text="#8b8b8b"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#755129">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#cacaca"
- text_hi="#0f0f0f"
- header="#3b3b3b"
- header_text="#8b8b8b"
- header_text_hi="#ffffff"
- button="#303030ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#585858"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#585858"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#000000"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#aaaaaaff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#32adec"
- vertex_select="#be6925"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#a47c5b0a"
- face_select="#a47c5b3c"
- face_dot="#ffffff"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#303030ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#8b8b8b"
- text="#8b8b8b"
- text_hi="#ffffff"
- header="#303030"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#303030ff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#818181"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#636363"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3b42"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#979797"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#b8b8b8"
- button_text="#b8b8b8"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#2e2e2e"
- selected_text="#4e4e8f"
- cursor="#8b8bff"
- syntax_builtin="#808bed"
- syntax_symbols="#4c4c4c"
- syntax_special="#c080d0"
- syntax_preprocessor="#409090"
- syntax_reserved="#8c3c00"
- syntax_comment="#cd8b00"
- syntax_string="#ffcd8b"
- syntax_numbers="#f0ad6d">
- <space>
- <ThemeSpaceGeneric back="#1e1e27"
- title="#8b8b8b"
- text="#cfbfad"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b5b5b"
- frame_current="#60c040"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#000000"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9ba0"
- converter_node="#575675"
- color_node="#2c6f6f"
- group_node="#1e7524"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#e08706"
- output_node="#e08706"
- filter_node="#2c6f6f"
- vector_node="#2c6f6f"
- texture_node="#2c6f6f"
- shader_node="#2c6f6f"
- script_node="#2c6f6f"
- pattern_node="#2c6f6f"
- layout_node="#2c6f6f">
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#8b8b8b"
- text="#dbdbdb"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3b2f"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#000000"
- text="#cacaca"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#727272"
- title="#000000"
- text="#000000"
- text_hi="#000000"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#000000"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#000000"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#000000"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#b8b8b8"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#4e4e8f80">
- <space>
- <ThemeSpaceGeneric back="#202020"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#303030"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#313131"
- header_text="#b8b8b8"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/graph.xml b/release/scripts/presets/interface_theme/graph.xml
deleted file mode 100644
index 904fcdf41ec..00000000000
--- a/release/scripts/presets/interface_theme/graph.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#5e5e5eff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#444444ff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#444444ff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#5e5e5eff"
- inner_sel="#999999ff"
- item="#414141ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#5e5e5eff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#5e5e5eff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#444444ff"
- inner_sel="#999999ff"
- item="#6d6d6dff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#5e5e5eff"
- inner_sel="#999999ff"
- item="#414141ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#505050ff"
- inner_sel="#4e4e4eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="-7">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#444444"
- inner="#444444ff"
- inner_sel="#464646ff"
- item="#7a7a7aff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#3f3f3fff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#3b3b3bff"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#2a2a2a"
- inner="#2a2a2aff"
- inner_sel="#8c8c8cff"
- item="#607f9ee6"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#202020"
- inner="#202020ff"
- inner_sel="#202020ff"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#3f3f3f00"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="20">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#444444ff"
- inner_sel="#607f9eff"
- item="#5e5e5eff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#607f9eff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#3b3b3b"
- inner="#3f3f3f00"
- inner_sel="#607f9eff"
- item="#414141ff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#607f9e"
- inner_anim_sel="#607f9e"
- inner_key="#4291dc"
- inner_key_sel="#4291dc"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.6">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#585858"
- wire="#000000"
- wire_edit="#161616"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#00000028"
- speaker="#000000"
- camera="#8d8c8d"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#00b5ff"
- object_active="#fbf1ff"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- transform="#ffffff"
- vertex="#000000"
- vertex_select="#0067cb"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#0067cb"
- edge_seam="#00ace4"
- edge_sharp="#9c00ff"
- edge_crease="#f1f4ff"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#b6b4af49"
- face_select="#005fa43e"
- face_dot="#00beb0"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#89908a"
- nurb_vline="#fff8f4"
- nurb_sel_uline="#2400ff"
- nurb_sel_vline="#f0deeb"
- act_spline="#00c6db"
- handle_free="#000000"
- handle_auto="#1c00ff"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#7b807e"
- handle_sel_free="#000000"
- handle_sel_auto="#9aa3a1"
- handle_sel_align="#f0e6e9"
- lastsel_point="#ffffff"
- extra_edge_len="#fff3fa"
- extra_edge_angle="#202000"
- extra_face_angle="#000080"
- extra_face_area="#002000"
- editmesh_active="#00f6ff5e"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#ffffff"
- bone_pose="#00b5ff"
- bone_pose_active="#fff3fa"
- frame_current="#60c040"
- outline_width="2"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#000000"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#e4e4e4"
- text_hi="#b9b9b9"
- header="#3b3b3b"
- header_text="#bababa"
- header_text_hi="#ffffff"
- button="#3b3b3b45"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#9e9e9e"
- tab_active="#3b3b3b"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <gradients>
- <ThemeGradientColors show_grad="TRUE"
- gradient="#414141"
- high_gradient="#545d69">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#6d6d6d"
- frame_current="#4291dc"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#607f9e"
- dopesheet_subchannel="#42566d"
- channel_group="#42566d"
- active_channels_group="#326799"
- vertex="#333333"
- vertex_select="#fdf4ff"
- vertex_size="6"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#8d8e90"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#b6b5b6"
- handle_sel_free="#000000"
- handle_sel_auto="#fdfffc"
- handle_sel_align="#148bce"
- handle_auto_clamped="#7e7e7e"
- handle_sel_auto_clamped="#148bce"
- lastsel_point="#ffffff"
- handle_vertex="#242324"
- handle_vertex_select="#ffeeee"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#5d5d5d"
- title="#ffffff"
- text="#ffffff"
- text_hi="#fcfcfc"
- header="#3b3b3b"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#8b8b8b"
- list_text="#979797"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#607f9e">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#e4e4e4"
- text="#cacaca"
- text_hi="#0f0f0f"
- header="#3b3b3b"
- header_text="#8b8b8b"
- header_text_hi="#ffffff"
- button="#303030ff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#6e6e6e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#4291dc">
- <space>
- <ThemeSpaceGeneric back="#5d5d5d"
- title="#ffffff"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#6d6d6d"
- frame_current="#4291dc"
- value_sliders="#000000"
- view_sliders="#929292"
- dopesheet_channel="#607f9e"
- dopesheet_subchannel="#42566d"
- channels="#707070"
- channels_selected="#9accff"
- channel_group="#42566d"
- active_channels_group="#326799"
- long_key="#9b9b9b"
- long_key_selected="#4291dc"
- keyframe="#2c2c2c"
- keyframe_selected="#fff1f1"
- keyframe_extreme="#fbf9fd"
- keyframe_extreme_selected="#f2efef"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#e5e2e2"
- keyframe_jitter_selected="#beb8c0"
- keyframe_border="#2c2c2cff"
- keyframe_border_selected="#f2efefff"
- summary="#3b3b3b6d">
- <space>
- <ThemeSpaceGeneric back="#5d5d5d"
- title="#ffffff"
- text="#ffffff"
- text_hi="#fcfcfc"
- header="#3b3b3b"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#3b3b3b"
- list_title="#000000"
- list_text="#979797"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#0094ff"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#a47c5b0a"
- face_select="#005fa480"
- face_dot="#1fcbff"
- facedot_size="2"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#5c5c5c"
- edge_select="#005fa4"
- scope_back="#303030ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#5e5e5e"
- title="#ffffff"
- text="#8b8b8b"
- text_hi="#ffffff"
- header="#303030"
- header_text="#000000"
- header_text_hi="#b8b8b8"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#3b3b3b"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#6e6e6e"
- window_sliders="#a0a0a0"
- movie_strip="#5794c3"
- movieclip_strip="#20208f"
- image_strip="#bdb7b6"
- scene_strip="#777777"
- audio_strip="#6057c3"
- effect_strip="#ffffff"
- transition_strip="#726d70"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#4291dc"
- keyframe="#ff8500"
- draw_action="#607f9e"
- preview_back="#3b3b3b"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#5d5d5d"
- title="#e4e4e4"
- text="#ffffff"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#b7b7b7"
- button="#3b3b3b42"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#3b3b3b"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#232323">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#3b3b3bff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#c7c7c7"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#c7c7c7"
- button_text="#969696"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#2e2e2e"
- selected_text="#607f9e"
- cursor="#8b8bff"
- syntax_builtin="#009eed"
- syntax_symbols="#607f9e"
- syntax_special="#009eed"
- syntax_preprocessor="#409090"
- syntax_reserved="#8c3c00"
- syntax_comment="#757575"
- syntax_string="#f0ad6d"
- syntax_numbers="#f0ad6d">
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#fefefe"
- text="#cfcfcf"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#3b3b3b"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#6d6d6d"
- frame_current="#4291dc"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#5d5d5d"
- title="#e4e4e4"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#b8b8b8"
- button="#727272ff"
- button_title="#b4b4b4"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3b3b3b">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#fff4f8"
- node_active="#ffffff"
- wire="#292929"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#909090"
- node_backdrop="#444444ff"
- converter_node="#292929"
- color_node="#292929"
- group_node="#5d5d5d"
- group_socket_node="#1f00c7"
- frame_node="#505050aa"
- matte_node="#0076b6"
- distor_node="#292929"
- noodle_curving="4"
- input_node="#009e9e"
- output_node="#1f00c7"
- filter_node="#0076b6"
- vector_node="#292929"
- texture_node="#009e9e"
- shader_node="#0076b6"
- script_node="#0076b6"
- pattern_node="#008db6"
- layout_node="#50b1b6">
- <space>
- <ThemeSpaceGeneric back="#5e5e5e"
- title="#ffffff"
- text="#ffffff"
- text_hi="#ffffff"
- header="#383838"
- header_text="#3b3b3b"
- header_text_hi="#b7b7b7"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#3b3b3b"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#212121">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#ffffff"
- text="#000000"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#727272"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#607f9e">
- <space>
- <ThemeSpaceGeneric back="#4b4b4b"
- title="#e4e4e4"
- text="#cacaca"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#e4e4e4"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#607f9e"
- info_selected_text="#ffffff"
- info_error="#3b3b3b"
- info_error_text="#ff0000"
- info_warning="#3b3b3b"
- info_warning_text="#ffe100"
- info_info="#3b3b3b"
- info_info_text="#25ff00"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#e4e4e4"
- text="#868686"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#ffffff"
- header_text_hi="#000000"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#000000"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#e4e4e4"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#3b3b3b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#838383"
- line_input="#ffffff"
- line_info="#607f9e"
- line_error="#ff0013"
- cursor="#2e2e2e"
- select="#4e4e8f80">
- <space>
- <ThemeSpaceGeneric back="#3b3b3b"
- title="#e4e4e4"
- text="#000000"
- text_hi="#ffffff"
- header="#303030"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#5e5e5e"
- title="#ffffff"
- text="#8b8b8b"
- text_hi="#ffffff"
- header="#303030"
- header_text="#000000"
- header_text_hi="#b8b8b8"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#3b3b3b"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/hexagon.xml b/release/scripts/presets/interface_theme/hexagon.xml
deleted file mode 100644
index 1ca52b76253..00000000000
--- a/release/scripts/presets/interface_theme/hexagon.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#191919"
- inner="#8d909fff"
- inner_sel="#859cb9ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#000000"
- inner="#8d909fff"
- inner_sel="#859cb9ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#000000"
- inner="#8b8d9aff"
- inner_sel="#859cb9ff"
- item="#ffffffff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#464646"
- inner="#9b9eadff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="25">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#464646"
- inner="#bbbbbbff"
- inner_sel="#777777ff"
- item="#ffffffff"
- text="#cecece"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#464646"
- inner="#afafafff"
- inner_sel="#859cb9ff"
- item="#191919ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#464646"
- inner="#8d909fff"
- inner_sel="#999999ff"
- item="#5d5d5dff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#3f3f3f"
- inner="#b4b4b4ff"
- inner_sel="#999999ff"
- item="#b0b0b0ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#191919"
- inner="#80828eff"
- inner_sel="#646464ff"
- item="#191919ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#3d3d3d"
- inner="#555d6dff"
- inner_sel="#464646ff"
- item="#9d9d9dff"
- text="#ffffff"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="15"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#50c8ffff"
- item="#ffffffff"
- text="#d8d8d8"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#393c44eb"
- inner_sel="#2d2d2dff"
- item="#646464ff"
- text="#cecece"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="40"
- shadedown="-40">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#5a5e6ae6"
- inner_sel="#8c8c8cff"
- item="#8f92a1e6"
- text="#d6d6d6"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#69a5beff"
- item="#ffffffff"
- text="#d9d9d9"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#4f5057"
- inner="#5050502e"
- inner_sel="#646464b4"
- item="#737a8eff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#50c8ff62"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#f0eb64"
- inner_key_sel="#d7d34b"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#5e5e83"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#00000028"
- speaker="#000000"
- camera="#000000"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#52c6ff"
- object_active="#6ed8ff"
- object_grouped="#104010"
- object_grouped_active="#55bb55"
- transform="#ffffff"
- vertex="#334cca"
- vertex_select="#0097da"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#1151ce"
- edge_seam="#e69632"
- edge_sharp="#ff2020"
- edge_crease="#cc0099"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#affff418"
- face_select="#1151ce66"
- face_dot="#4fc9ff"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#202000"
- extra_face_angle="#00008a"
- extra_face_area="#002000"
- editmesh_active="#00e8ff80"
- normal="#00ffff"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#60c040"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#000000"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#646875"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#6c717f57"
- button_title="#eaeaea"
- button_text="#d7d7d7"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#000000"
- high_gradient="#7f818d">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#58587c"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="3">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#646875ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#6c717f"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#69a5be">
- <space>
- <ThemeSpaceGeneric back="#646875"
- title="#000000"
- text="#000000"
- text_hi="#0f0f0f"
- header="#5c606c"
- header_text="#dddddd"
- header_text_hi="#ffffff"
- button="#6c717fff"
- button_title="#d7d7d7"
- button_text="#d7d7d7"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#646875ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#646875"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#58587c"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#6c717fff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#6c717f"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#334cca"
- vertex_select="#50c8ff"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#50c8ff3c"
- face_dot="#50c8ff"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#646875ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#646875ff"
- button_title="#eeeeee"
- button_text="#eeeeee"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#404040"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#90929c"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#64687542"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#646875"
- title="#ffffff"
- text="#e7e7e7"
- text_hi="#ffffff"
- header="#646875"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#5a5e6a"
- selected_text="#c67777"
- cursor="#ff0000"
- syntax_builtin="#800050"
- syntax_symbols="#4c4c4c"
- syntax_special="#5f5f00"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#006432"
- syntax_string="#640000"
- syntax_numbers="#0000c8">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#646875ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#58587c"
- frame_current="#60c040"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#646875"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#565863"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#5a5e6aff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#7f7070"
- node_backdrop="#9b9baca0"
- converter_node="#686a84"
- color_node="#6c697e"
- group_node="#69756e"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#64647b"
- output_node="#64647b"
- filter_node="#6c697e"
- vector_node="#6c697e"
- texture_node="#6c697e"
- shader_node="#6c697e"
- script_node="#6c697e"
- pattern_node="#6c697e"
- layout_node="#6c697e">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#6468752f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a7a7a7"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#6c717fff"
- button_title="#d7d7d7"
- button_text="#d7d7d7"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#245824"
- selected_highlight="#212844">
- <space>
- <ThemeSpaceGeneric back="#72747c"
- title="#000000"
- text="#e2e2e2"
- text_hi="#ffffff"
- header="#6c717f"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#b4b4b4"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#646875"
- header_text="#dddddd"
- header_text_hi="#ffffff"
- button="#b4b4b4ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#6c717fff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#000000"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc0606"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#6c717fff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#7c7e88"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#5c606c"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#646875ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/modern_minimalist.xml b/release/scripts/presets/interface_theme/modern_minimalist.xml
deleted file mode 100644
index 3b982514f4f..00000000000
--- a/release/scripts/presets/interface_theme/modern_minimalist.xml
+++ /dev/null
@@ -1,1183 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.01"
- menu_shadow_width="16"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff00"
- axis_x="#dc0000"
- axis_y="#00dc00"
- axis_z="#0000dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#2d2d2dff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#333333"
- inner="#383838ff"
- inner_sel="#607f9eff"
- item="#e6e6e6ff"
- text="#666666"
- text_sel="#bfbfbf"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#262626"
- inner="#323232ff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#4d4d4dff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#333333"
- inner="#404040ff"
- inner_sel="#607f9eff"
- item="#2d2d2dff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-10"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#333333"
- inner="#212121ff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="-7">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#656565ff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#333333"
- inner="#2d2d2dff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#333333"
- inner="#202020ff"
- inner_sel="#607f9eff"
- item="#202020ff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#333333"
- inner="#202020ff"
- inner_sel="#607f9eff"
- item="#607f9eff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#333333"
- inner="#202020ff"
- inner_sel="#607f9eff"
- item="#646464ff"
- text="#607f9e"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#262626"
- inner="#202020ff"
- inner_sel="#607f9eff"
- item="#ffffffff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="20">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#202020"
- inner="#1a1a1aff"
- inner_sel="#607f9eff"
- item="#262626ff"
- text="#999999"
- text_sel="#b0b0b0"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#333333"
- inner="#404040ff"
- inner_sel="#404040ff"
- item="#607f9eff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#323232"
- inner="#36363600"
- inner_sel="#607f9eff"
- item="#323232ff"
- text="#999999"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#006482"
- inner_anim_sel="#006482"
- inner_key="#006600"
- inner_key_sel="#006600"
- inner_driven="#9100d7"
- inner_driven_sel="#9100d7"
- blend="1">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#1e1e1e"
- clipping_border_3d="#313131ff"
- wire="#666666"
- wire_edit="#bfbfbf"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#00d9ff"
- object_active="#00ff90"
- object_grouped="#95592f"
- object_grouped_active="#009652"
- text_keyframe="#ddd700"
- camera="#8d8c8d"
- empty="#8d8c8d"
- light="#8d8c8d40"
- speaker="#8d8c8d"
- vertex="#bfbfbf"
- vertex_select="#00bdff"
- vertex_size="7"
- vertex_unreferenced="#000000"
- edge_select="#00c0ff"
- edge_seam="#ffe200"
- edge_sharp="#fb00ff"
- edge_crease="#ff0f00"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#ff7d00"
- face="#26262680"
- face_select="#0094ff80"
- face_dot="#00b5ff"
- facedot_size="3"
- freestyle_face_mark="#ff8a0433"
- nurb_uline="#7b807e"
- nurb_vline="#fff8f4"
- nurb_sel_uline="#00bdff"
- nurb_sel_vline="#f0deeb"
- act_spline="#666666"
- handle_free="#9c003a"
- handle_auto="#805c00"
- handle_vect="#b035b1"
- handle_sel_vect="#00bdff"
- handle_align="#404080"
- handle_sel_free="#00bdff"
- handle_sel_auto="#00bdff"
- handle_sel_align="#00bdff"
- lastsel_point="#00ff12"
- extra_edge_len="#fff3fa"
- extra_edge_angle="#fff200"
- extra_face_angle="#009aff"
- extra_face_area="#000000"
- editmesh_active="#00ff12ff"
- normal="#22dddd"
- vertex_normal="#225dd4"
- split_normal="#dd23dd"
- bone_pose="#00b8ff"
- bone_pose_active="#00ff12"
- bone_solid="#bab5bc"
- bundle_solid="#c8c8c8"
- camera_path="#4d4d4d"
- skin_root="#000000"
- view_overlay="#000000"
- transform="#ffffff"
- frame_current="#60c040"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="3">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#e4e4e4"
- text_hi="#b4b4b4"
- header="#202020"
- header_text="#bababa"
- header_text_hi="#ffffff"
- button="#262626f9"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#3b3b3b"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#232323"
- high_gradient="#333333">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#26262600"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#323232"
- frame_current="#4291dc"
- window_sliders="#808080"
- channels_region="#707070"
- dopesheet_channel="#6c3229"
- dopesheet_subchannel="#2d4459"
- channel_group="#262626"
- active_channels_group="#00b264"
- vertex="#808080"
- vertex_select="#00ffff"
- vertex_size="6"
- vertex_unreferenced="#404040"
- handle_free="#000000"
- handle_auto="#8d8e90"
- handle_vect="#38b238"
- handle_sel_vect="#148bce"
- handle_align="#b6b5b6"
- handle_sel_free="#148bce"
- handle_sel_auto="#fdfffc"
- handle_sel_align="#148bce"
- handle_auto_clamped="#7e7e7e"
- handle_sel_auto_clamped="#148bce"
- lastsel_point="#f2f0ff"
- handle_vertex="#8d8e90"
- handle_vertex_select="#ffffff"
- handle_vertex_size="6">
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#ffffff"
- text="#ffffff"
- text_hi="#fcfcfc"
- header="#202020"
- header_text="#ffffff"
- header_text_hi="#bababa"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1a1a1a"
- list_title="#919191"
- list_text="#999999"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#607f9e"
- scrollbar="#a0a0a0"
- scroll_handle="#7f7070"
- active_file="#ffffff"
- active_file_text="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#1a1a1a"
- title="#e4e4e4"
- text="#cacaca"
- text_hi="#0f0f0f"
- header="#202020"
- header_text="#8b8b8b"
- header_text_hi="#ffffff"
- button="#262626ff"
- button_title="#c7c7c7"
- button_text="#e4e4e4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#202020"
- list_title="#8b8b8b"
- list_text="#8b8b8b"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#323232"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#4291dc">
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#ffffff"
- text="#ffffff"
- text_hi="#ffffff"
- header="#202020"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#444444f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1a1a1a"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#323232"
- frame_current="#4291dc"
- value_sliders="#000000"
- view_sliders="#000000"
- dopesheet_channel="#5d7b99"
- dopesheet_subchannel="#2d4459"
- channels="#6a6a6a"
- channels_selected="#0094ff"
- channel_group="#1a1a1a"
- active_channels_group="#00b264"
- long_key="#909090"
- long_key_selected="#4291dc"
- keyframe="#808080"
- keyframe_selected="#00ffff"
- keyframe_extreme="#fff6ff"
- keyframe_extreme_selected="#dedede"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#dedcdc"
- keyframe_jitter_selected="#beb8c0"
- keyframe_border="#000000ff"
- keyframe_border_selected="#0056f2ff"
- summary="#66342fff">
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#ffffff"
- text="#ffffff"
- text_hi="#fcfcfc"
- header="#202020"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1a1a1a"
- list_title="#6a6a6a"
- list_text="#999999"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#0094ff"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#a47c5b0a"
- face_select="#005fa480"
- face_dot="#1fcbff"
- facedot_size="2"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#5c5c5c"
- edge_select="#005fa4"
- scope_back="#0000004c"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#1a1a1a"
- title="#ffffff"
- text="#8b8b8b"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#b8b8b8"
- button="#262626f9"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#444444"
- window_sliders="#a0a0a0"
- movie_strip="#5794c3"
- movieclip_strip="#20208f"
- image_strip="#bdb7b6"
- scene_strip="#777777"
- audio_strip="#6057c3"
- effect_strip="#ffffff"
- transition_strip="#726d70"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#4291dc"
- keyframe="#00ff00"
- draw_action="#607f9e"
- preview_back="#101010"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#e4e4e4"
- text="#ffffff"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#b7b7b7"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#c7c7c7"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272f2"
- button_title="#c7c7c7"
- button_text="#969696"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#33333300"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#262626"
- selected_text="#607f9e"
- cursor="#8b8bff"
- syntax_builtin="#009eed"
- syntax_symbols="#607f9e"
- syntax_special="#009eed"
- syntax_preprocessor="#409090"
- syntax_reserved="#8c3c00"
- syntax_comment="#757575"
- syntax_string="#f0ad6d"
- syntax_numbers="#f0ad6d">
- <space>
- <ThemeSpaceGeneric back="#1a1a1a"
- title="#fefefe"
- text="#e7e7e7"
- text_hi="#ffffff"
- header="#202020"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#323232"
- frame_current="#4291dc"
- time_keyframe="#00ff00"
- time_grease_pencil="#00e695">
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#e4e4e4"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#b8b8b8"
- button="#727272ff"
- button_title="#b4b4b4"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#333333"
- tab_back="#333333ff"
- tab_outline="#333333">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#444444ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#e5d010"
- gp_vertex_size="3"
- node_selected="#00bdff"
- node_active="#00ff90"
- wire="#000000"
- wire_inner="#808080"
- wire_select="#00bdff"
- selected_text="#909090"
- node_backdrop="#5d5d5dff"
- converter_node="#292929"
- color_node="#292929"
- group_node="#363636"
- group_socket_node="#1f00c7"
- frame_node="#5d5d5dff"
- matte_node="#0076b6"
- distor_node="#292929"
- noodle_curving="3"
- input_node="#009e9e"
- output_node="#1f00c7"
- filter_node="#0076b6"
- vector_node="#292929"
- texture_node="#009e9e"
- shader_node="#0076b6"
- script_node="#0076b6"
- pattern_node="#008db6"
- layout_node="#50b1b6">
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#ffffff"
- text="#ffffff"
- text_hi="#ffffff"
- header="#202020"
- header_text="#cdcdcd"
- header_text_hi="#b7b7b7"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#ffffff"
- text="#c1c1c1"
- text_hi="#ffffff"
- header="#202020"
- header_text="#ffffff"
- header_text_hi="#b7b7b7"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#727272"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#202020"
- tab_back="#202020ff"
- tab_outline="#202020">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#607f9e">
- <space>
- <ThemeSpaceGeneric back="#1a1a1a"
- title="#e4e4e4"
- text="#cacaca"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272f2"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#e4e4e4"
- tab_active="#727272"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#607f9e"
- info_selected_text="#ffffff"
- info_error="#3b3b3b"
- info_error_text="#ff0000"
- info_warning="#3b3b3b"
- info_warning_text="#ffe100"
- info_info="#3b3b3b"
- info_info_text="#25ff00"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#101010"
- title="#e4e4e4"
- text="#868686"
- text_hi="#ffffff"
- header="#202020"
- header_text="#ffffff"
- header_text_hi="#000000"
- button="#3b3b3bff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#000000"
- tab_active="#727272"
- tab_inactive="#222222"
- tab_back="#222222ff"
- tab_outline="#222222">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#444444ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#262626"
- title="#e4e4e4"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#aeaeff"
- line_input="#ffffff"
- line_info="#607f9e"
- line_error="#ff0019"
- cursor="#49ff78"
- select="#48488f80">
- <space>
- <ThemeSpaceGeneric back="#1a1a1a"
- title="#e4e4e4"
- text="#ffffff"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#262626ff"
- button_title="#c7c7c7"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#4a4a4a"
- tab_back="#414141ff"
- tab_outline="#2d2d2d">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#1a1a1a"
- title="#ffffff"
- text="#8b8b8b"
- text_hi="#ffffff"
- header="#202020"
- header_text="#000000"
- header_text_hi="#b8b8b8"
- button="#262626f2"
- button_title="#c7c7c7"
- button_text="#b4b4b4"
- button_text_hi="#ffffff"
- tab_active="#262626"
- tab_inactive="#1a1a1a"
- tab_back="#1a1a1aff"
- tab_outline="#1a1a1a">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#202020ff"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1a1a1a"
- list_title="#000000"
- list_text="#aaaaaa"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="13"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="13"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0"
- shadow_value="0">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/north.xml b/release/scripts/presets/interface_theme/north.xml
deleted file mode 100644
index 8ab51261994..00000000000
--- a/release/scripts/presets/interface_theme/north.xml
+++ /dev/null
@@ -1,1177 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#e64545"
- axis_y="#96d941"
- axis_z="#4c84d9">
- <wcol_regular>
- <ThemeWidgetColors outline="#000000"
- inner="#474a4fff"
- inner_sel="#617da8ff"
- item="#292b2eff"
- text="#cfd8e6"
- text_sel="#e3e9f2"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#000000"
- inner="#292b2eff"
- inner_sel="#617da8ff"
- item="#acb4bfff"
- text="#cfd8e6"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#000000"
- inner="#292b2eff"
- inner_sel="#617da8ff"
- item="#acb4bfff"
- text="#cfd8e6"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#000000"
- inner="#7e848cff"
- inner_sel="#959ca6ff"
- item="#617da8ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="25">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#000000"
- inner="#393c40bf"
- inner_sel="#617da8ff"
- item="#000000ff"
- text="#b8c0cc"
- text_sel="#cfd8e6"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#000000"
- inner="#474a4fff"
- inner_sel="#617da8ff"
- item="#292b2eff"
- text="#cfd8e6"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#000000"
- inner="#7e848cff"
- inner_sel="#959ca6ff"
- item="#525a66ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#000000"
- inner="#7e848cff"
- inner_sel="#959ca6ff"
- item="#525a66ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#000000"
- inner="#474a4fff"
- inner_sel="#617da8ff"
- item="#acb4bfff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#000000"
- inner="#292b2eff"
- inner_sel="#17181aff"
- item="#acb4bfff"
- text="#cfd8e6"
- text_sel="#737880"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#292b2eff"
- inner_sel="#222326ff"
- item="#acb4bfff"
- text="#cfd8e6"
- text_sel="#b8c0cc"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#323438f7"
- inner_sel="#212326f7"
- item="#617da8ff"
- text="#cfd8e6"
- text_sel="#e6efff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#000000"
- inner="#292b2eff"
- inner_sel="#617da8ff"
- item="#617da8ff"
- text="#b8c0cc"
- text_sel="#cfd8e6"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#17181af2"
- inner_sel="#17181af2"
- item="#acb4bfff"
- text="#cfd8e6"
- text_sel="#e6f0ff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#617da8ff"
- item="#9ca3ad80"
- text="#cfd8e6"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="38"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#000000"
- inner="#393c40bf"
- inner_sel="#505459bf"
- item="#676c73ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#8a9099ff"
- inner_sel="#7e848cff"
- item="#617da8ff"
- text="#cfd8e6"
- text_sel="#0c0c0c"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#393c40ff"
- item="#000000ff"
- text="#c3ccd9"
- text_sel="#dae4f2"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#81b359"
- inner_anim_sel="#72cc5c"
- inner_key="#e6c573"
- inner_key_sel="#f2ab61"
- inner_driven="#836cd9"
- inner_driven_sel="#9e73e6"
- blend="1">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#55595e"
- clipping_border_3d="#313131ff"
- wire="#000000"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#f2aa3d"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#617da8"
- object_active="#f2af61"
- object_grouped="#172621"
- object_grouped_active="#9ebf7c"
- text_keyframe="#ddd700"
- camera="#000000"
- empty="#000000"
- light="#00000028"
- speaker="#000000"
- vertex="#000000"
- vertex_select="#f2b252"
- vertex_size="3"
- vertex_bevel="#00a5ff"
- vertex_unreferenced="#000000"
- edge_select="#d29247"
- edge_seam="#e63f2e"
- edge_sharp="#49f2f2"
- edge_crease="#d962a9"
- edge_bevel="#00a5ff"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000011"
- face_select="#80512b40"
- face_dot="#f2b252"
- facedot_size="2"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#ebff00"
- nurb_sel_vline="#f090a0"
- act_spline="#d94536"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#202000"
- extra_face_angle="#23238c"
- extra_face_area="#082008"
- editmesh_active="#ffffff80"
- normal="#4ddddd"
- vertex_normal="#2361dd"
- split_normal="#dd63dd"
- bone_pose="#5cace6"
- bone_pose_active="#61f2e1"
- bone_solid="#adbfcc"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#b44d4d"
- view_overlay="#000000"
- transform="#adbacc"
- frame_current="#6282b3"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="1">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#cfd8e6"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#cfd8e6"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#cfd8e6"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#313338"
- high_gradient="#474b52">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#323538"
- frame_current="#6282b3"
- window_sliders="#8f9296"
- channels_region="#707070"
- dopesheet_channel="#52616e"
- dopesheet_subchannel="#606975"
- channel_group="#364d46"
- active_channels_group="#364d38"
- vertex="#000000"
- vertex_select="#f2b76d"
- vertex_size="4"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#bf3962"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f05454"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#f2af61"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#505459"
- title="#000000"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#393c40"
- list_title="#cfd8e6"
- list_text="#cfd8e6"
- list_text_hi="#e6a75c">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#617da8">
- <space>
- <ThemeSpaceGeneric back="#3e4145"
- title="#dbe4f2"
- text="#dbe4f2"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#dbe4f2"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#dbe4f2"
- button_text="#dbe4f2"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#323538"
- view_sliders="#8f9296"
- active_action="#617da866"
- active_action_unset="#5673734d"
- strips="#0c0a0a"
- strips_selected="#617da8"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#59e62e"
- tweak_duplicate="#d92b2b"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#6282b3">
- <space>
- <ThemeSpaceGeneric back="#505459"
- title="#000000"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#393c40"
- list_title="#000000"
- list_text="#cfd8e6"
- list_text_hi="#e6a75c">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#2e3033"
- frame_current="#6282b3"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52616e"
- dopesheet_subchannel="#606975"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#364d46"
- active_channels_group="#364d38"
- long_key="#0c0a0a"
- long_key_selected="#f29f3d"
- keyframe="#e8e8e8"
- keyframe_selected="#f2b76d"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- keyframe_scale_factor="1"
- summary="#5379a680">
- <space>
- <ThemeSpaceGeneric back="#505459"
- title="#000000"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#393c40"
- list_title="#cfd8e6"
- list_text="#cfd8e6"
- list_text_hi="#e6a75c">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#f2aa3d"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#f2b252"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- face="#e6f0ff0d"
- face_select="#80512b40"
- face_dot="#f2b252"
- facedot_size="2"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#e6f0ff80"
- wire_edit="#acb4bf"
- edge_select="#d29247"
- scope_back="#727272ff"
- preview_stitch_face="#7f7f0033"
- preview_stitch_edge="#ff26ff33"
- preview_stitch_vert="#2626ff33"
- preview_stitch_stitchable="#26ff26ff"
- preview_stitch_unstitchable="#ff2626ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#6282b3"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#3e4147"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#f2aa3d"
- gp_vertex_size="3"
- grid="#222426"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#6282b3"
- keyframe="#f2b76d"
- draw_action="#4cd9f2"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#5c6066"
- title="#000000"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#393c40"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40cc"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#242526"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#1b1c1f"
- selected_text="#3f444d"
- cursor="#f2b76d"
- syntax_builtin="#8abeb7"
- syntax_symbols="#d0d0d0"
- syntax_special="#8db6d9"
- syntax_preprocessor="#e6945c"
- syntax_reserved="#b294bb"
- syntax_comment="#707880"
- syntax_string="#b5bd68"
- syntax_numbers="#d95757">
- <space>
- <ThemeSpaceGeneric back="#282a2e"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#222426"
- frame_current="#6282b3"
- time_keyframe="#f2b76d"
- time_grease_pencil="#acd94c">
- <space>
- <ThemeSpaceGeneric back="#505459"
- title="#000000"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#f2aa3d"
- gp_vertex_size="3"
- node_selected="#617da8"
- node_active="#f2b76d"
- wire="#000000"
- wire_inner="#737373"
- wire_select="#617da8"
- selected_text="#7f7070"
- node_backdrop="#8f969fbf"
- converter_node="#74afb3"
- color_node="#e6c573"
- group_node="#5c686c"
- group_socket_node="#d9ca41"
- frame_node="#797c8073"
- matte_node="#bb7070"
- distor_node="#86bf9d"
- noodle_curving="5"
- input_node="#8d97a6"
- output_node="#8592a6"
- filter_node="#cc9f70"
- vector_node="#898bcc"
- texture_node="#82a5d9"
- shader_node="#94bf69"
- script_node="#686a75"
- pattern_node="#686a75"
- layout_node="#575b61">
- <space>
- <ThemeSpaceGeneric back="#393c40"
- title="#cfd8e6"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#959ca6"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#e6f0ff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#3e4145"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2d3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#62738c"
- selected_highlight="#3e4145">
- <space>
- <ThemeSpaceGeneric back="#3e4145"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6a75c"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#e6f0ff"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#282a2e"
- info_selected_text="#8aaee6"
- info_error="#282a2e"
- info_error_text="#d95757"
- info_warning="#282a2e"
- info_warning_text="#de935f"
- info_info="#282a2e"
- info_info_text="#acbf60"
- info_debug="#282a2e"
- info_debug_text="#b294bb">
- <space>
- <ThemeSpaceGeneric back="#282a2e"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#000000"
- button_text="#8aaee6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#45484d"
- title="#cfd8e6"
- text="#cfd8e6"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#e6f0ff"
- button_text="#000000"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#82a4d9"
- line_input="#cfd8e6"
- line_info="#acbf60"
- line_error="#d95757"
- cursor="#82a4d9"
- select="#7391bf33">
- <space>
- <ThemeSpaceGeneric back="#181a1c"
- title="#080809"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#e6f0ff"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#e6f0ff"
- button_text="#e6f0ff"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#f2aa3d"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f20"
- active_marker="#ffffff"
- selected_marker="#ffff40"
- disabled_marker="#7f1313"
- locked_marker="#7f7f7f"
- path_before="#f23030"
- path_after="#365ad9"
- frame_current="#6282b3"
- strips="#0c0a0a"
- strips_selected="#95b5e6"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff40"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#3e4147"
- title="#000000"
- text="#000000"
- text_hi="#e6f0ff"
- header="#393c40"
- header_text="#cfd8e6"
- header_text_hi="#e6f0ff"
- button="#393c40d9"
- button_title="#cfd8e6"
- button_text="#cfd8e6"
- button_text_hi="#e6f0ff"
- tab_active="#393c40"
- tab_inactive="#222426"
- tab_back="#2e3033d9"
- tab_outline="#2e3033">
- <panelcolors>
- <ThemePanelColors header="#222426ff"
- back="#393c40ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#393c40"
- list_title="#cfd8e6"
- list_text="#cfd8e6"
- list_text_hi="#f2b76d">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="1"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="0.1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="1"
- shadow_offset_y="-1"
- shadow_alpha="0"
- shadow_value="0">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/rtheme.xml b/release/scripts/presets/interface_theme/rtheme.xml
deleted file mode 100644
index 34d4f6bd0db..00000000000
--- a/release/scripts/presets/interface_theme/rtheme.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc403e"
- axis_y="#68dc50"
- axis_z="#4040dc">
- <wcol_regular>
- <ThemeWidgetColors outline="#222222"
- inner="#3f3f3fff"
- inner_sel="#222222ff"
- item="#000000ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#222222"
- inner="#666666ff"
- inner_sel="#08c1ffff"
- item="#000000ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#222222"
- inner="#464646ff"
- inner_sel="#05c4ffff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#3d3d3b"
- inner="#666666ff"
- inner_sel="#999999ff"
- item="#5a5a5aff"
- text="#fdfdfd"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="25">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#222222"
- inner="#686868ff"
- inner_sel="#05c4ffff"
- item="#000000ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#302e2e"
- inner="#999999ff"
- inner_sel="#05c4ffff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#222222"
- inner="#666666ff"
- inner_sel="#05c4ffff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-10"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#222222"
- inner="#606060ff"
- inner_sel="#999999ff"
- item="#3a3a3aff"
- text="#e6e6e6"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-10"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#222222"
- inner="#464646ff"
- inner_sel="#646464ff"
- item="#000000ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#222222"
- inner="#606060ff"
- inner_sel="#08bfffff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#222222"
- inner="#606060ff"
- inner_sel="#0bc6ffff"
- item="#ffffffff"
- text="#888888"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#3d3d3d"
- inner="#3d3d3de6"
- inner_sel="#2d2d2de6"
- item="#5f5f5fff"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#aaaaaae6"
- inner_sel="#8c8c8cff"
- item="#a2a2a2e6"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#222222"
- inner="#00000000"
- inner_sel="#0bc3ffff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="38"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#323232"
- inner="#505050b4"
- inner_sel="#646464b4"
- item="#606060ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#222222"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="5"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#222222"
- inner="#00000000"
- inner_sel="#0abeffff"
- item="#5a5a5aff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#c9ce20"
- inner_key_sel="#d7d34b"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#4c4c4c"
- wire="#7e7e7e"
- wire_edit="#1d1d1d"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#00000028"
- speaker="#000000"
- camera="#000000"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#69adc2"
- object_active="#08c1ff"
- object_grouped="#08583d"
- object_grouped_active="#19ffce"
- transform="#ffffff"
- vertex="#000000"
- vertex_select="#f0f8ff"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#08c1ff"
- edge_seam="#ff5b00"
- edge_sharp="#ff1600"
- edge_crease="#52514d"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#00000012"
- face_select="#08c1ff66"
- face_dot="#49caff"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#000000"
- extra_face_angle="#002000"
- extra_face_area="#000080"
- editmesh_active="#08c1ffff"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#60c040"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#b44d4d"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#0e0e0e"
- text_hi="#dddddd"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#c2c2c2"
- button_text_hi="#ffffff"
- tab_active="#474747"
- tab_inactive="#333333"
- tab_back="#31313100"
- tab_outline="#000000">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#000000"
- high_gradient="#36383a">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#5b6672"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#707070"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="3">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#484848"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#ff8c19">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#fafafa"
- text_hi="#0f0f0f"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#726f6dff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5b6672"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#00000000"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#000000"
- transition_strips_selected="#000000"
- meta_strips="#000000"
- meta_strips_selected="#000000"
- sound_strips="#000000"
- sound_strips_selected="#000000"
- tweak="#000000"
- tweak_duplicate="#000000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#484848"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#5b6672"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#f1f9ff"
- keyframe_selected="#00dfff"
- keyframe_extreme="#e5e2e8"
- keyframe_extreme_selected="#f2efef"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#e5e2e2"
- keyframe_jitter_selected="#beb8c0"
- keyframe_border="#f1f9ffff"
- keyframe_border_selected="#00dfffff"
- summary="#cc701a66">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#484848"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#08c1ff"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#08c1ff40"
- face_dot="#08c1ff"
- facedot_size="3"
- freestyle_face_mark="#00000000"
- editmesh_active="#08c1ffff"
- wire_edit="#5c5c5c"
- edge_select="#0067cb"
- scope_back="#727272ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#08c1ff97"
- preview_stitch_vert="#08c1ff91"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#1d1d1d"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#9098a0"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#484848"
- title="#000000"
- text="#000000"
- text_hi="#000000"
- header="#484848"
- header_text="#000000"
- header_text_hi="#dff5ff"
- button="#484848a7"
- button_title="#3f3a2f"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#404040"
- selected_text="#c67777"
- cursor="#ff0000"
- syntax_builtin="#800050"
- syntax_symbols="#4c4c4c"
- syntax_special="#5f5f00"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#006432"
- syntax_string="#640000"
- syntax_numbers="#0000c8">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b6672"
- frame_current="#60c040"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#69adc2"
- node_active="#08c1ff"
- wire="#7c7c7c"
- wire_inner="#737373"
- wire_select="#08c1ff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9ba0"
- converter_node="#575757"
- color_node="#575757"
- group_node="#729c91"
- group_socket_node="#19ffce"
- frame_node="#96969600"
- matte_node="#977474"
- distor_node="#749797"
- noodle_curving="5"
- input_node="#575757"
- output_node="#ffce18"
- filter_node="#575757"
- vector_node="#575757"
- texture_node="#00c6ff"
- shader_node="#356cff"
- script_node="#575757"
- pattern_node="#575757"
- layout_node="#727272">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#484848"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#9098a0">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#0e0e0e"
- text="#000000"
- text_hi="#69deff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#484848a7"
- button_title="#070707"
- button_text="#000000"
- button_text_hi="#fdfcff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#08c1ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#9098a0"
- title="#c8c6c9"
- text="#333333"
- text_hi="#ffffff"
- header="#484848"
- header_text="#888888"
- header_text_hi="#ffffff"
- button="#725864ff"
- button_title="#f1c2d8"
- button_text="#f0f0f0"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#484848"
- title="#000000"
- text="#ffffff"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#fdffff"
- button="#484848a7"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#40464e"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#484848"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#48484880"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#ffffff79"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/sandyslate.xml b/release/scripts/presets/interface_theme/sandyslate.xml
deleted file mode 100644
index 0b4756a40e8..00000000000
--- a/release/scripts/presets/interface_theme/sandyslate.xml
+++ /dev/null
@@ -1,1179 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.01"
- menu_shadow_width="2"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#ff350e"
- axis_y="#94ff5d"
- axis_z="#3275ff">
- <wcol_regular>
- <ThemeWidgetColors outline="#000000"
- inner="#676c75ff"
- inner_sel="#fff0cfff"
- item="#1b1f28ff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-100"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#000000"
- inner="#696e77ff"
- inner_sel="#fff0cfff"
- item="#fff0cfff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#000000"
- inner="#696e77ff"
- inner_sel="#fff0cfff"
- item="#1b1f28ff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#151515"
- inner="#696e77ff"
- inner_sel="#fff0cfff"
- item="#676c75ff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-30"
- shadedown="20">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#151515"
- inner="#696e77ff"
- inner_sel="#fff0cfff"
- item="#000000ff"
- text="#fff0cf"
- text_sel="#fff0cf"
- show_shaded="FALSE"
- shadetop="-40"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#151515"
- inner="#676c75ff"
- inner_sel="#fff0cfff"
- item="#191d26ff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#151515"
- inner="#696e77ff"
- inner_sel="#fff0cfff"
- item="#fff0cfff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#131313"
- inner="#fdeecdff"
- inner_sel="#f9eac9ff"
- item="#656a73ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#0f0f0f"
- inner="#83817bff"
- inner_sel="#fff0cfff"
- item="#191d26ff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="30"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#111111"
- inner="#656a73ff"
- inner_sel="#fff0cfff"
- item="#fff0ffff"
- text="#fff0cd"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#151922"
- inner="#656a73ff"
- inner_sel="#676c75ff"
- item="#171b24ff"
- text="#fff0cf"
- text_sel="#fdeecd"
- show_shaded="TRUE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#636871ff"
- inner_sel="#656a73ff"
- item="#000000ff"
- text="#ffedc5"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-100"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#aaaaaae6"
- inner_sel="#8c8c8cff"
- item="#a2a2a2e6"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#111111"
- inner="#676c75ff"
- inner_sel="#2d2d2de6"
- item="#656a73ff"
- text="#fff0cf"
- text_sel="#fdeecd"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#676c75ff"
- inner_sel="#fbeccbff"
- item="#656a73ff"
- text="#fdeecd"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="20"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#0d0d0d"
- inner="#fff0cfff"
- inner_sel="#83817bff"
- item="#696e77ff"
- text="#fdfdfd"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="35"
- shadedown="-34">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#0b0b0b"
- inner="#1b1f28ff"
- inner_sel="#ff0000ff"
- item="#fd0000ff"
- text="#fdfdfd"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-100"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#171b24"
- inner="#676c75ff"
- inner_sel="#fdeecdff"
- item="#676c75ff"
- text="#fff0cf"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-100"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#56ff00"
- inner_anim_sel="#56ff00"
- inner_key="#fff400"
- inner_key_sel="#fff400"
- inner_driven="#629400"
- inner_driven_sel="#609200"
- blend="0.1">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#444444"
- wire="#9eb6cd"
- wire_edit="#22272d"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#ff000080"
- speaker="#979797"
- camera="#ff0000"
- view_overlay="#000000"
- empty="#fd0000"
- object_selected="#dfc7a1"
- object_active="#f6e4ba"
- object_grouped="#1cae1c"
- object_grouped_active="#55bb55"
- transform="#ffffff"
- vertex="#9cb4cb"
- vertex_select="#f4e2b8"
- vertex_size="3"
- vertex_unreferenced="#000000"
- edge_select="#f4e2b8"
- edge_seam="#5300db"
- edge_sharp="#fb0000"
- edge_crease="#24a1ff"
- edge_facesel="#797979"
- freestyle_edge_mark="#7fff7f"
- face="#9eb6cd33"
- face_select="#bcb28c33"
- face_dot="#f4e2b8"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#fb0000"
- handle_free="#7f7f7f"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#804061"
- handle_sel_free="#3b3b3b"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f07fae"
- lastsel_point="#ffffff"
- extra_edge_len="#ffedf8"
- extra_edge_angle="#fd9700"
- extra_face_angle="#d60000"
- extra_face_area="#91a7c2"
- editmesh_active="#ffffffff"
- normal="#5ba4ed"
- vertex_normal="#d60000"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#f6e824"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#5a5a5a"
- skin_root="#b44d4d"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#ffffff"
- text="#fff0cf"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#fdfdfd"
- header_text_hi="#ffffff"
- button="#83817bff"
- button_title="#fff0cf"
- button_text="#fff0cf"
- button_text_hi="#ffffff"
- tab_active="#656a73"
- tab_inactive="#7f7d77"
- tab_back="#83817bff"
- tab_outline="#000000">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#191d26"
- high_gradient="#636871">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#000000ff"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#262626"
- frame_current="#336622"
- window_sliders="#969696"
- channels_region="#6d6d6d"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#ffffff"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_unreferenced="#000000"
- handle_free="#808080"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#808080"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#808080"
- handle_vertex="#808080"
- handle_vertex_select="#ff8500"
- handle_vertex_size="3">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#fff0cf"
- text="#fff0cf"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#fff0cf"
- button="#83817b7f"
- button_title="#fff0cf"
- button_text="#fff0cf"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#83817b"
- list_title="#000000"
- list_text="#bbbbbb"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#c7d3e4">
- <space>
- <ThemeSpaceGeneric back="#5f646d"
- title="#5d5d5d"
- text="#ffe8d1"
- text_hi="#ffffff"
- header="#636871"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#636871ff"
- button_title="#ffffff"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#61666f"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#83817b"
- list_title="#fdeecd"
- list_text="#5d5d5d"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#aa8d8d"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#2f6421">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#585858"
- text="#fff0cf"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#83817b7f"
- button_title="#f1f1f1"
- button_text="#fff0cf"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#83817b"
- list_title="#383838"
- list_text="#d8d8d8"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#212121"
- frame_current="#2a5c1c"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#4798ff"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- summary="#767b83cc">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#fbeccb"
- text="#fff0cf"
- text_hi="#fdeecd"
- header="#83817b"
- header_text="#5b5b5b"
- header_text_hi="#fbeccb"
- button="#83817b7f"
- button_title="#fbeccb"
- button_text="#fdeecd"
- button_text_hi="#fbeccb"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#83817b"
- list_title="#9c9c9c"
- list_text="#fbeccb"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#fffcfc"
- vertex_select="#fb8d4a"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#ffffff0a"
- face_select="#f98b483c"
- face_dot="#fb8d4a"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#fb8d4a"
- scope_back="#050505ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#5d5d5d"
- text="#fff0cf"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#fdfdfd"
- header_text_hi="#ffffff"
- button="#83817b7f"
- button_title="#c5c5c5"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#817f79"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#282828"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#2f5f23"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#abaaa6"
- title="#5d5d5d"
- text="#f3f3f3"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#f3f3f3"
- header_text_hi="#ffffff"
- button="#1b1f287f"
- button_title="#fdfdfd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#eedab0"
- text="#f0dcb2"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#83817bff"
- button_title="#ffffff"
- button_text="#ecd8ae"
- button_text_hi="#ffffff"
- tab_active="#83817b"
- tab_inactive="#6a6f77"
- tab_back="#83817bff"
- tab_outline="#191d26">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#191919"
- selected_text="#faf4ff"
- cursor="#83817b"
- syntax_builtin="#cf3d99"
- syntax_symbols="#4c4c4c"
- syntax_special="#969629"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#249d60"
- syntax_string="#cc3535"
- syntax_numbers="#3c68ff">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#9e9e9e"
- text="#fff0cf"
- text_hi="#fff0cf"
- header="#83817b"
- header_text="#fff0cf"
- header_text_hi="#fff0cf"
- button="#1b1f287f"
- button_title="#fff0cf"
- button_text="#fff0cf"
- button_text_hi="#fff0cf"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#191d26">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#2e2f34"
- frame_current="#be0000"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#696e76"
- title="#ffffff"
- text="#fff0cf"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#4444447f"
- button_title="#ffffff"
- button_text="#dbd8d8"
- button_text_hi="#fafafa"
- tab_active="#6b7078"
- tab_inactive="#6d727a"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#bebebe"
- node_active="#ffffff"
- wire="#fff0cf"
- wire_inner="#737373"
- wire_select="#fff0cf"
- selected_text="#7f7070"
- node_backdrop="#4a4b5aff"
- converter_node="#005fa5"
- color_node="#ac0900"
- group_node="#253b5c"
- group_socket_node="#dfbb2e"
- frame_node="#9b9b9ba0"
- matte_node="#7200b7"
- distor_node="#6eadb7"
- noodle_curving="10"
- input_node="#ff5b00"
- output_node="#191d26"
- filter_node="#cf0097"
- vector_node="#1edd00"
- texture_node="#002cd7"
- shader_node="#ff0000"
- script_node="#562619"
- pattern_node="#6ab5e4"
- layout_node="#cb7c00">
- <space>
- <ThemeSpaceGeneric back="#656a73"
- title="#ffffff"
- text="#ffffff"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#fdfdfd"
- header_text_hi="#ffffff"
- button="#83817b7f"
- button_title="#ffffff"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#ffffff"
- list_text="#ffffff"
- list_text_hi="#b8ffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#aaa9a5"
- title="#5d5d5d"
- text="#fafafa"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#fdfdfd"
- header_text_hi="#ffffff"
- button="#83817b7f"
- button_title="#fdfdfd"
- button_text="#c3c3c3"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#191d26">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#30b5e9"
- selected_highlight="#696e77">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#9b9b9b"
- text="#000000"
- text_hi="#fff0cf"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#999999ff"
- button_title="#000000"
- button_text="#fdfdfd"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#ffffff"
- text="#fff0cf"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#83817bff"
- button_title="#ffffff"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#21252c02"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#5d5d5d"
- text="#fff0cf"
- text_hi="#5d5d5d"
- header="#83817b"
- header_text="#fbeccb"
- header_text_hi="#f9eac9"
- button="#0000007f"
- button_title="#fff0cf"
- button_text="#fbeccb"
- button_text_hi="#fdeecd"
- tab_active="#656a73"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#212226"
- line_input="#ffffff"
- line_info="#608cd6"
- line_error="#dc221c"
- cursor="#f2eee3"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#83817b"
- title="#5d5d5d"
- text="#ffffff"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#83817b7f"
- button_title="#ffffff"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#0094af"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#1b501b"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#e2e2e2"
- handle_vertex_select="#ffff00"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#1b1f28"
- title="#5d5d5d"
- text="#ffffff"
- text_hi="#ffffff"
- header="#83817b"
- header_text="#ffffff"
- header_text_hi="#ffffff"
- button="#1b1f287f"
- button_title="#ffffff"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#676c75"
- tab_inactive="#83817b"
- tab_back="#83817bff"
- tab_outline="#000000">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/science_lab.xml b/release/scripts/presets/interface_theme/science_lab.xml
deleted file mode 100644
index e8a32f6ac29..00000000000
--- a/release/scripts/presets/interface_theme/science_lab.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#dc4800"
- axis_y="#73dc00"
- axis_z="#00c2ff">
- <wcol_regular>
- <ThemeWidgetColors outline="#191919"
- inner="#6c6c6cff"
- inner_sel="#678db2ff"
- item="#191919ff"
- text="#e6f1ff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#000000"
- inner="#2b3944ff"
- inner_sel="#678db2ff"
- item="#1f313eff"
- text="#e4e4e4"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#000000"
- inner="#2b3944ff"
- inner_sel="#5484afff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-5"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#191919"
- inner="#526d80ff"
- inner_sel="#1b1b1bff"
- item="#597384ff"
- text="#d6ebff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-24"
- shadedown="9">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#678db2"
- inner="#171616ff"
- inner_sel="#678db2ff"
- item="#ffffffff"
- text="#dcdcdc"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="15"
- shadedown="-15">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#555555"
- inner="#2e2c2bff"
- inner_sel="#678db2ff"
- item="#191919ff"
- text="#a4a4a4"
- text_sel="#cbdaff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#000000"
- inner="#2b3944ff"
- inner_sel="#1b1b1bff"
- item="#597384ff"
- text="#99d3ff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#292929"
- inner="#333333ff"
- inner_sel="#717171ff"
- item="#678db2ff"
- text="#dddddd"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-20"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#090909"
- inner="#303030ff"
- inner_sel="#678db2ff"
- item="#191919ff"
- text="#e6f1ff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#292929"
- inner="#38516aff"
- inner_sel="#678db2ff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#cccccc"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#000000"
- inner="#3f3f3fff"
- inner_sel="#678db2ff"
- item="#ffffffff"
- text="#dddddd"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#000000"
- inner="#2f3a46e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#a0a0a0"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#59a3ff"
- inner="#222222e6"
- inner_sel="#8cc0f3ff"
- item="#2c5e82ff"
- text="#93c9ff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-20"
- shadedown="17">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#2a2a2ae6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#000000"
- inner="#00000000"
- inner_sel="#678db2ff"
- item="#ffffffff"
- text="#ffffff"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="38"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#000000"
- inner="#12192250"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#e5e5e5"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="5"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#8abe00ff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#bbbbbb"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#485c6f"
- inner="#00000000"
- inner_sel="#678db2ff"
- item="#597384ff"
- text="#e5e5e5"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#73be4c"
- inner_anim_sel="#5aa633"
- inner_key="#f07e33"
- inner_key_sel="#d7b600"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#416064"
- wire="#439ad2"
- wire_edit="#7f7f7f"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#dbac00b9"
- speaker="#229cd8"
- camera="#e28400"
- view_overlay="#666666"
- empty="#87a6cd"
- object_selected="#409aff"
- object_active="#c0fffe"
- object_grouped="#339443"
- object_grouped_active="#84ff00"
- transform="#ffffff"
- vertex="#718485"
- vertex_select="#e2b100"
- vertex_size="6"
- vertex_unreferenced="#464646"
- edge_select="#8cd846"
- edge_seam="#f65d00"
- edge_sharp="#56fff8"
- edge_crease="#6379d8"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#ffc747"
- face="#0c172761"
- face_select="#4e7e9796"
- face_dot="#fffbc1"
- facedot_size="4"
- freestyle_face_mark="#d9ff6e33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#c4c4c2"
- handle_free="#808080"
- handle_auto="#09a800"
- handle_vect="#8934d1"
- handle_sel_vect="#e85bff"
- handle_align="#d15f16"
- handle_sel_free="#ffffff"
- handle_sel_auto="#10f000"
- handle_sel_align="#ffa947"
- lastsel_point="#ffffff"
- extra_edge_len="#adff0c"
- extra_edge_angle="#84ebbf"
- extra_face_angle="#ffe133"
- extra_face_area="#fcff07"
- editmesh_active="#e4ffebab"
- normal="#22dddd"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_solid="#2890e8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#d0ddc4"
- outline_width="2"
- bundle_solid="#6e6e6e"
- camera_path="#9f5500"
- skin_root="#f1b66e"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#444444"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#2d2d2d99"
- button_title="#eff6ff"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#516882"
- tab_inactive="#2d2d2d"
- tab_back="#000000ff"
- tab_outline="#3c3c3c">
- <gradients>
- <ThemeGradientColors show_grad="TRUE"
- gradient="#3d4c5a"
- high_gradient="#000000">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#0000008e"
- back="#44444480"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#000000"
- frame_current="#8b9483"
- window_sliders="#adadad"
- channels_region="#727272"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channel_group="#395a86"
- active_channels_group="#5193b1"
- vertex="#94ca4c"
- vertex_select="#ffffef"
- vertex_size="6"
- vertex_unreferenced="#000000"
- handle_free="#808080"
- handle_auto="#963417"
- handle_vect="#8549b8"
- handle_sel_vect="#c55eff"
- handle_align="#b25014"
- handle_sel_free="#ffffff"
- handle_sel_auto="#ff6041"
- handle_sel_align="#ffc094"
- handle_auto_clamped="#09a800"
- handle_sel_auto_clamped="#10f000"
- lastsel_point="#ffffff"
- handle_vertex="#84b836"
- handle_vertex_select="#c4e8ff"
- handle_vertex_size="10">
- <space>
- <ThemeSpaceGeneric back="#36434f"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#2f2f2f"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#2d2d2dff"
- button_title="#dddddd"
- button_text="#ffffff"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000062"
- back="#44444480"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#444444"
- list_title="#000000"
- list_text="#c6dbe9"
- list_text_hi="#c6f4ed">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#517da1">
- <space>
- <ThemeSpaceGeneric back="#363636"
- title="#646464"
- text="#beddff"
- text_hi="#bdbdbd"
- header="#4b4b4b"
- header_text="#1d1d1d"
- header_text_hi="#ffffff"
- button="#313131ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9373574d"
- strips="#0c0a0a"
- strips_selected="#af7200"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#5d9030"
- tweak_duplicate="#d90000"
- keyframe_border="#f8ffe7ff"
- keyframe_border_selected="#000000ff"
- frame_current="#8b9483">
- <space>
- <ThemeSpaceGeneric back="#36434f"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#2f2f2f"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#2d2d2dff"
- button_title="#fcfcfc"
- button_text="#dadada"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#444444"
- list_title="#000000"
- list_text="#c6dbe9"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#5e5e5e"
- frame_current="#8b9483"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#6d9648"
- dopesheet_subchannel="#264972"
- channels="#727272"
- channels_selected="#e8f668"
- channel_group="#395a86"
- active_channels_group="#5193b1"
- long_key="#99af48"
- long_key_selected="#e2b100"
- keyframe="#e8e8e8"
- keyframe_selected="#8cd846"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f23e0f"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#2db653ff"
- keyframe_border_selected="#000000ff"
- summary="#7a663d66">
- <space>
- <ThemeSpaceGeneric back="#36434f"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#2f2f2f"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#2d2d2dff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#444444"
- list_title="#000000"
- list_text="#c6dbe9"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#bcf7fa"
- vertex_select="#ffc700"
- vertex_size="5"
- vertex_unreferenced="#000000"
- face="#0c172761"
- face_select="#63a0c1ba"
- face_dot="#fffbc1"
- facedot_size="5"
- freestyle_face_mark="#00000000"
- editmesh_active="#ffffff80"
- wire_edit="#35effa"
- edge_select="#8cd846"
- scope_back="#666666ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#10f000"
- handle_sel_auto_clamped="#09a800"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#353535"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#44444480"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#404040"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#666666"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#44444480"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#444444"
- title="#dddddd"
- text="#cecece"
- text_hi="#ffffff"
- header="#383838"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#444444ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#383838ff"
- tab_outline="#949494">
- <panelcolors>
- <ThemePanelColors header="#0000008e"
- back="#0c1d3180"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#36434f"
- selected_text="#73b4e9"
- cursor="#74a8ff"
- syntax_builtin="#e850a8"
- syntax_symbols="#d7d7d7"
- syntax_special="#5ed5f3"
- syntax_preprocessor="#d50087"
- syntax_reserved="#a74600"
- syntax_comment="#567160"
- syntax_string="#ceaf49"
- syntax_numbers="#c661ff">
- <space>
- <ThemeSpaceGeneric back="#1c1c1c"
- title="#000000"
- text="#b3b3b3"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#444444ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5b5b5b"
- frame_current="#bac6af"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#333333"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#222222ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#6ebdff"
- node_active="#fefff3"
- wire="#9effc5"
- wire_inner="#737373"
- wire_select="#99d9ff"
- selected_text="#7f7070"
- node_backdrop="#9b9b9bb9"
- converter_node="#413172"
- color_node="#882a5b"
- group_node="#1d4e55"
- group_socket_node="#006299"
- frame_node="#9b9b9bb9"
- matte_node="#b25750"
- distor_node="#62afac"
- noodle_curving="5"
- input_node="#272727"
- output_node="#5c9e54"
- filter_node="#6c696f"
- vector_node="#3250bd"
- texture_node="#c77e08"
- shader_node="#548ec0"
- script_node="#3d2e97"
- pattern_node="#6c696f"
- layout_node="#6d92b3">
- <space>
- <ThemeSpaceGeneric back="#2b363f"
- title="#000000"
- text="#d2e7ff"
- text_hi="#ffffff"
- header="#444444"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#444444ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000099"
- back="#44444480"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#36434f"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#444444ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#32475a">
- <space>
- <ThemeSpaceGeneric back="#171717"
- title="#4f4f4f"
- text="#5e99cc"
- text_hi="#d2eeff"
- header="#383838"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#7c7c7c"
- tab_inactive="#000000"
- tab_back="#282828ff"
- tab_outline="#3f3f3f">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#444444"
- title="#1a1a1a"
- text="#a8a8a8"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#dddddd"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#444444"
- title="#000000"
- text="#cbedff"
- text_hi="#ffffff"
- header="#444444"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#444444ff"
- button_title="#a0dfff"
- button_text="#7d7d7d"
- button_text_hi="#ffffff"
- tab_active="#5c6982"
- tab_inactive="#3f3f3f"
- tab_back="#4c4c4cff"
- tab_outline="#414141">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#4b4b4b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#dddddd"
- button_text="#dddddd"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#393939"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#414141"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#44444480"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#646464"
- tab_back="#464646ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#44444480"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="TRUE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/softblend.xml b/release/scripts/presets/interface_theme/softblend.xml
deleted file mode 100644
index ce20f7d4085..00000000000
--- a/release/scripts/presets/interface_theme/softblend.xml
+++ /dev/null
@@ -1,1172 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#ff5a5a"
- axis_y="#58ff58"
- axis_z="#6262ff">
- <wcol_regular>
- <ThemeWidgetColors outline="#949190"
- inner="#aca8a7ff"
- inner_sel="#ffffffff"
- item="#aca8a7ff"
- text="#1a1a1a"
- text_sel="#1a1a1a"
- show_shaded="FALSE"
- shadetop="-6"
- shadedown="2">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#969392"
- inner="#8b99a3ff"
- inner_sel="#abb9c5ff"
- item="#aca8a7ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="30"
- shadedown="-3">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#a7a7a7"
- inner="#bfbfbfff"
- inner_sel="#f8f8f8ff"
- item="#aca8a7ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="-2"
- shadedown="1">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#989594"
- inner="#8a888aff"
- inner_sel="#919fa9ff"
- item="#4849ceff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-2"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#383530"
- inner="#9ab997ff"
- inner_sel="#b4d8b1ff"
- item="#000000ff"
- text="#676767"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="-2"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#888888"
- inner="#aca8a5ff"
- inner_sel="#ffffffff"
- item="#aca8a7ff"
- text="#1c1c1c"
- text_sel="#1a1a1a"
- show_shaded="TRUE"
- shadetop="-3"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#4b4b4b"
- inner="#898789ff"
- inner_sel="#93a0aaff"
- item="#101010ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-5"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#4b4b4b"
- inner="#898789ff"
- inner_sel="#93a0aaff"
- item="#635c5fff"
- text="#f9f9f9"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="-5"
- shadedown="5">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#aca8a7"
- inner="#aca8a7ff"
- inner_sel="#aaa8a6ff"
- item="#ccccccff"
- text="#474747"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="6">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#9a9796"
- inner="#aca8a7ff"
- inner_sel="#aca8a7ff"
- item="#5c5a59ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="TRUE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#474747"
- inner="#aaa8a6ff"
- inner_sel="#aaa8a6ff"
- item="#ccccccff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#474747"
- inner="#aaa8a6ff"
- inner_sel="#aaa8a6ff"
- item="#ccccccff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#0a0a0a"
- inner="#aca8a7ff"
- inner_sel="#b1d1d8ff"
- item="#b4d8b1ff"
- text="#000000"
- text_sel="#000000"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#191919e6"
- inner_sel="#2d2d2de6"
- item="#646464ff"
- text="#ffffff"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="25"
- shadedown="-20">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#474747"
- inner="#00000000"
- inner_sel="#aaa8a6ff"
- item="#000000ff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-10"
- shadedown="10">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#82807f"
- inner="#a4a2a0ff"
- inner_sel="#aaa8a6ff"
- item="#a2a19fff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="4"
- shadedown="-5">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#474747"
- inner="#aaa8a6ff"
- inner_sel="#aaa8a6ff"
- item="#96c78eff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="3"
- shadedown="-3">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#aca8a7"
- inner="#f1e59333"
- inner_sel="#fff29c9a"
- item="#4849ceff"
- text="#000000"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="0"
- shadedown="0">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#adb4c7"
- inner_anim_sel="#c4cee0"
- inner_key="#c0bb83"
- inner_key_sel="#dad37d"
- inner_driven="#c69cb1"
- inner_driven_sel="#ecaacd"
- blend="1">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#6b6b6b"
- wire="#242424"
- wire_edit="#000000"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- light="#ffe56666"
- speaker="#c2e787"
- camera="#000000"
- view_overlay="#000000"
- empty="#000000"
- object_selected="#ffffff"
- object_active="#ffffff"
- object_grouped="#000000"
- object_grouped_active="#ffffff"
- transform="#ffffff"
- vertex="#343434"
- vertex_select="#ff2f7a"
- vertex_size="4"
- vertex_unreferenced="#000000"
- edge_select="#f3f3f3"
- edge_seam="#f0703b"
- edge_sharp="#49a1ec"
- edge_crease="#eb3bdd"
- edge_facesel="#272727"
- freestyle_edge_mark="#7fff7f"
- face="#90909099"
- face_select="#a1a1a180"
- face_dot="#52f27e"
- facedot_size="4"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#a3a3a3"
- nurb_vline="#d77ab1"
- nurb_sel_uline="#ffffff"
- nurb_sel_vline="#f090a0"
- act_spline="#95daa0"
- handle_free="#c6c6c6"
- handle_auto="#30b6e5"
- handle_vect="#afafaf"
- handle_sel_vect="#ffffff"
- handle_align="#e277b1"
- handle_sel_free="#ffffff"
- handle_sel_auto="#ffffff"
- handle_sel_align="#ffffff"
- lastsel_point="#ffffff"
- extra_edge_len="#200000"
- extra_edge_angle="#000000"
- extra_face_angle="#cccccc"
- extra_face_area="#cccccc"
- editmesh_active="#ffffffb3"
- normal="#9cfcc8"
- vertex_normal="#68a1db"
- split_normal="#dd23dd"
- bone_solid="#c8c8c8"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- frame_current="#53c03b"
- outline_width="1"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#000000"
- clipping_border_3d="#313131ff"
- text_keyframe="#ddd700"
- text_grease_pencil="#b5e61d"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGradient title="#ffffff"
- text="#ffffff"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aaa8a6ff"
- button_title="#313131"
- button_text="#222222"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <gradients>
- <ThemeGradientColors show_grad="FALSE"
- gradient="#484848"
- high_gradient="#7f7f7f">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#918d8c"
- frame_current="#f06868"
- window_sliders="#4d4d4d"
- channels_region="#4d4d4d"
- dopesheet_channel="#aaa8a6"
- dopesheet_subchannel="#aaa8a6"
- channel_group="#8a9dac"
- active_channels_group="#95adc1"
- vertex="#575757"
- vertex_select="#ffffff"
- vertex_size="6"
- vertex_unreferenced="#000000"
- handle_free="#252525"
- handle_auto="#696969"
- handle_vect="#191919"
- handle_sel_vect="#ffffff"
- handle_align="#1d1d1d"
- handle_sel_free="#ececec"
- handle_sel_auto="#d4d4d4"
- handle_sel_align="#f3f3f3"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- lastsel_point="#000000"
- handle_vertex="#525252"
- handle_vertex_select="#f1f1f1"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#000000"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#0e0e0e"
- button_text="#222222"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#aaa8a6"
- list_title="#676767"
- list_text="#222222"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#f1e593">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#ffffff"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#afafaf"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#222222"
- button_text="#cccccc"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#918d8c"
- view_sliders="#b5b5b5"
- active_action="#ffffff00"
- active_action_unset="#edad7545"
- strips="#62be62"
- strips_selected="#af7474"
- transition_strips="#1800ff"
- transition_strips_selected="#1800ff"
- meta_strips="#1800ff"
- meta_strips_selected="#1800ff"
- sound_strips="#1800ff"
- sound_strips_selected="#1800ff"
- tweak="#1800ff"
- tweak_duplicate="#6258ba"
- keyframe_border="#e7eaa7ff"
- keyframe_border_selected="#ffffffff"
- frame_current="#f06868">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#000000"
- text="#333333"
- text_hi="#000000"
- header="#aca8a7"
- header_text="#a3a3a3"
- header_text_hi="#cccccc"
- button="#aca8a7ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#ded8d7">
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#72727200"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#aca8a7"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#000000">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#7f7f7f"
- frame_current="#f06868"
- value_sliders="#141414"
- view_sliders="#4c4c4c"
- dopesheet_channel="#9baeb9"
- dopesheet_subchannel="#aaa8a6"
- channels="#9baeb9"
- channels_selected="#a0e7d9"
- channel_group="#8a9dac"
- active_channels_group="#95adc1"
- long_key="#000000"
- long_key_selected="#ecfc37"
- keyframe="#bddae8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#ace493"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- summary="#a4cbbb75">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#ffffff"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#000000"
- button_text="#111111"
- button_text_hi="#a3a3a3"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#aaa8a6"
- list_title="#cccccc"
- list_text="#131313"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#000000"
- vertex_select="#ffffff"
- vertex_size="3"
- vertex_unreferenced="#000000"
- face="#00000032"
- face_select="#ffffff3c"
- face_dot="#ffffff"
- facedot_size="2"
- freestyle_face_mark="#00000000"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#aca8a7ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#000000"
- text="#ffffff"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#383838"
- button_text="#222222"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#afafaf"
- window_sliders="#777777"
- movie_strip="#87a4c3"
- movieclip_strip="#95add0"
- image_strip="#c99ac0"
- scene_strip="#91b1a0"
- audio_strip="#e0d2a0"
- effect_strip="#be8c76"
- transition_strip="#d9777a"
- meta_strip="#91918d"
- text_strip="#a29700"
- frame_current="#a3ff96"
- keyframe="#ffeb89"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#000000"
- text="#333333"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#a3a3a3"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#111111"
- button_text="#111111"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#222222"
- text="#222222"
- text_hi="#ffffff"
- header="#d1cccb"
- header_text="#222222"
- header_text_hi="#000000"
- button="#aca8a7ff"
- button_title="#222222"
- button_text="#222222"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#a3a3a3"
- selected_text="#f1e593"
- cursor="#54da70"
- syntax_builtin="#3162b2"
- syntax_symbols="#4c4c4c"
- syntax_special="#ca0c97"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#535353"
- syntax_string="#c31736"
- syntax_numbers="#b62440">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#000000"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#222222"
- button_text="#333333"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#918d8c"
- frame_current="#f06868"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#cccccc"
- text="#3a3a3a"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#030303"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#aeacaa"
- button_text="#222222"
- button_text_hi="#000000"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#ffffff"
- node_active="#ffffff"
- wire="#222222"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#ffffff"
- node_backdrop="#d4d4d4ff"
- converter_node="#e3a1ff"
- color_node="#f2b077"
- group_node="#aca8a7"
- group_socket_node="#79bef2"
- frame_node="#d3cecdff"
- matte_node="#79f2a0"
- distor_node="#eef279"
- noodle_curving="5"
- input_node="#79bef2"
- output_node="#79bef2"
- filter_node="#ff0000"
- vector_node="#6de8e4"
- texture_node="#f2b077"
- shader_node="#e88daa"
- script_node="#f2b077"
- pattern_node="#a67c49"
- layout_node="#000000">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#a3a3a3"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#333333"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#222222"
- button_text="#222222"
- button_text_hi="#c5c5c5"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#4d4d4d"
- list_title="#383838"
- list_text="#676767"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#202020"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#111111"
- button_text="#222222"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#aff193"
- selected_highlight="#98b5cf">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#ffffff"
- text="#000000"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#0f0f0f"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#222222"
- text="#222222"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc3a77"
- cursor="#9cfcc8"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#0c0c0c"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#4d4d4dff"
- button_title="#131313"
- button_text="#131313"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#71cd7f"
- active_marker="#ffffff"
- selected_marker="#ff2f7a"
- disabled_marker="#b54636"
- locked_marker="#7f7f7f"
- path_before="#22d8d1"
- path_after="#5a7575"
- frame_current="#f06868"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#aca8a7"
- title="#1a1a1a"
- text="#1a1a1a"
- text_hi="#ffffff"
- header="#aca8a7"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aca8a7ff"
- button_title="#222222"
- button_text="#222222"
- button_text_hi="#ffffff"
- tab_active="#aca8a7"
- tab_inactive="#bfbfbf"
- tab_back="#bfbfbfff"
- tab_outline="#d1cccb">
- <panelcolors>
- <ThemePanelColors header="#00000004"
- back="#72727280"
- show_header="TRUE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/interface_theme/true_blue_menu.xml b/release/scripts/presets/interface_theme/true_blue_menu.xml
deleted file mode 100644
index 26e39f3bcdf..00000000000
--- a/release/scripts/presets/interface_theme/true_blue_menu.xml
+++ /dev/null
@@ -1,1177 +0,0 @@
-<bpy>
- <Theme>
- <user_interface>
- <ThemeUserInterface menu_shadow_fac="0.5"
- menu_shadow_width="12"
- icon_file=""
- icon_alpha="1"
- widget_emboss="#ffffff05"
- axis_x="#801a1a"
- axis_y="#1a801a"
- axis_z="#1a1a80">
- <wcol_regular>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_regular>
- <wcol_tool>
- <ThemeWidgetColors outline="#303030"
- inner="#2d4463b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_tool>
- <wcol_radio>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_radio>
- <wcol_text>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_text>
- <wcol_option>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#ffecd7b5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_option>
- <wcol_toggle>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_toggle>
- <wcol_num>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#768dabff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_num>
- <wcol_numslider>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_numslider>
- <wcol_box>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_box>
- <wcol_menu>
- <ThemeWidgetColors outline="#303030"
- inner="#1e2e41ff"
- inner_sel="#4179b8ff"
- item="#97b5daff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_menu>
- <wcol_pulldown>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59ff"
- inner_sel="#4179b8ff"
- item="#1e252cff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_pulldown>
- <wcol_menu_back>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59e6"
- inner_sel="#4179b8ff"
- item="#1e252cff"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_menu_back>
- <wcol_pie_menu>
- <ThemeWidgetColors outline="#000000"
- inner="#3d4b59e6"
- inner_sel="#29476dff"
- item="#4179b8ad"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_pie_menu>
- <wcol_tooltip>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59e6"
- inner_sel="#4179b8ff"
- item="#1e2528e6"
- text="#dadada"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_tooltip>
- <wcol_menu_item>
- <ThemeWidgetColors outline="#303030"
- inner="#3d4b59b5"
- inner_sel="#4179b8ff"
- item="#1e252cb5"
- text="#b8b8b8"
- text_sel="#ffffff"
- show_shaded="FALSE"
- shadetop="10"
- shadedown="-30">
- </ThemeWidgetColors>
- </wcol_menu_item>
- <wcol_scroll>
- <ThemeWidgetColors outline="#2d2d2d"
- inner="#376fa91a"
- inner_sel="#85b9ef77"
- item="#264b7079"
- text="#cccccc"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_scroll>
- <wcol_progress>
- <ThemeWidgetColors outline="#000000"
- inner="#bebebeff"
- inner_sel="#646464b4"
- item="#444444ff"
- text="#d3d3d3"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="10"
- shadedown="-10">
- </ThemeWidgetColors>
- </wcol_progress>
- <wcol_list_item>
- <ThemeWidgetColors outline="#000000"
- inner="#3e79b600"
- inner_sel="#1d4f81b7"
- item="#1e252cb5"
- text="#cecece"
- text_sel="#ffffff"
- show_shaded="TRUE"
- shadetop="-35"
- shadedown="20">
- </ThemeWidgetColors>
- </wcol_list_item>
- <wcol_state>
- <ThemeWidgetStateColors inner_anim="#339900"
- inner_anim_sel="#2b8000"
- inner_key="#999300"
- inner_key_sel="#666200"
- inner_driven="#b400ff"
- inner_driven_sel="#9900e6"
- blend="0.5">
- </ThemeWidgetStateColors>
- </wcol_state>
- </ThemeUserInterface>
- </user_interface>
- <view_3d>
- <ThemeView3D grid="#000000"
- clipping_border_3d="#313131ff"
- wire="#5c8ca3"
- wire_edit="#8a8a8a"
- gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- text_grease_pencil="#b5e61d"
- object_selected="#0ea9ff"
- object_active="#80b5ff"
- object_grouped="#083008"
- object_grouped_active="#55bb55"
- text_keyframe="#ddd700"
- camera="#000000"
- empty="#a78721"
- light="#d6df1628"
- speaker="#a83f2d"
- vertex="#657780"
- vertex_select="#00cccb"
- vertex_size="3"
- vertex_bevel="#00a5ff"
- vertex_unreferenced="#9b9b9b"
- edge_select="#00bebb"
- edge_seam="#db2512"
- edge_sharp="#00ffff"
- edge_crease="#cc0099"
- edge_bevel="#00a5ff"
- edge_facesel="#4b4b4b"
- freestyle_edge_mark="#7fff7f"
- face="#58585836"
- face_select="#3f9ca473"
- face_dot="#adbeb6"
- facedot_size="3"
- freestyle_face_mark="#7fff7f33"
- nurb_uline="#909000"
- nurb_vline="#803060"
- nurb_sel_uline="#f0ff40"
- nurb_sel_vline="#f090a0"
- act_spline="#db2512"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- lastsel_point="#ffffff"
- extra_edge_len="#00b7c2"
- extra_edge_angle="#acacac"
- extra_face_angle="#53b9ff"
- extra_face_area="#005300"
- editmesh_active="#00ffcda7"
- normal="#1fbebe"
- vertex_normal="#2361dd"
- split_normal="#dd23dd"
- bone_pose="#50c8ff"
- bone_pose_active="#8cffff"
- bone_solid="#899980"
- bundle_solid="#c8c8c8"
- camera_path="#000000"
- skin_root="#000000"
- view_overlay="#000000"
- transform="#ffffff"
- frame_current="#60c040"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f"
- outline_width="1">
- <space>
- <ThemeSpaceGradient title="#000000"
- text="#b8b8b8"
- text_hi="#e9e9e9"
- header="#1f2a35"
- header_text="#b9b9b9"
- header_text_hi="#ffffff"
- button="#1d232980"
- button_title="#979797"
- button_text="#bbbbbb"
- button_text_hi="#ffffff"
- tab_active="#223950"
- tab_inactive="#1d2329"
- tab_back="#1d2329ff"
- tab_outline="#36547a">
- <gradients>
- <ThemeGradientColors show_grad="TRUE"
- gradient="#0f0f0f"
- high_gradient="#42505e">
- </ThemeGradientColors>
- </gradients>
- <panelcolors>
- <ThemePanelColors header="#00000000"
- back="#282828b0"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGradient>
- </space>
- </ThemeView3D>
- </view_3d>
- <graph_editor>
- <ThemeGraphEditor grid="#5a7b8a"
- frame_current="#60c040"
- window_sliders="#969696"
- channels_region="#8a8a8a"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#545d66"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- vertex="#000000"
- vertex_select="#ff8500"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- handle_free="#000000"
- handle_auto="#909000"
- handle_vect="#409030"
- handle_sel_vect="#40c030"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#994030"
- handle_sel_auto_clamped="#f0af90"
- lastsel_point="#ffffff"
- handle_vertex="#000000"
- handle_vertex_select="#ff8500"
- handle_vertex_size="4">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#1f2a35"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329ff"
- button_title="#b8b8b8"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#555961ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1d2329"
- list_title="#8b8b8b"
- list_text="#cecece"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeGraphEditor>
- </graph_editor>
- <file_browser>
- <ThemeFileBrowser selected_file="#755129">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#8b8b8b"
- text="#cacaca"
- text_hi="#0f0f0f"
- header="#202b36"
- header_text="#8b8b8b"
- header_text_hi="#ffffff"
- button="#1d2329ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#47556180"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeFileBrowser>
- </file_browser>
- <nla_editor>
- <ThemeNLAEditor grid="#5e5e5e"
- view_sliders="#969696"
- active_action="#cc701a66"
- active_action_unset="#9987614d"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- transition_strips="#1c2630"
- transition_strips_selected="#2e75db"
- meta_strips="#332642"
- meta_strips_selected="#692196"
- sound_strips="#2b3d3d"
- sound_strips_selected="#1f7a7a"
- tweak="#4df31a"
- tweak_duplicate="#d90000"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- frame_current="#60c040">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#1f2a35"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329ff"
- button_title="#cecece"
- button_text="#a7a7a7"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000005"
- back="#1d232980"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1d2329"
- list_title="#1f2a35"
- list_text="#cccccc"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNLAEditor>
- </nla_editor>
- <dopesheet_editor>
- <ThemeDopeSheet grid="#585858"
- frame_current="#60c040"
- value_sliders="#000000"
- view_sliders="#969696"
- dopesheet_channel="#52606e"
- dopesheet_subchannel="#7c8996"
- channels="#707070"
- channels_selected="#60c040"
- channel_group="#4f6549"
- active_channels_group="#87b17d"
- long_key="#0c0a0a"
- long_key_selected="#ff8c00"
- keyframe="#e8e8e8"
- keyframe_selected="#ffbe32"
- keyframe_extreme="#e8b3cc"
- keyframe_extreme_selected="#f28080"
- keyframe_breakdown="#b3dbe8"
- keyframe_breakdown_selected="#54bfed"
- keyframe_jitter="#94e575"
- keyframe_jitter_selected="#61c042"
- keyframe_border="#000000ff"
- keyframe_border_selected="#000000ff"
- keyframe_scale_factor="1"
- summary="#3d566887">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#ffffff"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#aaaaaaff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#1d2329"
- list_title="#2b3742"
- list_text="#c5c5c5"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeDopeSheet>
- </dopesheet_editor>
- <image_editor>
- <ThemeImageEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- vertex="#32adec"
- vertex_select="#be6925"
- vertex_size="3"
- vertex_bevel="#000000"
- vertex_unreferenced="#000000"
- face="#a47c5b0a"
- face_select="#a47c5b3c"
- face_dot="#ffffff"
- facedot_size="3"
- freestyle_face_mark="#00000000"
- editmesh_active="#ffffff80"
- wire_edit="#c0c0c0"
- edge_select="#ff8500"
- scope_back="#303030ff"
- preview_stitch_face="#1242b026"
- preview_stitch_edge="#ff8500b2"
- preview_stitch_vert="#ff85007f"
- preview_stitch_stitchable="#00ff00ff"
- preview_stitch_unstitchable="#ff0000ff"
- preview_stitch_active="#e1d2c323"
- uv_shadow="#707070ff"
- uv_others="#606060ff"
- frame_current="#60c040"
- metadatabg="#000000"
- metadatatext="#ffffff"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5"
- paint_curve_handle="#7fff7f7f"
- paint_curve_pivot="#ff7f7f7f">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#7f7f7f"
- text="#999999"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329cc"
- button_title="#8b8b8b"
- button_text="#cccccc"
- button_text_hi="#ffffff"
- tab_active="#223950"
- tab_inactive="#1d2329"
- tab_back="#1d2329ff"
- tab_outline="#273e55">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeImageEditor>
- </image_editor>
- <sequence_editor>
- <ThemeSequenceEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- grid="#636363"
- window_sliders="#a0a0a0"
- movie_strip="#516987"
- movieclip_strip="#20208f"
- image_strip="#6d5881"
- scene_strip="#4e983e"
- audio_strip="#2e8f8f"
- effect_strip="#a9547c"
- transition_strip="#a25f6f"
- meta_strip="#6d9183"
- text_strip="#a29700"
- frame_current="#60c040"
- keyframe="#ff8500"
- draw_action="#50c8ff"
- preview_back="#000000"
- metadatabg="#000000"
- metadatatext="#ffffff">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#8b8b8b"
- text="#ffffff"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329cc"
- button_title="#afafaf"
- button_text="#b3b3b3"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeSequenceEditor>
- </sequence_editor>
- <properties>
- <ThemeProperties>
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#979797"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329ff"
- button_title="#b8b8b8"
- button_text="#b8b8b8"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#404040ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#0000002a"
- back="#35353580"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeProperties>
- </properties>
- <text_editor>
- <ThemeTextEditor line_numbers_background="#2e2e2e"
- selected_text="#4e4e8f"
- cursor="#8b8bff"
- syntax_builtin="#ed4800"
- syntax_symbols="#ff8f00"
- syntax_special="#c080d0"
- syntax_preprocessor="#32008c"
- syntax_reserved="#8c3c00"
- syntax_comment="#cd8b00"
- syntax_string="#ffcd8b"
- syntax_numbers="#f0ad6d">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#8b8b8b"
- text="#cfbfad"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#a5a5a5"
- header_text_hi="#ffffff"
- button="#3b3b3bff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTextEditor>
- </text_editor>
- <timeline>
- <ThemeTimeline grid="#5a7b8a"
- frame_current="#338aff"
- time_keyframe="#ddd700"
- time_grease_pencil="#b5e61d">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeTimeline>
- </timeline>
- <node_editor>
- <ThemeNodeEditor gp_vertex="#000000"
- gp_vertex_select="#ff8500"
- gp_vertex_size="3"
- node_selected="#6797c5"
- node_active="#1f76b2"
- wire="#ffffff"
- wire_inner="#737373"
- wire_select="#ffffff"
- selected_text="#38427f"
- node_backdrop="#253d54a0"
- converter_node="#10299b"
- color_node="#2a85b1"
- group_node="#1e7524"
- group_socket_node="#dfca35"
- frame_node="#9a9b9ba0"
- matte_node="#000000"
- distor_node="#000000"
- noodle_curving="5"
- input_node="#485cbb"
- output_node="#084edf"
- filter_node="#395e83"
- vector_node="#003153"
- texture_node="#000d4c"
- shader_node="#1e4e9e"
- script_node="#15347e"
- pattern_node="#436eb8"
- layout_node="#222858">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#8b8b8b"
- text="#dbdbdb"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d232980"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#223950"
- tab_inactive="#1d2329"
- tab_back="#4b5058ff"
- tab_outline="#223950">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#a5a5a5"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeNodeEditor>
- </node_editor>
- <logic_editor>
- <ThemeLogicEditor>
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329ff"
- button_title="#8b8b8b"
- button_text="#8b8b8b"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeLogicEditor>
- </logic_editor>
- <outliner>
- <ThemeOutliner match="#337f33"
- selected_highlight="#82878c">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#cacaca"
- text_hi="#ffffff"
- header="#1f2a35"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeOutliner>
- </outliner>
- <info>
- <ThemeInfo info_selected="#6080ff"
- info_selected_text="#ffffff"
- info_error="#dc0000"
- info_error_text="#000000"
- info_warning="#dc8060"
- info_warning_text="#000000"
- info_info="#00aa00"
- info_info_text="#000000"
- info_debug="#c4c4c4"
- info_debug_text="#000000">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#adadad"
- text_hi="#000000"
- header="#202b36"
- header_text="#c2c2c2"
- header_text_hi="#000000"
- button="#3b3b3bff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#000000"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeInfo>
- </info>
- <user_preferences>
- <ThemeUserPreferences>
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#b8b8b8"
- text_hi="#ffffff"
- header="#1f2a35"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#727272ff"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#464646"
- tab_inactive="#393939"
- tab_back="#000000ff"
- tab_outline="#323232">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#272727c3"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeUserPreferences>
- </user_preferences>
- <console>
- <ThemeConsole line_output="#6080ff"
- line_input="#ffffff"
- line_info="#00aa00"
- line_error="#dc6060"
- cursor="#dc6060"
- select="#ffffff30">
- <space>
- <ThemeSpaceGeneric back="#000000"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#15202b"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#7272727f"
- button_title="#000000"
- button_text="#000000"
- button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
- <panelcolors>
- <ThemePanelColors header="#00000002"
- back="#7272727f"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- </ThemeConsole>
- </console>
- <clip_editor>
- <ThemeClipEditor gp_vertex="#000000"
- gp_vertex_select="#000000"
- gp_vertex_size="1"
- marker_outline="#000000"
- marker="#7f7f00"
- active_marker="#ffffff"
- selected_marker="#ffff00"
- disabled_marker="#7f0000"
- locked_marker="#7f7f7f"
- path_before="#ff0000"
- path_after="#0000ff"
- frame_current="#60c040"
- strips="#0c0a0a"
- strips_selected="#ff8c00"
- handle_free="#000000"
- handle_auto="#909000"
- handle_align="#803060"
- handle_sel_free="#000000"
- handle_sel_auto="#f0ff40"
- handle_sel_align="#f090a0"
- handle_auto_clamped="#000000"
- handle_sel_auto_clamped="#000000"
- handle_vertex="#000000"
- handle_vertex_select="#ffff00"
- handle_vertex_size="5">
- <space>
- <ThemeSpaceGeneric back="#1d2329"
- title="#000000"
- text="#000000"
- text_hi="#ffffff"
- header="#202b36"
- header_text="#000000"
- header_text_hi="#ffffff"
- button="#1d2329cc"
- button_title="#999999"
- button_text="#939393"
- button_text_hi="#ffffff"
- tab_active="#6c717f"
- tab_inactive="#565b65"
- tab_back="#4b5058ff"
- tab_outline="#2d2d32">
- <panelcolors>
- <ThemePanelColors header="#00000019"
- back="#72727280"
- show_header="FALSE"
- show_back="FALSE">
- </ThemePanelColors>
- </panelcolors>
- </ThemeSpaceGeneric>
- </space>
- <space_list>
- <ThemeSpaceListGeneric list="#666666"
- list_title="#000000"
- list_text="#000000"
- list_text_hi="#ffffff">
- </ThemeSpaceListGeneric>
- </space_list>
- </ThemeClipEditor>
- </clip_editor>
- <bone_color_sets>
- <ThemeBoneColorSet normal="#9a0000"
- select="#bd1111"
- active="#f70a0a"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f74018"
- select="#f66913"
- active="#fa9900"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e9109"
- select="#59b70b"
- active="#83ef1d"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#0a3694"
- select="#3667df"
- active="#5ec1ef"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#a9294e"
- select="#c1416a"
- active="#f05d91"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#430c78"
- select="#543aa3"
- active="#8764d5"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#24785a"
- select="#3c9579"
- active="#6fb6ab"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#4b707c"
- select="#6a8691"
- active="#9bc2cd"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#f4c90c"
- select="#eec236"
- active="#f3ff00"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#1e2024"
- select="#484c56"
- active="#ffffff"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6f2f6a"
- select="#9845be"
- active="#d330d6"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#6c8e22"
- select="#7fb022"
- active="#bbef5b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#8d8d8d"
- select="#b0b0b0"
- active="#dedede"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#834326"
- select="#8b5811"
- active="#bd6a11"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#08310e"
- select="#1c430b"
- active="#34622b"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- <ThemeBoneColorSet normal="#000000"
- select="#000000"
- active="#000000"
- show_colored_constraints="FALSE">
- </ThemeBoneColorSet>
- </bone_color_sets>
- </Theme>
- <ThemeStyle>
- <panel_title>
- <ThemeFontStyle points="12"
- font_kerning_style="FITTED"
- shadow="1"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </panel_title>
- <widget_label>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="3"
- shadow_offset_x="0"
- shadow_offset_y="-1"
- shadow_alpha="0.15"
- shadow_value="1">
- </ThemeFontStyle>
- </widget_label>
- <widget>
- <ThemeFontStyle points="11"
- font_kerning_style="FITTED"
- shadow="0"
- shadow_offset_x="0"
- shadow_offset_y="0"
- shadow_alpha="0.25"
- shadow_value="0">
- </ThemeFontStyle>
- </widget>
- </ThemeStyle>
-</bpy>
diff --git a/release/scripts/presets/keyconfig/3dsmax.py b/release/scripts/presets/keyconfig/3dsmax.py
deleted file mode 100644
index 206dc820f04..00000000000
--- a/release/scripts/presets/keyconfig/3dsmax.py
+++ /dev/null
@@ -1,2434 +0,0 @@
-# Configuration 3dsmax
-import bpy
-
-wm = bpy.context.window_manager
-kc = wm.keyconfigs.new('3dsmax')
-
-# Map Window
-km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.window_new', 'W', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.read_homefile', 'N', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.save_homefile', 'U', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'O', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'TOPBAR_MT_file_open_recent'
-kmi = km.keymap_items.new('wm.open_mainfile', 'O', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.open_mainfile', 'F1', 'PRESS')
-kmi = km.keymap_items.new('wm.link', 'O', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.append', 'F1', 'PRESS', shift=True)
-kmi.properties.link = False
-kmi.properties.instance_groups = False
-kmi = km.keymap_items.new('wm.save_mainfile', 'S', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.save_mainfile', 'W', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('wm.save_as_mainfile', 'F2', 'PRESS')
-kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', ctrl=True, alt=True)
-kmi.properties.copy = True
-kmi = km.keymap_items.new('wm.window_fullscreen_toggle', 'F11', 'PRESS', alt=True)
-kmi = km.keymap_items.new('wm.quit_blender', 'Q', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.redraw_timer', 'T', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.debug_menu', 'D', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.search_menu', 'SPACE', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'NDOF_BUTTON_MENU', 'PRESS')
-kmi.properties.name = 'USERPREF_MT_ndof_settings'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F2', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'NODE_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F4', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'CONSOLE'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F5', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'VIEW_3D'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F6', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'GRAPH_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F7', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'PROPERTIES'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F8', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'SEQUENCE_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F9', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'OUTLINER'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F10', 'PRESS', shift=True, ctrl=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'IMAGE_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F11', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'TEXT_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F12', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'DOPESHEET_EDITOR'
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS')
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.1
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS')
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.0 / 1.1
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS', shift=True)
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.5
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS', shift=True)
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.0 / 1.5
-kmi = km.keymap_items.new('info.reports_display_update', 'TIMER_REPORT', 'ANY', any=True)
-
-# Map Screen
-km = kc.keymaps.new('Screen', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('screen.animation_step', 'TIMER0', 'ANY', any=True)
-kmi = km.keymap_items.new('screen.region_blend', 'TIMERREGION', 'ANY', any=True)
-kmi = km.keymap_items.new('screen.screen_set', 'RIGHT_ARROW', 'PRESS', ctrl=True)
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('screen.screen_set', 'LEFT_ARROW', 'PRESS', ctrl=True)
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('screen.screen_full_area', 'UP_ARROW', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('screen.screen_full_area', 'DOWN_ARROW', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('screen.screen_full_area', 'SPACE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('screen.screenshot', 'F3', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('screen.region_quadview', 'W', 'PRESS', alt=True)
-kmi = km.keymap_items.new('screen.repeat_history', 'F3', 'PRESS', shift=True)
-kmi = km.keymap_items.new('screen.repeat_last', 'R', 'PRESS', shift=True)
-kmi = km.keymap_items.new('screen.region_flip', 'F5', 'PRESS')
-kmi = km.keymap_items.new('screen.redo_last', 'F6', 'PRESS')
-kmi = km.keymap_items.new('script.reload', 'F8', 'PRESS')
-kmi = km.keymap_items.new('file.execute', 'RET', 'PRESS')
-kmi = km.keymap_items.new('file.execute', 'NUMPAD_ENTER', 'PRESS')
-kmi = km.keymap_items.new('file.cancel', 'ESC', 'PRESS')
-kmi = km.keymap_items.new('ed.undo', 'Z', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('ed.redo', 'Z', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('ed.undo_history', 'Z', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('render.render', 'F10', 'PRESS')
-kmi = km.keymap_items.new('render.render', 'F10', 'PRESS', ctrl=True)
-kmi.properties.animation = True
-kmi = km.keymap_items.new('render.view_cancel', 'ESC', 'PRESS')
-kmi = km.keymap_items.new('render.view_show', 'F11', 'PRESS')
-kmi = km.keymap_items.new('render.play_rendered_anim', 'F11', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('screen.userpref_show', 'U', 'PRESS', ctrl=True, alt=True)
-
-# Map Markers
-km = kc.keymaps.new('Markers', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.move', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('marker.duplicate', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi.properties.camera = True
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.camera = True
-kmi = km.keymap_items.new('marker.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('marker.select_all', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('marker.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('marker.move', 'G', 'PRESS')
-kmi = km.keymap_items.new('marker.camera_bind', 'B', 'PRESS', ctrl=True)
-
-# Map Outliner
-km = kc.keymaps.new('Outliner', space_type='OUTLINER', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'DOUBLE_CLICK')
-kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi.properties.recursive = False
-kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi.properties.recursive = False
-kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', ctrl=True)
-kmi.properties.extend = False
-kmi.properties.recursive = True
-kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.recursive = True
-kmi = km.keymap_items.new('outliner.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS')
-kmi.properties.all = False
-kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS', shift=True)
-kmi.properties.all = True
-kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('outliner.operation', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('outliner.show_hierarchy', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('outliner.show_active', 'PERIOD', 'PRESS')
-kmi = km.keymap_items.new('outliner.show_active', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_DOWN', 'PRESS')
-kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_UP', 'PRESS')
-kmi.properties.up = True
-kmi = km.keymap_items.new('outliner.show_one_level', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('outliner.show_one_level', 'NUMPAD_MINUS', 'PRESS')
-kmi.properties.open = False
-kmi = km.keymap_items.new('outliner.selected_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('outliner.expanded_toggle', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('outliner.renderability_toggle', 'R', 'PRESS')
-kmi = km.keymap_items.new('outliner.selectability_toggle', 'S', 'PRESS')
-kmi = km.keymap_items.new('outliner.visibility_toggle', 'V', 'PRESS')
-kmi = km.keymap_items.new('outliner.keyingset_add_selected', 'K', 'PRESS')
-kmi = km.keymap_items.new('outliner.keyingset_remove_selected', 'K', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.keyframe_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('anim.keyframe_delete', 'I', 'PRESS', alt=True)
-kmi = km.keymap_items.new('outliner.drivers_add_selected', 'D', 'PRESS')
-kmi = km.keymap_items.new('outliner.drivers_delete_selected', 'D', 'PRESS', alt=True)
-
-# Map 3D View Generic
-km = kc.keymaps.new('3D View Generic', space_type='VIEW_3D', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('view3d.properties', 'F12', 'PRESS')
-kmi = km.keymap_items.new('view3d.toolshelf', 'D', 'PRESS')
-
-# Map Face Mask
-km = kc.keymaps.new('Face Mask', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.face_select_all', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('paint.face_select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('paint.face_select_reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('paint.face_select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('paint.face_select_linked_pick', 'L', 'PRESS')
-
-# Map Weight Paint Vertex Selection
-km = kc.keymaps.new('Weight Paint Vertex Selection', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.vert_select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'SELECT'
-kmi = km.keymap_items.new('paint.vert_select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('view3d.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('view3d.select_circle', 'C', 'PRESS', alt=True)
-
-# Map Pose
-km = kc.keymaps.new('Pose', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_add'
-kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('pose.reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_pose_apply'
-kmi = km.keymap_items.new('pose.rot_clear', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.loc_clear', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.scale_clear', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.quaternions_flip', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.rotation_mode_set', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('pose.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', ctrl=True)
-kmi.properties.flipped = False
-kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', shift=True, ctrl=True)
-kmi.properties.flipped = True
-kmi = km.keymap_items.new('pose.select_all', 'LEFTMOUSE', 'CLICK')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('pose.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('pose.select_parent', 'P', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('pose.select_linked', 'L', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.select_mirror', 'F', 'PRESS', shift=True)
-kmi.properties.only_active = True
-kmi = km.keymap_items.new('pose.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('pose.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('pose.ik_add', 'I', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.ik_clear', 'I', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_pose_group'
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_bone_options_toggle'
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_bone_options_enable'
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', alt=True)
-kmi.properties.name = 'VIEW3D_MT_bone_options_disable'
-kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.bone_layers', 'M', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True)
-kmi.properties.mode = 'BONE_SIZE'
-kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'I', 'PRESS')
-kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'I', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('poselib.browse_interactive', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('poselib.pose_add', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('poselib.pose_remove', 'L', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('poselib.pose_rename', 'L', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('pose.push', 'E', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('pose.relax', 'E', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.breakdown', 'E', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_pose_specials'
-
-# Map Object Mode
-km = kc.keymaps.new('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.use_proportional_edit_objects'
-kmi = km.keymap_items.new('object.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('object.select_linked', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('object.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('object.select_mirror', 'M', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.parent_no_inverse_set', 'P', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.parent_clear', 'P', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.track_set', 'T', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.track_clear', 'T', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('object.location_clear', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.rotation_clear', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.scale_clear', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.origin_clear', 'O', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.hide_view_clear', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('object.hide_render_clear', 'H', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('object.hide_render_set', 'H', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.delete', 'X', 'PRESS')
-kmi.properties.use_global = False
-kmi = km.keymap_items.new('object.delete', 'X', 'PRESS', shift=True)
-kmi.properties.use_global = False
-kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS', shift=True)
-kmi.properties.use_global = True
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_add'
-kmi = km.keymap_items.new('object.duplicates_make_real', 'A', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_object_apply'
-kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_make_single_user'
-kmi = km.keymap_items.new('wm.call_menu', 'L', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_make_links'
-kmi = km.keymap_items.new('object.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('object.duplicate_move_linked', 'D', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.join', 'J', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.convert', 'C', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('object.proxy_make', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('object.make_local', 'L', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'I', 'PRESS')
-kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'I', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('group.create', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('group.objects_remove', 'G', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('group.objects_remove_all', 'G', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('group.objects_add_active', 'G', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('group.objects_remove_active', 'G', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('rigidbody.objects_add', 'R', 'PRESS', ctrl=True)
-kmi.properties.type = 'ACTIVE'
-kmi = km.keymap_items.new('rigidbody.objects_add', 'R', 'PRESS', shift=True, ctrl=True)
-kmi.properties.type = 'PASSIVE'
-kmi = km.keymap_items.new('rigidbody.objects_remove', 'R', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_object_specials'
-kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True)
-kmi.properties.level = 0
-kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True)
-kmi.properties.level = 1
-kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True)
-kmi.properties.level = 2
-kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True)
-kmi.properties.level = 3
-kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True)
-kmi.properties.level = 4
-kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True)
-kmi.properties.level = 5
-
-# Map Particle
-km = kc.keymaps.new('Particle', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('particle.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('particle.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('particle.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('particle.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS')
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('particle.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('particle.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('particle.reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.release_confirm = True
-kmi.properties.use_planar_constraint= True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.release_confirm = True
-kmi.properties.use_accurate= True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True)
-kmi.properties.release_confirm = True
-kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.size'
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.strength'
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_particle_specials'
-kmi = km.keymap_items.new('particle.weight_set', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-
-# Map 3D View
-km = kc.keymaps.new('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.release_confirm = True
-kmi.properties.use_planar_constraint= True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.release_confirm = True
-kmi.properties.use_accurate= True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True)
-kmi.properties.release_confirm = True
-kmi = km.keymap_items.new('view3d.cursor3d', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view3d.rotate', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.move', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view3d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view3d.dolly', 'MIDDLEMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('view3d.view_selected', 'NUMPAD_PERIOD', 'PRESS', ctrl=True)
-kmi.properties.use_all_regions = True
-kmi = km.keymap_items.new('view3d.view_selected', 'Z', 'PRESS')
-kmi.properties.use_all_regions = False
-kmi = km.keymap_items.new('view3d.view_lock_to_active', 'NUMPAD_PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view3d.view_lock_clear', 'NUMPAD_PERIOD', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.fly', 'F', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view3d.smoothview', 'TIMER1', 'ANY', any=True)
-kmi = km.keymap_items.new('view3d.rotate', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('view3d.rotate', 'MOUSEROTATE', 'ANY')
-kmi = km.keymap_items.new('view3d.move', 'TRACKPADPAN', 'ANY', shift=True)
-kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADPAN', 'ANY', ctrl=True)
-kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_PLUS', 'PRESS')
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_MINUS', 'PRESS')
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.zoom', 'EQUAL', 'PRESS', ctrl=True)
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'MINUS', 'PRESS', ctrl=True)
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS')
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS')
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.zoom_camera_1_to_1', 'NUMPAD_ENTER', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view3d.view_center_camera', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('view3d.view_center_cursor', 'HOME', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.view_all', 'HOME', 'PRESS')
-kmi.properties.center = False
-kmi = km.keymap_items.new('view3d.view_all', 'HOME', 'PRESS', ctrl=True)
-kmi.properties.use_all_regions = True
-kmi.properties.center = False
-kmi = km.keymap_items.new('view3d.view_all', 'C', 'PRESS', shift=True)
-kmi.properties.center = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'C', 'PRESS')
-kmi.properties.type = 'CAMERA'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'F', 'PRESS')
-kmi.properties.type = 'FRONT'
-kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_2', 'PRESS')
-kmi.properties.type = 'ORBITDOWN'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'PRESS')
-kmi.properties.type = 'RIGHT'
-kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_4', 'PRESS')
-kmi.properties.type = 'ORBITLEFT'
-kmi = km.keymap_items.new('view3d.view_persportho', 'P', 'PRESS')
-kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_6', 'PRESS')
-kmi.properties.type = 'ORBITRIGHT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'T', 'PRESS')
-kmi.properties.type = 'TOP'
-kmi = km.keymap_items.new('view3d.view_orbit', 'NUMPAD_8', 'PRESS')
-kmi.properties.type = 'ORBITUP'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'PRESS', ctrl=True)
-kmi.properties.type = 'BACK'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'L', 'PRESS')
-kmi.properties.type = 'LEFT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'B', 'PRESS')
-kmi.properties.type = 'BOTTOM'
-kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_2', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANDOWN'
-kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_4', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANLEFT'
-kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_6', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANRIGHT'
-kmi = km.keymap_items.new('view3d.view_pan', 'NUMPAD_8', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANUP'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANRIGHT'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANLEFT'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', shift=True)
-kmi.properties.type = 'PANUP'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
-kmi.properties.type = 'PANDOWN'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.type = 'ORBITLEFT'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.type = 'ORBITRIGHT'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.type = 'ORBITUP'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.type = 'ORBITDOWN'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'PRESS', shift=True)
-kmi.properties.type = 'FRONT'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'PRESS', shift=True)
-kmi.properties.type = 'RIGHT'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'PRESS', shift=True)
-kmi.properties.type = 'TOP'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_1', 'PRESS', shift=True, ctrl=True)
-kmi.properties.type = 'BACK'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_3', 'PRESS', shift=True, ctrl=True)
-kmi.properties.type = 'LEFT'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NUMPAD_7', 'PRESS', shift=True, ctrl=True)
-kmi.properties.type = 'BOTTOM'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.localview', 'NUMPAD_SLASH', 'PRESS')
-kmi = km.keymap_items.new('view3d.ndof_orbit_zoom', 'NDOF_MOTION', 'ANY')
-kmi = km.keymap_items.new('view3d.ndof_orbit', 'NDOF_MOTION', 'ANY', ctrl=True)
-kmi = km.keymap_items.new('view3d.ndof_pan', 'NDOF_MOTION', 'ANY', shift=True)
-kmi = km.keymap_items.new('view3d.ndof_all', 'NDOF_MOTION', 'ANY', shift=True, ctrl=True)
-kmi = km.keymap_items.new('view3d.view_selected', 'NDOF_BUTTON_FIT', 'PRESS')
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_FRONT', 'PRESS')
-kmi.properties.type = 'FRONT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_BACK', 'PRESS')
-kmi.properties.type = 'BACK'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_LEFT', 'PRESS')
-kmi.properties.type = 'LEFT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_RIGHT', 'PRESS')
-kmi.properties.type = 'RIGHT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_TOP', 'PRESS')
-kmi.properties.type = 'TOP'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_BOTTOM', 'PRESS')
-kmi.properties.type = 'BOTTOM'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_FRONT', 'PRESS', shift=True)
-kmi.properties.type = 'FRONT'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_RIGHT', 'PRESS', shift=True)
-kmi.properties.type = 'RIGHT'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.viewnumpad', 'NDOF_BUTTON_TOP', 'PRESS', shift=True)
-kmi.properties.type = 'TOP'
-kmi.properties.align_active = True
-kmi = km.keymap_items.new('view3d.layers', 'ACCENT_GRAVE', 'PRESS')
-kmi.properties.nr = 0
-kmi = km.keymap_items.new('view3d.layers', 'ONE', 'PRESS', any=True)
-kmi.properties.nr = 1
-kmi = km.keymap_items.new('view3d.layers', 'TWO', 'PRESS', any=True)
-kmi.properties.nr = 2
-kmi = km.keymap_items.new('view3d.layers', 'THREE', 'PRESS', any=True)
-kmi.properties.nr = 3
-kmi = km.keymap_items.new('view3d.layers', 'FOUR', 'PRESS', any=True)
-kmi.properties.nr = 4
-kmi = km.keymap_items.new('view3d.layers', 'FIVE', 'PRESS', any=True)
-kmi.properties.nr = 5
-kmi = km.keymap_items.new('view3d.layers', 'SIX', 'PRESS', any=True)
-kmi.properties.nr = 6
-kmi = km.keymap_items.new('view3d.layers', 'SEVEN', 'PRESS', any=True)
-kmi.properties.nr = 7
-kmi = km.keymap_items.new('view3d.layers', 'EIGHT', 'PRESS', any=True)
-kmi.properties.nr = 8
-kmi = km.keymap_items.new('view3d.layers', 'NINE', 'PRESS', any=True)
-kmi.properties.nr = 9
-kmi = km.keymap_items.new('view3d.layers', 'ZERO', 'PRESS', any=True)
-kmi.properties.nr = 10
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'F3', 'PRESS')
-kmi.properties.data_path = 'space_data.shading.type'
-kmi.properties.value_1 = 'SOLID'
-kmi.properties.value_2 = 'WIREFRAME'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'Z', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.shading.type'
-kmi.properties.value_1 = 'SOLID'
-kmi.properties.value_2 = 'TEXTURED'
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi.properties.center = False
-kmi.properties.enumerate = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi.properties.center = False
-kmi.properties.enumerate = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi.properties.center = True
-kmi.properties.enumerate = False
-kmi.properties.object = True
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi.properties.center = False
-kmi.properties.enumerate = True
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi.properties.center = True
-kmi.properties.enumerate = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi.properties.center = True
-kmi.properties.enumerate = True
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi.properties.center = False
-kmi.properties.enumerate = True
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi.properties.center = True
-kmi.properties.enumerate = True
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_L', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('view3d.select_circle', 'C', 'PRESS', alt=True)
-# kmi = km.keymap_items.new('view3d.clip_border', 'B', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.zoom_border', 'B', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view3d.render_border', 'B', 'PRESS', shift=True)
-kmi.properties.camera_only = True
-kmi = km.keymap_items.new('view3d.render_border', 'B', 'PRESS', ctrl=True)
-kmi.properties.camera_only = False
-kmi = km.keymap_items.new('view3d.clear_render_border', 'B', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('view3d.camera_to_view', 'NUMPAD_0', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('view3d.object_as_camera', 'NUMPAD_0', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_snap'
-kmi = km.keymap_items.new('view3d.copybuffer', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view3d.pastebuffer', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.context_set_enum', 'COMMA', 'PRESS')
-kmi.properties.data_path = 'space_data.pivot_point'
-kmi.properties.value = 'BOUNDING_BOX_CENTER'
-kmi = km.keymap_items.new('wm.context_set_enum', 'COMMA', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'space_data.pivot_point'
-kmi.properties.value = 'MEDIAN_POINT'
-kmi = km.keymap_items.new('wm.context_toggle', 'COMMA', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.use_pivot_point_align'
-kmi = km.keymap_items.new('wm.context_toggle', 'SPACE', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'space_data.show_manipulator'
-kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'PRESS')
-kmi.properties.data_path = 'space_data.pivot_point'
-kmi.properties.value = 'CURSOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'space_data.pivot_point'
-kmi.properties.value = 'INDIVIDUAL_ORIGINS'
-kmi = km.keymap_items.new('wm.context_set_enum', 'PERIOD', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.pivot_point'
-kmi.properties.value = 'ACTIVE_ELEMENT'
-kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS', shift=True)
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS', shift=True)
-kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS', shift=True)
-kmi = km.keymap_items.new('transform.bend', 'Q', 'PRESS', shift=True)
-kmi = km.keymap_items.new('transform.tosphere', 'S', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('transform.shear', 'S', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('transform.select_orientation', 'SPACE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('transform.create_orientation', 'SPACE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.use = True
-kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.use_snap'
-kmi = km.keymap_items.new('wm.context_menu_enum', 'TAB', 'PRESS', shift=True, ctrl=True)
-kmi.properties.data_path = 'tool_settings.snap_element'
-kmi = km.keymap_items.new('transform.translate', 'T', 'PRESS', shift=True)
-kmi.properties.texture_space = True
-kmi = km.keymap_items.new('transform.resize', 'T', 'PRESS', shift=True, alt=True)
-kmi.properties.texture_space = True
-kmi = km.keymap_items.new('transform.skin_resize', 'A', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'W', 'PRESS')
-kmi.properties.translate = True
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'E', 'PRESS')
-kmi.properties.rotate = True
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'R', 'PRESS')
-kmi.properties.scale = True
-kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS')
-kmi.properties.data_path = 'tool_settings.use_snap'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'A', 'PRESS')
-kmi.properties.data_path = 'tool_settings.snap_element'
-kmi.properties.value_1 = 'VERTEX'
-kmi.properties.value_2 = 'INCREMENT'
-kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_L', 'ANY', ctrl=True)
-kmi = km.keymap_items.new('wm.context_toggle', 'G', 'PRESS')
-kmi.properties.data_path = 'space_data.overlay.show_floor'
-
-# Map Animation Channels
-km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.children_only = True
-kmi = km.keymap_items.new('anim.channels_rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('anim.channels_select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_select_box', 'EVT_TWEAK_L', 'ANY')
-kmi = km.keymap_items.new('anim.channels_delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_setting_toggle', 'W', 'PRESS', shift=True)
-kmi = km.keymap_items.new('anim.channels_setting_enable', 'W', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('anim.channels_setting_disable', 'W', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_expand', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_collapse', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_expand', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi.properties.all = False
-kmi = km.keymap_items.new('anim.channels_collapse', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi.properties.all = False
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS')
-kmi.properties.direction = 'UP'
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS')
-kmi.properties.direction = 'DOWN'
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS', shift=True)
-kmi.properties.direction = 'TOP'
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS', shift=True)
-kmi.properties.direction = 'BOTTOM'
-kmi = km.keymap_items.new('anim.channels_group', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('anim.channels_ungroup', 'G', 'PRESS', alt=True)
-
-# Map UV Editor
-km = kc.keymaps.new('UV Editor', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_toggle', 'Q', 'PRESS')
-kmi.properties.data_path = 'tool_settings.use_uv_sculpt'
-kmi = km.keymap_items.new('uv.mark_seam', 'E', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_loop', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select_loop', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_split', 'Y', 'PRESS')
-kmi = km.keymap_items.new('uv.select_box', 'B', 'PRESS')
-kmi.properties.pinned = False
-kmi = km.keymap_items.new('uv.select_box', 'B', 'PRESS', shift=True)
-kmi.properties.pinned = True
-kmi = km.keymap_items.new('uv.circle_select', 'C', 'PRESS')
-kmi = km.keymap_items.new('uv.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('uv.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('uv.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('uv.select_pinned', 'P', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS')
-kmi.properties.name = 'IMAGE_MT_uvs_weldalign'
-kmi = km.keymap_items.new('uv.stitch', 'V', 'PRESS')
-kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS')
-kmi.properties.clear = False
-kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS', alt=True)
-kmi.properties.clear = True
-kmi = km.keymap_items.new('uv.unwrap', 'E', 'PRESS')
-kmi = km.keymap_items.new('uv.minimize_stretch', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('uv.pack_islands', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('uv.average_islands_scale', 'A', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('uv.reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('uv.cursor_set', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('uv.tile_set', 'ACTIONMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True)
-kmi.properties.name = 'IMAGE_MT_uvs_snap'
-kmi = km.keymap_items.new('wm.call_menu', 'TAB', 'PRESS', ctrl=True)
-kmi.properties.name = 'IMAGE_MT_uvs_select_mode'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('transform.shear', 'S', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.use_snap'
-kmi = km.keymap_items.new('wm.context_menu_enum', 'TAB', 'PRESS', shift=True, ctrl=True)
-kmi.properties.data_path = 'tool_settings.snap_uv_element'
-
-# Map Mask Editing
-km = kc.keymaps.new('Mask Editing', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('mask.new', 'N', 'PRESS', alt=True)
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.use_proportional_edit_mask'
-kmi = km.keymap_items.new('mask.add_vertex_slide', 'ACTIONMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mask.add_feather_vertex_slide', 'ACTIONMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mask.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('mask.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('mask.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi = km.keymap_items.new('mask.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi = km.keymap_items.new('mask.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('mask.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('mask.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mask.select_linked_pick', 'L', 'PRESS')
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('mask.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('mask.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('mask.select_circle', 'C', 'PRESS')
-kmi = km.keymap_items.new('mask.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True, alt=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('mask.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True, alt=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('mask.hide_view_clear', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mask.hide_view_set', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('mask.hide_view_set', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('mask.cyclic_toggle', 'C', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mask.slide_point', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('mask.handle_type_set', 'V', 'PRESS')
-kmi = km.keymap_items.new('mask.normals_make_consistent', 'N', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mask.parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mask.parent_clear', 'P', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mask.shape_key_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('mask.shape_key_clear', 'I', 'PRESS', alt=True)
-kmi = km.keymap_items.new('uv.cursor_set', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', alt=True)
-kmi.properties.mode = 'MASK_SHRINKFATTEN'
-
-# Map Graph Editor
-km = kc.keymaps.new('Graph Editor', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_toggle', 'H', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'space_data.show_handles'
-kmi = km.keymap_items.new('graph.cursor_set', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi.properties.column = False
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.column = True
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi.properties.column = False
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.column = True
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.column = False
-kmi.properties.curves = True
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.column = False
-kmi.properties.curves = True
-kmi = km.keymap_items.new('graph.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('graph.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('graph.select_leftright', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.mode = 'LEFT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('graph.select_leftright', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.mode = 'RIGHT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('graph.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi.properties.invert = False
-kmi = km.keymap_items.new('graph.select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS')
-kmi.properties.axis_range = False
-kmi.properties.include_handles = False
-kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS', alt=True)
-kmi.properties.axis_range = True
-kmi.properties.include_handles = False
-kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS', ctrl=True)
-kmi.properties.axis_range = False
-kmi.properties.include_handles = True
-kmi = km.keymap_items.new('graph.select_box', 'B', 'PRESS', ctrl=True, alt=True)
-kmi.properties.axis_range = True
-kmi.properties.include_handles = True
-kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS')
-kmi.properties.mode = 'KEYS'
-kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS', ctrl=True)
-kmi.properties.mode = 'CFRA'
-kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS', shift=True)
-kmi.properties.mode = 'MARKERS_COLUMN'
-kmi = km.keymap_items.new('graph.select_column', 'K', 'PRESS', alt=True)
-kmi.properties.mode = 'MARKERS_BETWEEN'
-kmi = km.keymap_items.new('graph.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.select_linked', 'L', 'PRESS')
-kmi = km.keymap_items.new('graph.frame_jump', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.mirror', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.handle_type', 'V', 'PRESS')
-kmi = km.keymap_items.new('graph.interpolation_type', 'T', 'PRESS')
-kmi = km.keymap_items.new('graph.clean', 'O', 'PRESS')
-kmi = km.keymap_items.new('graph.smooth', 'O', 'PRESS', alt=True)
-kmi = km.keymap_items.new('graph.sample', 'O', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.bake', 'C', 'PRESS', alt=True)
-kmi = km.keymap_items.new('graph.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('graph.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('graph.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.keyframe_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('graph.click_insert', 'ACTIONMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('graph.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('graph.view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('graph.view_selected', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('graph.fmodifier_add', 'M', 'PRESS', shift=True, ctrl=True)
-kmi.properties.only_active = False
-kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS')
-kmi.properties.mode = 'TIME_EXTEND'
-kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-
-# Map Node Editor
-km = kc.keymaps.new('Node Editor', space_type='NODE_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'ACTIONMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.tweak = True
-kmi = km.keymap_items.new('node.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True, alt=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('node.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True, alt=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('node.link', 'LEFTMOUSE', 'PRESS')
-kmi.properties.detach = False
-kmi = km.keymap_items.new('node.link', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.detach = True
-kmi = km.keymap_items.new('node.resize', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('node.add_reroute', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.links_cut', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.select_link_viewer', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('node.backimage_move', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS')
-kmi.properties.factor = 0.833329975605011
-kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS', alt=True)
-kmi.properties.factor = 1.2000000476837158
-kmi = km.keymap_items.new('node.backimage_sample', 'ACTIONMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS')
-kmi.properties.replace = False
-kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS', shift=True)
-kmi.properties.replace = True
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'NODE_MT_add'
-kmi = km.keymap_items.new('node.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.duplicate_move_keep_inputs', 'D', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('node.parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.join', 'J', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.hide_toggle', 'H', 'PRESS')
-kmi = km.keymap_items.new('node.mute_toggle', 'M', 'PRESS')
-kmi = km.keymap_items.new('node.preview_toggle', 'H', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.hide_socket_toggle', 'H', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('node.view_selected', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('node.select_box', 'B', 'PRESS')
-kmi.properties.tweak = False
-kmi = km.keymap_items.new('node.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('node.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('node.delete_reconnect', 'X', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('node.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('node.select_linked_to', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.select_linked_from', 'L', 'PRESS')
-kmi = km.keymap_items.new('node.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.select_same_type_step', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.prev = False
-kmi = km.keymap_items.new('node.select_same_type_step', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.prev = True
-kmi = km.keymap_items.new('node.find_node', 'F', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.group_separate', 'P', 'PRESS')
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS')
-kmi.properties.exit = False
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True)
-kmi.properties.exit = True
-kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.group_separate', 'P', 'PRESS')
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS')
-kmi.properties.exit = False
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True)
-kmi.properties.exit = True
-kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.group_separate', 'P', 'PRESS')
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS')
-kmi.properties.exit = False
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS', shift=True)
-kmi.properties.exit = True
-kmi = km.keymap_items.new('node.read_viewlayers', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.read_fullsamplelayers', 'R', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.render_changed', 'Z', 'PRESS')
-kmi = km.keymap_items.new('node.clipboard_copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.clipboard_paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.viewer_border', 'B', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.translate_attach', 'G', 'PRESS')
-kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_A', 'ANY')
-kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('node.move_detach_links', 'D', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.move_detach_links_release', 'EVT_TWEAK_A', 'ANY', alt=True)
-kmi = km.keymap_items.new('node.move_detach_links', 'EVT_TWEAK_S', 'ANY', alt=True)
-kmi = km.keymap_items.new('node.detach_translate_attach', 'F', 'PRESS', alt=True)
-
-# Map Info
-km = kc.keymaps.new('Info', space_type='INFO', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('info.select_pick', 'SELECTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('info.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('info.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('info.report_replay', 'R', 'PRESS')
-kmi = km.keymap_items.new('info.report_delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('info.report_delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('info.report_copy', 'C', 'PRESS', ctrl=True)
-
-# Map File Browser Main
-km = kc.keymaps.new('File Browser Main', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('file.execute', 'LEFTMOUSE', 'DOUBLE_CLICK')
-kmi.properties.need_active = True
-kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK')
-kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', alt=True)
-kmi.properties.extend = True
-kmi.properties.fill = True
-kmi = km.keymap_items.new('file.select', 'RIGHTMOUSE', 'CLICK')
-kmi.properties.open = False
-kmi = km.keymap_items.new('file.select', 'RIGHTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi.properties.open = False
-kmi = km.keymap_items.new('file.select', 'RIGHTMOUSE', 'CLICK', alt=True)
-kmi.properties.extend = True
-kmi.properties.fill = True
-kmi.properties.open = False
-kmi = km.keymap_items.new('file.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('file.refresh', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('file.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('file.select_box', 'EVT_TWEAK_L', 'ANY')
-kmi = km.keymap_items.new('file.rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('file.highlight', 'MOUSEMOVE', 'ANY', any=True)
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS')
-kmi.properties.increment = 1
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', shift=True)
-kmi.properties.increment = 10
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi.properties.increment = 100
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS')
-kmi.properties.increment = -1
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', shift=True)
-kmi.properties.increment = -10
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi.properties.increment = -100
-
-# Map Dopesheet
-km = kc.keymaps.new('Dopesheet', space_type='DOPESHEET_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi.properties.column = False
-kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.column = True
-kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi.properties.column = False
-kmi = km.keymap_items.new('action.clickselect', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.column = True
-kmi = km.keymap_items.new('action.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('action.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('action.select_leftright', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.mode = 'LEFT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('action.select_leftright', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.mode = 'RIGHT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('action.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi.properties.invert = False
-kmi = km.keymap_items.new('action.select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('action.select_box', 'B', 'PRESS')
-kmi.properties.axis_range = False
-kmi = km.keymap_items.new('action.select_box', 'B', 'PRESS', alt=True)
-kmi.properties.axis_range = True
-kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS')
-kmi.properties.mode = 'KEYS'
-kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS', ctrl=True)
-kmi.properties.mode = 'CFRA'
-kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS', shift=True)
-kmi.properties.mode = 'MARKERS_COLUMN'
-kmi = km.keymap_items.new('action.select_column', 'K', 'PRESS', alt=True)
-kmi.properties.mode = 'MARKERS_BETWEEN'
-kmi = km.keymap_items.new('action.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.select_linked', 'L', 'PRESS')
-kmi = km.keymap_items.new('action.frame_jump', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.mirror', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.handle_type', 'V', 'PRESS')
-kmi = km.keymap_items.new('action.interpolation_type', 'T', 'PRESS')
-kmi = km.keymap_items.new('action.extrapolation_type', 'E', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.keyframe_type', 'R', 'PRESS')
-kmi = km.keymap_items.new('action.clean', 'O', 'PRESS')
-kmi = km.keymap_items.new('action.sample', 'O', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('action.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('action.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.keyframe_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('action.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('action.view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('action.view_selected', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'G', 'PRESS')
-kmi.properties.mode = 'TIME_TRANSLATE'
-kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.mode = 'TIME_TRANSLATE'
-kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS')
-kmi.properties.mode = 'TIME_EXTEND'
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS')
-kmi.properties.mode = 'TIME_SCALE'
-kmi = km.keymap_items.new('transform.transform', 'T', 'PRESS', shift=True)
-kmi.properties.mode = 'TIME_SLIDE'
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-
-# Map NLA Editor
-km = kc.keymaps.new('NLA Editor', space_type='NLA_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('nla.select_leftright', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.mode = 'LEFT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.select_leftright', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.mode = 'RIGHT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi.properties.invert = False
-kmi = km.keymap_items.new('nla.select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('nla.select_box', 'B', 'PRESS')
-kmi.properties.axis_range = False
-kmi = km.keymap_items.new('nla.select_box', 'B', 'PRESS', alt=True)
-kmi.properties.axis_range = True
-kmi = km.keymap_items.new('nla.view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('nla.view_selected', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('nla.tweakmode_enter', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('nla.tweakmode_exit', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('nla.actionclip_add', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.transition_add', 'T', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.soundclip_add', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.meta_add', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.meta_remove', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('nla.duplicate', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('nla.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('nla.split', 'Y', 'PRESS')
-kmi = km.keymap_items.new('nla.mute_toggle', 'H', 'PRESS')
-kmi = km.keymap_items.new('nla.swap', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('nla.move_up', 'PAGE_UP', 'PRESS')
-kmi = km.keymap_items.new('nla.move_down', 'PAGE_DOWN', 'PRESS')
-kmi = km.keymap_items.new('nla.apply_scale', 'A', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('nla.clear_scale', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('nla.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.fmodifier_add', 'M', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('transform.transform', 'G', 'PRESS')
-kmi.properties.mode = 'TRANSLATION'
-kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.mode = 'TRANSLATION'
-kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS')
-kmi.properties.mode = 'TIME_EXTEND'
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS')
-kmi.properties.mode = 'TIME_SCALE'
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-
-# Map Sequencer
-km = kc.keymaps.new('Sequencer', space_type='SEQUENCE_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('sequencer.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('sequencer.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS')
-kmi.properties.type = 'SOFT'
-kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS', shift=True)
-kmi.properties.type = 'HARD'
-kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', shift=True, alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('sequencer.lock', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.unlock', 'L', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('sequencer.reassign_inputs', 'R', 'PRESS')
-kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', shift=True, alt=True)
-kmi.properties.adjust_length = True
-kmi = km.keymap_items.new('sequencer.offset_clear', 'O', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('sequencer.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('sequencer.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.images_separate', 'Y', 'PRESS')
-kmi = km.keymap_items.new('sequencer.meta_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('sequencer.meta_make', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.meta_separate', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('sequencer.view_selected', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_UP', 'PRESS')
-kmi.properties.next = True
-kmi.properties.center = False
-kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_DOWN', 'PRESS')
-kmi.properties.next = False
-kmi.properties.center = False
-kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_UP', 'PRESS', alt=True)
-kmi.properties.next = True
-kmi.properties.center = True
-kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_DOWN', 'PRESS', alt=True)
-kmi.properties.next = False
-kmi.properties.center = True
-kmi = km.keymap_items.new('sequencer.swap', 'LEFT_ARROW', 'PRESS', alt=True)
-kmi.properties.side = 'LEFT'
-kmi = km.keymap_items.new('sequencer.swap', 'RIGHT_ARROW', 'PRESS', alt=True)
-kmi.properties.side = 'RIGHT'
-kmi = km.keymap_items.new('sequencer.gap_remove', 'BACK_SPACE', 'PRESS')
-kmi.properties.all = False
-kmi = km.keymap_items.new('sequencer.gap_remove', 'BACK_SPACE', 'PRESS', shift=True)
-kmi.properties.all = True
-kmi = km.keymap_items.new('sequencer.gap_insert', 'EQUAL', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.swap_inputs', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'ONE', 'PRESS')
-kmi.properties.camera = 1
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'TWO', 'PRESS')
-kmi.properties.camera = 2
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'THREE', 'PRESS')
-kmi.properties.camera = 3
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'FOUR', 'PRESS')
-kmi.properties.camera = 4
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'FIVE', 'PRESS')
-kmi.properties.camera = 5
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'SIX', 'PRESS')
-kmi.properties.camera = 6
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'SEVEN', 'PRESS')
-kmi.properties.camera = 7
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'EIGHT', 'PRESS')
-kmi.properties.camera = 8
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'NINE', 'PRESS')
-kmi.properties.camera = 9
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'ZERO', 'PRESS')
-kmi.properties.camera = 10
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.linked_handle = True
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.linked_handle = True
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'MOUSE'
-kmi.properties.linked_time = True
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = True
-kmi = km.keymap_items.new('sequencer.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('sequencer.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('sequencer.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'SEQUENCER_MT_add'
-kmi = km.keymap_items.new('wm.call_menu', 'C', 'PRESS')
-kmi.properties.name = 'SEQUENCER_MT_change'
-kmi = km.keymap_items.new('wm.context_set_int', 'O', 'PRESS')
-kmi.properties.data_path = 'scene.sequence_editor.overlay_frame'
-kmi.properties.value = 0
-kmi = km.keymap_items.new('transform.seq_slide', 'G', 'PRESS')
-kmi = km.keymap_items.new('transform.seq_slide', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS')
-kmi.properties.mode = 'TIME_EXTEND'
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-
-# Map Clip Editor
-km = kc.keymaps.new('Clip Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.view_pan', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('clip.view_zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('clip.view_zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('clip.view_zoom', 'TRACKPADPAN', 'ANY', ctrl=True)
-kmi = km.keymap_items.new('clip.view_zoom_in', 'WHEELINMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_out', 'WHEELOUTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_in', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_out', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS', ctrl=True)
-kmi.properties.ratio = 8.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS', ctrl=True)
-kmi.properties.ratio = 4.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS', ctrl=True)
-kmi.properties.ratio = 2.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS', shift=True)
-kmi.properties.ratio = 8.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS', shift=True)
-kmi.properties.ratio = 4.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS', shift=True)
-kmi.properties.ratio = 2.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_1', 'PRESS')
-kmi.properties.ratio = 1.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS')
-kmi.properties.ratio = 0.5
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS')
-kmi.properties.ratio = 0.25
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS')
-kmi.properties.ratio = 0.125
-kmi = km.keymap_items.new('clip.view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('clip.view_all', 'F', 'PRESS')
-kmi.properties.fit_view = True
-kmi = km.keymap_items.new('clip.view_selected', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('clip.view_all', 'NDOF_BUTTON_FIT', 'PRESS')
-kmi = km.keymap_items.new('clip.view_ndof', 'NDOF_MOTION', 'ANY')
-kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, ctrl=True)
-kmi.properties.position = 'PATHSTART'
-kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, ctrl=True)
-kmi.properties.position = 'PATHEND'
-kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, alt=True)
-kmi.properties.position = 'FAILEDPREV'
-kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, alt=True)
-kmi.properties.position = 'PATHSTART'
-kmi = km.keymap_items.new('clip.change_frame', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('clip.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('clip.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('clip.select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('clip.select_circle', 'C', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', shift=True)
-kmi.properties.name = 'CLIP_MT_select_grouped'
-kmi = km.keymap_items.new('clip.select_lasso', 'EVT_TWEAK_A', 'ANY', ctrl=True, alt=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('clip.select_lasso', 'EVT_TWEAK_A', 'ANY', shift=True, ctrl=True, alt=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('clip.add_marker_slide', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('clip.delete_marker', 'DEL', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.delete_marker', 'X', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.slide_marker', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.disable_markers', 'D', 'PRESS', shift=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('clip.delete_track', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('clip.delete_track', 'X', 'PRESS')
-kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', ctrl=True)
-kmi.properties.action = 'LOCK'
-kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', alt=True)
-kmi.properties.action = 'UNLOCK'
-kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('clip.hide_tracks_clear', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('clip.join_tracks', 'J', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS')
-kmi.properties.name = 'CLIP_MT_tracking_specials'
-kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS')
-kmi.properties.data_path = 'space_data.lock_selection'
-kmi = km.keymap_items.new('wm.context_toggle', 'D', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.show_disabled'
-kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.show_marker_search'
-kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS')
-kmi.properties.data_path = 'space_data.use_mute_footage'
-kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS')
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True)
-kmi.properties.action = 'REMAINED'
-kmi.properties.clear_active = False
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True)
-kmi.properties.action = 'UPTO'
-kmi.properties.clear_active = False
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True)
-kmi.properties.action = 'ALL'
-kmi.properties.clear_active = False
-
-# Map Clip Graph Editor
-km = kc.keymaps.new('Clip Graph Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('clip.change_frame', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('clip.graph_select_all_markers', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('clip.graph_select_all_markers', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('clip.graph_select_box', 'B', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_delete_curve', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_delete_curve', 'X', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_delete_knot', 'DEL', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.graph_delete_knot', 'X', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.graph_view_all', 'HOME', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_center_current_frame', 'NUMPAD_PERIOD', 'PRESS')
-kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS')
-kmi.properties.data_path = 'space_data.lock_time_cursor'
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True)
-kmi.properties.action = 'REMAINED'
-kmi.properties.clear_active = True
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True)
-kmi.properties.action = 'UPTO'
-kmi.properties.clear_active = True
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True)
-kmi.properties.action = 'ALL'
-kmi.properties.clear_active = True
-kmi = km.keymap_items.new('clip.graph_disable_markers', 'D', 'PRESS', shift=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('transform.translate', 'G', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('transform.rotate', 'R', 'PRESS')
-
-# Map Image Paint
-km = kc.keymaps.new('Image Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS')
-kmi.properties.mode = 'NORMAL'
-kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'INVERT'
-kmi = km.keymap_items.new('paint.grab_clone', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 0
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 1
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 2
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 3
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 4
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 5
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 6
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 7
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 8
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS')
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 9
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 10
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 11
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 12
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 13
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 14
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 15
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 16
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 17
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 18
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True)
-kmi.properties.mode = 'image_paint'
-kmi.properties.index = 19
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color'
-kmi.properties.zoom_path = 'space_data.zoom'
-kmi.properties.image_id = 'tool_settings.image_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.image_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'W', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.weight'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight'
-kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.image_paint.brush'
-kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS')
-kmi.properties.data_path = 'image_paint_object.data.use_paint_mask'
-
-# Map Vertex Paint
-km = kc.keymaps.new('Vertex Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.vertex_paint', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.vertex_color_set', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 0
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 1
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 2
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 3
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 4
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 5
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 6
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 7
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 8
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS')
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 9
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 10
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 11
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 12
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 13
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 14
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 15
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 16
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 17
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 18
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True)
-kmi.properties.mode = 'vertex_paint'
-kmi.properties.index = 19
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.vertex_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.vertex_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'Q', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.weight'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight'
-kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.vertex_paint.brush'
-kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS')
-kmi.properties.data_path = 'vertex_paint_object.data.use_paint_mask'
-
-# Map Weight Paint
-km = kc.keymaps.new('Weight Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.weight_paint', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.weight_sample', 'ACTIONMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('paint.weight_sample_group', 'ACTIONMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('paint.weight_gradient', 'LEFTMOUSE', 'PRESS', alt=True)
-kmi.properties.type = 'LINEAR'
-kmi = km.keymap_items.new('paint.weight_gradient', 'LEFTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.type = 'RADIAL'
-kmi = km.keymap_items.new('paint.weight_set', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 0
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 1
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 2
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 3
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 4
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 5
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 6
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 7
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 8
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS')
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 9
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 10
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 11
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 12
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 13
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 14
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 15
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 16
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 17
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 18
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True)
-kmi.properties.mode = 'weight_paint'
-kmi.properties.index = 19
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.weight_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.weight_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'Q', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.weight'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight'
-kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.weight_paint.brush'
-kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS')
-kmi.properties.data_path = 'weight_paint_object.data.use_paint_mask'
-kmi = km.keymap_items.new('wm.context_toggle', 'V', 'PRESS')
-kmi.properties.data_path = 'weight_paint_object.data.use_paint_mask_vertex'
-kmi = km.keymap_items.new('paint.weight_from_bones', 'Q', 'PRESS')
-
-# Map Sculpt
-km = kc.keymaps.new('Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS')
-kmi.properties.mode = 'NORMAL'
-kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'INVERT'
-kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.mode = 'SMOOTH'
-kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', shift=True)
-kmi.properties.action = 'SHOW'
-kmi.properties.area = 'INSIDE'
-kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS')
-kmi.properties.action = 'HIDE'
-kmi.properties.area = 'INSIDE'
-kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', alt=True)
-kmi.properties.action = 'SHOW'
-kmi.properties.area = 'ALL'
-kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True)
-kmi.properties.level = 0
-kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True)
-kmi.properties.level = 1
-kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True)
-kmi.properties.level = 2
-kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True)
-kmi.properties.level = 3
-kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True)
-kmi.properties.level = 4
-kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True)
-kmi.properties.level = 5
-kmi = km.keymap_items.new('paint.mask_flood_fill', 'M', 'PRESS', alt=True)
-kmi.properties.mode = 'VALUE'
-kmi.properties.value = 0.0
-kmi = km.keymap_items.new('paint.mask_flood_fill', 'I', 'PRESS', ctrl=True)
-kmi.properties.mode = 'INVERT'
-kmi = km.keymap_items.new('sculpt.dynamic_topology_toggle', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.radial_control', 'D', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.sculpt.detail_size'
-kmi.properties.data_path_secondary = ''
-kmi.properties.use_secondary = ''
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_UP', 'PRESS')
-kmi.properties.level = 1
-kmi.properties.relative = True
-kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_DOWN', 'PRESS')
-kmi.properties.level = -1
-kmi.properties.relative = True
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 0
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 1
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 2
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 3
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 4
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 5
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 6
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 7
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 8
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS')
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 9
-kmi = km.keymap_items.new('brush.active_index_set', 'ONE', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 10
-kmi = km.keymap_items.new('brush.active_index_set', 'TWO', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 11
-kmi = km.keymap_items.new('brush.active_index_set', 'THREE', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 12
-kmi = km.keymap_items.new('brush.active_index_set', 'FOUR', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 13
-kmi = km.keymap_items.new('brush.active_index_set', 'FIVE', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 14
-kmi = km.keymap_items.new('brush.active_index_set', 'SIX', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 15
-kmi = km.keymap_items.new('brush.active_index_set', 'SEVEN', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 16
-kmi = km.keymap_items.new('brush.active_index_set', 'EIGHT', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 17
-kmi = km.keymap_items.new('brush.active_index_set', 'NINE', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 18
-kmi = km.keymap_items.new('brush.active_index_set', 'ZERO', 'PRESS', shift=True)
-kmi.properties.mode = 'sculpt'
-kmi.properties.index = 19
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'W', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.weight'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.weight'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_weight'
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'F', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.data_path_secondary = ''
-kmi.properties.use_secondary = ''
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('paint.brush_select', 'D', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'DRAW'
-kmi = km.keymap_items.new('paint.brush_select', 'S', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'SMOOTH'
-kmi = km.keymap_items.new('paint.brush_select', 'P', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'PINCH'
-kmi = km.keymap_items.new('paint.brush_select', 'I', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'INFLATE'
-kmi = km.keymap_items.new('paint.brush_select', 'G', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'GRAB'
-kmi = km.keymap_items.new('paint.brush_select', 'L', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'LAYER'
-kmi = km.keymap_items.new('paint.brush_select', 'T', 'PRESS', shift=True)
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'FLATTEN'
-kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'CLAY'
-kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS', shift=True)
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'CREASE'
-kmi = km.keymap_items.new('paint.brush_select', 'K', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'SNAKE_HOOK'
-kmi = km.keymap_items.new('paint.brush_select', 'M', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'MASK'
-kmi.properties.toggle = True
-kmi.properties.create_missing = True
-kmi = km.keymap_items.new('wm.context_menu_enum', 'A', 'PRESS')
-kmi.properties.data_path = 'tool_settings.sculpt.brush.stroke_method'
-kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.sculpt.brush.use_smooth_stroke'
-kmi = km.keymap_items.new('wm.context_menu_enum', 'R', 'PRESS')
-kmi.properties.data_path = 'tool_settings.sculpt.brush.texture_angle_source_random'
-
-# Map Mesh
-km = kc.keymaps.new('Mesh', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('mesh.loopcut_slide', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.inset', 'I', 'PRESS')
-kmi = km.keymap_items.new('mesh.bevel', 'B', 'PRESS', ctrl=True)
-kmi.properties.vertex_only = False
-kmi = km.keymap_items.new('mesh.bevel', 'B', 'PRESS', shift=True, ctrl=True)
-kmi.properties.vertex_only = True
-kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi = km.keymap_items.new('mesh.edgering_select', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi = km.keymap_items.new('mesh.edgering_select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = True
-kmi = km.keymap_items.new('mesh.shortest_path_pick', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('mesh.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.select_non_manifold', 'M', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('mesh.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS', alt=True)
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('mesh.faces_select_linked_flat', 'F', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('mesh.select_similar', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'TAB', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_select_mode'
-kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('mesh.reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.normals_make_consistent', 'N', 'PRESS', ctrl=True)
-kmi.properties.inside = False
-kmi = km.keymap_items.new('mesh.normals_make_consistent', 'N', 'PRESS', shift=True, ctrl=True)
-kmi.properties.inside = True
-kmi = km.keymap_items.new('view3d.edit_mesh_extrude_move_normal', 'E', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'E', 'PRESS', alt=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_extrude'
-kmi = km.keymap_items.new('transform.edge_crease', 'E', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mesh.spin', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.fill', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.beautify_fill', 'F', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('mesh.quads_convert_to_tris', 'T', 'PRESS', ctrl=True)
-kmi.properties.quad_method = 'BEAUTY'
-kmi.properties.ngon_method = 'BEAUTY'
-kmi = km.keymap_items.new('mesh.quads_convert_to_tris', 'T', 'PRESS', shift=True, ctrl=True)
-kmi.properties.quad_method = 'FIXED'
-kmi.properties.ngon_method = 'CLIP'
-kmi = km.keymap_items.new('mesh.tris_convert_to_quads', 'J', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.rip_move', 'V', 'PRESS')
-kmi = km.keymap_items.new('mesh.rip_move_fill', 'V', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.merge', 'M', 'PRESS', alt=True)
-kmi = km.keymap_items.new('transform.shrink_fatten', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.edge_face_add', 'F', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_mesh_add'
-kmi = km.keymap_items.new('mesh.separate', 'P', 'PRESS')
-kmi = km.keymap_items.new('mesh.split', 'Y', 'PRESS')
-kmi = km.keymap_items.new('mesh.vert_connect', 'J', 'PRESS')
-kmi = km.keymap_items.new('transform.vert_slide', 'V', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'ACTIONMOUSE', 'CLICK', ctrl=True)
-kmi.properties.rotate_source = True
-kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'ACTIONMOUSE', 'CLICK', shift=True, ctrl=True)
-kmi.properties.rotate_source = False
-kmi = km.keymap_items.new('wm.call_menu', 'X', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete'
-kmi = km.keymap_items.new('wm.call_menu', 'DEL', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete'
-kmi = km.keymap_items.new('mesh.knife_tool', 'K', 'PRESS')
-kmi.properties.use_occlude_geometry = True
-kmi.properties.only_selected = False
-kmi = km.keymap_items.new('mesh.knife_tool', 'K', 'PRESS', shift=True)
-kmi.properties.use_occlude_geometry = False
-kmi.properties.only_selected = True
-kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_specials'
-kmi = km.keymap_items.new('wm.call_menu', 'F', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_faces'
-kmi = km.keymap_items.new('wm.call_menu', 'E', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_edges'
-kmi = km.keymap_items.new('wm.call_menu', 'V', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_vertices'
-kmi = km.keymap_items.new('wm.call_menu', 'H', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_hook'
-kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_uv_map'
-kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_vertex_group'
-kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True)
-kmi.properties.level = 0
-kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True)
-kmi.properties.level = 1
-kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True)
-kmi.properties.level = 2
-kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True)
-kmi.properties.level = 3
-kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True)
-kmi.properties.level = 4
-kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True)
-kmi.properties.level = 5
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'CONNECTED'
-kmi = km.keymap_items.new('wm.context_set_value', 'ONE', 'PRESS')
-kmi.properties.data_path = 'tool_settings.mesh_select_mode'
-kmi.properties.value = '(True,False,False)'
-kmi = km.keymap_items.new('wm.context_set_value', 'TWO', 'PRESS')
-kmi.properties.data_path = 'tool_settings.mesh_select_mode'
-kmi.properties.value = '(False,True,False)'
-kmi = km.keymap_items.new('wm.context_set_value', 'THREE', 'PRESS')
-kmi.properties.data_path = 'tool_settings.mesh_select_mode'
-kmi.properties.value = '(False,False,True)'
-
-# Map Curve
-km = kc.keymaps.new('Curve', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'TOPBAR_MT_edit_curve_add'
-kmi = km.keymap_items.new('curve.handle_type_set', 'V', 'PRESS')
-kmi = km.keymap_items.new('curve.vertex_add', 'LEFTMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('curve.select_all', 'LEFTMOUSE', 'CLICK')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('curve.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('curve.select_row', 'R', 'PRESS', shift=True)
-kmi = km.keymap_items.new('curve.select_more', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('curve.select_less', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('curve.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS')
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('curve.separate', 'P', 'PRESS')
-kmi = km.keymap_items.new('curve.extrude_move', 'E', 'PRESS')
-kmi = km.keymap_items.new('curve.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('curve.make_segment', 'F', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('curve.cyclic_toggle', 'C', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('curve.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('curve.tilt_clear', 'T', 'PRESS', alt=True)
-kmi = km.keymap_items.new('transform.tilt', 'T', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', alt=True)
-kmi.properties.mode = 'CURVE_SHRINKFATTEN'
-kmi = km.keymap_items.new('curve.reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_curve_specials'
-kmi = km.keymap_items.new('wm.call_menu', 'H', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_hook'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'CONNECTED'
-
-# Map Armature
-km = kc.keymaps.new('Armature', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('armature.reveal', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.align', 'A', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('armature.calculate_roll', 'N', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.switch_direction', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.bone_primitive_add', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('armature.parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.parent_clear', 'P', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.select_all', 'LEFTMOUSE', 'CLICK')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('armature.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('armature.select_similar', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('armature.select_linked', 'L', 'PRESS')
-kmi = km.keymap_items.new('armature.delete', 'X', 'PRESS')
-kmi = km.keymap_items.new('armature.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('armature.duplicate_move', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('armature.extrude_move', 'E', 'PRESS')
-kmi = km.keymap_items.new('armature.extrude_forked', 'E', 'PRESS', shift=True)
-kmi = km.keymap_items.new('armature.click_extrude', 'LEFTMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('armature.fill', 'F', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.merge', 'M', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.separate', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_bone_options_toggle'
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_bone_options_enable'
-kmi = km.keymap_items.new('wm.call_menu', 'W', 'PRESS', alt=True)
-kmi.properties.name = 'VIEW3D_MT_bone_options_disable'
-kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('armature.bone_layers', 'M', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True)
-kmi.properties.mode = 'BONE_SIZE'
-kmi = km.keymap_items.new('transform.transform', 'R', 'PRESS', ctrl=True)
-kmi.properties.mode = 'BONE_ROLL'
-kmi = km.keymap_items.new('wm.call_menu', 'Q', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_armature_specials'
-
-# Map Metaball
-km = kc.keymaps.new('Metaball', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('object.metaball_add', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mball.reveal_metaelems', 'H', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS')
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS', shift=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('mball.delete_metaelems', 'X', 'PRESS')
-kmi = km.keymap_items.new('mball.delete_metaelems', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('mball.duplicate_metaelems', 'D', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mball.select_all', 'LEFTMOUSE', 'CLICK')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('mball.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'CONNECTED'
-
-# Map Lattice
-km = kc.keymaps.new('Lattice', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('lattice.select_all', 'LEFTMOUSE', 'CLICK')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('lattice.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('lattice.flip', 'F', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'H', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_hook'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-
-# Map Transform Modal Map
-km = kc.keymaps.new('Transform Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'LEFTMOUSE', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('TRANSLATE', 'W', 'PRESS')
-kmi = km.keymap_items.new_modal('ROTATE', 'E', 'PRESS')
-kmi = km.keymap_items.new_modal('RESIZE', 'R', 'PRESS')
-kmi = km.keymap_items.new_modal('SNAP_TOGGLE', 'TAB', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'LEFT_CTRL', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'LEFT_CTRL', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'RIGHT_CTRL', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'RIGHT_CTRL', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('ADD_SNAP', 'A', 'PRESS')
-kmi = km.keymap_items.new_modal('REMOVE_SNAP', 'A', 'PRESS', alt=True)
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'PAGE_UP', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'PAGE_DOWN', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new_modal('EDGESLIDE_EDGE_NEXT', 'WHEELDOWNMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new_modal('EDGESLIDE_PREV_NEXT', 'WHEELUPMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'PAGE_UP', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'PAGE_DOWN', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'WHEELUPMOUSE', 'PRESS', shift=True)
-
-# Map View3D Gesture Circle
-km = kc.keymaps.new('View3D Gesture Circle', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'ANY', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS')
-kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('NOP', 'MIDDLEMOUSE', 'RELEASE')
-kmi = km.keymap_items.new_modal('NOP', 'LEFTMOUSE', 'RELEASE')
-kmi = km.keymap_items.new_modal('SUBTRACT', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('SUBTRACT', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new_modal('ADD', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('ADD', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new_modal('SIZE', 'TRACKPADPAN', 'ANY')
-
-# Map Gesture Box
-km = kc.keymaps.new('Gesture Box', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('BEGIN', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('SELECT', 'RIGHTMOUSE', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('BEGIN', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'RELEASE')
diff --git a/release/scripts/presets/keyconfig/blender.py b/release/scripts/presets/keyconfig/blender.py
index 66db91d9186..e7b4c699be7 100644
--- a/release/scripts/presets/keyconfig/blender.py
+++ b/release/scripts/presets/keyconfig/blender.py
@@ -1,12 +1,107 @@
-
import os
-from bpy_extras.keyconfig_utils import (
- keyconfig_import_from_data,
- keyconfig_module_from_preset,
+import bpy
+from bpy.props import (
+ BoolProperty,
+ EnumProperty,
)
-_mod = keyconfig_module_from_preset(os.path.join("keymap_data", "blender_default"), __file__)
-keyconfig_data = _mod.generate_keymaps()
+dirname, filename = os.path.split(__file__)
+idname = os.path.splitext(filename)[0]
+
+def update_fn(_self, _context):
+ load()
+
+
+class Prefs(bpy.types.KeyConfigPreferences):
+ bl_idname = idname
+
+ select_mouse: EnumProperty(
+ name="Select Mouse",
+ items=(
+ ('LEFT', "Left", "Use left Mouse Button for selection"),
+ ('RIGHT', "Right", "Use Right Mouse Button for selection"),
+ ),
+ description=(
+ "Mouse button used for selection"
+ ),
+ default='RIGHT',
+ update=update_fn,
+ )
+ spacebar_action: EnumProperty(
+ name="Spacebar",
+ items=(
+ ('TOOL', "Tool-Bar",
+ "Open the popup tool-bar\n"
+ "When 'Space' is held and used as a modifier:\n"
+ "\u2022 Pressing the tools binding key switches to it immediately.\n"
+ "\u2022 Dragging the cursor over a tool and releasing activates it (like a pie menu).\n"
+ ),
+ ('PLAY', "Playback",
+ "Toggle animation playback"
+ ),
+ ),
+ description=(
+ "Action when 'Space' is pressed ('Shift-Space' is used for the other action)"
+ ),
+ default='TOOL',
+ update=update_fn,
+ )
+ use_select_all_toggle: BoolProperty(
+ name="Select All Toggles",
+ description=(
+ "Causes select-all ('A' key) to de-select in the case a selection exists"
+ ),
+ default=False,
+ update=update_fn,
+ )
+
+ use_v3d_tab_menu: BoolProperty(
+ name="Tab for Pie Menu",
+ description=(
+ "Causes tab to open pie menu (swaps 'Tab' / 'Ctrl-Tab')"
+ ),
+ default=False,
+ update=update_fn,
+ )
+
+ def draw(self, layout):
+ split = layout.split()
+ col = split.column(align=True)
+ col.label(text="Select With:")
+ col.row().prop(self, "select_mouse", expand=True)
+ col.prop(self, "use_select_all_toggle")
+
+ col = split.column(align=True)
+ col.label(text="Spacebar Action:")
+ col.row().prop(self, "spacebar_action", expand=True)
+
+ split = layout.split()
+ col = split.column()
+ col.label(text="3D View:")
+ col.prop(self, "use_v3d_tab_menu")
+ split.column()
+
+
+blender_default = bpy.utils.execfile(os.path.join(dirname, "keymap_data", "blender_default.py"))
+
+
+def load():
+ from bl_keymap_utils.io import keyconfig_init_from_data
+
+ kc = bpy.context.window_manager.keyconfigs.new(idname)
+ kc_prefs = kc.preferences
+
+ keyconfig_data = blender_default.generate_keymaps(
+ blender_default.Params(
+ select_mouse=kc_prefs.select_mouse,
+ spacebar_action=kc_prefs.spacebar_action,
+ use_select_all_toggle=kc_prefs.use_select_all_toggle,
+ use_v3d_tab_menu=kc_prefs.use_v3d_tab_menu,
+ ),
+ )
+ keyconfig_init_from_data(kc, keyconfig_data)
+
if __name__ == "__main__":
- keyconfig_import_from_data("Blender", keyconfig_data)
+ bpy.utils.register_class(Prefs)
+ load()
diff --git a/release/scripts/presets/keyconfig/blender_27x.py b/release/scripts/presets/keyconfig/blender_27x.py
index 69d84639a86..54f10e89402 100644
--- a/release/scripts/presets/keyconfig/blender_27x.py
+++ b/release/scripts/presets/keyconfig/blender_27x.py
@@ -1,11 +1,57 @@
import os
-from bpy_extras.keyconfig_utils import (
- keyconfig_import_from_data,
- keyconfig_module_from_preset,
+import bpy
+from bpy.props import (
+ EnumProperty,
)
-_mod = keyconfig_module_from_preset(os.path.join("keymap_data", "blender_default"), __file__)
-keyconfig_data = _mod.generate_keymaps(_mod.KeymapParams(legacy=True))
+dirname, filename = os.path.split(__file__)
+idname = os.path.splitext(filename)[0]
+
+def update_fn(_self, _context):
+ load()
+
+
+class Prefs(bpy.types.KeyConfigPreferences):
+ bl_idname = idname
+
+ select_mouse: EnumProperty(
+ name="Select Mouse",
+ items=(
+ ('LEFT', "Left", "Use left Mouse Button for selection"),
+ ('RIGHT', "Right", "Use Right Mouse Button for selection"),
+ ),
+ description=(
+ "Mouse button used for selection"
+ ),
+ default='RIGHT',
+ update=update_fn,
+ )
+
+ def draw(self, layout):
+ split = layout.split()
+ col = split.column()
+ col.label(text="Select With:")
+ col.row().prop(self, "select_mouse", expand=True)
+ split.column()
+
+
+blender_default = bpy.utils.execfile(os.path.join(dirname, "keymap_data", "blender_default.py"))
+
+def load():
+ from bl_keymap_utils.io import keyconfig_init_from_data
+
+ kc = bpy.context.window_manager.keyconfigs.new(idname)
+ kc_prefs = kc.preferences
+
+ keyconfig_data = blender_default.generate_keymaps(
+ blender_default.Params(
+ select_mouse=kc_prefs.select_mouse,
+ legacy=True,
+ ),
+ )
+ keyconfig_init_from_data(kc, keyconfig_data)
+
if __name__ == "__main__":
- keyconfig_import_from_data("blender_27x", keyconfig_data)
+ bpy.utils.register_class(Prefs)
+ load()
diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
index 653387bd303..af639fac1a1 100644
--- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py
+++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py
@@ -20,61 +20,85 @@
# ------------------------------------------------------------------------------
# Configurable Parameters
-class KeymapParams:
+class Params:
__slots__ = (
"apple",
"legacy",
"select_mouse",
+ "select_mouse_value",
"select_tweak",
- "select_click",
"action_mouse",
"action_tweak",
"tool_mouse",
"tool_tweak",
"context_menu_event",
"cursor_set_event",
- )
-
- def __init__(self, legacy=False, select_mode='AUTO'):
+ "cursor_tweak_event",
+
+ # User preferences.
+ #
+ # Swap 'Space/Shift-Space'.
+ "spacebar_action",
+ # Key toggles selection with 'A'.
+ "use_select_all_toggle",
+ # Use pie menu for tab by default (swap 'Tab/Ctrl-Tab').
+ "use_v3d_tab_menu",
+ )
+
+ def __init__(
+ self,
+ *,
+ legacy=False,
+ select_mouse='RIGHT',
+
+ # User preferences.
+ spacebar_action='TOOL',
+ use_select_all_toggle=False,
+ use_pie_on_tab=False,
+ use_v3d_tab_menu=False,
+ ):
import platform
+
self.apple = platform.system() == 'Darwin'
self.legacy = legacy
- if select_mode == 'LEFT':
- # Left mouse select uses Click event for selection. This is a little
- # less immediate, but is needed to distinguish between click and tweak
- # events on the same mouse buttons.
- self.select_mouse = 'LEFTMOUSE'
- self.select_tweak = 'EVT_TWEAK_L'
- self.select_click = 'CLICK'
- self.action_mouse = 'RIGHTMOUSE'
- self.action_tweak = 'EVT_TWEAK_R'
- self.tool_mouse = 'RIGHTMOUSE'
- self.tool_tweak = 'EVT_TWEAK_R'
- self.context_menu_event = {"type": 'RIGHTMOUSE', "value": 'PRESS'}
- self.cursor_set_event = {"type": 'RIGHTMOUSE', "value": 'PRESS', "ctrl": True}
- elif select_mode == 'RIGHT':
+ if select_mouse == 'RIGHT':
# Right mouse select.
self.select_mouse = 'RIGHTMOUSE'
+ self.select_mouse_value = 'PRESS'
self.select_tweak = 'EVT_TWEAK_R'
- self.select_click = 'PRESS'
self.action_mouse = 'LEFTMOUSE'
self.action_tweak = 'EVT_TWEAK_L'
self.tool_mouse = 'LEFTMOUSE'
self.tool_tweak = 'EVT_TWEAK_L'
self.context_menu_event = {"type": 'W', "value": 'PRESS'}
- self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'PRESS'}
+ self.cursor_set_event = {"type": 'LEFTMOUSE', "value": 'CLICK'}
+ self.cursor_tweak_event = None
else:
- # Automatic switching using special events, to be removed.
- self.select_mouse = 'SELECTMOUSE'
- self.select_tweak = 'EVT_TWEAK_S'
- self.select_click = 'PRESS'
- self.action_mouse = 'ACTIONMOUSE'
- self.action_tweak = 'EVT_TWEAK_A'
- self.tool_mouse = 'ACTIONMOUSE'
- self.tool_tweak = 'EVT_TWEAK_A'
- self.context_menu_event = {"type": 'W', "value": 'PRESS'}
- self.cursor_set_event = {"type": self.action_mouse, "value": 'PRESS'}
+ # Left mouse select uses Click event for selection. This is a little
+ # less immediate, but is needed to distinguish between click and tweak
+ # events on the same mouse buttons.
+ self.select_mouse = 'LEFTMOUSE'
+ self.select_mouse_value = 'CLICK'
+ self.select_tweak = 'EVT_TWEAK_L'
+ self.action_mouse = 'RIGHTMOUSE'
+ self.action_tweak = 'EVT_TWEAK_R'
+ self.tool_mouse = 'LEFTMOUSE'
+ self.tool_tweak = 'EVT_TWEAK_L'
+
+ if self.legacy:
+ self.context_menu_event = {"type": 'W', "value": 'PRESS'}
+ else:
+ self.context_menu_event = {"type": 'RIGHTMOUSE', "value": 'PRESS'}
+
+ self.cursor_set_event = {"type": 'RIGHTMOUSE', "value": 'PRESS', "shift": True}
+ self.cursor_tweak_event = {"type": 'EVT_TWEAK_R', "value": 'ANY', "shift": True}
+
+ # User preferences
+ self.spacebar_action = spacebar_action
+ self.use_select_all_toggle = use_select_all_toggle
+ self.use_v3d_tab_menu = use_v3d_tab_menu
+
# ------------------------------------------------------------------------------
# Constants
@@ -101,16 +125,27 @@ def op_panel(menu, kmi_args, kmi_data=()):
return ("wm.call_panel", kmi_args, {"properties": [("name", menu), *kmi_data]})
+def op_tool(tool, kmi_args):
+ return ("wm.tool_set_by_name", kmi_args, {"properties": [("name", tool)]})
+
+
# ------------------------------------------------------------------------------
# Keymap Templates
-def _template_items_select_actions(operator):
- return [
- (operator, {"type": 'A', "value": 'PRESS'}, {"properties": [("action", 'SELECT')]}),
- (operator, {"type": 'A', "value": 'PRESS', "alt": True}, {"properties": [("action", 'DESELECT')]}),
- (operator, {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
- (operator, {"type": 'A', "value": 'DOUBLE_CLICK'}, {"properties": [("action", 'DESELECT')]}),
- ]
+def _template_items_select_actions(params, operator):
+ if not params.use_select_all_toggle:
+ return [
+ (operator, {"type": 'A', "value": 'PRESS'}, {"properties": [("action", 'SELECT')]}),
+ (operator, {"type": 'A', "value": 'PRESS', "alt": True}, {"properties": [("action", 'DESELECT')]}),
+ (operator, {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
+ (operator, {"type": 'A', "value": 'DOUBLE_CLICK'}, {"properties": [("action", 'DESELECT')]}),
+ ]
+ else:
+ return [
+ (operator, {"type": 'A', "value": 'PRESS'}, {"properties": [("action", 'TOGGLE')]}),
+ (operator, {"type": 'A', "value": 'PRESS', "alt": True}, {"properties": [("action", 'DESELECT')]}),
+ (operator, {"type": 'I', "value": 'PRESS', "ctrl": True}, {"properties": [("action", 'INVERT')]}),
+ ]
def _template_items_object_subdivision_set():
@@ -203,7 +238,8 @@ def km_window(params):
("wm.read_homefile", {"type": 'N', "value": 'PRESS', "oskey": True}, None),
op_menu("TOPBAR_MT_file_open_recent", {"type": 'O', "value": 'PRESS', "shift": True, "oskey": True}),
("wm.open_mainfile", {"type": 'O', "value": 'PRESS', "oskey": True}, None),
- ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "oskey": True}, None),
+ ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "oskey": True},
+ {"properties": [("check_existing", False)]}),
("wm.save_as_mainfile", {"type": 'S', "value": 'PRESS', "shift": True, "oskey": True}, None),
("wm.quit_blender", {"type": 'Q', "value": 'PRESS', "oskey": True}, None),
("wm.search_menu", {"type": 'F', "value": 'PRESS', "oskey": True}, None),
@@ -214,13 +250,13 @@ def km_window(params):
("wm.read_homefile", {"type": 'N', "value": 'PRESS', "ctrl": True}, None),
op_menu("TOPBAR_MT_file_open_recent", {"type": 'O', "value": 'PRESS', "shift": True, "ctrl": True}),
("wm.open_mainfile", {"type": 'O', "value": 'PRESS', "ctrl": True}, None),
- ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "ctrl": True}, None),
+ ("wm.save_mainfile", {"type": 'S', "value": 'PRESS', "ctrl": True},
+ {"properties": [("check_existing", False)]}),
("wm.save_as_mainfile", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True}, None),
("wm.quit_blender", {"type": 'Q', "value": 'PRESS', "ctrl": True}, None),
# Quick menu and toolbar
op_menu("SCREEN_MT_user_menu", {"type": 'Q', "value": 'PRESS'}),
- ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS'}, None),
# Fast editor switching
*(
@@ -261,6 +297,18 @@ def km_window(params):
("wm.search_menu", {"type": 'F3', "value": 'PRESS'}, None),
op_menu("TOPBAR_MT_window_specials", {"type": 'F4', "value": 'PRESS'}),
])
+
+ if params.spacebar_action == 'TOOL':
+ items.append(
+ ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS'}, None),
+ )
+ elif params.spacebar_action == 'PLAY':
+ items.append(
+ ("wm.toolbar", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None),
+ )
+ else:
+ assert False
+
else:
# Old shorctus
items.extend([
@@ -275,6 +323,7 @@ def km_window(params):
{"properties": [("copy", True)]}),
("wm.window_fullscreen_toggle", {"type": 'F11', "value": 'PRESS', "alt": True}, None),
("wm.doc_view_manual_ui_context", {"type": 'F1', "value": 'PRESS', "alt": True}, None),
+ ("wm.search_menu", {"type": 'SPACE', "value": 'PRESS'}, None),
("wm.redraw_timer", {"type": 'T', "value": 'PRESS', "ctrl": True, "alt": True}, None),
("wm.debug_menu", {"type": 'D', "value": 'PRESS', "ctrl": True, "alt": True}, None),
])
@@ -536,7 +585,7 @@ def km_property_editor(_params):
return keymap
-def km_outliner(_params):
+def km_outliner(params):
items = []
keymap = (
"Outliner",
@@ -574,7 +623,7 @@ def km_outliner(_params):
("outliner.show_one_level", {"type": 'NUMPAD_PLUS', "value": 'PRESS'}, None),
("outliner.show_one_level", {"type": 'NUMPAD_MINUS', "value": 'PRESS'},
{"properties": [("open", False)]}),
- *_template_items_select_actions("outliner.select_all"),
+ *_template_items_select_actions(params, "outliner.select_all"),
("outliner.expanded_toggle", {"type": 'A', "value": 'PRESS', "shift": True}, None),
("outliner.keyingset_add_selected", {"type": 'K', "value": 'PRESS'}, None),
("outliner.keyingset_remove_selected", {"type": 'K', "value": 'PRESS', "alt": True}, None),
@@ -621,13 +670,13 @@ def km_uv_editor(params):
("wm.context_set_enum", {"type": 'FOUR', "value": 'PRESS'},
{"properties": [("data_path", 'tool_settings.uv_select_mode'), ("value", 'ISLAND')]}),
("uv.mark_seam", {"type": 'E', "value": 'PRESS', "ctrl": True}, None),
- ("uv.select", {"type": params.select_mouse, "value": params.select_click},
+ ("uv.select", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False)]}),
- ("uv.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("uv.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True)]}),
- ("uv.select_loop", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ ("uv.select_loop", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True},
{"properties": [("extend", False)]}),
- ("uv.select_loop", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("uv.select_loop", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True},
{"properties": [("extend", True)]}),
("uv.select_split", {"type": 'Y', "value": 'PRESS'}, None),
("uv.select_box", {"type": 'B', "value": 'PRESS'},
@@ -649,7 +698,7 @@ def km_uv_editor(params):
{"properties": [("extend", False), ("deselect", True)]}),
("uv.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("uv.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
- *_template_items_select_actions("uv.select_all"),
+ *_template_items_select_actions(params, "uv.select_all"),
("uv.select_pinned", {"type": 'P', "value": 'PRESS', "shift": True}, None),
op_menu("IMAGE_MT_uvs_weldalign", {"type": 'W', "value": 'PRESS', "shift": True}),
("uv.stitch", {"type": 'V', "value": 'PRESS'}, None),
@@ -663,7 +712,6 @@ def km_uv_editor(params):
("uv.hide", {"type": 'H', "value": 'PRESS', "shift": True},
{"properties": [("unselected", True)]}),
("uv.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None),
- ("uv.cursor_set", params.cursor_set_event, None),
op_menu_pie("IMAGE_MT_uvs_snap_pie", {"type": 'S', "value": 'PRESS', "shift": True}),
op_menu("IMAGE_MT_uvs_select_mode", {"type": 'TAB', "value": 'PRESS', "ctrl": True}),
*_template_items_proportional_editing(connected=False),
@@ -679,6 +727,18 @@ def km_uv_editor(params):
{"properties": [("data_path", 'tool_settings.snap_uv_element')]}),
])
+ # 3D cursor
+ if params.cursor_tweak_event:
+ items.extend([
+ ("uv.cursor_set", params.cursor_set_event, None),
+ ("transform.translate", params.cursor_tweak_event,
+ {"properties": [("release_confirm", True), ("cursor_transform", True)]}),
+ ])
+ else:
+ items.extend([
+ ("uv.cursor_set", params.cursor_set_event, None),
+ ])
+
if params.legacy:
items.extend([
("uv.minimize_stretch", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
@@ -688,6 +748,13 @@ def km_uv_editor(params):
{"properties": [("data_path", 'tool_settings.use_uv_sculpt')]}),
])
+ if params.select_mouse == 'LEFTMOUSE' and not params.legacy:
+ # Quick switch to select tool, since left select can't easily
+ # select with any tool active.
+ items.extend([
+ op_tool("Select Box", {"type": 'W', "value": 'PRESS'}),
+ ])
+
return keymap
@@ -750,9 +817,19 @@ def km_view3d(params):
{"items": items},
)
+ # 3D cursor
+ if params.cursor_tweak_event:
+ items.extend([
+ ("view3d.cursor3d", params.cursor_set_event, None),
+ ("transform.translate", params.cursor_tweak_event,
+ {"properties": [("release_confirm", True), ("cursor_transform", True)]}),
+ ])
+ else:
+ items.extend([
+ ("view3d.cursor3d", params.cursor_set_event, None),
+ ])
+
items.extend([
- # Cursor.
- ("view3d.cursor3d", {"type": params.action_mouse, "value": 'CLICK'}, None),
# Navigation.
("view3d.rotate", {"type": 'MIDDLEMOUSE', "value": 'PRESS'}, None),
("view3d.move", {"type": 'MIDDLEMOUSE', "value": 'PRESS', "shift": True}, None),
@@ -882,78 +959,19 @@ def km_view3d(params):
("view3d.view_axis", {"type": 'NDOF_BUTTON_TOP', "value": 'PRESS', "shift": True},
{"properties": [("type", 'TOP'), ("align_active", True)]}),
# Selection.
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", False),
- ("center", False),
- ("enumerate", False),
- ("object", False),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", True),
- ("center", False),
- ("enumerate", False),
- ("object", False),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", False),
- ("center", True),
- ("enumerate", False),
- ("object", True),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "alt": True},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", False),
- ("center", False),
- ("enumerate", True),
- ("object", False),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
- {"properties": [
- ("extend", True),
- ("deselect", False),
- ("toggle", True),
- ("center", True),
- ("enumerate", False),
- ("object", False),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", False),
- ("center", True),
- ("enumerate", True),
- ("object", False),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", True),
- ("center", False),
- ("enumerate", True),
- ("object", False),
- ], },),
- ("view3d.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True},
- {"properties": [
- ("extend", False),
- ("deselect", False),
- ("toggle", True),
- ("center", True),
- ("enumerate", True),
- ("object", False),
- ], },),
+ *(("view3d.select",
+ {"type": params.select_mouse, "value": params.select_mouse_value, **{m: True for m in mods}},
+ {"properties": [(c, True) for c in props]},
+ ) for props, mods in (
+ ((), ()),
+ (("toggle",), ("shift",)),
+ (("center", "object"), ("ctrl",)),
+ (("enumerate",), ("alt",)),
+ (("extend", "toggle", "center"), ("shift", "ctrl")),
+ (("center", "enumerate"), ("ctrl", "alt")),
+ (("toggle", "enumerate"), ("shift", "alt")),
+ (("toggle", "center", "enumerate"), ("shift", "ctrl", "alt")),
+ )),
("view3d.select_box", {"type": 'B', "value": 'PRESS'}, None),
("view3d.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True},
{"properties": [("mode", 'ADD')]}),
@@ -1004,7 +1022,9 @@ def km_view3d(params):
{"properties": [("data_path", 'space_data.show_gizmo_tool')]}),
op_menu_pie("VIEW3D_MT_pivot_pie", {"type": 'PERIOD', "value": 'PRESS'}),
op_menu_pie("VIEW3D_MT_orientations_pie", {"type": 'COMMA', "value": 'PRESS'}),
- op_menu_pie("VIEW3D_MT_shading_pie", {"type": 'Z', "value": 'PRESS'}),
+ op_menu_pie("VIEW3D_MT_shading_pie", {"type": 'D', "value": 'PRESS'}),
+ ("wm.context_toggle_enum", {"type": 'Z', "value": 'PRESS'},
+ {"properties": [("data_path", 'space_data.shading.type'), ("value_1", 'WIREFRAME'), ("value_2", 'SOLID')]}),
("view3d.toggle_shading", {"type": 'Z', "value": 'PRESS', "alt": True},
{"properties": [("type", 'MATERIAL')]}),
("view3d.toggle_shading", {"type": 'Z', "value": 'PRESS', "shift": True},
@@ -1071,6 +1091,13 @@ def km_view3d(params):
{"properties": [("data_path", 'space_data.shading.type'), ("value_1", 'MATERIAL'), ("value_2", 'SOLID')]}),
])
+ if params.select_mouse == 'LEFTMOUSE' and not params.legacy:
+ # Quick switch to select tool, since left select can't easily
+ # select with any tool active.
+ items.extend([
+ op_tool("Select Box", {"type": 'W', "value": 'PRESS'}),
+ ])
+
return keymap
@@ -1089,14 +1116,14 @@ def km_mask_editing(params):
("wm.context_toggle", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'tool_settings.use_proportional_edit_mask')]}),
("mask.add_vertex_slide", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True}, None),
- ("mask.add_feather_vertex_slide", {"type": params.action_mouse, "value": 'PRESS', "shift": True}, None),
+ ("mask.add_feather_vertex_slide", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "ctrl": True}, None),
("mask.delete", {"type": 'X', "value": 'PRESS'}, None),
("mask.delete", {"type": 'DEL', "value": 'PRESS'}, None),
- ("mask.select", {"type": params.select_mouse, "value": params.select_click},
+ ("mask.select", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False), ("deselect", False), ("toggle", False)]}),
- ("mask.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("mask.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", False), ("deselect", False), ("toggle", True)]}),
- *_template_items_select_actions("mask.select_all"),
+ *_template_items_select_actions(params, "mask.select_all"),
("mask.select_linked", {"type": 'L', "value": 'PRESS', "ctrl": True}, None),
("mask.select_linked_pick", {"type": 'L', "value": 'PRESS'},
{"properties": [("deselect", False)]}),
@@ -1115,7 +1142,7 @@ def km_mask_editing(params):
{"properties": [("unselected", False)]}),
("mask.hide_view_set", {"type": 'H', "value": 'PRESS', "shift": True},
{"properties": [("unselected", True)]}),
- ("clip.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("clip.select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("extend", False)]}),
("mask.cyclic_toggle", {"type": 'C', "value": 'PRESS', "alt": True}, None),
("mask.slide_point", {"type": params.action_mouse, "value": 'PRESS'}, None),
@@ -1129,7 +1156,6 @@ def km_mask_editing(params):
("mask.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None),
("mask.copy_splines", {"type": 'C', "value": 'PRESS', "ctrl": True}, None),
("mask.paste_splines", {"type": 'V', "value": 'PRESS', "ctrl": True}, None),
- ("uv.cursor_set", params.cursor_set_event, None),
("transform.translate", {"type": 'G', "value": 'PRESS'}, None),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'}, None),
("transform.resize", {"type": 'S', "value": 'PRESS'}, None),
@@ -1138,6 +1164,18 @@ def km_mask_editing(params):
{"properties": [("mode", 'MASK_SHRINKFATTEN')]}),
])
+ # 3D cursor
+ if params.cursor_tweak_event:
+ items.extend([
+ ("uv.cursor_set", params.cursor_set_event, None),
+ ("transform.translate", params.cursor_tweak_event,
+ {"properties": [("release_confirm", True), ("cursor_transform", True)]}),
+ ])
+ else:
+ items.extend([
+ ("uv.cursor_set", params.cursor_set_event, None),
+ ])
+
return keymap
@@ -1153,15 +1191,15 @@ def km_markers(params):
("marker.add", {"type": 'M', "value": 'PRESS'}, None),
("marker.move", {"type": params.select_tweak, "value": 'ANY'}, None),
("marker.duplicate", {"type": 'D', "value": 'PRESS', "shift": True}, None),
- ("marker.select", {"type": params.select_mouse, "value": params.select_click}, None),
- ("marker.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value}, None),
+ ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True)]}),
- ("marker.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("extend", False), ("camera", True)]}),
- ("marker.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("marker.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("extend", True), ("camera", True)]}),
("marker.select_box", {"type": 'B', "value": 'PRESS'}, None),
- *_template_items_select_actions("marker.select_all"),
+ *_template_items_select_actions(params, "marker.select_all"),
("marker.delete", {"type": 'X', "value": 'PRESS'}, None),
("marker.delete", {"type": 'DEL', "value": 'PRESS'}, None),
("marker.rename", {"type": 'M', "value": 'PRESS', "ctrl": True}, None),
@@ -1189,6 +1227,8 @@ def km_graph_editor_generic(_params):
("graph.hide", {"type": 'H', "value": 'PRESS', "shift": True},
{"properties": [("unselected", True)]}),
("graph.reveal", {"type": 'H', "value": 'PRESS', "alt": True}, None),
+ ("wm.context_set_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True},
+ {"properties": [("data_path", 'area.type'), ("value", 'DOPESHEET_EDITOR')]}),
])
return keymap
@@ -1205,28 +1245,28 @@ def km_graph_editor(params):
items.extend([
("wm.context_toggle", {"type": 'H', "value": 'PRESS', "ctrl": True},
{"properties": [("data_path", 'space_data.show_handles')]}),
- ("graph.cursor_set", params.cursor_set_event, None),
- ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click},
+ ("graph.cursor_set", {"type": params.action_mouse, "value": 'PRESS'}, None),
+ ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False), ("column", False), ("curves", False)]}),
- ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True},
{"properties": [("extend", False), ("column", True), ("curves", False)]}),
- ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True), ("column", False), ("curves", False)]}),
- ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True},
{"properties": [("extend", True), ("column", True), ("curves", False)]}),
- ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True},
+ ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True, "alt": True},
{"properties": [("extend", False), ("column", False), ("curves", True)]}),
- ("graph.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True},
+ ("graph.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True, "alt": True},
{"properties": [("extend", True), ("column", False), ("curves", True)]}),
- ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("mode", 'CHECK'), ("extend", False)]}),
- ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("graph.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("mode", 'CHECK'), ("extend", True)]}),
("graph.select_leftright", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
{"properties": [("mode", 'LEFT'), ("extend", False)]}),
("graph.select_leftright", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
{"properties": [("mode", 'RIGHT'), ("extend", False)]}),
- *_template_items_select_actions("graph.select_all"),
+ *_template_items_select_actions(params, "graph.select_all"),
("graph.select_box", {"type": 'B', "value": 'PRESS'},
{"properties": [("axis_range", False), ("include_handles", False)]}),
("graph.select_box", {"type": 'B', "value": 'PRESS', "alt": True},
@@ -1426,43 +1466,43 @@ def km_node_editor(params):
)
items.extend([
- ("node.select", {"type": params.action_mouse, "value": 'PRESS'},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS'},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "alt": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "alt": True},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True, "alt": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True, "alt": True},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "ctrl": True, "alt": True},
{"properties": [("extend", False)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "ctrl": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "alt": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "alt": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "alt": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.action_mouse, "value": 'PRESS', "shift": True, "ctrl": True, "alt": True},
+ ("node.select", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True},
{"properties": [("extend", True)]}),
- ("node.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True},
+ ("node.select", {"type": params.select_mouse, "value": 'PRESS', "shift": True, "ctrl": True, "alt": True},
{"properties": [("extend", True)]}),
("node.select_box", {"type": params.select_tweak, "value": 'ANY'},
{"properties": [("tweak", True)]}),
- ("node.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True, "alt": True},
+ ("node.select_lasso", {"type": 'EVT_TWEAK_L', "value": 'ANY', "ctrl": True, "alt": True},
{"properties": [("deselect", False)]}),
- ("node.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True},
+ ("node.select_lasso", {"type": 'EVT_TWEAK_L', "value": 'ANY', "shift": True, "ctrl": True, "alt": True},
{"properties": [("deselect", True)]}),
("node.select_circle", {"type": 'C', "value": 'PRESS'}, None),
("node.link", {"type": 'LEFTMOUSE', "value": 'PRESS'},
@@ -1504,7 +1544,7 @@ def km_node_editor(params):
("node.delete", {"type": 'DEL', "value": 'PRESS'}, None),
("node.delete_reconnect", {"type": 'X', "value": 'PRESS', "ctrl": True}, None),
("node.delete_reconnect", {"type": 'DEL', "value": 'PRESS', "ctrl": True}, None),
- *_template_items_select_actions("node.select_all"),
+ *_template_items_select_actions(params, "node.select_all"),
("node.select_linked_to", {"type": 'L', "value": 'PRESS', "shift": True}, None),
("node.select_linked_from", {"type": 'L', "value": 'PRESS'}, None),
("node.select_grouped", {"type": 'G', "value": 'PRESS', "shift": True},
@@ -1530,11 +1570,11 @@ def km_node_editor(params):
("node.viewer_border", {"type": 'B', "value": 'PRESS', "ctrl": True}, None),
("node.clear_viewer_border", {"type": 'B', "value": 'PRESS', "ctrl": True, "alt": True}, None),
("node.translate_attach", {"type": 'G', "value": 'PRESS'}, None),
- ("node.translate_attach", {"type": params.action_tweak, "value": 'ANY'}, None),
+ ("node.translate_attach", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
("node.translate_attach", {"type": params.select_tweak, "value": 'ANY'}, None),
("transform.translate", {"type": 'G', "value": 'PRESS'},
{"properties": [("release_confirm", True)]}),
- ("transform.translate", {"type": params.action_tweak, "value": 'ANY'},
+ ("transform.translate", {"type": 'EVT_TWEAK_L', "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
("transform.translate", {"type": params.select_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
@@ -1567,7 +1607,7 @@ def km_info(params):
)
items.extend([
- ("info.select_pick", {"type": params.select_mouse, "value": params.select_click}, None),
+ ("info.select_pick", {"type": params.select_mouse, "value": params.select_mouse_value}, None),
("info.select_all_toggle", {"type": 'A', "value": 'PRESS'}, None),
("info.select_box", {"type": 'B', "value": 'PRESS'}, None),
("info.report_replay", {"type": 'R', "value": 'PRESS'}, None),
@@ -1720,6 +1760,8 @@ def km_dopesheet_generic(_params):
items.extend([
("action.properties", {"type": 'N', "value": 'PRESS'}, None),
+ ("wm.context_set_enum", {"type": 'TAB', "value": 'PRESS', "ctrl": True},
+ {"properties": [("data_path", 'area.type'), ("value", 'GRAPH_EDITOR')]})
])
return keymap
@@ -1734,27 +1776,27 @@ def km_dopesheet(params):
)
items.extend([
- ("action.clickselect", {"type": params.select_mouse, "value": params.select_click},
+ ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False), ("column", False), ("channel", False)]}),
- ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True},
{"properties": [("extend", False), ("column", True), ("channel", False)]}),
- ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True), ("column", False), ("channel", False)]}),
- ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True},
{"properties": [("extend", True), ("column", True), ("channel", False)]}),
- ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True},
+ ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True, "alt": True},
{"properties": [("extend", False), ("column", False), ("channel", True)]}),
- ("action.clickselect", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True},
+ ("action.clickselect", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True, "alt": True},
{"properties": [("extend", True), ("column", False), ("channel", True)]}),
- ("action.select_leftright", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("action.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("mode", 'CHECK'), ("extend", False)]}),
- ("action.select_leftright", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("action.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("mode", 'CHECK'), ("extend", True)]}),
("action.select_leftright", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
{"properties": [("mode", 'LEFT'), ("extend", False)]}),
("action.select_leftright", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
{"properties": [("mode", 'RIGHT'), ("extend", False)]}),
- *_template_items_select_actions("action.select_all"),
+ *_template_items_select_actions(params, "action.select_all"),
("action.select_box", {"type": 'B', "value": 'PRESS'},
{"properties": [("axis_range", False)]}),
("action.select_box", {"type": 'B', "value": 'PRESS', "alt": True},
@@ -1882,19 +1924,19 @@ def km_nla_editor(params):
)
items.extend([
- ("nla.click_select", {"type": params.select_mouse, "value": params.select_click},
+ ("nla.click_select", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False)]}),
- ("nla.click_select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("nla.click_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True)]}),
- ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("mode", 'CHECK'), ("extend", False)]}),
- ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("nla.select_leftright", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("mode", 'CHECK'), ("extend", True)]}),
("nla.select_leftright", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
{"properties": [("mode", 'LEFT'), ("extend", False)]}),
("nla.select_leftright", {"type": 'RIGHT_BRACKET', "value": 'PRESS'},
{"properties": [("mode", 'RIGHT'), ("extend", False)]}),
- *_template_items_select_actions("nla.select_all"),
+ *_template_items_select_actions(params, "nla.select_all"),
("nla.select_box", {"type": 'B', "value": 'PRESS'},
{"properties": [("axis_range", False)]}),
("nla.select_box", {"type": 'B', "value": 'PRESS', "alt": True},
@@ -2166,7 +2208,7 @@ def km_sequencer(params):
)
items.extend([
- *_template_items_select_actions("sequencer.select_all"),
+ *_template_items_select_actions(params, "sequencer.select_all"),
("sequencer.cut", {"type": 'K', "value": 'PRESS'},
{"properties": [("type", 'SOFT')]}),
("sequencer.cut", {"type": 'K', "value": 'PRESS', "shift": True},
@@ -2225,17 +2267,17 @@ def km_sequencer(params):
for i in range(10)
)
),
- ("sequencer.select", {"type": params.select_mouse, "value": params.select_click},
+ ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False), ("linked_handle", False), ("left_right", 'NONE'), ("linked_time", False)]}),
- ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True), ("linked_handle", False), ("left_right", 'NONE'), ("linked_time", False)]}),
- ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True},
{"properties": [("extend", False), ("linked_handle", True), ("left_right", 'NONE'), ("linked_time", False)]}),
- ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True},
{"properties": [("extend", True), ("linked_handle", True), ("left_right", 'NONE'), ("linked_time", False)]}),
- ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("extend", False), ("linked_handle", False), ("left_right", 'MOUSE'), ("linked_time", True)]}),
- ("sequencer.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("sequencer.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("extend", True), ("linked_handle", False), ("left_right", 'NONE'), ("linked_time", True)]}),
("sequencer.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("sequencer.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
@@ -2450,11 +2492,11 @@ def km_clip_editor(params):
("clip.frame_jump", {"type": 'RIGHT_ARROW', "value": 'PRESS', "shift": True, "alt": True},
{"properties": [("position", 'PATHSTART')]}),
("clip.change_frame", {"type": 'LEFTMOUSE', "value": 'PRESS'}, None),
- ("clip.select", {"type": params.select_mouse, "value": params.select_click},
+ ("clip.select", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False)]}),
- ("clip.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("clip.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True)]}),
- *_template_items_select_actions("clip.select_all"),
+ *_template_items_select_actions(params, "clip.select_all"),
("clip.select_box", {"type": 'B', "value": 'PRESS'}, None),
("clip.select_circle", {"type": 'C', "value": 'PRESS'}, None),
op_menu("CLIP_MT_select_grouped", {"type": 'G', "value": 'PRESS', "shift": True}),
@@ -2521,11 +2563,11 @@ def km_clip_graph_editor(params):
items.extend([
("clip.change_frame", {"type": params.action_mouse, "value": 'PRESS'}, None),
- ("clip.graph_select", {"type": params.select_mouse, "value": params.select_click},
+ ("clip.graph_select", {"type": params.select_mouse, "value": params.select_mouse_value},
{"properties": [("extend", False)]}),
- ("clip.graph_select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("clip.graph_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True)]}),
- *_template_items_select_actions("clip.graph_select_all_markers"),
+ *_template_items_select_actions(params, "clip.graph_select_all_markers"),
("clip.graph_select_box", {"type": 'B', "value": 'PRESS'}, None),
("clip.graph_delete_curve", {"type": 'X', "value": 'PRESS'}, None),
("clip.graph_delete_curve", {"type": 'DEL', "value": 'PRESS'}, None),
@@ -2605,8 +2647,18 @@ def km_frames(params):
if not params.legacy:
# New playback
+ if params.spacebar_action == 'TOOL':
+ items.append(
+ ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None),
+ )
+ elif params.spacebar_action == 'PLAY':
+ items.append(
+ ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS'}, None),
+ )
+ else:
+ assert False
+
items.extend([
- ("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True}, None),
("screen.animation_play", {"type": 'SPACE', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("reverse", True)]}),
])
@@ -2685,7 +2737,7 @@ def km_animation_channels(params):
# Find (setting the name filter).
("anim.channels_find", {"type": 'F', "value": 'PRESS', "ctrl": True}, None),
# Selection.
- *_template_items_select_actions("anim.channels_select_all"),
+ *_template_items_select_actions(params, "anim.channels_select_all"),
("anim.channels_select_box", {"type": 'B', "value": 'PRESS'}, None),
("anim.channels_select_box", {"type": 'EVT_TWEAK_L', "value": 'ANY'}, None),
# Delete.
@@ -2726,7 +2778,7 @@ def km_animation_channels(params):
# Modes
-def km_grease_pencil(_params):
+def km_grease_pencil(params):
items = []
keymap = (
"Grease Pencil",
@@ -2734,29 +2786,28 @@ def km_grease_pencil(_params):
{"items": items},
)
- items.extend([
- # Draw
- ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "key_modifier": 'D'},
- {"properties": [("mode", 'DRAW'), ("wait_for_input", False)]}),
- # Draw - straight lines
- ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True, "key_modifier": 'D'},
- {"properties": [("mode", 'DRAW_STRAIGHT'), ("wait_for_input", False)]}),
- # Draw - poly lines
- ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "alt": True, "key_modifier": 'D'},
- {"properties": [("mode", 'DRAW_POLY'), ("wait_for_input", False)]}),
- # Erase
- ("gpencil.annotate", {"type": 'RIGHTMOUSE', "value": 'PRESS', "key_modifier": 'D'},
- {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
+ if params.legacy:
+ items.extend([
+ # Draw
+ ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "key_modifier": 'D'},
+ {"properties": [("mode", 'DRAW'), ("wait_for_input", False)]}),
+ # Draw - straight lines
+ ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "alt": True, "key_modifier": 'D'},
+ {"properties": [("mode", 'DRAW_STRAIGHT'), ("wait_for_input", False)]}),
+ # Draw - poly lines
+ ("gpencil.annotate", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True, "alt": True, "key_modifier": 'D'},
+ {"properties": [("mode", 'DRAW_POLY'), ("wait_for_input", False)]}),
+ # Erase
+ ("gpencil.annotate", {"type": 'RIGHTMOUSE', "value": 'PRESS', "key_modifier": 'D'},
+ {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
- # Enter edit mode
- ("gpencil.editmode_toggle", {"type": 'TAB', "value": 'PRESS', "key_modifier": 'D'}, None),
- # Add blank frame (B because it's easy to reach from D).
- ("gpencil.blank_frame_add", {"type": 'B', "value": 'PRESS', "key_modifier": 'D'}, None),
- # Delete active frame - for easier video tutorials/review sessions.
- # This works even when not in edit mode.
- ("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "key_modifier": 'D'}, None),
- ("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "key_modifier": 'D'}, None),
- ])
+ # Add blank frame (B because it's easy to reach from D).
+ ("gpencil.blank_frame_add", {"type": 'B', "value": 'PRESS', "key_modifier": 'D'}, None),
+ # Delete active frame - for easier video tutorials/review sessions.
+ # This works even when not in edit mode.
+ ("gpencil.active_frames_delete_all", {"type": 'X', "value": 'PRESS', "key_modifier": 'D'}, None),
+ ("gpencil.active_frames_delete_all", {"type": 'DEL', "value": 'PRESS', "key_modifier": 'D'}, None),
+ ])
return keymap
@@ -2764,7 +2815,7 @@ def km_grease_pencil(_params):
def _grease_pencil_selection(params):
return [
# Select all
- *_template_items_select_actions("gpencil.select_all"),
+ *_template_items_select_actions(params, "gpencil.select_all"),
# Circle select
("gpencil.select_circle", {"type": 'C', "value": 'PRESS'}, None),
# Box select
@@ -2783,12 +2834,12 @@ def _grease_pencil_selection(params):
{"properties": [("mode", 'ADD')]}),
("gpencil.select_lasso", {"type": params.action_tweak, "value": 'ANY', "shift": True, "ctrl": True, "alt": True},
{"properties": [("mode", 'SUB')]}),
- ("gpencil.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True), ("toggle", True)]}),
# Whole stroke select
- ("gpencil.select", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True},
{"properties": [("entire_strokes", True)]}),
- ("gpencil.select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True},
{"properties": [("extend", True), ("entire_strokes", True)]}),
# Select linked
("gpencil.select_linked", {"type": 'L', "value": 'PRESS'}, None),
@@ -2825,7 +2876,7 @@ def km_grease_pencil_stroke_edit_mode(params):
("gpencil.interpolate", {"type": 'E', "value": 'PRESS', "ctrl": True, "alt": True}, None),
("gpencil.interpolate_sequence", {"type": 'E', "value": 'PRESS', "shift": True, "ctrl": True}, None),
# Normal select
- ("gpencil.select", {"type": params.select_mouse, "value": params.select_click}, None),
+ ("gpencil.select", {"type": params.select_mouse, "value": params.select_mouse_value}, None),
# Selection
*_grease_pencil_selection(params),
# Duplicate and move selected points
@@ -3028,11 +3079,11 @@ def km_grease_pencil_stroke_sculpt_mode(params):
# Selection
*_grease_pencil_selection(params),
# Painting
- ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'},
+ ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS'},
{"properties": [("wait_for_input", False)]}),
- ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
+ ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("wait_for_input", False)]}),
- ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
+ ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": [("wait_for_input", False)]}),
# Brush strength
("wm.radial_control", {"type": 'F', "value": 'PRESS', "shift": True},
@@ -3061,9 +3112,9 @@ def km_grease_pencil_stroke_weight_mode(params):
# Selection
*_grease_pencil_selection(params),
# Painting
- ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
+ ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "ctrl": True},
{"properties": [("wait_for_input", False)]}),
- ("gpencil.brush_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
+ ("gpencil.sculpt_paint", {"type": 'LEFTMOUSE', "value": 'PRESS', "shift": True},
{"properties": [("wait_for_input", False)]}),
# Brush strength
("wm.radial_control", {"type": 'F', "value": 'PRESS', "shift": True},
@@ -3078,7 +3129,7 @@ def km_grease_pencil_stroke_weight_mode(params):
return keymap
-def km_face_mask(_params):
+def km_face_mask(params):
items = []
keymap = (
"Face Mask",
@@ -3087,7 +3138,7 @@ def km_face_mask(_params):
)
items.extend([
- *_template_items_select_actions("paint.face_select_all"),
+ *_template_items_select_actions(params, "paint.face_select_all"),
("paint.face_select_hide", {"type": 'H', "value": 'PRESS'},
{"properties": [("unselected", False)]}),
("paint.face_select_hide", {"type": 'H', "value": 'PRESS', "shift": True},
@@ -3112,7 +3163,7 @@ def km_weight_paint_vertex_selection(params):
)
items.extend([
- *_template_items_select_actions("paint.vert_select_all"),
+ *_template_items_select_actions(params, "paint.vert_select_all"),
("view3d.select_box", {"type": 'B', "value": 'PRESS'}, None),
("view3d.select_lasso", {"type": params.action_tweak, "value": 'ANY', "ctrl": True},
{"properties": [("mode", 'ADD')]}),
@@ -3151,7 +3202,7 @@ def km_pose(params):
{"properties": [("flipped", False)]}),
("pose.paste", {"type": 'V', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("flipped", True)]}),
- *_template_items_select_actions("pose.select_all"),
+ *_template_items_select_actions(params, "pose.select_all"),
("pose.select_parent", {"type": 'P', "value": 'PRESS', "shift": True}, None),
("pose.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
{"properties": [("direction", 'PARENT'), ("extend", False)]}),
@@ -3217,7 +3268,7 @@ def km_object_mode(params):
op_menu_pie("VIEW3D_MT_proportional_editing_falloff_pie", {"type": 'O', "value": 'PRESS', "shift": True}),
("wm.context_toggle", {"type": 'O', "value": 'PRESS'},
{"properties": [("data_path", 'tool_settings.use_proportional_edit_objects')]}),
- *_template_items_select_actions("object.select_all"),
+ *_template_items_select_actions(params, "object.select_all"),
("object.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("object.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
("object.select_linked", {"type": 'L', "value": 'PRESS', "shift": True}, None),
@@ -3243,9 +3294,9 @@ def km_object_mode(params):
("object.delete", {"type": 'X', "value": 'PRESS', "shift": True},
{"properties": [("use_global", True)]}),
("object.delete", {"type": 'DEL', "value": 'PRESS'},
- {"properties": [("use_global", False)]}),
+ {"properties": [("use_global", False), ("confirm", False)]}),
("object.delete", {"type": 'DEL', "value": 'PRESS', "shift": True},
- {"properties": [("use_global", True)]}),
+ {"properties": [("use_global", True), ("confirm", False)]}),
op_menu("VIEW3D_MT_add", {"type": 'A', "value": 'PRESS', "shift": True}),
op_menu("VIEW3D_MT_object_apply", {"type": 'A', "value": 'PRESS', "ctrl": True}),
op_menu("VIEW3D_MT_make_links", {"type": 'L', "value": 'PRESS', "ctrl": True}),
@@ -3309,8 +3360,8 @@ def km_paint_curve(params):
items.extend([
("paintcurve.add_point_slide", {"type": params.action_mouse, "value": 'PRESS', "ctrl": True}, None),
- ("paintcurve.select", {"type": params.select_mouse, "value": params.select_click}, None),
- ("paintcurve.select", {"type": params.select_mouse, "value": params.select_click, "shift": True},
+ ("paintcurve.select", {"type": params.select_mouse, "value": params.select_mouse_value}, None),
+ ("paintcurve.select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True},
{"properties": [("extend", True)]}),
("paintcurve.slide", {"type": params.action_mouse, "value": 'PRESS'}, None),
("paintcurve.slide", {"type": params.action_mouse, "value": 'PRESS', "shift": True},
@@ -3343,11 +3394,7 @@ def km_curve(params):
op_menu("VIEW3D_MT_curve_add", {"type": 'A', "value": 'PRESS', "shift": True}),
("curve.handle_type_set", {"type": 'V', "value": 'PRESS'}, None),
("curve.vertex_add", {"type": params.action_mouse, "value": 'CLICK', "ctrl": True}, None),
- ("curve.draw", {"type": params.action_mouse, "value": 'PRESS', "shift": True},
- {"properties": [("wait_for_input", False)]}),
- ("curve.draw", {"type": 'PEN', "value": 'PRESS', "shift": True},
- {"properties": [("wait_for_input", False)]}),
- *_template_items_select_actions("curve.select_all"),
+ *_template_items_select_actions(params, "curve.select_all"),
("curve.select_row", {"type": 'R', "value": 'PRESS', "shift": True}, None),
("curve.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("curve.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
@@ -3676,20 +3723,27 @@ def km_mesh(params):
{"properties": [("vertex_only", True)]}),
# Selection modes.
*_template_items_editmode_mesh_select_mode(),
- # Selection.
- ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_click, "alt": True},
+ # Loop Select with alt, and double click in case MMB emulation is on.
+ ("mesh.loop_select", {"type": params.select_mouse, "value": 'DOUBLE_CLICK'},
{"properties": [("extend", False), ("deselect", False), ("toggle", False)]}),
- ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "alt": True},
+ ("mesh.loop_select", {"type": params.select_mouse, "value": 'DOUBLE_CLICK', "shift": True},
+ {"properties": [("extend", True), ("deselect", False), ("toggle", False)]}),
+ ("mesh.loop_select", {"type": params.select_mouse, "value": 'DOUBLE_CLICK', "alt": True},
+ {"properties": [("extend", False), ("deselect", True), ("toggle", False)]}),
+ ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_mouse_value, "alt": True},
+ {"properties": [("extend", False), ("deselect", False), ("toggle", False)]}),
+ ("mesh.loop_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "alt": True},
{"properties": [("extend", False), ("deselect", False), ("toggle", True)]}),
- ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_click, "ctrl": True, "alt": True},
+ # Selection
+ ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True, "alt": True},
{"properties": [("extend", False), ("deselect", False), ("toggle", False)]}),
- ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True, "alt": True},
+ ("mesh.edgering_select", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True, "alt": True},
{"properties": [("extend", False), ("deselect", False), ("toggle", True)]}),
- ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_click, "ctrl": True},
+ ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True},
{"properties": [("use_fill", False)]}),
- ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_click, "shift": True, "ctrl": True},
+ ("mesh.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "shift": True, "ctrl": True},
{"properties": [("use_fill", True)]}),
- *_template_items_select_actions("mesh.select_all"),
+ *_template_items_select_actions(params, "mesh.select_all"),
("mesh.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("mesh.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
("mesh.select_next_item", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "shift": True, "ctrl": True}, None),
@@ -3801,7 +3855,7 @@ def km_armature(params):
("armature.parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
("armature.parent_clear", {"type": 'P', "value": 'PRESS', "alt": True}, None),
# Selection.
- *_template_items_select_actions("armature.select_all"),
+ *_template_items_select_actions(params, "armature.select_all"),
("armature.select_mirror", {"type": 'M', "value": 'PRESS', "shift": True, "ctrl": True},
{"properties": [("extend", False)]}),
("armature.select_hierarchy", {"type": 'LEFT_BRACKET', "value": 'PRESS'},
@@ -3816,7 +3870,7 @@ def km_armature(params):
("armature.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
("armature.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None),
("armature.select_linked", {"type": 'L', "value": 'PRESS'}, None),
- ("armature.shortest_path_pick", {"type": params.select_mouse, "value": params.select_click, "ctrl": True}, None),
+ ("armature.shortest_path_pick", {"type": params.select_mouse, "value": params.select_mouse_value, "ctrl": True}, None),
# Editing.
op_menu("VIEW3D_MT_edit_armature_delete", {"type": 'X', "value": 'PRESS'}),
op_menu("VIEW3D_MT_edit_armature_delete", {"type": 'DEL', "value": 'PRESS'}),
@@ -3853,7 +3907,7 @@ def km_armature(params):
# Metaball edit mode.
-def km_metaball(_params):
+def km_metaball(params):
items = []
keymap = (
"Metaball",
@@ -3871,7 +3925,7 @@ def km_metaball(_params):
("mball.delete_metaelems", {"type": 'X', "value": 'PRESS'}, None),
("mball.delete_metaelems", {"type": 'DEL', "value": 'PRESS'}, None),
("mball.duplicate_move", {"type": 'D', "value": 'PRESS', "shift": True}, None),
- *_template_items_select_actions("mball.select_all"),
+ *_template_items_select_actions(params, "mball.select_all"),
("mball.select_similar", {"type": 'G', "value": 'PRESS', "shift": True}, None),
*_template_items_proportional_editing(connected=True),
])
@@ -3880,7 +3934,7 @@ def km_metaball(_params):
# Lattice edit mode.
-def km_lattice(_params):
+def km_lattice(params):
items = []
keymap = (
"Lattice",
@@ -3889,7 +3943,7 @@ def km_lattice(_params):
)
items.extend([
- *_template_items_select_actions("lattice.select_all"),
+ *_template_items_select_actions(params, "lattice.select_all"),
("lattice.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("lattice.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
("object.vertex_parent_set", {"type": 'P', "value": 'PRESS', "ctrl": True}, None),
@@ -3911,7 +3965,7 @@ def km_particle(params):
)
items.extend([
- *_template_items_select_actions("particle.select_all"),
+ *_template_items_select_actions(params, "particle.select_all"),
("particle.select_more", {"type": 'NUMPAD_PLUS', "value": 'PRESS', "ctrl": True}, None),
("particle.select_less", {"type": 'NUMPAD_MINUS', "value": 'PRESS', "ctrl": True}, None),
("particle.select_linked", {"type": 'L', "value": 'PRESS'},
@@ -4044,11 +4098,19 @@ def km_object_non_modal(params):
{"items": items},
)
- items.extend([
- ("object.mode_set", {"type": 'TAB', "value": 'PRESS'},
- {"properties": [("mode", 'EDIT'), ("toggle", True)]}),
- ("view3d.object_mode_pie_or_toggle", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, None),
- ])
+ if not params.use_v3d_tab_menu:
+ items.extend([
+ ("object.mode_set", {"type": 'TAB', "value": 'PRESS'},
+ {"properties": [("mode", 'EDIT'), ("toggle", True)]}),
+ ("view3d.object_mode_pie_or_toggle", {"type": 'TAB', "value": 'PRESS', "ctrl": True}, None),
+ ])
+ else:
+ # Swap Tab/Ctrl-Tab
+ items.extend([
+ ("object.mode_set", {"type": 'TAB', "value": 'PRESS', "ctrl": True},
+ {"properties": [("mode", 'EDIT'), ("toggle", True)]}),
+ op_menu_pie("VIEW3D_MT_object_mode_pie", {"type": 'TAB', "value": 'PRESS'}),
+ ])
if params.legacy:
items.extend([
@@ -4816,6 +4878,21 @@ def km_backdrop_transform_widget(_params):
# ------------------------------------------------------------------------------
+# Popup Keymaps
+
+def km_popup_toolbar(params):
+ return (
+ "Toolbar Popup",
+ {"space_type": 'EMPTY', "region_type": 'TEMPORARY'},
+ {"items": [
+ op_tool("Transform", {"type": 'T', "value": 'PRESS'}),
+ op_tool("Annotate", {"type": 'D', "value": 'PRESS'}),
+ op_tool("Measure", {"type": 'M', "value": 'PRESS'}),
+ ]},
+ )
+
+
+# ------------------------------------------------------------------------------
# Tool System Keymaps
#
# Named are auto-generated based on the tool name and it's toolbar.
@@ -4920,6 +4997,19 @@ def km_image_editor_tool_uv_annotate_eraser(params):
)
+def km_3d_view_tool_object_cursor(params):
+ return (
+ "3D View Tool: Object, Cursor",
+ {"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
+ {"items": (
+ ("view3d.cursor3d", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+ ("transform.translate", {"type": params.tool_tweak, "value": 'ANY'},
+ {"properties": [("release_confirm", True), ("cursor_transform", True)]}),
+ ),
+ },
+ )
+
+
def km_3d_view_tool_object_select_box(params):
return (
"3D View Tool: Object, Select Box",
@@ -5004,6 +5094,8 @@ def km_3d_view_tool_object_annotate(params):
{"items": (
("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS'},
{"properties": [("mode", 'DRAW'), ("wait_for_input", False)]}),
+ ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True},
+ {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
),
},
)
@@ -5016,6 +5108,8 @@ def km_3d_view_tool_object_annotate_line(params):
{"items": (
("gpencil.annotate", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("mode", 'DRAW_STRAIGHT'), ("wait_for_input", False)]}),
+ ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True},
+ {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
),
},
)
@@ -5028,6 +5122,8 @@ def km_3d_view_tool_object_annotate_polygon(params):
{"items": (
("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS'},
{"properties": [("mode", 'DRAW_POLY'), ("wait_for_input", False)]}),
+ ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True},
+ {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
),
},
)
@@ -5040,6 +5136,8 @@ def km_3d_view_tool_object_annotate_eraser(params):
{"items": (
("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS'},
{"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
+ ("gpencil.annotate", {"type": params.tool_mouse, "value": 'PRESS', "alt": True},
+ {"properties": [("mode", 'ERASER'), ("wait_for_input", False)]}),
),
},
)
@@ -5061,7 +5159,7 @@ def km_3d_view_tool_pose_breakdowner(params):
"3D View Tool: Pose, Breakdowner",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("pose.breakdown", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+ ("pose.breakdown", {"type": params.tool_tweak, "value": 'ANY'}, None),
),
},
)
@@ -5072,7 +5170,7 @@ def km_3d_view_tool_pose_push(params):
"3D View Tool: Pose, Push",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("pose.push", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+ ("pose.push", {"type": params.tool_tweak, "value": 'ANY'}, None),
),
},
)
@@ -5083,7 +5181,7 @@ def km_3d_view_tool_pose_relax(params):
"3D View Tool: Pose, Relax",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("pose.relax", {"type": params.tool_mouse, "value": 'PRESS'}, None),
+ ("pose.relax", {"type": params.tool_tweak, "value": 'ANY'}, None),
),
},
)
@@ -5106,7 +5204,7 @@ def km_3d_view_tool_edit_armature_bone_size(params):
"3D View Tool: Edit Armature, Bone Size",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.transform", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.transform", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True), ("mode", 'BONE_SIZE')]}),
),
},
@@ -5118,7 +5216,7 @@ def km_3d_view_tool_edit_armature_bone_envelope(params):
"3D View Tool: Edit Armature, Bone Envelope",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.transform", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.transform", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True), ("mode", 'BONE_ENVELOPE')]}),
),
},
@@ -5212,7 +5310,7 @@ def km_3d_view_tool_edit_mesh_inset_faces(params):
"3D View Tool: Edit Mesh, Inset Faces",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("mesh.inset", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("mesh.inset", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5224,7 +5322,7 @@ def km_3d_view_tool_edit_mesh_bevel(params):
"3D View Tool: Edit Mesh, Bevel",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("mesh.bevel", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("mesh.bevel", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5320,7 +5418,7 @@ def km_3d_view_tool_edit_mesh_smooth(params):
"3D View Tool: Edit Mesh, Smooth",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("mesh.vertices_smooth", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("mesh.vertices_smooth", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("factor", 0.0)]}),
),
},
@@ -5332,7 +5430,7 @@ def km_3d_view_tool_edit_mesh_randomize(params):
"3D View Tool: Edit Mesh, Randomize",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.vertex_random", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.vertex_random", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("offset", 0.0)]}),
),
},
@@ -5344,7 +5442,7 @@ def km_3d_view_tool_edit_mesh_edge_slide(params):
"3D View Tool: Edit Mesh, Edge Slide",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.edge_slide", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.edge_slide", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5356,7 +5454,7 @@ def km_3d_view_tool_edit_mesh_vertex_slide(params):
"3D View Tool: Edit Mesh, Vertex Slide",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.vert_slide", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.vert_slide", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5368,7 +5466,7 @@ def km_3d_view_tool_edit_mesh_shrink_fatten(params):
"3D View Tool: Edit Mesh, Shrink/Fatten",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.shrink_fatten", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.shrink_fatten", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5380,7 +5478,7 @@ def km_3d_view_tool_edit_mesh_push_pull(params):
"3D View Tool: Edit Mesh, Push/Pull",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.push_pull", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.push_pull", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5404,7 +5502,7 @@ def km_3d_view_tool_edit_mesh_to_sphere(params):
"3D View Tool: Edit Mesh, To Sphere",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("transform.tosphere", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("transform.tosphere", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("release_confirm", True)]}),
),
},
@@ -5416,7 +5514,7 @@ def km_3d_view_tool_edit_mesh_rip_region(params):
"3D View Tool: Edit Mesh, Rip Region",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("mesh.rip_move", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("mesh.rip_move", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}),
),
},
@@ -5428,7 +5526,7 @@ def km_3d_view_tool_edit_mesh_rip_edge(params):
"3D View Tool: Edit Mesh, Rip Edge",
{"space_type": 'VIEW_3D', "region_type": 'WINDOW'},
{"items": (
- ("mesh.rip_edge_move", {"type": params.tool_mouse, "value": 'PRESS'},
+ ("mesh.rip_edge_move", {"type": params.tool_tweak, "value": 'ANY'},
{"properties": [("TRANSFORM_OT_translate", [("release_confirm", True)])]}),
),
},
@@ -5651,7 +5749,7 @@ def km_3d_view_tool_gpencil_edit_to_sphere(params):
def generate_keymaps(params=None):
if params is None:
- params = KeymapParams()
+ params = Params()
return [
# Window, screen, area, region.
km_window(params),
@@ -5777,6 +5875,9 @@ def generate_keymaps(params=None):
km_armature_spline_widgets_tweak_modal_map(params),
km_backdrop_transform_widget(params),
+ # Pop-Up Keymaps.
+ km_popup_toolbar(params),
+
# Tool System.
km_image_editor_tool_uv_cursor(params),
km_image_editor_tool_uv_select_box(params),
@@ -5786,6 +5887,7 @@ def generate_keymaps(params=None):
km_image_editor_tool_uv_annotate_line(params),
km_image_editor_tool_uv_annotate_polygon(params),
km_image_editor_tool_uv_annotate_eraser(params),
+ km_3d_view_tool_object_cursor(params),
km_3d_view_tool_object_select_box(params),
km_3d_view_tool_object_select_circle(params),
km_3d_view_tool_object_select_lasso(params),
@@ -5865,7 +5967,7 @@ def generate_keymaps(params=None):
# import pprint
# for legacy in (False, True):
# with open("keymap_default.py" if not legacy else "keymap_legacy.py", 'w') as fh:
-# fh.write(pprint.pformat(generate_keymaps(KeymapParams(legacy=legacy)), indent=2, width=80))
+# fh.write(pprint.pformat(generate_keymaps(Params(legacy=legacy)), indent=2, width=80))
# import sys
# sys.exit()
# # end code
@@ -5877,9 +5979,3 @@ def generate_keymaps(params=None):
# Command to lint:
#
# pylint release/scripts/presets/keyconfig/keymap_data/blender_default.py --disable=C0111,C0301,C0302,R0902,R0903,R0913
-
-
-if __name__ == "__main__":
- from bpy_extras.keyconfig_utils import keyconfig_import_from_data
- keyconfig_import_from_data("Blender", generate_keymaps())
- keyconfig_import_from_data("Blender 27X", generate_keymaps(KeymapParams(legacy=True)))
diff --git a/release/scripts/presets/keyconfig/maya.py b/release/scripts/presets/keyconfig/maya.py
deleted file mode 100644
index 1ce2fb34ccf..00000000000
--- a/release/scripts/presets/keyconfig/maya.py
+++ /dev/null
@@ -1,1917 +0,0 @@
-# Configuration Maya
-import bpy
-import os
-
-wm = bpy.context.window_manager
-kc = wm.keyconfigs.new(os.path.splitext(os.path.basename(__file__))[0])
-
-# Map Window
-km = kc.keymaps.new('Window', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.window_new', 'W', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.read_homefile', 'N', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.save_homefile', 'U', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'O', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'TOPBAR_MT_file_open_recent'
-kmi = km.keymap_items.new('wm.open_mainfile', 'O', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.open_mainfile', 'F1', 'PRESS')
-kmi = km.keymap_items.new('wm.link', 'O', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.append', 'F1', 'PRESS', shift=True)
-kmi.properties.link = False
-kmi.properties.instance_groups = False
-kmi = km.keymap_items.new('wm.save_mainfile', 'S', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('wm.save_as_mainfile', 'F2', 'PRESS')
-kmi = km.keymap_items.new('wm.save_as_mainfile', 'S', 'PRESS', ctrl=True, alt=True)
-kmi.properties.copy = True
-kmi = km.keymap_items.new('wm.window_fullscreen_toggle', 'F11', 'PRESS', alt=True)
-kmi = km.keymap_items.new('wm.quit_blender', 'Q', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.redraw_timer', 'T', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.debug_menu', 'D', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.search_menu', 'SPACE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'NDOF_BUTTON_MENU', 'PRESS')
-kmi.properties.name = 'USERPREF_MT_ndof_settings'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F2', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'NODE_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F4', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'CONSOLE'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F5', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'VIEW_3D'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F6', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'GRAPH_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F7', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'PROPERTIES'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F8', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'SEQUENCE_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F9', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'OUTLINER'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F10', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'IMAGE_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F11', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'TEXT_EDITOR'
-kmi = km.keymap_items.new('wm.context_set_enum', 'F12', 'PRESS', shift=True)
-kmi.properties.data_path = 'area.type'
-kmi.properties.value = 'DOPESHEET_EDITOR'
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS')
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.1
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS')
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.0 / 1.1
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_PLUS', 'PRESS', shift=True)
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.5
-kmi = km.keymap_items.new('wm.context_scale_float', 'NDOF_BUTTON_MINUS', 'PRESS', shift=True)
-kmi.properties.data_path = 'user_preferences.inputs.ndof_sensitivity'
-kmi.properties.value = 1.0 / 1.5
-kmi = km.keymap_items.new('info.reports_display_update', 'TIMER', 'ANY', any=True)
-
-# Map Screen
-km = kc.keymaps.new('Screen', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('screen.animation_step', 'TIMER0', 'ANY', any=True)
-kmi = km.keymap_items.new('screen.region_blend', 'TIMERREGION', 'ANY', any=True)
-kmi = km.keymap_items.new('screen.screen_set', 'RIGHT_ARROW', 'PRESS', ctrl=True)
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('screen.screen_set', 'LEFT_ARROW', 'PRESS', ctrl=True)
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('screen.screen_full_area', 'SPACE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('screen.screenshot', 'F3', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('screen.region_quadview', 'SPACE', 'PRESS')
-kmi = km.keymap_items.new('screen.repeat_history', 'F3', 'PRESS')
-kmi = km.keymap_items.new('screen.repeat_last', 'G', 'PRESS')
-kmi = km.keymap_items.new('screen.region_flip', 'F5', 'PRESS')
-kmi = km.keymap_items.new('screen.redo_last', 'F6', 'PRESS')
-kmi = km.keymap_items.new('script.reload', 'F8', 'PRESS')
-kmi = km.keymap_items.new('file.execute', 'RET', 'PRESS')
-kmi = km.keymap_items.new('file.execute', 'NUMPAD_ENTER', 'PRESS')
-kmi = km.keymap_items.new('file.cancel', 'ESC', 'PRESS')
-kmi = km.keymap_items.new('ed.undo', 'Z', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('ed.redo', 'Z', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('ed.undo_history', 'Z', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('render.render', 'F12', 'PRESS')
-kmi = km.keymap_items.new('render.render', 'F12', 'PRESS', ctrl=True)
-kmi.properties.animation = True
-kmi = km.keymap_items.new('render.view_cancel', 'ESC', 'PRESS')
-kmi = km.keymap_items.new('render.view_show', 'F11', 'PRESS')
-kmi = km.keymap_items.new('render.play_rendered_anim', 'F11', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('screen.userpref_show', 'U', 'PRESS', ctrl=True, alt=True)
-
-# Map View2D
-km = kc.keymaps.new('View2D', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('view2d.scroller_activate', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroller_activate', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view2d.pan', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('view2d.scroll_right', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view2d.scroll_left', 'WHEELUPMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view2d.zoom_out', 'WHEELOUTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.zoom_in', 'WHEELINMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.zoom_out', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new('view2d.zoom_in', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('view2d.smoothview', 'TIMER1', 'ANY')
-kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroll_right', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroll_left', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.zoom', 'RIGHTMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view2d.zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('view2d.zoom_border', 'B', 'PRESS', shift=True)
-
-# Map Frames
-km = kc.keymaps.new('Frames', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('screen.frame_offset', 'LEFT_ARROW', 'PRESS')
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('screen.frame_offset', 'RIGHT_ARROW', 'PRESS')
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('screen.frame_offset', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('screen.frame_offset', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('screen.frame_jump', 'V', 'PRESS', shift=True, alt=True)
-kmi.properties.end = False
-kmi = km.keymap_items.new('screen.keyframe_jump', 'UP_ARROW', 'PRESS')
-kmi.properties.next = True
-kmi = km.keymap_items.new('screen.keyframe_jump', 'COMMA', 'PRESS')
-kmi.properties.next = False
-kmi = km.keymap_items.new('screen.keyframe_jump', 'MEDIA_LAST', 'PRESS')
-kmi.properties.next = True
-kmi = km.keymap_items.new('screen.keyframe_jump', 'MEDIA_FIRST', 'PRESS')
-kmi.properties.next = False
-kmi = km.keymap_items.new('screen.animation_play', 'V', 'PRESS', alt=True)
-kmi = km.keymap_items.new('screen.animation_cancel', 'ESC', 'PRESS')
-kmi = km.keymap_items.new('screen.animation_play', 'MEDIA_PLAY', 'PRESS')
-kmi = km.keymap_items.new('screen.animation_cancel', 'MEDIA_STOP', 'PRESS')
-
-# Map View2D Buttons List
-km = kc.keymaps.new('View2D Buttons List', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('view2d.scroller_activate', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroller_activate', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.pan', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.pan', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('view2d.scroll_down', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroll_up', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view2d.scroll_down', 'PAGE_DOWN', 'PRESS')
-kmi.properties.page = True
-kmi = km.keymap_items.new('view2d.scroll_up', 'PAGE_UP', 'PRESS')
-kmi.properties.page = True
-kmi = km.keymap_items.new('view2d.zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view2d.zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('view2d.zoom_out', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new('view2d.zoom_in', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('view2d.reset', 'A', 'PRESS')
-
-# Map Markers
-km = kc.keymaps.new('Markers', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.move', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('marker.duplicate', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi.properties.camera = False
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi.properties.camera = False
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi.properties.camera = True
-kmi = km.keymap_items.new('marker.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.camera = True
-kmi = km.keymap_items.new('marker.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('marker.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('marker.select_all', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('marker.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('marker.move', 'W', 'PRESS')
-kmi = km.keymap_items.new('marker.camera_bind', 'B', 'PRESS', ctrl=True)
-
-# Map Animation
-km = kc.keymaps.new('Animation', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('anim.change_frame', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('wm.context_toggle', 'T', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'space_data.show_seconds'
-kmi = km.keymap_items.new('anim.previewrange_set', 'P', 'PRESS')
-kmi = km.keymap_items.new('anim.previewrange_clear', 'P', 'PRESS', alt=True)
-
-# Map Timeline
-km = kc.keymaps.new('Timeline', space_type='TIMELINE', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('time.start_frame_set', 'S', 'PRESS')
-kmi = km.keymap_items.new('time.end_frame_set', 'E', 'PRESS')
-kmi = km.keymap_items.new('time.view_all', 'A', 'PRESS')
-
-# Map Outliner
-km = kc.keymaps.new('Outliner', space_type='OUTLINER', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'DOUBLE_CLICK')
-kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('outliner.item_activate', 'LEFTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('outliner.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS')
-kmi.properties.all = False
-kmi = km.keymap_items.new('outliner.item_openclose', 'RET', 'PRESS', shift=True)
-kmi.properties.all = True
-kmi = km.keymap_items.new('outliner.item_rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('outliner.operation', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('outliner.show_hierarchy', 'A', 'PRESS')
-kmi = km.keymap_items.new('outliner.show_active', 'F', 'PRESS')
-kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_DOWN', 'PRESS')
-kmi = km.keymap_items.new('outliner.scroll_page', 'PAGE_UP', 'PRESS')
-kmi.properties.up = True
-kmi = km.keymap_items.new('outliner.show_one_level', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('outliner.show_one_level', 'COMMA', 'PRESS', shift=True)
-kmi.properties.open = False
-kmi = km.keymap_items.new('outliner.selected_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('outliner.expanded_toggle', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('outliner.renderability_toggle', 'R', 'PRESS')
-kmi = km.keymap_items.new('outliner.selectability_toggle', 'S', 'PRESS')
-kmi = km.keymap_items.new('outliner.visibility_toggle', 'V', 'PRESS')
-kmi = km.keymap_items.new('outliner.keyingset_add_selected', 'K', 'PRESS')
-kmi = km.keymap_items.new('outliner.keyingset_remove_selected', 'K', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.keyframe_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('anim.keyframe_delete', 'I', 'PRESS', alt=True)
-kmi = km.keymap_items.new('outliner.drivers_add_selected', 'D', 'PRESS')
-kmi = km.keymap_items.new('outliner.drivers_delete_selected', 'D', 'PRESS', alt=True)
-
-# Map Face Mask
-km = kc.keymaps.new('Face Mask', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.face_select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'SELECT'
-kmi = km.keymap_items.new('paint.face_select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('paint.face_select_hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('paint.face_select_reveal', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('paint.face_select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('paint.face_select_linked_pick', 'L', 'PRESS')
-
-# Map Pose
-km = kc.keymaps.new('Pose', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_add'
-kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('pose.hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('pose.reveal', 'H', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', ctrl=True, alt=True)
-kmi.properties.name = 'VIEW3D_MT_pose_apply'
-kmi = km.keymap_items.new('pose.rot_clear', 'E', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.loc_clear', 'W', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.scale_clear', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.quaternions_flip', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('pose.rotation_mode_set', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('pose.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', ctrl=True)
-kmi.properties.flipped = False
-kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', shift=True, ctrl=True)
-kmi.properties.flipped = True
-kmi = km.keymap_items.new('pose.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('pose.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('pose.select_parent', 'P', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('pose.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('pose.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('pose.select_linked', 'L', 'PRESS')
-kmi = km.keymap_items.new('pose.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.select_mirror', 'F', 'PRESS', shift=True)
-kmi.properties.only_active = True
-kmi = km.keymap_items.new('pose.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('pose.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('pose.ik_add', 'I', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.ik_clear', 'I', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_pose_group'
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_bone_options_toggle'
-kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('pose.bone_layers', 'M', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True)
-kmi.properties.mode = 'BONE_SIZE'
-kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'S', 'PRESS')
-kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.keying_set_active_set', 'I', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('poselib.browse_interactive', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('poselib.pose_add', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('poselib.pose_remove', 'L', 'PRESS', alt=True)
-kmi = km.keymap_items.new('poselib.pose_rename', 'L', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('pose.copy', 'C', 'PRESS', oskey=True)
-kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', oskey=True)
-kmi = km.keymap_items.new('pose.paste', 'V', 'PRESS', shift=True, oskey=True)
-kmi.properties.flipped = True
-
-# Map Object Mode
-km = kc.keymaps.new('Object Mode', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('object.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('object.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('object.select_linked', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('object.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('object.select_mirror', 'M', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('object.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.direction = 'CHILD'
-kmi = km.keymap_items.new('object.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('object.parent_set', 'P', 'PRESS')
-kmi = km.keymap_items.new('object.parent_no_inverse_set', 'P', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.parent_clear', 'P', 'PRESS', shift=True)
-kmi = km.keymap_items.new('object.track_set', 'T', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.track_clear', 'T', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.constraint_add_with_targets', 'C', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.constraints_clear', 'C', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('object.location_clear', 'W', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.rotation_clear', 'E', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.scale_clear', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.origin_clear', 'O', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.hide_view_clear', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.hide_view_set', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('object.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('object.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_add'
-kmi = km.keymap_items.new('object.duplicates_make_real', 'A', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', ctrl=True, alt=True)
-kmi.properties.name = 'VIEW3D_MT_object_apply'
-kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_make_single_user'
-kmi = km.keymap_items.new('wm.call_menu', 'L', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_make_links'
-kmi = km.keymap_items.new('object.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.duplicate_move_linked', 'D', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.join', 'J', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('object.convert', 'C', 'PRESS', alt=True)
-kmi = km.keymap_items.new('object.proxy_make', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('object.make_local', 'L', 'PRESS')
-kmi = km.keymap_items.new('anim.keyframe_insert_menu', 'S', 'PRESS')
-kmi = km.keymap_items.new('group.create', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('group.objects_remove', 'G', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('group.objects_add_active', 'G', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('group.objects_remove_active', 'G', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_object_specials'
-kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS')
-kmi.properties.level = 0
-kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS')
-kmi.properties.level = 1
-kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS')
-kmi.properties.level = 2
-kmi = km.keymap_items.new('anim.keyframe_delete_v3d', 'S', 'PRESS', alt=True)
-
-# Map Image Paint
-km = kc.keymaps.new('Image Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS')
-kmi.properties.mode = 'NORMAL'
-kmi = km.keymap_items.new('paint.image_paint', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'INVERT'
-kmi = km.keymap_items.new('paint.grab_clone', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color'
-kmi.properties.zoom_path = 'space_data.zoom'
-kmi.properties.image_id = 'tool_settings.image_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.image_paint.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.image_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.image_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.image_paint.brush.color'
-kmi.properties.zoom_path = 'space_data.zoom'
-kmi.properties.image_id = 'tool_settings.image_paint.brush'
-kmi = km.keymap_items.new('wm.context_toggle', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'image_paint_object.data.use_paint_mask'
-
-# Map Vertex Paint
-km = kc.keymaps.new('Vertex Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.vertex_paint', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.sample_color', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.vertex_color_set', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.vertex_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.vertex_paint.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.vertex_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.vertex_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = 'tool_settings.vertex_paint.brush.color'
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.vertex_paint.brush'
-kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS')
-kmi.properties.data_path = 'vertex_paint_object.data.use_paint_mask'
-
-# Map Weight Paint
-km = kc.keymaps.new('Weight Paint', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('paint.weight_paint', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('paint.weight_sample', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('paint.weight_sample_group', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('paint.weight_set', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('paint.weight_gradient', 'LEFTMOUSE', 'PRESS', alt=True, shift=True)
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.weight_paint.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.weight_paint.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.weight_paint.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.weight_paint.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.weight_paint.brush'
-kmi = km.keymap_items.new('paint.weight_from_bones', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-
-# Map Sculpt
-km = kc.keymaps.new('Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS')
-kmi.properties.mode = 'NORMAL'
-kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'INVERT'
-kmi = km.keymap_items.new('sculpt.brush_stroke', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.mode = 'SMOOTH'
-kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', shift=True)
-kmi.properties.action = 'SHOW'
-kmi.properties.area = 'INSIDE'
-kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS')
-kmi.properties.action = 'HIDE'
-kmi.properties.area = 'INSIDE'
-kmi = km.keymap_items.new('paint.hide_show', 'H', 'PRESS', alt=True)
-kmi.properties.action = 'SHOW'
-kmi.properties.area = 'ALL'
-kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS')
-kmi.properties.level = 0
-kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS')
-kmi.properties.level = 1
-kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS')
-kmi.properties.level = 2
-kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_UP', 'PRESS')
-kmi.properties.level = 1
-kmi.properties.relative = True
-kmi = km.keymap_items.new('object.subdivision_set', 'PAGE_DOWN', 'PRESS')
-kmi.properties.level = -1
-kmi.properties.relative = True
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', ctrl=True)
-kmi.properties.data_path_primary = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.data_path_secondary = ''
-kmi.properties.use_secondary = ''
-kmi.properties.rotation_path = 'tool_settings.sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.sculpt.brush'
-kmi = km.keymap_items.new('paint.brush_select', 'D', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'DRAW'
-kmi = km.keymap_items.new('paint.brush_select', 'S', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'SMOOTH'
-kmi = km.keymap_items.new('paint.brush_select', 'P', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'PINCH'
-kmi = km.keymap_items.new('paint.brush_select', 'I', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'INFLATE'
-kmi = km.keymap_items.new('paint.brush_select', 'G', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'GRAB'
-kmi = km.keymap_items.new('paint.brush_select', 'L', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'LAYER'
-kmi = km.keymap_items.new('paint.brush_select', 'T', 'PRESS', shift=True)
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'FLATTEN'
-kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS')
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'CLAY'
-kmi = km.keymap_items.new('paint.brush_select', 'C', 'PRESS', shift=True)
-kmi.properties.paint_mode = 'SCULPT'
-kmi.properties.sculpt_tool = 'CREASE'
-kmi = km.keymap_items.new('wm.context_menu_enum', 'RIGHTMOUSE', 'PRESS')
-kmi.properties.data_path = 'tool_settings.sculpt.brush.stroke_method'
-
-# Map Mesh
-km = kc.keymaps.new('Mesh', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('mesh.loopcut_slide', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi.properties.ring = False
-kmi = km.keymap_items.new('mesh.loop_select', 'SELECTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi.properties.ring = False
-kmi = km.keymap_items.new('mesh.edgering_select', 'RIGHTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi = km.keymap_items.new('mesh.edgering_select', 'RIGHTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.deselect = False
-kmi.properties.toggle = False
-kmi = km.keymap_items.new('mesh.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('mesh.select_more', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mesh.select_less', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mesh.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('mesh.select_non_manifold', 'M', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('mesh.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS')
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('mesh.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('mesh.faces_select_linked_flat', 'F', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.sharpness = 135.0
-kmi = km.keymap_items.new('mesh.select_similar', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_select_mode'
-kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('mesh.hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('mesh.reveal', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('view3d.edit_mesh_extrude_move_normal', 'X', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.rip_move', 'V', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.merge', 'M', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.edge_face_add', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('mesh.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'VIEW3D_MT_mesh_add'
-kmi = km.keymap_items.new('mesh.dupli_extrude_cursor', 'MIDDLEMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'BACK_SPACE', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete'
-kmi = km.keymap_items.new('wm.call_menu', 'DEL', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_delete'
-kmi = km.keymap_items.new('mesh.knife_tool', 'LEFTMOUSE', 'PRESS', key_modifier='K')
-kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_specials'
-kmi = km.keymap_items.new('wm.call_menu', 'F', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_faces'
-kmi = km.keymap_items.new('wm.call_menu', 'E', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_edges'
-kmi = km.keymap_items.new('wm.call_menu', 'V', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_mesh_vertices'
-kmi = km.keymap_items.new('wm.call_menu', 'U', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_uv_map'
-kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_vertex_group'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('object.subdivision_set', 'ZERO', 'PRESS', ctrl=True)
-kmi.properties.level = 0
-kmi = km.keymap_items.new('object.subdivision_set', 'ONE', 'PRESS', ctrl=True)
-kmi.properties.level = 1
-kmi = km.keymap_items.new('object.subdivision_set', 'TWO', 'PRESS', ctrl=True)
-kmi.properties.level = 2
-kmi = km.keymap_items.new('object.subdivision_set', 'THREE', 'PRESS', ctrl=True)
-kmi.properties.level = 3
-kmi = km.keymap_items.new('object.subdivision_set', 'FOUR', 'PRESS', ctrl=True)
-kmi.properties.level = 4
-kmi = km.keymap_items.new('object.subdivision_set', 'FIVE', 'PRESS', ctrl=True)
-kmi.properties.level = 5
-
-# Knife Tool
-km = kc.keymaps.new('Knife Tool Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'ANY', any=True)
-kmi = km.keymap_items.new_modal('ADD_CUT', 'LEFTMOUSE', 'ANY', any=True)
-kmi = km.keymap_items.new_modal('PANNING', 'LEFTMOUSE', 'ANY', alt=True)
-kmi = km.keymap_items.new_modal('PANNING', 'MIDDLEMOUSE', 'ANY', alt=True)
-kmi = km.keymap_items.new_modal('PANNING', 'RIGHTMOUSE', 'ANY', alt=True)
-kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'ANY')
-kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'SPACE', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('NEW_CUT', 'E', 'PRESS')
-
-kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_ON', 'LEFT_CTRL', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_OFF', 'LEFT_CTRL', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_ON', 'RIGHT_CTRL', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('SNAP_MIDPOINTS_OFF', 'RIGHT_CTRL', 'RELEASE', any=True)
-
-kmi = km.keymap_items.new_modal('IGNORE_SNAP_ON', 'LEFT_SHIFT', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('IGNORE_SNAP_OFF', 'LEFT_SHIFT', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('IGNORE_SNAP_ON', 'RIGHT_SHIFT', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('IGNORE_SNAP_OFF', 'RIGHT_SHIFT', 'RELEASE', any=True)
-
-kmi = km.keymap_items.new_modal('ANGLE_SNAP_TOGGLE', 'C', 'PRESS')
-kmi = km.keymap_items.new_modal('CUT_THROUGH_TOGGLE', 'Z', 'PRESS')
-
-# Map Curve
-km = kc.keymaps.new('Curve', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'TOPBAR_MT_edit_curve_add'
-kmi = km.keymap_items.new('curve.handle_type_set', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('curve.vertex_add', 'MIDDLEMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('curve.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('curve.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('curve.select_row', 'T', 'PRESS', shift=True)
-kmi = km.keymap_items.new('curve.select_more', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('curve.select_less', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('curve.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS')
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('curve.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('curve.separate', 'P', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.extrude_move', 'X', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('curve.make_segment', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.cyclic_toggle', 'C', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('curve.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('curve.tilt_clear', 'T', 'PRESS', alt=True)
-kmi = km.keymap_items.new('transform.tilt', 'T', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('curve.reveal', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('curve.hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_edit_curve_specials'
-kmi = km.keymap_items.new('wm.call_menu', 'K', 'PRESS', alt=True)
-kmi.properties.name = 'VIEW3D_MT_hook'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'CONNECTED'
-
-# Map Armature
-km = kc.keymaps.new('Armature', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('armature.hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('armature.reveal', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('armature.align', 'A', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('armature.calculate_roll', 'N', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.switch_direction', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.parent_set', 'P', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.parent_clear', 'P', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('armature.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('armature.select_hierarchy', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'PARENT'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('armature.select_hierarchy', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.direction = 'CHILD'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('armature.select_linked', 'L', 'PRESS')
-kmi = km.keymap_items.new('armature.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('armature.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('armature.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.extrude_move', 'X', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.extrude_forked', 'X', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('armature.click_extrude', 'MIDDLEMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('armature.fill', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.merge', 'M', 'PRESS', alt=True)
-kmi = km.keymap_items.new('armature.separate', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS')
-kmi.properties.name = 'VIEW3D_MT_bone_options_toggle'
-kmi = km.keymap_items.new('armature.layers_show_all', 'ACCENT_GRAVE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('armature.armature_layers', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('armature.bone_layers', 'M', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_armature_specials'
-
-# Map Metaball
-km = kc.keymaps.new('Metaball', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('object.metaball_add', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('mball.reveal_metaelems', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('mball.hide_metaelems', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('mball.delete_metaelems', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('mball.delete_metaelems', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('mball.duplicate_metaelems', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('mball.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('mball.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS', alt=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'CONNECTED'
-
-# Map Lattice
-km = kc.keymaps.new('Lattice', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('lattice.select_all', 'A', 'PRESS')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('lattice.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('object.vertex_parent_set', 'P', 'PRESS')
-kmi = km.keymap_items.new('wm.call_menu', 'K', 'PRESS', alt=True)
-kmi.properties.name = 'VIEW3D_MT_hook'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-
-# Map Particle
-km = kc.keymaps.new('Particle', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('particle.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('particle.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('particle.select_more', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('particle.select_less', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS')
-kmi.properties.deselect = False
-kmi = km.keymap_items.new('particle.select_linked', 'L', 'PRESS', shift=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('particle.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('particle.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('particle.reveal', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('particle.hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('particle.brush_edit', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.size'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.particle_edit.brush.strength'
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_particle_specials'
-kmi = km.keymap_items.new('particle.weight_set', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-
-# Map Object Non-modal
-km = kc.keymaps.new('Object Non-modal', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS')
-kmi.properties.mode = 'EDIT'
-kmi.properties.toggle = True
-
-# TODO: Doesn't work because of invalid context check, see [#30554]
-#kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS', ctrl=True)
-#kmi.properties.mode = 'POSE'
-
-kmi.properties.toggle = True
-kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS', ctrl=True)
-kmi.properties.mode = 'WEIGHT_PAINT'
-kmi.properties.toggle = True
-kmi = km.keymap_items.new('object.origin_set', 'C', 'PRESS', shift=True, ctrl=True, alt=True)
-
-# Map 3D View
-km = kc.keymaps.new('3D View', space_type='VIEW_3D', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('view3d.cursor3d', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('view3d.rotate', 'LEFTMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.release_confirm = True
-kmi.properties.use_planar_constraint = True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.release_confirm = True
-kmi.properties.use_accurate = True
-kmi = km.keymap_items.new('view3d.manipulator', 'LEFTMOUSE', 'PRESS', any=True)
-kmi.properties.release_confirm = True
-kmi = km.keymap_items.new('view3d.move', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.zoom', 'RIGHTMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('view3d.view_center_cursor', 'NUMPAD_PERIOD', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view3d.fly', 'F', 'PRESS', shift=True)
-kmi = km.keymap_items.new('view3d.smoothview', 'TIMER1', 'ANY', any=True)
-kmi = km.keymap_items.new('view3d.rotate', 'TRACKPADPAN', 'ANY', alt=True)
-kmi = km.keymap_items.new('view3d.rotate', 'MOUSEROTATE', 'ANY')
-kmi = km.keymap_items.new('view3d.move', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('view3d.zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_PLUS', 'PRESS')
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'NUMPAD_MINUS', 'PRESS')
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.zoom', 'EQUAL', 'PRESS', ctrl=True)
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'MINUS', 'PRESS', ctrl=True)
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS')
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS')
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.zoom', 'WHEELINMOUSE', 'PRESS', alt=True)
-kmi.properties.delta = 1
-kmi = km.keymap_items.new('view3d.zoom', 'WHEELOUTMOUSE', 'PRESS', alt=True)
-kmi.properties.delta = -1
-kmi = km.keymap_items.new('view3d.view_all', 'A', 'PRESS')
-kmi.properties.center = False
-kmi = km.keymap_items.new('view3d.viewnumpad', 'ZERO', 'PRESS', ctrl=True)
-kmi.properties.type = 'CAMERA'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'ONE', 'PRESS', ctrl=True)
-kmi.properties.type = 'FRONT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'THREE', 'PRESS', ctrl=True)
-kmi.properties.type = 'LEFT'
-kmi = km.keymap_items.new('view3d.view_persportho', 'SEVEN', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('view3d.viewnumpad', 'FIVE', 'PRESS', ctrl=True)
-kmi.properties.type = 'TOP'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'TWO', 'PRESS', ctrl=True)
-kmi.properties.type = 'BACK'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'FOUR', 'PRESS', ctrl=True)
-kmi.properties.type = 'RIGHT'
-kmi = km.keymap_items.new('view3d.viewnumpad', 'SIX', 'PRESS', ctrl=True)
-kmi.properties.type = 'BOTTOM'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANRIGHT'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True)
-kmi.properties.type = 'PANLEFT'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELUPMOUSE', 'PRESS', shift=True)
-kmi.properties.type = 'PANUP'
-kmi = km.keymap_items.new('view3d.view_pan', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
-kmi.properties.type = 'PANDOWN'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.type = 'ORBITLEFT'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.type = 'ORBITRIGHT'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELUPMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.type = 'ORBITUP'
-kmi = km.keymap_items.new('view3d.view_orbit', 'WHEELDOWNMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.type = 'ORBITDOWN'
-kmi = km.keymap_items.new('view3d.localview', 'I', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'FOUR', 'PRESS')
-kmi.properties.data_path = 'space_data.shading.type'
-kmi.properties.value_1 = 'WIREFRAME'
-kmi.properties.value_2 = 'WIREFRAME'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'FIVE', 'PRESS')
-kmi.properties.data_path = 'space_data.shading.type'
-kmi.properties.value_1 = 'TEXTURED'
-kmi.properties.value_2 = 'SOLID'
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi.properties.toggle = False
-kmi.properties.deselect = False
-kmi.properties.center = False
-kmi.properties.object = False
-kmi.properties.enumerate = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = False
-kmi.properties.toggle = True
-kmi.properties.deselect = False
-kmi.properties.center = False
-kmi.properties.object = False
-kmi.properties.enumerate = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True)
-kmi.properties.center = False
-kmi.properties.extend = False
-kmi.properties.toggle = False
-kmi.properties.deselect = True
-kmi.properties.object = False
-kmi.properties.enumerate = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', alt=True)
-kmi.properties.enumerate = True
-kmi.properties.extend = False
-kmi.properties.toggle = False
-kmi.properties.deselect = False
-kmi.properties.center = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.center = True
-kmi.properties.toggle = False
-kmi.properties.deselect = False
-kmi.properties.object = False
-kmi.properties.enumerate = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', ctrl=True, alt=True)
-kmi.properties.center = True
-kmi.properties.enumerate = True
-kmi.properties.extend = False
-kmi.properties.toggle = False
-kmi.properties.deselect = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.enumerate = True
-kmi.properties.toggle = False
-kmi.properties.deselect = False
-kmi.properties.center = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_or_deselect_all', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.center = True
-kmi.properties.enumerate = True
-kmi.properties.toggle = False
-kmi.properties.deselect = False
-kmi.properties.object = False
-kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('view3d.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_M', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_M', 'ANY', ctrl=True)
-kmi.properties.deselect = True
-kmi = km.keymap_items.new('view3d.select_lasso', 'EVT_TWEAK_M', 'ANY', any=True)
-kmi = km.keymap_items.new('view3d.select_circle', 'Q', 'PRESS', shift=True)
-# kmi = km.keymap_items.new('view3d.clip_border', 'B', 'PRESS', alt=True)
-kmi = km.keymap_items.new('view3d.zoom_border', 'B', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True, ctrl=True)
-kmi.properties.name = 'VIEW3D_MT_snap'
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'Q', 'PRESS')
-kmi = km.keymap_items.new('transform.select_orientation', 'RIGHTMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('transform.create_orientation', 'SPACE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.use = True
-kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.use_snap'
-kmi = km.keymap_items.new('wm.context_set_enum', 'C', 'PRESS')
-kmi.properties.data_path = 'tool_settings.snap_element'
-kmi.properties.value = 'EDGE'
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'W', 'PRESS')
-kmi.properties.translate = True
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'E', 'PRESS')
-kmi.properties.rotate = True
-kmi = km.keymap_items.new('view3d.enable_manipulator', 'R', 'PRESS')
-kmi.properties.scale = True
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'SIX', 'PRESS')
-kmi.properties.data_path = 'space_data.shading.type'
-kmi.properties.value_1 = 'TEXTURED'
-kmi.properties.value_2 = 'TEXTURED'
-kmi = km.keymap_items.new('wm.context_set_enum', 'X', 'PRESS')
-kmi.properties.data_path = 'tool_settings.snap_element'
-kmi.properties.value = 'INCREMENT'
-kmi = km.keymap_items.new('wm.context_set_enum', 'V', 'PRESS')
-kmi.properties.data_path = 'tool_settings.snap_element'
-kmi.properties.value = 'VERTEX'
-
-km.keymap_items.new('view3d.render_border', 'B', 'PRESS', ctrl=True)
-
-# Map Animation Channels
-km = kc.keymaps.new('Animation Channels', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('anim.channels_click', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.children_only = True
-kmi = km.keymap_items.new('anim.channels_rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('anim.channels_select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('anim.channels_select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('anim.channels_select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('anim.channels_delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_setting_toggle', 'W', 'PRESS', shift=True)
-kmi = km.keymap_items.new('anim.channels_setting_enable', 'W', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('anim.channels_setting_disable', 'W', 'PRESS', alt=True)
-kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_expand', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('anim.channels_collapse', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('anim.channels_expand', 'PERIOD', 'PRESS', ctrl=True)
-kmi.properties.all = False
-kmi = km.keymap_items.new('anim.channels_collapse', 'COMMA', 'PRESS', ctrl=True)
-kmi.properties.all = False
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS')
-kmi.properties.direction = 'UP'
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS')
-kmi.properties.direction = 'DOWN'
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_UP', 'PRESS', shift=True)
-kmi.properties.direction = 'TOP'
-kmi = km.keymap_items.new('anim.channels_move', 'PAGE_DOWN', 'PRESS', shift=True)
-kmi.properties.direction = 'BOTTOM'
-
-# Map UV Editor
-km = kc.keymaps.new('UV Editor', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_toggle', 'Q', 'PRESS')
-kmi.properties.data_path = 'tool_settings.use_uv_sculpt'
-kmi = km.keymap_items.new('uv.mark_seam', 'E', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select', 'SELECTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_loop', 'LEFTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select_loop', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi.properties.pinned = False
-kmi = km.keymap_items.new('uv.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi.properties.pinned = False
-kmi = km.keymap_items.new('uv.circle_select', 'Q', 'PRESS', shift=True)
-kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('uv.select_linked', 'L', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('uv.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('uv.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('uv.select_pinned', 'P', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'IMAGE_MT_uvs_weldalign'
-kmi = km.keymap_items.new('uv.stitch', 'V', 'PRESS')
-kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS')
-kmi.properties.clear = False
-kmi = km.keymap_items.new('uv.pin', 'P', 'PRESS', alt=True)
-kmi.properties.clear = True
-kmi = km.keymap_items.new('uv.unwrap', 'U', 'PRESS')
-kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('uv.hide', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('uv.reveal', 'H', 'PRESS', shift=True)
-kmi = km.keymap_items.new('uv.cursor_set', 'RIGHTMOUSE', 'PRESS', key_modifier='C')
-kmi = km.keymap_items.new('uv.tile_set', 'ACTIONMOUSE', 'PRESS', shift=True, key_modifier='C')
-kmi = km.keymap_items.new('wm.call_menu', 'S', 'PRESS', shift=True)
-kmi.properties.name = 'IMAGE_MT_uvs_snap'
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS')
-kmi.properties.name = 'IMAGE_MT_uvs_select_mode'
-kmi = km.keymap_items.new('wm.context_cycle_enum', 'O', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.proportional_edit_falloff'
-kmi = km.keymap_items.new('wm.context_toggle_enum', 'O', 'PRESS')
-kmi.properties.data_path = 'tool_settings.proportional_edit'
-kmi.properties.value_1 = 'DISABLED'
-kmi.properties.value_2 = 'ENABLED'
-kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_M', 'ANY')
-kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS')
-kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS')
-kmi = km.keymap_items.new('transform.shear', 'S', 'PRESS', shift=True, ctrl=True, alt=True)
-kmi = km.keymap_items.new('transform.mirror', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.context_toggle', 'TAB', 'PRESS', shift=True)
-kmi.properties.data_path = 'tool_settings.use_snap'
-
-# Map Transform Modal Map
-km = kc.keymaps.new('Transform Modal Map', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'LEFTMOUSE', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('TRANSLATE', 'G', 'PRESS')
-kmi = km.keymap_items.new_modal('ROTATE', 'R', 'PRESS')
-kmi = km.keymap_items.new_modal('RESIZE', 'S', 'PRESS')
-kmi = km.keymap_items.new_modal('SNAP_TOGGLE', 'TAB', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'LEFT_CTRL', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'LEFT_CTRL', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_ON', 'RIGHT_CTRL', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('SNAP_INV_OFF', 'RIGHT_CTRL', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('ADD_SNAP', 'A', 'PRESS')
-kmi = km.keymap_items.new_modal('REMOVE_SNAP', 'A', 'PRESS', alt=True)
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'PAGE_UP', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'PAGE_DOWN', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_UP', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('PROPORTIONAL_SIZE_DOWN', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'PAGE_UP', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'PAGE_DOWN', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_UP', 'WHEELDOWNMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('AUTOIK_CHAIN_LEN_DOWN', 'WHEELUPMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'MIDDLEMOUSE', 'RELEASE')
-
-# Map View3D Gesture Circle
-km = kc.keymaps.new('View3D Gesture Circle', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'ANY', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'RET', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CONFIRM', 'NUMPAD_ENTER', 'PRESS')
-kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('NOP', 'MIDDLEMOUSE', 'RELEASE')
-kmi = km.keymap_items.new_modal('NOP', 'LEFTMOUSE', 'RELEASE')
-kmi = km.keymap_items.new_modal('SUBTRACT', 'WHEELUPMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('SUBTRACT', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new_modal('ADD', 'WHEELDOWNMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('ADD', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new_modal('SIZE', 'TRACKPADPAN', 'ANY')
-
-# Map Gesture Box
-km = kc.keymaps.new('Gesture Box', space_type='EMPTY', region_type='WINDOW', modal=True)
-
-kmi = km.keymap_items.new_modal('CANCEL', 'ESC', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('CANCEL', 'RIGHTMOUSE', 'PRESS', any=True)
-kmi = km.keymap_items.new_modal('BEGIN', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('DESELECT', 'LEFTMOUSE', 'RELEASE', ctrl=True)
-kmi = km.keymap_items.new_modal('SELECT', 'LEFTMOUSE', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('SELECT', 'RIGHTMOUSE', 'RELEASE', any=True)
-kmi = km.keymap_items.new_modal('BEGIN', 'MIDDLEMOUSE', 'PRESS')
-kmi = km.keymap_items.new_modal('DESELECT', 'MIDDLEMOUSE', 'RELEASE')
-
-# Map UV Sculpt
-km = kc.keymaps.new('UV Sculpt', space_type='EMPTY', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_toggle', 'Q', 'PRESS')
-kmi.properties.data_path = 'tool_settings.use_uv_sculpt'
-kmi = km.keymap_items.new('sculpt.uv_sculpt_stroke', 'LEFTMOUSE', 'PRESS')
-kmi.properties.mode = 'NORMAL'
-kmi = km.keymap_items.new('sculpt.uv_sculpt_stroke', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'INVERT'
-kmi = km.keymap_items.new('sculpt.uv_sculpt_stroke', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.mode = 'RELAX'
-kmi = km.keymap_items.new('brush.scale_size', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.scalar = 0.8999999761581421
-kmi = km.keymap_items.new('brush.scale_size', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.scalar = 1.1111111640930176
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS')
-kmi.properties.data_path_primary = 'tool_settings.uv_sculpt.brush.size'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.size'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_size'
-kmi.properties.rotation_path = 'tool_settings.uv_sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.uv_sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.uv_sculpt.brush'
-kmi = km.keymap_items.new('wm.radial_control', 'B', 'PRESS', shift=True)
-kmi.properties.data_path_primary = 'tool_settings.uv_sculpt.brush.strength'
-kmi.properties.data_path_secondary = 'tool_settings.unified_paint_settings.strength'
-kmi.properties.use_secondary = 'tool_settings.unified_paint_settings.use_unified_strength'
-kmi.properties.rotation_path = 'tool_settings.uv_sculpt.brush.texture_slot.angle'
-kmi.properties.color_path = 'tool_settings.uv_sculpt.brush.cursor_color_add'
-kmi.properties.fill_color_path = ''
-kmi.properties.zoom_path = ''
-kmi.properties.image_id = 'tool_settings.uv_sculpt.brush'
-kmi = km.keymap_items.new('brush.uv_sculpt_tool_set', 'S', 'PRESS')
-kmi.properties.tool = 'RELAX'
-kmi = km.keymap_items.new('brush.uv_sculpt_tool_set', 'P', 'PRESS')
-kmi.properties.tool = 'PINCH'
-kmi = km.keymap_items.new('brush.uv_sculpt_tool_set', 'G', 'PRESS')
-kmi.properties.tool = 'GRAB'
-
-# Map Graph Editor Generic
-km = kc.keymaps.new('Graph Editor Generic', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('graph.properties', 'N', 'PRESS')
-kmi = km.keymap_items.new('graph.extrapolation_type', 'RIGHTMOUSE', 'PRESS', shift=True)
-
-# Map Graph Editor
-km = kc.keymaps.new('Graph Editor', space_type='GRAPH_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('wm.context_toggle', 'H', 'PRESS', ctrl=True)
-kmi.properties.data_path = 'space_data.show_handles'
-kmi = km.keymap_items.new('graph.cursor_set', 'LEFTMOUSE', 'PRESS', key_modifier='K')
-kmi.properties.value = 1.1754943508222875e-38
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi.properties.column = False
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.column = True
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi.properties.column = False
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.column = True
-kmi.properties.curves = False
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi.properties.extend = False
-kmi.properties.column = False
-kmi.properties.curves = True
-kmi = km.keymap_items.new('graph.clickselect', 'SELECTMOUSE', 'CLICK', shift=True, ctrl=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.column = False
-kmi.properties.curves = True
-kmi = km.keymap_items.new('graph.select_leftright', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.mode = 'LEFT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('graph.select_leftright', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.mode = 'RIGHT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('graph.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi.properties.invert = False
-kmi = km.keymap_items.new('graph.select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('graph.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi.properties.axis_range = False
-kmi.properties.include_handles = False
-kmi = km.keymap_items.new('graph.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi.properties.axis_range = False
-kmi.properties.include_handles = False
-kmi = km.keymap_items.new('graph.select_more', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.select_less', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.frame_jump', 'S', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('graph.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.mirror', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('graph.handle_type', 'RIGHTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('graph.interpolation_type', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('graph.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('graph.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.keyframe_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('graph.click_insert', 'LEFTMOUSE', 'CLICK', ctrl=True)
-kmi = km.keymap_items.new('graph.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('graph.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('graph.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_M', 'ANY')
-kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS')
-kmi = km.keymap_items.new('transform.resize', 'S', 'PRESS')
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('graph.copy', 'C', 'PRESS', oskey=True)
-kmi = km.keymap_items.new('graph.paste', 'V', 'PRESS', oskey=True)
-kmi = km.keymap_items.new('graph.select_all_toggle', 'SELECTMOUSE', 'DOUBLE_CLICK')
-
-# Map Image
-km = kc.keymaps.new('Image', space_type='IMAGE_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('image.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('image.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('image.view_pan', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('image.view_pan', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('image.view_all', 'NDOF_BUTTON_FIT', 'PRESS')
-kmi = km.keymap_items.new('image.view_ndof', 'NDOF_BUTTON_MENU', 'ANY')
-kmi = km.keymap_items.new('image.view_zoom_in', 'WHEELINMOUSE', 'PRESS')
-kmi = km.keymap_items.new('image.view_zoom_out', 'WHEELOUTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('image.view_zoom_in', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('image.view_zoom_out', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new('image.view_zoom', 'MIDDLEMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('image.view_zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_8', 'PRESS', shift=True)
-kmi.properties.ratio = 8.0
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_4', 'PRESS', shift=True)
-kmi.properties.ratio = 4.0
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_2', 'PRESS', shift=True)
-kmi.properties.ratio = 2.0
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_1', 'PRESS')
-kmi.properties.ratio = 1.0
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_2', 'PRESS')
-kmi.properties.ratio = 0.5
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_4', 'PRESS')
-kmi.properties.ratio = 0.25
-kmi = km.keymap_items.new('image.view_zoom_ratio', 'NUMPAD_8', 'PRESS')
-kmi.properties.ratio = 0.125
-kmi = km.keymap_items.new('image.sample', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('image.curves_point_set', 'ACTIONMOUSE', 'PRESS', ctrl=True)
-kmi.properties.point = 'BLACK_POINT'
-kmi = km.keymap_items.new('image.curves_point_set', 'ACTIONMOUSE', 'PRESS', shift=True)
-kmi.properties.point = 'WHITE_POINT'
-kmi = km.keymap_items.new('object.mode_set', 'TAB', 'PRESS')
-kmi.properties.mode = 'EDIT'
-kmi.properties.toggle = True
-kmi = km.keymap_items.new('wm.context_set_int', 'ONE', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 0
-kmi = km.keymap_items.new('wm.context_set_int', 'TWO', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 1
-kmi = km.keymap_items.new('wm.context_set_int', 'THREE', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 2
-kmi = km.keymap_items.new('wm.context_set_int', 'FOUR', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 3
-kmi = km.keymap_items.new('wm.context_set_int', 'FIVE', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 4
-kmi = km.keymap_items.new('wm.context_set_int', 'SIX', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 5
-kmi = km.keymap_items.new('wm.context_set_int', 'SEVEN', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 6
-kmi = km.keymap_items.new('wm.context_set_int', 'EIGHT', 'PRESS')
-kmi.properties.data_path = 'space_data.image.render_slots.active_index'
-kmi.properties.value = 7
-
-# Map Node Editor
-km = kc.keymaps.new('Node Editor', space_type='NODE_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('node.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('node.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi.properties.tweak = True
-kmi = km.keymap_items.new('node.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi.properties.tweak = True
-kmi = km.keymap_items.new('node.link', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('node.resize', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('node.links_cut', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.select_link_viewer', 'LEFTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('node.backimage_move', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS')
-kmi.properties.factor = 0.833329975605011
-kmi = km.keymap_items.new('node.backimage_zoom', 'V', 'PRESS', alt=True)
-kmi.properties.factor = 1.2000000476837158
-kmi = km.keymap_items.new('node.backimage_sample', 'ACTIONMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS')
-kmi.properties.replace = False
-kmi = km.keymap_items.new('node.link_make', 'F', 'PRESS', ctrl=True)
-kmi.properties.replace = True
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'NODE_MT_add'
-kmi = km.keymap_items.new('node.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.duplicate_move_keep_inputs', 'D', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('node.hide_toggle', 'H', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.mute_toggle', 'M', 'PRESS')
-kmi = km.keymap_items.new('node.preview_toggle', 'H', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.hide_socket_toggle', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('node.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('node.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('node.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('node.delete_reconnect', 'X', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.select_all', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.select_linked_to', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.select_linked_from', 'L', 'PRESS')
-kmi = km.keymap_items.new('node.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.select_same_type_step', 'RIGHT_BRACKET', 'PRESS', shift=True)
-kmi.properties.prev = True
-kmi = km.keymap_items.new('node.select_same_type_step', 'LEFT_BRACKET', 'PRESS', shift=True)
-kmi.properties.prev = False
-kmi = km.keymap_items.new('node.group_make', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.group_ungroup', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.group_edit', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('node.read_viewlayers', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('node.read_fullsamplelayers', 'R', 'PRESS', shift=True)
-kmi = km.keymap_items.new('node.render_changed', 'Z', 'PRESS')
-kmi = km.keymap_items.new('node.translate_attach', 'W', 'PRESS')
-kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_A', 'ANY')
-kmi = km.keymap_items.new('node.translate_attach', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.rotate', 'E', 'PRESS')
-kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS')
-kmi = km.keymap_items.new('node.move_detach_links', 'D', 'PRESS', alt=True)
-kmi = km.keymap_items.new('node.move_detach_links', 'EVT_TWEAK_A', 'ANY', alt=True)
-kmi = km.keymap_items.new('node.move_detach_links', 'EVT_TWEAK_S', 'ANY', alt=True)
-
-# Map File Browser Main
-km = kc.keymaps.new('File Browser Main', space_type='FILE_BROWSER', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('file.execute', 'LEFTMOUSE', 'DOUBLE_CLICK')
-kmi.properties.need_active = True
-kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('file.select', 'LEFTMOUSE', 'CLICK', alt=True)
-kmi.properties.extend = True
-kmi.properties.fill = True
-kmi = km.keymap_items.new('file.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('file.refresh', 'F', 'PRESS')
-kmi = km.keymap_items.new('file.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('file.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('file.rename', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('file.highlight', 'MOUSEMOVE', 'ANY', any=True)
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS')
-kmi.properties.increment = 1
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', shift=True)
-kmi.properties.increment = 10
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_PLUS', 'PRESS', ctrl=True)
-kmi.properties.increment = 100
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS')
-kmi.properties.increment = -1
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', shift=True)
-kmi.properties.increment = -10
-kmi = km.keymap_items.new('file.filenum', 'NUMPAD_MINUS', 'PRESS', ctrl=True)
-kmi.properties.increment = -100
-
-# Map Dopesheet
-km = kc.keymaps.new('Dopesheet', space_type='DOPESHEET_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi.properties.column = False
-kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.column = True
-kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi.properties.column = False
-kmi = km.keymap_items.new('action.clickselect', 'LEFTMOUSE', 'PRESS', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.column = True
-kmi = km.keymap_items.new('action.select_leftright', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.mode = 'LEFT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('action.select_leftright', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.mode = 'RIGHT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('action.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi.properties.invert = False
-kmi = km.keymap_items.new('action.select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('action.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi.properties.axis_range = False
-kmi = km.keymap_items.new('action.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi.properties.axis_range = False
-kmi = km.keymap_items.new('action.select_more', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.select_less', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.select_linked', 'L', 'PRESS')
-kmi = km.keymap_items.new('action.frame_jump', 'S', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('action.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.mirror', 'M', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.handle_type', 'RIGHTMOUSE', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('action.interpolation_type', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.extrapolation_type', 'RIGHTMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('action.keyframe_type', 'T', 'PRESS')
-kmi = km.keymap_items.new('action.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('action.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('action.duplicate_move', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.keyframe_insert', 'I', 'PRESS')
-kmi = km.keymap_items.new('action.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.previewrange_set', 'P', 'PRESS', ctrl=True, alt=True)
-kmi = km.keymap_items.new('action.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('action.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('anim.channels_editable_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'W', 'PRESS')
-kmi.properties.mode = 'TIME_TRANSLATE'
-kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_M', 'ANY')
-kmi.properties.mode = 'TIME_TRANSLATE'
-kmi = km.keymap_items.new('transform.transform', 'S', 'PRESS')
-kmi.properties.mode = 'TIME_SCALE'
-kmi = km.keymap_items.new('transform.transform', 'T', 'PRESS', shift=True)
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('action.copy', 'C', 'PRESS', oskey=True)
-kmi = km.keymap_items.new('action.paste', 'V', 'PRESS', oskey=True)
-kmi = km.keymap_items.new('action.select_all_toggle', 'SELECTMOUSE', 'DOUBLE_CLICK')
-
-# Map NLA Channels
-km = kc.keymaps.new('NLA Channels', space_type='NLA_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('nla.channels_click', 'LEFTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.channels_click', 'LEFTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('nla.tracks_add', 'A', 'PRESS', shift=True)
-kmi.properties.above_selected = False
-kmi = km.keymap_items.new('nla.tracks_add', 'A', 'PRESS', shift=True, ctrl=True)
-kmi.properties.above_selected = True
-kmi = km.keymap_items.new('nla.tracks_delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('nla.tracks_delete', 'DEL', 'PRESS')
-
-# Map NLA Editor
-km = kc.keymaps.new('NLA Editor', space_type='NLA_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.click_select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.select_leftright', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.mode = 'CHECK'
-kmi.properties.extend = True
-kmi = km.keymap_items.new('nla.select_leftright', 'LEFT_BRACKET', 'PRESS')
-kmi.properties.mode = 'LEFT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.select_leftright', 'RIGHT_BRACKET', 'PRESS')
-kmi.properties.mode = 'RIGHT'
-kmi.properties.extend = False
-kmi = km.keymap_items.new('nla.select_all_toggle', 'A', 'PRESS', ctrl=True)
-kmi.properties.invert = False
-kmi = km.keymap_items.new('nla.select_all_toggle', 'I', 'PRESS', ctrl=True)
-kmi.properties.invert = True
-kmi = km.keymap_items.new('nla.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi.properties.axis_range = False
-kmi = km.keymap_items.new('nla.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi.properties.axis_range = False
-kmi = km.keymap_items.new('nla.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('nla.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('nla.tweakmode_enter', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('nla.tweakmode_exit', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('nla.actionclip_add', 'A', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.transition_add', 'T', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.soundclip_add', 'K', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.meta_add', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.meta_remove', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('nla.duplicate', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('nla.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('nla.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('nla.split', 'Y', 'PRESS')
-kmi = km.keymap_items.new('nla.mute_toggle', 'H', 'PRESS')
-kmi = km.keymap_items.new('nla.swap', 'F', 'PRESS', alt=True)
-kmi = km.keymap_items.new('nla.move_up', 'PAGE_UP', 'PRESS')
-kmi = km.keymap_items.new('nla.move_down', 'PAGE_DOWN', 'PRESS')
-kmi = km.keymap_items.new('nla.apply_scale', 'R', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('nla.clear_scale', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('nla.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('nla.fmodifier_add', 'M', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('transform.transform', 'W', 'PRESS')
-kmi = km.keymap_items.new('transform.transform', 'EVT_TWEAK_M', 'ANY')
-kmi = km.keymap_items.new('transform.transform', 'R', 'PRESS')
-kmi.properties.mode = 'TIME_SCALE'
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('nla.select_all_toggle', 'LEFTMOUSE', 'DOUBLE_CLICK')
-
-# Map Sequencer
-km = kc.keymaps.new('Sequencer', space_type='SEQUENCE_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('sequencer.properties', 'N', 'PRESS')
-kmi = km.keymap_items.new('sequencer.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('sequencer.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS')
-kmi.properties.type = 'SOFT'
-kmi = km.keymap_items.new('sequencer.cut', 'K', 'PRESS', shift=True)
-kmi.properties.type = 'HARD'
-kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('sequencer.mute', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', shift=True, ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('sequencer.unmute', 'H', 'PRESS', shift=True, alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('sequencer.lock', 'L', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.unlock', 'L', 'PRESS', shift=True, alt=True)
-kmi = km.keymap_items.new('sequencer.reassign_inputs', 'R', 'PRESS')
-kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.reload', 'R', 'PRESS', shift=True, alt=True)
-kmi.properties.adjust_length = True
-kmi = km.keymap_items.new('sequencer.offset_clear', 'O', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.duplicate', 'D', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.delete', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('sequencer.delete', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('sequencer.copy', 'C', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.paste', 'V', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.images_separate', 'Y', 'PRESS')
-kmi = km.keymap_items.new('sequencer.meta_toggle', 'TAB', 'PRESS')
-kmi = km.keymap_items.new('sequencer.meta_make', 'G', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.meta_separate', 'G', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('sequencer.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_UP', 'PRESS')
-kmi.properties.next = True
-kmi = km.keymap_items.new('sequencer.strip_jump', 'PAGE_DOWN', 'PRESS')
-kmi.properties.next = False
-kmi = km.keymap_items.new('sequencer.swap', 'LEFT_ARROW', 'PRESS', alt=True)
-kmi.properties.side = 'LEFT'
-kmi = km.keymap_items.new('sequencer.swap', 'RIGHT_ARROW', 'PRESS', alt=True)
-kmi.properties.side = 'RIGHT'
-kmi = km.keymap_items.new('sequencer.snap', 'S', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.swap_inputs', 'S', 'PRESS', alt=True)
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'ONE', 'PRESS')
-kmi.properties.camera = 1
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'TWO', 'PRESS')
-kmi.properties.camera = 2
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'THREE', 'PRESS')
-kmi.properties.camera = 3
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'FOUR', 'PRESS')
-kmi.properties.camera = 4
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'FIVE', 'PRESS')
-kmi.properties.camera = 5
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'SIX', 'PRESS')
-kmi.properties.camera = 6
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'SEVEN', 'PRESS')
-kmi.properties.camera = 7
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'EIGHT', 'PRESS')
-kmi.properties.camera = 8
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'NINE', 'PRESS')
-kmi.properties.camera = 9
-kmi = km.keymap_items.new('sequencer.cut_multicam', 'ZERO', 'PRESS')
-kmi.properties.camera = 10
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'CLICK')
-kmi.properties.extend = False
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'CLICK', shift=True)
-kmi.properties.extend = True
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', alt=True)
-kmi.properties.extend = False
-kmi.properties.linked_handle = True
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'CLICK', shift=True, alt=True)
-kmi.properties.extend = True
-kmi.properties.linked_handle = True
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = False
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.extend = False
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'MOUSE'
-kmi.properties.linked_time = True
-kmi = km.keymap_items.new('sequencer.select', 'SELECTMOUSE', 'PRESS', shift=True, ctrl=True)
-kmi.properties.extend = True
-kmi.properties.linked_handle = False
-kmi.properties.left_right = 'NONE'
-kmi.properties.linked_time = True
-kmi = km.keymap_items.new('sequencer.select_more', 'PERIOD', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.select_less', 'COMMA', 'PRESS', shift=True)
-kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('sequencer.select_linked_pick', 'L', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('sequencer.select_linked', 'L', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('sequencer.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('sequencer.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('sequencer.select_grouped', 'G', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'A', 'PRESS', shift=True)
-kmi.properties.name = 'SEQUENCER_MT_add'
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', shift=True)
-kmi.properties.name = 'SEQUENCER_MT_change'
-kmi = km.keymap_items.new('wm.context_set_int', 'O', 'PRESS')
-kmi.properties.data_path = 'scene.sequence_editor.overlay_frame'
-kmi.properties.value = 0
-kmi = km.keymap_items.new('transform.seq_slide', 'W', 'PRESS')
-kmi = km.keymap_items.new('transform.seq_slide', 'EVT_TWEAK_M', 'ANY')
-kmi = km.keymap_items.new('transform.transform', 'E', 'PRESS')
-kmi = km.keymap_items.new('marker.add', 'M', 'PRESS')
-kmi = km.keymap_items.new('marker.rename', 'M', 'PRESS', ctrl=True)
-
-# Map Clip Editor
-km = kc.keymaps.new('Clip Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('clip.view_pan', 'MIDDLEMOUSE', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.view_pan', 'TRACKPADPAN', 'ANY')
-kmi = km.keymap_items.new('clip.view_zoom', 'RIGHTMOUSE', 'PRESS', alt=True)
-kmi = km.keymap_items.new('clip.view_zoom', 'TRACKPADZOOM', 'ANY')
-kmi = km.keymap_items.new('clip.view_zoom_in', 'WHEELINMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_out', 'WHEELOUTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_in', 'NUMPAD_PLUS', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_out', 'NUMPAD_MINUS', 'PRESS')
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS', shift=True)
-kmi.properties.ratio = 8.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS', shift=True)
-kmi.properties.ratio = 4.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS', shift=True)
-kmi.properties.ratio = 2.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_1', 'PRESS')
-kmi.properties.ratio = 1.0
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_2', 'PRESS')
-kmi.properties.ratio = 0.5
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_4', 'PRESS')
-kmi.properties.ratio = 0.25
-kmi = km.keymap_items.new('clip.view_zoom_ratio', 'NUMPAD_8', 'PRESS')
-kmi.properties.ratio = 0.125
-kmi = km.keymap_items.new('clip.view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('clip.view_all', 'F', 'PRESS')
-kmi.properties.fit_view = True
-kmi = km.keymap_items.new('clip.view_selected', 'F', 'PRESS')
-kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, ctrl=True)
-kmi.properties.position = 'PATHSTART'
-kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, ctrl=True)
-kmi.properties.position = 'PATHEND'
-kmi = km.keymap_items.new('clip.frame_jump', 'LEFT_ARROW', 'PRESS', shift=True, alt=True)
-kmi.properties.position = 'FAILEDPREV'
-kmi = km.keymap_items.new('clip.frame_jump', 'RIGHT_ARROW', 'PRESS', shift=True, alt=True)
-kmi.properties.position = 'PATHSTART'
-kmi = km.keymap_items.new('clip.change_frame', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('clip.select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('clip.select_all', 'A', 'PRESS', ctrl=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('clip.select_all', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('clip.select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('clip.select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('clip.select_circle', 'Q', 'PRESS', shift=True)
-kmi = km.keymap_items.new('wm.call_menu', 'G', 'PRESS', shift=True)
-kmi.properties.name = 'CLIP_MT_select_grouped'
-kmi = km.keymap_items.new('clip.add_marker_slide', 'LEFTMOUSE', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('clip.delete_marker', 'DEL', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.delete_marker', 'X', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.slide_marker', 'LEFTMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.disable_markers', 'D', 'PRESS', shift=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('clip.delete_track', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('clip.delete_track', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', ctrl=True)
-kmi.properties.action = 'LOCK'
-kmi = km.keymap_items.new('clip.lock_tracks', 'L', 'PRESS', alt=True)
-kmi.properties.action = 'UNLOCK'
-kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS', ctrl=True)
-kmi.properties.unselected = False
-kmi = km.keymap_items.new('clip.hide_tracks', 'H', 'PRESS', alt=True)
-kmi.properties.unselected = True
-kmi = km.keymap_items.new('clip.hide_tracks_clear', 'H', 'PRESS', shift=True, ctrl=True)
-kmi = km.keymap_items.new('clip.join_tracks', 'J', 'PRESS', ctrl=True)
-kmi = km.keymap_items.new('wm.call_menu', 'RIGHTMOUSE', 'PRESS', ctrl=True)
-kmi.properties.name = 'CLIP_MT_tracking_specials'
-kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS')
-kmi.properties.data_path = 'space_data.lock_selection'
-kmi = km.keymap_items.new('wm.context_toggle', 'D', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.show_disabled'
-kmi = km.keymap_items.new('wm.context_toggle', 'S', 'PRESS', alt=True)
-kmi.properties.data_path = 'space_data.show_marker_search'
-kmi = km.keymap_items.new('wm.context_toggle', 'M', 'PRESS')
-kmi.properties.data_path = 'space_data.use_mute_footage'
-kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS')
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True)
-kmi.properties.action = 'REMAINED'
-kmi.properties.clear_active = False
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True)
-kmi.properties.action = 'UPTO'
-kmi.properties.clear_active = False
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True)
-kmi.properties.action = 'ALL'
-kmi.properties.clear_active = False
-
-# Map Clip Graph Editor
-km = kc.keymaps.new('Clip Graph Editor', space_type='CLIP_EDITOR', region_type='WINDOW', modal=False)
-
-kmi = km.keymap_items.new('clip.change_frame', 'ACTIONMOUSE', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('clip.graph_select', 'SELECTMOUSE', 'PRESS', shift=True)
-kmi.properties.extend = True
-kmi = km.keymap_items.new('clip.graph_select_all_markers', 'A', 'PRESS')
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('clip.graph_select_all_markers', 'I', 'PRESS', ctrl=True)
-kmi.properties.action = 'INVERT'
-kmi = km.keymap_items.new('clip.graph_select_box', 'EVT_TWEAK_S', 'ANY')
-kmi.properties.extend = False
-kmi = km.keymap_items.new('clip.graph_select_box', 'EVT_TWEAK_S', 'ANY', any=True)
-kmi = km.keymap_items.new('clip.graph_delete_curve', 'DEL', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_delete_curve', 'BACK_SPACE', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_delete_knot', 'DEL', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.graph_delete_knot', 'X', 'PRESS', shift=True)
-kmi = km.keymap_items.new('clip.graph_view_all', 'A', 'PRESS')
-kmi = km.keymap_items.new('clip.graph_center_current_frame', 'F', 'PRESS')
-kmi = km.keymap_items.new('wm.context_toggle', 'L', 'PRESS')
-kmi.properties.data_path = 'space_data.lock_time_cursor'
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', alt=True)
-kmi.properties.action = 'REMAINED'
-kmi.properties.clear_active = True
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True)
-kmi.properties.action = 'UPTO'
-kmi.properties.clear_active = True
-kmi = km.keymap_items.new('clip.clear_track_path', 'T', 'PRESS', shift=True, alt=True)
-kmi.properties.action = 'ALL'
-kmi.properties.clear_active = True
-kmi = km.keymap_items.new('clip.graph_disable_markers', 'D', 'PRESS', shift=True)
-kmi.properties.action = 'TOGGLE'
-kmi = km.keymap_items.new('transform.translate', 'W', 'PRESS')
-kmi = km.keymap_items.new('transform.translate', 'EVT_TWEAK_S', 'ANY')
-kmi = km.keymap_items.new('transform.resize', 'R', 'PRESS')
diff --git a/release/scripts/startup/bl_operators/object.py b/release/scripts/startup/bl_operators/object.py
index fddf15155fc..72fb1849c76 100644
--- a/release/scripts/startup/bl_operators/object.py
+++ b/release/scripts/startup/bl_operators/object.py
@@ -870,10 +870,7 @@ class DupliOffsetFromCursor(Operator):
return {'FINISHED'}
-class LoadImageAsEmpty(Operator):
- """Select an image file and create a new image empty with it"""
- bl_idname = "object.load_image_as_empty"
- bl_label = "Load Image as Empty"
+class LoadImageAsEmpty:
bl_options = {'REGISTER', 'UNDO'}
filepath: StringProperty(
@@ -896,6 +893,7 @@ class LoadImageAsEmpty(Operator):
scene = context.scene
space = context.space_data
cursor = (space if space and space.type == 'VIEW_3D' else scene).cursor_location
+
try:
image = bpy.data.images.load(self.filepath, check_existing=True)
except RuntimeError as ex:
@@ -908,18 +906,47 @@ class LoadImageAsEmpty(Operator):
location=cursor,
view_align=self.view_align,
)
+
obj = context.active_object
obj.data = image
obj.empty_display_size = 5.0
+ self.set_settings(context, obj)
return {'FINISHED'}
+ def set_settings(self, context, obj):
+ pass
+
+
+class LoadBackgroundImage(LoadImageAsEmpty, Operator):
+ """Add a reference image into the background behind objects"""
+ bl_idname = "object.load_background_image"
+ bl_label = "Load Background Image"
+
+ def set_settings(self, context, obj):
+ obj.empty_image_depth = "BACK"
+ obj.show_empty_image_backside = False
+
+ if context.space_data.type == "VIEW_3D":
+ if not context.space_data.region_3d.is_perspective:
+ obj.show_empty_image_perspective = False
+
+
+class LoadReferenceImage(LoadImageAsEmpty, Operator):
+ """Add a reference image into the scene between objects"""
+ bl_idname = "object.load_reference_image"
+ bl_label = "Load Reference Image"
+
+ def set_settings(self, context, obj):
+ pass
+
classes = (
ClearAllRestrictRender,
DupliOffsetFromCursor,
IsolateTypeRender,
JoinUVs,
- LoadImageAsEmpty,
+ LoadBackgroundImage,
+ LoadReferenceImage,
MakeDupliFace,
SelectCamera,
SelectHierarchy,
diff --git a/release/scripts/startup/bl_operators/object_align.py b/release/scripts/startup/bl_operators/object_align.py
index 60fb360480f..d4f8af1310d 100644
--- a/release/scripts/startup/bl_operators/object_align.py
+++ b/release/scripts/startup/bl_operators/object_align.py
@@ -66,13 +66,13 @@ def worldspace_bounds_from_object_bounds(bb_world):
return (Vector((left, front, up)), Vector((right, back, down)))
-def worldspace_bounds_from_object_data(scene, obj):
+def worldspace_bounds_from_object_data(depsgraph, obj):
matrix_world = obj.matrix_world.copy()
# Initialize the variables with the last vertex
- me = obj.to_mesh(scene=scene, apply_modifiers=True, settings='PREVIEW')
+ me = obj.to_mesh(depsgraph=depsgraph, apply_modifiers=True)
verts = me.vertices
val = matrix_world @ (verts[-1].co if verts else Vector((0.0, 0.0, 0.0)))
@@ -127,6 +127,7 @@ def align_objects(context,
relative_to,
bb_quality):
+ depsgraph = context.depsgraph
scene = context.scene
space = context.space_data
@@ -155,7 +156,7 @@ def align_objects(context,
for obj, bb_world in objects:
if bb_quality and obj.type == 'MESH':
- GBB = worldspace_bounds_from_object_data(scene, obj)
+ GBB = worldspace_bounds_from_object_data(depsgraph, obj)
else:
GBB = worldspace_bounds_from_object_bounds(bb_world)
@@ -219,7 +220,7 @@ def align_objects(context,
bb_world = [matrix_world @ Vector(v[:]) for v in obj.bound_box]
if bb_quality and obj.type == 'MESH':
- GBB = worldspace_bounds_from_object_data(scene, obj)
+ GBB = worldspace_bounds_from_object_data(depsgraph, obj)
else:
GBB = worldspace_bounds_from_object_bounds(bb_world)
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index f66c7082033..770133e2514 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -246,10 +246,8 @@ class ExecutePreset(Operator):
preset_class.reset_cb(context)
if ext == ".py":
- import importlib.util
- mod_spec = importlib.util.spec_from_file_location("__main__", filepath)
try:
- mod_spec.loader.exec_module(importlib.util.module_from_spec(mod_spec))
+ bpy.utils.execfile(filepath)
except Exception as ex:
self.report({'ERROR'}, "Failed to execute the preset: " + repr(ex))
@@ -443,32 +441,6 @@ class AddPresetHairDynamics(AddPresetBase, Operator):
]
-class AddPresetInteraction(AddPresetBase, Operator):
- """Add or remove an Application Interaction Preset"""
- bl_idname = "wm.interaction_preset_add"
- bl_label = "Add Interaction Preset"
- preset_menu = "USERPREF_MT_interaction_presets"
-
- preset_defines = [
- "user_preferences = bpy.context.user_preferences"
- ]
-
- preset_values = [
- "user_preferences.edit.use_drag_immediately",
- "user_preferences.edit.use_insertkey_xyz_to_rgb",
- "user_preferences.inputs.invert_mouse_zoom",
- "user_preferences.inputs.select_mouse",
- "user_preferences.inputs.use_emulate_numpad",
- "user_preferences.inputs.use_mouse_continuous",
- "user_preferences.inputs.use_mouse_emulate_3_button",
- "user_preferences.inputs.view_rotate_method",
- "user_preferences.inputs.view_zoom_axis",
- "user_preferences.inputs.view_zoom_method",
- ]
-
- preset_subdir = "interaction"
-
-
class AddPresetTrackingCamera(AddPresetBase, Operator):
"""Add or remove a Tracking Camera Intrinsics Preset"""
bl_idname = "clip.camera_preset_add"
@@ -750,7 +722,6 @@ classes = (
AddPresetCloth,
AddPresetFluid,
AddPresetHairDynamics,
- AddPresetInteraction,
AddPresetInterfaceTheme,
AddPresetKeyconfig,
AddPresetNodeColor,
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index f082fd308c6..8c0174d8f58 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -1419,49 +1419,6 @@ class WM_OT_keyconfig_activate(Operator):
return {'CANCELLED'}
-class WM_OT_appconfig_default(Operator):
- bl_idname = "wm.appconfig_default"
- bl_label = "Default Application Configuration"
-
- def execute(self, context):
- import os
-
- context.window_manager.keyconfigs.active = context.window_manager.keyconfigs.default
-
- filepath = os.path.join(bpy.utils.preset_paths("interaction")[0], "blender.py")
-
- if os.path.exists(filepath):
- bpy.ops.script.execute_preset(
- filepath=filepath,
- menu_idname="USERPREF_MT_interaction_presets",
- )
-
- return {'FINISHED'}
-
-
-class WM_OT_appconfig_activate(Operator):
- bl_idname = "wm.appconfig_activate"
- bl_label = "Activate Application Configuration"
-
- filepath: StringProperty(
- subtype='FILE_PATH',
- )
-
- def execute(self, context):
- import os
- filepath = self.filepath
- bpy.utils.keyconfig_set(filepath)
- dirname, filename = os.path.split(filepath)
- filepath = os.path.normpath(os.path.join(dirname, os.pardir, "interaction", filename))
- if os.path.exists(filepath):
- bpy.ops.script.execute_preset(
- filepath=filepath,
- menu_idname="USERPREF_MT_interaction_presets",
- )
-
- return {'FINISHED'}
-
-
class WM_OT_sysinfo(Operator):
"""Generate system information, saved into a text file"""
@@ -1656,7 +1613,7 @@ class WM_OT_keyconfig_export(Operator):
)
def execute(self, context):
- from bpy_extras import keyconfig_utils
+ from bl_keymap_utils.io import keyconfig_export_as_data
if not self.filepath:
raise Exception("Filepath not set")
@@ -1666,7 +1623,7 @@ class WM_OT_keyconfig_export(Operator):
wm = context.window_manager
- keyconfig_utils.keyconfig_export_as_data(
+ keyconfig_export_as_data(
wm,
wm.keyconfigs.active,
self.filepath,
@@ -2393,9 +2350,9 @@ class WM_OT_tool_set_by_name(Operator):
if not self.properties.is_property_set("name"):
WM_OT_toolbar._key_held = False
return {'PASS_THROUGH'}
- elif WM_OT_toolbar._key_held and event.value != 'RELEASE':
+ elif (WM_OT_toolbar._key_held == event.type) and (event.value != 'RELEASE'):
return {'PASS_THROUGH'}
- WM_OT_toolbar._key_held = False
+ WM_OT_toolbar._key_held = None
return self.execute(context)
@@ -2422,32 +2379,29 @@ class WM_OT_toolbar(Operator):
bl_idname = "wm.toolbar"
bl_label = "Toolbar"
- if use_toolbar_release_hack:
- _key_held = False
-
@classmethod
def poll(cls, context):
return context.space_data is not None
+ if use_toolbar_release_hack:
+ _key_held = None
+ def invoke(self, context, event):
+ WM_OT_toolbar._key_held = event.type
+ return self.execute(context)
+
def execute(self, context):
- from bl_ui.space_toolsystem_common import (
- ToolSelectPanelHelper,
- keymap_from_context,
- )
- space_type = context.space_data.type
+ 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'}
wm = context.window_manager
- keymap = keymap_from_context(context, space_type)
+ keymap = keymap_from_toolbar.generate(context, space_type)
def draw_menu(popover, context):
- if use_toolbar_release_hack:
- # Release event sets false.
- WM_OT_toolbar._key_held = True
-
layout = popover.layout
layout.operator_context = 'INVOKE_REGION_WIN'
cls.draw_cls(layout, context, detect_layout=False, scale_y=1.0)
@@ -2592,11 +2546,17 @@ class WM_MT_splash(Menu):
text = "Blender"
sub.menu("USERPREF_MT_keyconfigs", text=text)
- sub = col.split(factor=0.35)
- row = sub.row()
- row.alignment = 'RIGHT'
- row.label(text="Select With")
- sub.row().prop(userpref.inputs, 'select_mouse', expand=True)
+ kc = wm.keyconfigs.active
+ kc_prefs = kc.preferences
+ has_select_mouse = hasattr(kc_prefs, "select_mouse")
+ if has_select_mouse:
+ sub = col.split(factor=0.35)
+ row = sub.row()
+ row.alignment = 'RIGHT'
+ row.label(text="Select With")
+ sub.row().prop(kc_prefs, 'select_mouse', expand=True)
+ has_select_mouse = True
+
col.separator()
@@ -2617,7 +2577,9 @@ class WM_MT_splash(Menu):
#userpref = context.user_preferences
#sub.prop(userpref.system, "language", text="")
- col.label()
+ # Keep height constant
+ if not has_select_mouse:
+ col.label()
layout.label()
@@ -2747,8 +2709,6 @@ classes = (
WM_OT_addon_remove,
WM_OT_addon_userpref_show,
WM_OT_app_template_install,
- WM_OT_appconfig_activate,
- WM_OT_appconfig_default,
WM_OT_context_collection_boolean_set,
WM_OT_context_cycle_array,
WM_OT_context_cycle_enum,
diff --git a/release/scripts/startup/bl_ui/properties_data_empty.py b/release/scripts/startup/bl_ui/properties_data_empty.py
index f3a176a52fc..d72089c8a9a 100644
--- a/release/scripts/startup/bl_ui/properties_data_empty.py
+++ b/release/scripts/startup/bl_ui/properties_data_empty.py
@@ -54,9 +54,11 @@ class DATA_PT_empty(DataButtonsPanel, Panel):
col.prop(ob, "empty_image_offset", text="Offset X", index=0)
col.prop(ob, "empty_image_offset", text="Y", index=1)
- layout.prop(ob, "empty_image_depth", text="Depth", expand=True)
- layout.prop(ob, "show_empty_image_orthographic", text="Display Orthographic")
- layout.prop(ob, "show_empty_image_perspective", text="Display Perspective")
+ col = layout.column()
+ col.row().prop(ob, "empty_image_depth", text="Depth", expand=True)
+ col.prop(ob, "show_empty_image_orthographic", text="Display Orthographic")
+ col.prop(ob, "show_empty_image_perspective", text="Display Perspective")
+ col.prop(ob, "show_empty_image_backside", text="Display Backside")
classes = (
diff --git a/release/scripts/startup/bl_ui/properties_data_lightprobe.py b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
index 2ca7e1723b6..20ac2d52ad9 100644
--- a/release/scripts/startup/bl_ui/properties_data_lightprobe.py
+++ b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
@@ -77,6 +77,7 @@ class DATA_PT_lightprobe(DataButtonsPanel, Panel):
elif probe.type == 'PLANAR':
col = layout.column()
col.prop(probe, "influence_distance", text="Distance")
+ col.prop(probe, "falloff")
else:
col = layout.column()
col.prop(probe, "influence_type")
@@ -91,7 +92,10 @@ class DATA_PT_lightprobe(DataButtonsPanel, Panel):
col = layout.column()
sub = col.column()
- sub.prop(probe, "clip_start", text="Clipping Start")
+ if probe.type != 'PLANAR':
+ sub.prop(probe, "clip_start", text="Clipping Start")
+ else:
+ sub.prop(probe, "clip_start", text="Clipping Offset")
if probe.type != 'PLANAR':
sub.prop(probe, "clip_end", text="End")
diff --git a/release/scripts/startup/bl_ui/properties_data_modifier.py b/release/scripts/startup/bl_ui/properties_data_modifier.py
index 172fe07eab3..82685e15913 100644
--- a/release/scripts/startup/bl_ui/properties_data_modifier.py
+++ b/release/scripts/startup/bl_ui/properties_data_modifier.py
@@ -569,24 +569,59 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
layout.operator("object.meshdeform_bind", text="Bind")
def MIRROR(self, layout, ob, md):
- split = layout.split(factor=0.25)
+ axis_text = "XYZ"
+ split = layout.split(factor=0.33)
col = split.column()
col.label(text="Axis:")
- col.prop(md, "use_x")
- col.prop(md, "use_y")
- col.prop(md, "use_z")
+ for i, text in enumerate(axis_text):
+ col.prop(md, "use_axis", text=text, index=i)
col = split.column()
- col.label(text="Options:")
- col.prop(md, "use_mirror_merge", text="Merge")
- col.prop(md, "use_clip", text="Clipping")
- col.prop(md, "use_mirror_vertex_groups", text="Vertex Groups")
+ col.label(text="Bisect:")
+ for i, text in enumerate(axis_text):
+ colsub = col.column()
+ colsub.prop(md, "use_bisect_axis", text=text, index=i)
+ colsub.active = md.use_axis[i]
col = split.column()
+ col.label(text="Flip:")
+ for i, text in enumerate(axis_text):
+ colsub = col.column()
+ colsub.prop(md, "use_bisect_flip_axis", text=text, index=i)
+ colsub.active = md.use_axis[i] and md.use_bisect_axis[i]
+
+ layout.separator()
+
+ col = layout.column()
+ col.label(text="Mirror Object:")
+ col.prop(md, "mirror_object", text="")
+
+ layout.separator()
+
+ col = layout.column()
+ col.label(text="Options:")
+
+ row = layout.row()
+ row.prop(md, "use_mirror_vertex_groups", text="Vertex Groups")
+ row.prop(md, "use_clip", text="Clipping")
+ row = layout.row()
+ row.prop(md, "use_mirror_merge", text="Merge")
+
+ col = layout.column()
+ if md.use_mirror_merge is True:
+ col.prop(md, "merge_threshold")
+
+ layout.separator()
+ col = layout.column()
+
+
+ flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
+
col.label(text="Textures:")
- col.prop(md, "use_mirror_u", text="Flip U")
- col.prop(md, "use_mirror_v", text="Flip V")
+ row = layout.row()
+ row.prop(md, "use_mirror_u", text="Flip U")
+ row.prop(md, "use_mirror_v", text="Flip V")
col = layout.column(align=True)
@@ -600,12 +635,6 @@ class DATA_PT_modifiers(ModifierButtonsPanel, Panel):
col.prop(md, "offset_u")
col.prop(md, "offset_v")
- col = layout.column()
-
- if md.use_mirror_merge is True:
- col.prop(md, "merge_threshold")
- col.label(text="Mirror Object:")
- col.prop(md, "mirror_object", text="")
def MULTIRES(self, layout, ob, md):
layout.row().prop(md, "subdivision_type", expand=True)
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 ff92b3731c3..296e05a709d 100644
--- a/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
+++ b/release/scripts/startup/bl_ui/properties_grease_pencil_common.py
@@ -140,7 +140,7 @@ class AnnotationDrawingToolsPanel:
layout.separator()
col = layout.column(align=True)
- col.prop(gpd, "use_stroke_edit_mode", text="Enable Editing", icon='EDIT', toggle=True)
+ col.prop(gpd, "use_stroke_edit_mode", text="Enable Editing", toggle=True) # was: icon='EDIT'
class GreasePencilStrokeEditPanel:
@@ -573,7 +573,7 @@ class GPENCIL_MT_pie_sculpt(Menu):
col = pie.column()
# col.label(text="Tool:")
col.prop(settings, "sculpt_tool", text="")
- col.operator("gpencil.brush_paint", text="Sculpt", icon='SCULPTMODE_HLT')
+ col.operator("gpencil.sculpt_paint", text="Sculpt", icon='SCULPTMODE_HLT')
# E - Common Settings
col = pie.column(align=True)
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 18be337c204..026b306b49e 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -262,7 +262,7 @@ class RENDER_PT_eevee_volumetric(RenderButtonsPanel, Panel):
col = layout.column()
col.prop(props, "volumetric_tile_size")
col.prop(props, "volumetric_samples")
- col.prop(props, "volumetric_sample_distribution")
+ col.prop(props, "volumetric_sample_distribution", text="Distribution")
class RENDER_PT_eevee_volumetric_lighting(RenderButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index 50cf4bf9c0d..5870d344a7d 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -689,6 +689,7 @@ class CLIP_PT_tools_object(CLIP_PT_reconstruction_panel, Panel):
class CLIP_PT_objects(CLIP_PT_clip_view_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Objects"
bl_options = {'DEFAULT_CLOSED'}
@@ -711,6 +712,7 @@ class CLIP_PT_objects(CLIP_PT_clip_view_panel, Panel):
class CLIP_PT_track(CLIP_PT_tracking_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Track"
def draw(self, context):
@@ -775,6 +777,7 @@ class CLIP_PT_track(CLIP_PT_tracking_panel, Panel):
class CLIP_PT_plane_track(CLIP_PT_tracking_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Plane Track"
bl_options = {'DEFAULT_CLOSED'}
@@ -802,6 +805,7 @@ class CLIP_PT_plane_track(CLIP_PT_tracking_panel, Panel):
class CLIP_PT_track_settings(CLIP_PT_tracking_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Tracking Settings"
bl_options = {'DEFAULT_CLOSED'}
@@ -826,6 +830,7 @@ class CLIP_PT_track_settings(CLIP_PT_tracking_panel, Panel):
class CLIP_PT_track_settings_extras(CLIP_PT_tracking_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Tracking Settings Extras"
bl_parent_id = 'CLIP_PT_track_settings'
bl_options = {'DEFAULT_CLOSED'}
@@ -852,6 +857,7 @@ class CLIP_PT_track_settings_extras(CLIP_PT_tracking_panel, Panel):
class CLIP_PT_tracking_camera(Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Camera"
bl_options = {'DEFAULT_CLOSED'}
@@ -887,6 +893,7 @@ class CLIP_PT_tracking_camera(Panel):
class CLIP_PT_tracking_lens(Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Lens"
bl_options = {'DEFAULT_CLOSED'}
@@ -932,6 +939,7 @@ class CLIP_PT_tracking_lens(Panel):
class CLIP_PT_marker(CLIP_PT_tracking_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_label = "Marker"
bl_options = {'DEFAULT_CLOSED'}
@@ -1054,6 +1062,7 @@ class CLIP_PT_stabilization(CLIP_PT_reconstruction_panel, Panel):
class CLIP_PT_proxy(CLIP_PT_clip_view_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Footage"
bl_label = "Proxy/Timecode"
bl_options = {'DEFAULT_CLOSED'}
@@ -1127,31 +1136,37 @@ from .properties_mask_common import (
class CLIP_PT_mask_layers(MASK_PT_layers, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Mask"
class CLIP_PT_mask_display(MASK_PT_display, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'HEADER'
+ bl_category = "Mask"
class CLIP_PT_active_mask_spline(MASK_PT_spline, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Mask"
class CLIP_PT_active_mask_point(MASK_PT_point, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Mask"
class CLIP_PT_mask(MASK_PT_mask, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Mask"
class CLIP_PT_tools_mask_transforms(MASK_PT_transforms, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'TOOLS'
+ bl_category = "Mask"
# --- end mask ---
@@ -1160,6 +1175,7 @@ class CLIP_PT_tools_mask_transforms(MASK_PT_transforms, Panel):
class CLIP_PT_footage(CLIP_PT_clip_view_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Footage"
bl_label = "Footage Settings"
bl_options = {'DEFAULT_CLOSED'}
@@ -1203,6 +1219,7 @@ class CLIP_PT_tools_scenesetup(Panel):
class CLIP_PT_grease_pencil(AnnotationDataPanel, CLIP_PT_clip_view_panel, Panel):
bl_space_type = 'CLIP_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Track"
bl_options = {'DEFAULT_CLOSED'}
# NOTE: this is just a wrapper around the generic GP Panel
diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py
index b3daba47a13..836e15ef07b 100644
--- a/release/scripts/startup/bl_ui/space_image.py
+++ b/release/scripts/startup/bl_ui/space_image.py
@@ -653,26 +653,31 @@ from .properties_mask_common import (
class IMAGE_PT_mask(MASK_PT_mask, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
class IMAGE_PT_mask_layers(MASK_PT_layers, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
class IMAGE_PT_mask_display(MASK_PT_display, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
class IMAGE_PT_active_mask_spline(MASK_PT_spline, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
class IMAGE_PT_active_mask_point(MASK_PT_point, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
# --- end mask ---
@@ -681,6 +686,7 @@ class IMAGE_PT_active_mask_point(MASK_PT_point, Panel):
class IMAGE_PT_image_properties(Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Image"
@classmethod
@@ -802,6 +808,7 @@ class IMAGE_UL_render_slots(UIList):
class IMAGE_PT_render_slots(Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Render Slots"
@classmethod
@@ -1187,6 +1194,7 @@ class ImageScopesPanel:
class IMAGE_PT_view_scopes(ImageScopesPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Scopes"
def draw(self, layout):
@@ -1196,6 +1204,7 @@ class IMAGE_PT_view_scopes(ImageScopesPanel, Panel):
class IMAGE_PT_view_histogram(ImageScopesPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Histogram"
bl_parent_id = 'IMAGE_PT_view_scopes'
@@ -1215,6 +1224,7 @@ class IMAGE_PT_view_histogram(ImageScopesPanel, Panel):
class IMAGE_PT_view_waveform(ImageScopesPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Waveform"
bl_parent_id = 'IMAGE_PT_view_scopes'
bl_options = {'DEFAULT_CLOSED'}
@@ -1233,6 +1243,7 @@ class IMAGE_PT_view_waveform(ImageScopesPanel, Panel):
class IMAGE_PT_view_vectorscope(ImageScopesPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Vectorscope"
bl_parent_id = 'IMAGE_PT_view_scopes'
bl_options = {'DEFAULT_CLOSED'}
@@ -1248,6 +1259,7 @@ class IMAGE_PT_view_vectorscope(ImageScopesPanel, Panel):
class IMAGE_PT_sample_line(ImageScopesPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Sample Line"
bl_parent_id = 'IMAGE_PT_view_scopes'
bl_options = {'DEFAULT_CLOSED'}
@@ -1269,6 +1281,7 @@ class IMAGE_PT_sample_line(ImageScopesPanel, Panel):
class IMAGE_PT_scope_sample(ImageScopesPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
bl_label = "Samples"
bl_parent_id = 'IMAGE_PT_view_scopes'
bl_options = {'DEFAULT_CLOSED'}
@@ -1292,6 +1305,7 @@ class IMAGE_PT_scope_sample(ImageScopesPanel, Panel):
class IMAGE_PT_grease_pencil(AnnotationDataPanel, Panel):
bl_space_type = 'IMAGE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Image"
# NOTE: this is just a wrapper around the generic GP Panel.
diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index 829ccd706b9..49c55410f53 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -43,8 +43,15 @@ class INFO_MT_area(Menu):
layout.operator("screen.region_quadview")
layout.separator()
+ layout.operator("screen.area_split", text="Horizontal Split").direction = 'HORIZONTAL'
+ layout.operator("screen.area_split", text="Vertical Split").direction = 'VERTICAL'
+
+ layout.separator()
+
layout.operator("screen.area_dupli", icon='DUPLICATE')
+
layout.separator()
+
layout.operator("screen.screen_full_area")
layout.operator("screen.screen_full_area", text="Toggle Fullscreen Area", icon='FULLSCREEN_ENTER').use_hide_panels = True
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 26b52617616..a15bb24d100 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -180,9 +180,11 @@ class NODE_MT_add(bpy.types.Menu):
layout = self.layout
layout.operator_context = 'INVOKE_DEFAULT'
- props = layout.operator("node.add_search", text="Search ...")
+ props = layout.operator("node.add_search", text="Search...", icon="VIEWZOOM")
props.use_transform = True
+ layout.separator()
+
# actual node submenus are defined by draw functions from node categories
nodeitems_utils.draw_node_categories_menu(self, context)
@@ -358,6 +360,7 @@ class NODE_MT_specials(Menu):
class NODE_PT_active_node_generic(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_label = "Node"
@classmethod
@@ -375,6 +378,7 @@ class NODE_PT_active_node_generic(Panel):
class NODE_PT_active_node_color(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_label = "Color"
bl_options = {'DEFAULT_CLOSED'}
bl_parent_id = 'NODE_PT_active_node_generic'
@@ -404,6 +408,7 @@ class NODE_PT_active_node_color(Panel):
class NODE_PT_active_node_properties(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_label = "Properties"
bl_options = {'DEFAULT_CLOSED'}
bl_parent_id = 'NODE_PT_active_node_generic'
@@ -437,6 +442,7 @@ class NODE_PT_active_node_properties(Panel):
class NODE_PT_backdrop(Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_label = "Backdrop"
@classmethod
@@ -471,6 +477,7 @@ class NODE_PT_backdrop(Panel):
class NODE_PT_quality(bpy.types.Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_label = "Performance"
@classmethod
@@ -524,6 +531,7 @@ class NODE_UL_interface_sockets(bpy.types.UIList):
class NODE_PT_grease_pencil(AnnotationDataPanel, Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_options = {'DEFAULT_CLOSED'}
# NOTE: this is just a wrapper around the generic GP Panel
@@ -537,6 +545,7 @@ class NODE_PT_grease_pencil(AnnotationDataPanel, Panel):
class NODE_PT_grease_pencil_tools(GreasePencilToolsPanel, Panel):
bl_space_type = 'NODE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Node"
bl_options = {'DEFAULT_CLOSED'}
# NOTE: this is just a wrapper around the generic GP tools panel
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 402913ab642..46b0e26cda2 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -476,14 +476,14 @@ class SEQUENCER_MT_strip_lock_mute(Menu):
def draw(self, context):
layout = self.layout
- layout.operator("sequencer.lock", icon='LOCK')
+ layout.operator("sequencer.lock", icon='LOCKED')
layout.operator("sequencer.unlock")
layout.separator()
layout.operator("sequencer.mute").unselected = False
layout.operator("sequencer.unmute").unselected = False
- layout.operator("sequencer.mute", text="Mute Deselected Strips").unselected = True
+ layout.operator("sequencer.mute", text="Mute Unselected Strips").unselected = True
class SEQUENCER_MT_strip(Menu):
@@ -1185,6 +1185,7 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):
bl_label = "Scene Preview/Render"
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Strip"
def draw(self, context):
layout = self.layout
@@ -1203,6 +1204,7 @@ class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):
class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel):
bl_label = "View Settings"
+ bl_category = "Strip"
def draw(self, context):
layout = self.layout
@@ -1224,6 +1226,7 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel):
class SEQUENCER_PT_view_safe_areas(SequencerButtonsPanel_Output, Panel):
bl_label = "Safe Areas"
+ bl_category = "Strip"
bl_options = {'DEFAULT_CLOSED'}
@classmethod
@@ -1326,6 +1329,7 @@ class SEQUENCER_PT_modifiers(SequencerButtonsPanel, Panel):
class SEQUENCER_PT_grease_pencil(AnnotationDataPanel, SequencerButtonsPanel_Output, Panel):
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Strip"
# NOTE: this is just a wrapper around the generic GP Panel
# But, it should only show up when there are images in the preview region
@@ -1334,6 +1338,7 @@ class SEQUENCER_PT_grease_pencil(AnnotationDataPanel, SequencerButtonsPanel_Outp
class SEQUENCER_PT_grease_pencil_tools(GreasePencilToolsPanel, SequencerButtonsPanel_Output, Panel):
bl_space_type = 'SEQUENCE_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Strip"
# NOTE: this is just a wrapper around the generic GP tools panel
# It contains access to some essential tools usually found only in
diff --git a/release/scripts/startup/bl_ui/space_text.py b/release/scripts/startup/bl_ui/space_text.py
index 9ef165a36a6..12ba1c31cd5 100644
--- a/release/scripts/startup/bl_ui/space_text.py
+++ b/release/scripts/startup/bl_ui/space_text.py
@@ -111,6 +111,7 @@ class TEXT_MT_editor_menus(Menu):
class TEXT_PT_properties(Panel):
bl_space_type = 'TEXT_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Text"
bl_label = "Properties"
def draw(self, context):
@@ -142,6 +143,7 @@ class TEXT_PT_properties(Panel):
class TEXT_PT_find(Panel):
bl_space_type = 'TEXT_EDITOR'
bl_region_type = 'UI'
+ bl_category = "Text"
bl_label = "Find"
def draw(self, context):
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_common.py b/release/scripts/startup/bl_ui/space_toolsystem_common.py
index e06224b8924..2ff5c9692ec 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_common.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_common.py
@@ -29,7 +29,6 @@ __all__ = (
"activate_by_name_or_cycle",
"description_from_name",
"keymap_from_name",
- "keymap_from_context",
)
# Support reloading icons.
@@ -49,8 +48,8 @@ def _keymap_fn_from_seq(keymap_data):
def keymap_fn(km):
if keymap_fn.keymap_data:
- from bpy_extras.keyconfig_utils import keymap_items_from_data
- keymap_items_from_data(km, keymap_fn.keymap_data)
+ from bl_keymap_utils.io import keymap_init_from_data
+ keymap_init_from_data(km, keymap_fn.keymap_data)
keymap_fn.keymap_data = keymap_data
return keymap_fn
@@ -307,7 +306,7 @@ class ToolSelectPanelHelper:
if km is None:
km = kc.keymaps.new(km_idname, space_type=cls.bl_space_type, region_type='WINDOW', tool=True)
keymap_fn[0](km)
- keymap_fn[0] = km
+ keymap_fn[0] = km.name
# Special internal function, gives use items that contain keymaps.
@staticmethod
@@ -355,9 +354,9 @@ class ToolSelectPanelHelper:
for context_mode_test, tools in cls.tools_all():
if context_mode_test == context_mode:
for item in cls._tools_flatten_with_keymap(tools):
- km = item.keymap[0]
+ km_name = item.keymap[0]
# print((km.name, cls.bl_space_type, 'WINDOW', []))
- yield (km.name, cls.bl_space_type, 'WINDOW', [])
+ yield (km_name, cls.bl_space_type, 'WINDOW', [])
# -------------------------------------------------------------------------
# Layout Generators
@@ -605,7 +604,7 @@ def _activate_by_item(context, space_type, item, index):
tool = ToolSelectPanelHelper._tool_active_from_context(context, space_type, create=True)
tool.setup(
name=item.text,
- keymap=item.keymap[0].name if item.keymap is not None else "",
+ keymap=item.keymap[0] if item.keymap is not None else "",
cursor=item.cursor or 'DEFAULT',
gizmo_group=item.widget or "",
data_block=item.data_block or "",
@@ -688,7 +687,14 @@ def description_from_name(context, space_type, text, *, use_operator=True):
if operator is None:
if item.keymap is not None:
- operator = item.keymap[0].keymap_items[0].idname
+ wm = context.window_manager
+ keyconf = wm.keyconfigs.active
+ km = keyconf.keymaps.get(item.keymap[0])
+ if km is not None:
+ for kmi in km.keymap_items:
+ if kmi.active:
+ operator = kmi.idname
+ break
if operator is not None:
import _bpy
@@ -709,325 +715,6 @@ def keymap_from_name(context, space_type, text):
return ""
-def keymap_from_context(context, space_type):
- """
- Keymap for popup toolbar, currently generated each time.
- """
-
- def modifier_keywords_from_item(kmi):
- kw = {}
- for (attr, default) in (
- ("any", False),
- ("shift", False),
- ("ctrl", False),
- ("alt", False),
- ("oskey", False),
- ("key_modifier", 'NONE'),
- ):
- val = getattr(kmi, attr)
- if val != default:
- kw[attr] = val
- return kw
-
- def dict_as_tuple(d):
- return tuple((k, v) for (k, v) in sorted(d.items()))
-
- use_simple_keymap = False
-
- # Press the toolbar popup key again to set the default tool,
- # this is useful because the cursor tool is useful as a way
- # 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
- # TODO: support other tools for modes which don't use the cursor.
- tap_reset_tool = "Cursor"
- # Check the tool is available in the current context.
- if ToolSelectPanelHelper._tool_get_by_name(context, space_type, tap_reset_tool)[1] is None:
- use_tap_reset = False
-
- from bl_operators.wm import use_toolbar_release_hack
-
- # Pie-menu style release to activate.
- use_release_confirm = True
-
- # Generate items when no keys are mapped.
- use_auto_keymap = True
-
- # Temporary, only create so we can pass 'properties' to find_item_from_operator.
- use_hack_properties = True
-
- km_name = "Toolbar Popup"
- wm = context.window_manager
- keyconf = wm.keyconfigs.active
- keymap = keyconf.keymaps.get(km_name)
- if keymap is None:
- keymap = keyconf.keymaps.new(km_name, space_type='EMPTY', region_type='TEMPORARY', tool=True)
- for kmi in keymap.keymap_items:
- keymap.keymap_items.remove(kmi)
-
- kmi_unique_args = set()
-
- cls = ToolSelectPanelHelper._tool_class_from_space_type(space_type)
-
- items_all = [
- # 0: tool
- # 1: keymap item (direct access)
- # 2: keymap item (newly calculated for toolbar)
- [item, None, None]
- for item in ToolSelectPanelHelper._tools_flatten(cls.tools_from_context(context))
- if item is not None
- ]
-
- if use_hack_properties:
- kmi_hack = keymap.keymap_items.new("wm.tool_set_by_name", 'A', 'PRESS')
- kmi_hack_properties = kmi_hack.properties
-
- kmi_hack_brush_select = keymap.keymap_items.new("paint.brush_select", 'A', 'PRESS')
- kmi_hack_brush_select_properties = kmi_hack_brush_select.properties
-
- if use_release_confirm or use_tap_reset:
- kmi_toolbar = wm.keyconfigs.find_item_from_operator(idname="wm.toolbar")[1]
- kmi_toolbar_type = None if not kmi_toolbar else kmi_toolbar.type
- if use_tap_reset and kmi_toolbar_type is not None:
- kmi_toolbar_args = {
- "type": kmi_toolbar_type,
- **modifier_keywords_from_item(kmi_toolbar),
- }
- else:
- use_tap_reset = False
- del kmi_toolbar
-
- if use_tap_reset:
- kmi_found = None
- if use_hack_properties:
- # First check for direct assignment, if this tool already has a key, no need to add a new one.
- kmi_hack_properties.name = tap_reset_tool
- kmi_found = wm.keyconfigs.find_item_from_operator(
- idname="wm.tool_set_by_name",
- context='INVOKE_REGION_WIN',
- # properties={"name": item.text},
- properties=kmi_hack_properties,
- )[1]
- if kmi_found:
- use_tap_reset = False
- del kmi_found
-
- if use_tap_reset:
- kmi_toolbar_tuple = dict_as_tuple(kmi_toolbar_args)
- if kmi_toolbar_tuple not in kmi_unique_args:
- kmi = keymap.keymap_items.new(
- "wm.tool_set_by_name",
- value='PRESS' if use_toolbar_release_hack else 'DOUBLE_CLICK',
- **kmi_toolbar_args,
- )
- kmi.properties.name = tap_reset_tool
- kmi_unique_args.add(kmi_toolbar_tuple)
- del kmi_toolbar_tuple
-
- if use_simple_keymap:
- # Simply assign a key from A-Z.
- for i, (item, _, _) in enumerate(items_all):
- key = chr(ord('A') + i)
- kmi = keymap.keymap_items.new("wm.tool_set_by_name", key, 'PRESS')
- kmi.properties.name = item.text
- else:
- for item_container in items_all:
- item = item_container[0]
- # Only check the first item in the tools key-map (a little arbitrary).
-
- if use_hack_properties:
- # First check for direct assignment.
- kmi_hack_properties.name = item.text
- kmi_found = wm.keyconfigs.find_item_from_operator(
- idname="wm.tool_set_by_name",
- context='INVOKE_REGION_WIN',
- # properties={"name": item.text},
- properties=kmi_hack_properties,
- )[1]
-
- if kmi_found is None:
- if item.data_block:
- # PAINT_OT_brush_select
- mode = context.active_object.mode
- # See: BKE_paint_get_tool_prop_id_from_paintmode
- attr = {
- 'SCULPT': "sculpt_tool",
- 'VERTEX_PAINT': "vertex_tool",
- 'WEIGHT_PAINT': "weight_tool",
- 'TEXTURE_PAINT': "image_tool",
- 'GPENCIL_PAINT': "gpencil_tool",
- }.get(mode, None)
- if attr is not None:
- setattr(kmi_hack_brush_select_properties, attr, item.data_block)
- kmi_found = wm.keyconfigs.find_item_from_operator(
- idname="paint.brush_select",
- context='INVOKE_REGION_WIN',
- properties=kmi_hack_brush_select_properties,
- )[1]
- else:
- print("Unsupported mode:", mode)
- del mode, attr
-
- else:
- kmi_found = None
-
- if kmi_found is not None:
- pass
- elif item.operator is not None:
- kmi_found = wm.keyconfigs.find_item_from_operator(
- idname=item.operator,
- context='INVOKE_REGION_WIN',
- )[1]
- elif item.keymap is not None:
- kmi_first = item.keymap[0].keymap_items[0]
- kmi_found = wm.keyconfigs.find_item_from_operator(
- idname=kmi_first.idname,
- # properties=kmi_first.properties, # prevents matches, don't use.
- context='INVOKE_REGION_WIN',
- )[1]
- del kmi_first
- else:
- kmi_found = None
- item_container[1] = kmi_found
-
- # More complex multi-pass test.
- for item_container in items_all:
- item, kmi_found = item_container[:2]
- if kmi_found is None:
- continue
- kmi_found_type = kmi_found.type
-
- # Only for single keys.
- if (
- (len(kmi_found_type) == 1) or
- # When a tool is being activated instead of running an operator, just copy the shortcut.
- (kmi_found.idname in {"wm.tool_set_by_name", "WM_OT_tool_set_by_name"})
- ):
- kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)}
- kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
- kmi.properties.name = item.text
- item_container[2] = kmi
- if use_auto_keymap:
- kmi_unique_args.add(dict_as_tuple(kmi_args))
-
- # Test for key_modifier, where alpha key is used as a 'key_modifier'
- # (grease pencil holding 'D' for example).
- for item_container in items_all:
- item, kmi_found, kmi_exist = item_container
- if kmi_found is None or kmi_exist:
- continue
-
- kmi_found_type = kmi_found.type
- if kmi_found_type in {
- 'LEFTMOUSE',
- 'RIGHTMOUSE',
- 'MIDDLEMOUSE',
- 'BUTTON4MOUSE',
- 'BUTTON5MOUSE',
- 'BUTTON6MOUSE',
- 'BUTTON7MOUSE',
- 'ACTIONMOUSE',
- 'SELECTMOUSE',
- }:
- kmi_found_type = kmi_found.key_modifier
- # excludes 'NONE'
- if len(kmi_found_type) == 1:
- kmi_args = {"type": kmi_found_type, **modifier_keywords_from_item(kmi_found)}
- del kmi_args["key_modifier"]
- kmi_tuple = dict_as_tuple(kmi_args)
- if kmi_tuple in kmi_unique_args:
- continue
- kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
- kmi.properties.name = item.text
- item_container[2] = kmi
- if use_auto_keymap:
- kmi_unique_args.add(kmi_tuple)
-
- if use_auto_keymap:
- # Map all unmapped keys to numbers,
- # while this is a bit strange it means users will not confuse regular key bindings to ordered bindings.
-
- # Free events (last used first).
- kmi_type_auto = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE', 'SIX', 'SEVEN', 'EIGHT', 'NINE', 'ZERO')
- # Map both numbers and num-pad.
- kmi_type_dupe = {
- 'ONE': 'NUMPAD_1',
- 'TWO': 'NUMPAD_2',
- 'THREE': 'NUMPAD_3',
- 'FOUR': 'NUMPAD_4',
- 'FIVE': 'NUMPAD_5',
- 'SIX': 'NUMPAD_6',
- 'SEVEN': 'NUMPAD_7',
- 'EIGHT': 'NUMPAD_8',
- 'NINE': 'NUMPAD_9',
- 'ZERO': 'NUMPAD_0',
- }
-
- def iter_free_events():
- for mod in ({}, {"shift": True}, {"ctrl": True}, {"alt": True}):
- for e in kmi_type_auto:
- yield (e, mod)
-
- iter_events = iter(iter_free_events())
-
- for item_container in items_all:
- item, kmi_found, kmi_exist = item_container
- if kmi_exist:
- continue
- kmi_args = None
- while True:
- key, mod = next(iter_events, (None, None))
- if key is None:
- break
- kmi_args = {"type": key, **mod}
- kmi_tuple = dict_as_tuple(kmi_args)
- if kmi_tuple in kmi_unique_args:
- kmi_args = None
- else:
- break
-
- if kmi_args is not None:
- kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
- kmi.properties.name = item.text
- item_container[2] = kmi
- if use_auto_keymap:
- kmi_unique_args.add(kmi_tuple)
-
- key = kmi_type_dupe.get(kmi_args["type"])
- if key is not None:
- kmi_args["type"] = key
- kmi_tuple = dict_as_tuple(kmi_args)
- if not kmi_tuple in kmi_unique_args:
- kmi = keymap.keymap_items.new(idname="wm.tool_set_by_name", value='PRESS', **kmi_args)
- kmi.properties.name = item.text
- if use_auto_keymap:
- kmi_unique_args.add(kmi_tuple)
-
- if use_hack_properties:
- keymap.keymap_items.remove(kmi_hack)
-
- if use_release_confirm:
- kmi = keymap.keymap_items.new(
- "ui.button_execute",
- type=kmi_toolbar_type,
- value='RELEASE',
- )
- kmi.properties.skip_depressed = True
-
- if use_toolbar_release_hack:
- # ... or pass through to let the toolbar know we're released.
- # Let the operator know we're released.
- kmi = keymap.keymap_items.new(
- "wm.tool_set_by_name",
- type=kmi_toolbar_type,
- value='RELEASE',
- )
-
- wm.keyconfigs.update()
- return keymap
-
-
classes = (
WM_MT_toolsystem_submenu,
)
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index e681b794f66..fab001cdb5c 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -63,6 +63,15 @@ def generate_from_enum_ex(
return tuple(tool_defs)
+# Use for shared widget data.
+class _template_widget:
+ class VIEW3D_GGT_xform_extrude:
+ @staticmethod
+ def draw_settings(context, layout, tool):
+ props = tool.gizmo_group_properties("VIEW3D_GGT_xform_extrude")
+ layout.prop(props, "axis_type", expand=True)
+
+
class _defs_view3d_generic:
@ToolDef.from_fn
def cursor():
@@ -76,6 +85,7 @@ class _defs_view3d_generic:
"Set the cursor location, drag to transform"
),
icon="ops.generic.cursor",
+ keymap=(),
draw_settings=draw_settings,
)
@@ -354,8 +364,9 @@ class _defs_edit_armature:
return dict(
text="Extrude",
icon="ops.armature.extrude_move",
- widget=None,
+ widget="VIEW3D_GGT_xform_extrude",
keymap=(),
+ draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings,
)
@ToolDef.from_fn
@@ -508,9 +519,6 @@ class _defs_edit_mesh:
@ToolDef.from_fn
def extrude():
- def draw_settings(context, layout, tool):
- props = tool.gizmo_group_properties("MESH_GGT_extrude")
- layout.prop(props, "axis_type", expand=True)
return dict(
text="Extrude Region",
# The operator description isn't useful in this case, give our own.
@@ -518,11 +526,11 @@ class _defs_edit_mesh:
"Extrude freely or along an axis"
),
icon="ops.mesh.extrude_region_move",
- widget="MESH_GGT_extrude",
+ widget="VIEW3D_GGT_xform_extrude",
# Important to use same operator as 'E' key.
operator="view3d.edit_mesh_extrude_move_normal",
keymap=(),
- draw_settings=draw_settings,
+ draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings,
)
@ToolDef.from_fn
@@ -732,8 +740,9 @@ class _defs_edit_curve:
return dict(
text="Extrude",
icon="ops.curve.extrude_move",
- widget=None,
+ widget="VIEW3D_GGT_xform_extrude",
keymap=(),
+ draw_settings=_template_widget.VIEW3D_GGT_xform_extrude.draw_settings,
)
@ToolDef.from_fn
@@ -993,7 +1002,7 @@ class _defs_image_uv_sculpt:
return generate_from_enum_ex(
context,
icon_prefix="brush.uv_sculpt.",
- data=context.tool_settings,
+ type=bpy.types.ToolSettings,
attr="uv_sculpt_tool",
)
@@ -1017,6 +1026,7 @@ class _defs_gpencil_paint:
return dict(
text="Line",
icon="ops.gpencil.primitive_line",
+ cursor='CROSSHAIR',
widget=None,
keymap=(),
)
@@ -1026,6 +1036,7 @@ class _defs_gpencil_paint:
return dict(
text="Box",
icon="ops.gpencil.primitive_box",
+ cursor='CROSSHAIR',
widget=None,
keymap=(),
)
@@ -1035,6 +1046,7 @@ class _defs_gpencil_paint:
return dict(
text="Circle",
icon="ops.gpencil.primitive_circle",
+ cursor='CROSSHAIR',
widget=None,
keymap=(),
)
@@ -1226,8 +1238,8 @@ class IMAGE_PT_tools_active(ToolSelectPanelHelper, Panel):
'VIEW': [
],
'UV': [
- _defs_image_generic.cursor,
*_tools_select,
+ _defs_image_generic.cursor,
None,
*_tools_transform,
None,
@@ -1316,16 +1328,16 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
# End group.
],
'OBJECT': [
- _defs_view3d_generic.cursor,
*_tools_select,
+ _defs_view3d_generic.cursor,
None,
*_tools_transform,
None,
*_tools_annotate,
],
'POSE': [
- _defs_view3d_generic.cursor,
*_tools_select,
+ _defs_view3d_generic.cursor,
None,
*_tools_transform,
None,
@@ -1338,8 +1350,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
),
],
'EDIT_ARMATURE': [
- _defs_view3d_generic.cursor,
*_tools_select,
+ _defs_view3d_generic.cursor,
None,
*_tools_transform,
None,
@@ -1356,8 +1368,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
),
],
'EDIT_MESH': [
- _defs_view3d_generic.cursor,
*_tools_select,
+ _defs_view3d_generic.cursor,
None,
*_tools_transform,
None,
@@ -1408,8 +1420,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
),
],
'EDIT_CURVE': [
- _defs_view3d_generic.cursor,
*_tools_select,
+ _defs_view3d_generic.cursor,
None,
*_tools_transform,
None,
@@ -1422,6 +1434,24 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
_defs_edit_curve.extrude_cursor,
),
],
+ 'EDIT_METABALL': [
+ *_tools_select,
+ _defs_view3d_generic.cursor,
+ None,
+ *_tools_transform,
+ None,
+ *_tools_annotate,
+ None,
+ ],
+ 'EDIT_LATTICE': [
+ *_tools_select,
+ _defs_view3d_generic.cursor,
+ None,
+ *_tools_transform,
+ None,
+ *_tools_annotate,
+ None,
+ ],
'PARTICLE': [
_defs_view3d_generic.cursor,
_defs_particle.generate_from_brushes,
@@ -1470,8 +1500,8 @@ class VIEW3D_PT_tools_active(ToolSelectPanelHelper, Panel):
_defs_gpencil_paint.circle,
],
'GPENCIL_EDIT': [
- _defs_view3d_generic.cursor,
*_tools_gpencil_select,
+ _defs_view3d_generic.cursor,
None,
*_tools_transform,
None,
diff --git a/release/scripts/startup/bl_ui/space_topbar.py b/release/scripts/startup/bl_ui/space_topbar.py
index 6fffba1fe39..8b9c47839e9 100644
--- a/release/scripts/startup/bl_ui/space_topbar.py
+++ b/release/scripts/startup/bl_ui/space_topbar.py
@@ -408,6 +408,8 @@ class _draw_left_context_mode:
row.prop(brush, "strength", slider=True)
row.prop(brush, "use_pressure_strength", text="")
+ layout.prop(brush, "target_weight", slider=True)
+
@staticmethod
def PARTICLE(context, layout, tool):
# See: 'VIEW3D_PT_tools_brush', basically a duplicate
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 149206fc151..954326f8899 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -73,25 +73,6 @@ class USERPREF_PT_tabs(Panel):
layout.row().prop(userpref, "active_section", expand=True)
-class USERPREF_MT_interaction_presets(Menu):
- bl_label = "Presets"
- preset_subdir = "interaction"
- preset_operator = "script.execute_preset"
- draw = Menu.draw_preset
-
-
-class USERPREF_MT_appconfigs(Menu):
- bl_label = "AppPresets"
- preset_subdir = "keyconfig"
- preset_operator = "wm.appconfig_activate"
-
- def draw(self, context):
- self.layout.operator("wm.appconfig_default", text="Blender (default)")
-
- # now draw the presets
- Menu.draw_preset(self, context)
-
-
class USERPREF_PT_interface(Panel):
bl_space_type = 'USER_PREFERENCES'
bl_label = "Interface"
@@ -483,14 +464,15 @@ class USERPREF_PT_system(Panel):
if bpy.app.build_options.international:
column.prop(system, "use_international_fonts")
- if system.use_international_fonts:
- column.prop(system, "language")
- row = column.row()
- row.label(text="Translate:", text_ctxt=i18n_contexts.id_windowmanager)
- row = column.row(align=True)
- row.prop(system, "use_translate_interface", text="Interface", toggle=True)
- row.prop(system, "use_translate_tooltips", text="Tooltips", toggle=True)
- row.prop(system, "use_translate_new_dataname", text="New Data", toggle=True)
+ sub_col = column.column()
+ sub_col.active = system.use_international_fonts
+ sub_col.prop(system, "language")
+ row = sub_col.row()
+ row.label(text="Translate:", text_ctxt=i18n_contexts.id_windowmanager)
+ row = sub_col.row(align=True)
+ row.prop(system, "use_translate_tooltips", text="Tooltips", toggle=True)
+ row.prop(system, "use_translate_interface", text="Interface", toggle=True)
+ row.prop(system, "use_translate_new_dataname", text="New Data", toggle=True)
class USERPREF_MT_interface_theme_presets(Menu):
@@ -1074,30 +1056,15 @@ class USERPREF_PT_input(Panel):
import sys
# General settings
- row = layout.row()
- col = row.column()
-
- sub = col.column()
- sub.label(text="Presets:")
- subrow = sub.row(align=True)
-
- subrow.menu("USERPREF_MT_interaction_presets", text=bpy.types.USERPREF_MT_interaction_presets.bl_label)
- subrow.operator("wm.interaction_preset_add", text="", icon='ADD')
- subrow.operator("wm.interaction_preset_add", text="", icon='REMOVE').remove_active = True
- sub.separator()
+ sub = layout.column()
sub.label(text="Mouse:")
- sub1 = sub.column()
- sub1.active = (inputs.select_mouse == 'RIGHT')
- sub1.prop(inputs, "use_mouse_emulate_3_button")
+ sub.prop(inputs, "use_mouse_emulate_3_button")
sub.prop(inputs, "use_mouse_continuous")
sub.prop(inputs, "drag_threshold")
sub.prop(inputs, "tweak_threshold")
- sub.label(text="Select With:")
- sub.row().prop(inputs, "select_mouse", expand=True)
-
- sub = col.column()
+ sub = layout.column()
sub.label(text="Double Click:")
sub.prop(inputs, "mouse_double_click_time", text="Speed")
@@ -1120,18 +1087,18 @@ class USERPREF_PT_input(Panel):
#sub.prop(inputs, "use_mouse_mmb_paste")
- # col.separator()
+ # layout.separator()
- sub = col.column()
+ sub = layout.column()
sub.prop(inputs, "invert_zoom_wheel", text="Invert Wheel Zoom Direction")
#sub.prop(view, "wheel_scroll_lines", text="Scroll Lines")
if sys.platform == "darwin":
- sub = col.column()
+ sub = layout.column()
sub.prop(inputs, "use_trackpad_natural", text="Natural Trackpad Direction")
- col.separator()
- sub = col.column()
+ layout.separator()
+ sub = layout.column()
sub.label(text="View Navigation:")
sub.row().prop(inputs, "navigation_mode", expand=True)
@@ -1143,37 +1110,41 @@ class USERPREF_PT_input(Panel):
sub.prop(walk, "mouse_speed")
sub.prop(walk, "teleport_time")
- sub = col.column(align=True)
+ sub = layout.column(align=True)
sub.prop(walk, "walk_speed")
sub.prop(walk, "walk_speed_factor")
sub.separator()
sub.prop(walk, "use_gravity")
- sub = col.column(align=True)
+ sub = layout.column(align=True)
sub.active = walk.use_gravity
sub.prop(walk, "view_height")
sub.prop(walk, "jump_height")
+ sub.separator()
+ sub = layout.column()
+ sub.label(text="Tablet Pressure:")
+ sub.prop(inputs, "pressure_threshold_max")
+ sub.prop(inputs, "pressure_softness")
+
if inputs.use_ndof:
- col.separator()
- col.label(text="NDOF Device:")
- sub = col.column(align=True)
+ layout.separator()
+ layout.label(text="NDOF Device:")
+ sub = layout.column(align=True)
sub.prop(inputs, "ndof_sensitivity", text="Pan Sensitivity")
sub.prop(inputs, "ndof_orbit_sensitivity", text="Orbit Sensitivity")
sub.prop(inputs, "ndof_deadzone", text="Deadzone")
sub.separator()
- col.label(text="Navigation Style:")
- sub = col.column(align=True)
+ layout.label(text="Navigation Style:")
+ sub = layout.column(align=True)
sub.row().prop(inputs, "ndof_view_navigate_method", expand=True)
sub.separator()
- col.label(text="Rotation Style:")
- sub = col.column(align=True)
+ layout.label(text="Rotation Style:")
+ sub = layout.column(align=True)
sub.row().prop(inputs, "ndof_view_rotate_method", expand=True)
- row.separator()
-
def draw(self, context):
from rna_keymap_ui import draw_keymaps
@@ -1189,11 +1160,17 @@ class USERPREF_PT_input(Panel):
split = layout.split(factor=0.25)
+ row = split.row()
+ col = row.column()
+
# Input settings
- self.draw_input_prefs(inputs, split)
+ self.draw_input_prefs(inputs, col)
+
+ row.separator()
# Keymap Settings
- draw_keymaps(context, split)
+ col = split.column()
+ draw_keymaps(context, col)
#print("runtime", time.time() - start)
@@ -1233,8 +1210,8 @@ class USERPREF_PT_addons(Panel):
_support_icon_mapping = {
'OFFICIAL': 'FILE_BLEND',
- 'COMMUNITY': 'POSE_DATA',
- 'TESTING': 'MOD_EXPLODE',
+ 'COMMUNITY': 'COMMUNITY',
+ 'TESTING': 'EXPERIMENTAL',
}
@classmethod
@@ -1377,7 +1354,7 @@ class USERPREF_PT_addons(Panel):
row.operator(
"wm.addon_expand",
- icon='TRIA_DOWN' if info["show_expanded"] else 'TRIA_RIGHT',
+ icon='DISCLOSURE_TRI_DOWN' if info["show_expanded"] else 'DISCLOSURE_TRI_RIGHT',
emboss=False,
).module = module_name
@@ -1596,8 +1573,6 @@ class USERPREF_PT_studiolight_specular(Panel, StudioLightPanelMixin):
classes = (
USERPREF_HT_header,
USERPREF_PT_tabs,
- USERPREF_MT_interaction_presets,
- USERPREF_MT_appconfigs,
USERPREF_PT_interface,
USERPREF_PT_edit,
USERPREF_PT_system,
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index 0d96e11cb72..55d1636bd19 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -1534,10 +1534,8 @@ class VIEW3D_MT_add(Menu):
layout.menu("VIEW3D_MT_armature_add", icon='OUTLINER_OB_ARMATURE')
layout.operator("object.add", text="Lattice", icon='OUTLINER_OB_LATTICE').type = 'LATTICE'
layout.operator_menu_enum("object.empty_add", "type", text="Empty", icon='OUTLINER_OB_EMPTY')
+ layout.menu("VIEW3D_MT_image_add", text="Image", icon='OUTLINER_OB_IMAGE')
- sublayout = layout.column()
- sublayout.operator_context = 'INVOKE_DEFAULT'
- sublayout.operator("object.load_image_as_empty", text="Image", icon="OUTLINER_OB_IMAGE")
layout.separator()
layout.operator("object.speaker_add", text="Speaker", icon='OUTLINER_OB_SPEAKER')
@@ -1576,6 +1574,15 @@ class VIEW3D_MT_add(Menu):
)
+class VIEW3D_MT_image_add(Menu):
+ bl_label = "Add Image"
+
+ def draw(self, context):
+ layout = self.layout
+ layout.operator("object.load_reference_image", text="Reference", icon='IMAGE_REFERENCE')
+ layout.operator("object.load_background_image", text="Background", icon='IMAGE_BACKGROUND')
+
+
class VIEW3D_MT_object_relations(Menu):
bl_label = "Relations"
@@ -1726,37 +1733,14 @@ class VIEW3D_MT_object_specials(Menu):
return context.object
def draw(self, context):
+
layout = self.layout
obj = context.object
-
- layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN')
- layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN')
-
- layout.separator()
-
- layout.operator("object.duplicate_move")
- layout.operator("object.duplicate_move_linked")
-
- layout.separator()
-
- layout.menu("VIEW3D_MT_snap")
- layout.menu("VIEW3D_MT_object_parent")
- layout.operator_context = 'INVOKE_REGION_WIN'
- layout.operator("object.move_to_collection")
-
- layout.separator()
-
- layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...")
-
- layout.separator()
-
- layout.operator("object.delete", text="Delete...").use_global = False
+ is_eevee = context.scene.render.engine == 'BLENDER_EEVEE'
if obj.type == 'MESH':
- layout.separator()
-
layout.operator("object.shade_smooth", text="Smooth Shading")
layout.operator("object.shade_flat", text="Flat Shading")
@@ -1834,15 +1818,21 @@ class VIEW3D_MT_object_specials(Menu):
emission_node = node
break
+ if is_eevee and not emission_node:
+ props = layout.operator("wm.context_modal_mouse", text="Energy")
+ props.data_path_iter = "selected_editable_objects"
+ props.data_path_item = "data.energy"
+ props.header_text = "Light Energy: %.3f"
+
if emission_node is not None:
- props = layout.operator("wm.context_modal_mouse", text="Strength")
+ props = layout.operator("wm.context_modal_mouse", text="Energy")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = (
"data.node_tree"
".nodes[\"" + emission_node.name + "\"]"
".inputs[\"Strength\"].default_value"
)
- props.header_text = "Light Strength: %.3f"
+ props.header_text = "Light Energy: %.3f"
props.input_scale = 0.1
if light.type == 'AREA':
@@ -1858,13 +1848,14 @@ class VIEW3D_MT_object_specials(Menu):
props.header_text = "Light Size Y: %.3f"
elif light.type in {'SPOT', 'POINT', 'SUN'}:
- props = layout.operator("wm.context_modal_mouse", text="Size")
+ props = layout.operator("wm.context_modal_mouse", text="Radius")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.shadow_soft_size"
- props.header_text = "Light Size: %.3f"
+ props.header_text = "Light Radius: %.3f"
if light.type == 'SPOT':
layout.separator()
+
props = layout.operator("wm.context_modal_mouse", text="Spot Size")
props.data_path_iter = "selected_editable_objects"
props.data_path_item = "data.spot_size"
@@ -1877,6 +1868,31 @@ class VIEW3D_MT_object_specials(Menu):
props.input_scale = -0.01
props.header_text = "Spot Blend: %.2f"
+ layout.separator()
+
+ layout.operator("view3d.copybuffer", text="Copy Objects", icon='COPYDOWN')
+ layout.operator("view3d.pastebuffer", text="Paste Objects", icon='PASTEDOWN')
+
+ layout.separator()
+
+ layout.operator("object.duplicate_move", icon="DUPLICATE")
+ layout.operator("object.duplicate_move_linked")
+
+ layout.separator()
+
+ layout.menu("VIEW3D_MT_snap")
+ layout.menu("VIEW3D_MT_object_parent")
+ layout.operator_context = 'INVOKE_REGION_WIN'
+ layout.operator("object.move_to_collection")
+
+ layout.separator()
+
+ layout.operator("anim.keyframe_insert_menu", text="Insert Keyframe...")
+
+ layout.separator()
+
+ layout.operator("object.delete", text="Delete...").use_global = False
+
class VIEW3D_MT_object_shading(Menu):
# XXX, this menu is a place to store shading operator in object mode
@@ -3835,24 +3851,16 @@ class VIEW3D_MT_shading_pie(Menu):
pie.prop_enum(view.shading, "type", value='WIREFRAME')
pie.prop_enum(view.shading, "type", value='SOLID')
- if context.mode == 'POSE':
- pie.prop(view.overlay, "show_bone_select", icon='XRAY')
+ xray_active = (
+ (context.mode in {'POSE', 'EDIT_MESH'}) or
+ (view.shading.type in {'SOLID', 'WIREFRAME'})
+ )
+ if xray_active:
+ sub = pie
else:
- xray_active = (
- (context.mode in 'EDIT_MESH') or
- (view.shading.type in {'SOLID', 'WIREFRAME'})
- )
-
- if xray_active:
- sub = pie
- else:
- sub = pie.row()
- sub.active = False
-
- if view.shading.type == 'WIREFRAME':
- sub.prop(view.shading, "show_xray_wireframe", text="Toggle X-Ray", icon='XRAY')
- else:
- sub.prop(view.shading, "show_xray", text="Toggle X-Ray", icon='XRAY')
+ sub = pie.row()
+ sub.active = False
+ sub.operator("view3d.toggle_xray", text="Toggle X-Ray", icon='XRAY')
pie.prop(view.overlay, "show_overlays", text="Toggle Overlays", icon='OVERLAY')
pie.prop_enum(view.shading, "type", value='MATERIAL')
@@ -5089,6 +5097,7 @@ class VIEW3D_PT_overlay_gpencil_options(Panel):
class VIEW3D_PT_quad_view(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'UI'
+ bl_category = "View"
bl_label = "Quad View"
bl_options = {'DEFAULT_CLOSED'}
@@ -5475,6 +5484,7 @@ classes = (
VIEW3D_PT_transform_orientations,
VIEW3D_PT_overlay_gpencil_options,
VIEW3D_PT_context_properties,
+ VIEW3D_MT_image_add,
)
diff --git a/release/scripts/templates_py/operator_modal_view3d_raycast.py b/release/scripts/templates_py/operator_modal_view3d_raycast.py
index 103c13dc1c2..4b9700dd3fe 100644
--- a/release/scripts/templates_py/operator_modal_view3d_raycast.py
+++ b/release/scripts/templates_py/operator_modal_view3d_raycast.py
@@ -37,8 +37,8 @@ def main(context, event):
# get the ray relative to the object
matrix_inv = matrix.inverted()
- ray_origin_obj = matrix_inv * ray_origin
- ray_target_obj = matrix_inv * ray_target
+ ray_origin_obj = matrix_inv @ ray_origin
+ ray_target_obj = matrix_inv @ ray_target
ray_direction_obj = ray_target_obj - ray_origin_obj
# cast the ray
@@ -57,7 +57,7 @@ def main(context, event):
if obj.type == 'MESH':
hit, normal, face_index = obj_ray_cast(obj, matrix)
if hit is not None:
- hit_world = matrix * hit
+ hit_world = matrix @ hit
scene.cursor_location = hit_world
length_squared = (hit_world - ray_origin).length_squared
if best_obj is None or length_squared < best_length_squared:
diff --git a/release/scripts/templates_py/ui_tool_simple.py b/release/scripts/templates_py/ui_tool_simple.py
index 920a23b081a..d9aeb294c68 100644
--- a/release/scripts/templates_py/ui_tool_simple.py
+++ b/release/scripts/templates_py/ui_tool_simple.py
@@ -17,8 +17,8 @@ def my_tool():
icon="ops.generic.select_circle",
widget=None,
keymap=(
- ("view3d.select_circle", dict(deselect=False), dict(type='ACTIONMOUSE', value='PRESS')),
- ("view3d.select_circle", dict(deselect=True), dict(type='ACTIONMOUSE', value='PRESS', ctrl=True)),
+ ("view3d.select_circle", dict(deselect=False), dict(type='LEFTMOUSE', value='PRESS')),
+ ("view3d.select_circle", dict(deselect=True), dict(type='LEFTMOUSE', value='PRESS', ctrl=True)),
),
draw_settings=draw_settings,
)
diff --git a/source/blender/blenkernel/BKE_armature.h b/source/blender/blenkernel/BKE_armature.h
index 23a9afbda31..be8bd9557e5 100644
--- a/source/blender/blenkernel/BKE_armature.h
+++ b/source/blender/blenkernel/BKE_armature.h
@@ -253,6 +253,10 @@ void BKE_pose_splineik_evaluate(
struct Object *ob,
int rootchan_index);
+void BKE_pose_eval_done(
+ struct Depsgraph *depsgraph,
+ struct Object *object);
+
void BKE_pose_eval_cleanup(
struct Depsgraph *depsgraph,
struct Scene *scene,
@@ -260,6 +264,8 @@ void BKE_pose_eval_cleanup(
void BKE_pose_eval_proxy_init(struct Depsgraph *depsgraph,
struct Object *object);
+void BKE_pose_eval_proxy_done(struct Depsgraph *depsgraph,
+ struct Object *object);
void BKE_pose_eval_proxy_cleanup(struct Depsgraph *depsgraph,
struct Object *object);
@@ -268,6 +274,18 @@ void BKE_pose_eval_proxy_copy_bone(
struct Object *object,
int pchan_index);
+/* BBOne deformation cache.
+ *
+ * The idea here is to pre-calculate deformation queternions, matricies and such
+ * used by armature_deform_verts().
+ */
+struct ObjectBBoneDeform;
+struct ObjectBBoneDeform * BKE_armature_cached_bbone_deformation_get(
+ struct Object *object);
+void BKE_armature_cached_bbone_deformation_free_data(struct Object *object);
+void BKE_armature_cached_bbone_deformation_free(struct Object *object);
+void BKE_armature_cached_bbone_deformation_update(struct Object *object);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_blender_version.h b/source/blender/blenkernel/BKE_blender_version.h
index b695132416e..781dd3f9826 100644
--- a/source/blender/blenkernel/BKE_blender_version.h
+++ b/source/blender/blenkernel/BKE_blender_version.h
@@ -28,7 +28,7 @@
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 280
-#define BLENDER_SUBVERSION 30
+#define BLENDER_SUBVERSION 32
/* Several breakages with 280, e.g. collections vs layers */
#define BLENDER_MINVERSION 280
#define BLENDER_MINSUBVERSION 0
diff --git a/source/blender/blenkernel/BKE_blendfile.h b/source/blender/blenkernel/BKE_blendfile.h
index 305b7d07e4d..e272fcaa3ec 100644
--- a/source/blender/blenkernel/BKE_blendfile.h
+++ b/source/blender/blenkernel/BKE_blendfile.h
@@ -34,6 +34,7 @@ struct Main;
struct MemFile;
struct ReportList;
struct UserDef;
+struct BlendFileReadParams;
enum {
BKE_BLENDFILE_READ_FAIL = 0, /* no load */
@@ -43,13 +44,16 @@ enum {
int BKE_blendfile_read(
struct bContext *C, const char *filepath,
- struct ReportList *reports, int skip_flag);
+ const struct BlendFileReadParams *params,
+ struct ReportList *reports);
bool BKE_blendfile_read_from_memory(
- struct bContext *C, const void *filebuf, int filelength,
- struct ReportList *reports, int skip_flag, bool update_defaults);
+ struct bContext *C, const void *filebuf, int filelength, bool update_defaults,
+ const struct BlendFileReadParams *params,
+ struct ReportList *reports);
bool BKE_blendfile_read_from_memfile(
struct bContext *C, struct MemFile *memfile,
- struct ReportList *reports, int skip_flag);
+ const struct BlendFileReadParams *params,
+ struct ReportList *reports);
void BKE_blendfile_read_make_empty(struct bContext *C);
struct UserDef *BKE_blendfile_userdef_read(
diff --git a/source/blender/blenkernel/BKE_curve.h b/source/blender/blenkernel/BKE_curve.h
index 12e3492368b..be46a2dd01a 100644
--- a/source/blender/blenkernel/BKE_curve.h
+++ b/source/blender/blenkernel/BKE_curve.h
@@ -89,7 +89,7 @@ void BKE_curve_curve_dimension_update(struct Curve *cu);
void BKE_curve_boundbox_calc(struct Curve *cu, float r_loc[3], float r_size[3]);
struct BoundBox *BKE_curve_boundbox_get(struct Object *ob);
void BKE_curve_texspace_calc(struct Curve *cu);
-void BKE_curve_texspace_get(struct Curve *cu, float r_loc[3], float r_rot[3], float r_size[3]);
+struct BoundBox *BKE_curve_texspace_get(struct Curve *cu, float r_loc[3], float r_rot[3], float r_size[3]);
bool BKE_curve_minmax(struct Curve *cu, bool use_radius, float min[3], float max[3]);
bool BKE_curve_center_median(struct Curve *cu, float cent[3]);
diff --git a/source/blender/blenkernel/BKE_dynamicpaint.h b/source/blender/blenkernel/BKE_dynamicpaint.h
index cffadeb5fd9..d6a9cbb5e17 100644
--- a/source/blender/blenkernel/BKE_dynamicpaint.h
+++ b/source/blender/blenkernel/BKE_dynamicpaint.h
@@ -69,13 +69,16 @@ struct Mesh *dynamicPaint_Modifier_do(
struct DynamicPaintModifierData *pmd, struct Depsgraph *depsgraph, struct Scene *scene,
struct Object *ob, struct Mesh *me);
void dynamicPaint_Modifier_free(struct DynamicPaintModifierData *pmd);
-void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tsmd);
+void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd,
+ struct DynamicPaintModifierData *tsmd,
+ int flag);
bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, struct Scene *scene);
struct DynamicPaintSurface *dynamicPaint_createNewSurface(struct DynamicPaintCanvasSettings *canvas, struct Scene *scene);
void dynamicPaint_clearSurface(const struct Scene *scene, struct DynamicPaintSurface *surface);
bool dynamicPaint_resetSurface(const struct Scene *scene, struct DynamicPaintSurface *surface);
-void dynamicPaint_freeSurface(struct DynamicPaintSurface *surface);
+void dynamicPaint_freeSurface(const struct DynamicPaintModifierData *pmd,
+ struct DynamicPaintSurface *surface);
void dynamicPaint_freeCanvas(struct DynamicPaintModifierData *pmd);
void dynamicPaint_freeBrush(struct DynamicPaintModifierData *pmd);
void dynamicPaint_freeSurfaceData(struct DynamicPaintSurface *surface);
diff --git a/source/blender/blenkernel/BKE_gpencil.h b/source/blender/blenkernel/BKE_gpencil.h
index 3b8df66668a..34c61083872 100644
--- a/source/blender/blenkernel/BKE_gpencil.h
+++ b/source/blender/blenkernel/BKE_gpencil.h
@@ -65,7 +65,6 @@ bool BKE_gpencil_free_strokes(struct bGPDframe *gpf);
void BKE_gpencil_free_frames(struct bGPDlayer *gpl);
void BKE_gpencil_free_layers(struct ListBase *list);
bool BKE_gpencil_free_frame_runtime_data(struct bGPDframe *derived_gpf);
-void BKE_gpencil_free_derived_frames(struct bGPdata *gpd);
void BKE_gpencil_free(struct bGPdata *gpd, bool free_all);
void BKE_gpencil_batch_cache_dirty_tag(struct bGPdata *gpd);
diff --git a/source/blender/blenkernel/BKE_gpencil_modifier.h b/source/blender/blenkernel/BKE_gpencil_modifier.h
index 91f368613cb..e31f61c909a 100644
--- a/source/blender/blenkernel/BKE_gpencil_modifier.h
+++ b/source/blender/blenkernel/BKE_gpencil_modifier.h
@@ -232,6 +232,11 @@ typedef struct GpencilModifierTypeInfo {
*/
void (*foreachTexLink)(struct GpencilModifierData *md, struct Object *ob,
GreasePencilTexWalkFunc walk, void *userData);
+
+ /* get the number of times the strokes are duplicated in this modifier.
+ * This is used to calculate the size of the GPU VBOs
+ */
+ int (*getDuplicationFactor)(struct GpencilModifierData *md);
} GpencilModifierTypeInfo;
/* Initialize modifier's global data (type info and some common global storages). */
diff --git a/source/blender/blenkernel/BKE_keyconfig.h b/source/blender/blenkernel/BKE_keyconfig.h
new file mode 100644
index 00000000000..a086930fe34
--- /dev/null
+++ b/source/blender/blenkernel/BKE_keyconfig.h
@@ -0,0 +1,56 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __BKE_KEYCONFIG_H__
+#define __BKE_KEYCONFIG_H__
+
+/** \file BKE_keyconfig.h
+ * \ingroup bke
+ */
+
+/** Based on #BKE_addon_pref_type_init and friends */
+
+struct UserDef;
+struct wmKeyConfigPref;
+
+/** Actual data is stored in #wmKeyConfigPref. */
+#if defined(__RNA_TYPES_H__)
+typedef struct wmKeyConfigPrefType_Runtime {
+ char idname[64];
+
+ /* RNA integration */
+ ExtensionRNA ext;
+} wmKeyConfigPrefType_Runtime;
+
+#else
+typedef struct wmKeyConfigPrefType_Runtime wmKeyConfigPrefType_Runtime;
+#endif
+
+/* KeyConfig preferenes (UserDef). */
+struct wmKeyConfigPref *BKE_keyconfig_pref_ensure(struct UserDef *userdef, const char *kc_idname);
+
+/* KeyConfig preferenes (RNA). */
+struct wmKeyConfigPrefType_Runtime *BKE_keyconfig_pref_type_find(const char *idname, bool quiet);
+void BKE_keyconfig_pref_type_add(struct wmKeyConfigPrefType_Runtime *kpt_rt);
+void BKE_keyconfig_pref_type_remove(const struct wmKeyConfigPrefType_Runtime *kpt_rt);
+
+void BKE_keyconfig_pref_type_init(void);
+void BKE_keyconfig_pref_type_free(void);
+
+#endif /* __BKE_KEYCONFIG_H__ */
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 8f0c81ce4f9..aba42820519 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -83,7 +83,7 @@ extern "C" {
/* *** mesh.c *** */
struct BMesh *BKE_mesh_to_bmesh_ex(
- struct Mesh *me,
+ const struct Mesh *me,
const struct BMeshCreateParams *create_params,
const struct BMeshFromMeshParams *convert_params);
struct BMesh *BKE_mesh_to_bmesh(
@@ -165,7 +165,7 @@ void BKE_mesh_smooth_flag_set(struct Object *meshOb, int enableSmooth);
const char *BKE_mesh_cmp(struct Mesh *me1, struct Mesh *me2, float thresh);
struct BoundBox *BKE_mesh_boundbox_get(struct Object *ob);
-void BKE_mesh_texspace_get(struct Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]);
+struct BoundBox *BKE_mesh_texspace_get(struct Mesh *me, float r_loc[3], float r_rot[3], float r_size[3]);
void BKE_mesh_texspace_get_reference(struct Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size);
void BKE_mesh_texspace_copy_from_object(struct Mesh *me, struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_mesh_runtime.h b/source/blender/blenkernel/BKE_mesh_runtime.h
index 050d17771c9..5d35f798ad7 100644
--- a/source/blender/blenkernel/BKE_mesh_runtime.h
+++ b/source/blender/blenkernel/BKE_mesh_runtime.h
@@ -47,7 +47,7 @@ struct Object;
struct Scene;
/* Undefine to hide DerivedMesh-based function declarations */
-#define USE_DERIVEDMESH
+#undef USE_DERIVEDMESH
#ifdef USE_DERIVEDMESH
struct DerivedMesh;
diff --git a/source/blender/blenkernel/BKE_multires.h b/source/blender/blenkernel/BKE_multires.h
index decfdc532a6..190ee9e7270 100644
--- a/source/blender/blenkernel/BKE_multires.h
+++ b/source/blender/blenkernel/BKE_multires.h
@@ -88,8 +88,6 @@ struct MultiresModifierData *find_multires_modifier_before(struct Scene *scene,
struct MultiresModifierData *get_multires_modifier(struct Scene *scene, struct Object *ob, bool use_first);
int multires_get_level(const struct Scene *scene, const struct Object *ob, const struct MultiresModifierData *mmd,
bool render, bool ignore_simplify);
-struct DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, struct Scene *scene, struct MultiresModifierData *mmd,
- struct Object *ob);
struct Mesh *BKE_multires_create_mesh(
struct Depsgraph *depsgraph, struct Scene *scene,
struct MultiresModifierData *mmd, struct Object *ob);
diff --git a/source/blender/blenkernel/BKE_object.h b/source/blender/blenkernel/BKE_object.h
index 6d950ec01f6..f0f99c9cac5 100644
--- a/source/blender/blenkernel/BKE_object.h
+++ b/source/blender/blenkernel/BKE_object.h
@@ -53,6 +53,7 @@ struct RigidBodyWorld;
struct HookModifierData;
struct ModifierData;
struct HookGpencilModifierData;
+struct RegionView3D;
#include "DNA_object_enums.h"
@@ -232,7 +233,8 @@ void BKE_object_eval_constraints(
struct Depsgraph *depsgraph,
struct Scene *scene,
struct Object *ob);
-void BKE_object_eval_done(struct Depsgraph *depsgraph, struct Object *ob);
+void BKE_object_eval_transform_final(
+ struct Depsgraph *depsgraph, struct Object *ob);
bool BKE_object_eval_proxy_copy(
struct Depsgraph *depsgraph,
@@ -245,6 +247,8 @@ void BKE_object_eval_uber_data(
struct Scene *scene,
struct Object *ob);
+void BKE_object_eval_boundbox(struct Depsgraph *depsgraph, struct Object *object);
+
void BKE_object_eval_ptcache_reset(
struct Depsgraph *depsgraph,
struct Scene *scene,
@@ -342,6 +346,8 @@ bool BKE_object_modifier_update_subframe(
struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob,
bool update_mesh, int parent_recursion, float frame, int type);
+bool BKE_image_empty_visible_in_view3d(const struct Object *ob, const struct RegionView3D *rv3d);
+
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/blenkernel/BKE_paint.h b/source/blender/blenkernel/BKE_paint.h
index e09aed4b372..00425de50e0 100644
--- a/source/blender/blenkernel/BKE_paint.h
+++ b/source/blender/blenkernel/BKE_paint.h
@@ -90,6 +90,8 @@ typedef enum ePaintMode {
PAINT_MODE_INVALID = 7,
} ePaintMode;
+#define PAINT_MODE_HAS_BRUSH(mode) !ELEM(mode, PAINT_MODE_SCULPT_UV)
+
/* overlay invalidation */
typedef enum eOverlayControlFlags {
PAINT_OVERLAY_INVALID_TEXTURE_PRIMARY = 1,
diff --git a/source/blender/blenkernel/BKE_studiolight.h b/source/blender/blenkernel/BKE_studiolight.h
index 4a7f29d7190..7ec98c99c3f 100644
--- a/source/blender/blenkernel/BKE_studiolight.h
+++ b/source/blender/blenkernel/BKE_studiolight.h
@@ -61,43 +61,36 @@
#define STUDIOLIGHT_ICON_SIZE 96
-#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 2
-#define STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS 18
+/* Only 1 - 5 is supported */
+#define STUDIOLIGHT_SH_BANDS 2
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 0
-# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 1
-#endif
-
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 1
-# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 4
-#endif
+#define STUDIOLIGHT_SH_COEFS_LEN (STUDIOLIGHT_SH_BANDS * STUDIOLIGHT_SH_BANDS)
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 2
-# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 9
-# define STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING_TARGET_LAMPLACIAN 10.0f
+#if STUDIOLIGHT_SH_BANDS > 3
+/* Bypass L3 */
+#define STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN (STUDIOLIGHT_SH_COEFS_LEN - 7)
+#else
+#define STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN STUDIOLIGHT_SH_COEFS_LEN
#endif
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 4
-# define STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS 18
-#endif
struct GPUTexture;
struct StudioLight;
/* StudioLight.flag */
enum StudioLightFlag {
STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED = (1 << 0),
- STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED = (1 << 1),
+/* STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED = (1 << 1), */
STUDIOLIGHT_INTERNAL = (1 << 2),
STUDIOLIGHT_EXTERNAL_FILE = (1 << 3),
- STUDIOLIGHT_USER_DEFINED = (1 << 12),
STUDIOLIGHT_ORIENTATION_CAMERA = (1 << 4),
STUDIOLIGHT_ORIENTATION_WORLD = (1 << 5),
STUDIOLIGHT_ORIENTATION_VIEWNORMAL = (1 << 6),
STUDIOLIGHT_EXTERNAL_IMAGE_LOADED = (1 << 7),
- STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED = (1 << 8),
- STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE = (1 << 9),
- STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE = (1 << 10),
+ STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED = (1 << 8),
+ STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE = (1 << 9),
+ STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE = (1 << 10),
STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED = (1 << 11),
+ STUDIOLIGHT_USER_DEFINED = (1 << 12),
STUDIOLIGHT_UI_EXPANDED = (1 << 13),
};
@@ -121,14 +114,13 @@ typedef struct StudioLight {
int icon_id_radiance;
int icon_id_matcap;
int icon_id_matcap_flipped;
- float spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS][3];
+ float spherical_harmonics_coefs[STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN][3];
float light_direction[3];
- ImBuf *equirectangular_radiance_buffer;
- ImBuf *equirectangular_irradiance_buffer;
+ ImBuf *equirect_radiance_buffer;
+ ImBuf *equirect_irradiance_buffer;
ImBuf *radiance_cubemap_buffers[6];
- struct GPUTexture *equirectangular_radiance_gputexture;
- struct GPUTexture *equirectangular_irradiance_gputexture;
- float *gpu_matcap_3components; /* 3 channel buffer for GPU_R11F_G11F_B10F */
+ struct GPUTexture *equirect_radiance_gputexture;
+ struct GPUTexture *equirect_irradiance_gputexture;
/*
* Free function to clean up the running icons previews (wmJob) the usage is in
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 4161a5ecd79..7d09374c99e 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -128,6 +128,7 @@ set(SRC
intern/image_gen.c
intern/ipo.c
intern/key.c
+ intern/keyconfig.c
intern/lamp.c
intern/lattice.c
intern/library.c
@@ -280,6 +281,7 @@ set(SRC
BKE_image.h
BKE_ipo.h
BKE_key.h
+ BKE_keyconfig.h
BKE_lamp.h
BKE_lattice.h
BKE_library.h
diff --git a/source/blender/blenkernel/intern/DerivedMesh.c b/source/blender/blenkernel/intern/DerivedMesh.c
index 1d787388774..54aa46d8b85 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.c
+++ b/source/blender/blenkernel/intern/DerivedMesh.c
@@ -1990,6 +1990,14 @@ static void mesh_build_extra_data(struct Depsgraph *depsgraph, Object *ob)
}
}
+static void mesh_runtime_check_normals_valid(const Mesh *mesh)
+{
+ UNUSED_VARS_NDEBUG(mesh);
+ BLI_assert(!(mesh->runtime.cd_dirty_vert & CD_MASK_NORMAL));
+ BLI_assert(!(mesh->runtime.cd_dirty_loop & CD_MASK_NORMAL));
+ BLI_assert(!(mesh->runtime.cd_dirty_poly & CD_MASK_NORMAL));
+}
+
static void mesh_build_data(
struct Depsgraph *depsgraph, Scene *scene, Object *ob, CustomDataMask dataMask,
const bool build_shapekey_layers, const bool need_mapping)
@@ -2005,15 +2013,19 @@ static void mesh_build_data(
mesh_finalize_eval(ob);
+#ifdef USE_DERIVEDMESH
/* TODO(campbell): remove these copies, they are expected in various places over the code. */
ob->derivedDeform = CDDM_from_mesh_ex(ob->runtime.mesh_deform_eval, CD_REFERENCE, CD_MASK_MESH);
ob->derivedFinal = CDDM_from_mesh_ex(ob->runtime.mesh_eval, CD_REFERENCE, CD_MASK_MESH);
+#endif
BKE_object_boundbox_calc_from_mesh(ob, ob->runtime.mesh_eval);
BKE_mesh_texspace_copy_from_object(ob->runtime.mesh_eval, ob);
+#ifdef USE_DERIVEDMESH
ob->derivedFinal->needsFree = 0;
ob->derivedDeform->needsFree = 0;
+#endif
ob->lastDataMask = dataMask;
ob->lastNeedMapping = need_mapping;
@@ -2025,8 +2037,7 @@ static void mesh_build_data(
// BKE_sculpt_update_mesh_elements(depsgraph, scene, scene->toolsettings->sculpt, ob, false, false);
}
- BLI_assert(!(ob->derivedFinal->dirty & DM_DIRTY_NORMALS));
-
+ mesh_runtime_check_normals_valid(ob->runtime.mesh_eval);
mesh_build_extra_data(depsgraph, ob);
}
@@ -2053,7 +2064,7 @@ static void editbmesh_build_data(
em->lastDataMask = dataMask;
- BLI_assert(!(em->mesh_eval_final->runtime.cd_dirty_vert & DM_DIRTY_NORMALS));
+ mesh_runtime_check_normals_valid(em->mesh_eval_final);
}
static CustomDataMask object_get_datamask(const Depsgraph *depsgraph, Object *ob, bool *r_need_mapping)
diff --git a/source/blender/blenkernel/intern/armature.c b/source/blender/blenkernel/intern/armature.c
index 66106a97566..a5a2e1d5645 100644
--- a/source/blender/blenkernel/intern/armature.c
+++ b/source/blender/blenkernel/intern/armature.c
@@ -75,6 +75,8 @@
#include "BIK_api.h"
+#include "atomic_ops.h"
+
/* **************** Generic Functions, data level *************** */
bArmature *BKE_armature_add(Main *bmain, const char *name)
@@ -813,6 +815,13 @@ typedef struct bPoseChanDeform {
DualQuat *b_bone_dual_quats;
} bPoseChanDeform;
+/* Definition of cached object bbone deformations. */
+typedef struct ObjectBBoneDeform {
+ DualQuat *dualquats;
+ bPoseChanDeform *pdef_info_array;
+ int num_pchan;
+} ObjectBBoneDeform;
+
static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info, const bool use_quaternion)
{
Bone *bone = pchan->bone;
@@ -854,10 +863,10 @@ static void pchan_b_bone_defmats(bPoseChannel *pchan, bPoseChanDeform *pdef_info
}
}
-static void b_bone_deform(bPoseChanDeform *pdef_info, Bone *bone, float co[3], DualQuat *dq, float defmat[3][3])
+static void b_bone_deform(const bPoseChanDeform *pdef_info, Bone *bone, float co[3], DualQuat *dq, float defmat[3][3])
{
- Mat4 *b_bone = pdef_info->b_bone_mats;
- float (*mat)[4] = b_bone[0].mat;
+ const Mat4 *b_bone = pdef_info->b_bone_mats;
+ const float (*mat)[4] = b_bone[0].mat;
float segment, y;
int a;
@@ -949,7 +958,7 @@ static void pchan_deform_mat_add(bPoseChannel *pchan, float weight, float bbonem
add_m3_m3m3(mat, mat, wmat);
}
-static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float vec[3], DualQuat *dq,
+static float dist_bone_deform(bPoseChannel *pchan, const bPoseChanDeform *pdef_info, float vec[3], DualQuat *dq,
float mat[3][3], const float co[3])
{
Bone *bone = pchan->bone;
@@ -996,7 +1005,8 @@ static float dist_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, f
return contrib;
}
-static void pchan_bone_deform(bPoseChannel *pchan, bPoseChanDeform *pdef_info, float weight, float vec[3], DualQuat *dq,
+static void pchan_bone_deform(bPoseChannel *pchan, const bPoseChanDeform *pdef_info,
+ float weight, float vec[3], DualQuat *dq,
float mat[3][3], const float co[3], float *contrib)
{
float cop[3], bbonemat[3][3];
@@ -1064,14 +1074,12 @@ void armature_deform_verts(
float (*defMats)[3][3], int numVerts, int deformflag,
float (*prevCos)[3], const char *defgrp_name, bGPDstroke *gps)
{
- bPoseChanDeform *pdef_info_array;
- bPoseChanDeform *pdef_info = NULL;
+ const bPoseChanDeform *pdef_info = NULL;
bArmature *arm = armOb->data;
bPoseChannel *pchan, **defnrToPC = NULL;
int *defnrToPCIndex = NULL;
MDeformVert *dverts = NULL;
bDeformGroup *dg;
- DualQuat *dualquats = NULL;
float obinv[4][4], premat[4][4], postmat[4][4];
const bool use_envelope = (deformflag & ARM_DEF_ENVELOPE) != 0;
const bool use_quaternion = (deformflag & ARM_DEF_QUATERNION) != 0;
@@ -1080,7 +1088,6 @@ void armature_deform_verts(
int i, target_totvert = 0; /* safety for vertexgroup overflow */
bool use_dverts = false;
int armature_def_nr;
- int totchan;
/* in editmode, or not an armature */
if (arm->edbo || (armOb->pose == NULL)) {
@@ -1097,21 +1104,20 @@ void armature_deform_verts(
mul_m4_m4m4(postmat, obinv, armOb->obmat);
invert_m4_m4(premat, postmat);
- /* bone defmats are already in the channels, chan_mat */
-
- /* initialize B_bone matrices and dual quaternions */
- totchan = BLI_listbase_count(&armOb->pose->chanbase);
-
- if (use_quaternion) {
- dualquats = MEM_callocN(sizeof(DualQuat) * totchan, "dualquats");
+ /* Use pre-calculated bbone deformation.
+ *
+ * TODO(sergey): Make this code robust somehow when there are dependency
+ * cycles involved. */
+ ObjectBBoneDeform * bbone_deform =
+ BKE_armature_cached_bbone_deformation_get(armOb);
+ if (bbone_deform == NULL || bbone_deform->pdef_info_array == NULL) {
+ fprintf(stderr,
+ "Armature does not have bbone cache %s, "
+ "usually happens due to a dependency cycle.\n",
+ armOb->id.name + 2);
+ return;
}
-
- pdef_info_array = MEM_callocN(sizeof(bPoseChanDeform) * totchan, "bPoseChanDeform");
-
- ArmatureBBoneDefmatsData data = {
- .pdef_info_array = pdef_info_array, .dualquats = dualquats, .use_quaternion = use_quaternion
- };
- BLI_task_parallel_listbase(&armOb->pose->chanbase, &data, armature_bbone_defmats_cb, totchan > 512);
+ const bPoseChanDeform *pdef_info_array = bbone_deform->pdef_info_array;
/* get the def_nr for the overall armature vertex group if present */
armature_def_nr = defgroup_name_index(target, defgrp_name);
@@ -1343,23 +1349,10 @@ void armature_deform_verts(
}
}
- if (dualquats)
- MEM_freeN(dualquats);
if (defnrToPC)
MEM_freeN(defnrToPC);
if (defnrToPCIndex)
MEM_freeN(defnrToPCIndex);
-
- /* free B_bone matrices */
- pdef_info = pdef_info_array;
- for (pchan = armOb->pose->chanbase.first; pchan; pchan = pchan->next, pdef_info++) {
- if (pdef_info->b_bone_mats)
- MEM_freeN(pdef_info->b_bone_mats);
- if (pdef_info->b_bone_dual_quats)
- MEM_freeN(pdef_info->b_bone_dual_quats);
- }
-
- MEM_freeN(pdef_info_array);
}
/* ************ END Armature Deform ******************* */
@@ -2490,3 +2483,88 @@ bPoseChannel *BKE_armature_splineik_solver_find_root(
}
return rootchan;
}
+
+/* ****************************** BBone cache ****************************** */
+
+ObjectBBoneDeform * BKE_armature_cached_bbone_deformation_get(Object *object)
+{
+ return object->runtime.cached_bbone_deformation;
+}
+
+void BKE_armature_cached_bbone_deformation_free_data(Object *object)
+{
+ ObjectBBoneDeform *bbone_deform =
+ BKE_armature_cached_bbone_deformation_get(object);
+ if (bbone_deform == NULL) {
+ return;
+ }
+ /* free B_bone matrices */
+ for (int i = 0; i < bbone_deform->num_pchan; i++) {
+ bPoseChanDeform *pdef_info = &bbone_deform->pdef_info_array[i];
+ if (pdef_info->b_bone_mats != NULL) {
+ MEM_freeN(pdef_info->b_bone_mats);
+ }
+ if (pdef_info->b_bone_dual_quats != NULL) {
+ MEM_freeN(pdef_info->b_bone_dual_quats);
+ }
+ }
+ /* Free arrays. */
+ MEM_SAFE_FREE(bbone_deform->pdef_info_array);
+ MEM_SAFE_FREE(bbone_deform->dualquats);
+ /* Tag that we've got no data, so we are safe for sequential calls to
+ * data free. */
+ bbone_deform->num_pchan = 0;
+}
+
+void BKE_armature_cached_bbone_deformation_free(Object *object)
+{
+ ObjectBBoneDeform *bbone_deform =
+ BKE_armature_cached_bbone_deformation_get(object);
+ if (bbone_deform == NULL) {
+ return;
+ }
+ BKE_armature_cached_bbone_deformation_free_data(object);
+ MEM_freeN(bbone_deform);
+ object->runtime.cached_bbone_deformation = NULL;
+}
+
+void BKE_armature_cached_bbone_deformation_update(Object *object)
+{
+ BLI_assert(object->type == OB_ARMATURE);
+ BLI_assert(object->pose != NULL);
+ bPose *pose = object->pose;
+ const int totchan = BLI_listbase_count(&pose->chanbase);
+ const bool use_quaternion = true;
+ /* Make sure cache exists. */
+ ObjectBBoneDeform *bbone_deform =
+ BKE_armature_cached_bbone_deformation_get(object);
+ if (bbone_deform == NULL) {
+ bbone_deform = MEM_callocN(sizeof(*bbone_deform), "bbone deform cache");
+ object->runtime.cached_bbone_deformation = bbone_deform;
+ }
+ /* Make sure arrays are allocateds at the proper size. */
+ BKE_armature_cached_bbone_deformation_free_data(object);
+ DualQuat *dualquats = NULL;
+ if (use_quaternion) {
+ dualquats = MEM_calloc_arrayN(
+ sizeof(DualQuat), totchan, "dualquats");
+ }
+ bPoseChanDeform *pdef_info_array = MEM_calloc_arrayN(
+ sizeof(bPoseChanDeform), totchan, "bPoseChanDeform");
+ /* Calculate deofrmation matricies. */
+ ArmatureBBoneDefmatsData data = {
+ .pdef_info_array = pdef_info_array,
+ .dualquats = dualquats,
+ .use_quaternion = use_quaternion
+ };
+ BLI_task_parallel_listbase(&pose->chanbase,
+ &data,
+ armature_bbone_defmats_cb,
+ totchan > 512);
+ /* Store pointers. */
+ bbone_deform->dualquats = dualquats;
+ atomic_cas_ptr((void **)&bbone_deform->pdef_info_array,
+ bbone_deform->pdef_info_array,
+ pdef_info_array);
+ bbone_deform->num_pchan = totchan;
+}
diff --git a/source/blender/blenkernel/intern/armature_update.c b/source/blender/blenkernel/intern/armature_update.c
index c9e072caa6e..0fba7677479 100644
--- a/source/blender/blenkernel/intern/armature_update.c
+++ b/source/blender/blenkernel/intern/armature_update.c
@@ -47,6 +47,7 @@
#include "BKE_curve.h"
#include "BKE_displist.h"
#include "BKE_fcurve.h"
+#include "BKE_object.h"
#include "BKE_scene.h"
#include "BIK_api.h"
@@ -585,21 +586,21 @@ BLI_INLINE bPoseChannel *pose_pchan_get_indexed(Object *ob, int pchan_index)
void BKE_pose_eval_init(struct Depsgraph *depsgraph,
Scene *UNUSED(scene),
- Object *ob)
+ Object *object)
{
- bPose *pose = ob->pose;
+ bPose *pose = object->pose;
BLI_assert(pose != NULL);
- DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
+ DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
- BLI_assert(ob->type == OB_ARMATURE);
+ BLI_assert(object->type == OB_ARMATURE);
/* We demand having proper pose. */
- BLI_assert(ob->pose != NULL);
- BLI_assert((ob->pose->flag & POSE_RECALC) == 0);
+ BLI_assert(object->pose != NULL);
+ BLI_assert((object->pose->flag & POSE_RECALC) == 0);
/* imat is needed for solvers. */
- invert_m4_m4(ob->imat, ob->obmat);
+ invert_m4_m4(object->imat, object->obmat);
/* clear flags */
for (bPoseChannel *pchan = pose->chanbase.first; pchan != NULL; pchan = pchan->next) {
@@ -607,6 +608,7 @@ void BKE_pose_eval_init(struct Depsgraph *depsgraph,
}
pose_pchan_index_create(pose);
+ BKE_armature_cached_bbone_deformation_free_data(object);
}
void BKE_pose_eval_init_ik(struct Depsgraph *depsgraph,
@@ -746,41 +748,69 @@ void BKE_pose_splineik_evaluate(struct Depsgraph *depsgraph,
BKE_splineik_execute_tree(depsgraph, scene, ob, rootchan, ctime);
}
-void BKE_pose_eval_cleanup(struct Depsgraph *depsgraph,
- Scene *scene,
- Object *ob)
+/* Common part for both original and proxy armatrues. */
+static void pose_eval_done_common(struct Depsgraph *depsgraph, Object *object)
{
- bPose *pose = ob->pose;
+ bPose *pose = object->pose;
+ UNUSED_VARS_NDEBUG(pose);
+ BLI_assert(pose != NULL);
+ BKE_armature_cached_bbone_deformation_update(object);
+ BKE_object_eval_boundbox(depsgraph, object);
+}
+static void pose_eval_cleanup_common(Object *object)
+{
+ bPose *pose = object->pose;
BLI_assert(pose != NULL);
-
- float ctime = BKE_scene_frame_get(scene); /* not accurate... */
- DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
- BLI_assert(ob->type == OB_ARMATURE);
-
- /* release the IK tree */
- BIK_release_tree(scene, ob, ctime);
-
BLI_assert(pose->chan_array != NULL || BLI_listbase_is_empty(&pose->chanbase));
MEM_SAFE_FREE(pose->chan_array);
}
+void BKE_pose_eval_done(struct Depsgraph *depsgraph, Object *object)
+{
+ bPose *pose = object->pose;
+ BLI_assert(pose != NULL);
+ UNUSED_VARS_NDEBUG(pose);
+ DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
+ BLI_assert(object->type == OB_ARMATURE);
+ pose_eval_done_common(depsgraph, object);
+}
+
+void BKE_pose_eval_cleanup(struct Depsgraph *depsgraph,
+ Scene *scene,
+ Object *object)
+{
+ bPose *pose = object->pose;
+ BLI_assert(pose != NULL);
+ UNUSED_VARS_NDEBUG(pose);
+ const float ctime = BKE_scene_frame_get(scene); /* not accurate... */
+ DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
+ BLI_assert(object->type == OB_ARMATURE);
+ /* Release the IK tree. */
+ BIK_release_tree(scene, object, ctime);
+ pose_eval_cleanup_common(object);
+}
+
void BKE_pose_eval_proxy_init(struct Depsgraph *depsgraph, Object *object)
{
BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL);
DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
pose_pchan_index_create(object->pose);
+ BKE_armature_cached_bbone_deformation_free_data(object);
}
-void BKE_pose_eval_proxy_cleanup(struct Depsgraph *depsgraph, Object *object)
+void BKE_pose_eval_proxy_done(struct Depsgraph *depsgraph, Object *object)
{
BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL);
DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
+ pose_eval_done_common(depsgraph, object);
+}
- bPose *pose = object->pose;
- BLI_assert(pose->chan_array != NULL);
- MEM_freeN(pose->chan_array);
- pose->chan_array = NULL;
+void BKE_pose_eval_proxy_cleanup(struct Depsgraph *depsgraph, Object *object)
+{
+ BLI_assert(ID_IS_LINKED(object) && object->proxy_from != NULL);
+ DEG_debug_print_eval(depsgraph, __func__, object->id.name, object);
+ pose_eval_cleanup_common(object);
}
void BKE_pose_eval_proxy_copy_bone(
diff --git a/source/blender/blenkernel/intern/blender.c b/source/blender/blenkernel/intern/blender.c
index d0dea75860e..f1b1aa548d2 100644
--- a/source/blender/blenkernel/intern/blender.c
+++ b/source/blender/blenkernel/intern/blender.c
@@ -208,6 +208,17 @@ static void userdef_free_keymaps(UserDef *userdef)
BLI_listbase_clear(&userdef->user_keymaps);
}
+static void userdef_free_keyconfig_prefs(UserDef *userdef)
+{
+ for (wmKeyConfigPref *kpt = userdef->user_keyconfig_prefs.first, *kpt_next; kpt; kpt = kpt_next) {
+ kpt_next = kpt->next;
+ IDP_FreeProperty(kpt->prop);
+ MEM_freeN(kpt->prop);
+ MEM_freeN(kpt);
+ }
+ BLI_listbase_clear(&userdef->user_keyconfig_prefs);
+}
+
static void userdef_free_user_menus(UserDef *userdef)
{
for (bUserMenu *um = userdef->user_menus.first, *um_next; um; um = um_next) {
@@ -237,6 +248,7 @@ void BKE_blender_userdef_data_free(UserDef *userdef, bool clear_fonts)
#endif
userdef_free_keymaps(userdef);
+ userdef_free_keyconfig_prefs(userdef);
userdef_free_user_menus(userdef);
userdef_free_addons(userdef);
diff --git a/source/blender/blenkernel/intern/blender_undo.c b/source/blender/blenkernel/intern/blender_undo.c
index a00ad5ff05f..fac3685f7b1 100644
--- a/source/blender/blenkernel/intern/blender_undo.c
+++ b/source/blender/blenkernel/intern/blender_undo.c
@@ -55,6 +55,7 @@
#include "BKE_main.h"
#include "BLO_undofile.h"
+#include "BLO_readfile.h"
#include "BLO_writefile.h"
#include "DEG_depsgraph.h"
@@ -81,7 +82,10 @@ bool BKE_memfile_undo_decode(MemFileUndoData *mfu, bContext *C)
success = (BKE_blendfile_read(C, mfu->filename, NULL, 0) != BKE_BLENDFILE_READ_FAIL);
}
else {
- success = BKE_blendfile_read_from_memfile(C, &mfu->memfile, NULL, 0);
+ success = BKE_blendfile_read_from_memfile(
+ C, &mfu->memfile,
+ &(const struct BlendFileReadParams){0},
+ NULL);
}
/* Restore, bmain has been re-allocated. */
diff --git a/source/blender/blenkernel/intern/blendfile.c b/source/blender/blenkernel/intern/blendfile.c
index 5a975402c90..cc42fe71579 100644
--- a/source/blender/blenkernel/intern/blendfile.c
+++ b/source/blender/blenkernel/intern/blendfile.c
@@ -114,11 +114,12 @@ static bool wm_scene_is_visible(wmWindowManager *wm, Scene *scene)
*/
static void setup_app_data(
bContext *C, BlendFileData *bfd,
- const char *filepath, ReportList *reports)
+ const char *filepath,
+ const bool is_startup,
+ ReportList *reports)
{
Main *bmain = G_MAIN;
Scene *curscene = NULL;
- const bool is_startup = (bfd->filename[0] == '\0');
const bool recover = (G.fileflags & G_FILE_RECOVER) != 0;
enum {
LOAD_UI = 1,
@@ -314,7 +315,7 @@ static void setup_app_data(
bmain->recovered = 0;
/* startup.blend or recovered startup */
- if (bfd->filename[0] == 0) {
+ if (is_startup) {
bmain->name[0] = '\0';
}
else if (recover && G.relbase_valid) {
@@ -376,7 +377,8 @@ static int handle_subversion_warning(Main *main, ReportList *reports)
int BKE_blendfile_read(
bContext *C, const char *filepath,
- ReportList *reports, int skip_flags)
+ const struct BlendFileReadParams *params,
+ ReportList *reports)
{
BlendFileData *bfd;
int retval = BKE_BLENDFILE_READ_OK;
@@ -386,7 +388,7 @@ int BKE_blendfile_read(
printf("Read blend: %s\n", filepath);
}
- bfd = BLO_read_from_file(filepath, reports, skip_flags);
+ bfd = BLO_read_from_file(filepath, params->skip_flags, reports);
if (bfd) {
if (bfd->user) {
retval = BKE_BLENDFILE_READ_OK_USERPREFS;
@@ -399,7 +401,7 @@ int BKE_blendfile_read(
retval = BKE_BLENDFILE_READ_FAIL;
}
else {
- setup_app_data(C, bfd, filepath, reports);
+ setup_app_data(C, bfd, filepath, params->is_startup, reports);
}
}
else
@@ -409,16 +411,17 @@ int BKE_blendfile_read(
}
bool BKE_blendfile_read_from_memory(
- bContext *C, const void *filebuf, int filelength,
- ReportList *reports, int skip_flags, bool update_defaults)
+ bContext *C, const void *filebuf, int filelength, bool update_defaults,
+ const struct BlendFileReadParams *params,
+ ReportList *reports)
{
BlendFileData *bfd;
- bfd = BLO_read_from_memory(filebuf, filelength, reports, skip_flags);
+ bfd = BLO_read_from_memory(filebuf, filelength, params->skip_flags, reports);
if (bfd) {
if (update_defaults)
BLO_update_defaults_startup_blend(bfd->main, NULL);
- setup_app_data(C, bfd, "<memory2>", reports);
+ setup_app_data(C, bfd, "<memory2>", params->is_startup, reports);
}
else {
BKE_reports_prepend(reports, "Loading failed: ");
@@ -430,12 +433,13 @@ bool BKE_blendfile_read_from_memory(
/* memfile is the undo buffer */
bool BKE_blendfile_read_from_memfile(
bContext *C, struct MemFile *memfile,
- ReportList *reports, int skip_flags)
+ const struct BlendFileReadParams *params,
+ ReportList *reports)
{
Main *bmain = CTX_data_main(C);
BlendFileData *bfd;
- bfd = BLO_read_from_memfile(bmain, BKE_main_blendfile_path(bmain), memfile, reports, skip_flags);
+ bfd = BLO_read_from_memfile(bmain, BKE_main_blendfile_path(bmain), memfile, params->skip_flags, reports);
if (bfd) {
/* remove the unused screens and wm */
while (bfd->main->wm.first)
@@ -443,7 +447,7 @@ bool BKE_blendfile_read_from_memfile(
while (bfd->main->screen.first)
BKE_libblock_free(bfd->main, bfd->main->screen.first);
- setup_app_data(C, bfd, "<memory1>", reports);
+ setup_app_data(C, bfd, "<memory1>", params->is_startup, reports);
}
else {
BKE_reports_prepend(reports, "Loading failed: ");
@@ -484,7 +488,7 @@ UserDef *BKE_blendfile_userdef_read(const char *filepath, ReportList *reports)
BlendFileData *bfd;
UserDef *userdef = NULL;
- bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF);
+ bfd = BLO_read_from_file(filepath, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF, reports);
if (bfd) {
if (bfd->user) {
userdef = bfd->user;
@@ -504,7 +508,10 @@ UserDef *BKE_blendfile_userdef_read_from_memory(
BlendFileData *bfd;
UserDef *userdef = NULL;
- bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF);
+ bfd = BLO_read_from_memory(
+ filebuf, filelength,
+ BLO_READ_SKIP_ALL & ~BLO_READ_SKIP_USERDEF,
+ reports);
if (bfd) {
if (bfd->user) {
userdef = bfd->user;
@@ -567,10 +574,10 @@ WorkspaceConfigFileData *BKE_blendfile_workspace_config_read(const char *filepat
WorkspaceConfigFileData *workspace_config = NULL;
if (filepath) {
- bfd = BLO_read_from_file(filepath, reports, BLO_READ_SKIP_USERDEF);
+ bfd = BLO_read_from_file(filepath, BLO_READ_SKIP_USERDEF, reports);
}
else {
- bfd = BLO_read_from_memory(filebuf, filelength, reports, BLO_READ_SKIP_USERDEF);
+ bfd = BLO_read_from_memory(filebuf, filelength, BLO_READ_SKIP_USERDEF, reports);
}
if (bfd) {
diff --git a/source/blender/blenkernel/intern/brush.c b/source/blender/blenkernel/intern/brush.c
index 39266eed6fe..f8fd3c56eb1 100644
--- a/source/blender/blenkernel/intern/brush.c
+++ b/source/blender/blenkernel/intern/brush.c
@@ -487,17 +487,31 @@ void BKE_brush_gpencil_presets(bContext *C)
brush->gpencil_settings->draw_strength = 1.0f;
/* Soft Eraser brush */
- brush = BKE_brush_add_gpencil(bmain, ts, "Eraser");
+ brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Soft");
brush->size = 30.0f;
+ brush->gpencil_settings->draw_strength = 0.5f;
brush->gpencil_settings->flag |= (GP_BRUSH_ENABLE_CURSOR | GP_BRUSH_DEFAULT_ERASER);
+ brush->gpencil_settings->flag |= GP_BRUSH_USE_PRESSURE;
+ brush->gpencil_settings->flag |= GP_BRUSH_USE_STENGTH_PRESSURE;
brush->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_SOFT;
brush->gpencil_tool = GPAINT_TOOL_ERASE;
brush->gpencil_settings->eraser_mode = GP_BRUSH_ERASER_SOFT;
brush->gpencil_settings->era_strength_f = 100.0f;
- brush->gpencil_settings->era_thickness_f = 0.10f;
+ brush->gpencil_settings->era_thickness_f = 10.0f;
/* Hard Eraser brush */
- brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Vertex");
+ brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Hard");
+ brush->size = 30.0f;
+ brush->gpencil_settings->draw_strength = 1.0f;
+ brush->gpencil_settings->flag |= (GP_BRUSH_ENABLE_CURSOR | GP_BRUSH_DEFAULT_ERASER);
+ brush->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_HARD;
+ brush->gpencil_tool = GPAINT_TOOL_ERASE;
+ brush->gpencil_settings->eraser_mode = GP_BRUSH_ERASER_SOFT;
+ brush->gpencil_settings->era_strength_f = 100.0f;
+ brush->gpencil_settings->era_thickness_f = 50.0f;
+
+ /* Point Eraser brush */
+ brush = BKE_brush_add_gpencil(bmain, ts, "Eraser Point");
brush->size = 30.0f;
brush->gpencil_settings->flag |= GP_BRUSH_ENABLE_CURSOR;
brush->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_HARD;
diff --git a/source/blender/blenkernel/intern/colorband.c b/source/blender/blenkernel/intern/colorband.c
index 38631c76009..7fc1124a422 100644
--- a/source/blender/blenkernel/intern/colorband.c
+++ b/source/blender/blenkernel/intern/colorband.c
@@ -78,7 +78,9 @@ void BKE_colorband_init(ColorBand *coba, bool rangetype)
}
coba->tot = 2;
+ coba->cur = 0;
coba->color_mode = COLBAND_BLEND_RGB;
+ coba->ipotype = COLBAND_INTERP_LINEAR;
}
static void colorband_init_from_table_rgba_simple(
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c
index 96480862b93..96df4f402c5 100644
--- a/source/blender/blenkernel/intern/constraint.c
+++ b/source/blender/blenkernel/intern/constraint.c
@@ -5107,7 +5107,7 @@ bConstraint *BKE_constraint_find_from_target(Object *ob, bConstraintTarget *tgt,
/* Finds the original copy of the constraint based on a COW copy. */
static bConstraint *constraint_find_original(Object *ob, bPoseChannel *pchan, bConstraint *con, Object **r_orig_ob)
{
- Object *orig_ob = (Object*)DEG_get_original_id((ID*)ob);
+ Object *orig_ob = (Object *)DEG_get_original_id(&ob->id);
if (ELEM(orig_ob, NULL, ob)) {
return NULL;
@@ -5139,7 +5139,7 @@ static bConstraint *constraint_find_original(Object *ob, bPoseChannel *pchan, bC
int index = BLI_findindex(constraints, con);
if (index >= 0) {
- bConstraint *orig_con = (bConstraint*)BLI_findlink(orig_constraints, index);
+ bConstraint *orig_con = BLI_findlink(orig_constraints, index);
/* Verify it has correct type and name. */
if (orig_con && orig_con->type == con->type && STREQ(orig_con->name, con->name)) {
@@ -5251,7 +5251,7 @@ void BKE_constraint_target_matrix_get(struct Depsgraph *depsgraph, Scene *scene,
cti->get_constraint_targets(con, &targets);
/* only calculate the target matrix on the first target */
- ct = (bConstraintTarget *)BLI_findlink(&targets, index);
+ ct = BLI_findlink(&targets, index);
if (ct) {
if (cti->get_target_matrix)
diff --git a/source/blender/blenkernel/intern/curve.c b/source/blender/blenkernel/intern/curve.c
index 2f960a3a349..872b5074e4e 100644
--- a/source/blender/blenkernel/intern/curve.c
+++ b/source/blender/blenkernel/intern/curve.c
@@ -357,7 +357,7 @@ void BKE_curve_texspace_calc(Curve *cu)
}
}
-void BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_rot[3], float r_size[3])
+BoundBox *BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_rot[3], float r_size[3])
{
if (cu->bb == NULL || (cu->bb->flag & BOUNDBOX_DIRTY)) {
BKE_curve_texspace_calc(cu);
@@ -366,6 +366,8 @@ void BKE_curve_texspace_get(Curve *cu, float r_loc[3], float r_rot[3], float r_s
if (r_loc) copy_v3_v3(r_loc, cu->loc);
if (r_rot) copy_v3_v3(r_rot, cu->rot);
if (r_size) copy_v3_v3(r_size, cu->size);
+
+ return cu->bb;
}
bool BKE_nurbList_index_get_co(ListBase *nurb, const int index, float r_co[3])
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 7e692330b79..5453982b070 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -915,10 +915,13 @@ void dynamicPaint_freeSurfaceData(DynamicPaintSurface *surface)
surface->data = NULL;
}
-void dynamicPaint_freeSurface(DynamicPaintSurface *surface)
+void dynamicPaint_freeSurface(const DynamicPaintModifierData *pmd,
+ DynamicPaintSurface *surface)
{
/* point cache */
- BKE_ptcache_free_list(&(surface->ptcaches));
+ if ((pmd->modifier.flag & eModifierFlag_SharedCaches) == 0) {
+ BKE_ptcache_free_list(&(surface->ptcaches));
+ }
surface->pointcache = NULL;
if (surface->effector_weights)
@@ -940,7 +943,7 @@ void dynamicPaint_freeCanvas(DynamicPaintModifierData *pmd)
while (surface) {
next_surface = surface->next;
- dynamicPaint_freeSurface(surface);
+ dynamicPaint_freeSurface(pmd, surface);
surface = next_surface;
}
@@ -1139,7 +1142,9 @@ bool dynamicPaint_createType(struct DynamicPaintModifierData *pmd, int type, str
return true;
}
-void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, struct DynamicPaintModifierData *tpmd)
+void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd,
+ struct DynamicPaintModifierData *tpmd,
+ int flag)
{
/* Init modifier */
tpmd->type = pmd->type;
@@ -1154,11 +1159,19 @@ void dynamicPaint_Modifier_copy(const struct DynamicPaintModifierData *pmd, stru
tpmd->canvas->pmd = tpmd;
/* free default surface */
if (tpmd->canvas->surfaces.first)
- dynamicPaint_freeSurface(tpmd->canvas->surfaces.first);
+ dynamicPaint_freeSurface(tpmd, tpmd->canvas->surfaces.first);
/* copy existing surfaces */
for (surface = pmd->canvas->surfaces.first; surface; surface = surface->next) {
DynamicPaintSurface *t_surface = dynamicPaint_createNewSurface(tpmd->canvas, NULL);
+ if (flag & LIB_ID_CREATE_NO_MAIN) {
+ /* TODO(sergey): Consider passing some tips to the surface
+ * creation to avoid this allocate-and-free cache behavior. */
+ BKE_ptcache_free_list(&t_surface->ptcaches);
+ tpmd->modifier.flag |= eModifierFlag_SharedCaches;
+ t_surface->ptcaches = surface->ptcaches;
+ t_surface->pointcache = surface->pointcache;
+ }
/* surface settings */
t_surface->brush_group = surface->brush_group;
diff --git a/source/blender/blenkernel/intern/gpencil.c b/source/blender/blenkernel/intern/gpencil.c
index f2225bca3f5..98d255df080 100644
--- a/source/blender/blenkernel/intern/gpencil.c
+++ b/source/blender/blenkernel/intern/gpencil.c
@@ -211,46 +211,6 @@ void BKE_gpencil_free_layers(ListBase *list)
}
}
-/* clear all runtime derived data */
-static void BKE_gpencil_clear_derived(bGPDlayer *gpl)
-{
- if (gpl->runtime.derived_array == NULL) {
- return;
- }
-
- for (int i = 0; i < gpl->runtime.len_derived; i++) {
- bGPDframe *derived_gpf = &gpl->runtime.derived_array[i];
- BKE_gpencil_free_frame_runtime_data(derived_gpf);
- derived_gpf = NULL;
- }
- gpl->runtime.len_derived = 0;
- MEM_SAFE_FREE(gpl->runtime.derived_array);
-}
-
-/* Free all of the gp-layers temp data*/
-static void BKE_gpencil_free_layers_temp_data(ListBase *list)
-{
- bGPDlayer *gpl_next;
-
- /* error checking */
- if (list == NULL) return;
- /* delete layers */
- for (bGPDlayer *gpl = list->first; gpl; gpl = gpl_next) {
- gpl_next = gpl->next;
- BKE_gpencil_clear_derived(gpl);
- }
-}
-
-/* Free temp gpf derived frames */
-void BKE_gpencil_free_derived_frames(bGPdata *gpd)
-{
- /* error checking */
- if (gpd == NULL) return;
- for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
- BKE_gpencil_clear_derived(gpl);
- }
-}
-
/** Free (or release) any data used by this grease pencil (does not free the gpencil itself). */
void BKE_gpencil_free(bGPdata *gpd, bool free_all)
{
@@ -258,9 +218,6 @@ void BKE_gpencil_free(bGPdata *gpd, bool free_all)
BKE_animdata_free(&gpd->id, false);
/* free layers */
- if (free_all) {
- BKE_gpencil_free_layers_temp_data(&gpd->layers);
- }
BKE_gpencil_free_layers(&gpd->layers);
/* materials */
@@ -639,8 +596,6 @@ bGPDlayer *BKE_gpencil_layer_duplicate(const bGPDlayer *gpl_src)
/* make a copy of source layer */
gpl_dst = MEM_dupallocN(gpl_src);
gpl_dst->prev = gpl_dst->next = NULL;
- gpl_dst->runtime.derived_array = NULL;
- gpl_dst->runtime.len_derived = 0;
/* copy frames */
BLI_listbase_clear(&gpl_dst->frames);
@@ -1031,9 +986,6 @@ void BKE_gpencil_layer_delete(bGPdata *gpd, bGPDlayer *gpl)
/* free icon providing preview of icon color */
BKE_icon_delete(gpl->runtime.icon_id);
- /* free derived data */
- BKE_gpencil_clear_derived(gpl);
-
BLI_freelinkN(&gpd->layers, gpl);
}
diff --git a/source/blender/blenkernel/intern/keyconfig.c b/source/blender/blenkernel/intern/keyconfig.c
new file mode 100644
index 00000000000..755c9e1582d
--- /dev/null
+++ b/source/blender/blenkernel/intern/keyconfig.c
@@ -0,0 +1,123 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/blenkernel/intern/keyconfig.c
+ * \ingroup bke
+ */
+
+#include <stddef.h>
+#include <stdlib.h>
+
+#include "RNA_types.h"
+
+#include "BLI_utildefines.h"
+#include "BLI_ghash.h"
+#include "BLI_listbase.h"
+#include "BLI_string.h"
+
+#include "DNA_listBase.h"
+#include "DNA_userdef_types.h"
+#include "DNA_windowmanager_types.h"
+
+#include "BKE_keyconfig.h" /* own include */
+#include "BKE_idprop.h"
+
+#include "MEM_guardedalloc.h"
+
+
+/* -------------------------------------------------------------------- */
+/** \name Key-Config Preference (UserDef) API
+ *
+ * \see #BKE_addon_pref_type_init for logic this is bases on.
+ * \{ */
+
+wmKeyConfigPref *BKE_keyconfig_pref_ensure(UserDef *userdef, const char *kc_idname)
+{
+ wmKeyConfigPref *kpt = BLI_findstring(
+ &userdef->user_keyconfig_prefs, kc_idname, offsetof(wmKeyConfigPref, idname));
+ if (kpt == NULL) {
+ kpt = MEM_callocN(sizeof(*kpt), __func__);
+ STRNCPY(kpt->idname, kc_idname);
+ BLI_addtail(&userdef->user_keyconfig_prefs, kpt);
+ }
+ if (kpt->prop == NULL) {
+ IDPropertyTemplate val = {0};
+ kpt->prop = IDP_New(IDP_GROUP, &val, kc_idname); /* name is unimportant */
+ }
+ return kpt;
+}
+
+/** \} */
+
+/* -------------------------------------------------------------------- */
+/** \name Key-Config Preference (RNA Type) API
+ *
+ * \see #BKE_addon_pref_type_init for logic this is bases on.
+ * \{ */
+
+static GHash *global_keyconfigpreftype_hash = NULL;
+
+
+wmKeyConfigPrefType_Runtime *BKE_keyconfig_pref_type_find(const char *idname, bool quiet)
+{
+ if (idname[0]) {
+ wmKeyConfigPrefType_Runtime *kpt_rt;
+
+ kpt_rt = BLI_ghash_lookup(global_keyconfigpreftype_hash, idname);
+ if (kpt_rt) {
+ return kpt_rt;
+ }
+
+ if (!quiet) {
+ printf("search for unknown keyconfig-pref '%s'\n", idname);
+ }
+ }
+ else {
+ if (!quiet) {
+ printf("search for empty keyconfig-pref\n");
+ }
+ }
+
+ return NULL;
+}
+
+void BKE_keyconfig_pref_type_add(wmKeyConfigPrefType_Runtime *kpt_rt)
+{
+ BLI_ghash_insert(global_keyconfigpreftype_hash, kpt_rt->idname, kpt_rt);
+}
+
+void BKE_keyconfig_pref_type_remove(const wmKeyConfigPrefType_Runtime *kpt_rt)
+{
+ BLI_ghash_remove(global_keyconfigpreftype_hash, kpt_rt->idname, NULL, MEM_freeN);
+}
+
+void BKE_keyconfig_pref_type_init(void)
+{
+ BLI_assert(global_keyconfigpreftype_hash == NULL);
+ global_keyconfigpreftype_hash = BLI_ghash_str_new(__func__);
+}
+
+void BKE_keyconfig_pref_type_free(void)
+{
+ BLI_ghash_free(global_keyconfigpreftype_hash, NULL, MEM_freeN);
+ global_keyconfigpreftype_hash = NULL;
+}
+
+/** \} */
diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c
index 0e4a38503ae..2f9c818934f 100644
--- a/source/blender/blenkernel/intern/layer.c
+++ b/source/blender/blenkernel/intern/layer.c
@@ -726,6 +726,7 @@ static short layer_collection_sync(
if (base->flag & BASE_HIDDEN) {
view_layer->runtime_flag |= VIEW_LAYER_HAS_HIDE;
+ lc->runtime_flag |= LAYER_COLLECTION_HAS_HIDDEN_OBJECTS;
}
else if (base->flag & BASE_VISIBLE) {
lc->runtime_flag |= LAYER_COLLECTION_HAS_VISIBLE_OBJECTS;
diff --git a/source/blender/blenkernel/intern/material.c b/source/blender/blenkernel/intern/material.c
index 0e64b9dd6d0..6741ebf39d2 100644
--- a/source/blender/blenkernel/intern/material.c
+++ b/source/blender/blenkernel/intern/material.c
@@ -244,7 +244,10 @@ Material *BKE_material_localize(Material *ma)
man->nodetree = ntreeLocalize(ma->nodetree);
}
- /* man->gp_style = NULL; */ /* XXX: We probably don't want to clear here, or else we may get problems with COW later? */
+ if (ma->gp_style != NULL) {
+ man->gp_style = MEM_dupallocN(ma->gp_style);
+ }
+
BLI_listbase_clear(&man->gpumaterial);
/* TODO Duplicate Engine Settings and set runtime to NULL */
diff --git a/source/blender/blenkernel/intern/mesh.c b/source/blender/blenkernel/intern/mesh.c
index 6a00aaf576b..0942cb071a3 100644
--- a/source/blender/blenkernel/intern/mesh.c
+++ b/source/blender/blenkernel/intern/mesh.c
@@ -718,7 +718,7 @@ Mesh *BKE_mesh_copy(Main *bmain, const Mesh *me)
}
BMesh *BKE_mesh_to_bmesh_ex(
- Mesh *me,
+ const Mesh *me,
const struct BMeshCreateParams *create_params,
const struct BMeshFromMeshParams *convert_params)
{
@@ -926,7 +926,7 @@ BoundBox *BKE_mesh_boundbox_get(Object *ob)
return me->bb;
}
-void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_size[3])
+BoundBox *BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_size[3])
{
if (me->bb == NULL || (me->bb->flag & BOUNDBOX_DIRTY)) {
BKE_mesh_texspace_calc(me);
@@ -935,6 +935,8 @@ void BKE_mesh_texspace_get(Mesh *me, float r_loc[3], float r_rot[3], float r_siz
if (r_loc) copy_v3_v3(r_loc, me->loc);
if (r_rot) copy_v3_v3(r_rot, me->rot);
if (r_size) copy_v3_v3(r_size, me->size);
+
+ return me->bb;
}
void BKE_mesh_texspace_get_reference(Mesh *me, short **r_texflag, float **r_loc, float **r_rot, float **r_size)
diff --git a/source/blender/blenkernel/intern/multires.c b/source/blender/blenkernel/intern/multires.c
index 8f02b51fd5f..a21e919bca7 100644
--- a/source/blender/blenkernel/intern/multires.c
+++ b/source/blender/blenkernel/intern/multires.c
@@ -282,21 +282,6 @@ static MDisps *multires_mdisps_initialize_hidden(Mesh *me, int level)
return mdisps;
}
-DerivedMesh *get_multires_dm(struct Depsgraph *depsgraph, Scene *scene, MultiresModifierData *mmd, Object *ob)
-{
- ModifierData *md = (ModifierData *)mmd;
- DerivedMesh *tdm = mesh_get_derived_deform(depsgraph, scene, ob, CD_MASK_BAREMESH);
- DerivedMesh *dm;
- ModifierEvalContext mectx = {depsgraph, ob, MOD_APPLY_USECACHE | MOD_APPLY_IGNORE_SIMPLIFY};
-
- dm = modifier_applyModifier_DM_deprecated(md, &mectx, tdm);
- if (dm == tdm) {
- dm = CDDM_copy(tdm);
- }
-
- return dm;
-}
-
Mesh *BKE_multires_create_mesh(
struct Depsgraph *depsgraph,
Scene *scene,
diff --git a/source/blender/blenkernel/intern/multires_reshape.c b/source/blender/blenkernel/intern/multires_reshape.c
index fe4bc5ca3e0..72be2617798 100644
--- a/source/blender/blenkernel/intern/multires_reshape.c
+++ b/source/blender/blenkernel/intern/multires_reshape.c
@@ -875,8 +875,6 @@ static bool multires_reshape_from_vertcos(
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
Mesh *coarse_mesh = object->data;
MDisps *mdisps = CustomData_get_layer(&coarse_mesh->ldata, CD_MDISPS);
- /* Make sure displacement grids are ready. */
- multires_reshape_ensure_grids(coarse_mesh, mmd->totlvl);
/* Pick maximum between multires level and dispalcement level.
* This is because mesh can be used by objects with multires at different
* levels.
@@ -885,6 +883,8 @@ static bool multires_reshape_from_vertcos(
* mdisps->level.
*/
const int top_level = max_ii(mmd->totlvl, mdisps->level);
+ /* Make sure displacement grids are ready. */
+ multires_reshape_ensure_grids(coarse_mesh, top_level);
/* Construct context. */
MultiresReshapeFromDeformedVertsContext reshape_deformed_verts_ctx = {
.reshape_ctx = {
@@ -1166,8 +1166,6 @@ bool multiresModifier_reshapeFromCCG(
GridPaintMask *grid_paint_mask =
CustomData_get_layer(&coarse_mesh->ldata, CD_GRID_PAINT_MASK);
Subdiv *subdiv = subdiv_ccg->subdiv;
- /* Make sure displacement grids are ready. */
- multires_reshape_ensure_grids(coarse_mesh, tot_level);
/* Pick maximum between multires level and dispalcement level.
* This is because mesh can be used by objects with multires at different
* levels.
@@ -1176,6 +1174,8 @@ bool multiresModifier_reshapeFromCCG(
* mdisps->level.
*/
const int top_level = max_ii(tot_level, mdisps->level);
+ /* Make sure displacement grids are ready. */
+ multires_reshape_ensure_grids(coarse_mesh, top_level);
/* Construct context. */
ReshapeFromCCGTaskData data = {
.reshape_ctx = {
diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c
index d36a5838630..95e51481d9a 100644
--- a/source/blender/blenkernel/intern/object.c
+++ b/source/blender/blenkernel/intern/object.c
@@ -458,6 +458,7 @@ void BKE_object_free_derived_caches(Object *ob)
object_update_from_subsurf_ccg(ob);
BKE_object_free_derived_mesh_caches(ob);
+ BKE_armature_cached_bbone_deformation_free(ob);
if (ob->runtime.mesh_eval != NULL) {
Mesh *mesh_eval = ob->runtime.mesh_eval;
@@ -835,7 +836,8 @@ void BKE_object_init(Object *ob)
ob->empty_image_depth = OB_EMPTY_IMAGE_DEPTH_DEFAULT;
ob->empty_image_visibility_flag = (
OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE |
- OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC);
+ OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC |
+ OB_EMPTY_IMAGE_VISIBLE_BACKSIDE);
if (ob->type == OB_EMPTY) {
copy_v2_fl(ob->ima_ofs, -0.5f);
}
@@ -2028,69 +2030,29 @@ static void give_parvert(Object *par, int nr, float vec[3])
if (par->type == OB_MESH) {
Mesh *me = par->data;
BMEditMesh *em = me->edit_btmesh;
- DerivedMesh *dm = NULL;
Mesh *me_eval = (em) ? em->mesh_eval_final : par->runtime.mesh_eval;
- /* Keep this until subsurf code ported away from derived mesh - campbell. */
- dm = par->derivedFinal;
- if (dm && dm->type != DM_TYPE_CCGDM) {
- dm = NULL;
- }
-
if (me_eval) {
int count = 0;
const int numVerts = me_eval->totvert;
if (nr < numVerts) {
- bool use_special_ss_case = false;
-
- if (dm && dm->type == DM_TYPE_CCGDM) {
- ModifierData *md;
- VirtualModifierData virtualModifierData;
- use_special_ss_case = true;
- for (md = modifiers_getVirtualModifierList(par, &virtualModifierData);
- md != NULL;
- md = md->next)
- {
- const ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- /* TODO(sergey): Check for disabled modifiers. */
- if (mti->type != eModifierTypeType_OnlyDeform && md->next != NULL) {
- use_special_ss_case = false;
- break;
- }
- }
- }
-
- if (!use_special_ss_case) {
- /* avoid dm->getVertDataArray() since it allocates arrays in the dm (not thread safe) */
- if (em && me_eval->runtime.is_original) {
- if (em->bm->elem_table_dirty & BM_VERT) {
+ if (em && me_eval->runtime.is_original) {
+ if (em->bm->elem_table_dirty & BM_VERT) {
#ifdef VPARENT_THREADING_HACK
- BLI_mutex_lock(&vparent_lock);
- if (em->bm->elem_table_dirty & BM_VERT) {
- BM_mesh_elem_table_ensure(em->bm, BM_VERT);
- }
- BLI_mutex_unlock(&vparent_lock);
-#else
- BLI_assert(!"Not safe for threading");
+ BLI_mutex_lock(&vparent_lock);
+ if (em->bm->elem_table_dirty & BM_VERT) {
BM_mesh_elem_table_ensure(em->bm, BM_VERT);
-#endif
}
+ BLI_mutex_unlock(&vparent_lock);
+#else
+ BLI_assert(!"Not safe for threading");
+ BM_mesh_elem_table_ensure(em->bm, BM_VERT);
+#endif
}
}
- if (use_special_ss_case) {
- /* Special case if the last modifier is SS and no constructive modifier are in front of it. */
- CCGDerivedMesh *ccgdm = (CCGDerivedMesh *)dm;
- CCGVert *ccg_vert = ccgSubSurf_getVert(ccgdm->ss, POINTER_FROM_INT(nr));
- /* In case we deleted some verts, nr may refer to inexistent one now, see T42557. */
- if (ccg_vert) {
- float *co = ccgSubSurf_getVertData(ccgdm->ss, ccg_vert);
- add_v3_v3(vec, co);
- count++;
- }
- }
- else if (CustomData_has_layer(&me_eval->vdata, CD_ORIGINDEX) &&
+ if (CustomData_has_layer(&me_eval->vdata, CD_ORIGINDEX) &&
!(em && me_eval->runtime.is_original))
{
const int *index = CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX);
@@ -2125,7 +2087,7 @@ static void give_parvert(Object *par, int nr, float vec[3])
}
else {
fprintf(stderr,
- "%s: DerivedMesh is needed to solve parenting, "
+ "%s: Evaluated mesh is needed to solve parenting, "
"object position can be wrong now\n", __func__);
}
}
@@ -4079,3 +4041,21 @@ bool BKE_object_modifier_update_subframe(
return false;
}
+
+bool BKE_image_empty_visible_in_view3d(const Object *ob, const RegionView3D *rv3d)
+{
+ int visibility_flag = ob->empty_image_visibility_flag;
+
+ if ((visibility_flag & OB_EMPTY_IMAGE_VISIBLE_BACKSIDE) == 0) {
+ if (dot_v3v3((float *)&ob->obmat[2], (float *)&rv3d->viewinv[2]) < 0.0f) {
+ return false;
+ }
+ }
+
+ if (rv3d->is_persp) {
+ return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE;
+ }
+ else {
+ return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC;
+ }
+} \ No newline at end of file
diff --git a/source/blender/blenkernel/intern/object_update.c b/source/blender/blenkernel/intern/object_update.c
index 267f64aa53f..dc144f48b05 100644
--- a/source/blender/blenkernel/intern/object_update.c
+++ b/source/blender/blenkernel/intern/object_update.c
@@ -135,7 +135,7 @@ void BKE_object_eval_constraints(Depsgraph *depsgraph,
BKE_constraints_clear_evalob(cob);
}
-void BKE_object_eval_done(Depsgraph *depsgraph, Object *ob)
+void BKE_object_eval_transform_final(Depsgraph *depsgraph, Object *ob)
{
DEG_debug_print_eval(depsgraph, __func__, ob->id.name, ob);
@@ -149,14 +149,6 @@ void BKE_object_eval_done(Depsgraph *depsgraph, Object *ob)
copy_m4_m4(ob_orig->constinv, ob->constinv);
ob_orig->transflag = ob->transflag;
ob_orig->flag = ob->flag;
-
- BoundBox *bb = BKE_object_boundbox_get(ob);
- if (bb != NULL) {
- if (ob_orig->bb == NULL) {
- ob_orig->bb = MEM_mallocN(sizeof(*ob_orig->bb), __func__);
- }
- *ob_orig->bb = *bb;
- }
}
}
@@ -276,8 +268,22 @@ void BKE_object_handle_data_update(
psys = psys->next;
}
}
+ BKE_object_eval_boundbox(depsgraph, ob);
+}
- /* quick cache removed */
+void BKE_object_eval_boundbox(Depsgraph *depsgraph, Object *object)
+{
+ if (!DEG_is_active(depsgraph)) {
+ return;
+ }
+ Object *ob_orig = DEG_get_original_object(object);
+ BoundBox *bb = BKE_object_boundbox_get(object);
+ if (bb != NULL) {
+ if (ob_orig->bb == NULL) {
+ ob_orig->bb = MEM_mallocN(sizeof(*ob_orig->bb), __func__);
+ }
+ *ob_orig->bb = *bb;
+ }
}
bool BKE_object_eval_proxy_copy(Depsgraph *depsgraph,
@@ -364,7 +370,7 @@ void BKE_object_eval_transform_all(Depsgraph *depsgraph,
BKE_object_eval_constraints(depsgraph, scene, object);
}
BKE_object_eval_uber_transform(depsgraph, object);
- BKE_object_eval_done(depsgraph, object);
+ BKE_object_eval_transform_final(depsgraph, object);
}
void BKE_object_eval_update_shading(Depsgraph *depsgraph, Object *object)
diff --git a/source/blender/blenkernel/intern/paint.c b/source/blender/blenkernel/intern/paint.c
index 24782af4d22..9445981538e 100644
--- a/source/blender/blenkernel/intern/paint.c
+++ b/source/blender/blenkernel/intern/paint.c
@@ -689,29 +689,30 @@ bool BKE_paint_ensure(const ToolSettings *ts, struct Paint **r_paint)
paint->flags |= PAINT_SHOW_BRUSH;
+ *r_paint = paint;
+
BKE_paint_runtime_init(ts, paint);
- *r_paint = paint;
return false;
}
void BKE_paint_init(Main *bmain, Scene *sce, ePaintMode mode, const char col[3])
{
UnifiedPaintSettings *ups = &sce->toolsettings->unified_paint_settings;
- Brush *brush;
Paint *paint = BKE_paint_get_active_from_paintmode(sce, mode);
/* If there's no brush, create one */
- brush = BKE_paint_brush(paint);
- if (brush == NULL) {
- eObjectMode ob_mode = BKE_paint_object_mode_from_paintmode(mode);
- brush = BKE_brush_first_search(bmain, ob_mode);
-
- if (!brush) {
- brush = BKE_brush_add(bmain, "Brush", ob_mode);
- id_us_min(&brush->id); /* fake user only */
+ if (PAINT_MODE_HAS_BRUSH(mode)) {
+ Brush *brush = BKE_paint_brush(paint);
+ if (brush == NULL) {
+ eObjectMode ob_mode = BKE_paint_object_mode_from_paintmode(mode);
+ brush = BKE_brush_first_search(bmain, ob_mode);
+ if (!brush) {
+ brush = BKE_brush_add(bmain, "Brush", ob_mode);
+ id_us_min(&brush->id); /* fake user only */
+ }
+ BKE_paint_brush_set(paint, brush);
}
- BKE_paint_brush_set(paint, brush);
}
memcpy(paint->paint_cursor_col, col, 3);
diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index f4e918da4f0..5213afc3805 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -775,65 +775,65 @@ void BKE_scene_init(Scene *sce)
/* GP Sculpt brushes */
{
- GP_BrushEdit_Settings *gset = &sce->toolsettings->gp_sculpt;
- GP_EditBrush_Data *gp_brush;
+ GP_Sculpt_Settings *gset = &sce->toolsettings->gp_sculpt;
+ GP_Sculpt_Data *gp_brush;
float curcolor_add[3], curcolor_sub[3];
ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f);
ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_SMOOTH];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_SMOOTH];
gp_brush->size = 25;
gp_brush->strength = 0.3f;
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_SMOOTH_PRESSURE | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_THICKNESS];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_THICKNESS];
gp_brush->size = 25;
gp_brush->strength = 0.5f;
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_STRENGTH];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_STRENGTH];
gp_brush->size = 25;
gp_brush->strength = 0.5f;
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_GRAB];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_GRAB];
gp_brush->size = 50;
gp_brush->strength = 0.3f;
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_PUSH];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_PUSH];
gp_brush->size = 25;
gp_brush->strength = 0.3f;
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_TWIST];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_TWIST];
gp_brush->size = 50;
- gp_brush->strength = 0.3f; // XXX?
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->strength = 0.3f;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_PINCH];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_PINCH];
gp_brush->size = 50;
- gp_brush->strength = 0.5f; // XXX?
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->strength = 0.5f;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
- gp_brush = &gset->brush[GP_EDITBRUSH_TYPE_RANDOMIZE];
+ gp_brush = &gset->brush[GP_SCULPT_TYPE_RANDOMIZE];
gp_brush->size = 25;
gp_brush->strength = 0.5f;
- gp_brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
}
diff --git a/source/blender/blenkernel/intern/studiolight.c b/source/blender/blenkernel/intern/studiolight.c
index df5cc7551aa..f949fcaea07 100644
--- a/source/blender/blenkernel/intern/studiolight.c
+++ b/source/blender/blenkernel/intern/studiolight.c
@@ -58,25 +58,23 @@
/* Statics */
static ListBase studiolights;
static int last_studiolight_id = 0;
-#define STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE 128
-#define STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT 32
-#define STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH (STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT * 2)
+#define STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE 96
+#define STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT 32
+#define STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH (STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT * 2)
-#define STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE 0
-#define STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS 1
/*
* The method to calculate the irradiance buffers
* The irradiance buffer is only shown in the background when in LookDev.
*
* STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE is very slow, but very accurate
* STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS is faster but has artifacts
+ * Cannot have both enabled at the same time!!!
*/
-// #define STUDIOLIGHT_IRRADIANCE_METHOD STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
-#define STUDIOLIGHT_IRRADIANCE_METHOD STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS
+// #define STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
+#define STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 2
-# define STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING
-#endif
+/* Temporarily disabled due to the creation of textures with -nan(ind)s */
+#define STUDIOLIGHT_SH_WINDOWING 0.0f /* 0.0 is disabled */
/*
* Disable this option so caches are not loaded from disk
@@ -88,6 +86,34 @@ static const char *STUDIOLIGHT_CAMERA_FOLDER = "studiolights/camera/";
static const char *STUDIOLIGHT_WORLD_FOLDER = "studiolights/world/";
static const char *STUDIOLIGHT_MATCAP_FOLDER = "studiolights/matcap/";
+/* ITER MACRO */
+
+/** Iter on all pixel giving texel center position and pixel pointer.
+ * Arguments
+ * type : type of src.
+ * src : source buffer.
+ * channels : number of channels per pixel.
+ *
+ * Others
+ * x, y : normalized UV coordinate [0..1] of the current pixel center.
+ * texel_size[2] : UV size of a pixel in this texture.
+ * pixel[] : pointer to the current pixel.
+ */
+#define ITER_PIXELS(type, src, channels, width, height) \
+{ \
+ float texel_size[2]; \
+ texel_size[0] = 1.0f / width; \
+ texel_size[1] = 1.0f / height; \
+ type (*pixel_)[channels] = (type (*)[channels])src; \
+ for (float y = 0.5 * texel_size[1]; y < 1.0; y += texel_size[1]) { \
+ for (float x = 0.5 * texel_size[0]; x < 1.0; x += texel_size[0], pixel_++) { \
+ type *pixel = *pixel_;
+
+#define ITER_PIXELS_END \
+ } \
+ } \
+} ((void)0)
+
/* FUNCTIONS */
#define IMB_SAFE_FREE(p) do { \
if (p) { \
@@ -123,13 +149,12 @@ static void studiolight_free(struct StudioLight *sl)
for (int index = 0; index < 6; index++) {
IMB_SAFE_FREE(sl->radiance_cubemap_buffers[index]);
}
- GPU_TEXTURE_SAFE_FREE(sl->equirectangular_radiance_gputexture);
- GPU_TEXTURE_SAFE_FREE(sl->equirectangular_irradiance_gputexture);
- IMB_SAFE_FREE(sl->equirectangular_radiance_buffer);
- IMB_SAFE_FREE(sl->equirectangular_irradiance_buffer);
+ GPU_TEXTURE_SAFE_FREE(sl->equirect_radiance_gputexture);
+ GPU_TEXTURE_SAFE_FREE(sl->equirect_irradiance_gputexture);
+ IMB_SAFE_FREE(sl->equirect_radiance_buffer);
+ IMB_SAFE_FREE(sl->equirect_irradiance_buffer);
MEM_SAFE_FREE(sl->path_irr_cache);
MEM_SAFE_FREE(sl->path_sh_cache);
- MEM_SAFE_FREE(sl->gpu_matcap_3components);
MEM_SAFE_FREE(sl);
}
@@ -159,13 +184,13 @@ static struct StudioLight *studiolight_create(int flag)
return sl;
}
-static void direction_to_equirectangular(float r[2], const float dir[3])
+static void direction_to_equirect(float r[2], const float dir[3])
{
r[0] = (atan2f(dir[1], dir[0]) - M_PI) / -(M_PI * 2);
r[1] = (acosf(dir[2] / 1.0) - M_PI) / -M_PI;
}
-static void equirectangular_to_direction(float r[3], float u, float v)
+static void equirect_to_direction(float r[3], float u, float v)
{
float phi = (-(M_PI * 2)) * u + M_PI;
float theta = -M_PI * v + M_PI;
@@ -175,38 +200,47 @@ static void equirectangular_to_direction(float r[3], float u, float v)
r[2] = cosf(theta);
}
-static void studiolight_calculate_radiance(ImBuf *ibuf, float color[4], const float direction[3])
+static void UNUSED_FUNCTION(direction_to_cube_face_uv)(float r_uv[2], int *r_face, const float dir[3])
{
- float uv[2];
- direction_to_equirectangular(uv, direction);
- nearest_interpolation_color_wrap(ibuf, NULL, color, uv[0] * ibuf->x, uv[1] * ibuf->y);
+ if (fabsf(dir[0]) > fabsf(dir[1]) && fabsf(dir[0]) > fabsf(dir[2])) {
+ bool is_pos = (dir[0] > 0.0f);
+ *r_face = is_pos ? STUDIOLIGHT_X_POS : STUDIOLIGHT_X_NEG;
+ r_uv[0] = dir[2] / fabsf(dir[0]) * (is_pos ? 1 : -1);
+ r_uv[1] = dir[1] / fabsf(dir[0]) * (is_pos ? -1 : -1);
+ }
+ else if (fabsf(dir[1]) > fabsf(dir[0]) && fabsf(dir[1]) > fabsf(dir[2])) {
+ bool is_pos = (dir[1] > 0.0f);
+ *r_face = is_pos ? STUDIOLIGHT_Y_POS : STUDIOLIGHT_Y_NEG;
+ r_uv[0] = dir[0] / fabsf(dir[1]) * (is_pos ? 1 : 1);
+ r_uv[1] = dir[2] / fabsf(dir[1]) * (is_pos ? -1 : 1);
+ }
+ else {
+ bool is_pos = (dir[2] > 0.0f);
+ *r_face = is_pos ? STUDIOLIGHT_Z_NEG : STUDIOLIGHT_Z_POS;
+ r_uv[0] = dir[0] / fabsf(dir[2]) * (is_pos ? -1 : 1);
+ r_uv[1] = dir[1] / fabsf(dir[2]) * (is_pos ? -1 : -1);
+ }
+ r_uv[0] = r_uv[0] * 0.5f + 0.5f;
+ r_uv[1] = r_uv[1] * 0.5f + 0.5f;
}
-static void studiolight_calculate_radiance_buffer(
- ImBuf *ibuf, float *colbuf,
- const float start_x, const float add_x,
- const float start_y, const float add_y, const float z,
- const int index_x, const int index_y, const int index_z)
+static void cube_face_uv_to_direction(float r_dir[3], float x, float y, int face)
{
- float direction[3];
- float yf = start_y;
- float xf;
- float *color = colbuf;
-
- for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++, yf += add_y) {
- xf = start_x;
- for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++, xf += add_x) {
- direction[index_x] = xf;
- direction[index_y] = yf;
- direction[index_z] = z;
- normalize_v3(direction);
- studiolight_calculate_radiance(ibuf, color, direction);
- color += 4;
- }
- }
+ const float conversion_matrices[6][3][3] = {
+ {{ 0.0f, 0.0f, 1.0f}, {0.0f, -1.0f, 0.0f}, { 1.0f, 0.0f, 0.0f}},
+ {{ 0.0f, 0.0f, -1.0f}, {0.0f, -1.0f, 0.0f}, {-1.0f, 0.0f, 0.0f}},
+ {{ 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, -1.0f}, { 0.0f, 1.0f, 0.0f}},
+ {{ 1.0f, 0.0f, 0.0f}, {0.0f, 0.0f, 1.0f}, { 0.0f, -1.0f, 0.0f}},
+ {{ 1.0f, 0.0f, 0.0f}, {0.0f, -1.0f, 0.0f}, { 0.0f, 0.0f, -1.0f}},
+ {{-1.0f, 0.0f, 0.0f}, {0.0f, -1.0f, 0.0f}, { 0.0f, 0.0f, 1.0f}}
+ };
+
+ copy_v3_fl3(r_dir, x * 2.0f - 1.0f, y * 2.0f - 1.0f, 1.0f);
+ mul_m3_v3(conversion_matrices[face], r_dir);
+ normalize_v3(r_dir);
}
-static void studiolight_load_equirectangular_image(StudioLight *sl)
+static void studiolight_load_equirect_image(StudioLight *sl)
{
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
ImBuf *ibuf = NULL;
@@ -217,98 +251,123 @@ static void studiolight_load_equirectangular_image(StudioLight *sl)
ibuf = IMB_allocFromBuffer(NULL, colbuf, 1, 1);
}
IMB_float_from_rect(ibuf);
- sl->equirectangular_radiance_buffer = ibuf;
+ sl->equirect_radiance_buffer = ibuf;
}
sl->flag |= STUDIOLIGHT_EXTERNAL_IMAGE_LOADED;
}
-static void studiolight_create_equirectangular_radiance_gputexture(StudioLight *sl)
+static void studiolight_create_equirect_radiance_gputexture(StudioLight *sl)
{
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
char error[256];
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED);
- ImBuf *ibuf = sl->equirectangular_radiance_buffer;
+ ImBuf *ibuf = sl->equirect_radiance_buffer;
if (sl->flag & STUDIOLIGHT_ORIENTATION_VIEWNORMAL) {
- sl->gpu_matcap_3components = MEM_callocN(sizeof(float[3]) * ibuf->x * ibuf->y, __func__);
-
- float *offset4 = ibuf->rect_float;
- float *offset3 = sl->gpu_matcap_3components;
- for (int i = 0; i < ibuf->x * ibuf->y; i++) {
- copy_v3_v3(offset3, offset4);
- offset3 += 3;
- offset4 += 4;
+ float *gpu_matcap_3components = MEM_callocN(sizeof(float[3]) * ibuf->x * ibuf->y, __func__);
+
+ float (*offset4)[4] = (float (*)[4])ibuf->rect_float;
+ float (*offset3)[3] = (float (*)[3])gpu_matcap_3components;
+ for (int i = 0; i < ibuf->x * ibuf->y; i++, offset4++, offset3++) {
+ copy_v3_v3(*offset3, *offset4);
}
- sl->equirectangular_radiance_gputexture = GPU_texture_create_nD(
- ibuf->x, ibuf->y, 0, 2, sl->gpu_matcap_3components, GPU_R11F_G11F_B10F, GPU_DATA_FLOAT, 0, false, error);
+
+ sl->equirect_radiance_gputexture = GPU_texture_create_nD(
+ ibuf->x, ibuf->y, 0, 2, gpu_matcap_3components, GPU_R11F_G11F_B10F, GPU_DATA_FLOAT, 0, false, error);
+
+ MEM_SAFE_FREE(gpu_matcap_3components);
}
else {
- sl->equirectangular_radiance_gputexture = GPU_texture_create_2D(
+ sl->equirect_radiance_gputexture = GPU_texture_create_2D(
ibuf->x, ibuf->y, GPU_RGBA16F, ibuf->rect_float, error);
- GPUTexture *tex = sl->equirectangular_radiance_gputexture;
+ GPUTexture *tex = sl->equirect_radiance_gputexture;
GPU_texture_bind(tex, 0);
GPU_texture_filter_mode(tex, true);
GPU_texture_wrap_mode(tex, true);
GPU_texture_unbind(tex);
}
}
- sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE;
+ sl->flag |= STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE;
}
-static void studiolight_create_equirectangular_irradiance_gputexture(StudioLight *sl)
+static void studiolight_create_equirect_irradiance_gputexture(StudioLight *sl)
{
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
char error[256];
- BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED);
- ImBuf *ibuf = sl->equirectangular_irradiance_buffer;
- sl->equirectangular_irradiance_gputexture = GPU_texture_create_2D(
+ BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED);
+ ImBuf *ibuf = sl->equirect_irradiance_buffer;
+ sl->equirect_irradiance_gputexture = GPU_texture_create_2D(
ibuf->x, ibuf->y, GPU_RGBA16F, ibuf->rect_float, error);
- GPUTexture *tex = sl->equirectangular_irradiance_gputexture;
+ GPUTexture *tex = sl->equirect_irradiance_gputexture;
GPU_texture_bind(tex, 0);
GPU_texture_filter_mode(tex, true);
GPU_texture_wrap_mode(tex, true);
GPU_texture_unbind(tex);
}
- sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE;
+ sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE;
+}
+
+static void studiolight_calculate_radiance(ImBuf *ibuf, float color[4], const float direction[3])
+{
+ float uv[2];
+ direction_to_equirect(uv, direction);
+ nearest_interpolation_color_wrap(ibuf, NULL, color, uv[0] * ibuf->x, uv[1] * ibuf->y);
+}
+
+static void studiolight_calculate_radiance_buffer(
+ ImBuf *ibuf, float *colbuf,
+ const int index_x, const int index_y, const int index_z,
+ const float xsign, const float ysign, const float zsign)
+{
+ ITER_PIXELS(float, colbuf, 4,
+ STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE,
+ STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE)
+ {
+ float direction[3];
+ direction[index_x] = xsign * (x - 0.5f);
+ direction[index_y] = ysign * (y - 0.5f);
+ direction[index_z] = zsign * 0.5f;
+ normalize_v3(direction);
+ studiolight_calculate_radiance(ibuf, pixel, direction);
+ }
+ ITER_PIXELS_END;
}
static void studiolight_calculate_radiance_cubemap_buffers(StudioLight *sl)
{
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED);
- ImBuf *ibuf = sl->equirectangular_radiance_buffer;
+ ImBuf *ibuf = sl->equirect_radiance_buffer;
if (ibuf) {
float *colbuf = MEM_mallocN(SQUARE(STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) * sizeof(float[4]), __func__);
- const float add = 1.0f / (STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE + 1);
- const float start = ((1.0f / STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) * 0.5f) - 0.5f;
/* front */
- studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, start, add, 0.5f, 0, 2, 1);
+ studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 2, 1, 1, -1, 1);
sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_POS] = IMB_allocFromBuffer(
NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
/* back */
- studiolight_calculate_radiance_buffer(ibuf, colbuf, -start, -add, start, add, -0.5f, 0, 2, 1);
+ studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 2, 1, 1, 1, -1);
sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_NEG] = IMB_allocFromBuffer(
NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
/* left */
- studiolight_calculate_radiance_buffer(ibuf, colbuf, -start, -add, start, add, 0.5f, 1, 2, 0);
+ studiolight_calculate_radiance_buffer(ibuf, colbuf, 2, 1, 0, 1, -1, 1);
sl->radiance_cubemap_buffers[STUDIOLIGHT_X_POS] = IMB_allocFromBuffer(
NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
/* right */
- studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, start, add, -0.5f, 1, 2, 0);
+ studiolight_calculate_radiance_buffer(ibuf, colbuf, 2, 1, 0, -1, -1, -1);
sl->radiance_cubemap_buffers[STUDIOLIGHT_X_NEG] = IMB_allocFromBuffer(
NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
/* top */
- studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, start, add, -0.5f, 0, 1, 2);
+ studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 1, 2, -1, -1, 1);
sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_NEG] = IMB_allocFromBuffer(
NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
/* bottom */
- studiolight_calculate_radiance_buffer(ibuf, colbuf, start, add, -start, -add, 0.5f, 0, 1, 2);
+ studiolight_calculate_radiance_buffer(ibuf, colbuf, 0, 1, 2, 1, -1, -1);
sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_POS] = IMB_allocFromBuffer(
NULL, colbuf, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
@@ -326,243 +385,131 @@ static void studiolight_calculate_radiance_cubemap_buffers(StudioLight *sl)
sl->flag |= STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED;
}
-BLI_INLINE void studiolight_evaluate_radiance_buffer(
- ImBuf *radiance_buffer, const float normal[3], float color[3], int *hits,
- int xoffset, int yoffset, int zoffset, float zvalue)
-{
- if (radiance_buffer == NULL) {
- return;
- }
- float angle;
- float *radiance_color = radiance_buffer->rect_float;
- float direction[3];
- for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++) {
- for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++) {
- // calculate light direction;
- direction[zoffset] = zvalue;
- direction[xoffset] = (x / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f;
- direction[yoffset] = (y / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f;
- normalize_v3(direction);
- angle = fmax(0.0f, dot_v3v3(direction, normal));
- madd_v3_v3fl(color, radiance_color, angle);
- (*hits)++;
- radiance_color += 4;
- }
- }
-
-}
-
/*
* Spherical Harmonics
*/
-BLI_INLINE float studiolight_area_element(float x, float y)
+BLI_INLINE float area_element(float x, float y)
{
return atan2(x * y, sqrtf(x * x + y * y + 1));
}
-BLI_INLINE float studiolight_texel_solid_angle(float x, float y, float halfpix)
+BLI_INLINE float texel_solid_angle(float x, float y, float halfpix)
{
float v1x = (x - halfpix) * 2.0f - 1.0f;
float v1y = (y - halfpix) * 2.0f - 1.0f;
float v2x = (x + halfpix) * 2.0f - 1.0f;
float v2y = (y + halfpix) * 2.0f - 1.0f;
- return studiolight_area_element(v1x, v1y) - studiolight_area_element(v1x, v2y) - studiolight_area_element(v2x, v1y) + studiolight_area_element(v2x, v2y);
+ return area_element(v1x, v1y) - area_element(v1x, v2y) - area_element(v2x, v1y) + area_element(v2x, v2y);
}
static void studiolight_calculate_cubemap_vector_weight(float normal[3], float *weight, int face, float x, float y)
{
- copy_v3_fl3(normal, x * 2.0f - 1.0f, y * 2.0f - 1.0f, 1.0f);
- const float conversion_matrices[6][3][3] = {
- {
- {0.0f, 0.0f, 1.0f},
- {0.0f, -1.0f, 0.0f},
- {1.0f, 0.0f, 0.0f},
- },
- {
- {0.0f, 0.0f, -1.0f},
- {0.0f, -1.0f, 0.0f},
- {-1.0f, 0.0f, 0.0f},
- },
- {
- {1.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, -1.0f},
- {0.0f, 1.0f, 0.0f},
- },
- {
- {1.0f, 0.0f, 0.0f},
- {0.0f, 0.0f, 1.0f},
- {0.0f, -1.0f, 0.0f},
- },
- {
- {1.0f, 0.0f, 0.0f},
- {0.0f, -1.0f, 0.0f},
- {0.0f, 0.0f, -1.0f},
- },
- {
- {-1.0f, 0.0f, 0.0f},
- {0.0f, -1.0f, 0.0f},
- {0.0f, 0.0f, 1.0f},
- }
- };
-
- mul_m3_v3(conversion_matrices[face], normal);
- normalize_v3(normal);
- const float halfpix = 1.0f / (2.0f * STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
- *weight = studiolight_texel_solid_angle(x + halfpix, y + halfpix, halfpix);
+ const float halfpix = 0.5f / STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE;
+ cube_face_uv_to_direction(normal, x, y, face);
+ *weight = texel_solid_angle(x, y, halfpix);
}
-static void studiolight_calculate_spherical_harmonics_coefficient(StudioLight *sl, int sh_component)
+static void studiolight_spherical_harmonics_calculate_coefficients(StudioLight *sl, float (*sh)[3])
{
- const float M_4PI = M_PI * 4.0f;
-
float weight_accum = 0.0f;
- float sh[3] = {0.0f, 0.0f, 0.0f};
+ memset(sh, 0, sizeof(float) * 3 * STUDIOLIGHT_SH_COEFS_LEN);
+
for (int face = 0; face < 6; face++) {
- float *color;
- color = sl->radiance_cubemap_buffers[face]->rect_float;
- for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++) {
- float yf = y / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE;
- for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++) {
- float xf = x / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE;
- float weight, coef;
- float cubevec[3];
- studiolight_calculate_cubemap_vector_weight(cubevec, &weight, face, xf, yf);
-
- const float nx = cubevec[0];
- const float ny = cubevec[1];
- const float nz = cubevec[2];
- const float nx2 = SQUARE(nx);
- const float ny2 = SQUARE(ny);
- const float nz2 = SQUARE(nz);
- const float nx4 = SQUARE(nx2);
- const float ny4 = SQUARE(ny2);
- const float nz4 = SQUARE(nz2);
-
- switch (sh_component) {
- /* L0 */
- case 0:
- coef = 0.2822095f;
- break;
- /* L1 */
- case 1:
- coef = -0.488603f * nz * 2.0f / 3.0f;
- break;
- case 2:
- coef = 0.488603f * ny * 2.0f / 3.0f;
- break;
- case 3:
- coef = -0.488603f * nx * 2.0f / 3.0f;
- break;
- /* L2 */
- case 4:
- coef = 1.092548f * nx * nz * 1.0f / 4.0f;
- break;
- case 5:
- coef = -1.092548f * nz * ny * 1.0f / 4.0f;
- break;
- case 6:
- coef = 0.315392f * (3.0f * ny2 - 1.0f) * 1.0f / 4.0f;
- break;
- case 7:
- coef = 1.092548f * nx * ny * 1.0f / 4.0f;
- break;
- case 8:
- coef = 0.546274f * (nx2 - nz2) * 1.0f / 4.0f;
- break;
- /* L4 */
- case 9:
- coef = (2.5033429417967046f * nx * nz * (nx2 - nz2)) / -24.0f;
- break;
- case 10:
- coef = (-1.7701307697799304f * nz * ny * (3.0f * nx2 - nz2)) / -24.0f;
- break;
- case 11:
- coef = (0.9461746957575601f * nz * nx * (-1.0f + 7.0f * ny2)) / -24.0f;
- break;
- case 12:
- coef = (-0.6690465435572892f * nz * ny * (-3.0f + 7.0f * ny2)) / -24.0f;
- break;
- case 13:
- coef = ((105.0f * ny4 - 90.0f * ny2 + 9.0f) / 28.359261614f) / -24.0f;
- break;
- case 14:
- coef = (-0.6690465435572892f * nx * ny * (-3.0f + 7.0f * ny2)) / -24.0f;
- break;
- case 15:
- coef = (0.9461746957575601f * (nx2 - nz2) * (-1.0f + 7.0f * ny2)) / -24.0f;
- break;
- case 16:
- coef = (-1.7701307697799304f * nx * ny * (nx2 - 3.0f * nz2)) / -24.0f;
- break;
- case 17:
- coef = (0.6258357354491761f * (nx4 - 6.0f * nz2 * nx2 + nz4)) / -24.0f;
- break;
- default:
- coef = 0.0f;
- }
-
- madd_v3_v3fl(sh, color, coef * weight);
- weight_accum += weight;
- color += 4;
- }
+ ITER_PIXELS(float, sl->radiance_cubemap_buffers[face]->rect_float, 4,
+ STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE,
+ STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE)
+ {
+ float color[3], cubevec[3], weight;
+ studiolight_calculate_cubemap_vector_weight(cubevec, &weight, face, x, y);
+ mul_v3_v3fl(color, pixel, weight);
+ weight_accum += weight;
+
+ int i = 0;
+ /* L0 */
+ madd_v3_v3fl(sh[i++], color, 0.2822095f);
+#if STUDIOLIGHT_SH_BANDS > 1 /* L1 */
+ const float nx = cubevec[0];
+ const float ny = cubevec[1];
+ const float nz = cubevec[2];
+ madd_v3_v3fl(sh[i++], color, -0.488603f * nz);
+ madd_v3_v3fl(sh[i++], color, 0.488603f * ny);
+ madd_v3_v3fl(sh[i++], color, -0.488603f * nx);
+#endif
+#if STUDIOLIGHT_SH_BANDS > 2 /* L2 */
+ const float nx2 = SQUARE(nx);
+ const float ny2 = SQUARE(ny);
+ const float nz2 = SQUARE(nz);
+ madd_v3_v3fl(sh[i++], color, 1.092548f * nx * nz);
+ madd_v3_v3fl(sh[i++], color, -1.092548f * nz * ny);
+ madd_v3_v3fl(sh[i++], color, 0.315392f * (3.0f * ny2 - 1.0f));
+ madd_v3_v3fl(sh[i++], color, 1.092548f * nx * ny);
+ madd_v3_v3fl(sh[i++], color, 0.546274f * (nx2 - nz2));
+#endif
+ /* Bypass L3 Because final irradiance does not need it. */
+#if STUDIOLIGHT_SH_BANDS > 4 /* L4 */
+ const float nx4 = SQUARE(nx2);
+ const float ny4 = SQUARE(ny2);
+ const float nz4 = SQUARE(nz2);
+ madd_v3_v3fl(sh[i++], color, 2.5033429417967046f * nx * nz * (nx2 - nz2));
+ madd_v3_v3fl(sh[i++], color, -1.7701307697799304f * nz * ny * (3.0f * nx2 - nz2));
+ madd_v3_v3fl(sh[i++], color, 0.9461746957575601f * nz * nx * (-1.0f + 7.0f * ny2));
+ madd_v3_v3fl(sh[i++], color, -0.6690465435572892f * nz * ny * (-3.0f + 7.0f * ny2));
+ madd_v3_v3fl(sh[i++], color, (105.0f * ny4 - 90.0f * ny2 + 9.0f) / 28.359261614f);
+ madd_v3_v3fl(sh[i++], color, -0.6690465435572892f * nx * ny * (-3.0f + 7.0f * ny2));
+ madd_v3_v3fl(sh[i++], color, 0.9461746957575601f * (nx2 - nz2) * (-1.0f + 7.0f * ny2));
+ madd_v3_v3fl(sh[i++], color, -1.7701307697799304f * nx * ny * (nx2 - 3.0f * nz2));
+ madd_v3_v3fl(sh[i++], color, 0.6258357354491761f * (nx4 - 6.0f * nz2 * nx2 + nz4));
+#endif
}
+ ITER_PIXELS_END;
}
- mul_v3_fl(sh, M_4PI / weight_accum);
- copy_v3_v3(sl->spherical_harmonics_coefs[sh_component], sh);
-}
-
-#ifdef STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING
-static void studiolight_calculate_spherical_harmonics_luminance(StudioLight *sl, float luminance[STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS])
-{
- for (int index = 0; index < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; index++) {
- luminance[index] = rgb_to_grayscale(sl->spherical_harmonics_coefs[index]);
+ /* The sum of solid angle should be equal to the solid angle of the sphere (4 PI),
+ * so normalize in order to make our weightAccum exactly match 4 PI. */
+ for (int i = 0; i < STUDIOLIGHT_SH_COEFS_LEN; ++i) {
+ mul_v3_fl(sh[i], M_PI * 4.0f / weight_accum);
}
}
-static void studiolight_apply_spherical_harmonics_windowing(StudioLight *sl, float max_lamplacian)
+/* Take monochrome SH as input */
+static float studiolight_spherical_harmonics_lambda_get(float *sh, float max_laplacian)
{
/* From Peter-Pike Sloan's Stupid SH Tricks http://www.ppsloan.org/publications/StupidSH36.pdf */
- float table_l[STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL + 1];
- float table_b[STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL + 1];
+ float table_l[STUDIOLIGHT_SH_BANDS];
+ float table_b[STUDIOLIGHT_SH_BANDS];
+
+ float lambda = 0.0f;
table_l[0] = 0.0f;
table_b[0] = 0.0f;
-
- /* convert to luminance */
- float luminance[STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS];
- studiolight_calculate_spherical_harmonics_luminance(sl, luminance);
-
int index = 1;
- for (int level = 1; level <= STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; level++) {
+ for (int level = 1; level < STUDIOLIGHT_SH_BANDS; level++) {
table_l[level] = (float)(SQUARE(level) * SQUARE(level + 1));
float b = 0.0f;
for (int m = -1; m <= level; m++) {
- b += SQUARE(luminance[index++]);
+ b += SQUARE(sh[index++]);
}
table_b[level] = b;
}
float squared_lamplacian = 0.0f;
- for (int level = 1; level <= STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; level++) {
+ for (int level = 1; level < STUDIOLIGHT_SH_BANDS; level++) {
squared_lamplacian += table_l[level] * table_b[level];
}
- const float target_squared_laplacian = max_lamplacian * max_lamplacian;
+ const float target_squared_laplacian = max_laplacian * max_laplacian;
if (squared_lamplacian <= target_squared_laplacian) {
- return;
+ return lambda;
}
- float lambda = 0.0f;
-
const int no_iterations = 10000000;
for (int i = 0; i < no_iterations; ++i) {
float f = 0.0f;
float fd = 0.0f;
- for (int level = 1; level <= (int)STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; ++level) {
+ for (int level = 1; level < STUDIOLIGHT_SH_BANDS; ++level) {
f += table_l[level] * table_b[level] / SQUARE(1.0f + lambda * table_l[level]);
fd += (2.0f * SQUARE(table_l[level]) * table_b[level]) / CUBE(1.0f + lambda * table_l[level]);
}
@@ -577,36 +524,79 @@ static void studiolight_apply_spherical_harmonics_windowing(StudioLight *sl, flo
}
}
+ return lambda;
+}
+
+static void studiolight_spherical_harmonics_apply_windowing(float (*sh)[3], float max_laplacian)
+{
+ if (max_laplacian <= 0.0f)
+ return;
+
+ float sh_r[STUDIOLIGHT_SH_COEFS_LEN];
+ float sh_g[STUDIOLIGHT_SH_COEFS_LEN];
+ float sh_b[STUDIOLIGHT_SH_COEFS_LEN];
+ for (int i = 0; i < STUDIOLIGHT_SH_COEFS_LEN; i++) {
+ sh_r[i] = sh[i][0];
+ sh_g[i] = sh[i][1];
+ sh_b[i] = sh[i][2];
+ }
+ float lambda_r = studiolight_spherical_harmonics_lambda_get(sh_r, max_laplacian);
+ float lambda_g = studiolight_spherical_harmonics_lambda_get(sh_g, max_laplacian);
+ float lambda_b = studiolight_spherical_harmonics_lambda_get(sh_b, max_laplacian);
+
/* Apply windowing lambda */
- index = 0;
- for (int level = 0; level <= STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL; level++) {
- float s = 1.0f / (1.0f + lambda * SQUARE(level) * SQUARE(level + 1.0f));
+ int index = 0;
+ for (int level = 0; level < STUDIOLIGHT_SH_BANDS; level++) {
+ float s[3];
+ s[0] = 1.0f / (1.0f + lambda_r * SQUARE(level) * SQUARE(level + 1.0f));
+ s[1] = 1.0f / (1.0f + lambda_g * SQUARE(level) * SQUARE(level + 1.0f));
+ s[2] = 1.0f / (1.0f + lambda_b * SQUARE(level) * SQUARE(level + 1.0f));
for (int m = -1; m <= level; m++) {
- mul_v3_fl(sl->spherical_harmonics_coefs[index++], s);
+ mul_v3_v3(sh[index++], s);
}
}
}
-#endif
-BLI_INLINE void studiolight_sample_spherical_harmonics(StudioLight *sl, float color[3], float normal[3])
+static float studiolight_spherical_harmonics_geomerics_eval(const float normal[3], float sh0, float sh1, float sh2, float sh3)
+{
+ /* Use Geomerics non-linear SH. */
+ /* http://www.geomerics.com/wp-content/uploads/2015/08/CEDEC_Geomerics_ReconstructingDiffuseLighting1.pdf */
+ float R0 = sh0 * M_1_PI;
+
+ float R1[3] = {-sh3, sh2, -sh1};
+ mul_v3_fl(R1, 0.5f * M_1_PI * 1.5f); /* 1.5f is to improve the contrast a bit. */
+ float lenR1 = len_v3(R1);
+ mul_v3_fl(R1, 1.0f / lenR1);
+ float q = 0.5f * (1.0f + dot_v3v3(R1, normal));
+
+ float p = 1.0f + 2.0f * lenR1 / R0;
+ float a = (1.0f - lenR1 / R0) / (1.0f + lenR1 / R0);
+
+ return R0 * (a + (1.0f - a) * (p + 1.0f) * powf(q, p));
+}
+
+BLI_INLINE void studiolight_spherical_harmonics_eval(StudioLight *sl, float color[3], const float normal[3])
{
+#if STUDIOLIGHT_SH_BANDS == 2
+ float (*sh)[3] = (float (*)[3])sl->spherical_harmonics_coefs;
+ for (int i = 0; i < 3; ++i) {
+ color[i] = studiolight_spherical_harmonics_geomerics_eval(normal, sh[0][i], sh[1][i], sh[2][i], sh[3][i]);
+ }
+ return;
+#else
+
+ /* L0 */
+ mul_v3_v3fl(color, sl->spherical_harmonics_coefs[0], 0.282095f);
+# if STUDIOLIGHT_SH_BANDS > 1 /* L1 */
const float nx = normal[0];
const float ny = normal[1];
const float nz = normal[2];
-
- copy_v3_fl(color, 0.0f);
- madd_v3_v3fl(color, sl->spherical_harmonics_coefs[0], 0.282095f);
-
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 0
- /* Spherical Harmonics L1 */
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[1], -0.488603f * nz);
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[2], 0.488603f * ny);
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[3], -0.488603f * nx);
-#endif
-
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 1
- /* Spherical Harmonics L2 */
+# endif
+# if STUDIOLIGHT_SH_BANDS > 2 /* L2 */
const float nx2 = SQUARE(nx);
const float ny2 = SQUARE(ny);
const float nz2 = SQUARE(nz);
@@ -615,10 +605,9 @@ BLI_INLINE void studiolight_sample_spherical_harmonics(StudioLight *sl, float co
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[6], 0.315392f * (3.0f * ny2 - 1.0f));
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[7], -1.092548 * nx * ny);
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[8], 0.546274 * (nx2 - nz2));
-#endif
-
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 3
- /* Spherical Harmonics L4 */
+# endif
+ /* L3 coefs are 0 */
+# if STUDIOLIGHT_SH_BANDS > 4 /* L4 */
const float nx4 = SQUARE(nx2);
const float ny4 = SQUARE(ny2);
const float nz4 = SQUARE(nz2);
@@ -631,8 +620,31 @@ BLI_INLINE void studiolight_sample_spherical_harmonics(StudioLight *sl, float co
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[15], 0.9461746957575601f * (nx2 - nz2) * (-1.0f + 7.0f * ny2));
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[16], -1.7701307697799304f * nx * ny * (nx2 - 3.0f * nz2));
madd_v3_v3fl(color, sl->spherical_harmonics_coefs[17], 0.6258357354491761f * (nx4 - 6.0f * nz2 * nx2 + nz4));
+# endif
#endif
+}
+/* This modify the radiance into irradiance. */
+static void studiolight_spherical_harmonics_apply_band_factors(StudioLight *sl, float (*sh)[3])
+{
+ static float sl_sh_band_factors[5] = {
+ 1.0f,
+ 2.0f / 3.0f,
+ 1.0f / 4.0f,
+ 0.0f,
+ -1.0f / 24.0f
+ };
+
+ int index = 0, dst_idx = 0;
+ for (int band = 0; band < STUDIOLIGHT_SH_BANDS; band++) {
+ for (int m = 0; m < SQUARE(band + 1) - SQUARE(band); m++) {
+ /* Skip L3 */
+ if (band != 3) {
+ mul_v3_v3fl(sl->spherical_harmonics_coefs[dst_idx++], sh[index], sl_sh_band_factors[band]);
+ }
+ index++;
+ }
+ }
}
static void studiolight_calculate_diffuse_light(StudioLight *sl)
@@ -641,13 +653,10 @@ static void studiolight_calculate_diffuse_light(StudioLight *sl)
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED);
- for (int comp = 0; comp < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; comp++) {
- studiolight_calculate_spherical_harmonics_coefficient(sl, comp);
- }
-
-#ifdef STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING
- studiolight_apply_spherical_harmonics_windowing(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_WINDOWING_TARGET_LAMPLACIAN);
-#endif
+ float sh_coefs[STUDIOLIGHT_SH_COEFS_LEN][3];
+ studiolight_spherical_harmonics_calculate_coefficients(sl, sh_coefs);
+ studiolight_spherical_harmonics_apply_windowing(sh_coefs, STUDIOLIGHT_SH_WINDOWING);
+ studiolight_spherical_harmonics_apply_band_factors(sl, sh_coefs);
if (sl->flag & STUDIOLIGHT_USER_DEFINED) {
FILE *fp = BLI_fopen(sl->path_sh_cache, "wb");
@@ -660,81 +669,70 @@ static void studiolight_calculate_diffuse_light(StudioLight *sl)
sl->flag |= STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED;
}
-static float texel_coord_solid_angle(float a_U, float a_V, int a_Size)
-{
- //scale up to [-1, 1] range (inclusive), offset by 0.5 to point to texel center.
- float u = (2.0f * ((float)a_U + 0.5f) / (float)a_Size) - 1.0f;
- float v = (2.0f * ((float)a_V + 0.5f) / (float)a_Size) - 1.0f;
-
- float resolution_inv = 1.0f / a_Size;
-
- // U and V are the -1..1 texture coordinate on the current face.
- // Get projected area for this texel
- float x0 = u - resolution_inv;
- float y0 = v - resolution_inv;
- float x1 = u + resolution_inv;
- float y1 = v + resolution_inv;
- return studiolight_area_element(x0, y0) - studiolight_area_element(x0, y1) - studiolight_area_element(x1, y0) + studiolight_area_element(x1, y1);
-}
-
BLI_INLINE void studiolight_evaluate_specular_radiance_buffer(
ImBuf *radiance_buffer, const float normal[3], float color[3],
- int xoffset, int yoffset, int zoffset, float zvalue)
+ int xoffset, int yoffset, int zoffset, float zsign)
{
if (radiance_buffer == NULL) {
return;
}
- float angle;
- float *radiance_color = radiance_buffer->rect_float;
- float direction[3];
- for (int y = 0; y < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; y++) {
- for (int x = 0; x < STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE; x++) {
- // calculate light direction;
- float u = (x / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f;
- float v = (y / (float)STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE) - 0.5f;
- direction[zoffset] = zvalue;
- direction[xoffset] = u;
- direction[yoffset] = v;
- normalize_v3(direction);
- angle = fmax(0.0f, dot_v3v3(direction, normal)) * texel_coord_solid_angle(x, y, STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE);
- madd_v3_v3fl(color, radiance_color, angle);
- radiance_color += 4;
- }
+
+ float accum[3] = {0.0f, 0.0f, 0.0f};
+ float accum_weight = 0.00001f;
+ ITER_PIXELS(float, radiance_buffer->rect_float, 4,
+ STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE,
+ STUDIOLIGHT_RADIANCE_CUBEMAP_SIZE)
+ {
+ float direction[3];
+ direction[zoffset] = zsign * 0.5f;
+ direction[xoffset] = x - 0.5f;
+ direction[yoffset] = y - 0.5f;
+ normalize_v3(direction);
+ float weight = dot_v3v3(direction, normal) > 0.95f ? 1.0f : 0.0f;
+ // float solid_angle = texel_solid_angle(x, y, texel_size[0] * 0.5f);
+ madd_v3_v3fl(accum, pixel, weight);
+ accum_weight += weight;
}
+ ITER_PIXELS_END;
+ madd_v3_v3fl(color, accum, 1.0f / accum_weight);
}
-#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
-static void studiolight_calculate_specular_irradiance(StudioLight *sl, float color[3], const float normal[3])
+#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
+static void studiolight_irradiance_eval(StudioLight *sl, float color[3], const float normal[3])
{
copy_v3_fl(color, 0.0f);
+ /* XXX: This is madness, iterating over all cubemap pixels for each destination pixels
+ * even if their weight is 0.0f.
+ * It should use hemisphere, cosine sampling at least. */
+
/* back */
studiolight_evaluate_specular_radiance_buffer(
- sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_POS], normal, color, 0, 2, 1, 0.5);
+ sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_POS], normal, color, 0, 2, 1, 1);
/* front */
studiolight_evaluate_specular_radiance_buffer(
- sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_NEG], normal, color, 0, 2, 1, -0.5);
+ sl->radiance_cubemap_buffers[STUDIOLIGHT_Y_NEG], normal, color, 0, 2, 1, -1);
/* left */
studiolight_evaluate_specular_radiance_buffer(
- sl->radiance_cubemap_buffers[STUDIOLIGHT_X_POS], normal, color, 1, 2, 0, 0.5);
+ sl->radiance_cubemap_buffers[STUDIOLIGHT_X_POS], normal, color, 1, 2, 0, 1);
/* right */
studiolight_evaluate_specular_radiance_buffer(
- sl->radiance_cubemap_buffers[STUDIOLIGHT_X_NEG], normal, color, 1, 2, 0, -0.5);
+ sl->radiance_cubemap_buffers[STUDIOLIGHT_X_NEG], normal, color, 1, 2, 0, -1);
/* top */
studiolight_evaluate_specular_radiance_buffer(
- sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_POS], normal, color, 0, 1, 2, 0.5);
+ sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_POS], normal, color, 0, 1, 2, 1);
/* bottom */
studiolight_evaluate_specular_radiance_buffer(
- sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_NEG], normal, color, 0, 1, 2, -0.5);
+ sl->radiance_cubemap_buffers[STUDIOLIGHT_Z_NEG], normal, color, 0, 1, 2, -1);
mul_v3_fl(color, 1.0 / M_PI);
}
#endif
-static bool studiolight_load_irradiance_equirectangular_image(StudioLight *sl)
+static bool studiolight_load_irradiance_equirect_image(StudioLight *sl)
{
#ifdef STUDIOLIGHT_LOAD_CACHED_FILES
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
@@ -742,11 +740,13 @@ static bool studiolight_load_irradiance_equirectangular_image(StudioLight *sl)
ibuf = IMB_loadiffname(sl->path_irr_cache, 0, NULL);
if (ibuf) {
IMB_float_from_rect(ibuf);
- sl->equirectangular_irradiance_buffer = ibuf;
- sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED;
+ sl->equirect_irradiance_buffer = ibuf;
+ sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED;
return true;
}
}
+#else
+ UNUSED_VARS(sl);
#endif
return false;
}
@@ -765,92 +765,54 @@ static bool studiolight_load_spherical_harmonics_coefficients(StudioLight *sl)
fclose(fp);
}
}
+#else
+ UNUSED_VARS(sl);
#endif
return false;
}
-static void studiolight_calculate_irradiance_equirectangular_image(StudioLight *sl)
+static void studiolight_calculate_irradiance_equirect_image(StudioLight *sl)
{
if (sl->flag & STUDIOLIGHT_EXTERNAL_FILE) {
-#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
+#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED);
-#endif
-#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS
+#else
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED);
#endif
- float *colbuf = MEM_mallocN(STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH * STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT * sizeof(float[4]), __func__);
- float *color = colbuf;
- for (int y = 0; y < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT; y++) {
- float yf = y / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT;
-
- for (int x = 0; x < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH; x++) {
- float xf = x / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH;
- float dir[3];
- equirectangular_to_direction(dir, xf, yf);
+ float *colbuf = MEM_mallocN(STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH * STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT * sizeof(float[4]), __func__);
-#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
- studiolight_calculate_specular_irradiance(sl, color, dir);
-#endif
-#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_SPHERICAL_HARMONICS
- studiolight_sample_spherical_harmonics(sl, color, dir);
+ ITER_PIXELS(float, colbuf, 4,
+ STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH,
+ STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT)
+ {
+ float dir[3];
+ equirect_to_direction(dir, x, y);
+#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
+ studiolight_irradiance_eval(sl, pixel, dir);
+#else
+ studiolight_spherical_harmonics_eval(sl, pixel, dir);
#endif
-
- color[3] = 1.0f;
- color += 4;
- }
+ pixel[3] = 1.0f;
}
+ ITER_PIXELS_END;
- sl->equirectangular_irradiance_buffer = IMB_allocFromBuffer(
+ sl->equirect_irradiance_buffer = IMB_allocFromBuffer(
NULL, colbuf,
- STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH,
- STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT);
+ STUDIOLIGHT_IRRADIANCE_EQUIRECT_WIDTH,
+ STUDIOLIGHT_IRRADIANCE_EQUIRECT_HEIGHT);
MEM_freeN(colbuf);
-#if STUDIOLIGHT_IRRADIANCE_METHOD == STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
+#ifdef STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
/*
* Only store cached files when using STUDIOLIGHT_IRRADIANCE_METHOD_RADIANCE
*/
if (sl->flag & STUDIOLIGHT_USER_DEFINED) {
- IMB_saveiff(sl->equirectangular_irradiance_buffer, sl->path_irr_cache, IB_rectfloat);
+ IMB_saveiff(sl->equirect_irradiance_buffer, sl->path_irr_cache, IB_rectfloat);
}
#endif
}
- sl->flag |= STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED;
-}
-
-static void studiolight_calculate_light_direction(StudioLight *sl)
-{
- float best_light = 0.0;
- sl->light_direction[0] = 0.0f;
- sl->light_direction[1] = 0.0f;
- sl->light_direction[2] = -1.0f;
-
- if ((sl->flag & STUDIOLIGHT_EXTERNAL_FILE) && (sl->flag & STUDIOLIGHT_ORIENTATION_WORLD)) {
- BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED);
- ImBuf *ibuf = sl->equirectangular_irradiance_buffer;
- if (ibuf) {
- /* go over every pixel, determine light, if higher calc direction off the light */
- float new_light;
- float *color = ibuf->rect_float;
- for (int y = 0; y < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT; y++) {
- for (int x = 0; x < STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH; x++) {
- new_light = color[0] + color[1] + color[2];
- if (new_light > best_light) {
- float u = x / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_WIDTH;
- float v = y / (float)STUDIOLIGHT_IRRADIANCE_EQUIRECTANGULAR_HEIGHT;
- equirectangular_to_direction(sl->light_direction, u, v);
- SWAP(float, sl->light_direction[0], sl->light_direction[1]);
- normalize_v3(sl->light_direction);
- negate_v3(sl->light_direction);
- best_light = new_light;
- }
- color += 4;
- }
- }
- }
- }
- sl->flag |= STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED;
+ sl->flag |= STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED;
}
static StudioLight *studiolight_add_file(const char *path, int flag)
@@ -929,119 +891,115 @@ static uint alpha_circle_mask(float u, float v, float inner_edge, float outer_ed
return mask << 24;
}
+/* Percentage of the icon that the preview sphere covers. */
#define STUDIOLIGHT_DIAMETER 0.95f
+/* Rescale coord around (0.5, 0.5) by STUDIOLIGHT_DIAMETER. */
+#define RESCALE_COORD(x) (x / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f)
+
+/* Remaps normalized UV [0..1] to a sphere normal around (0.5, 0.5) */
+static void sphere_normal_from_uv(float normal[3], float u, float v)
+{
+ normal[0] = u * 2.0f - 1.0f;
+ normal[1] = v * 2.0f - 1.0f;
+ float dist = len_v2(normal);
+ normal[2] = sqrtf(1.0f - SQUARE(dist));
+}
static void studiolight_radiance_preview(uint *icon_buffer, StudioLight *sl)
{
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED);
- float pixel_size = 1.0f / (float)STUDIOLIGHT_ICON_SIZE;
-
- int offset = 0;
- for (int y = 0; y < STUDIOLIGHT_ICON_SIZE; y++) {
- float dy = (y + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE;
- dy = dy / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f;
- for (int x = 0; x < STUDIOLIGHT_ICON_SIZE; x++) {
- float dx = (x + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE;
- dx = dx / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f;
-
- uint pixelresult = 0x0;
- uint alphamask = alpha_circle_mask(dx, dy, 0.5f - pixel_size, 0.5f);
- if (alphamask != 0) {
- float incoming[3] = {0.0f, 0.0f, -1.0f};
-
- float normal[3];
- normal[0] = dx * 2.0f - 1.0f;
- normal[1] = dy * 2.0f - 1.0f;
- float dist = len_v2(normal);
- normal[2] = sqrtf(1.0f - SQUARE(dist));
-
- float direction[3];
- reflect_v3_v3v3(direction, incoming, normal);
-
- /* We want to see horizon not poles. */
- SWAP(float, direction[1], direction[2]);
- direction[1] = -direction[1];
-
- float color[4];
- studiolight_calculate_radiance(sl->equirectangular_radiance_buffer, color, direction);
-
- pixelresult = rgb_to_cpack(
- linearrgb_to_srgb(color[0]),
- linearrgb_to_srgb(color[1]),
- linearrgb_to_srgb(color[2])) | alphamask;
- }
- icon_buffer[offset++] = pixelresult;
+ ITER_PIXELS(uint, icon_buffer, 1,
+ STUDIOLIGHT_ICON_SIZE,
+ STUDIOLIGHT_ICON_SIZE)
+ {
+ float dy = RESCALE_COORD(y);
+ float dx = RESCALE_COORD(x);
+
+ uint alphamask = alpha_circle_mask(dx, dy, 0.5f - texel_size[0], 0.5f);
+ if (alphamask != 0) {
+ float normal[3], direction[3], color[4];
+ float incoming[3] = {0.0f, 0.0f, -1.0f};
+ sphere_normal_from_uv(normal, dx, dy);
+ reflect_v3_v3v3(direction, incoming, normal);
+ /* We want to see horizon not poles. */
+ SWAP(float, direction[1], direction[2]);
+ direction[1] = -direction[1];
+
+ studiolight_calculate_radiance(sl->equirect_radiance_buffer, color, direction);
+
+ *pixel = rgb_to_cpack(
+ linearrgb_to_srgb(color[0]),
+ linearrgb_to_srgb(color[1]),
+ linearrgb_to_srgb(color[2])) | alphamask;
+ }
+ else {
+ *pixel = 0x0;
}
}
+ ITER_PIXELS_END;
}
static void studiolight_matcap_preview(uint *icon_buffer, StudioLight *sl, bool flipped)
{
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EXTERNAL_IMAGE_LOADED);
- float color[4];
- float fx, fy;
- float pixel_size = 1.0f / (float)STUDIOLIGHT_ICON_SIZE;
- int offset = 0;
- ImBuf *ibuf = sl->equirectangular_radiance_buffer;
-
- for (int y = 0; y < STUDIOLIGHT_ICON_SIZE; y++) {
- fy = (y + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE;
- fy = fy / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f;
- for (int x = 0; x < STUDIOLIGHT_ICON_SIZE; x++) {
- fx = (x + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE;
- fx = fx / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f;
- if (flipped) {
- fx = 1.0f - fx;
- }
- nearest_interpolation_color(ibuf, NULL, color, fx * ibuf->x - 1.0f, fy * ibuf->y - 1.0f);
+ ImBuf *ibuf = sl->equirect_radiance_buffer;
- uint alphamask = alpha_circle_mask(fx, fy, 0.5f - pixel_size, 0.5f);
-
- icon_buffer[offset++] = rgb_to_cpack(
- linearrgb_to_srgb(color[0]),
- linearrgb_to_srgb(color[1]),
- linearrgb_to_srgb(color[2])) | alphamask;
+ ITER_PIXELS(uint, icon_buffer, 1,
+ STUDIOLIGHT_ICON_SIZE,
+ STUDIOLIGHT_ICON_SIZE)
+ {
+ float dy = RESCALE_COORD(y);
+ float dx = RESCALE_COORD(x);
+ if (flipped) {
+ dx = 1.0f - dx;
}
+
+ float color[4];
+ nearest_interpolation_color(ibuf, NULL, color, dx * ibuf->x - 1.0f, dy * ibuf->y - 1.0f);
+
+ uint alphamask = alpha_circle_mask(dx, dy, 0.5f - texel_size[0], 0.5f);
+
+ *pixel = rgb_to_cpack(
+ linearrgb_to_srgb(color[0]),
+ linearrgb_to_srgb(color[1]),
+ linearrgb_to_srgb(color[2])) | alphamask;
}
+ ITER_PIXELS_END;
}
static void studiolight_irradiance_preview(uint *icon_buffer, StudioLight *sl)
{
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED);
- float pixel_size = 1.0f / (float)STUDIOLIGHT_ICON_SIZE;
-
- int offset = 0;
- for (int y = 0; y < STUDIOLIGHT_ICON_SIZE; y++) {
- float dy = (y + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE;
- dy = dy / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f;
- for (int x = 0; x < STUDIOLIGHT_ICON_SIZE; x++) {
- float dx = (x + 0.5f) / (float)STUDIOLIGHT_ICON_SIZE;
- dx = dx / STUDIOLIGHT_DIAMETER - (1.0f - STUDIOLIGHT_DIAMETER) / 2.0f;
-
- uint pixelresult = 0x0;
- uint alphamask = alpha_circle_mask(dx, dy, 0.5f - pixel_size, 0.5f);
- if (alphamask != 0) {
- /* calculate normal */
- float normal[3];
- normal[0] = dx * 2.0f - 1.0f;
- normal[1] = -(dy * 2.0f - 1.0f);
- float dist = len_v2(normal);
- normal[2] = -sqrtf(1.0f - SQUARE(dist));
- SWAP(float, normal[1], normal[2]);
-
- float color[3];
- studiolight_sample_spherical_harmonics(sl, color, normal);
- pixelresult = rgb_to_cpack(
- linearrgb_to_srgb(color[0]),
- linearrgb_to_srgb(color[1]),
- linearrgb_to_srgb(color[2])) | alphamask;
- }
- icon_buffer[offset++] = pixelresult;
+ ITER_PIXELS(uint, icon_buffer, 1,
+ STUDIOLIGHT_ICON_SIZE,
+ STUDIOLIGHT_ICON_SIZE)
+ {
+ float dy = RESCALE_COORD(y);
+ float dx = RESCALE_COORD(x);
+
+ uint alphamask = alpha_circle_mask(dx, dy, 0.5f - texel_size[0], 0.5f);
+ if (alphamask != 0) {
+ float normal[3], color[3];
+ sphere_normal_from_uv(normal, dx, dy);
+ /* We want to see horizon not poles. */
+ SWAP(float, normal[1], normal[2]);
+ normal[1] = -normal[1];
+
+ studiolight_spherical_harmonics_eval(sl, color, normal);
+
+ *pixel = rgb_to_cpack(
+ linearrgb_to_srgb(color[0]),
+ linearrgb_to_srgb(color[1]),
+ linearrgb_to_srgb(color[2])) | alphamask;
+ }
+ else {
+ *pixel = 0x0;
}
}
+ ITER_PIXELS_END;
}
/* API */
@@ -1055,19 +1013,19 @@ void BKE_studiolight_init(void)
sl = studiolight_create(STUDIOLIGHT_INTERNAL | STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED | STUDIOLIGHT_ORIENTATION_CAMERA);
BLI_strncpy(sl->name, "Default", FILE_MAXFILE);
-
- copy_v3_fl3(sl->spherical_harmonics_coefs[0], 1.03271556f, 1.07163882f, 1.11193657f);
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 0
- copy_v3_fl3(sl->spherical_harmonics_coefs[1], -0.00480952f, 0.05290511f, 0.16394117f);
- copy_v3_fl3(sl->spherical_harmonics_coefs[2], -0.29686999f, -0.27378261f, -0.24797194f);
- copy_v3_fl3(sl->spherical_harmonics_coefs[3], 0.47932500f, 0.48242140f, 0.47190312f);
+ int i = 0;
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 1.03271556f, 1.07163882f, 1.11193657f);
+#if STUDIOLIGHT_SH_BANDS > 1
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.00480952f, 0.05290511f, 0.16394117f);
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.29686999f, -0.27378261f, -0.24797194f);
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.47932500f, 0.48242140f, 0.47190312f);
#endif
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 1
- copy_v3_fl3(sl->spherical_harmonics_coefs[4], -0.00576984f, 0.00504886f, 0.01640534f);
- copy_v3_fl3(sl->spherical_harmonics_coefs[5], 0.15500379f, 0.15415503f, 0.16244425f);
- copy_v3_fl3(sl->spherical_harmonics_coefs[6], -0.02483751f, -0.02245096f, -0.00536885f);
- copy_v3_fl3(sl->spherical_harmonics_coefs[7], 0.11155496f, 0.11005443f, 0.10839636f);
- copy_v3_fl3(sl->spherical_harmonics_coefs[8], 0.01363425f, 0.01278363f, -0.00159006f);
+#if STUDIOLIGHT_SH_BANDS > 2
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.00576984f, 0.00504886f, 0.01640534f);
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.15500379f, 0.15415503f, 0.16244425f);
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], -0.02483751f, -0.02245096f, -0.00536885f);
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.11155496f, 0.11005443f, 0.10839636f);
+ copy_v3_fl3(sl->spherical_harmonics_coefs[i++], 0.01363425f, 0.01278363f, -0.00159006f);
#endif
BLI_addtail(&studiolights, sl);
@@ -1169,7 +1127,7 @@ void BKE_studiolight_ensure_flag(StudioLight *sl, int flag)
}
if ((flag & STUDIOLIGHT_EXTERNAL_IMAGE_LOADED)) {
- studiolight_load_equirectangular_image(sl);
+ studiolight_load_equirect_image(sl);
}
if ((flag & STUDIOLIGHT_RADIANCE_BUFFERS_CALCULATED)) {
studiolight_calculate_radiance_cubemap_buffers(sl);
@@ -1179,18 +1137,15 @@ void BKE_studiolight_ensure_flag(StudioLight *sl, int flag)
studiolight_calculate_diffuse_light(sl);
}
}
- if ((flag & STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE)) {
- studiolight_create_equirectangular_radiance_gputexture(sl);
- }
- if ((flag & STUDIOLIGHT_LIGHT_DIRECTION_CALCULATED)) {
- studiolight_calculate_light_direction(sl);
+ if ((flag & STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE)) {
+ studiolight_create_equirect_radiance_gputexture(sl);
}
- if ((flag & STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE)) {
- studiolight_create_equirectangular_irradiance_gputexture(sl);
+ if ((flag & STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE)) {
+ studiolight_create_equirect_irradiance_gputexture(sl);
}
- if ((flag & STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_IMAGE_CALCULATED)) {
- if (!studiolight_load_irradiance_equirectangular_image(sl)) {
- studiolight_calculate_irradiance_equirectangular_image(sl);
+ if ((flag & STUDIOLIGHT_EQUIRECT_IRRADIANCE_IMAGE_CALCULATED)) {
+ if (!studiolight_load_irradiance_equirect_image(sl)) {
+ studiolight_calculate_irradiance_equirect_image(sl);
}
}
}
diff --git a/source/blender/blenlib/BLI_math_vector.h b/source/blender/blenlib/BLI_math_vector.h
index 9613847f28f..a663d08b074 100644
--- a/source/blender/blenlib/BLI_math_vector.h
+++ b/source/blender/blenlib/BLI_math_vector.h
@@ -338,6 +338,7 @@ void print_vn(const char *str, const float v[], const int n);
MINLINE void normal_float_to_short_v2(short r[2], const float n[2]);
MINLINE void normal_short_to_float_v3(float r[3], const short n[3]);
MINLINE void normal_float_to_short_v3(short r[3], const float n[3]);
+MINLINE void normal_float_to_short_v4(short r[4], const float n[4]);
void minmax_v3v3_v3(float min[3], float max[3], const float vec[3]);
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2]);
diff --git a/source/blender/blenlib/BLI_string.h b/source/blender/blenlib/BLI_string.h
index eef4e0647aa..2fb8f045841 100644
--- a/source/blender/blenlib/BLI_string.h
+++ b/source/blender/blenlib/BLI_string.h
@@ -33,6 +33,7 @@
*/
#include <stdarg.h>
+#include <inttypes.h>
#ifdef __cplusplus
extern "C" {
@@ -71,6 +72,7 @@ char *BLI_sprintfN(const char *__restrict format, ...) ATTR_WARN_UNUSED_RESULT A
size_t BLI_strescape(char *__restrict dst, const char *__restrict src, const size_t maxncpy) ATTR_NONNULL();
size_t BLI_str_format_int_grouped(char dst[16], int num) ATTR_NONNULL();
+size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num) ATTR_NONNULL();
void BLI_str_format_byte_unit(char dst[15], long long int size, const bool base_10) ATTR_NONNULL();
int BLI_strcaseeq(const char *a, const char *b) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL();
diff --git a/source/blender/blenlib/intern/math_vector_inline.c b/source/blender/blenlib/intern/math_vector_inline.c
index dbb2339461f..fc3f11fd1be 100644
--- a/source/blender/blenlib/intern/math_vector_inline.c
+++ b/source/blender/blenlib/intern/math_vector_inline.c
@@ -1025,6 +1025,15 @@ MINLINE void normal_float_to_short_v3(short out[3], const float in[3])
out[2] = (short) (in[2] * 32767.0f);
}
+MINLINE void normal_float_to_short_v4(short out[4], const float in[4])
+{
+ out[0] = (short) (in[0] * 32767.0f);
+ out[1] = (short) (in[1] * 32767.0f);
+ out[2] = (short) (in[2] * 32767.0f);
+ out[3] = (short) (in[3] * 32767.0f);
+}
+
+
/********************************* Comparison ********************************/
diff --git a/source/blender/blenlib/intern/string.c b/source/blender/blenlib/intern/string.c
index 938728aa4bb..25375278901 100644
--- a/source/blender/blenlib/intern/string.c
+++ b/source/blender/blenlib/intern/string.c
@@ -35,6 +35,7 @@
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>
+#include <inttypes.h>
#include "MEM_guardedalloc.h"
@@ -975,24 +976,13 @@ size_t BLI_str_partition_ex(
return end ? (size_t)(end - str) : strlen(str);
}
-/**
- * Format ints with decimal grouping.
- * 1000 -> 1,000
- *
- * \param dst The resulting string
- * \param num Number to format
- * \return The length of \a dst
- */
-size_t BLI_str_format_int_grouped(char dst[16], int num)
+static size_t BLI_str_format_int_grouped_ex(char src[16], char dst[16], int num_len)
{
- char src[16];
char *p_src = src;
char *p_dst = dst;
const char separator = ',';
- int num_len, commas;
-
- num_len = sprintf(src, "%d", num);
+ int commas;
if (*p_src == '-') {
*p_dst++ = *p_src++;
@@ -1011,6 +1001,38 @@ size_t BLI_str_format_int_grouped(char dst[16], int num)
}
/**
+ * Format ints with decimal grouping.
+ * 1000 -> 1,000
+ *
+ * \param dst The resulting string
+ * \param num Number to format
+ * \return The length of \a dst
+ */
+size_t BLI_str_format_int_grouped(char dst[16], int num)
+{
+ char src[16];
+ int num_len = sprintf(src, "%d", num);
+
+ return BLI_str_format_int_grouped_ex(src, dst, num_len);
+}
+
+/**
+ * Format uint64_t with decimal grouping.
+ * 1000 -> 1,000
+ *
+ * \param dst The resulting string
+ * \param num Number to format
+ * \return The length of \a dst
+ */
+size_t BLI_str_format_uint64_grouped(char dst[16], uint64_t num)
+{
+ char src[16];
+ int num_len = sprintf(src, "%"PRIu64"", num);
+
+ return BLI_str_format_int_grouped_ex(src, dst, num_len);
+}
+
+/**
* Format a size in bytes using binary units.
* 1000 -> 1 KB
* Number of decimal places grows with the used unit (e.g. 1.5 MB, 1.55 GB, 1.545 TB).
diff --git a/source/blender/blenlib/intern/task.c b/source/blender/blenlib/intern/task.c
index 75242350c66..b8b54e192b4 100644
--- a/source/blender/blenlib/intern/task.c
+++ b/source/blender/blenlib/intern/task.c
@@ -1221,6 +1221,31 @@ static void parallel_listbase_func(
}
}
+static void task_parallel_listbase_no_threads(
+ struct ListBase *listbase,
+ void *userdata,
+ TaskParallelListbaseFunc func)
+{
+ int i = 0;
+ for (Link *link = listbase->first; link != NULL; link = link->next, ++i) {
+ func(userdata, link, i);
+ }
+}
+
+/* NOTE: The idea here is to compensate for rather measurable threading
+ * overhead caused by fetching tasks. With too many CPU threads we are starting
+ * to spend too much time in those overheads. */
+BLI_INLINE int task_parallel_listbasecalc_chunk_size(const int num_threads)
+{
+ if (num_threads > 32) {
+ return 128;
+ }
+ else if (num_threads > 16) {
+ return 64;
+ }
+ return 32;
+}
+
/**
* This function allows to parallelize for loops over ListBase items.
*
@@ -1238,41 +1263,37 @@ void BLI_task_parallel_listbase(
TaskParallelListbaseFunc func,
const bool use_threading)
{
- TaskScheduler *task_scheduler;
- TaskPool *task_pool;
- ParallelListState state;
- int i, num_threads, num_tasks;
-
if (BLI_listbase_is_empty(listbase)) {
return;
}
-
if (!use_threading) {
- i = 0;
- for (Link *link = listbase->first; link != NULL; link = link->next, ++i) {
- func(userdata, link, i);
- }
+ task_parallel_listbase_no_threads(listbase, userdata, func);
+ return;
+ }
+ TaskScheduler *task_scheduler = BLI_task_scheduler_get();
+ const int num_threads = BLI_task_scheduler_num_threads(task_scheduler);
+ /* TODO(sergey): Consider making chunk size configurable. */
+ const int chunk_size = task_parallel_listbasecalc_chunk_size(num_threads);
+ const int num_tasks = min_ii(
+ num_threads,
+ BLI_listbase_count(listbase) / chunk_size);
+ if (num_tasks <= 1) {
+ task_parallel_listbase_no_threads(listbase, userdata, func);
return;
}
- task_scheduler = BLI_task_scheduler_get();
- task_pool = BLI_task_pool_create_suspended(task_scheduler, &state);
- num_threads = BLI_task_scheduler_num_threads(task_scheduler);
-
- /* The idea here is to prevent creating task for each of the loop iterations
- * and instead have tasks which are evenly distributed across CPU cores and
- * pull next iter to be crunched using the queue.
- */
- num_tasks = num_threads + 2;
+ ParallelListState state;
+ TaskPool *task_pool = BLI_task_pool_create_suspended(task_scheduler, &state);
state.index = 0;
state.link = listbase->first;
state.userdata = userdata;
state.func = func;
- state.chunk_size = 32;
+ state.chunk_size = chunk_size;
BLI_spin_init(&state.lock);
- for (i = 0; i < num_tasks; i++) {
+ BLI_assert(num_tasks > 0);
+ for (int i = 0; i < num_tasks; i++) {
/* Use this pool's pre-allocated tasks. */
BLI_task_pool_push_from_thread(task_pool,
parallel_listbase_func,
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index ef02e7d7034..df8cc164869 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -81,6 +81,10 @@ typedef struct WorkspaceConfigFileData {
struct ListBase workspaces;
} WorkspaceConfigFileData;
+struct BlendFileReadParams {
+ uint skip_flags : 2; /* eBLOReadSkip */
+ uint is_startup : 1;
+};
/* skip reading some data-block types (may want to skip screen data too). */
typedef enum eBLOReadSkip {
@@ -93,13 +97,16 @@ typedef enum eBLOReadSkip {
BlendFileData *BLO_read_from_file(
const char *filepath,
- struct ReportList *reports, eBLOReadSkip skip_flag);
+ eBLOReadSkip skip_flags,
+ struct ReportList *reports);
BlendFileData *BLO_read_from_memory(
const void *mem, int memsize,
- struct ReportList *reports, eBLOReadSkip skip_flag);
+ eBLOReadSkip skip_flags,
+ struct ReportList *reports);
BlendFileData *BLO_read_from_memfile(
struct Main *oldmain, const char *filename, struct MemFile *memfile,
- struct ReportList *reports, eBLOReadSkip skip_flag);
+ eBLOReadSkip skip_flags,
+ struct ReportList *reports);
void BLO_blendfiledata_free(BlendFileData *bfd);
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index e0453e71a05..49987cb860c 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -36,6 +36,7 @@ set(INC
../makesrna
../nodes
../render/extern/include
+ ../windowmanager
../../../intern/guardedalloc
# for writefile.c: dna_type_offsets.h
diff --git a/source/blender/blenloader/intern/readblenentry.c b/source/blender/blenloader/intern/readblenentry.c
index 6fd77c34977..4d294870fb1 100644
--- a/source/blender/blenloader/intern/readblenentry.c
+++ b/source/blender/blenloader/intern/readblenentry.c
@@ -319,7 +319,8 @@ void BLO_blendhandle_close(BlendHandle *bh)
*/
BlendFileData *BLO_read_from_file(
const char *filepath,
- ReportList *reports, eBLOReadSkip skip_flags)
+ eBLOReadSkip skip_flags,
+ ReportList *reports)
{
BlendFileData *bfd = NULL;
FileData *fd;
@@ -346,7 +347,8 @@ BlendFileData *BLO_read_from_file(
*/
BlendFileData *BLO_read_from_memory(
const void *mem, int memsize,
- ReportList *reports, eBLOReadSkip skip_flags)
+ eBLOReadSkip skip_flags,
+ ReportList *reports)
{
BlendFileData *bfd = NULL;
FileData *fd;
@@ -370,7 +372,8 @@ BlendFileData *BLO_read_from_memory(
*/
BlendFileData *BLO_read_from_memfile(
Main *oldmain, const char *filename, MemFile *memfile,
- ReportList *reports, eBLOReadSkip skip_flags)
+ eBLOReadSkip skip_flags,
+ ReportList *reports)
{
BlendFileData *bfd = NULL;
FileData *fd;
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index d3a128f34a3..f07f9363167 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -6612,8 +6612,6 @@ static void direct_link_gpencil(FileData *fd, bGPdata *gpd)
gpl->actframe = newdataadr(fd, gpl->actframe);
- gpl->runtime.derived_array = NULL;
- gpl->runtime.len_derived = 0;
gpl->runtime.icon_id = 0;
for (gpf = gpl->frames.first; gpf; gpf = gpf->next) {
@@ -8795,6 +8793,11 @@ static void do_versions_userdef(FileData *fd, BlendFileData *bfd)
if (!DNA_struct_elem_find(fd->filesdna, "UserDef", "short", "gpencil_multisamples")) {
user->gpencil_multisamples = 4;
}
+
+ /* tablet pressure threshold */
+ if (!DNA_struct_elem_find(fd->filesdna, "UserDef", "float", "pressure_threshold_max")) {
+ user->pressure_threshold_max = 1.0f;
+ }
}
static void do_versions(FileData *fd, Library *lib, Main *main)
@@ -8912,14 +8915,9 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
/* read all data into fd->datamap */
bhead = read_data_into_oldnewmap(fd, bhead, "user def");
- if (user->keymaps.first) {
- /* backwards compatibility */
- user->user_keymaps= user->keymaps;
- user->keymaps.first= user->keymaps.last= NULL;
- }
-
link_list(fd, &user->themes);
link_list(fd, &user->user_keymaps);
+ link_list(fd, &user->user_keyconfig_prefs);
link_list(fd, &user->user_menus);
link_list(fd, &user->addons);
link_list(fd, &user->autoexec_paths);
@@ -8946,6 +8944,11 @@ static BHead *read_userdef(BlendFileData *bfd, FileData *fd, BHead *bhead)
direct_link_keymapitem(fd, kmi);
}
+ for (wmKeyConfigPref *kpt = user->user_keyconfig_prefs.first; kpt; kpt = kpt->next) {
+ kpt->prop = newdataadr(fd, kpt->prop);
+ IDP_DirectLinkGroup_OrFree(&kpt->prop, (fd->flags & FD_FLAGS_SWITCH_ENDIAN), fd);
+ }
+
for (bUserMenu *um = user->user_menus.first; um; um = um->next) {
link_list(fd, &um->items);
for (bUserMenuItem *umi = um->items.first; umi; umi = umi->next) {
diff --git a/source/blender/blenloader/intern/undofile.c b/source/blender/blenloader/intern/undofile.c
index b38259f0f98..5ceab1ca2cc 100644
--- a/source/blender/blenloader/intern/undofile.c
+++ b/source/blender/blenloader/intern/undofile.c
@@ -131,7 +131,7 @@ void memfile_chunk_add(
struct Main *BLO_memfile_main_get(struct MemFile *memfile, struct Main *oldmain, struct Scene **r_scene)
{
struct Main *bmain_undo = NULL;
- BlendFileData *bfd = BLO_read_from_memfile(oldmain, BKE_main_blendfile_path(oldmain), memfile, NULL, BLO_READ_SKIP_NONE);
+ BlendFileData *bfd = BLO_read_from_memfile(oldmain, BKE_main_blendfile_path(oldmain), memfile, BLO_READ_SKIP_NONE, NULL);
if (bfd) {
bmain_undo = bfd->main;
diff --git a/source/blender/blenloader/intern/versioning_270.c b/source/blender/blenloader/intern/versioning_270.c
index fadf332c850..e446e268e61 100644
--- a/source/blender/blenloader/intern/versioning_270.c
+++ b/source/blender/blenloader/intern/versioning_270.c
@@ -1103,45 +1103,45 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
ToolSettings *ts = scene->toolsettings;
if (ts->gp_sculpt.brush[0].size == 0) {
- GP_BrushEdit_Settings *gset = &ts->gp_sculpt;
- GP_EditBrush_Data *brush;
+ GP_Sculpt_Settings *gset = &ts->gp_sculpt;
+ GP_Sculpt_Data *brush;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_SMOOTH];
+ brush = &gset->brush[GP_SCULPT_TYPE_SMOOTH];
brush->size = 25;
brush->strength = 0.3f;
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF | GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_SMOOTH_PRESSURE;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_THICKNESS];
+ brush = &gset->brush[GP_SCULPT_TYPE_THICKNESS];
brush->size = 25;
brush->strength = 0.5f;
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_GRAB];
+ brush = &gset->brush[GP_SCULPT_TYPE_GRAB];
brush->size = 50;
brush->strength = 0.3f;
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_PUSH];
+ brush = &gset->brush[GP_SCULPT_TYPE_PUSH];
brush->size = 25;
brush->strength = 0.3f;
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_TWIST];
+ brush = &gset->brush[GP_SCULPT_TYPE_TWIST];
brush->size = 50;
brush->strength = 0.3f; // XXX?
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_PINCH];
+ brush = &gset->brush[GP_SCULPT_TYPE_PINCH];
brush->size = 50;
brush->strength = 0.5f; // XXX?
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_RANDOMIZE];
+ brush = &gset->brush[GP_SCULPT_TYPE_RANDOMIZE];
brush->size = 25;
brush->strength = 0.5f;
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_CLONE];
+ brush = &gset->brush[GP_SCULPT_TYPE_CLONE];
brush->size = 50;
brush->strength = 1.0f;
}
@@ -1404,17 +1404,17 @@ void blo_do_versions_270(FileData *fd, Library *UNUSED(lib), Main *bmain)
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
ToolSettings *ts = scene->toolsettings;
/* initialize use position for sculpt brushes */
- ts->gp_sculpt.flag |= GP_BRUSHEDIT_FLAG_APPLY_POSITION;
+ ts->gp_sculpt.flag |= GP_SCULPT_SETT_FLAG_APPLY_POSITION;
/* new strength sculpt brush */
if (ts->gp_sculpt.brush[0].size >= 11) {
- GP_BrushEdit_Settings *gset = &ts->gp_sculpt;
- GP_EditBrush_Data *brush;
+ GP_Sculpt_Settings *gset = &ts->gp_sculpt;
+ GP_Sculpt_Data *brush;
- brush = &gset->brush[GP_EDITBRUSH_TYPE_STRENGTH];
+ brush = &gset->brush[GP_SCULPT_TYPE_STRENGTH];
brush->size = 25;
brush->strength = 0.5f;
- brush->flag = GP_EDITBRUSH_FLAG_USE_FALLOFF;
+ brush->flag = GP_SCULPT_FLAG_USE_FALLOFF;
}
}
/* Convert Grease Pencil to new palettes/brushes
diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 0be1c048bfb..a28b4ae7784 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -454,6 +454,7 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene)
/* Handle legacy render layers. */
bool have_override = false;
+ const bool need_default_renderlayer = scene->r.layers.first == NULL;
for (SceneRenderLayer *srl = scene->r.layers.first; srl; srl = srl->next) {
ViewLayer *view_layer = BKE_view_layer_add(scene, srl->name);
@@ -541,9 +542,9 @@ static void do_version_layers_to_collections(Main *bmain, Scene *scene)
BLI_freelistN(&scene->r.layers);
- /* If render layers included overrides, we also create a vanilla
- * viewport layer without them. */
- if (have_override) {
+ /* If render layers included overrides, or there are no render layers,
+ * we also create a vanilla viewport layer. */
+ if (have_override || need_default_renderlayer) {
ViewLayer *view_layer = BKE_view_layer_add(scene, "Viewport");
/* Make it first in the list. */
@@ -1078,12 +1079,12 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
{
/* Grease pencil sculpt and paint cursors */
- if (!DNA_struct_elem_find(fd->filesdna, "GP_BrushEdit_Settings", "int", "weighttype")) {
+ if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "weighttype")) {
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
/* sculpt brushes */
- GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
if (gset) {
- gset->weighttype = GP_EDITBRUSH_TYPE_WEIGHT;
+ gset->weighttype = GP_SCULPT_TYPE_WEIGHT;
}
}
}
@@ -1092,15 +1093,15 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
float curcolor_add[3], curcolor_sub[3];
ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f);
ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f);
- GP_EditBrush_Data *gp_brush;
+ GP_Sculpt_Data *gp_brush;
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
ToolSettings *ts = scene->toolsettings;
/* sculpt brushes */
- GP_BrushEdit_Settings *gset = &ts->gp_sculpt;
- for (int i = 0; i < GP_EDITBRUSH_TYPE_MAX; ++i) {
+ GP_Sculpt_Settings *gset = &ts->gp_sculpt;
+ for (int i = 0; i < GP_SCULPT_TYPE_MAX; ++i) {
gp_brush = &gset->brush[i];
- gp_brush->flag |= GP_EDITBRUSH_FLAG_ENABLE_CURSOR;
+ gp_brush->flag |= GP_SCULPT_FLAG_ENABLE_CURSOR;
copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
}
@@ -1122,10 +1123,10 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
/* Grease pencil multiframe falloff curve */
- if (!DNA_struct_elem_find(fd->filesdna, "GP_BrushEdit_Settings", "CurveMapping", "cur_falloff")) {
+ if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "CurveMapping", "cur_falloff")) {
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
/* sculpt brushes */
- GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
if ((gset) && (gset->cur_falloff == NULL)) {
gset->cur_falloff = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
curvemapping_initialize(gset->cur_falloff);
@@ -1962,10 +1963,10 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
/* default loc axis */
- if (!DNA_struct_elem_find(fd->filesdna, "GP_BrushEdit_Settings", "int", "lock_axis")) {
+ if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "lock_axis")) {
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
/* lock axis */
- GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
if (gset) {
gset->lock_axis = GP_LOCKAXIS_Y;
}
@@ -2235,7 +2236,8 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
for (Object *ob = bmain->object.first; ob; ob = ob->id.next) {
ob->empty_image_visibility_flag = (
OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE |
- OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC);
+ OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC |
+ OB_EMPTY_IMAGE_VISIBLE_BACKSIDE);
}
@@ -2252,6 +2254,42 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
{
+ /* Grease pencil reset sculpt brushes after struct rename */
+ if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "int", "weighttype")) {
+ float curcolor_add[3], curcolor_sub[3];
+ ARRAY_SET_ITEMS(curcolor_add, 1.0f, 0.6f, 0.6f);
+ ARRAY_SET_ITEMS(curcolor_sub, 0.6f, 0.6f, 1.0f);
+
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ /* sculpt brushes */
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
+ if (gset) {
+ for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) {
+ GP_Sculpt_Data *gp_brush = &gset->brush[i];
+ gp_brush->size = 30;
+ gp_brush->strength = 0.5f;
+ gp_brush->flag = GP_SCULPT_FLAG_USE_FALLOFF | GP_SCULPT_FLAG_ENABLE_CURSOR;
+ copy_v3_v3(gp_brush->curcolor_add, curcolor_add);
+ copy_v3_v3(gp_brush->curcolor_sub, curcolor_sub);
+ }
+ }
+ }
+ }
+
+ /* Grease pencil target weight */
+ if (!DNA_struct_elem_find(fd->filesdna, "GP_Sculpt_Settings", "float", "target_weight")) {
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ /* sculpt brushes */
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
+ if (gset) {
+ for (int i = 0; i < GP_SCULPT_TYPE_MAX; i++) {
+ GP_Sculpt_Data *gp_brush = &gset->brush[i];
+ gp_brush->target_weight = 1.0f;
+ }
+ }
+ }
+ }
+
if (!DNA_struct_elem_find(fd->filesdna, "SceneEEVEE", "float", "overscan")) {
for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
scene->eevee.overscan = 3.0f;
diff --git a/source/blender/blenloader/intern/versioning_defaults.c b/source/blender/blenloader/intern/versioning_defaults.c
index 12d5e62aa18..420e3738427 100644
--- a/source/blender/blenloader/intern/versioning_defaults.c
+++ b/source/blender/blenloader/intern/versioning_defaults.c
@@ -42,10 +42,13 @@
#include "DNA_windowmanager_types.h"
#include "DNA_workspace_types.h"
+#include "BKE_brush.h"
#include "BKE_colortools.h"
#include "BKE_layer.h"
+#include "BKE_library.h"
#include "BKE_main.h"
#include "BKE_node.h"
+#include "BKE_paint.h"
#include "BKE_screen.h"
#include "BKE_workspace.h"
@@ -77,6 +80,9 @@ void BLO_update_defaults_userpref_blend(void)
/* Leave temp directory empty, will then get appropriate value per OS. */
U.tempdir[0] = '\0';
+
+ /* Only enable tooltips translation by default, without actually enabling translation itself, for now. */
+ U.transopts = USER_TR_TOOLTIPS;
}
/**
@@ -104,6 +110,9 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
{
View3D *v3d = (View3D *)sl;
v3d->overlay.weight_paint_mode_opacity = 1.0f;
+ /* grease pencil settings */
+ v3d->vertex_opacity = 1.0f;
+ v3d->gp_flag |= V3D_GP_SHOW_EDIT_LINES;
}
}
}
@@ -231,4 +240,36 @@ void BLO_update_defaults_startup_blend(Main *bmain, const char *app_template)
mesh->smoothresh = DEG2RADF(30);
}
}
+
+ /* Grease Pencil New Eraser Brush */
+ if (builtin_template) {
+ Brush *br;
+ /* Rename old Hard Eraser */
+ br = (Brush *)BKE_libblock_find_name(bmain, ID_BR, "Eraser Hard");
+ if (br) {
+ strcpy(br->id.name, "BREraser Point");
+ }
+ for (Scene *scene = bmain->scene.first; scene; scene = scene->id.next) {
+ ToolSettings *ts = scene->toolsettings;
+ /* create new hard brush (only create one, but need ToolSettings) */
+ br = (Brush *)BKE_libblock_find_name(bmain, ID_BR, "Eraser Hard");
+ if (!br) {
+ Paint *paint = &ts->gp_paint->paint;
+ Brush *old_brush = paint->brush;
+
+ br = BKE_brush_add_gpencil(bmain, ts, "Eraser Hard");
+ br->size = 30.0f;
+ br->gpencil_settings->draw_strength = 1.0f;
+ br->gpencil_settings->flag = (GP_BRUSH_ENABLE_CURSOR | GP_BRUSH_DEFAULT_ERASER);
+ br->gpencil_settings->icon_id = GP_BRUSH_ICON_ERASE_HARD;
+ br->gpencil_tool = GPAINT_TOOL_ERASE;
+ br->gpencil_settings->eraser_mode = GP_BRUSH_ERASER_SOFT;
+ br->gpencil_settings->era_strength_f = 100.0f;
+ br->gpencil_settings->era_thickness_f = 50.0f;
+
+ /* back to default brush */
+ BKE_paint_brush_set(paint, old_brush);
+ }
+ }
+ }
}
diff --git a/source/blender/blenloader/intern/versioning_userdef.c b/source/blender/blenloader/intern/versioning_userdef.c
index b14b17cbd8f..5279ed19343 100644
--- a/source/blender/blenloader/intern/versioning_userdef.c
+++ b/source/blender/blenloader/intern/versioning_userdef.c
@@ -36,10 +36,14 @@
#include "BKE_addon.h"
#include "BKE_colorband.h"
+#include "BKE_idprop.h"
#include "BKE_main.h"
+#include "BKE_keyconfig.h"
#include "BLO_readfile.h" /* Own include. */
+#include "wm_event_types.h"
+
/* Disallow access to global userdef. */
#define U (_error_)
@@ -92,6 +96,29 @@ static void do_versions_theme(UserDef *userdef, bTheme *btheme)
#undef USER_VERSION_ATLEAST
}
+/* UserDef.flag */
+#define USER_LMOUSESELECT (1 << 14) /* deprecated */
+
+static void do_version_select_mouse(UserDef *userdef, wmKeyMapItem *kmi)
+{
+ /* Remove select/action mouse from user defined keymaps. */
+ enum {
+ ACTIONMOUSE = 0x0005,
+ SELECTMOUSE = 0x0006,
+ EVT_TWEAK_A = 0x5005,
+ EVT_TWEAK_S = 0x5006,
+ };
+ const bool left = (userdef->flag & USER_LMOUSESELECT) != 0;
+
+ switch (kmi->type) {
+ case SELECTMOUSE: kmi->type = (left) ? LEFTMOUSE : RIGHTMOUSE; break;
+ case ACTIONMOUSE: kmi->type = (left) ? RIGHTMOUSE : LEFTMOUSE; break;
+ case EVT_TWEAK_S: kmi->type = (left) ? EVT_TWEAK_L : EVT_TWEAK_R; break;
+ case EVT_TWEAK_A: kmi->type = (left) ? EVT_TWEAK_R : EVT_TWEAK_L; break;
+ default: break;
+ }
+}
+
/* patching UserDef struct and Themes */
void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
{
@@ -353,6 +380,32 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
}
}
+ if (!USER_VERSION_ATLEAST(280, 31)) {
+ /* Remove select/action mouse from user defined keymaps. */
+ for (wmKeyMap *keymap = userdef->user_keymaps.first; keymap; keymap = keymap->next) {
+ for (wmKeyMapDiffItem *kmdi = keymap->diff_items.first; kmdi; kmdi = kmdi->next) {
+ if (kmdi->remove_item) {
+ do_version_select_mouse(userdef, kmdi->remove_item);
+ }
+ if (kmdi->add_item) {
+ do_version_select_mouse(userdef, kmdi->add_item);
+ }
+ }
+
+ for (wmKeyMapItem *kmi = keymap->items.first; kmi; kmi = kmi->next) {
+ do_version_select_mouse(userdef, kmi);
+ }
+ }
+ }
+
+ if (!USER_VERSION_ATLEAST(280, 32)) {
+ if ((userdef->flag & USER_LMOUSESELECT) ) {
+ userdef->flag &= ~USER_LMOUSESELECT;
+ wmKeyConfigPref *kpt = BKE_keyconfig_pref_ensure(userdef, WM_KEYCONFIG_STR_DEFAULT);
+ IDP_AddToGroup(kpt->prop, IDP_New(IDP_INT, &(IDPropertyTemplate){ .i = 0, }, "select_mouse"));
+ }
+ }
+
/**
* Include next version bump.
*/
@@ -375,3 +428,5 @@ void BLO_version_defaults_userpref_blend(Main *bmain, UserDef *userdef)
#undef USER_VERSION_ATLEAST
}
+
+#undef USER_LMOUSESELECT
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c
index fd097927f57..99cd9b805bf 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -1248,6 +1248,13 @@ static void write_userdef(WriteData *wd, const UserDef *userdef)
}
}
+ for (const wmKeyConfigPref *kpt = userdef->user_keyconfig_prefs.first; kpt; kpt = kpt->next) {
+ writestruct(wd, DATA, wmKeyConfigPref, 1, kpt);
+ if (kpt->prop) {
+ IDP_WriteProperty(kpt->prop, wd);
+ }
+ }
+
for (const bUserMenu *um = userdef->user_menus.first; um; um = um->next) {
writestruct(wd, DATA, bUserMenu, 1, um);
for (const bUserMenuItem *umi = um->items.first; umi; umi = umi->next) {
diff --git a/source/blender/blentranslation/intern/blt_lang.c b/source/blender/blentranslation/intern/blt_lang.c
index f373ca24861..a36fe245a2a 100644
--- a/source/blender/blentranslation/intern/blt_lang.c
+++ b/source/blender/blentranslation/intern/blt_lang.c
@@ -157,9 +157,12 @@ static void fill_locales(void)
}
if (id == 0) {
- /* The DEFAULT item... */
+ /* The DEFAULT/Automatic item... */
if (BLI_strnlen(loc, 2)) {
- locales[id] = locales_menu[idx].description = BLI_strdup("");
+ locales[id] = "";
+ /* Keep this tip in sync with the one in rna_userdef (rna_enum_language_default_items). */
+ locales_menu[idx].description = BLI_strdup("Automatically choose system's defined language "
+ "if available, or fall-back to English");
}
/* Menu "label", not to be stored in locales! */
else {
diff --git a/source/blender/bmesh/intern/bmesh_mesh.c b/source/blender/bmesh/intern/bmesh_mesh.c
index 7bea0363a04..50aa3f08fbc 100644
--- a/source/blender/bmesh/intern/bmesh_mesh.c
+++ b/source/blender/bmesh/intern/bmesh_mesh.c
@@ -371,6 +371,8 @@ typedef struct BMVertsCalcNormalsData {
static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp_f)
{
+#define FLT_EQ_NONAN(_fa, _fb) (*((const uint32_t *)&_fa) == *((const uint32_t *)&_fb))
+
BMVertsCalcNormalsData *data = userdata;
BMFace *f = (BMFace *)mp_f;
@@ -398,6 +400,11 @@ static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp
fac = saacos(-dotprod);
+ if (fac != fac) { /* NAN detection. */
+ /* Degenerated case, nothing to do here, just ignore that vertex. */
+ continue;
+ }
+
/* accumulate weighted face normal into the vertex's normal */
float *v_no = data->vnos ? data->vnos[BM_elem_index_get(l_iter->v)] : l_iter->v->no;
@@ -413,7 +420,7 @@ static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp
* - v_no[0] was not FLT_MAX, i.e. it was not locked by another thread.
*/
const float vl = atomic_cas_float(&v_no[0], virtual_lock, FLT_MAX);
- if (vl == virtual_lock && vl != FLT_MAX) {
+ if (FLT_EQ_NONAN(vl, virtual_lock) && vl != FLT_MAX) {
break;
}
virtual_lock = vl;
@@ -431,6 +438,8 @@ static void mesh_verts_calc_normals_accum_cb(void *userdata, MempoolIterData *mp
BLI_assert(virtual_lock == FLT_MAX);
} while ((l_iter = l_iter->next) != l_first);
+
+#undef FLT_EQ_NONAN
}
static void mesh_verts_calc_normals_normalize_cb(void *userdata, MempoolIterData *mp_v)
diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.c b/source/blender/bmesh/intern/bmesh_mesh_conv.c
index 9f1b032ea0b..e7ee1d45dc3 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_conv.c
+++ b/source/blender/bmesh/intern/bmesh_mesh_conv.c
@@ -193,7 +193,7 @@ static BMFace *bm_face_create_from_mpoly(
* \warning This function doesn't calculate face normals.
*/
void BM_mesh_bm_from_me(
- BMesh *bm, Mesh *me,
+ BMesh *bm, const Mesh *me,
const struct BMeshFromMeshParams *params)
{
const bool is_new =
diff --git a/source/blender/bmesh/intern/bmesh_mesh_conv.h b/source/blender/bmesh/intern/bmesh_mesh_conv.h
index 0560155faa0..8f389a8cf05 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_conv.h
+++ b/source/blender/bmesh/intern/bmesh_mesh_conv.h
@@ -52,7 +52,7 @@ struct BMeshFromMeshParams {
int64_t cd_mask_extra;
};
void BM_mesh_bm_from_me(
- BMesh *bm, struct Mesh *me,
+ BMesh *bm, const struct Mesh *me,
const struct BMeshFromMeshParams *params)
ATTR_NONNULL(1, 3);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc b/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc
index 0d28344ef95..a8768c899ad 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_cycle.cc
@@ -148,6 +148,35 @@ bool schedule_non_checked_node(CyclesSolverState *state)
return false;
}
+bool check_relation_can_murder(DepsRelation *relation)
+{
+ if (relation->flag & DEPSREL_FLAG_GODMODE) {
+ return false;
+ }
+ return true;
+}
+
+DepsRelation *select_relation_to_murder(DepsRelation *relation,
+ StackEntry *cycle_start_entry)
+{
+ /* More or less russian roulette solver, which will make sure only
+ * specially marked relations are kept alive.
+ *
+ * TODO(sergey): There might be better strategies here. */
+ if (check_relation_can_murder(relation)) {
+ return relation;
+ }
+ StackEntry *current = cycle_start_entry;
+ OperationDepsNode *to_node = (OperationDepsNode *)relation->to;
+ while (current->node != to_node) {
+ if (check_relation_can_murder(current->via_relation)) {
+ return current->via_relation;
+ }
+ current = current->from;
+ }
+ return relation;
+}
+
/* Solve cycles with all nodes which are scheduled for traversal. */
void solve_cycles(CyclesSolverState *state)
{
@@ -168,7 +197,6 @@ void solve_cycles(CyclesSolverState *state)
to->full_identifier().c_str(),
node->full_identifier().c_str(),
rel->name);
-
StackEntry *current = entry;
while (current->node != to) {
BLI_assert(current != NULL);
@@ -178,8 +206,9 @@ void solve_cycles(CyclesSolverState *state)
current->via_relation->name);
current = current->from;
}
- /* TODO(sergey): So called russian roulette cycle solver. */
- rel->flag |= DEPSREL_FLAG_CYCLIC;
+ DepsRelation *sacrificial_relation =
+ select_relation_to_murder(rel, entry);
+ sacrificial_relation->flag |= DEPSREL_FLAG_CYCLIC;
++state->num_cycles;
}
else if (to_state == NODE_NOT_VISITED) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index adf67c5a8b1..e59de4224c0 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -507,7 +507,7 @@ void DepsgraphNodeBuilder::build_collection(
id_node = find_id_node(&collection->id);
if (is_collection_visible &&
id_node->is_directly_visible == false &&
- id_node->is_collection_fully_expanded == true)
+ id_node->is_collection_fully_expanded == true)
{
/* Collection became visible, make sure nested collections and
* objects are poked with the new visibility flag, since they
@@ -800,7 +800,7 @@ void DepsgraphNodeBuilder::build_object_transform(Object *object)
/* object transform is done */
op_node = add_operation_node(&object->id, DEG_NODE_TYPE_TRANSFORM,
- function_bind(BKE_object_eval_done,
+ function_bind(BKE_object_eval_transform_final,
_1,
ob_cow),
DEG_OPCODE_TRANSFORM_FINAL);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
index 88e5ca9346c..eb2ed0e637d 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes_rig.cc
@@ -230,7 +230,9 @@ void DepsgraphNodeBuilder::build_rig(Object *object, bool is_object_visible)
op_node = add_operation_node(&object->id,
DEG_NODE_TYPE_EVAL_POSE,
- NULL,
+ function_bind(BKE_pose_eval_done,
+ _1,
+ object_cow),
DEG_OPCODE_POSE_DONE);
op_node->set_as_exit();
/* Bones. */
@@ -379,7 +381,9 @@ void DepsgraphNodeBuilder::build_proxy_rig(Object *object)
DEG_OPCODE_POSE_CLEANUP);
op_node = add_operation_node(&object->id,
DEG_NODE_TYPE_EVAL_POSE,
- NULL,
+ function_bind(BKE_pose_eval_proxy_done,
+ _1,
+ object_cow),
DEG_OPCODE_POSE_DONE);
op_node->set_as_exit();
}
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 7a26121801a..8f579216518 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -104,6 +104,7 @@ extern "C" {
#include "intern/builder/deg_builder.h"
#include "intern/builder/deg_builder_pchanmap.h"
+#include "intern/eval/deg_eval_copy_on_write.h"
#include "intern/nodes/deg_node.h"
#include "intern/nodes/deg_node_component.h"
@@ -303,10 +304,12 @@ DepsRelation *DepsgraphRelationBuilder::add_time_relation(
TimeSourceDepsNode *timesrc,
DepsNode *node_to,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
if (timesrc && node_to) {
- return graph_->add_new_relation(timesrc, node_to, description, check_unique);
+ return graph_->add_new_relation(
+ timesrc, node_to, description, check_unique, flags);
}
else {
DEG_DEBUG_PRINTF((::Depsgraph *)graph_,
@@ -322,13 +325,15 @@ DepsRelation *DepsgraphRelationBuilder::add_operation_relation(
OperationDepsNode *node_from,
OperationDepsNode *node_to,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
if (node_from && node_to) {
return graph_->add_new_relation(node_from,
node_to,
description,
- check_unique);
+ check_unique,
+ flags);
}
else {
DEG_DEBUG_PRINTF((::Depsgraph *)graph_,
@@ -2389,8 +2394,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
/* XXX: This is a quick hack to make Alt-A to work. */
// add_relation(time_source_key, copy_on_write_key, "Fluxgate capacitor hack");
/* Resat of code is using rather low level trickery, so need to get some
- * explicit pointers.
- */
+ * explicit pointers. */
DepsNode *node_cow = find_node(copy_on_write_key);
OperationDepsNode *op_cow = node_cow->get_exit_operation();
/* Plug any other components to this one. */
@@ -2404,7 +2408,7 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
/* Component explicitly requests to not add relation. */
continue;
}
- int rel_flag = DEPSREL_FLAG_NO_FLUSH;
+ int rel_flag = (DEPSREL_FLAG_NO_FLUSH | DEPSREL_FLAG_GODMODE);
if (id_type == ID_ME && comp_node->type == DEG_NODE_TYPE_GEOMETRY) {
rel_flag &= ~DEPSREL_FLAG_NO_FLUSH;
}
@@ -2412,7 +2416,6 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
if (id_type == ID_MA) {
rel_flag &= ~DEPSREL_FLAG_NO_FLUSH;
}
-
/* Notes on exceptions:
* - Parameters component is where drivers are living. Changing any
* of the (custom) properties in the original datablock (even the
@@ -2426,9 +2429,15 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
* to preserve that cache in copy-on-write, but for the time being
* we allow flush to layer collections component which will ensure
* that cached array fo bases exists and is up-to-date.
+ *
+ * - Action is allowed to flush as well, this way it's possible to
+ * keep current tagging in animation editors (which tags action for
+ * CoW update when it's changed) but yet guarantee evaluation order
+ * with objects which are using that action.
*/
if (comp_node->type == DEG_NODE_TYPE_PARAMETERS ||
- comp_node->type == DEG_NODE_TYPE_LAYER_COLLECTIONS)
+ comp_node->type == DEG_NODE_TYPE_LAYER_COLLECTIONS ||
+ (comp_node->type == DEG_NODE_TYPE_ANIMATION && id_type == ID_AC))
{
rel_flag &= ~DEPSREL_FLAG_NO_FLUSH;
}
@@ -2490,10 +2499,15 @@ void DepsgraphRelationBuilder::build_copy_on_write_relations(IDDepsNode *id_node
Object *object = (Object *)id_orig;
ID *object_data_id = (ID *)object->data;
if (object_data_id != NULL) {
- OperationKey data_copy_on_write_key(object_data_id,
- DEG_NODE_TYPE_COPY_ON_WRITE,
- DEG_OPCODE_COPY_ON_WRITE);
- add_relation(data_copy_on_write_key, copy_on_write_key, "Eval Order");
+ if (deg_copy_on_write_is_needed(object_data_id)) {
+ OperationKey data_copy_on_write_key(object_data_id,
+ DEG_NODE_TYPE_COPY_ON_WRITE,
+ DEG_OPCODE_COPY_ON_WRITE);
+ add_relation(data_copy_on_write_key,
+ copy_on_write_key,
+ "Eval Order",
+ DEPSREL_FLAG_GODMODE);
+ }
}
else {
BLI_assert(object->type == OB_EMPTY);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.h b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
index 81f21f5bf77..c6db975c6c2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.h
@@ -44,6 +44,7 @@
#include "BLI_string.h"
#include "intern/builder/deg_builder_map.h"
+#include "intern/depsgraph.h"
#include "intern/nodes/deg_node.h"
#include "intern/nodes/deg_node_component.h"
#include "intern/nodes/deg_node_operation.h"
@@ -186,19 +187,28 @@ struct DepsgraphRelationBuilder
DepsRelation *add_relation(const KeyFrom& key_from,
const KeyTo& key_to,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
+
+ template <typename KeyFrom, typename KeyTo>
+ DepsRelation *add_relation(const KeyFrom& key_from,
+ const KeyTo& key_to,
+ const char *description,
+ eDepsRelation_Flag flag);
template <typename KeyTo>
DepsRelation *add_relation(const TimeSourceKey& key_from,
const KeyTo& key_to,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
template <typename KeyType>
DepsRelation *add_node_handle_relation(const KeyType& key_from,
const DepsNodeHandle *handle,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
void add_customdata_mask(const ComponentKey &key, uint64_t mask);
void add_special_eval_flag(ID *object, uint32_t flag);
@@ -306,11 +316,13 @@ protected:
DepsRelation *add_time_relation(TimeSourceDepsNode *timesrc,
DepsNode *node_to,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
DepsRelation *add_operation_relation(OperationDepsNode *node_from,
OperationDepsNode *node_to,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
template <typename KeyType>
DepsNodeHandle create_node_handle(const KeyType& key,
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
index 894d4172c00..726393f39b9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_impl.h
@@ -49,14 +49,16 @@ template <typename KeyFrom, typename KeyTo>
DepsRelation *DepsgraphRelationBuilder::add_relation(const KeyFrom &key_from,
const KeyTo &key_to,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
DepsNode *node_from = get_node(key_from);
DepsNode *node_to = get_node(key_to);
OperationDepsNode *op_from = node_from ? node_from->get_exit_operation() : NULL;
OperationDepsNode *op_to = node_to ? node_to->get_entry_operation() : NULL;
if (op_from && op_to) {
- return add_operation_relation(op_from, op_to, description, check_unique);
+ return add_operation_relation(
+ op_from, op_to, description, check_unique, flags);
}
else {
if (!op_from) {
@@ -81,18 +83,31 @@ DepsRelation *DepsgraphRelationBuilder::add_relation(const KeyFrom &key_from,
return NULL;
}
+template <typename KeyFrom, typename KeyTo>
+DepsRelation *DepsgraphRelationBuilder::add_relation(
+ const KeyFrom& key_from,
+ const KeyTo& key_to,
+ const char *description,
+ eDepsRelation_Flag flag)
+{
+ return add_relation(
+ key_from, key_to, description, false, static_cast<int>(flag));
+}
+
template <typename KeyTo>
DepsRelation *DepsgraphRelationBuilder::add_relation(
const TimeSourceKey &key_from,
const KeyTo &key_to,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
TimeSourceDepsNode *time_from = get_node(key_from);
DepsNode *node_to = get_node(key_to);
OperationDepsNode *op_to = node_to ? node_to->get_entry_operation() : NULL;
if (time_from != NULL && op_to != NULL) {
- return add_time_relation(time_from, op_to, description, check_unique);
+ return add_time_relation(
+ time_from, op_to, description, check_unique, flags);
}
return NULL;
}
@@ -102,13 +117,15 @@ DepsRelation *DepsgraphRelationBuilder::add_node_handle_relation(
const KeyType &key_from,
const DepsNodeHandle *handle,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
DepsNode *node_from = get_node(key_from);
OperationDepsNode *op_from = node_from ? node_from->get_exit_operation() : NULL;
OperationDepsNode *op_to = handle->node->get_entry_operation();
if (op_from != NULL && op_to != NULL) {
- return add_operation_relation(op_from, op_to, description, check_unique);
+ return add_operation_relation(
+ op_from, op_to, description, check_unique, flags);
}
else {
if (!op_from) {
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
index 331b476be2c..1abed8bb6a2 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations_rig.cc
@@ -78,88 +78,100 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
RootPChanMap *root_map)
{
bKinematicConstraint *data = (bKinematicConstraint *)con->data;
-
- /* attach owner to IK Solver too
- * - assume that owner is always part of chain
- * - see notes on direction of rel below...
- */
+ /* Attach owner to IK Solver to. */
bPoseChannel *rootchan = BKE_armature_ik_solver_find_root(pchan, data);
if (rootchan == NULL) {
return;
}
- OperationKey pchan_local_key(&object->id, DEG_NODE_TYPE_BONE,
- pchan->name, DEG_OPCODE_BONE_LOCAL);
- OperationKey init_ik_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK);
- OperationKey solver_key(&object->id, DEG_NODE_TYPE_EVAL_POSE,
+ OperationKey pchan_local_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ pchan->name,
+ DEG_OPCODE_BONE_LOCAL);
+ OperationKey init_ik_key(
+ &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK);
+ OperationKey solver_key(&object->id,
+ DEG_NODE_TYPE_EVAL_POSE,
rootchan->name,
DEG_OPCODE_POSE_IK_SOLVER);
-
+ OperationKey pose_cleanup_key(
+ &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP);
add_relation(pchan_local_key, init_ik_key, "IK Constraint -> Init IK Tree");
add_relation(init_ik_key, solver_key, "Init IK -> IK Solver");
-
+ /* Never cleanup before solver is run. */
+ add_relation(solver_key,
+ pose_cleanup_key,
+ "IK Solver -> Cleanup",
+ DEPSREL_FLAG_GODMODE);
/* IK target */
- // XXX: this should get handled as part of the constraint code
+ /* TODO(sergey): This should get handled as part of the constraint code. */
if (data->tar != NULL) {
- /* TODO(sergey): For until we'll store partial matricies in the depsgraph,
- * we create dependency between target object and pose eval component.
+ /* TODO(sergey): For until we'll store partial matricies in the
+ * depsgraph, we create dependency between target object and pose eval
+ * component.
*
- * This way we ensuring the whole subtree is updated from scratch without
- * need of intermediate matricies. This is an overkill, but good enough for
- * testing IK solver.
- */
- // FIXME: geometry targets...
+ * This way we ensuring the whole subtree is updated from scratch
+ * without need of intermediate matricies. This is an overkill, but good
+ * enough for testing IK solver. */
ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
if ((data->tar->type == OB_ARMATURE) && (data->subtarget[0])) {
- /* TODO(sergey): This is only for until granular update stores intermediate result. */
+ /* TODO(sergey): This is only for until granular update stores
+ * intermediate result. */
if (data->tar != object) {
- /* different armature - can just read the results */
- ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget);
+ /* Different armature - can just read the results. */
+ ComponentKey target_key(
+ &data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget);
add_relation(target_key, pose_key, con->name);
}
else {
- /* same armature - we'll use the ready state only, just in case this bone is in the chain we're solving */
- OperationKey target_key(&data->tar->id, DEG_NODE_TYPE_BONE, data->subtarget, DEG_OPCODE_BONE_DONE);
+ /* Same armature - we'll use the ready state only, just in case
+ * this bone is in the chain we're solving. */
+ OperationKey target_key(&data->tar->id,
+ DEG_NODE_TYPE_BONE,
+ data->subtarget,
+ DEG_OPCODE_BONE_DONE);
add_relation(target_key, solver_key, con->name);
}
}
- else if (ELEM(data->tar->type, OB_MESH, OB_LATTICE) && (data->subtarget[0])) {
- /* vertex group target */
- /* NOTE: for now, we don't need to represent vertex groups separately... */
+ else if (data->subtarget[0] &&
+ ELEM(data->tar->type, OB_MESH, OB_LATTICE))
+ {
+ /* Vertex group target. */
+ /* NOTE: for now, we don't need to represent vertex groups
+ * separately. */
ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_GEOMETRY);
add_relation(target_key, solver_key, con->name);
-
if (data->tar->type == OB_MESH) {
add_customdata_mask(target_key, CD_MASK_MDEFORMVERT);
}
}
else {
- /* Standard Object Target */
+ /* Standard Object Target. */
ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_TRANSFORM);
add_relation(target_key, pose_key, con->name);
}
-
- if ((data->tar == object) && (data->subtarget[0])) {
+ if (data->tar == object && data->subtarget[0]) {
/* Prevent target's constraints from linking to anything from same
- * chain that it controls.
- */
+ * chain that it controls. */
root_map->add_bone(data->subtarget, rootchan->name);
}
}
-
- /* Pole Target */
- // XXX: this should get handled as part of the constraint code
+ /* Pole Target. */
+ /* TODO(sergey): This should get handled as part of the constraint code. */
if (data->poletar != NULL) {
if ((data->poletar->type == OB_ARMATURE) && (data->polesubtarget[0])) {
- // XXX: same armature issues - ready vs done?
- ComponentKey target_key(&data->poletar->id, DEG_NODE_TYPE_BONE, data->polesubtarget);
+ ComponentKey target_key(&data->poletar->id,
+ DEG_NODE_TYPE_BONE,
+ data->polesubtarget);
add_relation(target_key, solver_key, con->name);
}
- else if (ELEM(data->poletar->type, OB_MESH, OB_LATTICE) && (data->polesubtarget[0])) {
- /* vertex group target */
- /* NOTE: for now, we don't need to represent vertex groups separately... */
+ else if (data->polesubtarget[0] &&
+ ELEM(data->poletar->type, OB_MESH, OB_LATTICE))
+ {
+ /* Vertex group target. */
+ /* NOTE: for now, we don't need to represent vertex groups
+ * separately. */
ComponentKey target_key(&data->poletar->id, DEG_NODE_TYPE_GEOMETRY);
add_relation(target_key, solver_key, con->name);
-
if (data->poletar->type == OB_MESH) {
add_customdata_mask(target_key, CD_MASK_MDEFORMVERT);
}
@@ -169,60 +181,65 @@ void DepsgraphRelationBuilder::build_ik_pose(Object *object,
add_relation(target_key, solver_key, con->name);
}
}
-
- DEG_DEBUG_PRINTF((::Depsgraph *)graph_,
- BUILD, "\nStarting IK Build: pchan = %s, target = (%s, %s), segcount = %d\n",
- pchan->name, data->tar->id.name, data->subtarget, data->rootbone);
-
+ DEG_DEBUG_PRINTF(
+ (::Depsgraph *)graph_,
+ BUILD,
+ "\nStarting IK Build: pchan = %s, target = (%s, %s), "
+ "segcount = %d\n",
+ pchan->name, data->tar->id.name, data->subtarget, data->rootbone);
bPoseChannel *parchan = pchan;
- /* exclude tip from chain? */
+ /* Exclude tip from chain if needed. */
if (!(data->flag & CONSTRAINT_IK_TIP)) {
parchan = pchan->parent;
}
-
root_map->add_bone(parchan->name, rootchan->name);
-
OperationKey parchan_transforms_key(&object->id, DEG_NODE_TYPE_BONE,
parchan->name, DEG_OPCODE_BONE_READY);
add_relation(parchan_transforms_key, solver_key, "IK Solver Owner");
-
- /* Walk to the chain's root */
- //size_t segcount = 0;
+ /* Walk to the chain's root. */
int segcount = 0;
-
- while (parchan) {
- /* Make IK-solver dependent on this bone's result,
- * since it can only run after the standard results
- * of the bone are know. Validate links step on the
- * bone will ensure that users of this bone only
- * grab the result with IK solver results...
- */
+ while (parchan != NULL) {
+ /* Make IK-solver dependent on this bone's result, since it can only run
+ * after the standard results of the bone are know. Validate links step
+ * on the bone will ensure that users of this bone only grab the result
+ * with IK solver results. */
if (parchan != pchan) {
- OperationKey parent_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_READY);
+ OperationKey parent_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ parchan->name,
+ DEG_OPCODE_BONE_READY);
add_relation(parent_key, solver_key, "IK Chain Parent");
-
- OperationKey done_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE);
- add_relation(solver_key, done_key, "IK Chain Result");
+ OperationKey bone_done_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ parchan->name,
+ DEG_OPCODE_BONE_DONE);
+ add_relation(solver_key, bone_done_key, "IK Chain Result");
}
else {
- OperationKey final_transforms_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE);
+ OperationKey final_transforms_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ parchan->name,
+ DEG_OPCODE_BONE_DONE);
add_relation(solver_key, final_transforms_key, "IK Solver Result");
}
parchan->flag |= POSE_DONE;
-
-
root_map->add_bone(parchan->name, rootchan->name);
-
- /* continue up chain, until we reach target number of items... */
- DEG_DEBUG_PRINTF((::Depsgraph *)graph_, BUILD, " %d = %s\n", segcount, parchan->name);
+ /* continue up chain, until we reach target number of items. */
+ DEG_DEBUG_PRINTF((::Depsgraph *)graph_,
+ BUILD,
+ " %d = %s\n",
+ segcount, parchan->name);
+ /* TODO(sergey): This is an arbitrary value, which was just following
+ * old code convention. */
segcount++;
- if ((segcount == data->rootbone) || (segcount > 255)) break; /* 255 is weak */
-
+ if ((segcount == data->rootbone) || (segcount > 255)) {
+ break;
+ }
parchan = parchan->parent;
}
-
- OperationKey done_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
- add_relation(solver_key, done_key, "PoseEval Result-Bone Link");
+ OperationKey pose_done_key(
+ &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
+ add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link");
}
/* Spline IK Eval Steps */
@@ -233,69 +250,85 @@ void DepsgraphRelationBuilder::build_splineik_pose(Object *object,
{
bSplineIKConstraint *data = (bSplineIKConstraint *)con->data;
bPoseChannel *rootchan = BKE_armature_splineik_solver_find_root(pchan, data);
- OperationKey transforms_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_READY);
- OperationKey init_ik_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_INIT_IK);
- OperationKey solver_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, rootchan->name, DEG_OPCODE_POSE_SPLINE_IK_SOLVER);
-
+ OperationKey transforms_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ pchan->name,
+ DEG_OPCODE_BONE_READY);
+ OperationKey init_ik_key(&object->id,
+ DEG_NODE_TYPE_EVAL_POSE,
+ DEG_OPCODE_POSE_INIT_IK);
+ OperationKey solver_key(&object->id,
+ DEG_NODE_TYPE_EVAL_POSE,
+ rootchan->name,
+ DEG_OPCODE_POSE_SPLINE_IK_SOLVER);
+ OperationKey pose_cleanup_key(
+ &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_CLEANUP);
/* Solver depends on initialization. */
add_relation(init_ik_key, solver_key, "Init IK -> IK Solver");
-
- /* attach owner to IK Solver too
- * - assume that owner is always part of chain
- * - see notes on direction of rel below...
- */
- add_relation(transforms_key, solver_key, "Spline IK Solver Owner");
-
- /* attach path dependency to solver */
- if (data->tar) {
- /* TODO(sergey): For until we'll store partial matricies in the depsgraph,
- * we create dependency between target object and pose eval component.
- * See IK pose for a bit more information.
+ /* Never cleanup before solver is run. */
+ add_relation(solver_key, pose_cleanup_key, "IK Solver -> Cleanup");
+ /* Attach owner to IK Solver. */
+ add_relation(transforms_key,
+ solver_key,
+ "Spline IK Solver Owner",
+ DEPSREL_FLAG_GODMODE);
+ /* Attach path dependency to solver. */
+ if (data->tar != NULL) {
+ /* TODO(sergey): For until we'll store partial matricies in the
+ * depsgraph, we create dependency between target object and pose eval
+ * component. See IK pose for a bit more information.
*/
- // TODO: the bigggest point here is that we need the curve PATH and not just the general geometry...
+ /* TODO: the bigggest point here is that we need the curve PATH and not
+ * just the general geometry. */
ComponentKey target_key(&data->tar->id, DEG_NODE_TYPE_GEOMETRY);
ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
add_relation(target_key, pose_key, "Curve.Path -> Spline IK");
}
-
pchan->flag |= POSE_DONE;
- OperationKey final_transforms_key(&object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_DONE);
+ OperationKey final_transforms_key(
+ &object->id, DEG_NODE_TYPE_BONE, pchan->name, DEG_OPCODE_BONE_DONE);
add_relation(solver_key, final_transforms_key, "Spline IK Result");
-
root_map->add_bone(pchan->name, rootchan->name);
-
- /* Walk to the chain's root */
- //size_t segcount = 0;
+ /* Walk to the chain's root/ */
int segcount = 0;
-
- for (bPoseChannel *parchan = pchan->parent; parchan; parchan = parchan->parent) {
- /* Make Spline IK solver dependent on this bone's result,
- * since it can only run after the standard results
- * of the bone are know. Validate links step on the
- * bone will ensure that users of this bone only
- * grab the result with IK solver results...
- */
+ for (bPoseChannel *parchan = pchan->parent;
+ parchan != NULL;
+ parchan = parchan->parent)
+ {
+ /* Make Spline IK solver dependent on this bone's result, since it can
+ * only run after the standard results of the bone are know. Validate
+ * links step on the bone will ensure that users of this bone only grab
+ * the result with IK solver results. */
if (parchan != pchan) {
- OperationKey parent_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_READY);
+ OperationKey parent_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ parchan->name,
+ DEG_OPCODE_BONE_READY);
add_relation(parent_key, solver_key, "Spline IK Solver Update");
-
- OperationKey done_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE);
- add_relation(solver_key, done_key, "IK Chain Result");
+ OperationKey bone_done_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ parchan->name,
+ DEG_OPCODE_BONE_DONE);
+ add_relation(solver_key, bone_done_key, "IK Chain Result");
}
parchan->flag |= POSE_DONE;
-
- OperationKey final_transforms_key(&object->id, DEG_NODE_TYPE_BONE, parchan->name, DEG_OPCODE_BONE_DONE);
- add_relation(solver_key, final_transforms_key, "Spline IK Solver Result");
-
+ OperationKey final_transforms_key(&object->id,
+ DEG_NODE_TYPE_BONE,
+ parchan->name,
+ DEG_OPCODE_BONE_DONE);
+ add_relation(
+ solver_key, final_transforms_key, "Spline IK Solver Result");
root_map->add_bone(parchan->name, rootchan->name);
-
- /* continue up chain, until we reach target number of items... */
+ /* TODO(sergey): This is an arbitrary value, which was just following
+ * old code convention. */
segcount++;
- if ((segcount == data->chainlen) || (segcount > 255)) break; /* 255 is weak */
+ if ((segcount == data->chainlen) || (segcount > 255)) {
+ break;
+ }
}
-
- OperationKey done_key(&object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
- add_relation(solver_key, done_key, "PoseEval Result-Bone Link");
+ OperationKey pose_done_key(
+ &object->id, DEG_NODE_TYPE_EVAL_POSE, DEG_OPCODE_POSE_DONE);
+ add_relation(solver_key, pose_done_key, "PoseEval Result-Bone Link");
}
/* Pose/Armature Bones Graph */
@@ -328,21 +361,19 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
add_relation(armature_key, pose_init_key, "Data dependency");
/* IK Solvers.
*
- * - These require separate processing steps are pose-level
- * to be executed between chains of bones (i.e. once the
- * base transforms of a bunch of bones is done)
+ * - These require separate processing steps are pose-level to be executed
+ * between chains of bones (i.e. once the base transforms of a bunch of
+ * bones is done).
*
- * - We build relations for these before the dependencies
- * between ops in the same component as it is necessary
- * to check whether such bones are in the same IK chain
- * (or else we get weird issues with either in-chain
- * references, or with bones being parented to IK'd bones)
+ * - We build relations for these before the dependencies between operations
+ * in the same component as it is necessary to check whether such bones
+ * are in the same IK chain (or else we get weird issues with either
+ * in-chain references, or with bones being parented to IK'd bones).
*
* Unsolved Issues:
* - Care is needed to ensure that multi-headed trees work out the same as
* in ik-tree building
- * - Animated chain-lengths are a problem...
- */
+ * - Animated chain-lengths are a problem. */
RootPChanMap root_map;
bool pose_depends_on_local_transform = false;
LISTBASE_FOREACH (bPoseChannel *, pchan, &object->pose->chanbase) {
@@ -352,15 +383,12 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
build_ik_pose(object, pchan, con, &root_map);
pose_depends_on_local_transform = true;
break;
-
case CONSTRAINT_TYPE_SPLINEIK:
build_splineik_pose(object, pchan, con, &root_map);
pose_depends_on_local_transform = true;
break;
-
/* Constraints which needs world's matrix for transform.
- * TODO(sergey): More constraints here?
- */
+ * TODO(sergey): More constraints here? */
case CONSTRAINT_TYPE_ROTLIKE:
case CONSTRAINT_TYPE_SIZELIKE:
case CONSTRAINT_TYPE_LOCLIKE:
@@ -368,17 +396,15 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
/* TODO(sergey): Add used space check. */
pose_depends_on_local_transform = true;
break;
-
default:
break;
}
}
}
- //root_map.print_debug();
+ // root_map.print_debug();
if (pose_depends_on_local_transform) {
/* TODO(sergey): Once partial updates are possible use relation between
- * object transform and solver itself in it's build function.
- */
+ * object transform and solver itself in it's build function. */
ComponentKey pose_key(&object->id, DEG_NODE_TYPE_EVAL_POSE);
ComponentKey local_transform_key(&object->id, DEG_NODE_TYPE_TRANSFORM);
add_relation(local_transform_key, pose_key, "Local Transforms");
@@ -403,16 +429,17 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
DEG_OPCODE_BONE_DONE);
pchan->flag &= ~POSE_DONE;
/* Pose init to bone local. */
- add_relation(pose_init_key, bone_local_key, "Pose Init - Bone Local");
+ add_relation(pose_init_key,
+ bone_local_key,
+ "Pose Init - Bone Local",
+ DEPSREL_FLAG_GODMODE);
/* Local to pose parenting operation. */
add_relation(bone_local_key, bone_pose_key, "Bone Local - Bone Pose");
/* Parent relation. */
if (pchan->parent != NULL) {
eDepsOperation_Code parent_key_opcode;
-
/* NOTE: this difference in handling allows us to prevent lockups
- * while ensuring correct poses for separate chains.
- */
+ * while ensuring correct poses for separate chains. */
if (root_map.has_common_root(pchan->name, pchan->parent->name)) {
parent_key_opcode = DEG_OPCODE_BONE_READY;
}
@@ -424,14 +451,16 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
DEG_NODE_TYPE_BONE,
pchan->parent->name,
parent_key_opcode);
- add_relation(parent_key, bone_pose_key, "Parent Bone -> Child Bone");
+ add_relation(
+ parent_key, bone_pose_key, "Parent Bone -> Child Bone");
}
/* Build constraints. */
if (pchan->constraints.first != NULL) {
/* Build relations for indirectly linked objects. */
BuilderWalkUserData data;
data.builder = this;
- BKE_constraints_id_loop(&pchan->constraints, constraint_walk, &data);
+ BKE_constraints_id_loop(
+ &pchan->constraints, constraint_walk, &data);
/* Constraints stack and constraint dependencies. */
build_constraints(&object->id,
DEG_NODE_TYPE_BONE,
@@ -446,8 +475,7 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
add_relation(bone_pose_key, constraints_key, "Constraints Stack");
/* Constraints -> ready/ */
/* TODO(sergey): When constraint stack is exploded, this step should
- * occur before the first IK solver.
- */
+ * occur before the first IK solver. */
add_relation(
constraints_key, bone_ready_key, "Constraints -> Ready");
}
@@ -458,12 +486,10 @@ void DepsgraphRelationBuilder::build_rig(Object *object)
/* Bone ready -> Bone done.
* NOTE: For bones without IK, this is all that's needed.
* For IK chains however, an additional rel is created from IK
- * to done, with transitive reduction removing this one..
- */
+ * to done, with transitive reduction removing this one. */
add_relation(bone_ready_key, bone_done_key, "Ready -> Done");
- /* assume that all bones must be done for the pose to be ready
- * (for deformers)
- */
+ /* Assume that all bones must be done for the pose to be ready
+ * (for deformers). */
add_relation(bone_done_key, pose_done_key, "PoseEval Result-Bone Link");
add_relation(bone_done_key, pose_cleanup_key, "Cleanup dependency");
/* Custom shape. */
diff --git a/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc b/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
index 8197fa116e6..ec1ea1e02b2 100644
--- a/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
+++ b/source/blender/depsgraph/intern/debug/deg_debug_relations_graphviz.cc
@@ -254,10 +254,14 @@ static void deg_debug_graphviz_relation_color(const DebugContext &ctx,
const DepsRelation *rel)
{
const char *color_default = "black";
- const char *color_error = "red4";
+ const char *color_cyclic = "red4"; /* The color of crime scene. */
+ const char *color_godmode = "blue4"; /* The color of beautiful sky. */
const char *color = color_default;
if (rel->flag & DEPSREL_FLAG_CYCLIC) {
- color = color_error;
+ color = color_cyclic;
+ }
+ else if (rel->flag & DEPSREL_FLAG_GODMODE) {
+ color = color_godmode;
}
deg_debug_fprintf(ctx, "%s", color);
}
diff --git a/source/blender/depsgraph/intern/depsgraph.cc b/source/blender/depsgraph/intern/depsgraph.cc
index 7f47dce9f47..6dd7ae97073 100644
--- a/source/blender/depsgraph/intern/depsgraph.cc
+++ b/source/blender/depsgraph/intern/depsgraph.cc
@@ -393,34 +393,40 @@ void Depsgraph::clear_id_nodes()
DepsRelation *Depsgraph::add_new_relation(OperationDepsNode *from,
OperationDepsNode *to,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
DepsRelation *rel = NULL;
if (check_unique) {
rel = check_nodes_connected(from, to, description);
}
if (rel != NULL) {
+ rel->flag |= flags;
return rel;
}
/* Create new relation, and add it to the graph. */
rel = OBJECT_GUARDED_NEW(DepsRelation, from, to, description);
+ rel->flag |= flags;
return rel;
}
/* Add new relation between two nodes */
DepsRelation *Depsgraph::add_new_relation(DepsNode *from, DepsNode *to,
const char *description,
- bool check_unique)
+ bool check_unique,
+ int flags)
{
DepsRelation *rel = NULL;
if (check_unique) {
rel = check_nodes_connected(from, to, description);
}
if (rel != NULL) {
+ rel->flag |= flags;
return rel;
}
/* Create new relation, and add it to the graph. */
rel = OBJECT_GUARDED_NEW(DepsRelation, from, to, description);
+ rel->flag |= flags;
return rel;
}
diff --git a/source/blender/depsgraph/intern/depsgraph.h b/source/blender/depsgraph/intern/depsgraph.h
index bbf1f883bde..fd45c482bb5 100644
--- a/source/blender/depsgraph/intern/depsgraph.h
+++ b/source/blender/depsgraph/intern/depsgraph.h
@@ -79,6 +79,8 @@ typedef enum eDepsRelation_Flag {
/* Only flush along the relation is update comes from a node which was
* affected by user input. */
DEPSREL_FLAG_FLUSH_USER_EDIT_ONLY = (1 << 2),
+ /* The relation can not be killed by the cyclic dependencies solver. */
+ DEPSREL_FLAG_GODMODE = (1 << 3),
} eDepsRelation_Flag;
/* B depends on A (A -> B) */
@@ -139,12 +141,14 @@ struct Depsgraph {
DepsRelation *add_new_relation(OperationDepsNode *from,
OperationDepsNode *to,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
DepsRelation *add_new_relation(DepsNode *from,
DepsNode *to,
const char *description,
- bool check_unique = false);
+ bool check_unique = false,
+ int flags = 0);
/* Check whether two nodes are connected by relation with given
* description. Description might be NULL to check ANY relation between
diff --git a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
index a86ea02d5e7..636b270fe83 100644
--- a/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
+++ b/source/blender/depsgraph/intern/eval/deg_eval_copy_on_write.cc
@@ -608,8 +608,6 @@ void update_special_pointers(const Depsgraph *depsgraph,
*/
Object *object_cow = (Object *)id_cow;
const Object *object_orig = (const Object *)id_orig;
- BLI_assert(object_cow->derivedFinal == NULL);
- BLI_assert(object_cow->derivedDeform == NULL);
object_cow->mode = object_orig->mode;
object_cow->sculpt = object_orig->sculpt;
if (object_cow->type == OB_MESH) {
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index be742868cd6..2097fb66c8b 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -105,6 +105,7 @@ set(SRC
engines/eevee/eevee_occlusion.c
engines/eevee/eevee_render.c
engines/eevee/eevee_screen_raytrace.c
+ engines/eevee/eevee_shaders.c
engines/eevee/eevee_subsurface.c
engines/eevee/eevee_temporal_sampling.c
engines/eevee/eevee_volumes.c
diff --git a/source/blender/draw/engines/eevee/eevee_effects.c b/source/blender/draw/engines/eevee/eevee_effects.c
index 687d5035ea2..48a73ccef18 100644
--- a/source/blender/draw/engines/eevee/eevee_effects.c
+++ b/source/blender/draw/engines/eevee/eevee_effects.c
@@ -52,9 +52,6 @@ static struct {
struct GPUShader *downsample_sh;
struct GPUShader *downsample_cube_sh;
- /* Velocity Resolve */
- struct GPUShader *velocity_resolve_sh;
-
/* Theses are just references, not actually allocated */
struct GPUTexture *depth_src;
struct GPUTexture *color_src;
@@ -66,25 +63,15 @@ static struct {
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_bsdf_common_lib_glsl[];
-extern char datatoc_effect_velocity_resolve_frag_glsl[];
extern char datatoc_effect_minmaxz_frag_glsl[];
extern char datatoc_effect_downsample_frag_glsl[];
extern char datatoc_effect_downsample_cube_frag_glsl[];
extern char datatoc_lightprobe_vert_glsl[];
extern char datatoc_lightprobe_geom_glsl[];
+
static void eevee_create_shader_downsample(void)
{
- char *frag_str = BLI_string_joinN(
- datatoc_common_uniforms_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_effect_velocity_resolve_frag_glsl);
-
- e_data.velocity_resolve_sh = DRW_shader_create_fullscreen(frag_str, NULL);
-
- MEM_freeN(frag_str);
-
e_data.downsample_sh = DRW_shader_create_fullscreen(datatoc_effect_downsample_frag_glsl, NULL);
e_data.downsample_cube_sh = DRW_shader_create(
datatoc_lightprobe_vert_glsl,
@@ -377,7 +364,7 @@ void EEVEE_effects_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
/* This pass compute camera motions to the non moving objects. */
psl->velocity_resolve = DRW_pass_create(
"Velocity Resolve", DRW_STATE_WRITE_COLOR);
- DRWShadingGroup *grp = DRW_shgroup_create(e_data.velocity_resolve_sh, psl->velocity_resolve);
+ DRWShadingGroup *grp = DRW_shgroup_create(EEVEE_shaders_velocity_resolve_sh_get(), psl->velocity_resolve);
DRW_shgroup_uniform_texture_ref(grp, "depthBuffer", &e_data.depth_src);
DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
DRW_shgroup_uniform_mat4(grp, "currPersinv", effects->velocity_curr_persinv);
@@ -576,8 +563,6 @@ void EEVEE_draw_effects(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data *vedata)
void EEVEE_effects_free(void)
{
- DRW_SHADER_FREE_SAFE(e_data.velocity_resolve_sh);
-
DRW_SHADER_FREE_SAFE(e_data.downsample_sh);
DRW_SHADER_FREE_SAFE(e_data.downsample_cube_sh);
diff --git a/source/blender/draw/engines/eevee/eevee_engine.c b/source/blender/draw/engines/eevee/eevee_engine.c
index e9d67b73a0d..aa2cf3fede3 100644
--- a/source/blender/draw/engines/eevee/eevee_engine.c
+++ b/source/blender/draw/engines/eevee/eevee_engine.c
@@ -436,6 +436,7 @@ static void eevee_render_to_image(void *vedata, RenderEngine *engine, struct Ren
static void eevee_engine_free(void)
{
+ EEVEE_shaders_free();
EEVEE_bloom_free();
EEVEE_depth_of_field_free();
EEVEE_effects_free();
@@ -447,7 +448,6 @@ static void eevee_engine_free(void)
EEVEE_occlusion_free();
EEVEE_screen_raytrace_free();
EEVEE_subsurface_free();
- EEVEE_temporal_sampling_free();
EEVEE_volumes_free();
}
diff --git a/source/blender/draw/engines/eevee/eevee_lightcache.c b/source/blender/draw/engines/eevee/eevee_lightcache.c
index 207179edd49..451e7174a94 100644
--- a/source/blender/draw/engines/eevee/eevee_lightcache.c
+++ b/source/blender/draw/engines/eevee/eevee_lightcache.c
@@ -940,8 +940,9 @@ static void eevee_lightbake_render_probe_sample(void *ved, void *user_data)
DRW_uniformbuffer_update(sldata->common_ubo, &sldata->common_data);
EEVEE_lightbake_render_scene(sldata, vedata, lbake->rt_fb, eprobe->position, prb->clipsta, prb->clipend);
- EEVEE_lightbake_filter_glossy(sldata, vedata, lbake->rt_color, lbake->store_fb, lbake->cube_offset,prb->intensity,
- lcache->mips_len, filter_quality, clamp);
+ EEVEE_lightbake_filter_glossy(
+ sldata, vedata, lbake->rt_color, lbake->store_fb, lbake->cube_offset, prb->intensity,
+ lcache->mips_len, filter_quality, clamp);
lcache->cube_len += 1;
diff --git a/source/blender/draw/engines/eevee/eevee_lightprobes.c b/source/blender/draw/engines/eevee/eevee_lightprobes.c
index 37276987f8d..0b4341f5cb9 100644
--- a/source/blender/draw/engines/eevee/eevee_lightprobes.c
+++ b/source/blender/draw/engines/eevee/eevee_lightprobes.c
@@ -54,20 +54,7 @@
#include "WM_api.h"
#include "WM_types.h"
-#define HAMMERSLEY_SIZE 1024
-
static struct {
- struct GPUShader *probe_default_sh;
- struct GPUShader *probe_default_studiolight_sh;
- struct GPUShader *probe_filter_glossy_sh;
- struct GPUShader *probe_filter_diffuse_sh;
- struct GPUShader *probe_filter_visibility_sh;
- struct GPUShader *probe_grid_fill_sh;
- struct GPUShader *probe_grid_display_sh;
- struct GPUShader *probe_planar_display_sh;
- struct GPUShader *probe_planar_downsample_sh;
- struct GPUShader *probe_cube_display_sh;
-
struct GPUTexture *hammersley;
struct GPUTexture *planar_pool_placeholder;
struct GPUTexture *depth_placeholder;
@@ -78,31 +65,6 @@ static struct {
struct GPUVertFormat *format_probe_display_planar;
} e_data = {NULL}; /* Engine data */
-extern char datatoc_background_vert_glsl[];
-extern char datatoc_default_world_frag_glsl[];
-extern char datatoc_lightprobe_filter_glossy_frag_glsl[];
-extern char datatoc_lightprobe_filter_diffuse_frag_glsl[];
-extern char datatoc_lightprobe_filter_visibility_frag_glsl[];
-extern char datatoc_lightprobe_geom_glsl[];
-extern char datatoc_lightprobe_vert_glsl[];
-extern char datatoc_lightprobe_planar_display_frag_glsl[];
-extern char datatoc_lightprobe_planar_display_vert_glsl[];
-extern char datatoc_lightprobe_planar_downsample_frag_glsl[];
-extern char datatoc_lightprobe_planar_downsample_geom_glsl[];
-extern char datatoc_lightprobe_planar_downsample_vert_glsl[];
-extern char datatoc_lightprobe_cube_display_frag_glsl[];
-extern char datatoc_lightprobe_cube_display_vert_glsl[];
-extern char datatoc_lightprobe_grid_display_frag_glsl[];
-extern char datatoc_lightprobe_grid_display_vert_glsl[];
-extern char datatoc_lightprobe_grid_fill_frag_glsl[];
-extern char datatoc_irradiance_lib_glsl[];
-extern char datatoc_lightprobe_lib_glsl[];
-extern char datatoc_octahedron_lib_glsl[];
-extern char datatoc_bsdf_common_lib_glsl[];
-extern char datatoc_common_uniforms_lib_glsl[];
-extern char datatoc_common_view_lib_glsl[];
-extern char datatoc_bsdf_sampling_lib_glsl[];
-
extern GlobalsUboStorage ts;
/* *********** FUNCTIONS *********** */
@@ -185,121 +147,6 @@ static void planar_pool_ensure_alloc(EEVEE_Data *vedata, int num_planar_ref)
}
}
-static void lightprobe_shaders_init(void)
-{
- const char *filter_defines = "#define HAMMERSLEY_SIZE " STRINGIFY(HAMMERSLEY_SIZE) "\n"
-#if defined(IRRADIANCE_SH_L2)
- "#define IRRADIANCE_SH_L2\n"
-#elif defined(IRRADIANCE_CUBEMAP)
- "#define IRRADIANCE_CUBEMAP\n"
-#elif defined(IRRADIANCE_HL2)
- "#define IRRADIANCE_HL2\n"
-#endif
- "#define NOISE_SIZE 64\n";
-
- char *shader_str = NULL;
- char *vert_str = NULL;
-
- shader_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_common_uniforms_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_bsdf_sampling_lib_glsl,
- datatoc_lightprobe_filter_glossy_frag_glsl);
-
- e_data.probe_filter_glossy_sh = DRW_shader_create(
- datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, shader_str, filter_defines);
-
- e_data.probe_default_sh = DRW_shader_create(
- datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, NULL);
-
- e_data.probe_default_studiolight_sh = DRW_shader_create(
- datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, "#define LOOKDEV\n");
-
- MEM_freeN(shader_str);
-
- shader_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_common_uniforms_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_bsdf_sampling_lib_glsl,
- datatoc_lightprobe_filter_diffuse_frag_glsl);
-
- e_data.probe_filter_diffuse_sh = DRW_shader_create_fullscreen(shader_str, filter_defines);
-
- MEM_freeN(shader_str);
-
- shader_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_common_uniforms_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_bsdf_sampling_lib_glsl,
- datatoc_lightprobe_filter_visibility_frag_glsl);
-
- e_data.probe_filter_visibility_sh = DRW_shader_create_fullscreen(shader_str, filter_defines);
-
- MEM_freeN(shader_str);
-
- shader_str = BLI_string_joinN(
- datatoc_octahedron_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_common_uniforms_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_irradiance_lib_glsl,
- datatoc_lightprobe_lib_glsl,
- datatoc_lightprobe_grid_display_frag_glsl);
-
- vert_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_lightprobe_grid_display_vert_glsl);
-
- e_data.probe_grid_display_sh = DRW_shader_create(vert_str, NULL, shader_str, filter_defines);
-
- MEM_freeN(vert_str);
- MEM_freeN(shader_str);
-
- e_data.probe_grid_fill_sh = DRW_shader_create_fullscreen(
- datatoc_lightprobe_grid_fill_frag_glsl, filter_defines);
-
- shader_str = BLI_string_joinN(
- datatoc_octahedron_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_common_uniforms_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_lightprobe_lib_glsl,
- datatoc_lightprobe_cube_display_frag_glsl);
-
- vert_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_lightprobe_cube_display_vert_glsl);
-
- e_data.probe_cube_display_sh = DRW_shader_create(vert_str, NULL, shader_str, SHADER_DEFINES);
-
- MEM_freeN(vert_str);
- MEM_freeN(shader_str);
-
- vert_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_lightprobe_planar_display_vert_glsl);
-
- shader_str = BLI_string_joinN(
- datatoc_common_view_lib_glsl,
- datatoc_lightprobe_planar_display_frag_glsl);
-
- e_data.probe_planar_display_sh = DRW_shader_create(vert_str, NULL, shader_str, NULL);
-
- MEM_freeN(vert_str);
- MEM_freeN(shader_str);
-
- e_data.probe_planar_downsample_sh = DRW_shader_create(
- datatoc_lightprobe_planar_downsample_vert_glsl,
- datatoc_lightprobe_planar_downsample_geom_glsl,
- datatoc_lightprobe_planar_downsample_frag_glsl,
- NULL);
-
- e_data.hammersley = create_hammersley_sample_texture(HAMMERSLEY_SIZE);
-}
-
void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
{
EEVEE_CommonUniformBuffer *common_data = &sldata->common_data;
@@ -308,8 +155,9 @@ void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
const DRWContextState *draw_ctx = DRW_context_state_get();
const Scene *scene_eval = DEG_get_evaluated_scene(draw_ctx->depsgraph);
- if (!e_data.probe_filter_glossy_sh) {
- lightprobe_shaders_init();
+ if (!e_data.hammersley) {
+ EEVEE_shaders_lightprobe_shaders_init();
+ e_data.hammersley = create_hammersley_sample_texture(HAMMERSLEY_SIZE);
}
/* Use fallback if we don't have gpu texture allocated an we cannot restore them. */
@@ -367,7 +215,9 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
{
psl->probe_glossy_compute = DRW_pass_create("LightProbe Glossy Compute", DRW_STATE_WRITE_COLOR);
- DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_glossy_sh, psl->probe_glossy_compute);
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ EEVEE_shaders_probe_filter_glossy_sh_get(), psl->probe_glossy_compute);
+
DRW_shgroup_uniform_float(grp, "intensityFac", &pinfo->intensity_fac, 1);
DRW_shgroup_uniform_float(grp, "sampleCount", &pinfo->samples_len, 1);
DRW_shgroup_uniform_float(grp, "invSampleCount", &pinfo->samples_len_inv, 1);
@@ -390,7 +240,8 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
{
psl->probe_diffuse_compute = DRW_pass_create("LightProbe Diffuse Compute", DRW_STATE_WRITE_COLOR);
- DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_diffuse_sh, psl->probe_diffuse_compute);
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ EEVEE_shaders_probe_filter_diffuse_sh_get(), psl->probe_diffuse_compute);
#ifdef IRRADIANCE_SH_L2
DRW_shgroup_uniform_int(grp, "probeSize", &pinfo->shres, 1);
#else
@@ -411,7 +262,7 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
{
psl->probe_visibility_compute = DRW_pass_create("LightProbe Visibility Compute", DRW_STATE_WRITE_COLOR);
- DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_filter_visibility_sh, psl->probe_visibility_compute);
+ DRWShadingGroup *grp = DRW_shgroup_create(EEVEE_shaders_probe_filter_visibility_sh_get(), psl->probe_visibility_compute);
DRW_shgroup_uniform_int(grp, "outputSize", &pinfo->shres, 1);
DRW_shgroup_uniform_float(grp, "visibilityRange", &pinfo->visibility_range, 1);
DRW_shgroup_uniform_float(grp, "visibilityBlur", &pinfo->visibility_blur, 1);
@@ -431,7 +282,9 @@ void EEVEE_lightbake_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata,
{
psl->probe_grid_fill = DRW_pass_create("LightProbe Grid Floodfill", DRW_STATE_WRITE_COLOR);
- DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_grid_fill_sh, psl->probe_grid_fill);
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ EEVEE_shaders_probe_grid_fill_sh_get(), psl->probe_grid_fill);
+
DRW_shgroup_uniform_texture_ref(grp, "irradianceGrid", &light_cache->grid_tx.tex);
struct GPUBatch *geom = DRW_cache_fullscreen_quad_get();
@@ -466,7 +319,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
float *col = ts.colorBackground;
/* LookDev */
- EEVEE_lookdev_cache_init(vedata, &grp, e_data.probe_default_studiolight_sh, psl->probe_background, wo, pinfo);
+ EEVEE_lookdev_cache_init(vedata, &grp, psl->probe_background, wo, pinfo);
/* END */
if (!grp && wo) {
col = &wo->horr;
@@ -499,7 +352,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
/* Fallback if shader fails or if not using nodetree. */
if (grp == NULL) {
- grp = DRW_shgroup_create(e_data.probe_default_sh, psl->probe_background);
+ grp = DRW_shgroup_create(EEVEE_shaders_probe_default_sh_get(), psl->probe_background);
DRW_shgroup_uniform_vec3(grp, "color", col, 1);
DRW_shgroup_uniform_float(grp, "backgroundAlpha", &stl->g_data->background_alpha, 1);
DRW_shgroup_call_add(grp, geom, NULL);
@@ -513,8 +366,9 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
/* Cube Display */
if (scene_eval->eevee.flag & SCE_EEVEE_SHOW_CUBEMAPS && lcache->cube_len > 1) {
int cube_len = lcache->cube_len - 1; /* don't count the world. */
- DRWShadingGroup *grp = DRW_shgroup_empty_tri_batch_create(e_data.probe_cube_display_sh,
- psl->probe_display, cube_len * 2);
+ DRWShadingGroup *grp = DRW_shgroup_empty_tri_batch_create(
+ EEVEE_shaders_probe_cube_display_sh_get(), psl->probe_display, cube_len * 2);
+
DRW_shgroup_uniform_texture_ref(grp, "probeCubes", &lcache->cube_tx.tex);
DRW_shgroup_uniform_block(grp, "probe_block", sldata->probe_ubo);
DRW_shgroup_uniform_block(grp, "common_block", sldata->common_ubo);
@@ -529,7 +383,9 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
if (scene_eval->eevee.flag & SCE_EEVEE_SHOW_IRRADIANCE) {
EEVEE_LightGrid *egrid = lcache->grid_data + 1;
for (int p = 1; p < lcache->grid_len; ++p, egrid++) {
- DRWShadingGroup *shgrp = DRW_shgroup_create(e_data.probe_grid_display_sh, psl->probe_display);
+ DRWShadingGroup *shgrp = DRW_shgroup_create(
+ EEVEE_shaders_probe_grid_display_sh_get(), psl->probe_display);
+
DRW_shgroup_uniform_int(shgrp, "offset", &egrid->offset, 1);
DRW_shgroup_uniform_ivec3(shgrp, "grid_resolution", egrid->resolution, 1);
DRW_shgroup_uniform_vec3(shgrp, "corner", egrid->corner, 1);
@@ -556,7 +412,7 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
});
DRWShadingGroup *grp = DRW_shgroup_instance_create(
- e_data.probe_planar_display_sh,
+ EEVEE_shaders_probe_planar_display_sh_get(),
psl->probe_display,
DRW_cache_quad_get(),
e_data.format_probe_display_planar);
@@ -570,7 +426,9 @@ void EEVEE_lightprobes_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedat
{
psl->probe_planar_downsample_ps = DRW_pass_create("LightProbe Planar Downsample", DRW_STATE_WRITE_COLOR);
- DRWShadingGroup *grp = DRW_shgroup_create(e_data.probe_planar_downsample_sh, psl->probe_planar_downsample_ps);
+ DRWShadingGroup *grp = DRW_shgroup_create(
+ EEVEE_shaders_probe_planar_downsample_sh_get(), psl->probe_planar_downsample_ps);
+
DRW_shgroup_uniform_texture_ref(grp, "source", &txl->planar_pool);
DRW_shgroup_uniform_float(grp, "fireflyFactor", &sldata->common_data.ssr_firefly_fac, 1);
DRW_shgroup_call_instances_add(grp, DRW_cache_fullscreen_quad_get(), NULL, (uint *)&pinfo->num_planar);
@@ -788,7 +646,7 @@ void EEVEE_lightprobes_planar_data_from_object(Object *ob, EEVEE_PlanarReflectio
eplanar->clip_edge_y_neg = dot_v3v3(eplanar->clip_vec_y, vec);
/* Facing factors */
- float max_angle = max_ff(1e-2f, probe->falloff) * M_PI * 0.5f;
+ float max_angle = max_ff(1e-2f, 1.0f - probe->falloff) * M_PI * 0.5f;
float min_angle = 0.0f;
eplanar->facing_scale = 1.0f / max_ff(1e-8f, cosf(min_angle) - cosf(max_angle));
eplanar->facing_bias = -min_ff(1.0f - 1e-8f, cosf(max_angle)) * eplanar->facing_scale;
@@ -1374,16 +1232,6 @@ void EEVEE_lightprobes_free(void)
{
MEM_SAFE_FREE(e_data.format_probe_display_cube);
MEM_SAFE_FREE(e_data.format_probe_display_planar);
- DRW_SHADER_FREE_SAFE(e_data.probe_default_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_default_studiolight_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_filter_glossy_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_filter_diffuse_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_filter_visibility_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_grid_fill_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_grid_display_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_planar_display_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_planar_downsample_sh);
- DRW_SHADER_FREE_SAFE(e_data.probe_cube_display_sh);
DRW_TEXTURE_FREE_SAFE(e_data.hammersley);
DRW_TEXTURE_FREE_SAFE(e_data.planar_pool_placeholder);
DRW_TEXTURE_FREE_SAFE(e_data.depth_placeholder);
diff --git a/source/blender/draw/engines/eevee/eevee_lookdev.c b/source/blender/draw/engines/eevee/eevee_lookdev.c
index 49cf468711e..e46526ce6af 100644
--- a/source/blender/draw/engines/eevee/eevee_lookdev.c
+++ b/source/blender/draw/engines/eevee/eevee_lookdev.c
@@ -54,7 +54,7 @@ static void eevee_lookdev_lightcache_delete(EEVEE_Data *vedata)
}
void EEVEE_lookdev_cache_init(
- EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass,
+ EEVEE_Data *vedata, DRWShadingGroup **grp, DRWPass *pass,
World *UNUSED(world), EEVEE_LightProbesInfo *pinfo)
{
EEVEE_StorageList *stl = vedata->stl;
@@ -64,6 +64,7 @@ void EEVEE_lookdev_cache_init(
if (LOOK_DEV_STUDIO_LIGHT_ENABLED(v3d)) {
StudioLight *sl = BKE_studiolight_find(v3d->shading.studio_light, STUDIOLIGHT_ORIENTATIONS_MATERIAL_MODE);
if (sl && (sl->flag & STUDIOLIGHT_ORIENTATION_WORLD)) {
+ GPUShader *shader = EEVEE_shaders_default_studiolight_sh_get();
struct GPUBatch *geom = DRW_cache_fullscreen_quad_get();
GPUTexture *tex = NULL;
@@ -122,12 +123,13 @@ void EEVEE_lookdev_cache_init(
if (!pinfo) {
/* Do not fadeout when doing probe rendering, only when drawing the background */
DRW_shgroup_uniform_float(*grp, "studioLightBackground", &v3d->shading.studiolight_background, 1);
- BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_IRRADIANCE_GPUTEXTURE);
- tex = sl->equirectangular_irradiance_gputexture;
+ BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_IRRADIANCE_GPUTEXTURE);
+ tex = sl->equirect_irradiance_gputexture;
}
else {
- BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE);
- tex = sl->equirectangular_radiance_gputexture;
+ DRW_shgroup_uniform_float_copy(*grp, "studioLightBackground", 1.0f);
+ BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE);
+ tex = sl->equirect_radiance_gputexture;
}
DRW_shgroup_uniform_texture(*grp, "image", tex);
@@ -162,6 +164,25 @@ void EEVEE_lookdev_draw_background(EEVEE_Data *vedata)
RegionView3D *rv3d = draw_ctx->rv3d;
ARegion *ar = draw_ctx->ar;
+ const float *viewport_size = DRW_viewport_size_get();
+ rcti rect;
+ ED_region_visible_rect(draw_ctx->ar, &rect);
+
+ const float viewport_size_target[2] = {
+ viewport_size[0] / 4,
+ viewport_size[1] / 4,
+ };
+ const int viewport_inset[2] = {
+ max_ii(viewport_size_target[0], 300),
+ max_ii(viewport_size_target[0], 300) / 2, /* intentionally use 'x' here for 'y' value. */
+ };
+
+ /* minimum size for preview spheres viewport */
+ const float aspect[2] = {
+ viewport_inset[0] / viewport_size_target[0],
+ viewport_inset[1] / viewport_size_target[1],
+ };
+
BKE_camera_params_from_view3d(&params, draw_ctx->depsgraph, v3d, rv3d);
params.is_ortho = true;
params.ortho_scale = 3.0f;
@@ -172,15 +193,9 @@ void EEVEE_lookdev_draw_background(EEVEE_Data *vedata)
params.shifty = 0.0f;
params.clipsta = 0.001f;
params.clipend = 20.0f;
- BKE_camera_params_compute_viewplane(&params, ar->winx, ar->winy, 1.0f, 1.0f);
+ BKE_camera_params_compute_viewplane(&params, ar->winx, ar->winy, aspect[0], aspect[1]);
BKE_camera_params_compute_matrix(&params);
- const float *viewport_size = DRW_viewport_size_get();
- rcti rect;
- ED_region_visible_rect(draw_ctx->ar, &rect);
- int viewport_inset_x = viewport_size[0] / 4;
- int viewport_inset_y = viewport_size[1] / 4;
-
EEVEE_CommonUniformBuffer *common = &sldata->common_data;
common->la_num_light = 0;
common->prb_num_planar = 0;
@@ -209,12 +224,12 @@ void EEVEE_lookdev_draw_background(EEVEE_Data *vedata)
GPUFrameBuffer *fb = effects->final_fb;
GPU_framebuffer_bind(fb);
- GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset_x, rect.ymin, viewport_inset_x, viewport_inset_y);
+ GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset[0], rect.ymin, viewport_inset[0], viewport_inset[1]);
DRW_draw_pass(psl->lookdev_pass);
fb = dfbl->depth_only_fb;
GPU_framebuffer_bind(fb);
- GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset_x, rect.ymin, viewport_inset_x, viewport_inset_y);
+ GPU_framebuffer_viewport_set(fb, rect.xmax - viewport_inset[0], rect.ymin, viewport_inset[0], viewport_inset[1]);
DRW_draw_pass(psl->lookdev_pass);
DRW_viewport_matrix_override_unset_all();
diff --git a/source/blender/draw/engines/eevee/eevee_materials.c b/source/blender/draw/engines/eevee/eevee_materials.c
index 78d5231a793..a87b4626628 100644
--- a/source/blender/draw/engines/eevee/eevee_materials.c
+++ b/source/blender/draw/engines/eevee/eevee_materials.c
@@ -58,7 +58,6 @@ static struct {
struct GPUShader *default_hair_prepass_clip_sh;
struct GPUShader *default_lit[VAR_MAT_MAX];
struct GPUShader *default_background;
- struct GPUShader *default_studiolight_background;
struct GPUShader *update_noise_sh;
/* 64*64 array texture containing all LUTs and other utilitarian arrays.
@@ -597,10 +596,6 @@ void EEVEE_materials_init(EEVEE_ViewLayerData *sldata, EEVEE_StorageList *stl, E
datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl,
NULL);
- e_data.default_studiolight_background = DRW_shader_create(
- datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl,
- "#define LOOKDEV\n");
-
e_data.default_prepass_sh = DRW_shader_create(
datatoc_prepass_vert_glsl, NULL, datatoc_prepass_frag_glsl,
NULL);
@@ -969,7 +964,7 @@ void EEVEE_materials_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata)
float *col = ts.colorBackground;
/* LookDev */
- EEVEE_lookdev_cache_init(vedata, &grp, e_data.default_studiolight_background, psl->background_pass, wo, NULL);
+ EEVEE_lookdev_cache_init(vedata, &grp, psl->background_pass, wo, NULL);
/* END */
if (!grp && wo) {
@@ -1799,7 +1794,6 @@ void EEVEE_materials_free(void)
DRW_SHADER_FREE_SAFE(e_data.default_prepass_sh);
DRW_SHADER_FREE_SAFE(e_data.default_prepass_clip_sh);
DRW_SHADER_FREE_SAFE(e_data.default_background);
- DRW_SHADER_FREE_SAFE(e_data.default_studiolight_background);
DRW_SHADER_FREE_SAFE(e_data.update_noise_sh);
DRW_TEXTURE_FREE_SAFE(e_data.util_tex);
DRW_TEXTURE_FREE_SAFE(e_data.noise_tex);
diff --git a/source/blender/draw/engines/eevee/eevee_private.h b/source/blender/draw/engines/eevee/eevee_private.h
index 5a87f782151..451b1013103 100644
--- a/source/blender/draw/engines/eevee/eevee_private.h
+++ b/source/blender/draw/engines/eevee/eevee_private.h
@@ -52,6 +52,7 @@ extern struct DrawEngineType draw_engine_eevee_type;
// #define IRRADIANCE_SH_L2
// #define IRRADIANCE_CUBEMAP
#define IRRADIANCE_HL2
+#define HAMMERSLEY_SIZE 1024
#if defined(IRRADIANCE_SH_L2)
# define SHADER_IRRADIANCE "#define IRRADIANCE_SH_L2\n"
@@ -871,6 +872,22 @@ void EEVEE_draw_shadows(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
void EEVEE_lights_free(void);
+/* eevee_shaders.c */
+void EEVEE_shaders_lightprobe_shaders_init(void);
+struct GPUShader *EEVEE_shaders_probe_filter_glossy_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_default_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_filter_diffuse_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_filter_visibility_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_grid_fill_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_planar_downsample_sh_get(void);
+struct GPUShader *EEVEE_shaders_default_studiolight_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_cube_display_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_grid_display_sh_get(void);
+struct GPUShader *EEVEE_shaders_probe_planar_display_sh_get(void);
+struct GPUShader *EEVEE_shaders_velocity_resolve_sh_get(void);
+struct GPUShader *EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects);
+void EEVEE_shaders_free(void);
+
/* eevee_lightprobes.c */
bool EEVEE_lightprobes_obj_visibility_cb(bool vis_in, void *user_data);
void EEVEE_lightprobes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
@@ -958,7 +975,6 @@ void EEVEE_temporal_sampling_matrices_calc(
EEVEE_EffectsInfo *effects, float viewmat[4][4], float persmat[4][4], const double ht_point[2]);
void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata);
-void EEVEE_temporal_sampling_free(void);
/* eevee_volumes.c */
int EEVEE_volumes_init(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
@@ -987,7 +1003,7 @@ void EEVEE_render_draw(EEVEE_Data *vedata, struct RenderEngine *engine, struct R
void EEVEE_render_update_passes(struct RenderEngine *engine, struct Scene *scene, struct ViewLayer *view_layer);
/** eevee_lookdev.c */
-void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, GPUShader *shader, DRWPass *pass, struct World *world, EEVEE_LightProbesInfo *pinfo);
+void EEVEE_lookdev_cache_init(EEVEE_Data *vedata, DRWShadingGroup **grp, DRWPass *pass, struct World *world, EEVEE_LightProbesInfo *pinfo);
void EEVEE_lookdev_draw_background(EEVEE_Data *vedata);
/** eevee_engine.c */
diff --git a/source/blender/draw/engines/eevee/eevee_shaders.c b/source/blender/draw/engines/eevee/eevee_shaders.c
new file mode 100644
index 00000000000..6fbd0ae5173
--- /dev/null
+++ b/source/blender/draw/engines/eevee/eevee_shaders.c
@@ -0,0 +1,320 @@
+/*
+ * Copyright 2016, Blender Foundation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Institute
+ *
+ */
+
+/** \file eevee_shaders.c
+ * \ingroup draw_engine
+ */
+
+#include "DRW_render.h"
+
+#include "BLI_string_utils.h"
+
+#include "MEM_guardedalloc.h"
+
+#include "GPU_shader.h"
+
+#include "eevee_private.h"
+
+const char *filter_defines = "#define HAMMERSLEY_SIZE " STRINGIFY(HAMMERSLEY_SIZE) "\n"
+#if defined(IRRADIANCE_SH_L2)
+ "#define IRRADIANCE_SH_L2\n"
+#elif defined(IRRADIANCE_CUBEMAP)
+ "#define IRRADIANCE_CUBEMAP\n"
+#elif defined(IRRADIANCE_HL2)
+ "#define IRRADIANCE_HL2\n"
+#endif
+ "#define NOISE_SIZE 64\n";
+
+static struct {
+ /* Probes */
+ struct GPUShader *probe_default_sh;
+ struct GPUShader *probe_default_studiolight_sh;
+ struct GPUShader *probe_grid_display_sh;
+ struct GPUShader *probe_cube_display_sh;
+ struct GPUShader *probe_planar_display_sh;
+ struct GPUShader *probe_filter_glossy_sh;
+ struct GPUShader *probe_filter_diffuse_sh;
+ struct GPUShader *probe_filter_visibility_sh;
+ struct GPUShader *probe_grid_fill_sh;
+ struct GPUShader *probe_planar_downsample_sh;
+
+ /* Velocity Resolve */
+ struct GPUShader *velocity_resolve_sh;
+
+ /* Temporal Anti Aliasing */
+ struct GPUShader *taa_resolve_sh;
+ struct GPUShader *taa_resolve_reproject_sh;
+
+} e_data = {NULL}; /* Engine data */
+
+extern char datatoc_bsdf_common_lib_glsl[];
+extern char datatoc_bsdf_sampling_lib_glsl[];
+extern char datatoc_common_uniforms_lib_glsl[];
+extern char datatoc_common_view_lib_glsl[];
+
+extern char datatoc_background_vert_glsl[];
+extern char datatoc_default_world_frag_glsl[];
+extern char datatoc_lightprobe_geom_glsl[];
+extern char datatoc_lightprobe_vert_glsl[];
+extern char datatoc_lightprobe_cube_display_frag_glsl[];
+extern char datatoc_lightprobe_cube_display_vert_glsl[];
+extern char datatoc_lightprobe_filter_diffuse_frag_glsl[];
+extern char datatoc_lightprobe_filter_glossy_frag_glsl[];
+extern char datatoc_lightprobe_filter_visibility_frag_glsl[];
+extern char datatoc_lightprobe_grid_display_frag_glsl[];
+extern char datatoc_lightprobe_grid_display_vert_glsl[];
+extern char datatoc_lightprobe_grid_fill_frag_glsl[];
+extern char datatoc_lightprobe_planar_display_frag_glsl[];
+extern char datatoc_lightprobe_planar_display_vert_glsl[];
+extern char datatoc_lightprobe_planar_downsample_frag_glsl[];
+extern char datatoc_lightprobe_planar_downsample_geom_glsl[];
+extern char datatoc_lightprobe_planar_downsample_vert_glsl[];
+extern char datatoc_irradiance_lib_glsl[];
+extern char datatoc_lightprobe_lib_glsl[];
+extern char datatoc_octahedron_lib_glsl[];
+
+/* Velocity Resolve */
+extern char datatoc_effect_velocity_resolve_frag_glsl[];
+
+/* Temporal Sampling */
+extern char datatoc_effect_temporal_aa_glsl[];
+
+extern GlobalsUboStorage ts;
+
+/* *********** FUNCTIONS *********** */
+
+void EEVEE_shaders_lightprobe_shaders_init(void)
+{
+ BLI_assert(e_data.probe_filter_glossy_sh == NULL);
+ char *shader_str = NULL;
+
+ shader_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_lightprobe_filter_glossy_frag_glsl);
+
+ e_data.probe_filter_glossy_sh = DRW_shader_create(
+ datatoc_lightprobe_vert_glsl, datatoc_lightprobe_geom_glsl, shader_str, filter_defines);
+
+ e_data.probe_default_sh = DRW_shader_create(
+ datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, NULL);
+
+ MEM_freeN(shader_str);
+
+ shader_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_lightprobe_filter_diffuse_frag_glsl);
+
+ e_data.probe_filter_diffuse_sh = DRW_shader_create_fullscreen(shader_str, filter_defines);
+
+ MEM_freeN(shader_str);
+
+ shader_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_bsdf_sampling_lib_glsl,
+ datatoc_lightprobe_filter_visibility_frag_glsl);
+
+ e_data.probe_filter_visibility_sh = DRW_shader_create_fullscreen(shader_str, filter_defines);
+
+ MEM_freeN(shader_str);
+
+ e_data.probe_grid_fill_sh = DRW_shader_create_fullscreen(
+ datatoc_lightprobe_grid_fill_frag_glsl, filter_defines);
+
+ e_data.probe_planar_downsample_sh = DRW_shader_create(
+ datatoc_lightprobe_planar_downsample_vert_glsl,
+ datatoc_lightprobe_planar_downsample_geom_glsl,
+ datatoc_lightprobe_planar_downsample_frag_glsl,
+ NULL);
+}
+
+GPUShader *EEVEE_shaders_probe_filter_glossy_sh_get(void)
+{
+ return e_data.probe_filter_glossy_sh;
+}
+
+GPUShader *EEVEE_shaders_probe_default_sh_get(void)
+{
+ return e_data.probe_default_sh;
+}
+
+GPUShader *EEVEE_shaders_probe_filter_diffuse_sh_get(void)
+{
+ return e_data.probe_filter_diffuse_sh;
+}
+
+GPUShader *EEVEE_shaders_probe_filter_visibility_sh_get(void)
+{
+ return e_data.probe_filter_visibility_sh;
+}
+
+GPUShader *EEVEE_shaders_probe_grid_fill_sh_get(void)
+{
+ return e_data.probe_grid_fill_sh;
+}
+
+GPUShader *EEVEE_shaders_probe_planar_downsample_sh_get(void)
+{
+ return e_data.probe_planar_downsample_sh;
+}
+
+GPUShader *EEVEE_shaders_default_studiolight_sh_get(void)
+{
+ if (e_data.probe_default_studiolight_sh == NULL) {
+ e_data.probe_default_studiolight_sh = DRW_shader_create(
+ datatoc_background_vert_glsl, NULL, datatoc_default_world_frag_glsl, "#define LOOKDEV\n");
+ }
+ return e_data.probe_default_studiolight_sh;
+}
+
+GPUShader *EEVEE_shaders_probe_cube_display_sh_get(void)
+{
+ if (e_data.probe_cube_display_sh == NULL) {
+ char *shader_str = BLI_string_joinN(
+ datatoc_octahedron_lib_glsl,
+ datatoc_common_view_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_lightprobe_cube_display_frag_glsl);
+
+ char *vert_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_lightprobe_cube_display_vert_glsl);
+
+ e_data.probe_cube_display_sh = DRW_shader_create(vert_str, NULL, shader_str, SHADER_DEFINES);
+
+ MEM_freeN(vert_str);
+ MEM_freeN(shader_str);
+ }
+ return e_data.probe_cube_display_sh;
+}
+
+ GPUShader *EEVEE_shaders_probe_grid_display_sh_get(void)
+{
+ if (e_data.probe_grid_display_sh == NULL ) {
+ char *shader_str = BLI_string_joinN(
+ datatoc_octahedron_lib_glsl,
+ datatoc_common_view_lib_glsl,
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_irradiance_lib_glsl,
+ datatoc_lightprobe_lib_glsl,
+ datatoc_lightprobe_grid_display_frag_glsl);
+
+ char *vert_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_lightprobe_grid_display_vert_glsl);
+
+ e_data.probe_grid_display_sh = DRW_shader_create(vert_str, NULL, shader_str, filter_defines);
+
+ MEM_freeN(vert_str);
+ MEM_freeN(shader_str);
+ }
+ return e_data.probe_grid_display_sh;
+}
+
+ GPUShader *EEVEE_shaders_probe_planar_display_sh_get(void)
+{
+ if (e_data.probe_planar_display_sh == NULL) {
+ char *vert_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_lightprobe_planar_display_vert_glsl);
+
+ char *shader_str = BLI_string_joinN(
+ datatoc_common_view_lib_glsl,
+ datatoc_lightprobe_planar_display_frag_glsl);
+
+ e_data.probe_planar_display_sh = DRW_shader_create(vert_str, NULL, shader_str, NULL);
+
+ MEM_freeN(vert_str);
+ MEM_freeN(shader_str);
+ }
+ return e_data.probe_planar_display_sh;
+}
+
+GPUShader *EEVEE_shaders_velocity_resolve_sh_get(void)
+{
+ if (e_data.velocity_resolve_sh == NULL) {
+ char *frag_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_common_view_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_effect_velocity_resolve_frag_glsl);
+
+ e_data.velocity_resolve_sh = DRW_shader_create_fullscreen(frag_str, NULL);
+
+ MEM_freeN(frag_str);
+ }
+ return e_data.velocity_resolve_sh;
+}
+
+GPUShader *EEVEE_shaders_taa_resolve_sh_get(EEVEE_EffectsFlag enabled_effects)
+{
+ GPUShader **sh;
+ const char *define = NULL;
+ if (enabled_effects & EFFECT_TAA_REPROJECT) {
+ sh = &e_data.taa_resolve_reproject_sh;
+ define = "#define USE_REPROJECTION\n";
+
+
+
+ }
+ else {
+ sh = &e_data.taa_resolve_sh;
+ }
+ if (*sh == NULL) {
+ char *frag_str = BLI_string_joinN(
+ datatoc_common_uniforms_lib_glsl,
+ datatoc_common_view_lib_glsl,
+ datatoc_bsdf_common_lib_glsl,
+ datatoc_effect_temporal_aa_glsl);
+
+ *sh = DRW_shader_create_fullscreen(frag_str, define);
+ MEM_freeN(frag_str);
+ }
+
+ return *sh;
+}
+
+void EEVEE_shaders_free(void)
+{
+ DRW_SHADER_FREE_SAFE(e_data.probe_default_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_filter_glossy_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_filter_diffuse_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_filter_visibility_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_grid_fill_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_planar_downsample_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_default_studiolight_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_grid_display_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_cube_display_sh);
+ DRW_SHADER_FREE_SAFE(e_data.probe_planar_display_sh);
+ DRW_SHADER_FREE_SAFE(e_data.velocity_resolve_sh);
+ DRW_SHADER_FREE_SAFE(e_data.taa_resolve_sh);
+ DRW_SHADER_FREE_SAFE(e_data.taa_resolve_reproject_sh);
+}
diff --git a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
index 6216b28329b..deac0b89b10 100644
--- a/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
+++ b/source/blender/draw/engines/eevee/eevee_temporal_sampling.c
@@ -40,32 +40,14 @@
#define FILTER_CDF_TABLE_SIZE 512
static struct {
- /* Temporal Anti Aliasing */
- struct GPUShader *taa_resolve_sh;
- struct GPUShader *taa_resolve_reproject_sh;
-
/* Pixel filter table: Only blackman-harris for now. */
+ bool inited;
float inverted_cdf[FILTER_CDF_TABLE_SIZE];
-} e_data = {NULL}; /* Engine data */
+} e_data = {false}; /* Engine data */
extern char datatoc_common_uniforms_lib_glsl[];
extern char datatoc_common_view_lib_glsl[];
extern char datatoc_bsdf_common_lib_glsl[];
-extern char datatoc_effect_temporal_aa_glsl[];
-
-static void eevee_create_shader_temporal_sampling(void)
-{
- char *frag_str = BLI_string_joinN(
- datatoc_common_uniforms_lib_glsl,
- datatoc_common_view_lib_glsl,
- datatoc_bsdf_common_lib_glsl,
- datatoc_effect_temporal_aa_glsl);
-
- e_data.taa_resolve_sh = DRW_shader_create_fullscreen(frag_str, NULL);
- e_data.taa_resolve_reproject_sh = DRW_shader_create_fullscreen(frag_str, "#define USE_REPROJECTION\n");
-
- MEM_freeN(frag_str);
-}
static float UNUSED_FUNCTION(filter_box)(float UNUSED(x))
{
@@ -149,6 +131,7 @@ static void eevee_create_cdf_table_temporal_sampling(void)
}
MEM_freeN(cdf_table);
+ e_data.inited = true;
}
void EEVEE_temporal_sampling_matrices_calc(
@@ -187,8 +170,7 @@ int EEVEE_temporal_sampling_init(EEVEE_ViewLayerData *UNUSED(sldata), EEVEE_Data
EEVEE_EffectsInfo *effects = stl->effects;
int repro_flag = 0;
- if (!e_data.taa_resolve_sh) {
- eevee_create_shader_temporal_sampling();
+ if (!e_data.inited) {
eevee_create_cdf_table_temporal_sampling();
}
@@ -290,9 +272,7 @@ void EEVEE_temporal_sampling_cache_init(EEVEE_ViewLayerData *sldata, EEVEE_Data
EEVEE_EffectsInfo *effects = stl->effects;
if ((effects->enabled_effects & (EFFECT_TAA | EFFECT_TAA_REPROJECT)) != 0) {
- struct GPUShader *sh = (effects->enabled_effects & EFFECT_TAA_REPROJECT)
- ? e_data.taa_resolve_reproject_sh
- : e_data.taa_resolve_sh;
+ struct GPUShader *sh = EEVEE_shaders_taa_resolve_sh_get(effects->enabled_effects);
psl->taa_resolve = DRW_pass_create("Temporal AA Resolve", DRW_STATE_WRITE_COLOR);
DRWShadingGroup *grp = DRW_shgroup_create(sh, psl->taa_resolve);
@@ -378,9 +358,3 @@ void EEVEE_temporal_sampling_draw(EEVEE_Data *vedata)
}
}
}
-
-void EEVEE_temporal_sampling_free(void)
-{
- DRW_SHADER_FREE_SAFE(e_data.taa_resolve_sh);
- DRW_SHADER_FREE_SAFE(e_data.taa_resolve_reproject_sh);
-}
diff --git a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
index bda3c648bb6..40c6bb1f1e0 100644
--- a/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
+++ b/source/blender/draw/engines/eevee/shaders/ambient_occlusion_lib.glsl
@@ -186,7 +186,7 @@ void integrate_slice(vec3 normal, vec2 t_phi, vec2 horizons, inout float visibil
}
void gtao_deferred(
- vec3 normal, vec3 position, vec4 noise, float frag_depth, out float visibility, out vec3 bent_normal)
+ vec3 normal, vec4 noise, float frag_depth, out float visibility, out vec3 bent_normal)
{
/* Fetch early, hide latency! */
vec4 horizons = texelFetch(horizonBuffer, ivec2(gl_FragCoord.xy), 0);
@@ -194,7 +194,6 @@ void gtao_deferred(
vec4 dirs;
dirs.xy = get_ao_dir(noise.x * 0.5);
dirs.zw = get_ao_dir(noise.x * 0.5 + 0.5);
- vec2 uvs = get_uvs_from_view(position);
bent_normal = vec3(0.0);
visibility = 0.0;
@@ -252,7 +251,7 @@ float occlusion_compute(vec3 N, vec3 vpos, float user_occlusion, vec4 rand, out
vec3 vnor = mat3(ViewMatrix) * N;
#ifdef ENABLE_DEFERED_AO
- gtao_deferred(vnor, vpos, rand, gl_FragCoord.z, visibility, bent_normal);
+ gtao_deferred(vnor, rand, gl_FragCoord.z, visibility, bent_normal);
#else
gtao(vnor, vpos, rand, visibility, bent_normal);
#endif
diff --git a/source/blender/draw/engines/eevee/shaders/background_vert.glsl b/source/blender/draw/engines/eevee/shaders/background_vert.glsl
index c849a577316..380d6d96491 100644
--- a/source/blender/draw/engines/eevee/shaders/background_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/background_vert.glsl
@@ -1,8 +1,6 @@
in vec2 pos;
-out vec3 varposition;
-out vec3 varnormal;
out vec3 viewPosition;
#ifndef VOLUMETRICS
@@ -15,13 +13,12 @@ out vec3 viewNormal;
void main()
{
gl_Position = vec4(pos, 1.0, 1.0);
- varposition = viewPosition = vec3(pos, -1.0);
- varnormal = normalize(-varposition);
+ viewPosition = vec3(pos, -1.0);
#ifndef VOLUMETRICS
/* Not used in practice but needed to avoid compilation errors. */
worldPosition = viewPosition;
- worldNormal = viewNormal = varnormal;
+ worldNormal = viewNormal = normalize(-viewPosition);
#endif
#ifdef ATTRIB
diff --git a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
index 1f0ef76da0c..126f2d9610a 100644
--- a/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/default_world_frag.glsl
@@ -1,27 +1,27 @@
-#define M_PI 3.14159265358979323846
-
uniform float backgroundAlpha;
+uniform vec3 color;
+
+out vec4 FragColor;
+
+#ifdef LOOKDEV
uniform mat4 ProjectionMatrix;
uniform mat4 ProjectionMatrixInverse;
uniform mat4 ViewMatrixInverse;
-#ifdef LOOKDEV
uniform mat3 StudioLightMatrix;
uniform sampler2D image;
uniform float studioLightBackground = 1.0;
in vec3 viewPosition;
-#endif
-uniform vec3 color;
-out vec4 FragColor;
+#define M_PI 3.14159265358979323846
-void background_transform_to_world(vec3 viewvec, out vec3 worldvec)
+vec3 background_transform_to_world(vec3 viewvec)
{
vec4 v = (ProjectionMatrix[3][3] == 0.0) ? vec4(viewvec, 1.0) : vec4(0.0, 0.0, 1.0, 1.0);
vec4 co_homogenous = (ProjectionMatrixInverse * v);
vec4 co = vec4(co_homogenous.xyz / co_homogenous.w, 0.0);
- worldvec = (ViewMatrixInverse * co).xyz;
+ return (ViewMatrixInverse * co).xyz;
}
float hypot(float x, float y)
@@ -29,7 +29,7 @@ float hypot(float x, float y)
return sqrt(x * x + y * y);
}
-void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color)
+vec4 node_tex_environment_equirectangular(vec3 co, sampler2D ima)
{
vec3 nco = normalize(co);
float u = -atan(nco.y, nco.x) / (2.0 * M_PI) + 0.5;
@@ -44,19 +44,19 @@ void node_tex_environment_equirectangular(vec3 co, sampler2D ima, out vec4 color
/* This is caused by texture filtering, since uv don't have smooth derivatives
* at u = 0 or 2PI, hardware filtering is using the smallest mipmap for certain
* texels. So we force the highest mipmap and don't do anisotropic filtering. */
- color = textureLod(ima, vec2(u, v), 0.0);
+ return textureLod(ima, vec2(u, v), 0.0);
}
+#endif
void main() {
+ vec3 background_color;
#ifdef LOOKDEV
- vec3 worldvec;
- vec4 background_color;
- background_transform_to_world(viewPosition, worldvec);
- node_tex_environment_equirectangular(StudioLightMatrix * worldvec, image, background_color);
- background_color.rgb = mix(color, background_color.rgb, studioLightBackground);
+ vec3 worldvec = background_transform_to_world(viewPosition);
+ background_color = node_tex_environment_equirectangular(StudioLightMatrix * worldvec, image).rgb;
+ background_color = mix(color, background_color, studioLightBackground);
#else
- vec3 background_color = color;
+ background_color = color;
#endif
- FragColor = vec4(clamp(background_color.rgb, vec3(0.0), vec3(1e10)), backgroundAlpha);
+ FragColor = vec4(clamp(background_color, vec3(0.0), vec3(1e10)), backgroundAlpha);
}
diff --git a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl
index b7bcf5c8a8b..ccef05ef985 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_gtao_frag.glsl
@@ -26,7 +26,7 @@ void main()
vec4 noise = texelfetch_noise_tex(gl_FragCoord.xy);
- gtao_deferred(normal, viewPosition, noise, depth, visibility, bent_normal);
+ gtao_deferred(normal, noise, depth, visibility, bent_normal);
/* Handle Background case. Prevent artifact due to uncleared Horizon Render Target. */
FragColor = vec4((depth == 1.0) ? 0.0 : visibility);
diff --git a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
index 0f76f8e1b8c..b8a86f8d742 100644
--- a/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
+++ b/source/blender/draw/engines/eevee/shaders/effect_ssr_frag.glsl
@@ -237,12 +237,11 @@ vec3 get_hit_vector(
}
else {
/* Find hit position in previous frame. */
- mask = screen_border_mask(gl_FragCoord.xy / vec2(textureSize(depthBuffer, 0)));
hit_co = get_reprojected_reflection(hit_pos, worldPosition, N);
hit_vec = hit_pos - worldPosition;
}
- mask = min(mask, screen_border_mask(hit_co));
+ mask = screen_border_mask(hit_co);
return hit_vec;
}
@@ -410,34 +409,6 @@ void main()
if (dot(speccol_roughness.rgb, vec3(1.0)) == 0.0)
discard;
- /* TODO optimize with textureGather */
- /* Doing these fetches early to hide latency. */
- vec4 hit_pdf;
- hit_pdf.x = texelFetch(pdfBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).r;
- hit_pdf.y = texelFetch(pdfBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).r;
- hit_pdf.z = texelFetch(pdfBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).r;
- hit_pdf.w = texelFetch(pdfBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).r;
-
- ivec4 hit_data[2];
- hit_data[0].xy = texelFetch(hitBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).rg;
- hit_data[0].zw = texelFetch(hitBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).rg;
- hit_data[1].xy = texelFetch(hitBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).rg;
- hit_data[1].zw = texelFetch(hitBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).rg;
-
- /* Find Planar Reflections affecting this pixel */
- PlanarData pd;
- float planar_index;
- for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; ++i) {
- pd = planars_data[i];
-
- float fade = probe_attenuation_planar(pd, worldPosition, N, 0.0);
-
- if (fade > 0.5) {
- planar_index = float(i);
- break;
- }
- }
-
float roughness = speccol_roughness.a;
float roughnessSquared = max(1e-3, roughness * roughness);
@@ -454,6 +425,34 @@ void main()
float weight_acc = 0.0;
if (roughness < ssrMaxRoughness + 0.2) {
+ /* TODO optimize with textureGather */
+ /* Doing these fetches early to hide latency. */
+ vec4 hit_pdf;
+ hit_pdf.x = texelFetch(pdfBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).r;
+ hit_pdf.y = texelFetch(pdfBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).r;
+ hit_pdf.z = texelFetch(pdfBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).r;
+ hit_pdf.w = texelFetch(pdfBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).r;
+
+ ivec4 hit_data[2];
+ hit_data[0].xy = texelFetch(hitBuffer, halfres_texel + neighbors[0 + neighborOffset], 0).rg;
+ hit_data[0].zw = texelFetch(hitBuffer, halfres_texel + neighbors[1 + neighborOffset], 0).rg;
+ hit_data[1].xy = texelFetch(hitBuffer, halfres_texel + neighbors[2 + neighborOffset], 0).rg;
+ hit_data[1].zw = texelFetch(hitBuffer, halfres_texel + neighbors[3 + neighborOffset], 0).rg;
+
+ /* Find Planar Reflections affecting this pixel */
+ PlanarData pd;
+ float planar_index;
+ for (int i = 0; i < MAX_PLANAR && i < prbNumPlanar; ++i) {
+ pd = planars_data[i];
+
+ float fade = probe_attenuation_planar(pd, worldPosition, N, 0.0);
+
+ if (fade > 0.5) {
+ planar_index = float(i);
+ break;
+ }
+ }
+
ssr_accum += get_ssr_samples(hit_pdf, hit_data, pd, planar_index, worldPosition, N, V,
roughnessSquared, cone_tan, source_uvs, weight_acc);
}
diff --git a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
index 142afa5705b..a6e6f1fac42 100644
--- a/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/lit_surface_vert.glsl
@@ -52,6 +52,7 @@ void main()
vec3 pos, binor;
hair_get_pos_tan_binor_time(
(ProjectionMatrix[3][3] == 0.0),
+ ModelMatrixInverse,
ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz,
pos, hairTangent, binor, hairTime, hairThickness, hairThickTime);
diff --git a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
index e110937c5aa..1a8dbc97317 100644
--- a/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
+++ b/source/blender/draw/engines/eevee/shaders/prepass_vert.glsl
@@ -1,6 +1,7 @@
uniform mat4 ModelViewProjectionMatrix;
uniform mat4 ModelMatrix;
+uniform mat4 ModelMatrixInverse;
#ifdef CLIP_PLANES
/* keep in sync with DRWManager.view_data */
@@ -20,6 +21,7 @@ void main()
vec3 pos, tan, binor;
hair_get_pos_tan_binor_time(
(ProjectionMatrix[3][3] == 0.0),
+ ModelMatrixInverse,
ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz,
pos, tan, binor, time, thickness, thick_time);
diff --git a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
index 30887e3fb19..15ac3f37add 100644
--- a/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_cache_utils.c
@@ -26,14 +26,14 @@
#include "DRW_engine.h"
#include "DRW_render.h"
-#include "BKE_global.h"
-
#include "ED_gpencil.h"
#include "ED_view3d.h"
#include "DNA_gpencil_types.h"
#include "DNA_view3d_types.h"
+#include "BKE_gpencil.h"
+
#include "gpencil_engine.h"
#include "draw_cache_impl.h"
@@ -41,63 +41,6 @@
#include "DEG_depsgraph.h"
#include "DEG_depsgraph_query.h"
-static bool gpencil_check_ob_duplicated(tGPencilObjectCache *cache_array,
- int gp_cache_used, Object *ob, int *r_index)
-{
- if (gp_cache_used == 0) {
- return false;
- }
-
- for (int i = 0; i < gp_cache_used; i++) {
- tGPencilObjectCache *cache_elem = &cache_array[i];
- if (cache_elem->ob == ob) {
- *r_index = cache_elem->data_idx;
- return true;
- }
- }
- return false;
-}
-
-static bool gpencil_check_datablock_duplicated(
- tGPencilObjectCache *cache_array, int gp_cache_used,
- Object *ob, bGPdata *gpd)
-{
- if (gp_cache_used == 0) {
- return false;
- }
-
- for (int i = 0; i < gp_cache_used; i++) {
- tGPencilObjectCache *cache_elem = &cache_array[i];
- if ((cache_elem->ob != ob) &&
- (cache_elem->gpd == gpd))
- {
- return true;
- }
- }
- return false;
-}
-
-static int gpencil_len_datablock_duplicated(
- tGPencilObjectCache *cache_array, int gp_cache_used,
- Object *ob, bGPdata *gpd)
-{
- int tot = 0;
- if (gp_cache_used == 0) {
- return 0;
- }
-
- for (int i = 0; i < gp_cache_used; i++) {
- tGPencilObjectCache *cache_elem = &cache_array[i];
- if ((cache_elem->ob != ob) &&
- (cache_elem->gpd == gpd) &&
- (!cache_elem->is_dup_ob))
- {
- tot++;
- }
- }
- return tot;
-}
-
/* add a gpencil object to cache to defer drawing */
tGPencilObjectCache *gpencil_object_cache_add(
tGPencilObjectCache *cache_array, Object *ob,
@@ -133,38 +76,15 @@ tGPencilObjectCache *gpencil_object_cache_add(
copy_m4_m4(cache_elem->obmat, ob->obmat);
cache_elem->idx = *gp_cache_used;
- /* check if object is duplicated */
- cache_elem->is_dup_ob = gpencil_check_ob_duplicated(
- cache_array,
- *gp_cache_used, ob_orig,
- &cache_elem->data_idx);
-
- if (!cache_elem->is_dup_ob) {
- /* check if object reuse datablock */
- cache_elem->is_dup_data = gpencil_check_datablock_duplicated(
- cache_array, *gp_cache_used,
- ob_orig, cache_elem->gpd);
- if (cache_elem->is_dup_data) {
- cache_elem->data_idx = gpencil_len_datablock_duplicated(
- cache_array, *gp_cache_used,
- ob_orig, cache_elem->gpd);
-
- cache_elem->gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
- }
- else {
- cache_elem->data_idx = 0;
- }
- }
- else {
- cache_elem->is_dup_data = false;
- }
+ /* object is duplicated (particle) */
+ cache_elem->is_dup_ob = ob->base_flag & BASE_FROMDUPLI;
/* save FXs */
cache_elem->pixfactor = cache_elem->gpd->pixfactor;
cache_elem->shader_fx = ob_orig->shader_fx;
- cache_elem->init_grp = 0;
- cache_elem->end_grp = -1;
+ cache_elem->init_grp = NULL;
+ cache_elem->end_grp = NULL;
/* calculate zdepth from point of view */
float zdepth = 0.0;
@@ -198,6 +118,48 @@ tGPencilObjectCache *gpencil_object_cache_add(
return cache_array;
}
+/* add a shading group to the cache to create later */
+GpencilBatchGroup *gpencil_group_cache_add(
+ GpencilBatchGroup *cache_array,
+ bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps,
+ const short type, const bool onion,
+ const int vertex_idx,
+ int *grp_size, int *grp_used)
+{
+ GpencilBatchGroup *cache_elem = NULL;
+ GpencilBatchGroup *p = NULL;
+
+ /* By default a cache is created with one block with a predefined number of free slots,
+ if the size is not enough, the cache is reallocated adding a new block of free slots.
+ This is done in order to keep cache small */
+ if (*grp_used + 1 > *grp_size) {
+ if ((*grp_size == 0) || (cache_array == NULL)) {
+ p = MEM_callocN(sizeof(struct GpencilBatchGroup) * GPENCIL_GROUPS_BLOCK_SIZE, "GpencilBatchGroup");
+ *grp_size = GPENCIL_GROUPS_BLOCK_SIZE;
+ }
+ else {
+ *grp_size += GPENCIL_GROUPS_BLOCK_SIZE;
+ p = MEM_recallocN(cache_array, sizeof(struct GpencilBatchGroup) * *grp_size);
+ }
+ cache_array = p;
+ }
+ /* zero out all data */
+ cache_elem = &cache_array[*grp_used];
+ memset(cache_elem, 0, sizeof(*cache_elem));
+
+ cache_elem->gpl = gpl;
+ cache_elem->gpf = gpf;
+ cache_elem->gps = gps;
+ cache_elem->type = type;
+ cache_elem->onion = onion;
+ cache_elem->vertex_idx = vertex_idx;
+
+ /* increase slots used in cache */
+ (*grp_used)++;
+
+ return cache_array;
+}
+
/* get current cache data */
static GpencilBatchCache *gpencil_batch_get_element(Object *ob)
{
@@ -208,51 +170,33 @@ static GpencilBatchCache *gpencil_batch_get_element(Object *ob)
/* verify if cache is valid */
static bool gpencil_batch_cache_valid(GpencilBatchCache *cache, bGPdata *gpd, int cfra)
{
+ bool valid = true;
if (cache == NULL) {
return false;
}
cache->is_editmode = GPENCIL_ANY_EDIT_MODE(gpd);
-
if (cfra != cache->cache_frame) {
- return false;
+ valid = false;
}
-
- if (gpd->flag & GP_DATA_CACHE_IS_DIRTY) {
- return false;
+ else if (gpd->flag & GP_DATA_CACHE_IS_DIRTY) {
+ valid = false;
}
-
- if (cache->is_editmode) {
- return false;
+ else if (gpd->flag & GP_DATA_SHOW_ONIONSKINS) {
+ /* if onion, set as dirty always
+ * This reduces performance, but avoid any crash in the multiple
+ * overlay and multiwindow options and keep all windows working
+ */
+ valid = false;
}
-
- if (cache->is_dirty) {
- return false;
+ else if (cache->is_editmode) {
+ valid = false;
}
-
- return true;
-}
-
-/* resize the cache to the number of slots */
-static void gpencil_batch_cache_resize(GpencilBatchCache *cache, int slots)
-{
- cache->cache_size = slots;
- cache->batch_stroke = MEM_recallocN(cache->batch_stroke, sizeof(struct Gwn_Batch *) * slots);
- cache->batch_fill = MEM_recallocN(cache->batch_fill, sizeof(struct Gwn_Batch *) * slots);
- cache->batch_edit = MEM_recallocN(cache->batch_edit, sizeof(struct Gwn_Batch *) * slots);
- cache->batch_edlin = MEM_recallocN(cache->batch_edlin, sizeof(struct Gwn_Batch *) * slots);
-}
-
-/* check size and increase if no free slots */
-void gpencil_batch_cache_check_free_slots(Object *ob)
-{
- GpencilBatchCache *cache = gpencil_batch_get_element(ob);
-
- /* the memory is reallocated by chunks, not for one slot only to improve speed */
- if (cache->cache_idx >= cache->cache_size) {
- cache->cache_size += GPENCIL_MIN_BATCH_SLOTS_CHUNK;
- gpencil_batch_cache_resize(cache, cache->cache_size);
+ else if (cache->is_dirty) {
+ valid = false;
}
+
+ return valid;
}
/* cache init */
@@ -263,10 +207,6 @@ static GpencilBatchCache *gpencil_batch_cache_init(Object *ob, int cfra)
GpencilBatchCache *cache = gpencil_batch_get_element(ob);
- if (G.debug_value >= 664) {
- printf("gpencil_batch_cache_init: %s\n", ob->id.name);
- }
-
if (!cache) {
cache = MEM_callocN(sizeof(*cache), __func__);
ob_orig->runtime.gpencil_cache = cache;
@@ -275,19 +215,17 @@ static GpencilBatchCache *gpencil_batch_cache_init(Object *ob, int cfra)
memset(cache, 0, sizeof(*cache));
}
- cache->cache_size = GPENCIL_MIN_BATCH_SLOTS_CHUNK;
- cache->batch_stroke = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Stroke");
- cache->batch_fill = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Fill");
- cache->batch_edit = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Edit");
- cache->batch_edlin = MEM_callocN(sizeof(struct Gwn_Batch *) * cache->cache_size, "Gpencil_Batch_Edlin");
-
cache->is_editmode = GPENCIL_ANY_EDIT_MODE(gpd);
- gpd->flag &= ~GP_DATA_CACHE_IS_DIRTY;
- cache->cache_idx = 0;
cache->is_dirty = true;
+
cache->cache_frame = cfra;
+ /* create array of derived frames equal to number of layers */
+ cache->tot_layers = BLI_listbase_count(&gpd->layers);
+ CLAMP_MIN(cache->tot_layers, 1);
+ cache->derived_array = MEM_callocN(sizeof(struct bGPDframe) * cache->tot_layers, "Derived GPF");
+
return cache;
}
@@ -298,24 +236,30 @@ static void gpencil_batch_cache_clear(GpencilBatchCache *cache)
return;
}
- if (cache->cache_size == 0) {
- return;
- }
-
- if (cache->cache_size > 0) {
- for (int i = 0; i < cache->cache_size; i++) {
- GPU_BATCH_DISCARD_SAFE(cache->batch_stroke[i]);
- GPU_BATCH_DISCARD_SAFE(cache->batch_fill[i]);
- GPU_BATCH_DISCARD_SAFE(cache->batch_edit[i]);
- GPU_BATCH_DISCARD_SAFE(cache->batch_edlin[i]);
- }
- MEM_SAFE_FREE(cache->batch_stroke);
- MEM_SAFE_FREE(cache->batch_fill);
- MEM_SAFE_FREE(cache->batch_edit);
- MEM_SAFE_FREE(cache->batch_edlin);
+ GPU_BATCH_DISCARD_SAFE(cache->b_stroke.batch);
+ GPU_BATCH_DISCARD_SAFE(cache->b_point.batch);
+ GPU_BATCH_DISCARD_SAFE(cache->b_fill.batch);
+ GPU_BATCH_DISCARD_SAFE(cache->b_edit.batch);
+ GPU_BATCH_DISCARD_SAFE(cache->b_edlin.batch);
+
+ MEM_SAFE_FREE(cache->b_stroke.batch);
+ MEM_SAFE_FREE(cache->b_point.batch);
+ MEM_SAFE_FREE(cache->b_fill.batch);
+ MEM_SAFE_FREE(cache->b_edit.batch);
+ MEM_SAFE_FREE(cache->b_edlin.batch);
+
+ MEM_SAFE_FREE(cache->grp_cache);
+ cache->grp_size = 0;
+ cache->grp_used = 0;
+
+ /* clear all frames derived data */
+ for (int i = 0; i < cache->tot_layers; i++) {
+ bGPDframe *derived_gpf = &cache->derived_array[i];
+ BKE_gpencil_free_frame_runtime_data(derived_gpf);
+ derived_gpf = NULL;
}
-
- cache->cache_size = 0;
+ cache->tot_layers = 0;
+ MEM_SAFE_FREE(cache->derived_array);
}
/* get cache */
@@ -326,10 +270,6 @@ GpencilBatchCache *gpencil_batch_cache_get(Object *ob, int cfra)
GpencilBatchCache *cache = gpencil_batch_get_element(ob);
if (!gpencil_batch_cache_valid(cache, gpd, cfra)) {
- if (G.debug_value >= 664) {
- printf("gpencil_batch_cache: %s\n", gpd->id.name);
- }
-
if (cache) {
gpencil_batch_cache_clear(cache);
}
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
index f255892de44..6289e76664d 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_cache_impl.c
@@ -87,24 +87,32 @@ static void gpencil_set_fill_point(
GPU_vertbuf_attr_set(vbo, text_id, idx, uv);
}
-/* create batch geometry data for points stroke shader */
-GPUBatch *DRW_gpencil_get_point_geom(bGPDstroke *gps, short thickness, const float ink[4])
+static void gpencil_vbo_ensure_size(GpencilBatchCacheElem *be, int totvertex)
{
- static GPUVertFormat format = { 0 };
- static uint pos_id, color_id, size_id, uvdata_id;
- if (format.attr_len == 0) {
- pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- size_id = GPU_vertformat_attr_add(&format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- uvdata_id = GPU_vertformat_attr_add(&format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+ if (be->vbo->vertex_alloc <= be->vbo_len + totvertex) {
+ uint newsize = be->vbo->vertex_alloc + (((totvertex / GPENCIL_VBO_BLOCK_SIZE) + 1) * GPENCIL_VBO_BLOCK_SIZE);
+ GPU_vertbuf_data_resize(be->vbo, newsize);
}
+}
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
- GPU_vertbuf_data_alloc(vbo, gps->totpoints);
+/* create batch geometry data for points stroke shader */
+void DRW_gpencil_get_point_geom(GpencilBatchCacheElem *be, bGPDstroke *gps, short thickness, const float ink[4])
+{
+ int totvertex = gps->totpoints;
+ if (be->vbo == NULL) {
+ be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ be->thickness_id = GPU_vertformat_attr_add(&be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->uvdata_id = GPU_vertformat_attr_add(&be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+
+ be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
+ be->vbo_len = 0;
+ }
+ gpencil_vbo_ensure_size(be, totvertex);
/* draw stroke curve */
const bGPDspoint *pt = gps->points;
- int idx = 0;
float alpha;
float col[4];
@@ -116,86 +124,120 @@ GPUBatch *DRW_gpencil_get_point_geom(bGPDstroke *gps, short thickness, const flo
float thick = max_ff(pt->pressure * thickness, 1.0f);
- GPU_vertbuf_attr_set(vbo, color_id, idx, col);
- GPU_vertbuf_attr_set(vbo, size_id, idx, &thick);
+ GPU_vertbuf_attr_set(be->vbo, be->color_id, be->vbo_len, col);
+ GPU_vertbuf_attr_set(be->vbo, be->thickness_id, be->vbo_len, &thick);
/* transfer both values using the same shader variable */
float uvdata[2] = { pt->uv_fac, pt->uv_rot };
- GPU_vertbuf_attr_set(vbo, uvdata_id, idx, uvdata);
+ GPU_vertbuf_attr_set(be->vbo, be->uvdata_id, be->vbo_len, uvdata);
- GPU_vertbuf_attr_set(vbo, pos_id, idx, &pt->x);
- idx++;
+ GPU_vertbuf_attr_set(be->vbo, be->pos_id, be->vbo_len, &pt->x);
+ be->vbo_len++;
}
-
- return GPU_batch_create_ex(GPU_PRIM_POINTS, vbo, NULL, GPU_BATCH_OWNS_VBO);
}
/* create batch geometry data for stroke shader */
-GPUBatch *DRW_gpencil_get_stroke_geom(bGPDstroke *gps, short thickness, const float ink[4])
+void DRW_gpencil_get_stroke_geom(struct GpencilBatchCacheElem *be, bGPDstroke *gps, short thickness, const float ink[4])
{
bGPDspoint *points = gps->points;
int totpoints = gps->totpoints;
/* if cyclic needs more vertex */
int cyclic_add = (gps->flag & GP_STROKE_CYCLIC) ? 1 : 0;
+ int totvertex = totpoints + cyclic_add + 2;
- static GPUVertFormat format = { 0 };
- static uint pos_id, color_id, thickness_id, uvdata_id;
- if (format.attr_len == 0) {
- pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- thickness_id = GPU_vertformat_attr_add(&format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- uvdata_id = GPU_vertformat_attr_add(&format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- }
+ if (be->vbo == NULL) {
+ be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ be->thickness_id = GPU_vertformat_attr_add(&be->format, "thickness", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
+ be->uvdata_id = GPU_vertformat_attr_add(&be->format, "uvdata", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
- GPU_vertbuf_data_alloc(vbo, totpoints + cyclic_add + 2);
+ be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
+ be->vbo_len = 0;
+ }
+ gpencil_vbo_ensure_size(be, totvertex);
/* draw stroke curve */
const bGPDspoint *pt = points;
- int idx = 0;
for (int i = 0; i < totpoints; i++, pt++) {
/* first point for adjacency (not drawn) */
if (i == 0) {
if (gps->flag & GP_STROKE_CYCLIC && totpoints > 2) {
gpencil_set_stroke_point(
- vbo, &points[totpoints - 1], idx,
- pos_id, color_id, thickness_id, uvdata_id, thickness, ink);
- idx++;
+ be->vbo, &points[totpoints - 1], be->vbo_len,
+ be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink);
+ be->vbo_len++;
}
else {
gpencil_set_stroke_point(
- vbo, &points[1], idx,
- pos_id, color_id, thickness_id, uvdata_id, thickness, ink);
- idx++;
+ be->vbo, &points[1], be->vbo_len,
+ be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink);
+ be->vbo_len++;
}
}
/* set point */
gpencil_set_stroke_point(
- vbo, pt, idx,
- pos_id, color_id, thickness_id, uvdata_id, thickness, ink);
- idx++;
+ be->vbo, pt, be->vbo_len,
+ be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink);
+ be->vbo_len++;
}
if (gps->flag & GP_STROKE_CYCLIC && totpoints > 2) {
/* draw line to first point to complete the cycle */
gpencil_set_stroke_point(
- vbo, &points[0], idx,
- pos_id, color_id, thickness_id, uvdata_id, thickness, ink);
- idx++;
+ be->vbo, &points[0], be->vbo_len,
+ be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink);
+ be->vbo_len++;
/* now add adjacency point (not drawn) */
gpencil_set_stroke_point(
- vbo, &points[1], idx,
- pos_id, color_id, thickness_id, uvdata_id, thickness, ink);
- idx++;
+ be->vbo, &points[1], be->vbo_len,
+ be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink);
+ be->vbo_len++;
}
/* last adjacency point (not drawn) */
else {
gpencil_set_stroke_point(
- vbo, &points[totpoints - 2], idx,
- pos_id, color_id, thickness_id, uvdata_id, thickness, ink);
+ be->vbo, &points[totpoints - 2], be->vbo_len,
+ be->pos_id, be->color_id, be->thickness_id, be->uvdata_id, thickness, ink);
+ be->vbo_len++;
}
+}
- return GPU_batch_create_ex(GPU_PRIM_LINE_STRIP_ADJ, vbo, NULL, GPU_BATCH_OWNS_VBO);
+/* create batch geometry data for stroke shader */
+void DRW_gpencil_get_fill_geom(struct GpencilBatchCacheElem *be, Object *ob, bGPDstroke *gps, const float color[4])
+{
+ BLI_assert(gps->totpoints >= 3);
+
+ /* Calculate triangles cache for filling area (must be done only after changes) */
+ if ((gps->flag & GP_STROKE_RECALC_CACHES) || (gps->tot_triangles == 0) || (gps->triangles == NULL)) {
+ DRW_gpencil_triangulate_stroke_fill(ob, gps);
+ ED_gpencil_calc_stroke_uv(ob, gps);
+ }
+
+ BLI_assert(gps->tot_triangles >= 1);
+ int totvertex = gps->tot_triangles * 3;
+
+ if (be->vbo == NULL) {
+ be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ be->uvdata_id = GPU_vertformat_attr_add(&be->format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
+
+ be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ GPU_vertbuf_data_alloc(be->vbo, be->tot_vertex);
+ be->vbo_len = 0;
+ }
+ gpencil_vbo_ensure_size(be, totvertex);
+
+ /* Draw all triangles for filling the polygon (cache must be calculated before) */
+ bGPDtriangle *stroke_triangle = gps->triangles;
+ for (int i = 0; i < gps->tot_triangles; i++, stroke_triangle++) {
+ for (int j = 0; j < 3; j++) {
+ gpencil_set_fill_point(
+ be->vbo, be->vbo_len, &gps->points[stroke_triangle->verts[j]], color, stroke_triangle->uv[j],
+ be->pos_id, be->color_id, be->uvdata_id);
+ be->vbo_len++;
+ }
+ }
}
/* create batch geometry data for current buffer stroke shader */
@@ -407,47 +449,8 @@ GPUBatch *DRW_gpencil_get_buffer_fill_geom(bGPdata *gpd)
return GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, NULL, GPU_BATCH_OWNS_VBO);
}
-/* create batch geometry data for stroke shader */
-GPUBatch *DRW_gpencil_get_fill_geom(Object *ob, bGPDstroke *gps, const float color[4])
-{
- BLI_assert(gps->totpoints >= 3);
-
- /* Calculate triangles cache for filling area (must be done only after changes) */
- if ((gps->flag & GP_STROKE_RECALC_CACHES) || (gps->tot_triangles == 0) || (gps->triangles == NULL)) {
- DRW_gpencil_triangulate_stroke_fill(ob, gps);
- ED_gpencil_calc_stroke_uv(ob, gps);
- }
-
- BLI_assert(gps->tot_triangles >= 1);
-
- static GPUVertFormat format = { 0 };
- static uint pos_id, color_id, text_id;
- if (format.attr_len == 0) {
- pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- text_id = GPU_vertformat_attr_add(&format, "texCoord", GPU_COMP_F32, 2, GPU_FETCH_FLOAT);
- }
-
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
- GPU_vertbuf_data_alloc(vbo, gps->tot_triangles * 3);
-
- /* Draw all triangles for filling the polygon (cache must be calculated before) */
- bGPDtriangle *stroke_triangle = gps->triangles;
- int idx = 0;
- for (int i = 0; i < gps->tot_triangles; i++, stroke_triangle++) {
- for (int j = 0; j < 3; j++) {
- gpencil_set_fill_point(
- vbo, idx, &gps->points[stroke_triangle->verts[j]], color, stroke_triangle->uv[j],
- pos_id, color_id, text_id);
- idx++;
- }
- }
-
- return GPU_batch_create_ex(GPU_PRIM_TRIS, vbo, NULL, GPU_BATCH_OWNS_VBO);
-}
-
/* Draw selected verts for strokes being edited */
-GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag)
+void DRW_gpencil_get_edit_geom(struct GpencilBatchCacheElem *be, bGPDstroke *gps, float alpha, short dflag)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
Object *ob = draw_ctx->obact;
@@ -483,16 +486,16 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag)
UI_GetThemeColor3fv(TH_GP_VERTEX, unselectColor);
unselectColor[3] = alpha;
- static GPUVertFormat format = { 0 };
- static uint pos_id, color_id, size_id;
- if (format.attr_len == 0) {
- pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- size_id = GPU_vertformat_attr_add(&format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- }
+ if (be->vbo == NULL) {
+ be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
+ be->thickness_id = GPU_vertformat_attr_add(&be->format, "size", GPU_COMP_F32, 1, GPU_FETCH_FLOAT);
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
- GPU_vertbuf_data_alloc(vbo, gps->totpoints);
+ be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ GPU_vertbuf_data_alloc(be->vbo, gps->totpoints);
+ be->vbo_len = 0;
+ }
+ gpencil_vbo_ensure_size(be, gps->totpoints);
/* Draw start and end point differently if enabled stroke direction hint */
bool show_direction_hint = (dflag & GP_DATA_SHOW_DIRECTION) && (gps->totpoints > 1);
@@ -501,7 +504,6 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag)
bGPDspoint *pt = gps->points;
MDeformVert *dvert = gps->dvert;
- int idx = 0;
float fcolor[4];
float fsize = 0;
for (int i = 0; i < gps->totpoints; i++, pt++) {
@@ -535,20 +537,18 @@ GPUBatch *DRW_gpencil_get_edit_geom(bGPDstroke *gps, float alpha, short dflag)
}
}
- GPU_vertbuf_attr_set(vbo, color_id, idx, fcolor);
- GPU_vertbuf_attr_set(vbo, size_id, idx, &fsize);
- GPU_vertbuf_attr_set(vbo, pos_id, idx, &pt->x);
- idx++;
+ GPU_vertbuf_attr_set(be->vbo, be->color_id, be->vbo_len, fcolor);
+ GPU_vertbuf_attr_set(be->vbo, be->thickness_id, be->vbo_len, &fsize);
+ GPU_vertbuf_attr_set(be->vbo, be->pos_id, be->vbo_len, &pt->x);
+ be->vbo_len++;
if (gps->dvert != NULL) {
dvert++;
}
}
-
- return GPU_batch_create_ex(GPU_PRIM_POINTS, vbo, NULL, GPU_BATCH_OWNS_VBO);
}
/* Draw lines for strokes being edited */
-GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED(dflag))
+void DRW_gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be, bGPDstroke *gps, float alpha, short UNUSED(dflag))
{
const DRWContextState *draw_ctx = DRW_context_state_get();
Object *ob = draw_ctx->obact;
@@ -566,21 +566,20 @@ GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED(
float linecolor[4];
copy_v4_v4(linecolor, gpd->line_color);
- static GPUVertFormat format = { 0 };
- static uint pos_id, color_id;
- if (format.attr_len == 0) {
- pos_id = GPU_vertformat_attr_add(&format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
- color_id = GPU_vertformat_attr_add(&format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- }
+ if (be->vbo == NULL) {
+ be->pos_id = GPU_vertformat_attr_add(&be->format, "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ be->color_id = GPU_vertformat_attr_add(&be->format, "color", GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
- GPUVertBuf *vbo = GPU_vertbuf_create_with_format(&format);
- GPU_vertbuf_data_alloc(vbo, gps->totpoints);
+ be->vbo = GPU_vertbuf_create_with_format(&be->format);
+ GPU_vertbuf_data_alloc(be->vbo, gps->totpoints);
+ be->vbo_len = 0;
+ }
+ gpencil_vbo_ensure_size(be, gps->totpoints);
/* Draw all the stroke lines (selected or not) */
bGPDspoint *pt = gps->points;
MDeformVert *dvert = gps->dvert;
- int idx = 0;
float fcolor[4];
for (int i = 0; i < gps->totpoints; i++, pt++) {
/* weight paint */
@@ -600,16 +599,14 @@ GPUBatch *DRW_gpencil_get_edlin_geom(bGPDstroke *gps, float alpha, short UNUSED(
}
}
- GPU_vertbuf_attr_set(vbo, color_id, idx, fcolor);
- GPU_vertbuf_attr_set(vbo, pos_id, idx, &pt->x);
- idx++;
+ GPU_vertbuf_attr_set(be->vbo, be->color_id, be->vbo_len, fcolor);
+ GPU_vertbuf_attr_set(be->vbo, be->pos_id, be->vbo_len, &pt->x);
+ be->vbo_len++;
if (gps->dvert != NULL) {
dvert++;
}
}
-
- return GPU_batch_create_ex(GPU_PRIM_LINE_STRIP, vbo, NULL, GPU_BATCH_OWNS_VBO);
}
static void set_grid_point(
diff --git a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
index ae62e61c5c1..40b6a4e5b2b 100644
--- a/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
+++ b/source/blender/draw/engines/gpencil/gpencil_draw_utils.c
@@ -43,7 +43,7 @@
#include "DNA_view3d_types.h"
#include "DNA_gpencil_modifier_types.h"
- /* If builtin shaders are needed */
+/* If builtin shaders are needed */
#include "GPU_shader.h"
#include "GPU_texture.h"
@@ -65,6 +65,67 @@
#define GP_SET_SRC_GPS(src_gps) if (src_gps) src_gps = src_gps->next
+/* Get number of vertex for using in GPU VBOs */
+static void gpencil_calc_vertex(
+ GPENCIL_StorageList *stl, tGPencilObjectCache *cache_ob,
+ GpencilBatchCache *cache, bGPdata *gpd,
+ int cfra_eval)
+{
+ Object *ob = cache_ob->ob;
+ const DRWContextState *draw_ctx = DRW_context_state_get();
+ bGPDframe *gpf = NULL;
+
+ const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
+
+ cache_ob->tot_vertex = 0;
+ cache_ob->tot_triangles = 0;
+
+ for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
+ if (gpl->flag & GP_LAYER_HIDE) {
+ continue;
+ }
+
+ /* verify time modifiers */
+ if ((time_remap) && (!stl->storage->simplify_modif)) {
+ int remap_cfra = BKE_gpencil_time_modifier(
+ draw_ctx->depsgraph, draw_ctx->scene, ob, gpl, cfra_eval,
+ stl->storage->is_render);
+ gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
+ }
+ else {
+ gpf = gpl->actframe;
+ }
+
+ if (gpf == NULL) {
+ continue;
+ }
+
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+ cache_ob->tot_vertex += gps->totpoints + 3;
+ cache_ob->tot_triangles += gps->totpoints - 1;
+ }
+ }
+
+ cache->b_fill.tot_vertex = cache_ob->tot_triangles * 3;
+ cache->b_stroke.tot_vertex = cache_ob->tot_vertex;
+ cache->b_point.tot_vertex = cache_ob->tot_vertex;
+
+ /* some modifiers can change the number of points */
+ int factor = 0;
+ GpencilModifierData *md;
+ for (md = ob->greasepencil_modifiers.first; md; md = md->next) {
+ const GpencilModifierTypeInfo *mti = BKE_gpencil_modifierType_getInfo(md->type);
+ /* only modifiers that change size */
+ if (mti && mti->getDuplicationFactor) {
+ factor = mti->getDuplicationFactor(md);
+
+ cache->b_fill.tot_vertex *= factor;
+ cache->b_stroke.tot_vertex *= factor;
+ cache->b_point.tot_vertex *= factor;
+ }
+ }
+}
+
/* Helper for doing all the checks on whether a stroke can be drawn */
static bool gpencil_can_draw_stroke(
struct MaterialGPencilStyle *gp_style, const bGPDstroke *gps,
@@ -182,79 +243,6 @@ static void gpencil_stroke_2d_flat(const bGPDspoint *points, int totpoints, floa
*r_direction = (int)locy[2];
}
-/* Triangulate stroke for high quality fill (this is done only if cache is null or stroke was modified) */
-void DRW_gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
-{
- BLI_assert(gps->totpoints >= 3);
-
- bGPdata *gpd = (bGPdata *)ob->data;
-
- /* allocate memory for temporary areas */
- gps->tot_triangles = gps->totpoints - 2;
- uint(*tmp_triangles)[3] = MEM_mallocN(sizeof(*tmp_triangles) * gps->tot_triangles, "GP Stroke temp triangulation");
- float(*points2d)[2] = MEM_mallocN(sizeof(*points2d) * gps->totpoints, "GP Stroke temp 2d points");
- float(*uv)[2] = MEM_mallocN(sizeof(*uv) * gps->totpoints, "GP Stroke temp 2d uv data");
-
- int direction = 0;
-
- /* convert to 2d and triangulate */
- gpencil_stroke_2d_flat(gps->points, gps->totpoints, points2d, &direction);
- BLI_polyfill_calc(points2d, (uint)gps->totpoints, direction, tmp_triangles);
-
- /* calc texture coordinates automatically */
- float minv[2];
- float maxv[2];
- /* first needs bounding box data */
- if (gpd->flag & GP_DATA_UV_ADAPTATIVE) {
- gpencil_calc_2d_bounding_box(points2d, gps->totpoints, minv, maxv);
- }
- else {
- ARRAY_SET_ITEMS(minv, -1.0f, -1.0f);
- ARRAY_SET_ITEMS(maxv, 1.0f, 1.0f);
- }
-
- /* calc uv data */
- gpencil_calc_stroke_fill_uv(points2d, gps->totpoints, minv, maxv, uv);
-
- /* Number of triangles */
- gps->tot_triangles = gps->totpoints - 2;
- /* save triangulation data in stroke cache */
- if (gps->tot_triangles > 0) {
- if (gps->triangles == NULL) {
- gps->triangles = MEM_callocN(sizeof(*gps->triangles) * gps->tot_triangles, "GP Stroke triangulation");
- }
- else {
- gps->triangles = MEM_recallocN(gps->triangles, sizeof(*gps->triangles) * gps->tot_triangles);
- }
-
- for (int i = 0; i < gps->tot_triangles; i++) {
- bGPDtriangle *stroke_triangle = &gps->triangles[i];
- memcpy(gps->triangles[i].verts, tmp_triangles[i], sizeof(uint[3]));
- /* copy texture coordinates */
- copy_v2_v2(stroke_triangle->uv[0], uv[tmp_triangles[i][0]]);
- copy_v2_v2(stroke_triangle->uv[1], uv[tmp_triangles[i][1]]);
- copy_v2_v2(stroke_triangle->uv[2], uv[tmp_triangles[i][2]]);
- }
- }
- else {
- /* No triangles needed - Free anything allocated previously */
- if (gps->triangles)
- MEM_freeN(gps->triangles);
-
- gps->triangles = NULL;
- }
-
- /* disable recalculation flag */
- if (gps->flag & GP_STROKE_RECALC_CACHES) {
- gps->flag &= ~GP_STROKE_RECALC_CACHES;
- }
-
- /* clear memory */
- MEM_SAFE_FREE(tmp_triangles);
- MEM_SAFE_FREE(points2d);
- MEM_SAFE_FREE(uv);
-}
-
/* recalc the internal geometry caches for fill and uvs */
static void DRW_gpencil_recalc_geometry_caches(Object *ob, MaterialGPencilStyle *gp_style, bGPDstroke *gps)
{
@@ -279,7 +267,8 @@ static void DRW_gpencil_recalc_geometry_caches(Object *ob, MaterialGPencilStyle
/* create shading group for filling */
static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(
GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass,
- GPUShader *shader, bGPdata *gpd, MaterialGPencilStyle *gp_style, int id)
+ GPUShader *shader, bGPdata *gpd, bGPDlayer *gpl,
+ MaterialGPencilStyle *gp_style, int id)
{
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
@@ -330,6 +319,7 @@ static DRWShadingGroup *DRW_gpencil_shgroup_fill_create(
DRW_shgroup_uniform_vec2(grp, "texture_scale", gp_style->texture_scale, 1);
DRW_shgroup_uniform_vec2(grp, "texture_offset", gp_style->texture_offset, 1);
DRW_shgroup_uniform_float(grp, "texture_opacity", &gp_style->texture_opacity, 1);
+ DRW_shgroup_uniform_float(grp, "layer_opacity", &gpl->opacity, 1);
stl->shgroups[id].texture_mix = gp_style->flag & GP_STYLE_COLOR_TEX_MIX ? 1 : 0;
DRW_shgroup_uniform_int(grp, "texture_mix", &stl->shgroups[id].texture_mix, 1);
@@ -464,7 +454,7 @@ DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
return grp;
}
-/* create shading group for volumetrics */
+/* create shading group for points */
static DRWShadingGroup *DRW_gpencil_shgroup_point_create(
GPENCIL_e_data *e_data, GPENCIL_Data *vedata, DRWPass *pass, GPUShader *shader, Object *ob,
bGPdata *gpd, MaterialGPencilStyle *gp_style, int id, bool onion)
@@ -557,10 +547,10 @@ static DRWShadingGroup *DRW_gpencil_shgroup_point_create(
return grp;
}
-/* add fill shading group to pass */
-static void gpencil_add_fill_shgroup(
- GpencilBatchCache *cache, DRWShadingGroup *fillgrp,
- Object *ob, bGPDframe *gpf, bGPDstroke *gps,
+/* add fill vertex info */
+static void gpencil_add_fill_vertexdata(
+ GpencilBatchCache *cache,
+ Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps,
float opacity, const float tintcolor[4], const bool onion, const bool custonion)
{
MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
@@ -584,20 +574,28 @@ static void gpencil_add_fill_shgroup(
color = tfill;
}
}
- gpencil_batch_cache_check_free_slots(ob);
- cache->batch_fill[cache->cache_idx] = DRW_gpencil_get_fill_geom(ob, gps, color);
+ /* create vertex data */
+ const int old_len = cache->b_fill.vbo_len;
+ DRW_gpencil_get_fill_geom(&cache->b_fill, ob, gps, color);
+
+ /* add to list of groups */
+ if (old_len < cache->b_fill.vbo_len) {
+ cache->grp_cache = gpencil_group_cache_add(
+ cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Fill, onion,
+ cache->b_fill.vbo_len,
+ &cache->grp_size, &cache->grp_used);
+ }
}
-
- DRW_shgroup_call_add(fillgrp, cache->batch_fill[cache->cache_idx], gpf->runtime.viewmatrix);
}
}
}
-/* add stroke shading group to pass */
-static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, DRWShadingGroup *strokegrp,
- Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps,
- const float opacity, const float tintcolor[4], const bool onion,
- const bool custonion)
+/* add stroke vertex info */
+static void gpencil_add_stroke_vertexdata(
+ GpencilBatchCache *cache,
+ Object *ob, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps,
+ const float opacity, const float tintcolor[4], const bool onion,
+ const bool custonion)
{
float tcolor[4];
float ink[4];
@@ -630,20 +628,39 @@ static void gpencil_add_stroke_shgroup(GpencilBatchCache *cache, DRWShadingGroup
sthickness = gps->thickness + gpl->line_change;
CLAMP_MIN(sthickness, 1);
- gpencil_batch_cache_check_free_slots(ob);
+
if ((gps->totpoints > 1) && (gp_style->mode == GP_STYLE_MODE_LINE)) {
- cache->batch_stroke[cache->cache_idx] = DRW_gpencil_get_stroke_geom(gps, sthickness, ink);
+ /* create vertex data */
+ const int old_len = cache->b_stroke.vbo_len;
+ DRW_gpencil_get_stroke_geom(&cache->b_stroke, gps, sthickness, ink);
+
+ /* add to list of groups */
+ if (old_len < cache->b_stroke.vbo_len) {
+ cache->grp_cache = gpencil_group_cache_add(
+ cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Stroke, onion,
+ cache->b_stroke.vbo_len,
+ &cache->grp_size, &cache->grp_used);
+ }
}
else {
- cache->batch_stroke[cache->cache_idx] = DRW_gpencil_get_point_geom(gps, sthickness, ink);
+ /* create vertex data */
+ const int old_len = cache->b_point.vbo_len;
+ DRW_gpencil_get_point_geom(&cache->b_point, gps, sthickness, ink);
+
+ /* add to list of groups */
+ if (old_len < cache->b_point.vbo_len) {
+ cache->grp_cache = gpencil_group_cache_add(
+ cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Point, onion,
+ cache->b_point.vbo_len,
+ &cache->grp_size, &cache->grp_used);
+ }
}
}
- DRW_shgroup_call_add(strokegrp, cache->batch_stroke[cache->cache_idx], gpf->runtime.viewmatrix);
}
-/* add edit points shading group to pass */
-static void gpencil_add_editpoints_shgroup(
- GPENCIL_StorageList *stl, GpencilBatchCache *cache, ToolSettings *UNUSED(ts), Object *ob,
+/* add edit points vertex info */
+static void gpencil_add_editpoints_vertexdata(
+ GPENCIL_StorageList *UNUSED(stl), GpencilBatchCache *cache, ToolSettings *UNUSED(ts), Object *ob,
bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf, bGPDstroke *gps)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
@@ -660,36 +677,31 @@ static void gpencil_add_editpoints_shgroup(
}
const bool is_weight_paint = (gpd) && (gpd->flag & GP_DATA_STROKE_WEIGHTMODE);
- /* line of the original stroke */
if (cache->is_dirty) {
- gpencil_batch_cache_check_free_slots(ob);
- cache->batch_edlin[cache->cache_idx] = DRW_gpencil_get_edlin_geom(gps, edit_alpha, gpd->flag);
- }
- if (cache->batch_edlin[cache->cache_idx]) {
- if ((obact) && (obact == ob) &&
+ if ((obact == ob) &&
((v3d->flag2 & V3D_RENDER_OVERRIDE) == 0) &&
(v3d->gp_flag & V3D_GP_SHOW_EDIT_LINES))
{
- DRW_shgroup_call_add(
- stl->g_data->shgrps_edit_line,
- cache->batch_edlin[cache->cache_idx],
- gpf->runtime.viewmatrix);
+ /* line of the original stroke */
+ DRW_gpencil_get_edlin_geom(&cache->b_edlin, gps, edit_alpha, gpd->flag);
+
+ /* add to list of groups */
+ cache->grp_cache = gpencil_group_cache_add(
+ cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Edlin, false,
+ cache->b_edlin.vbo_len,
+ &cache->grp_size, &cache->grp_used);
}
- }
- /* edit points */
- if ((gps->flag & GP_STROKE_SELECT) || (is_weight_paint)) {
- if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gp_style->flag & GP_STYLE_COLOR_LOCKED) == 0)) {
- if (cache->is_dirty) {
- gpencil_batch_cache_check_free_slots(ob);
- cache->batch_edit[cache->cache_idx] = DRW_gpencil_get_edit_geom(gps, edit_alpha, gpd->flag);
- }
- if (cache->batch_edit[cache->cache_idx]) {
- if ((obact) && (obact == ob)) {
- /* edit pass */
- DRW_shgroup_call_add(
- stl->g_data->shgrps_edit_point,
- cache->batch_edit[cache->cache_idx],
- gpf->runtime.viewmatrix);
+ /* edit points */
+ if ((gps->flag & GP_STROKE_SELECT) || (is_weight_paint)) {
+ if ((gpl->flag & GP_LAYER_UNLOCK_COLOR) || ((gp_style->flag & GP_STYLE_COLOR_LOCKED) == 0)) {
+ if (obact == ob) {
+ DRW_gpencil_get_edit_geom(&cache->b_edit, gps, edit_alpha, gpd->flag);
+
+ /* add to list of groups */
+ cache->grp_cache = gpencil_group_cache_add(
+ cache->grp_cache, gpl, gpf, gps, eGpencilBatchGroupType_Edit, false,
+ cache->b_edit.vbo_len,
+ &cache->grp_size, &cache->grp_used);
}
}
}
@@ -697,57 +709,6 @@ static void gpencil_add_editpoints_shgroup(
}
}
-/* function to draw strokes for onion only */
-static void gpencil_draw_onion_strokes(
- GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, Object *ob,
- bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf,
- const float opacity, const float tintcolor[4], const bool custonion)
-{
- GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
- GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
- Depsgraph *depsgraph = DRW_context_state_get()->depsgraph;
-
- float viewmatrix[4][4];
-
- /* get parent matrix and save as static data */
- ED_gpencil_parent_location(depsgraph, ob, gpd, gpl, viewmatrix);
- copy_m4_m4(gpf->runtime.viewmatrix, viewmatrix);
-
- for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
- MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
- copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
- copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
-
- int id = stl->storage->shgroup_id;
- /* check if stroke can be drawn */
- if (gpencil_can_draw_stroke(gp_style, gps, true, false) == false) {
- continue;
- }
- /* limit the number of shading groups */
- if (id >= GPENCIL_MAX_SHGROUPS) {
- continue;
- }
-
- stl->shgroups[id].shgrps_fill = NULL;
- if ((gps->totpoints > 1) && (gp_style->mode == GP_STYLE_MODE_LINE)) {
- stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_stroke_create(
- e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh, ob, gpd, gp_style, id, true);
- }
- else {
- stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_point_create(
- e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh, ob, gpd, gp_style, id, true);
- }
-
- /* stroke */
- gpencil_add_stroke_shgroup(
- cache, stl->shgroups[id].shgrps_stroke, ob, gpl, gpf, gps, opacity, tintcolor, true, custonion);
-
- stl->storage->shgroup_id++;
- cache->cache_idx++;
- }
-}
-
-
/* main function to draw strokes */
static void gpencil_draw_strokes(
GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob,
@@ -761,8 +722,6 @@ static void gpencil_draw_strokes(
Scene *scene = draw_ctx->scene;
View3D *v3d = draw_ctx->v3d;
bGPDstroke *gps, *src_gps;
- DRWShadingGroup *fillgrp;
- DRWShadingGroup *strokegrp;
float viewmatrix[4][4];
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
const bool playing = stl->storage->is_playing;
@@ -808,11 +767,6 @@ static void gpencil_draw_strokes(
GP_SET_SRC_GPS(src_gps);
continue;
}
- /* limit the number of shading groups */
- if (stl->storage->shgroup_id >= GPENCIL_MAX_SHGROUPS) {
- GP_SET_SRC_GPS(src_gps);
- continue;
- }
/* be sure recalc all cache in source stroke to avoid recalculation when frame change
* and improve fps */
@@ -833,37 +787,6 @@ static void gpencil_draw_strokes(
if ((gpl->actframe->framenum == derived_gpf->framenum) ||
(!is_multiedit) || (overlay_multiedit))
{
- int id = stl->storage->shgroup_id;
- if (gps->totpoints > 0) {
- if ((gps->totpoints > 2) && (!stl->storage->simplify_fill) &&
- ((gp_style->fill_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH) || (gp_style->fill_style > 0)) &&
- ((gps->flag & GP_STROKE_NOFILL) == 0) &&
- (gp_style->flag & GP_STYLE_FILL_SHOW))
- {
- stl->shgroups[id].shgrps_fill = DRW_gpencil_shgroup_fill_create(
- e_data, vedata, psl->stroke_pass, e_data->gpencil_fill_sh, gpd, gp_style, id);
- }
- else {
- stl->shgroups[id].shgrps_fill = NULL;
- }
- if ((gp_style->mode == GP_STYLE_MODE_LINE) && (gps->totpoints > 1)) {
- stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_stroke_create(
- e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh, ob, gpd, gp_style, id, false);
- }
- else {
- stl->shgroups[id].shgrps_stroke = DRW_gpencil_shgroup_point_create(
- e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh, ob, gpd, gp_style, id, false);
- }
- }
- else {
- stl->shgroups[id].shgrps_fill = NULL;
- stl->shgroups[id].shgrps_stroke = NULL;
- }
- stl->storage->shgroup_id++;
-
- fillgrp = stl->shgroups[id].shgrps_fill;
- strokegrp = stl->shgroups[id].shgrps_stroke;
-
/* copy color to temp fields to apply temporal changes in the stroke */
copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
@@ -876,17 +799,20 @@ static void gpencil_draw_strokes(
}
/* fill */
- if ((fillgrp) && (!stl->storage->simplify_fill)) {
- gpencil_add_fill_shgroup(
- cache, fillgrp, ob, derived_gpf, gps,
+ if ((gp_style->flag & GP_STYLE_FILL_SHOW) &&
+ (!stl->storage->simplify_fill))
+ {
+ gpencil_add_fill_vertexdata(
+ cache, ob, gpl, derived_gpf, gps,
opacity, tintcolor, false, custonion);
}
/* stroke */
- if (strokegrp) {
- const float nop = ((gp_style->flag & GP_STYLE_STROKE_SHOW) == 0) || (gp_style->stroke_rgba[3] < GPENCIL_ALPHA_OPACITY_THRESH) ? 0.0f : opacity;
- gpencil_add_stroke_shgroup(
- cache, strokegrp, ob, gpl, derived_gpf, gps,
- nop, tintcolor, false, custonion);
+ if ((gp_style->flag & GP_STYLE_STROKE_SHOW) &&
+ (gp_style->stroke_rgba[3] > GPENCIL_ALPHA_OPACITY_THRESH))
+ {
+ gpencil_add_stroke_vertexdata(
+ cache, ob, gpl, derived_gpf, gps,
+ opacity, tintcolor, false, custonion);
}
}
@@ -904,118 +830,11 @@ static void gpencil_draw_strokes(
DRW_shgroup_uniform_vec2(stl->g_data->shgrps_edit_point, "Viewport", viewport_size, 1);
}
- gpencil_add_editpoints_shgroup(stl, cache, ts, ob, gpd, gpl, derived_gpf, src_gps);
- }
- else {
- gpencil_batch_cache_check_free_slots(ob);
+ gpencil_add_editpoints_vertexdata(stl, cache, ts, ob, gpd, gpl, derived_gpf, src_gps);
}
}
GP_SET_SRC_GPS(src_gps);
-
- cache->cache_idx++;
- }
-}
-
- /* draw stroke in drawing buffer */
-void DRW_gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob)
-{
- GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
- GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
- Brush *brush = BKE_paint_brush(&ts->gp_paint->paint);
- bGPdata *gpd_eval = ob->data;
- /* need the original to avoid cow overhead while drawing */
- bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id);
-
- MaterialGPencilStyle *gp_style = NULL;
-
- float obscale = mat4_to_scale(ob->obmat);
-
- /* use the brush material */
- Material *ma = BKE_gpencil_get_material_from_brush(brush);
- if (ma != NULL) {
- gp_style = ma->gp_style;
- }
- /* this is not common, but avoid any special situations when brush could be without material */
- if (gp_style == NULL) {
- gp_style = BKE_material_gpencil_settings_get(ob, ob->actcol);
- }
-
- /* drawing strokes */
- /* Check if may need to draw the active stroke cache, only if this layer is the active layer
- * that is being edited. (Stroke buffer is currently stored in gp-data)
- */
- if (ED_gpencil_session_active() && (gpd->runtime.sbuffer_size > 0)) {
- if ((gpd->runtime.sbuffer_sflag & GP_STROKE_ERASER) == 0) {
- /* It should also be noted that sbuffer contains temporary point types
- * i.e. tGPspoints NOT bGPDspoints
- */
- short lthick = brush->size * obscale;
- /* if only one point, don't need to draw buffer because the user has no time to see it */
- if (gpd->runtime.sbuffer_size > 1) {
- if ((gp_style) && (gp_style->mode == GP_STYLE_MODE_LINE)) {
- stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_stroke_create(
- e_data, vedata, psl->drawing_pass, e_data->gpencil_stroke_sh, NULL, gpd, gp_style, -1, false);
- }
- else {
- stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_point_create(
- e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, NULL, gpd, gp_style, -1, false);
- }
-
- /* clean previous version of the batch */
- if (stl->storage->buffer_stroke) {
- GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_stroke);
- MEM_SAFE_FREE(e_data->batch_buffer_stroke);
- stl->storage->buffer_stroke = false;
- }
-
- /* use unit matrix because the buffer is in screen space and does not need conversion */
- if (gpd->runtime.mode == GP_STYLE_MODE_LINE) {
- e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_stroke_geom(
- gpd, lthick);
- }
- else {
- e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_point_geom(
- gpd, lthick);
- }
-
- if (gp_style->flag & GP_STYLE_STROKE_SHOW) {
- DRW_shgroup_call_add(
- stl->g_data->shgrps_drawing_stroke,
- e_data->batch_buffer_stroke,
- stl->storage->unit_matrix);
- }
-
- if ((gpd->runtime.sbuffer_size >= 3) &&
- (gpd->runtime.sfill[3] > GPENCIL_ALPHA_OPACITY_THRESH) &&
- ((gpd->runtime.sbuffer_sflag & GP_STROKE_NOFILL) == 0) &&
- ((brush->gpencil_settings->flag & GP_BRUSH_DISSABLE_LASSO) == 0) &&
- (gp_style->flag & GP_STYLE_FILL_SHOW))
- {
- /* if not solid, fill is simulated with solid color */
- if (gpd->runtime.bfill_style > 0) {
- gpd->runtime.sfill[3] = 0.5f;
- }
- stl->g_data->shgrps_drawing_fill = DRW_shgroup_create(
- e_data->gpencil_drawing_fill_sh, psl->drawing_pass);
-
- /* clean previous version of the batch */
- if (stl->storage->buffer_fill) {
- GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_fill);
- MEM_SAFE_FREE(e_data->batch_buffer_fill);
- stl->storage->buffer_fill = false;
- }
-
- e_data->batch_buffer_fill = DRW_gpencil_get_buffer_fill_geom(gpd);
- DRW_shgroup_call_add(
- stl->g_data->shgrps_drawing_fill,
- e_data->batch_buffer_fill,
- stl->storage->unit_matrix);
- stl->storage->buffer_fill = true;
- }
- stl->storage->buffer_stroke = true;
- }
- }
}
}
@@ -1036,10 +855,48 @@ static void gpencil_get_onion_alpha(float color[4], bGPdata *gpd)
CLAMP(color[3], MIN_ALPHA_VALUE, 1.0f);
}
+/* function to draw strokes for onion only */
+static void gpencil_draw_onion_strokes(
+ GpencilBatchCache *cache, GPENCIL_e_data *UNUSED(e_data), void *vedata, Object *ob,
+ bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf,
+ const float opacity, const float tintcolor[4], const bool custonion)
+{
+ GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
+ Depsgraph *depsgraph = DRW_context_state_get()->depsgraph;
+
+ float viewmatrix[4][4];
+
+ /* get parent matrix and save as static data */
+ ED_gpencil_parent_location(depsgraph, ob, gpd, gpl, viewmatrix);
+ copy_m4_m4(gpf->runtime.viewmatrix, viewmatrix);
+
+ for (bGPDstroke *gps = gpf->strokes.first; gps; gps = gps->next) {
+ MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
+ copy_v4_v4(gps->runtime.tmp_stroke_rgba, gp_style->stroke_rgba);
+ copy_v4_v4(gps->runtime.tmp_fill_rgba, gp_style->fill_rgba);
+
+ int id = stl->storage->shgroup_id;
+ /* check if stroke can be drawn */
+ if (gpencil_can_draw_stroke(gp_style, gps, true, false) == false) {
+ continue;
+ }
+ /* limit the number of shading groups */
+ if (id >= GPENCIL_MAX_SHGROUPS) {
+ continue;
+ }
+
+ /* stroke */
+ gpencil_add_stroke_vertexdata(
+ cache, ob, gpl, gpf, gps, opacity, tintcolor, true, custonion);
+
+ stl->storage->shgroup_id++;
+ }
+}
+
/* draw onion-skinning for a layer */
static void gpencil_draw_onionskins(
- GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata,
- Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf)
+ GpencilBatchCache *cache, GPENCIL_e_data *e_data, void *vedata,
+ Object *ob, bGPdata *gpd, bGPDlayer *gpl, bGPDframe *gpf)
{
const float default_color[3] = { UNPACK3(U.gpencil_new_layer_col) };
@@ -1055,7 +912,6 @@ static void gpencil_draw_onionskins(
colflag = (bool)gpd->onion_flag & GP_ONION_GHOST_PREVCOL;
-
/* -------------------------------
* 1) Draw Previous Frames First
* ------------------------------- */
@@ -1174,15 +1030,354 @@ static void gpencil_draw_onionskins(
if ((last == gpf->framenum) || (gpf->next == NULL)) {
gpencil_get_onion_alpha(color, gpd);
gpencil_draw_onion_strokes(
- cache, e_data, vedata, ob, gpd, gpl,
- gpf_loop, color[3], color, colflag);
+ cache, e_data, vedata, ob, gpd, gpl,
+ gpf_loop, color[3], color, colflag);
+ }
+ }
+}
+
+static void gpencil_copy_frame(bGPDframe *gpf, bGPDframe *derived_gpf)
+{
+ derived_gpf->prev = gpf->prev;
+ derived_gpf->next = gpf->next;
+ derived_gpf->framenum = gpf->framenum;
+ derived_gpf->flag = gpf->flag;
+ derived_gpf->key_type = gpf->key_type;
+ derived_gpf->runtime = gpf->runtime;
+ copy_m4_m4(derived_gpf->runtime.viewmatrix, gpf->runtime.viewmatrix);
+
+ /* copy strokes */
+ BLI_listbase_clear(&derived_gpf->strokes);
+ for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) {
+ /* make copy of source stroke */
+ bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
+ BLI_addtail(&derived_gpf->strokes, gps_dst);
+ }
+}
+
+/* Triangulate stroke for high quality fill (this is done only if cache is null or stroke was modified) */
+void DRW_gpencil_triangulate_stroke_fill(Object *ob, bGPDstroke *gps)
+{
+ BLI_assert(gps->totpoints >= 3);
+
+ bGPdata *gpd = (bGPdata *)ob->data;
+
+ /* allocate memory for temporary areas */
+ gps->tot_triangles = gps->totpoints - 2;
+ uint(*tmp_triangles)[3] = MEM_mallocN(sizeof(*tmp_triangles) * gps->tot_triangles, "GP Stroke temp triangulation");
+ float(*points2d)[2] = MEM_mallocN(sizeof(*points2d) * gps->totpoints, "GP Stroke temp 2d points");
+ float(*uv)[2] = MEM_mallocN(sizeof(*uv) * gps->totpoints, "GP Stroke temp 2d uv data");
+
+ int direction = 0;
+
+ /* convert to 2d and triangulate */
+ gpencil_stroke_2d_flat(gps->points, gps->totpoints, points2d, &direction);
+ BLI_polyfill_calc(points2d, (uint)gps->totpoints, direction, tmp_triangles);
+
+ /* calc texture coordinates automatically */
+ float minv[2];
+ float maxv[2];
+ /* first needs bounding box data */
+ if (gpd->flag & GP_DATA_UV_ADAPTATIVE) {
+ gpencil_calc_2d_bounding_box(points2d, gps->totpoints, minv, maxv);
+ }
+ else {
+ ARRAY_SET_ITEMS(minv, -1.0f, -1.0f);
+ ARRAY_SET_ITEMS(maxv, 1.0f, 1.0f);
+ }
+
+ /* calc uv data */
+ gpencil_calc_stroke_fill_uv(points2d, gps->totpoints, minv, maxv, uv);
+
+ /* Number of triangles */
+ gps->tot_triangles = gps->totpoints - 2;
+ /* save triangulation data in stroke cache */
+ if (gps->tot_triangles > 0) {
+ if (gps->triangles == NULL) {
+ gps->triangles = MEM_callocN(sizeof(*gps->triangles) * gps->tot_triangles, "GP Stroke triangulation");
+ }
+ else {
+ gps->triangles = MEM_recallocN(gps->triangles, sizeof(*gps->triangles) * gps->tot_triangles);
+ }
+
+ for (int i = 0; i < gps->tot_triangles; i++) {
+ bGPDtriangle *stroke_triangle = &gps->triangles[i];
+ memcpy(gps->triangles[i].verts, tmp_triangles[i], sizeof(uint[3]));
+ /* copy texture coordinates */
+ copy_v2_v2(stroke_triangle->uv[0], uv[tmp_triangles[i][0]]);
+ copy_v2_v2(stroke_triangle->uv[1], uv[tmp_triangles[i][1]]);
+ copy_v2_v2(stroke_triangle->uv[2], uv[tmp_triangles[i][2]]);
}
}
+ else {
+ /* No triangles needed - Free anything allocated previously */
+ if (gps->triangles)
+ MEM_freeN(gps->triangles);
+
+ gps->triangles = NULL;
+ }
+
+ /* disable recalculation flag */
+ if (gps->flag & GP_STROKE_RECALC_CACHES) {
+ gps->flag &= ~GP_STROKE_RECALC_CACHES;
+ }
+
+ /* clear memory */
+ MEM_SAFE_FREE(tmp_triangles);
+ MEM_SAFE_FREE(points2d);
+ MEM_SAFE_FREE(uv);
}
+/* draw stroke in drawing buffer */
+void DRW_gpencil_populate_buffer_strokes(GPENCIL_e_data *e_data, void *vedata, ToolSettings *ts, Object *ob)
+{
+ GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
+ GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
+ Brush *brush = BKE_paint_brush(&ts->gp_paint->paint);
+ bGPdata *gpd_eval = ob->data;
+ /* need the original to avoid cow overhead while drawing */
+ bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id);
+
+ MaterialGPencilStyle *gp_style = NULL;
+
+ float obscale = mat4_to_scale(ob->obmat);
+
+ /* use the brush material */
+ Material *ma = BKE_gpencil_get_material_from_brush(brush);
+ if (ma != NULL) {
+ gp_style = ma->gp_style;
+ }
+ /* this is not common, but avoid any special situations when brush could be without material */
+ if (gp_style == NULL) {
+ gp_style = BKE_material_gpencil_settings_get(ob, ob->actcol);
+ }
+
+ /* drawing strokes */
+ /* Check if may need to draw the active stroke cache, only if this layer is the active layer
+ * that is being edited. (Stroke buffer is currently stored in gp-data)
+ */
+ if (ED_gpencil_session_active() && (gpd->runtime.sbuffer_size > 0)) {
+ if ((gpd->runtime.sbuffer_sflag & GP_STROKE_ERASER) == 0) {
+ /* It should also be noted that sbuffer contains temporary point types
+ * i.e. tGPspoints NOT bGPDspoints
+ */
+ short lthick = brush->size * obscale;
+ /* if only one point, don't need to draw buffer because the user has no time to see it */
+ if (gpd->runtime.sbuffer_size > 1) {
+ if ((gp_style) && (gp_style->mode == GP_STYLE_MODE_LINE)) {
+ stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_stroke_create(
+ e_data, vedata, psl->drawing_pass, e_data->gpencil_stroke_sh, NULL, gpd, gp_style, -1, false);
+ }
+ else {
+ stl->g_data->shgrps_drawing_stroke = DRW_gpencil_shgroup_point_create(
+ e_data, vedata, psl->drawing_pass, e_data->gpencil_point_sh, NULL, gpd, gp_style, -1, false);
+ }
+
+ /* clean previous version of the batch */
+ if (stl->storage->buffer_stroke) {
+ GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_stroke);
+ MEM_SAFE_FREE(e_data->batch_buffer_stroke);
+ stl->storage->buffer_stroke = false;
+ }
+
+ /* use unit matrix because the buffer is in screen space and does not need conversion */
+ if (gpd->runtime.mode == GP_STYLE_MODE_LINE) {
+ e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_stroke_geom(
+ gpd, lthick);
+ }
+ else {
+ e_data->batch_buffer_stroke = DRW_gpencil_get_buffer_point_geom(
+ gpd, lthick);
+ }
+
+ if (gp_style->flag & GP_STYLE_STROKE_SHOW) {
+ DRW_shgroup_call_add(
+ stl->g_data->shgrps_drawing_stroke,
+ e_data->batch_buffer_stroke,
+ stl->storage->unit_matrix);
+ }
+
+ if ((gpd->runtime.sbuffer_size >= 3) &&
+ (gpd->runtime.sfill[3] > GPENCIL_ALPHA_OPACITY_THRESH) &&
+ ((gpd->runtime.sbuffer_sflag & GP_STROKE_NOFILL) == 0) &&
+ ((brush->gpencil_settings->flag & GP_BRUSH_DISSABLE_LASSO) == 0) &&
+ (gp_style->flag & GP_STYLE_FILL_SHOW))
+ {
+ /* if not solid, fill is simulated with solid color */
+ if (gpd->runtime.bfill_style > 0) {
+ gpd->runtime.sfill[3] = 0.5f;
+ }
+ stl->g_data->shgrps_drawing_fill = DRW_shgroup_create(
+ e_data->gpencil_drawing_fill_sh, psl->drawing_pass);
+
+ /* clean previous version of the batch */
+ if (stl->storage->buffer_fill) {
+ GPU_BATCH_DISCARD_SAFE(e_data->batch_buffer_fill);
+ MEM_SAFE_FREE(e_data->batch_buffer_fill);
+ stl->storage->buffer_fill = false;
+ }
+
+ e_data->batch_buffer_fill = DRW_gpencil_get_buffer_fill_geom(gpd);
+ DRW_shgroup_call_add(
+ stl->g_data->shgrps_drawing_fill,
+ e_data->batch_buffer_fill,
+ stl->storage->unit_matrix);
+ stl->storage->buffer_fill = true;
+ }
+ stl->storage->buffer_stroke = true;
+ }
+ }
+ }
+}
+
+/* create all missing batches */
+static void DRW_gpencil_create_batches(GpencilBatchCache *cache)
+{
+ if ((cache->b_point.vbo) && (cache->b_point.batch == NULL)) {
+ cache->b_point.batch = GPU_batch_create_ex(GPU_PRIM_POINTS, cache->b_point.vbo, NULL, GPU_BATCH_OWNS_VBO);
+ }
+ if ((cache->b_stroke.vbo) && (cache->b_stroke.batch == NULL)) {
+ cache->b_stroke.batch = GPU_batch_create_ex(GPU_PRIM_LINE_STRIP_ADJ, cache->b_stroke.vbo, NULL, GPU_BATCH_OWNS_VBO);
+ }
+ if ((cache->b_fill.vbo) && (cache->b_fill.batch == NULL)) {
+ cache->b_fill.batch = GPU_batch_create_ex(GPU_PRIM_TRIS, cache->b_fill.vbo, NULL, GPU_BATCH_OWNS_VBO);
+ }
+ if ((cache->b_edit.vbo) && (cache->b_edit.batch == NULL)) {
+ cache->b_edit.batch = GPU_batch_create_ex(GPU_PRIM_POINTS, cache->b_edit.vbo, NULL, GPU_BATCH_OWNS_VBO);
+ }
+ if ((cache->b_edlin.vbo) && (cache->b_edlin.batch == NULL)) {
+ cache->b_edlin.batch = GPU_batch_create_ex(GPU_PRIM_LINE_STRIP, cache->b_edlin.vbo, NULL, GPU_BATCH_OWNS_VBO);
+ }
+}
+
+/* create all shading groups */
+static void DRW_gpencil_shgroups_create(
+ GPENCIL_e_data *e_data, void *vedata,
+ Object *ob, bGPdata *gpd,
+ GpencilBatchCache *cache, tGPencilObjectCache *cache_ob)
+{
+ GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
+ GPENCIL_PassList *psl = ((GPENCIL_Data *)vedata)->psl;
+ DRWShadingGroup *shgrp = NULL;
+
+ int start_stroke = 0;
+ int start_point = 0;
+ int start_fill = 0;
+ int start_edit = 0;
+ int start_edlin = 0;
+
+ cache_ob->init_grp = NULL;
+ cache_ob->end_grp = NULL;
+
+ for (int i = 0; i < cache->grp_used; i++) {
+ GpencilBatchGroup *elm = &cache->grp_cache[i];
+ bGPDlayer *gpl = elm->gpl;
+ bGPDframe *gpf = elm->gpf;
+ bGPDstroke *gps = elm->gps;
+ MaterialGPencilStyle *gp_style = BKE_material_gpencil_settings_get(ob, gps->mat_nr + 1);
+
+ /* limit the number of shading groups */
+ if (i >= GPENCIL_MAX_SHGROUPS) {
+ break;
+ }
+
+ switch (elm->type) {
+ case eGpencilBatchGroupType_Stroke:
+ {
+ const int len = elm->vertex_idx - start_stroke;
+
+ shgrp = DRW_gpencil_shgroup_stroke_create(
+ e_data, vedata, psl->stroke_pass, e_data->gpencil_stroke_sh,
+ ob, gpd, gp_style, stl->storage->shgroup_id, elm->onion);
+
+ DRW_shgroup_call_range_add(
+ shgrp, cache->b_stroke.batch,
+ (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat,
+ start_stroke, len);
+
+ stl->storage->shgroup_id++;
+ start_stroke = elm->vertex_idx;
+ break;
+ }
+ case eGpencilBatchGroupType_Point:
+ {
+ const int len = elm->vertex_idx - start_point;
+
+ shgrp = DRW_gpencil_shgroup_point_create(
+ e_data, vedata, psl->stroke_pass, e_data->gpencil_point_sh,
+ ob, gpd, gp_style, stl->storage->shgroup_id, elm->onion);
+
+ DRW_shgroup_call_range_add(
+ shgrp, cache->b_point.batch,
+ (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat,
+ start_point, len);
+
+ stl->storage->shgroup_id++;
+ start_point = elm->vertex_idx;
+ break;
+ }
+ case eGpencilBatchGroupType_Fill:
+ {
+ const int len = elm->vertex_idx - start_fill;
+
+ shgrp = DRW_gpencil_shgroup_fill_create(
+ e_data, vedata, psl->stroke_pass, e_data->gpencil_fill_sh,
+ gpd, gpl, gp_style, stl->storage->shgroup_id);
+
+ DRW_shgroup_call_range_add(
+ shgrp, cache->b_fill.batch,
+ (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat,
+ start_fill, len);
+
+ stl->storage->shgroup_id++;
+ start_fill = elm->vertex_idx;
+ break;
+ }
+ case eGpencilBatchGroupType_Edit:
+ {
+ const int len = elm->vertex_idx - start_edit;
+ /* use always the same group */
+ DRW_shgroup_call_range_add(
+ stl->g_data->shgrps_edit_point,
+ cache->b_edit.batch,
+ (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat,
+ start_edit, len);
+
+ start_edit = elm->vertex_idx;
+ break;
+ }
+ case eGpencilBatchGroupType_Edlin:
+ {
+ const int len = elm->vertex_idx - start_edlin;
+ /* use always the same group */
+ DRW_shgroup_call_range_add(
+ stl->g_data->shgrps_edit_line,
+ cache->b_edlin.batch,
+ (!cache_ob->is_dup_ob) ? gpf->runtime.viewmatrix : cache_ob->obmat,
+ start_edlin, len);
+
+ start_edlin = elm->vertex_idx;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ /* save first group */
+ if ((shgrp != NULL) && (cache_ob->init_grp == NULL)) {
+ cache_ob->init_grp = shgrp;
+ }
+ }
+
+ /* save last group */
+ if (shgrp != NULL) {
+ cache_ob->end_grp = shgrp;
+ }
+}
/* populate a datablock for multiedit (no onions, no modifiers) */
void DRW_gpencil_populate_multiedit(
- GPENCIL_e_data *e_data, void *vedata, Scene *scene, Object *ob,
+ GPENCIL_e_data *e_data, void *vedata, Object *ob,
tGPencilObjectCache *cache_ob)
{
bGPdata *gpd = (bGPdata *)ob->data;
@@ -1192,12 +1387,15 @@ void DRW_gpencil_populate_multiedit(
const DRWContextState *draw_ctx = DRW_context_state_get();
int cfra_eval = (int)DEG_get_ctime(draw_ctx->depsgraph);
GpencilBatchCache *cache = gpencil_batch_cache_get(ob, cfra_eval);
+ Scene *scene = draw_ctx->scene;
ToolSettings *ts = scene->toolsettings;
- cache->cache_idx = 0;
/* check if playing animation */
bool playing = stl->storage->is_playing;
+ /* calc max size of VBOs */
+ gpencil_calc_vertex(stl, cache_ob, cache, gpd, cfra_eval);
+
/* draw strokes */
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
/* don't draw layer if hidden */
@@ -1225,36 +1423,23 @@ void DRW_gpencil_populate_multiedit(
}
- cache->is_dirty = false;
-}
+ /* create batchs and shading groups */
+ DRW_gpencil_create_batches(cache);
+ DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob);
-static void gpencil_copy_frame(bGPDframe *gpf, bGPDframe *derived_gpf)
-{
- derived_gpf->prev = gpf->prev;
- derived_gpf->next = gpf->next;
- derived_gpf->framenum = gpf->framenum;
- derived_gpf->flag = gpf->flag;
- derived_gpf->key_type = gpf->key_type;
- derived_gpf->runtime = gpf->runtime;
-
- /* copy strokes */
- BLI_listbase_clear(&derived_gpf->strokes);
- for (bGPDstroke *gps_src = gpf->strokes.first; gps_src; gps_src = gps_src->next) {
- /* make copy of source stroke */
- bGPDstroke *gps_dst = BKE_gpencil_stroke_duplicate(gps_src);
- BLI_addtail(&derived_gpf->strokes, gps_dst);
- }
+ cache->is_dirty = false;
}
/* helper for populate a complete grease pencil datablock */
void DRW_gpencil_populate_datablock(
GPENCIL_e_data *e_data, void *vedata,
- Scene *scene, Object *ob,
+ Object *ob,
tGPencilObjectCache *cache_ob)
{
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
const DRWContextState *draw_ctx = DRW_context_state_get();
const ViewLayer *view_layer = DEG_get_evaluated_view_layer(draw_ctx->depsgraph);
+ Scene *scene = draw_ctx->scene;
bGPdata *gpd_eval = (bGPdata *)ob->data;
bGPdata *gpd = (bGPdata *)DEG_get_original_id(&gpd_eval->id);
@@ -1270,7 +1455,6 @@ void DRW_gpencil_populate_datablock(
const bool time_remap = BKE_gpencil_has_time_modifiers(ob);
float opacity;
- bGPDframe *p = NULL;
bGPDframe *gpf = NULL;
bGPDlayer *gpl_active = BKE_gpencil_layer_getactive(gpd);
@@ -1278,7 +1462,15 @@ void DRW_gpencil_populate_datablock(
bool playing = stl->storage->is_playing;
GpencilBatchCache *cache = gpencil_batch_cache_get(ob, cfra_eval);
- cache->cache_idx = 0;
+
+ /* if object is duplicate, only create shading groups */
+ if (cache_ob->is_dup_ob) {
+ DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob);
+ return;
+ }
+
+ /* calc max size of VBOs */
+ gpencil_calc_vertex(stl, cache_ob, cache, gpd, cfra_eval);
/* init general modifiers data */
if (!stl->storage->simplify_modif) {
@@ -1299,16 +1491,15 @@ void DRW_gpencil_populate_datablock(
}
}
- if ((!time_remap) || (stl->storage->simplify_modif)) {
- gpf = BKE_gpencil_layer_getframe(gpl, cfra_eval, GP_GETFRAME_USE_PREV);
- }
- else {
- int remap_cfra = BKE_gpencil_time_modifier(
+ /* remap time */
+ int remap_cfra = cfra_eval;
+ if ((time_remap) && (!stl->storage->simplify_modif)) {
+ remap_cfra = BKE_gpencil_time_modifier(
draw_ctx->depsgraph, scene, ob, gpl, cfra_eval,
stl->storage->is_render);
-
- gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
}
+
+ gpf = BKE_gpencil_layer_getframe(gpl, remap_cfra, GP_GETFRAME_USE_PREV);
if (gpf == NULL)
continue;
@@ -1328,24 +1519,9 @@ void DRW_gpencil_populate_datablock(
opacity = opacity * v3d->overlay.gpencil_fade_layer;
}
- /* create derived array data or expand */
- if (cache_ob->data_idx + 1 > gpl->runtime.len_derived) {
- if ((gpl->runtime.len_derived == 0) ||
- (gpl->runtime.derived_array == NULL))
- {
- p = MEM_callocN(sizeof(struct bGPDframe), "bGPDframe array");
- gpl->runtime.len_derived = 1;
- }
- else {
- gpl->runtime.len_derived++;
- p = MEM_recallocN(gpl->runtime.derived_array, sizeof(struct bGPDframe) * gpl->runtime.len_derived);
- }
- gpl->runtime.derived_array = p;
-
- derived_gpf = &gpl->runtime.derived_array[cache_ob->data_idx];
- }
-
- derived_gpf = &gpl->runtime.derived_array[cache_ob->data_idx];
+ /* create derived frames array data or expand */
+ int derived_idx = BLI_findindex(&gpd->layers, gpl);
+ derived_gpf = &cache->derived_array[derived_idx];
/* if no derived frame or dirty cache, create a new one */
if ((derived_gpf == NULL) || (cache->is_dirty)) {
@@ -1359,8 +1535,7 @@ void DRW_gpencil_populate_datablock(
/* draw onion skins */
if (!ID_IS_LINKED(&gpd->id)) {
- if ((!cache_ob->is_dup_data) &&
- (gpd->flag & GP_DATA_SHOW_ONIONSKINS) &&
+ if ((gpd->flag & GP_DATA_SHOW_ONIONSKINS) &&
(do_onion) && (gpl->onion_flag & GP_LAYER_ONIONSKIN) &&
((!playing) || (gpd->onion_flag & GP_ONION_GHOST_ALWAYS)) &&
(!cache_ob->is_dup_ob) && (gpd->id.us <= 1))
@@ -1373,18 +1548,9 @@ void DRW_gpencil_populate_datablock(
}
}
/* draw normal strokes */
- if (!cache_ob->is_dup_ob) {
- /* save batch index */
- gpl->runtime.batch_index = cache->cache_idx;
- }
- else {
- cache->cache_idx = gpl->runtime.batch_index;
- }
-
gpencil_draw_strokes(
- cache, e_data, vedata, ts, ob, gpd, gpl, gpf, derived_gpf,
- opacity, gpl->tintcolor, false, cache_ob);
-
+ cache, e_data, vedata, ts, ob, gpd, gpl, gpf, derived_gpf,
+ opacity, gpl->tintcolor, false, cache_ob);
}
/* clear any lattice data */
@@ -1392,5 +1558,25 @@ void DRW_gpencil_populate_datablock(
BKE_gpencil_lattice_clear(ob);
}
+ /* create batchs and shading groups */
+ DRW_gpencil_create_batches(cache);
+ DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob);
+
cache->is_dirty = false;
}
+
+void DRW_gpencil_populate_particles(GPENCIL_e_data *e_data, void *vedata)
+{
+ GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
+
+ /* add particles */
+ for (int i = 0; i < stl->g_data->gp_cache_used; i++) {
+ tGPencilObjectCache *cache_ob = &stl->g_data->gp_object_cache[i];
+ Object *ob = cache_ob->ob;
+ if (cache_ob->is_dup_ob) {
+ bGPdata *gpd = (bGPdata *)ob->data;
+ GpencilBatchCache *cache = ob->runtime.gpencil_cache;
+ DRW_gpencil_shgroups_create(e_data, vedata, ob, gpd, cache, cache_ob);
+ }
+ }
+}
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.c b/source/blender/draw/engines/gpencil/gpencil_engine.c
index 52cd79e4394..7be06d501f1 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.c
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.c
@@ -315,9 +315,6 @@ void GPENCIL_cache_init(void *vedata)
if (!stl->shgroups) {
/* Alloc maximum size because count strokes is very slow and can be very complex due onion skinning.
- I tried to allocate only one block and using realloc, increasing the size when read a new strokes
- in cache_finish, but the realloc produce weird things on screen, so we keep as is while we found
- a better solution
*/
stl->shgroups = MEM_mallocN(sizeof(GPENCIL_shgroup) * GPENCIL_MAX_SHGROUPS, "GPENCIL_shgroup");
}
@@ -498,28 +495,22 @@ void GPENCIL_cache_init(void *vedata)
static void gpencil_add_draw_data(void *vedata, Object *ob)
{
GPENCIL_StorageList *stl = ((GPENCIL_Data *)vedata)->stl;
- const DRWContextState *draw_ctx = DRW_context_state_get();
- Scene *scene = draw_ctx->scene;
bGPdata *gpd = (bGPdata *)ob->data;
const bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
int i = stl->g_data->gp_cache_used - 1;
tGPencilObjectCache *cache_ob = &stl->g_data->gp_object_cache[i];
- /* save init shading group */
- cache_ob->init_grp = stl->storage->shgroup_id;
-
- /* fill shading groups */
- if ((!is_multiedit) || (cache_ob->is_dup_ob)) {
- DRW_gpencil_populate_datablock(&e_data, vedata, scene, ob, cache_ob);
- }
- else {
- DRW_gpencil_populate_multiedit(&e_data, vedata, scene, ob, cache_ob);
+ if (!cache_ob->is_dup_ob) {
+ /* fill shading groups */
+ if (!is_multiedit) {
+ DRW_gpencil_populate_datablock(&e_data, vedata, ob, cache_ob);
+ }
+ else {
+ DRW_gpencil_populate_multiedit(&e_data, vedata, ob, cache_ob);
+ }
}
- /* save end shading group */
- cache_ob->end_grp = stl->storage->shgroup_id - 1;
-
/* FX passses */
cache_ob->has_fx = false;
if ((!stl->storage->simplify_fx) &&
@@ -549,25 +540,12 @@ void GPENCIL_cache_populate(void *vedata, Object *ob)
if (ob->type == OB_GPENCIL && ob->data) {
bGPdata *gpd = (bGPdata *)ob->data;
- /* if onion, set as dirty always
- * This reduces performance, but avoid any crash in the multiple
- * overlay and multiwindow options
- */
- if (gpd->flag & GP_DATA_SHOW_ONIONSKINS) {
- gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
- }
-
/* when start/stop animation the cache must be set as dirty to reset all data */
if (stl->storage->reset_cache) {
gpd->flag |= GP_DATA_CACHE_IS_DIRTY;
stl->storage->reset_cache = false;
}
- /* is edit mode only current object, not particle instances */
- if ((ob->base_flag & BASE_FROMDUPLI) && GPENCIL_ANY_EDIT_MODE(gpd)) {
- return;
- }
-
if ((stl->g_data->session_flag & GP_DRW_PAINT_READY) == 0) {
/* save gp objects for drawing later */
@@ -618,10 +596,9 @@ void GPENCIL_cache_populate(void *vedata, Object *ob)
}
}
-void GPENCIL_cache_finish(void *UNUSED(vedata))
+void GPENCIL_cache_finish(void *vedata)
{
- return;
-
+ DRW_gpencil_populate_particles(&e_data, vedata);
}
/* helper function to sort inverse gpencil objects using qsort */
@@ -657,6 +634,13 @@ static void gpencil_prepare_fast_drawing(
static void gpencil_free_obj_runtime(GPENCIL_StorageList *stl)
{
+ /* reset all cache flags */
+ for (int i = 0; i < stl->g_data->gp_cache_used; i++) {
+ tGPencilObjectCache *cache_ob = &stl->g_data->gp_object_cache[i];
+ bGPdata *gpd = cache_ob->gpd;
+ gpd->flag &= ~GP_DATA_CACHE_IS_DIRTY;
+ }
+
/* free the cache itself */
MEM_SAFE_FREE(stl->g_data->gp_object_cache);
}
@@ -672,7 +656,6 @@ void GPENCIL_draw_scene(void *ved)
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
GPENCIL_TextureList *txl = ((GPENCIL_Data *)vedata)->txl;
- int init_grp, end_grp;
tGPencilObjectCache *cache_ob;
const float clearcol[4] = { 0.0f, 0.0f, 0.0f, 0.0f };
@@ -729,33 +712,27 @@ void GPENCIL_draw_scene(void *ved)
for (int i = 0; i < stl->g_data->gp_cache_used; i++) {
cache_ob = &stl->g_data->gp_object_cache[i];
bGPdata *gpd = cache_ob->gpd;
- init_grp = cache_ob->init_grp;
- end_grp = cache_ob->end_grp;
/* Render stroke in separated framebuffer */
GPU_framebuffer_bind(fbl->temp_fb_a);
GPU_framebuffer_clear_color_depth(fbl->temp_fb_a, clearcol, 1.0f);
- /* Stroke Pass: DRW_STATE_WRITE_COLOR | DRW_STATE_BLEND | DRW_STATE_WRITE_DEPTH
- * draw only a subset that usually start with a fill and end with stroke because the
- * shading groups are created by pairs */
- if (end_grp >= init_grp) {
+ /* Stroke Pass:
+ * draw only a subset that usually starts with a fill and ends with stroke
+ */
+ if (cache_ob->init_grp) {
/* previews don't use AA */
if (!stl->storage->is_mat_preview) {
MULTISAMPLE_GP_SYNC_ENABLE(stl->storage->multisamples, fbl);
}
DRW_draw_pass_subset(
- psl->stroke_pass,
- stl->shgroups[init_grp].shgrps_fill != NULL ?
- stl->shgroups[init_grp].shgrps_fill : stl->shgroups[init_grp].shgrps_stroke,
- stl->shgroups[end_grp].shgrps_stroke);
+ psl->stroke_pass, cache_ob->init_grp, cache_ob->end_grp);
if (!stl->storage->is_mat_preview) {
MULTISAMPLE_GP_SYNC_DISABLE(stl->storage->multisamples, fbl, fbl->temp_fb_a, txl);
}
}
-
/* Current buffer drawing */
if ((!is_render) && (cache_ob->is_dup_ob == false)) {
DRW_draw_pass(psl->drawing_pass);
diff --git a/source/blender/draw/engines/gpencil/gpencil_engine.h b/source/blender/draw/engines/gpencil/gpencil_engine.h
index 8e68fdef952..0fe25ba9f0f 100644
--- a/source/blender/draw/engines/gpencil/gpencil_engine.h
+++ b/source/blender/draw/engines/gpencil/gpencil_engine.h
@@ -40,7 +40,10 @@ struct RenderLayer;
#define GPENCIL_CACHE_BLOCK_SIZE 8
#define GPENCIL_MAX_SHGROUPS 65536
-#define GPENCIL_MIN_BATCH_SLOTS_CHUNK 16
+#define GPENCIL_GROUPS_BLOCK_SIZE 1024
+
+/* used to expand VBOs. Size has a big impact in the speed */
+#define GPENCIL_VBO_BLOCK_SIZE 128
#define GPENCIL_COLOR_SOLID 0
#define GPENCIL_COLOR_TEXTURE 1
@@ -60,7 +63,8 @@ struct RenderLayer;
typedef struct tGPencilObjectCache {
struct Object *ob;
struct bGPdata *gpd;
- int init_grp, end_grp;
+ DRWShadingGroup *init_grp;
+ DRWShadingGroup *end_grp;
int idx; /*original index, can change after sort */
/* effects */
@@ -82,8 +86,10 @@ typedef struct tGPencilObjectCache {
float obmat[4][4];
float zdepth; /* z-depth value to sort gp object */
bool is_dup_ob; /* flag to tag duplicate objects */
- bool is_dup_data; /* other object uses datablock already */
- int data_idx; /* derived data index */
+
+ /* GPU data size */
+ int tot_vertex;
+ int tot_triangles;
} tGPencilObjectCache;
/* *********** LISTS *********** */
@@ -98,8 +104,6 @@ typedef struct GPENCIL_shgroup {
int fill_style;
int keep_size;
float obj_scale;
- struct DRWShadingGroup *shgrps_fill;
- struct DRWShadingGroup *shgrps_stroke;
} GPENCIL_shgroup;
typedef struct GPENCIL_Storage {
@@ -276,24 +280,57 @@ typedef struct GPENCIL_e_data {
} GPENCIL_e_data; /* Engine data */
/* GPUBatch Cache */
+typedef struct GpencilBatchCacheElem {
+ GPUBatch *batch;
+ GPUVertBuf *vbo;
+ int vbo_len;
+ /* attr ids */
+ GPUVertFormat format;
+ uint pos_id;
+ uint color_id;
+ uint thickness_id;
+ uint uvdata_id;
+
+ /* size for VBO alloc */
+ int tot_vertex;
+} GpencilBatchCacheElem;
+
+typedef struct GpencilBatchGroup {
+ bGPDlayer *gpl; /* reference to original layer */
+ bGPDframe *gpf; /* reference to original frame */
+ bGPDstroke *gps; /* reference to original stroke */
+ short type; /* type of element */
+ bool onion; /* the group is part of onion skin */
+ int vertex_idx; /* index of vertex data */
+} GpencilBatchGroup;
+
+typedef enum GpencilBatchGroup_Type {
+ eGpencilBatchGroupType_Stroke = 1,
+ eGpencilBatchGroupType_Point = 2,
+ eGpencilBatchGroupType_Fill = 3,
+ eGpencilBatchGroupType_Edit = 4,
+ eGpencilBatchGroupType_Edlin = 5,
+} GpencilBatchGroup_Type;
+
typedef struct GpencilBatchCache {
- /* For normal strokes, a variable number of batch can be needed depending of number of strokes.
- It could use the stroke number as total size, but when activate the onion skining, the number
- can change, so the size is changed dynamically.
- */
- GPUBatch **batch_stroke;
- GPUBatch **batch_fill;
- GPUBatch **batch_edit;
- GPUBatch **batch_edlin;
+ GpencilBatchCacheElem b_stroke;
+ GpencilBatchCacheElem b_point;
+ GpencilBatchCacheElem b_fill;
+ GpencilBatchCacheElem b_edit;
+ GpencilBatchCacheElem b_edlin;
/* settings to determine if cache is invalid */
bool is_dirty;
bool is_editmode;
int cache_frame;
- /* keep information about the size of the cache */
- int cache_size; /* total batch slots available */
- int cache_idx; /* current slot index */
+ /* data with the shading groups */
+ int grp_used; /* total groups in arrays */
+ int grp_size; /* max size of the array */
+ struct GpencilBatchGroup *grp_cache; /* array of elements */
+
+ int tot_layers;
+ struct bGPDframe *derived_array; /* runtime data created by modifiers */
} GpencilBatchCache;
/* general drawing functions */
@@ -302,23 +339,24 @@ struct DRWShadingGroup *DRW_gpencil_shgroup_stroke_create(
struct Object *ob, struct bGPdata *gpd, struct MaterialGPencilStyle *gp_style, int id, bool onion);
void DRW_gpencil_populate_datablock(
struct GPENCIL_e_data *e_data, void *vedata,
- struct Scene *scene,
struct Object *ob, struct tGPencilObjectCache *cache_ob);
void DRW_gpencil_populate_buffer_strokes(
struct GPENCIL_e_data *e_data, void *vedata, struct ToolSettings *ts, struct Object *ob);
void DRW_gpencil_populate_multiedit(
struct GPENCIL_e_data *e_data, void *vedata,
- struct Scene *scene, struct Object *ob, struct tGPencilObjectCache *cache_ob);
+ struct Object *ob, struct tGPencilObjectCache *cache_ob);
void DRW_gpencil_triangulate_stroke_fill(struct Object *ob, struct bGPDstroke *gps);
+void DRW_gpencil_populate_particles(struct GPENCIL_e_data *e_data, void *vedata);
void DRW_gpencil_multisample_ensure(struct GPENCIL_Data *vedata, int rect_w, int rect_h);
/* create geometry functions */
-struct GPUBatch *DRW_gpencil_get_point_geom(struct bGPDstroke *gps, short thickness, const float ink[4]);
-struct GPUBatch *DRW_gpencil_get_stroke_geom(struct bGPDstroke *gps, short thickness, const float ink[4]);
-struct GPUBatch *DRW_gpencil_get_fill_geom(struct Object *ob, struct bGPDstroke *gps, const float color[4]);
-struct GPUBatch *DRW_gpencil_get_edit_geom(struct bGPDstroke *gps, float alpha, short dflag);
-struct GPUBatch *DRW_gpencil_get_edlin_geom(struct bGPDstroke *gps, float alpha, short dflag);
+void DRW_gpencil_get_point_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, short thickness, const float ink[4]);
+void DRW_gpencil_get_stroke_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, short thickness, const float ink[4]);
+void DRW_gpencil_get_fill_geom(struct GpencilBatchCacheElem *be, struct Object *ob, struct bGPDstroke *gps, const float color[4]);
+void DRW_gpencil_get_edit_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, float alpha, short dflag);
+void DRW_gpencil_get_edlin_geom(struct GpencilBatchCacheElem *be, struct bGPDstroke *gps, float alpha, short dflag);
+
struct GPUBatch *DRW_gpencil_get_buffer_stroke_geom(struct bGPdata *gpd, short thickness);
struct GPUBatch *DRW_gpencil_get_buffer_fill_geom(struct bGPdata *gpd);
struct GPUBatch *DRW_gpencil_get_buffer_point_geom(struct bGPdata *gpd, short thickness);
@@ -329,8 +367,15 @@ struct tGPencilObjectCache *gpencil_object_cache_add(
struct tGPencilObjectCache *cache_array, struct Object *ob,
int *gp_cache_size, int *gp_cache_used);
+/* shading groups cache functions */
+struct GpencilBatchGroup *gpencil_group_cache_add(
+ struct GpencilBatchGroup *cache_array,
+ struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps,
+ const short type, const bool onion,
+ const int vertex_idx,
+ int *grp_size, int *grp_used);
+
/* geometry batch cache functions */
-void gpencil_batch_cache_check_free_slots(struct Object *ob);
struct GpencilBatchCache *gpencil_batch_cache_get(struct Object *ob, int cfra);
/* effects */
diff --git a/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl b/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl
index d2cad4e44f7..1d57cdc4bcf 100644
--- a/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl
+++ b/source/blender/draw/engines/gpencil/shaders/gpencil_fill_frag.glsl
@@ -15,6 +15,7 @@ uniform int texture_mix;
uniform int texture_flip;
uniform float texture_opacity;
uniform int xraymode;
+uniform float layer_opacity;
uniform sampler2D myTexture;
uniform int texture_clamp;
@@ -66,6 +67,7 @@ void set_color(in vec4 color, in vec4 color2, in vec4 tcolor, in float mixv, in
ocolor = (flip == 0) ? mix(color, color2, factor) : mix(color2, color, factor);
}
}
+ ocolor.a *= layer_opacity;
}
void main()
@@ -115,15 +117,17 @@ void main()
}
/* mix with texture */
fragColor = (texture_mix == 1) ? mix(chesscolor, text_color, mix_factor) : chesscolor;
+ fragColor.a *= layer_opacity;
}
/* texture */
if (fill_type == TEXTURE) {
fragColor = (texture_mix == 1) ? mix(text_color, finalColor, mix_factor) : text_color;
+ fragColor.a *= layer_opacity;
}
/* pattern */
if (fill_type == PATTERN) {
fragColor = finalColor;
- fragColor.a = min(text_color.a, finalColor.a);
+ fragColor.a = min(text_color.a, finalColor.a) * layer_opacity;
}
}
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
index eadc5e4b0d0..7ba6b3a5193 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_data_lib.glsl
@@ -4,7 +4,7 @@ struct LightData {
};
struct WorldData {
- vec3 spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS];
+ vec3 spherical_harmonics_coefs[STUDIOLIGHT_SH_MAX_COMPONENTS];
vec4 background_color_low;
vec4 background_color_high;
vec4 object_outline_color;
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
index 66b529fcf5e..62040da8524 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_prepass_vert.glsl
@@ -1,4 +1,5 @@
uniform mat4 ModelViewProjectionMatrix;
+uniform mat4 ModelMatrixInverse;
uniform mat4 ProjectionMatrix;
uniform mat4 ViewProjectionMatrix;
uniform mat4 ViewMatrixInverse;
@@ -41,6 +42,7 @@ void main()
vec3 pos, tan, binor;
hair_get_pos_tan_binor_time(
(ProjectionMatrix[3][3] == 0.0),
+ ModelMatrixInverse,
ViewMatrixInverse[3].xyz, ViewMatrixInverse[2].xyz,
pos, tan, binor, time, thickness, thick_time);
/* To "simulate" anisotropic shading, randomize hair normal per strand. */
diff --git a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
index 82d0d1fcd02..ab48aa5fa03 100644
--- a/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
+++ b/source/blender/draw/engines/workbench/shaders/workbench_world_light_lib.glsl
@@ -1,59 +1,85 @@
#define BLINN
-vec3 spherical_harmonics(vec3 N, vec3 spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS])
+#if STUDIOLIGHT_SH_BANDS == 2
+vec3 spherical_harmonics(vec3 N, vec3 sh_coefs[STUDIOLIGHT_SH_MAX_COMPONENTS])
{
- vec3 sh = vec3(0.0);
+ /* http://www.geomerics.com/wp-content/uploads/2015/08/CEDEC_Geomerics_ReconstructingDiffuseLighting1.pdf */
+ /* Highly optimized form, precompute as much as we can. */
+ /**
+ * R1 = 0.5 * vec3(L3.r, L2.r, L1.r);
+ * sh_coefs[0..2] = R1 / length(R1);
+ **/
+ vec3 q;
+ q.x = dot(sh_coefs[1], N);
+ q.y = dot(sh_coefs[2], N);
+ q.z = dot(sh_coefs[3], N);
+ q = 0.5 * q + 0.5;
+
+ /**
+ * R0 = L0.r;
+ * lr1_r0 = lenR1 / R0;
+ * p = 1.0 + 2.0 * lr1_r0;
+ * a = (1.0 - lr1_r0) / (1.0 + lr1_r0);
+ * return R0 * (a + (1.0 - a) * (p + 1.0) * pow(q, p));
+ *
+ * sh_coefs[4] = p;
+ * sh_coefs[5] = R0 * a;
+ * sh_coefs[0] = R0 * (1.0 - a) * (p + 1.0);
+ **/
+ q = pow(q, sh_coefs[4]);
+ return sh_coefs[0] * q + sh_coefs[5];
+}
+
+#else
- sh += 0.282095 * spherical_harmonics_coefs[0];
+vec3 spherical_harmonics(vec3 N, vec3 sh_coefs[STUDIOLIGHT_SH_MAX_COMPONENTS])
+{
+ vec3 sh = 0.282095 * sh_coefs[0];
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 0
+# if STUDIOLIGHT_SH_BANDS > 1
float nx = N.x;
float ny = N.y;
float nz = N.z;
- sh += -0.488603 * nz * spherical_harmonics_coefs[1];
- sh += 0.488603 * ny * spherical_harmonics_coefs[2];
- sh += -0.488603 * nx * spherical_harmonics_coefs[3];
-#endif
-
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 1
+ sh += -0.488603 * nz * sh_coefs[1];
+ sh += 0.488603 * ny * sh_coefs[2];
+ sh += -0.488603 * nx * sh_coefs[3];
+# endif
+# if STUDIOLIGHT_SH_BANDS > 2
float nx2 = nx * nx;
float ny2 = ny * ny;
float nz2 = nz * nz;
-
- sh += 1.092548 * nx * nz * spherical_harmonics_coefs[4];
- sh += -1.092548 * nz * ny * spherical_harmonics_coefs[5];
- sh += 0.315392 * (3.0 * ny2 - 1.0) * spherical_harmonics_coefs[6];
- sh += -1.092548 * nx * ny * spherical_harmonics_coefs[7];
- sh += 0.546274 * (nx2 - nz2) * spherical_harmonics_coefs[8];
-#endif
-
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL > 3
+ sh += 1.092548 * nx * nz * sh_coefs[4];
+ sh += -1.092548 * nz * ny * sh_coefs[5];
+ sh += 0.315392 * (3.0 * ny2 - 1.0) * sh_coefs[6];
+ sh += -1.092548 * nx * ny * sh_coefs[7];
+ sh += 0.546274 * (nx2 - nz2) * sh_coefs[8];
+# endif
+# if STUDIOLIGHT_SH_BANDS > 4
float nx4 = nx2 * nx2;
float ny4 = ny2 * ny2;
float nz4 = nz2 * nz2;
-
- sh += (2.5033429417967046 * nx * nz * (nx2 - nz2)) * spherical_harmonics_coefs[9];
- sh += (-1.7701307697799304 * nz * ny * (3.0 * nx2 - nz2)) * spherical_harmonics_coefs[10];
- sh += (0.9461746957575601 * nz * nx * (-1.0 +7.0*ny2)) * spherical_harmonics_coefs[11];
- sh += (-0.6690465435572892 * nz * ny * (-3.0 + 7.0 * ny2)) * spherical_harmonics_coefs[12];
- sh += ((105.0*ny4-90.0*ny2+9.0)/28.359261614) * spherical_harmonics_coefs[13];
- sh += (-0.6690465435572892 * nx * ny * (-3.0 + 7.0 * ny2)) * spherical_harmonics_coefs[14];
- sh += (0.9461746957575601 * (nx2 - nz2) * (-1.0 + 7.0 * ny2)) * spherical_harmonics_coefs[15];
- sh += (-1.7701307697799304 * nx * ny * (nx2 - 3.0 * nz2)) * spherical_harmonics_coefs[16];
- sh += (0.6258357354491761 * (nx4 - 6.0 * nz2 * nx2 + nz4)) * spherical_harmonics_coefs[17];
-#endif
-
+ sh += (2.5033429417967046 * nx * nz * (nx2 - nz2)) * sh_coefs[9];
+ sh += (-1.7701307697799304 * nz * ny * (3.0 * nx2 - nz2)) * sh_coefs[10];
+ sh += (0.9461746957575601 * nz * nx * (-1.0 +7.0*ny2)) * sh_coefs[11];
+ sh += (-0.6690465435572892 * nz * ny * (-3.0 + 7.0 * ny2)) * sh_coefs[12];
+ sh += ((105.0*ny4-90.0*ny2+9.0)/28.359261614) * sh_coefs[13];
+ sh += (-0.6690465435572892 * nx * ny * (-3.0 + 7.0 * ny2)) * sh_coefs[14];
+ sh += (0.9461746957575601 * (nx2 - nz2) * (-1.0 + 7.0 * ny2)) * sh_coefs[15];
+ sh += (-1.7701307697799304 * nx * ny * (nx2 - 3.0 * nz2)) * sh_coefs[16];
+ sh += (0.6258357354491761 * (nx4 - 6.0 * nz2 * nx2 + nz4)) * sh_coefs[17];
+# endif
return sh;
}
+#endif
vec3 get_world_diffuse_light(WorldData world_data, vec3 N)
{
- return (spherical_harmonics(vec3(N.x, N.y, -N.z), world_data.spherical_harmonics_coefs));
+ return spherical_harmonics(N, world_data.spherical_harmonics_coefs);
}
vec3 get_camera_diffuse_light(WorldData world_data, vec3 N)
{
- return (spherical_harmonics(vec3(N.x, -N.z, -N.y), world_data.spherical_harmonics_coefs));
+ return spherical_harmonics(vec3(N.x, -N.z, N.y), world_data.spherical_harmonics_coefs);
}
/* N And I are in View Space. */
@@ -62,20 +88,20 @@ vec3 get_world_specular_light(vec4 specular_data, LightData light_data, vec3 N,
#ifdef V3D_SHADING_SPECULAR_HIGHLIGHT
vec3 specular_light = specular_data.rgb * light_data.specular_color.rgb * light_data.specular_color.a;
- float shininess = exp2(10*(1.0-specular_data.a) + 1);
+ float shininess = exp2(10.0 * (1.0 - specular_data.a) + 1);
# ifdef BLINN
- float normalization_factor = (shininess + 8) / (8 * M_PI);
+ float normalization_factor = (shininess + 8.0) / (8.0 * M_PI);
vec3 L = -light_data.light_direction_vs.xyz;
vec3 halfDir = normalize(L + I);
- float specAngle = max(dot(halfDir, N), 0.0);
+ float spec_angle = max(dot(halfDir, N), 0.0);
float NL = max(dot(L, N), 0.0);
- float specular_influence = pow(specAngle, shininess) * NL * normalization_factor;
+ float specular_influence = pow(spec_angle, shininess) * NL * normalization_factor;
# else
vec3 reflection_vector = reflect(I, N);
- float specAngle = max(dot(light_data.light_direction_vs.xyz, reflection_vector), 0.0);
- float specular_influence = pow(specAngle, shininess);
+ float spec_angle = max(dot(light_data.light_direction_vs.xyz, reflection_vector), 0.0);
+ float specular_influence = pow(spec_angle, shininess);
# endif
vec3 specular_color = specular_light * specular_influence;
@@ -89,8 +115,15 @@ vec3 get_world_specular_light(vec4 specular_data, LightData light_data, vec3 N,
vec3 get_world_specular_lights(WorldData world_data, vec4 specular_data, vec3 N, vec3 I)
{
vec3 specular_light = vec3(0.0);
- for (int i = 0 ; i < world_data.num_lights ; i ++) {
- specular_light += get_world_specular_light(specular_data, world_data.lights[i], N, I);
+ /* Manual loop unrolling provide much better perf. */
+ if (world_data.num_lights > 0) {
+ specular_light += get_world_specular_light(specular_data, world_data.lights[0], N, I);
+ }
+ if (world_data.num_lights > 1) {
+ specular_light += get_world_specular_light(specular_data, world_data.lights[1], N, I);
+ }
+ if (world_data.num_lights > 2) {
+ specular_light += get_world_specular_light(specular_data, world_data.lights[2], N, I);
}
return specular_light;
}
diff --git a/source/blender/draw/engines/workbench/workbench_deferred.c b/source/blender/draw/engines/workbench/workbench_deferred.c
index f7ab9bad5ec..66dcfdd66d0 100644
--- a/source/blender/draw/engines/workbench/workbench_deferred.c
+++ b/source/blender/draw/engines/workbench/workbench_deferred.c
@@ -510,8 +510,8 @@ static void workbench_composite_uniforms(WORKBENCH_PrivateData *wpd, DRWShadingG
DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) {
- BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE);
- DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture);
+ BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE);
+ DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirect_radiance_gputexture );
}
workbench_material_set_normal_world_matrix(grp, wpd, e_data.normal_world_matrix);
diff --git a/source/blender/draw/engines/workbench/workbench_forward.c b/source/blender/draw/engines/workbench/workbench_forward.c
index 9991c30ea8e..aa75e1746c7 100644
--- a/source/blender/draw/engines/workbench/workbench_forward.c
+++ b/source/blender/draw/engines/workbench/workbench_forward.c
@@ -169,8 +169,8 @@ static WORKBENCH_MaterialData *get_or_create_material_data(
workbench_material_set_normal_world_matrix(grp, wpd, e_data.normal_world_matrix);
workbench_material_copy(material, &material_template);
if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) {
- BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE);
- DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture);
+ BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE);
+ DRW_shgroup_uniform_texture(grp, "matcapImage", wpd->studio_light->equirect_radiance_gputexture );
}
if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) {
DRW_shgroup_uniform_vec2(grp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
@@ -456,8 +456,8 @@ static void workbench_forward_cache_populate_particles(WORKBENCH_Data *vedata, O
float hair_alpha = XRAY_ALPHA(wpd) * 0.33f;
DRW_shgroup_uniform_float_copy(shgrp, "alpha", hair_alpha);
if (STUDIOLIGHT_ORIENTATION_VIEWNORMAL_ENABLED(wpd)) {
- BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECTANGULAR_RADIANCE_GPUTEXTURE);
- DRW_shgroup_uniform_texture(shgrp, "matcapImage", wpd->studio_light->equirectangular_radiance_gputexture);
+ BKE_studiolight_ensure_flag(wpd->studio_light, STUDIOLIGHT_EQUIRECT_RADIANCE_GPUTEXTURE);
+ DRW_shgroup_uniform_texture(shgrp, "matcapImage", wpd->studio_light->equirect_radiance_gputexture );
}
if (SPECULAR_HIGHLIGHT_ENABLED(wpd) || MATCAP_ENABLED(wpd)) {
DRW_shgroup_uniform_vec2(shgrp, "invertedViewportSize", DRW_viewport_invert_size_get(), 1);
diff --git a/source/blender/draw/engines/workbench/workbench_materials.c b/source/blender/draw/engines/workbench/workbench_materials.c
index 6a11b2b8457..572a26c86bd 100644
--- a/source/blender/draw/engines/workbench/workbench_materials.c
+++ b/source/blender/draw/engines/workbench/workbench_materials.c
@@ -91,19 +91,8 @@ char *workbench_material_build_defines(WORKBENCH_PrivateData *wpd, bool use_text
BLI_dynstr_appendf(ds, "#define HAIR_SHADER\n");
}
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 0
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 0\n");
-#endif
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 1
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 1\n");
-#endif
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 2
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 2\n");
-#endif
-#if STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL == 4
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_LEVEL 4\n");
-#endif
- BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS 18\n");
+ BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SH_BANDS %d\n", STUDIOLIGHT_SH_BANDS);
+ BLI_dynstr_appendf(ds, "#define STUDIOLIGHT_SH_MAX_COMPONENTS %d\n", WORKBENCH_SH_DATA_LEN);
str = BLI_dynstr_get_cstring(ds);
BLI_dynstr_free(ds);
diff --git a/source/blender/draw/engines/workbench/workbench_private.h b/source/blender/draw/engines/workbench/workbench_private.h
index 35cd3cc140e..93b3bddfb72 100644
--- a/source/blender/draw/engines/workbench/workbench_private.h
+++ b/source/blender/draw/engines/workbench/workbench_private.h
@@ -138,8 +138,10 @@ typedef struct WORKBENCH_UBO_Light {
float energy;
} WORKBENCH_UBO_Light;
+#define WORKBENCH_SH_DATA_LEN ((STUDIOLIGHT_SH_BANDS == 2) ? 6 : STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN)
+
typedef struct WORKBENCH_UBO_World {
- float spherical_harmonics_coefs[STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS][4];
+ float spherical_harmonics_coefs[WORKBENCH_SH_DATA_LEN][4];
float background_color_low[4];
float background_color_high[4];
float object_outline_color[4];
diff --git a/source/blender/draw/engines/workbench/workbench_studiolight.c b/source/blender/draw/engines/workbench/workbench_studiolight.c
index f9e5df91388..901260d0660 100644
--- a/source/blender/draw/engines/workbench/workbench_studiolight.c
+++ b/source/blender/draw/engines/workbench/workbench_studiolight.c
@@ -34,15 +34,59 @@
void studiolight_update_world(StudioLight *sl, WORKBENCH_UBO_World *wd)
{
- int i;
BKE_studiolight_ensure_flag(sl, STUDIOLIGHT_SPHERICAL_HARMONICS_COEFFICIENTS_CALCULATED);
- for (i = 0; i < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; i++) {
- copy_v3_v3(wd->spherical_harmonics_coefs[i], sl->spherical_harmonics_coefs[i]);
+#if STUDIOLIGHT_SH_BANDS == 2
+ /* Use Geomerics non-linear SH. */
+ mul_v3_v3fl(wd->spherical_harmonics_coefs[0], sl->spherical_harmonics_coefs[0], M_1_PI);
+ /* Swizzle to make shader code simpler. */
+ for (int i = 0; i < 3; ++i) {
+ copy_v3_fl3(
+ wd->spherical_harmonics_coefs[i + 1],
+ -sl->spherical_harmonics_coefs[3][i],
+ sl->spherical_harmonics_coefs[2][i],
+ -sl->spherical_harmonics_coefs[1][i]);
+ mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], M_1_PI * 1.5f); /* 1.5f is to improve the contrast a bit. */
+ }
+
+ /* Precompute as much as we can. See shader code for derivation. */
+ float len_r1[3], lr1_r0[3], p[3], a[3];
+ for (int i = 0; i < 3; ++i) {
+ mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], 0.5f);
+ len_r1[i] = len_v3(wd->spherical_harmonics_coefs[i + 1]);
+ mul_v3_fl(wd->spherical_harmonics_coefs[i + 1], 1.0f / len_r1[i]);
}
- for (; i < STUDIOLIGHT_SPHERICAL_HARMONICS_MAX_COMPONENTS; i++) {
- copy_v3_fl(wd->spherical_harmonics_coefs[i], 0.0);
+ /* lr1_r0 = lenR1 / R0; */
+ copy_v3_v3(lr1_r0, wd->spherical_harmonics_coefs[0]);
+ invert_v3(lr1_r0);
+ mul_v3_v3(lr1_r0, len_r1);
+ /* p = 1.0 + 2.0 * lr1_r0; */
+ copy_v3_v3(p, lr1_r0);
+ mul_v3_fl(p, 2.0f);
+ add_v3_fl(p, 1.0f);
+ /* a = (1.0 - lr1_r0) / (1.0 + lr1_r0); */
+ copy_v3_v3(a, lr1_r0);
+ add_v3_fl(a, 1.0f);
+ invert_v3(a);
+ negate_v3(lr1_r0);
+ add_v3_fl(lr1_r0, 1.0f);
+ mul_v3_v3(a, lr1_r0);
+ /* sh_coefs[4] = p; */
+ copy_v3_v3(wd->spherical_harmonics_coefs[4], p);
+ /* sh_coefs[5] = R0 * a; */
+ mul_v3_v3v3(wd->spherical_harmonics_coefs[5], wd->spherical_harmonics_coefs[0], a);
+ /* sh_coefs[0] = R0 * (1.0 - a) * (p + 1.0); */
+ negate_v3(a);
+ add_v3_fl(a, 1.0f);
+ add_v3_fl(p, 1.0f);
+ mul_v3_v3(a, p);
+ mul_v3_v3(wd->spherical_harmonics_coefs[0], a);
+#else
+ for (int i = 0; i < STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN; i++) {
+ /* Can't memcpy because of alignment */
+ copy_v3_v3(wd->spherical_harmonics_coefs[i], sl->spherical_harmonics_coefs[i]);
}
+#endif
}
static void compute_parallel_lines_nor_and_dist(const float v1[2], const float v2[2], const float v3[2], float r_line[2])
diff --git a/source/blender/draw/intern/draw_cache_impl_mesh.c b/source/blender/draw/intern/draw_cache_impl_mesh.c
index 8cd2da1a898..a24702368de 100644
--- a/source/blender/draw/intern/draw_cache_impl_mesh.c
+++ b/source/blender/draw/intern/draw_cache_impl_mesh.c
@@ -1646,12 +1646,13 @@ static void add_overlay_tri(
}
if (vbo_nor) {
- /* TODO real loop normal */
- GPUPackedNormal lnor = GPU_normal_convert_i10_v3(bm_looptri[0]->f->no);
+ float (*lnors)[3] = rdata->loop_normals;
for (uint i = 0; i < 3; i++) {
+ const float *nor = (lnors) ? lnors[BM_elem_index_get(bm_looptri[i])] : bm_looptri[0]->f->no;
+ GPUPackedNormal lnor = GPU_normal_convert_i10_v3(nor);
+ GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor);
GPUPackedNormal vnor = GPU_normal_convert_i10_v3(bm_looptri[i]->v->no);
GPU_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx + i, &vnor);
- GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor);
}
}
@@ -1720,12 +1721,13 @@ static void add_overlay_tri_mapped(
}
if (vbo_nor) {
- /* TODO real loop normal */
- GPUPackedNormal lnor = GPU_normal_convert_i10_v3(poly_normal);
+ float (*lnors)[3] = rdata->loop_normals;
for (uint i = 0; i < 3; i++) {
+ const float *nor = (lnors) ? lnors[mlt->tri[i]] : poly_normal;
+ GPUPackedNormal lnor = GPU_normal_convert_i10_v3(nor);
+ GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor);
GPUPackedNormal vnor = GPU_normal_convert_i10_s3(mvert[mloop[mlt->tri[i]].v].no);
GPU_vertbuf_attr_set(vbo_nor, vnor_id, base_vert_idx + i, &vnor);
- GPU_vertbuf_attr_set(vbo_nor, lnor_id, base_vert_idx + i, &lnor);
}
}
@@ -2416,7 +2418,6 @@ void DRW_mesh_batch_cache_free(Mesh *me)
static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata, MeshBatchCache *cache)
{
BLI_assert(rdata->types & (MR_DATATYPE_VERT | MR_DATATYPE_LOOPTRI | MR_DATATYPE_LOOP | MR_DATATYPE_POLY));
-#define USE_COMP_MESH_DATA
if (cache->shaded_triangles_data == NULL) {
const uint uv_len = rdata->cd.layers.uv_len;
@@ -2464,6 +2465,8 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
cache->auto_layer_names = MEM_callocN(auto_names_len * sizeof(char), "Auto layer name buf");
cache->auto_layer_is_srgb = MEM_mallocN(cache->auto_layer_len * sizeof(int), "Auto layer value buf");
+#define USE_COMP_MESH_DATA
+
for (uint i = 0; i < uv_len; i++) {
/* UV */
const char *attrib_name = mesh_render_data_uv_layer_uuid_get(rdata, i);
@@ -2489,13 +2492,11 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
for (uint i = 0; i < tangent_len; i++) {
const char *attrib_name = mesh_render_data_tangent_layer_uuid_get(rdata, i);
- /* WATCH IT : only specifying 3 component instead of 4 (4th is sign).
- * That may cause some problem but I could not make it to fail (fclem) */
#ifdef USE_COMP_MESH_DATA
/* Tangents need more precision than 10_10_10 */
- tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_I16, 3, GPU_FETCH_INT_TO_FLOAT_UNIT);
+ tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_I16, 4, GPU_FETCH_INT_TO_FLOAT_UNIT);
#else
- tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
+ tangent_id[i] = GPU_vertformat_attr_add(format, attrib_name, GPU_COMP_F32, 4, GPU_FETCH_FLOAT);
#endif
if (i == rdata->cd.layers.tangent_active) {
@@ -2574,7 +2575,11 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
float (*layer_data)[4] = rdata->cd.layers.tangent[j];
for (uint t = 0; t < 3; t++) {
const float *elem = layer_data[BM_elem_index_get(bm_looptri[t])];
- normal_float_to_short_v3(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
+#ifdef USE_COMP_MESH_DATA
+ normal_float_to_short_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
+#else
+ copy_v4_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
+#endif
}
}
/* VCOLs */
@@ -2605,9 +2610,9 @@ static GPUVertBuf *mesh_batch_cache_get_tri_shading_data(MeshRenderData *rdata,
for (uint t = 0; t < 3; t++) {
const float *elem = layer_data[mlt->tri[t]];
#ifdef USE_COMP_MESH_DATA
- normal_float_to_short_v3(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
+ normal_float_to_short_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
#else
- copy_v3_v3(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
+ copy_v4_v4(GPU_vertbuf_raw_step(&tangent_step[j]), elem);
#endif
}
}
diff --git a/source/blender/draw/intern/draw_manager_profiling.c b/source/blender/draw/intern/draw_manager_profiling.c
index 3900117327e..7b5ea4445ce 100644
--- a/source/blender/draw/intern/draw_manager_profiling.c
+++ b/source/blender/draw/intern/draw_manager_profiling.c
@@ -126,6 +126,7 @@ static void drw_stats_timer_start_ex(const char *name, const bool is_query)
glGenQueries(1, timer->query);
}
+ glFinish();
/* Issue query for the next frame */
glBeginQuery(GL_TIME_ELAPSED, timer->query[0]);
DTP.is_querying = true;
diff --git a/source/blender/draw/modes/edit_mesh_mode.c b/source/blender/draw/modes/edit_mesh_mode.c
index 4ab3c1f992a..fabff950c60 100644
--- a/source/blender/draw/modes/edit_mesh_mode.c
+++ b/source/blender/draw/modes/edit_mesh_mode.c
@@ -355,42 +355,45 @@ static DRWPass *edit_mesh_create_overlay_pass(
"Edit Mesh Face Overlay Pass",
DRW_STATE_WRITE_COLOR | DRW_STATE_POINT | statemod);
- *r_face_shgrp = DRW_shgroup_create(tri_sh, pass);
- DRW_shgroup_uniform_block(*r_face_shgrp, "globalsBlock", globals_ubo);
- DRW_shgroup_uniform_vec2(*r_face_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
- DRW_shgroup_uniform_float(*r_face_shgrp, "faceAlphaMod", face_alpha, 1);
- DRW_shgroup_uniform_float(*r_face_shgrp, "edgeScale", edge_width_scale, 1);
- DRW_shgroup_uniform_ivec4(*r_face_shgrp, "dataMask", data_mask, 1);
- DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "doEdges", do_edges);
- if (!fast_mode) {
- DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "isXray", xray);
- }
-
- *r_ledges_shgrp = DRW_shgroup_create(ledge_sh, pass);
- DRW_shgroup_uniform_block(*r_ledges_shgrp, "globalsBlock", globals_ubo);
- DRW_shgroup_uniform_vec2(*r_ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
- DRW_shgroup_uniform_float(*r_ledges_shgrp, "edgeScale", edge_width_scale, 1);
- DRW_shgroup_uniform_ivec4(*r_ledges_shgrp, "dataMask", data_mask, 1);
- DRW_shgroup_uniform_bool_copy(*r_ledges_shgrp, "doEdges", do_edges);
-
if ((tsettings->selectmode & SCE_SELECT_VERTEX) != 0) {
*r_lverts_shgrp = DRW_shgroup_create(e_data.overlay_lvert_sh, pass);
DRW_shgroup_uniform_block(*r_lverts_shgrp, "globalsBlock", globals_ubo);
DRW_shgroup_uniform_vec2(*r_lverts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
DRW_shgroup_uniform_float(*r_lverts_shgrp, "edgeScale", edge_width_scale, 1);
+ DRW_shgroup_state_enable(*r_lverts_shgrp, DRW_STATE_WRITE_DEPTH);
*r_verts_shgrp = DRW_shgroup_create(e_data.overlay_vert_sh, pass);
DRW_shgroup_uniform_block(*r_verts_shgrp, "globalsBlock", globals_ubo);
DRW_shgroup_uniform_vec2(*r_verts_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
DRW_shgroup_uniform_float(*r_verts_shgrp, "edgeScale", edge_width_scale, 1);
+ DRW_shgroup_state_enable(*r_verts_shgrp, DRW_STATE_WRITE_DEPTH);
}
if ((tsettings->selectmode & SCE_SELECT_FACE) != 0) {
*r_facedot_shgrp = DRW_shgroup_create(e_data.overlay_facedot_sh, pass);
DRW_shgroup_uniform_block(*r_facedot_shgrp, "globalsBlock", globals_ubo);
DRW_shgroup_uniform_float(*r_facedot_shgrp, "edgeScale", edge_width_scale, 1);
+ DRW_shgroup_state_enable(*r_facedot_shgrp, DRW_STATE_WRITE_DEPTH);
}
+ *r_face_shgrp = DRW_shgroup_create(tri_sh, pass);
+ DRW_shgroup_uniform_block(*r_face_shgrp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(*r_face_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+ DRW_shgroup_uniform_float(*r_face_shgrp, "faceAlphaMod", face_alpha, 1);
+ DRW_shgroup_uniform_float(*r_face_shgrp, "edgeScale", edge_width_scale, 1);
+ DRW_shgroup_uniform_ivec4(*r_face_shgrp, "dataMask", data_mask, 1);
+ DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "doEdges", do_edges);
+ if (!fast_mode) {
+ DRW_shgroup_uniform_bool_copy(*r_face_shgrp, "isXray", xray);
+ }
+
+ *r_ledges_shgrp = DRW_shgroup_create(ledge_sh, pass);
+ DRW_shgroup_uniform_block(*r_ledges_shgrp, "globalsBlock", globals_ubo);
+ DRW_shgroup_uniform_vec2(*r_ledges_shgrp, "viewportSize", DRW_viewport_size_get(), 1);
+ DRW_shgroup_uniform_float(*r_ledges_shgrp, "edgeScale", edge_width_scale, 1);
+ DRW_shgroup_uniform_ivec4(*r_ledges_shgrp, "dataMask", data_mask, 1);
+ DRW_shgroup_uniform_bool_copy(*r_ledges_shgrp, "doEdges", do_edges);
+
return pass;
}
diff --git a/source/blender/draw/modes/object_mode.c b/source/blender/draw/modes/object_mode.c
index 7f364698d07..88e30d65977 100644
--- a/source/blender/draw/modes/object_mode.c
+++ b/source/blender/draw/modes/object_mode.c
@@ -106,6 +106,7 @@ extern char datatoc_gpu_shader_uniform_color_frag_glsl[];
/* *********** LISTS *********** */
typedef struct OBJECT_PassList {
struct DRWPass *non_meshes[2];
+ struct DRWPass *image_empties[2];
struct DRWPass *spot_shapes[2];
struct DRWPass *ob_center;
struct DRWPass *outlines;
@@ -147,6 +148,7 @@ typedef struct OBJECT_Data {
typedef struct OBJECT_ShadingGroupList {
/* Reference only */
struct DRWPass *non_meshes;
+ struct DRWPass *image_empties;
struct DRWPass *spot_shapes;
struct DRWPass *bone_solid;
struct DRWPass *bone_outline;
@@ -167,8 +169,6 @@ typedef struct OBJECT_ShadingGroupList {
DRWShadingGroup *single_arrow;
DRWShadingGroup *single_arrow_line;
DRWShadingGroup *empty_axes;
- /* GPUTexture -> EmptyImageShadingGroupData */
- GHash *image_plane_map;
/* Force Field */
DRWShadingGroup *field_wind;
@@ -856,106 +856,48 @@ static void image_calc_aspect(Image *ima, ImageUser *iuser, float r_image_aspect
}
}
-static bool is_image_empty_visible(Object *ob, RegionView3D *rv3d)
-{
- int visibility_flag = ob->empty_image_visibility_flag;
- if (rv3d->is_persp) {
- return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE;
- }
- else {
- return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC;
- }
-}
-
-/* per-image shading groups for image-type empty objects */
-struct EmptyImageShadingGroupData {
- DRWShadingGroup *shgrp_image;
- DRWShadingGroup *shgrp_wire;
- float image_aspect[2];
-};
-
static void DRW_shgroup_empty_image(
OBJECT_ShadingGroupList *sgl, Object *ob, const float color[3], RegionView3D *rv3d)
{
/* TODO: 'StereoViews', see draw_empty_image. */
- if (!is_image_empty_visible(ob, rv3d)) return;
-
- if (sgl->image_plane_map == NULL) {
- sgl->image_plane_map = BLI_ghash_ptr_new(__func__);
- }
-
- struct EmptyImageShadingGroupData *empty_image_data;
+ if (!BKE_image_empty_visible_in_view3d(ob, rv3d))
+ return;
GPUTexture *tex = ob->data ?
- GPU_texture_from_blender(ob->data, ob->iuser, GL_TEXTURE_2D, false, 0.0f) : NULL;
- void **val_p;
-
- /* Create on demand, 'tex' may be NULL. */
- if (BLI_ghash_ensure_p(sgl->image_plane_map, tex, &val_p)) {
- empty_image_data = *val_p;
- }
- else {
- empty_image_data = MEM_mallocN(sizeof(*empty_image_data), __func__);
-
- image_calc_aspect(ob->data, ob->iuser, empty_image_data->image_aspect);
-
- if (tex) {
- DRW_shgroup_instance_format(e_data.empty_image_format, {
- {"objectColor", DRW_ATTRIB_FLOAT, 4},
- {"size", DRW_ATTRIB_FLOAT, 1},
- {"offset", DRW_ATTRIB_FLOAT, 2},
- {"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16},
- });
-
- struct GPUBatch *geom = DRW_cache_image_plane_get();
- DRWShadingGroup *grp = DRW_shgroup_instance_create(
- e_data.object_empty_image_sh, sgl->non_meshes, geom, e_data.empty_image_format);
- DRW_shgroup_uniform_texture(grp, "image", tex);
- DRW_shgroup_uniform_vec2(grp, "aspect", empty_image_data->image_aspect, 1);
- DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth);
-
- empty_image_data->shgrp_image = grp;
- }
- else {
- empty_image_data->shgrp_image = NULL;
- }
+ GPU_texture_from_blender(ob->data, ob->iuser, GL_TEXTURE_2D, false, 0.0f) :
+ NULL;
- {
- DRW_shgroup_instance_format(e_data.empty_image_wire_format, {
- {"color", DRW_ATTRIB_FLOAT, 4},
- {"size", DRW_ATTRIB_FLOAT, 1},
- {"offset", DRW_ATTRIB_FLOAT, 2},
- {"InstanceModelMatrix", DRW_ATTRIB_FLOAT, 16}
- });
+ float image_aspect[2];
+ image_calc_aspect(ob->data, ob->iuser, image_aspect);
- struct GPUBatch *geom = DRW_cache_image_plane_wire_get();
- DRWShadingGroup *grp = DRW_shgroup_instance_create(
- e_data.object_empty_image_wire_sh, sgl->non_meshes, geom, e_data.empty_image_wire_format);
- DRW_shgroup_uniform_vec2(grp, "aspect", empty_image_data->image_aspect, 1);
- DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth);
+ /* OPTI(fclem) We need sorting only for transparent images. If an image as no alpha channel and
+ * ob->col[3] == 1.0f, we could remove it from the sorting pass. */
- empty_image_data->shgrp_wire = grp;
- }
-
- *val_p = empty_image_data;
+ if (tex && (ob->col[3] > 0.0f)) {
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.object_empty_image_sh, sgl->image_empties);
+ DRW_shgroup_uniform_texture(grp, "image", tex);
+ /* TODO(fclem) implement DRW_shgroup_uniform_vec2_copy */
+ DRW_shgroup_uniform_float_copy(grp, "aspectX", image_aspect[0]);
+ DRW_shgroup_uniform_float_copy(grp, "aspectY", image_aspect[1]);
+ DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth);
+ DRW_shgroup_uniform_float(grp, "size", &ob->empty_drawsize, 1);
+ DRW_shgroup_uniform_vec2(grp, "offset", ob->ima_ofs, 1);
+ DRW_shgroup_uniform_vec4(grp, "objectColor", ob->col, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_image_plane_get(), ob->obmat);
}
- if (empty_image_data->shgrp_image != NULL) {
- DRW_shgroup_call_dynamic_add(
- empty_image_data->shgrp_image,
- ob->col,
- &ob->empty_drawsize,
- ob->ima_ofs,
- ob->obmat);
- }
-
- DRW_shgroup_call_dynamic_add(
- empty_image_data->shgrp_wire,
- color,
- &ob->empty_drawsize,
- ob->ima_ofs,
- ob->obmat);
+ {
+ DRWShadingGroup *grp = DRW_shgroup_create(e_data.object_empty_image_wire_sh, sgl->non_meshes);
+ /* TODO(fclem) implement DRW_shgroup_uniform_vec2_copy */
+ DRW_shgroup_uniform_float_copy(grp, "aspectX", image_aspect[0]);
+ DRW_shgroup_uniform_float_copy(grp, "aspectY", image_aspect[1]);
+ DRW_shgroup_uniform_int_copy(grp, "depthMode", ob->empty_image_depth);
+ DRW_shgroup_uniform_float(grp, "size", &ob->empty_drawsize, 1);
+ DRW_shgroup_uniform_vec2(grp, "offset", ob->ima_ofs, 1);
+ DRW_shgroup_uniform_vec4(grp, "color", color, 1);
+ DRW_shgroup_call_add(grp, DRW_cache_image_plane_wire_get(), ob->obmat);
+ }
}
static void OBJECT_cache_init(void *vedata)
@@ -1141,6 +1083,10 @@ static void OBJECT_cache_init(void *vedata)
DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND | DRW_STATE_POINT | DRW_STATE_WIRE;
sgl->non_meshes = psl->non_meshes[i] = DRW_pass_create("Non Meshes Pass", state);
+ state = DRW_STATE_WRITE_COLOR |
+ DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_BLEND | DRW_STATE_WIRE;
+ sgl->image_empties = psl->image_empties[i] = DRW_pass_create("Image Empties", state);
+
/* Empties */
geom = DRW_cache_plain_axes_get();
sgl->plain_axes = shgroup_instance(sgl->non_meshes, geom);
@@ -1178,9 +1124,6 @@ static void OBJECT_cache_init(void *vedata)
geom = DRW_cache_bone_arrows_get();
sgl->empty_axes = shgroup_instance_empty_axes(sgl->non_meshes, geom);
- /* initialize on first use */
- sgl->image_plane_map = NULL;
-
/* Force Field */
geom = DRW_cache_field_wind_get();
sgl->field_wind = shgroup_instance_scaled(sgl->non_meshes, geom);
@@ -2886,9 +2829,16 @@ static void OBJECT_cache_populate(void *vedata, Object *ob)
}
}
-static void OBJECT_draw_scene(void *vedata)
+static void OBJECT_cache_finish(void *vedata)
{
+ OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
+ DRW_pass_sort_shgroup_z(stl->g_data->sgl.image_empties);
+ DRW_pass_sort_shgroup_z(stl->g_data->sgl_ghost.image_empties);
+}
+
+static void OBJECT_draw_scene(void *vedata)
+{
OBJECT_PassList *psl = ((OBJECT_Data *)vedata)->psl;
OBJECT_StorageList *stl = ((OBJECT_Data *)vedata)->stl;
OBJECT_FramebufferList *fbl = ((OBJECT_Data *)vedata)->fbl;
@@ -2920,6 +2870,7 @@ static void OBJECT_draw_scene(void *vedata)
DRW_draw_pass(stl->g_data->sgl.bone_outline);
DRW_draw_pass(stl->g_data->sgl.non_meshes);
DRW_draw_pass(psl->particle);
+ DRW_draw_pass(stl->g_data->sgl.image_empties);
DRW_draw_pass(stl->g_data->sgl.bone_axes);
MULTISAMPLE_SYNC_DISABLE(dfbl, dtxl)
@@ -2974,12 +2925,6 @@ static void OBJECT_draw_scene(void *vedata)
}
}
- /* This has to be freed only after drawing empties! */
- if (stl->g_data->sgl.image_plane_map) {
- BLI_ghash_free(stl->g_data->sgl.image_plane_map, NULL, MEM_freeN);
- stl->g_data->sgl.image_plane_map = NULL;
- }
-
volumes_free_smoke_textures();
batch_camera_path_free(&stl->g_data->sgl.camera_path);
@@ -2987,6 +2932,7 @@ static void OBJECT_draw_scene(void *vedata)
!DRW_pass_is_empty(stl->g_data->sgl_ghost.bone_wire) ||
!DRW_pass_is_empty(stl->g_data->sgl_ghost.bone_outline) ||
!DRW_pass_is_empty(stl->g_data->sgl_ghost.non_meshes) ||
+ !DRW_pass_is_empty(stl->g_data->sgl_ghost.image_empties) ||
!DRW_pass_is_empty(stl->g_data->sgl_ghost.bone_axes))
{
if (DRW_state_is_fbo()) {
@@ -3016,6 +2962,7 @@ static void OBJECT_draw_scene(void *vedata)
DRW_draw_pass(stl->g_data->sgl_ghost.bone_wire);
DRW_draw_pass(stl->g_data->sgl_ghost.bone_outline);
DRW_draw_pass(stl->g_data->sgl_ghost.non_meshes);
+ DRW_draw_pass(stl->g_data->sgl_ghost.image_empties);
DRW_draw_pass(stl->g_data->sgl_ghost.bone_axes);
if (DRW_state_is_select()) {
@@ -3024,11 +2971,6 @@ static void OBJECT_draw_scene(void *vedata)
}
batch_camera_path_free(&stl->g_data->sgl_ghost.camera_path);
- /* This has to be freed only after drawing empties! */
- if (stl->g_data->sgl_ghost.image_plane_map) {
- BLI_ghash_free(stl->g_data->sgl_ghost.image_plane_map, NULL, MEM_freeN);
- stl->g_data->sgl_ghost.image_plane_map = NULL;
- }
DRW_draw_pass(psl->ob_center);
}
@@ -3043,7 +2985,7 @@ DrawEngineType draw_engine_object_type = {
&OBJECT_engine_free,
&OBJECT_cache_init,
&OBJECT_cache_populate,
- NULL,
+ &OBJECT_cache_finish,
NULL,
&OBJECT_draw_scene,
NULL,
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index a5c20033287..2409d4033e0 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -232,11 +232,12 @@ static void overlay_cache_populate(void *vedata, Object *ob)
RegionView3D *rv3d = draw_ctx->rv3d;
View3D *v3d = draw_ctx->v3d;
- if (!stl->g_data->show_overlays)
- return;
-
- if (!DRW_object_is_renderable(ob) && (ob->dt != OB_WIRE))
+ if ((!stl->g_data->show_overlays) ||
+ (ob->dt < OB_WIRE) ||
+ (!DRW_object_is_renderable(ob) && (ob->dt != OB_WIRE)))
+ {
return;
+ }
if (DRW_object_is_renderable(ob) && stl->g_data->overlay.flag & V3D_OVERLAY_FACE_ORIENTATION) {
struct GPUBatch *geom = DRW_cache_object_surface_get(ob);
@@ -278,11 +279,13 @@ static void overlay_cache_populate(void *vedata, Object *ob)
else if (is_flat_object_viewed_from_side) {
/* Avoid losing flat objects when in ortho views (see T56549) */
struct GPUBatch *geom = DRW_cache_object_wire_outline_get(ob);
- GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
- shgrp = DRW_shgroup_create(sh, psl->flat_wireframe_pass);
- DRW_shgroup_stencil_mask(shgrp, stencil_mask);
- DRW_shgroup_uniform_vec4(shgrp, "color", ts.colorWire, 1);
- DRW_shgroup_call_object_add(shgrp, geom, ob);
+ if (geom) {
+ GPUShader *sh = GPU_shader_get_builtin_shader(GPU_SHADER_3D_UNIFORM_COLOR);
+ shgrp = DRW_shgroup_create(sh, psl->flat_wireframe_pass);
+ DRW_shgroup_stencil_mask(shgrp, stencil_mask);
+ DRW_shgroup_uniform_vec4(shgrp, "color", ts.colorWire, 1);
+ DRW_shgroup_call_object_add(shgrp, geom, ob);
+ }
}
else {
int tri_count;
diff --git a/source/blender/draw/modes/shaders/common_hair_lib.glsl b/source/blender/draw/modes/shaders/common_hair_lib.glsl
index e272db02318..c0c5f84d166 100644
--- a/source/blender/draw/modes/shaders/common_hair_lib.glsl
+++ b/source/blender/draw/modes/shaders/common_hair_lib.glsl
@@ -135,7 +135,7 @@ float hair_shaperadius(float shape, float root, float tip, float time)
}
void hair_get_pos_tan_binor_time(
- bool is_persp, vec3 camera_pos, vec3 camera_z,
+ bool is_persp, mat4 invmodel_mat, vec3 camera_pos, vec3 camera_z,
out vec3 wpos, out vec3 wtan, out vec3 wbinor, out float time, out float thickness, out float thick_time)
{
int id = hair_get_base_id();
@@ -159,7 +159,11 @@ void hair_get_pos_tan_binor_time(
thick_time = float(gl_VertexID % hairThicknessRes) / float(hairThicknessRes - 1);
thick_time = thickness * (thick_time * 2.0 - 1.0);
- wpos += wbinor * thick_time;
+ /* Take object scale into account.
+ * NOTE: This only works fine with uniform scaling. */
+ float scale = 1.0 / length(mat3(invmodel_mat) * wbinor);
+
+ wpos += wbinor * thick_time * scale;
}
}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
index 7fa822bc697..8d7a653c2fe 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_frag.glsl
@@ -120,35 +120,24 @@ void main()
#ifdef VERTEX_SELECTION
vec4 inner_edge_color = vec4(vertexColor, 1.0);
-# ifdef EDGE_FIX
- inner_edge_color *= isXray ? 1.0 : EDGE_FIX_ALPHA;
-# endif
- colorDistEdge(vec4(vertexColor, 1.0), innerEdge);
#else
vec4 inner_edge_color = EDIT_MESH_edge_color_inner(flag[v], (flag[0] & FACE_ACTIVE_) != 0);
-# ifdef EDGE_FIX
+#endif
+#ifdef EDGE_FIX
inner_edge_color *= isXray ? 1.0 : EDGE_FIX_ALPHA;
-# endif
- colorDistEdge(inner_edge_color, innerEdge);
#endif
+ colorDistEdge(inner_edge_color, innerEdge);
}
}
#if defined(VERTEX_SELECTION) && defined(EDGE_FIX)
/* Points */
for (int v = 0; v < 3; ++v) {
- if ((flag[v] & EDGE_VERTEX_EXISTS) == 0) {
- /* Leave as-is, no vertex. */
- }
- else {
+ if ((flag[v] & EDGE_VERTEX_EXISTS) != 0) {
float size = p[v] - sizeVertex;
-
vec4 point_color = colorVertex;
point_color = ((flag[v] & EDGE_VERTEX_SELECTED) != 0) ? colorVertexSelect : point_color;
point_color = ((flag[v] & EDGE_VERTEX_ACTIVE) != 0) ? vec4(colorEditMeshActive.xyz, 1.0) : point_color;
-# ifdef EDGE_FIX
- point_color *= isXray ? 1.0 : EDGE_FIX_ALPHA;
-# endif
colorDist(point_color, size);
}
}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
index e97bc7d1f67..a04494d2ec4 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_geom_tri.glsl
@@ -37,7 +37,7 @@ out float facing;
#endif
#ifdef ANTI_ALIASING
-#define Z_OFFSET -0.0013
+#define Z_OFFSET -0.0005
#else
#define Z_OFFSET 0.0
#endif
@@ -80,7 +80,8 @@ void doVertexOfs(int v, vec2 fixvec)
#ifdef VERTEX_FACING
facing = v_facing[v];
#endif
- gl_Position = pPos[v] + vec4(fixvec * pPos[v].w, Z_OFFSET, 0.0);
+ float z_ofs = Z_OFFSET * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0);
+ gl_Position = pPos[v] + vec4(fixvec * pPos[v].w, z_ofs, 0.0);
EmitVertex();
}
@@ -91,7 +92,7 @@ void mask_edge_flag(int v, ivec3 eflag)
/* Only shade the edge that we are currently drawing.
* (fix corner bleeding) */
- flag = eflag;
+ flag = eflag & ~EDGE_VERTEX_EXISTS;
flag[vaf] &= ~EDGE_EXISTS;
flag[v] &= ~EDGE_EXISTS;
}
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl
index 722411571e4..3886213ce49 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_points_vert.glsl
@@ -3,7 +3,7 @@ uniform mat3 NormalMatrix;
uniform mat4 ProjectionMatrix;
uniform mat4 ModelViewMatrix;
uniform mat4 ModelViewProjectionMatrix;
-uniform float ofs = 1e-4;
+uniform float ofs = 3e-5;
in vec3 pos;
in ivec4 data;
@@ -21,7 +21,15 @@ void main()
gl_PointSize = sizeVertex * 2.0;
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
- gl_Position.z -= ofs;
+ gl_Position.z -= ofs * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0);
+
+ /* Make selected and active vertex always on top. */
+ if ((data.x & VERTEX_SELECTED) != 0) {
+ gl_Position.z -= 1e-7;
+ }
+ if ((data.x & VERTEX_ACTIVE) != 0) {
+ gl_Position.z -= 1e-7;
+ }
#ifdef VERTEX_FACING
vec4 vPos = ModelViewMatrix * vec4(pos, 1.0);
diff --git a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
index f1ebb419d60..e4268188e09 100644
--- a/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
+++ b/source/blender/draw/modes/shaders/edit_mesh_overlay_vert.glsl
@@ -29,7 +29,7 @@ out float vFacing;
void main()
{
pPos = ModelViewProjectionMatrix * vec4(pos, 1.0);
- pPos.z -= ofs;
+ pPos.z -= ofs * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0);
vData = data & dataMask;
# ifdef VERTEX_FACING
vec4 vpos = ModelViewMatrix * vec4(pos, 1.0);
@@ -59,7 +59,7 @@ out vec3 barycentric;
void main()
{
gl_Position = ModelViewProjectionMatrix * vec4(pos, 1.0);
- gl_Position.z -= ofs;
+ gl_Position.z -= ofs * ((ProjectionMatrix[3][3] == 0.0) ? 1.0 : 0.0);
int v_0 = (gl_VertexID / 3) * 3;
int vidx = gl_VertexID % 3;
diff --git a/source/blender/draw/modes/shaders/object_empty_image_vert.glsl b/source/blender/draw/modes/shaders/object_empty_image_vert.glsl
index c1a957f0640..3469e37358e 100644
--- a/source/blender/draw/modes/shaders/object_empty_image_vert.glsl
+++ b/source/blender/draw/modes/shaders/object_empty_image_vert.glsl
@@ -1,21 +1,16 @@
-
-uniform mat4 ViewProjectionMatrix;
-uniform vec2 aspect;
-
-/* ---- Instantiated Attribs ---- */
-in vec2 texCoord;
-in vec2 pos;
-/* ---- Per instance Attribs ---- */
-in mat4 InstanceModelMatrix;
-
+uniform mat4 ModelViewProjectionMatrix;
+uniform float aspectX;
+uniform float aspectY;
+uniform float size;
+uniform vec2 offset;
#ifdef USE_WIRE
-in vec3 color;
+uniform vec3 color;
#else
-in vec4 objectColor;
+uniform vec4 objectColor;
#endif
-in float size;
-in vec2 offset;
+in vec2 texCoord;
+in vec2 pos;
flat out vec4 finalColor;
@@ -25,9 +20,8 @@ out vec2 texCoord_interp;
void main()
{
- gl_Position = ViewProjectionMatrix * InstanceModelMatrix * vec4(
- (pos[0] + offset[0]) * (size * aspect[0]),
- (pos[1] + offset[1]) * (size * aspect[1]),
+ gl_Position = ModelViewProjectionMatrix * vec4(
+ (pos + offset) * (size * vec2(aspectX, aspectY)),
0.0, 1.0);
#ifdef USE_WIRE
finalColor = vec4(color, 1.0);
diff --git a/source/blender/editors/animation/anim_markers.c b/source/blender/editors/animation/anim_markers.c
index 4d21ed8b5b4..f82250df4d3 100644
--- a/source/blender/editors/animation/anim_markers.c
+++ b/source/blender/editors/animation/anim_markers.c
@@ -416,6 +416,7 @@ static void draw_marker(
else {
immUniformColor4f(0.0f, 0.0f, 0.0f, 0.38f);
}
+ immUniform1i("colors_len", 0); /* "simple" mode */
immUniform1f("dash_width", 6.0f);
immUniform1f("dash_factor", 0.5f);
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index f6fdd539983..8914cf9492c 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -231,9 +231,7 @@ static int change_frame_modal(bContext *C, wmOperator *op, const wmEvent *event)
case LEFTMOUSE:
case RIGHTMOUSE:
case MIDDLEMOUSE:
- /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init
- * the modal op) doesn't work for some reason
- */
+ /* We check for either mouse-button to end, to work with all user keymaps. */
if (event->val == KM_RELEASE)
ret = OPERATOR_FINISHED;
break;
diff --git a/source/blender/editors/armature/armature_relations.c b/source/blender/editors/armature/armature_relations.c
index 0e95b6c3467..28bab00e665 100644
--- a/source/blender/editors/armature/armature_relations.c
+++ b/source/blender/editors/armature/armature_relations.c
@@ -549,8 +549,15 @@ static void separate_armature_bones(Main *bmain, Object *ob, short sel)
/* clear the pchan->parent var of any pchan that had this as its parent */
for (pchn = ob->pose->chanbase.first; pchn; pchn = pchn->next) {
- if (pchn->parent == pchan)
+ if (pchn->parent == pchan) {
pchn->parent = NULL;
+ }
+ if (pchn->bbone_next == pchan) {
+ pchn->bbone_next = NULL;
+ }
+ if (pchn->bbone_prev == pchan) {
+ pchn->bbone_prev = NULL;
+ }
}
/* free any of the extra-data this pchan might have */
diff --git a/source/blender/editors/armature/armature_utils.c b/source/blender/editors/armature/armature_utils.c
index 339f0306779..53b07c59973 100644
--- a/source/blender/editors/armature/armature_utils.c
+++ b/source/blender/editors/armature/armature_utils.c
@@ -816,6 +816,12 @@ void ED_armature_ebone_listbase_copy(ListBase *lb_dst, ListBase *lb_src)
if (ebone_dst->parent) {
ebone_dst->parent = ebone_dst->parent->temp.ebone;
}
+ if (ebone_dst->bbone_next) {
+ ebone_dst->bbone_next = ebone_dst->bbone_next->temp.ebone;
+ }
+ if (ebone_dst->bbone_prev) {
+ ebone_dst->bbone_prev = ebone_dst->bbone_prev->temp.ebone;
+ }
}
}
diff --git a/source/blender/editors/datafiles/CMakeLists.txt b/source/blender/editors/datafiles/CMakeLists.txt
index de862c0cc08..f0e3b181873 100644
--- a/source/blender/editors/datafiles/CMakeLists.txt
+++ b/source/blender/editors/datafiles/CMakeLists.txt
@@ -52,12 +52,10 @@ set(ICON_NAMES
dot
collapsemenu
x
- go_left
- plug
- ui
+ duplicate
node
node_sel
- fullscreen
+ window
workspace
rightarrow_thin
bordermove
@@ -67,7 +65,6 @@ set(ICON_NAMES
panel_close
copy_id
eyedropper
- link_area
auto
checkbox_dehlt
checkbox_hlt
@@ -78,25 +75,21 @@ set(ICON_NAMES
screen_back
rightarrow
downarrow_hlt
- dotsup
- dotsdown
- link
- inlink
plugin
help
ghost_enabled
color
- linked
unlinked
+ linked
hand
zoom_all
zoom_selected
zoom_previous
zoom_in
zoom_out
- render_region
- border_rect
- border_lasso
+ driver_distance
+ driver_rotational_difference
+ driver_transform
freeze
stylus_pressure
ghost_disabled
@@ -105,27 +98,24 @@ set(ICON_NAMES
quit
url
recover_last
- 30
+ three_dots
fullscreen_enter
fullscreen_exit
- #onionskin
light
material
texture
anim
world
scene
- edit
- game
- radio
+ output
script
particles
physics
speaker
- texture_shaded
tool_settings
shaderfx
- #blank1
+ fake_user_off
+ fake_user_on
view3d
graph
outliner
@@ -141,7 +131,6 @@ set(ICON_NAMES
preferences
time
nodetree
- logic
console
clip
asset_manager
@@ -150,15 +139,13 @@ set(ICON_NAMES
node_material
object_datamode
editmode_hlt
- facesel_hlt
+ uv
vpaint_hlt
tpaint_hlt
wpaint_hlt
sculptmode_hlt
pose_hlt
particlemode
- lightpaint
- greasepencil_stroke_paint
tracking
tracking_backwards
tracking_forwards
@@ -185,7 +172,7 @@ set(ICON_NAMES
library_data_direct
group
armature_data
- pose_data
+ community
bone_data
constraint
shapekey_data
@@ -193,6 +180,7 @@ set(ICON_NAMES
camera_stereo
package
uglypackage
+ experimental
brush_data
image_data
file
@@ -201,6 +189,7 @@ set(ICON_NAMES
render_result
surface_data
empty_data
+ preset
render_animation
render_still
library_data_broken
@@ -224,16 +213,18 @@ set(ICON_NAMES
mouse_lmb_drag
mouse_mmb_drag
mouse_rmb_drag
- preset
+ preset_new
decorate
decorate_keyframe
decorate_animate
decorate_driver
decorate_linked
- decorate_override
+ decorate_library_override
decorate_unlocked
decorate_locked
- fake_user
+ decorate_override
+ sealed
+ heart
orphan_data
user
system
@@ -256,12 +247,13 @@ set(ICON_NAMES
outliner_ob_image
restrict_color_off
restrict_color_on
- restrict_view_off
- restrict_view_on
- restrict_select_off
+ hide_on
+ hide_off
restrict_select_on
- restrict_render_off
+ restrict_select_off
restrict_render_on
+ restrict_render_off
+ outliner_data_empty
outliner_data_mesh
outliner_data_curve
outliner_data_lattice
@@ -272,12 +264,17 @@ set(ICON_NAMES
outliner_data_font
outliner_data_surface
outliner_data_speaker
- outliner_data_pose
outliner_data_greasepencil
+ gp_select_points
+ gp_select_strokes
+ gp_multiframe_editing
+ gp_only_selected
+ modifier_off
+ modifier_on
onionskin_off
onionskin_on
- hide_off
- hide_on
+ restrict_view_on
+ restrict_view_off
mesh_plane
mesh_cube
mesh_circle
@@ -289,12 +286,15 @@ set(ICON_NAMES
mesh_torus
mesh_cone
mesh_capsule
+ empty_single_arrow
light_point
light_sun
light_spot
light_hemi
light_area
- meta_empty
+ cube
+ sphere
+ cone
meta_plane
meta_cube
meta_ball
@@ -306,6 +306,9 @@ set(ICON_NAMES
surface_ncylinder
surface_nsphere
surface_ntorus
+ empty_axis
+ stroke
+ empty_arrows
curve_bezcurve
curve_bezcircle
curve_ncurve
@@ -334,8 +337,9 @@ set(ICON_NAMES
force_turbulence
force_drag
force_smokeflow
- temperature
- gear
+ image_plane
+ image_background
+ image_reference
node_insert_on
node_insert_off
node_top
@@ -370,7 +374,7 @@ set(ICON_NAMES
mod_displace
mod_curve
mod_lattice
- constraint_data
+ mod_tint
mod_armature
mod_shrinkwrap
mod_cast
@@ -396,6 +400,15 @@ set(ICON_NAMES
mod_wireframe
mod_data_transfer
mod_normaledit
+ mod_particle_instance
+ mod_hue_saturation
+ mod_noise
+ mod_offset
+ mod_simplify
+ mod_thickness
+ mod_instance
+ mod_time
+ mod_opacity
rec
play
ff
@@ -466,10 +479,6 @@ set(ICON_NAMES
particle_point
particle_tip
particle_path
- man_trans
- man_rot
- man_scale
- manipul
snap_off
snap_on
snap_normal
@@ -492,8 +501,8 @@ set(ICON_NAMES
orientation_local
orientation_normal
orientation_view
- pastedown
copydown
+ pastedown
pasteflipup
pasteflipdown
vis_sel_11
@@ -502,15 +511,14 @@ set(ICON_NAMES
vis_sel_00
automerge_on
automerge_off
- retopo
uv_vertexsel
uv_edgesel
uv_facesel
uv_islandsel
uv_sync_select
normals_vertex
- normals_vertex_face
normals_face
+ normals_vertex_face
shading_bbox
shading_wire
shading_solid
@@ -533,15 +541,13 @@ set(ICON_NAMES
sortbyext
sorttime
sortsize
- longdisplay
shortdisplay
- ghost
+ longdisplay
imgdisplay
bookmarks
fontpreview
filter
newfolder
- open_recent
file_parent
file_refresh
file_folder
@@ -559,11 +565,11 @@ set(ICON_NAMES
append_blend
import
export
- external_data
loop_back
loop_forwards
back
forward
+ file_volume
alembic
volume
file_hidden
@@ -577,6 +583,9 @@ set(ICON_NAMES
aliased
antialiased
mat_sphere_sky
+ matshaderball
+ matcloth
+ matfluid
wordwrap_off
wordwrap_on
syntax_off
@@ -594,7 +603,6 @@ set(ICON_NAMES
image_rgb_alpha
image_alpha
image_zdepth
- imagefile
view_perspective
view_ortho
view_camera
diff --git a/source/blender/editors/gpencil/annotate_draw.c b/source/blender/editors/gpencil/annotate_draw.c
index 1a51875af9e..c83015675a0 100644
--- a/source/blender/editors/gpencil/annotate_draw.c
+++ b/source/blender/editors/gpencil/annotate_draw.c
@@ -134,7 +134,6 @@ static void gp_draw_stroke_buffer(
immBindBuiltinProgram(GPU_SHADER_2D_UNIFORM_COLOR);
immUniformColor3fvAlpha(ink, ink[3]);
- /* TODO: implement this with a geometry shader to draw one continuous tapered stroke */
immBeginAtMost(GPU_PRIM_LINE_STRIP, totpoints);
for (int i = 0; i < totpoints; i++, pt++) {
@@ -263,8 +262,6 @@ static void gp_draw_stroke_3d(
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
immUniformColor3fvAlpha(ink, ink[3]);
- /* TODO: implement this with a geometry shader to draw one continuous tapered stroke */
-
/* draw stroke curve */
GPU_line_width(max_ff(curpressure * thickness, 1.0f));
immBeginAtMost(GPU_PRIM_LINE_STRIP, totpoints + cyclic_add);
@@ -337,8 +334,6 @@ static void gp_draw_stroke_2d(
scalefac = 0.001f;
}
- /* TODO: fancy++ with the magic of shaders */
-
/* tessellation code - draw stroke as series of connected quads (triangle strips in fact) with connection
* edges rotated to minimize shrinking artifacts, and rounded endcaps
*/
diff --git a/source/blender/editors/gpencil/annotate_paint.c b/source/blender/editors/gpencil/annotate_paint.c
index e9b862cba9e..5a8641ed0a7 100644
--- a/source/blender/editors/gpencil/annotate_paint.c
+++ b/source/blender/editors/gpencil/annotate_paint.c
@@ -1221,7 +1221,7 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Deps
* (though this is only available in editmode)
*/
if (p->gpd->flag & GP_DATA_STROKE_EDITMODE) {
- if (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_SELECT_MASK) {
+ if (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) {
p->flags |= GP_PAINTFLAG_SELECTMASK;
}
}
diff --git a/source/blender/editors/gpencil/gpencil_brush.c b/source/blender/editors/gpencil/gpencil_brush.c
index 18ff0efd3f9..657c3c8b9b6 100644
--- a/source/blender/editors/gpencil/gpencil_brush.c
+++ b/source/blender/editors/gpencil/gpencil_brush.c
@@ -107,11 +107,11 @@ typedef struct tGP_BrushEditData {
bGPdata *gpd;
/* Brush Settings */
- GP_BrushEdit_Settings *settings;
- GP_EditBrush_Data *gp_brush;
+ GP_Sculpt_Settings *settings;
+ GP_Sculpt_Data *gp_brush;
- eGP_EditBrush_Types brush_type;
- eGP_EditBrush_Flag flag;
+ eGP_Sculpt_Types brush_type;
+ eGP_Sculpt_Flag flag;
/* Space Conversion Data */
GP_SpaceConversion gsc;
@@ -199,16 +199,16 @@ static void gpsculpt_compute_lock_axis(tGP_BrushEditData *gso, bGPDspoint *pt, c
/* Context ---------------------------------------- */
/* Get the sculpting settings */
-static GP_BrushEdit_Settings *gpsculpt_get_settings(Scene *scene)
+static GP_Sculpt_Settings *gpsculpt_get_settings(Scene *scene)
{
return &scene->toolsettings->gp_sculpt;
}
/* Get the active brush */
-static GP_EditBrush_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode)
+static GP_Sculpt_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode)
{
- GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
- GP_EditBrush_Data *gp_brush = NULL;
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_Sculpt_Data *gp_brush = NULL;
if (is_weight_mode) {
gp_brush = &gset->brush[gset->weighttype];
}
@@ -225,19 +225,19 @@ static GP_EditBrush_Data *gpsculpt_get_brush(Scene *scene, bool is_weight_mode)
static bool gp_brush_invert_check(tGP_BrushEditData *gso)
{
/* The basic setting is the brush's setting (from the panel) */
- bool invert = ((gso->gp_brush->flag & GP_EDITBRUSH_FLAG_INVERT) != 0);
+ bool invert = ((gso->gp_brush->flag & GP_SCULPT_FLAG_INVERT) != 0);
/* During runtime, the user can hold down the Ctrl key to invert the basic behaviour */
- if (gso->flag & GP_EDITBRUSH_FLAG_INVERT) {
+ if (gso->flag & GP_SCULPT_FLAG_INVERT) {
invert ^= true;
}
/* set temporary status */
if (invert) {
- gso->gp_brush->flag |= GP_EDITBRUSH_FLAG_TMP_INVERT;
+ gso->gp_brush->flag |= GP_SCULPT_FLAG_TMP_INVERT;
}
else {
- gso->gp_brush->flag &= ~GP_EDITBRUSH_FLAG_TMP_INVERT;
+ gso->gp_brush->flag &= ~GP_SCULPT_FLAG_TMP_INVERT;
}
return invert;
@@ -246,18 +246,18 @@ static bool gp_brush_invert_check(tGP_BrushEditData *gso)
/* Compute strength of effect */
static float gp_brush_influence_calc(tGP_BrushEditData *gso, const int radius, const int co[2])
{
- GP_EditBrush_Data *gp_brush = gso->gp_brush;
+ GP_Sculpt_Data *gp_brush = gso->gp_brush;
/* basic strength factor from brush settings */
float influence = gp_brush->strength;
/* use pressure? */
- if (gp_brush->flag & GP_EDITBRUSH_FLAG_USE_PRESSURE) {
+ if (gp_brush->flag & GP_SCULPT_FLAG_USE_PRESSURE) {
influence *= gso->pressure;
}
/* distance fading */
- if (gp_brush->flag & GP_EDITBRUSH_FLAG_USE_FALLOFF) {
+ if (gp_brush->flag & GP_SCULPT_FLAG_USE_FALLOFF) {
float distance = (float)len_v2v2_int(gso->mval, co);
float fac;
@@ -288,29 +288,29 @@ static bool gp_brush_smooth_apply(
tGP_BrushEditData *gso, bGPDstroke *gps, int pt_index,
const int radius, const int co[2])
{
- // GP_EditBrush_Data *gp_brush = gso->brush;
+ // GP_Sculpt_Data *gp_brush = gso->brush;
float inf = gp_brush_influence_calc(gso, radius, co);
/* need one flag enabled by default */
if ((gso->settings->flag &
- (GP_BRUSHEDIT_FLAG_APPLY_POSITION |
- GP_BRUSHEDIT_FLAG_APPLY_STRENGTH |
- GP_BRUSHEDIT_FLAG_APPLY_THICKNESS |
- GP_BRUSHEDIT_FLAG_APPLY_UV)) == 0)
+ (GP_SCULPT_SETT_FLAG_APPLY_POSITION |
+ GP_SCULPT_SETT_FLAG_APPLY_STRENGTH |
+ GP_SCULPT_SETT_FLAG_APPLY_THICKNESS |
+ GP_SCULPT_SETT_FLAG_APPLY_UV)) == 0)
{
- gso->settings->flag |= GP_BRUSHEDIT_FLAG_APPLY_POSITION;
+ gso->settings->flag |= GP_SCULPT_SETT_FLAG_APPLY_POSITION;
}
/* perform smoothing */
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_POSITION) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_POSITION) {
BKE_gpencil_smooth_stroke(gps, pt_index, inf);
}
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_STRENGTH) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_STRENGTH) {
BKE_gpencil_smooth_stroke_strength(gps, pt_index, inf);
}
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_THICKNESS) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_THICKNESS) {
BKE_gpencil_smooth_stroke_thickness(gps, pt_index, inf);
}
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_UV) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_UV) {
BKE_gpencil_smooth_stroke_uv(gps, pt_index, inf);
}
@@ -766,16 +766,16 @@ static bool gp_brush_randomize_apply(
const float fac = BLI_rng_get_float(gso->rng) * inf;
/* need one flag enabled by default */
if ((gso->settings->flag &
- (GP_BRUSHEDIT_FLAG_APPLY_POSITION |
- GP_BRUSHEDIT_FLAG_APPLY_STRENGTH |
- GP_BRUSHEDIT_FLAG_APPLY_THICKNESS |
- GP_BRUSHEDIT_FLAG_APPLY_UV)) == 0)
+ (GP_SCULPT_SETT_FLAG_APPLY_POSITION |
+ GP_SCULPT_SETT_FLAG_APPLY_STRENGTH |
+ GP_SCULPT_SETT_FLAG_APPLY_THICKNESS |
+ GP_SCULPT_SETT_FLAG_APPLY_UV)) == 0)
{
- gso->settings->flag |= GP_BRUSHEDIT_FLAG_APPLY_POSITION;
+ gso->settings->flag |= GP_SCULPT_SETT_FLAG_APPLY_POSITION;
}
/* apply random to position */
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_POSITION) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_POSITION) {
/* Jitter is applied perpendicular to the mouse movement vector
* - We compute all effects in screenspace (since it's easier)
* and then project these to get the points/distances in
@@ -832,7 +832,7 @@ static bool gp_brush_randomize_apply(
}
}
/* apply random to strength */
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_STRENGTH) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_STRENGTH) {
if (BLI_rng_get_float(gso->rng) > 0.5f) {
pt->strength += fac;
}
@@ -843,7 +843,7 @@ static bool gp_brush_randomize_apply(
CLAMP_MAX(pt->strength, 1.0f);
}
/* apply random to thickness (use pressure) */
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_THICKNESS) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_THICKNESS) {
if (BLI_rng_get_float(gso->rng) > 0.5f) {
pt->pressure += fac;
}
@@ -854,7 +854,7 @@ static bool gp_brush_randomize_apply(
CLAMP_MIN(pt->pressure, 0.0f);
}
/* apply random to UV (use pressure) */
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_APPLY_UV) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_APPLY_UV) {
if (BLI_rng_get_float(gso->rng) > 0.5f) {
pt->uv_rot += fac;
}
@@ -910,6 +910,9 @@ static bool gp_brush_weight_apply(
curweight += inf;
}
+ /* verify target weight */
+ CLAMP_MAX(curweight, gso->gp_brush->target_weight);
+
CLAMP(curweight, 0.0f, 1.0f);
if (dw) {
dw->weight = curweight;
@@ -1108,7 +1111,7 @@ static void gp_brush_clone_adjust(tGP_BrushEditData *gso)
int i;
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
- if (gso->gp_brush->flag & GP_EDITBRUSH_FLAG_USE_FALLOFF) {
+ if (gso->gp_brush->flag & GP_SCULPT_FLAG_USE_FALLOFF) {
/* "Smudge" Effect when falloff is enabled */
float delta[3] = {0.0f};
int sco[2] = {0};
@@ -1189,8 +1192,8 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
const bool is_weight_mode = ob->mode == OB_MODE_GPENCIL_WEIGHT;
/* set the brush using the tool */
#if 0
- GP_BrushEdit_Settings *gset = &ts->gp_sculpt;
- eGP_EditBrush_Types mode = is_weight_mode ? gset->weighttype : gset->brushtype;
+ GP_Sculpt_Settings *gset = &ts->gp_sculpt;
+ eGP_Sculpt_Types mode = is_weight_mode ? gset->weighttype : gset->brushtype;
#endif
tGP_BrushEditData *gso;
@@ -1222,8 +1225,8 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
gso->cfra = INT_MAX; /* NOTE: So that first stroke will get handled in init_stroke() */
/* some brushes cannot use pressure for radius */
- if (ELEM(gso->brush_type, GP_EDITBRUSH_TYPE_GRAB, GP_EDITBRUSH_TYPE_CLONE)) {
- gso->gp_brush->flag &= ~GP_EDITBRUSH_FLAG_PRESSURE_RADIUS;
+ if (ELEM(gso->brush_type, GP_SCULPT_TYPE_GRAB, GP_SCULPT_TYPE_CLONE)) {
+ gso->gp_brush->flag &= ~GP_SCULPT_FLAG_PRESSURE_RADIUS;
}
gso->scene = scene;
@@ -1243,7 +1246,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
/* multiframe settings */
gso->is_multiframe = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gso->gpd);
- gso->use_multiframe_falloff = (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_FRAME_FALLOFF) != 0;
+ gso->use_multiframe_falloff = (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_FRAME_FALLOFF) != 0;
/* init multiedit falloff curve data before doing anything,
* so we won't have to do it again later
@@ -1254,7 +1257,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
/* initialise custom data for brushes */
switch (gso->brush_type) {
- case GP_EDITBRUSH_TYPE_CLONE:
+ case GP_SCULPT_TYPE_CLONE:
{
bGPDstroke *gps;
bool found = false;
@@ -1283,7 +1286,7 @@ static bool gpsculpt_brush_init(bContext *C, wmOperator *op)
break;
}
- case GP_EDITBRUSH_TYPE_GRAB:
+ case GP_SCULPT_TYPE_GRAB:
{
/* initialise the cache needed for this brush */
gso->stroke_customdata = BLI_ghash_ptr_new("GP Grab Brush - Strokes Hash");
@@ -1317,7 +1320,7 @@ static void gpsculpt_brush_exit(bContext *C, wmOperator *op)
/* free brush-specific data */
switch (gso->brush_type) {
- case GP_EDITBRUSH_TYPE_GRAB:
+ case GP_SCULPT_TYPE_GRAB:
{
/* Free per-stroke customdata
* - Keys don't need to be freed, as those are the strokes
@@ -1327,7 +1330,7 @@ static void gpsculpt_brush_exit(bContext *C, wmOperator *op)
break;
}
- case GP_EDITBRUSH_TYPE_CLONE:
+ case GP_SCULPT_TYPE_CLONE:
{
/* Free customdata */
gp_brush_clone_free(gso);
@@ -1355,7 +1358,7 @@ static void gpsculpt_brush_exit(bContext *C, wmOperator *op)
}
/* disable temp invert flag */
- gso->gp_brush->flag &= ~GP_EDITBRUSH_FLAG_TMP_INVERT;
+ gso->gp_brush->flag &= ~GP_SCULPT_FLAG_TMP_INVERT;
/* free operator data */
MEM_freeN(gso);
@@ -1412,8 +1415,8 @@ static bool gpsculpt_brush_do_stroke(
{
GP_SpaceConversion *gsc = &gso->gsc;
rcti *rect = &gso->brush_rect;
- GP_EditBrush_Data *gp_brush = gso->gp_brush;
- const int radius = (gp_brush->flag & GP_EDITBRUSH_FLAG_PRESSURE_RADIUS) ? gso->gp_brush->size * gso->pressure : gso->gp_brush->size;
+ GP_Sculpt_Data *gp_brush = gso->gp_brush;
+ const int radius = (gp_brush->flag & GP_SCULPT_FLAG_PRESSURE_RADIUS) ? gso->gp_brush->size * gso->pressure : gso->gp_brush->size;
bGPDspoint *pt1, *pt2;
int pc1[2] = {0};
@@ -1446,7 +1449,7 @@ static bool gpsculpt_brush_do_stroke(
pt2 = gps->points + i + 1;
/* Skip if neither one is selected (and we are only allowed to edit/consider selected points) */
- if (gso->settings->flag & GP_BRUSHEDIT_FLAG_SELECT_MASK) {
+ if (gso->settings->flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) {
if (!(pt1->flag & GP_SPOINT_SELECT) && !(pt2->flag & GP_SPOINT_SELECT)) {
include_last = false;
continue;
@@ -1527,25 +1530,25 @@ static bool gpsculpt_brush_do_frame(
}
switch (gso->brush_type) {
- case GP_EDITBRUSH_TYPE_SMOOTH: /* Smooth strokes */
+ case GP_SCULPT_TYPE_SMOOTH: /* Smooth strokes */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_smooth_apply);
break;
}
- case GP_EDITBRUSH_TYPE_THICKNESS: /* Adjust stroke thickness */
+ case GP_SCULPT_TYPE_THICKNESS: /* Adjust stroke thickness */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_thickness_apply);
break;
}
- case GP_EDITBRUSH_TYPE_STRENGTH: /* Adjust stroke color strength */
+ case GP_SCULPT_TYPE_STRENGTH: /* Adjust stroke color strength */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_strength_apply);
break;
}
- case GP_EDITBRUSH_TYPE_GRAB: /* Grab points */
+ case GP_SCULPT_TYPE_GRAB: /* Grab points */
{
if (gso->first) {
/* First time this brush stroke is being applied:
@@ -1563,31 +1566,31 @@ static bool gpsculpt_brush_do_frame(
break;
}
- case GP_EDITBRUSH_TYPE_PUSH: /* Push points */
+ case GP_SCULPT_TYPE_PUSH: /* Push points */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_push_apply);
break;
}
- case GP_EDITBRUSH_TYPE_PINCH: /* Pinch points */
+ case GP_SCULPT_TYPE_PINCH: /* Pinch points */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_pinch_apply);
break;
}
- case GP_EDITBRUSH_TYPE_TWIST: /* Twist points around midpoint */
+ case GP_SCULPT_TYPE_TWIST: /* Twist points around midpoint */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_twist_apply);
break;
}
- case GP_EDITBRUSH_TYPE_RANDOMIZE: /* Apply jitter */
+ case GP_SCULPT_TYPE_RANDOMIZE: /* Apply jitter */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_randomize_apply);
break;
}
- case GP_EDITBRUSH_TYPE_WEIGHT: /* Adjust vertex group weight */
+ case GP_SCULPT_TYPE_WEIGHT: /* Adjust vertex group weight */
{
changed |= gpsculpt_brush_do_stroke(gso, gps, diff_mat, gp_brush_weight_apply);
break;
@@ -1619,23 +1622,23 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
/* Calculate brush-specific data which applies equally to all points */
switch (gso->brush_type) {
- case GP_EDITBRUSH_TYPE_GRAB: /* Grab points */
- case GP_EDITBRUSH_TYPE_PUSH: /* Push points */
+ case GP_SCULPT_TYPE_GRAB: /* Grab points */
+ case GP_SCULPT_TYPE_PUSH: /* Push points */
{
/* calculate amount of displacement to apply */
gp_brush_grab_calc_dvec(gso);
break;
}
- case GP_EDITBRUSH_TYPE_PINCH: /* Pinch points */
- case GP_EDITBRUSH_TYPE_TWIST: /* Twist points around midpoint */
+ case GP_SCULPT_TYPE_PINCH: /* Pinch points */
+ case GP_SCULPT_TYPE_TWIST: /* Twist points around midpoint */
{
/* calculate midpoint of the brush (in data space) */
gp_brush_calc_midpoint(gso);
break;
}
- case GP_EDITBRUSH_TYPE_RANDOMIZE: /* Random jitter */
+ case GP_SCULPT_TYPE_RANDOMIZE: /* Random jitter */
{
/* compute the displacement vector for the cursor (in data space) */
gp_brush_grab_calc_dvec(gso);
@@ -1705,9 +1708,9 @@ static bool gpsculpt_brush_apply_standard(bContext *C, tGP_BrushEditData *gso)
static void gpsculpt_brush_apply(bContext *C, wmOperator *op, PointerRNA *itemptr)
{
tGP_BrushEditData *gso = op->customdata;
- GP_EditBrush_Data *gp_brush = gso->gp_brush;
+ GP_Sculpt_Data *gp_brush = gso->gp_brush;
const int radius = (
- (gp_brush->flag & GP_EDITBRUSH_FLAG_PRESSURE_RADIUS) ?
+ (gp_brush->flag & GP_SCULPT_FLAG_PRESSURE_RADIUS) ?
gso->gp_brush->size * gso->pressure : gso->gp_brush->size);
float mousef[2];
int mouse[2];
@@ -1721,9 +1724,9 @@ static void gpsculpt_brush_apply(bContext *C, wmOperator *op, PointerRNA *itempt
gso->pressure = RNA_float_get(itemptr, "pressure");
if (RNA_boolean_get(itemptr, "pen_flip"))
- gso->flag |= GP_EDITBRUSH_FLAG_INVERT;
+ gso->flag |= GP_SCULPT_FLAG_INVERT;
else
- gso->flag &= ~GP_EDITBRUSH_FLAG_INVERT;
+ gso->flag &= ~GP_SCULPT_FLAG_INVERT;
/* Store coordinates as reference, if operator just started running */
@@ -1741,7 +1744,7 @@ static void gpsculpt_brush_apply(bContext *C, wmOperator *op, PointerRNA *itempt
/* Apply brush */
- if (gso->brush_type == GP_EDITBRUSH_TYPE_CLONE) {
+ if (gso->brush_type == GP_SCULPT_TYPE_CLONE) {
changed = gpsculpt_brush_apply_clone(C, gso);
}
else {
@@ -1849,22 +1852,22 @@ static int gpsculpt_brush_invoke(bContext *C, wmOperator *op, const wmEvent *eve
/* initialise type-specific data (used for the entire session) */
switch (gso->brush_type) {
/* Brushes requiring timer... */
- case GP_EDITBRUSH_TYPE_THICKNESS:
+ case GP_SCULPT_TYPE_THICKNESS:
brush_rate = 0.01f; // XXX: hardcoded
needs_timer = true;
break;
- case GP_EDITBRUSH_TYPE_STRENGTH:
+ case GP_SCULPT_TYPE_STRENGTH:
brush_rate = 0.01f; // XXX: hardcoded
needs_timer = true;
break;
- case GP_EDITBRUSH_TYPE_PINCH:
+ case GP_SCULPT_TYPE_PINCH:
brush_rate = 0.001f; // XXX: hardcoded
needs_timer = true;
break;
- case GP_EDITBRUSH_TYPE_TWIST:
+ case GP_SCULPT_TYPE_TWIST:
brush_rate = 0.01f; // XXX: hardcoded
needs_timer = true;
break;
@@ -2091,11 +2094,11 @@ static int gpsculpt_brush_modal(bContext *C, wmOperator *op, const wmEvent *even
return OPERATOR_RUNNING_MODAL;
}
-void GPENCIL_OT_brush_paint(wmOperatorType *ot)
+void GPENCIL_OT_sculpt_paint(wmOperatorType *ot)
{
/* identifiers */
ot->name = "Stroke Sculpt";
- ot->idname = "GPENCIL_OT_brush_paint";
+ ot->idname = "GPENCIL_OT_sculpt_paint";
ot->description = "Apply tweaks to strokes by painting over the strokes"; // XXX
/* api callbacks */
diff --git a/source/blender/editors/gpencil/gpencil_data.c b/source/blender/editors/gpencil/gpencil_data.c
index 20100354070..b7568ce20dd 100644
--- a/source/blender/editors/gpencil/gpencil_data.c
+++ b/source/blender/editors/gpencil/gpencil_data.c
@@ -479,8 +479,6 @@ static int gp_layer_duplicate_object_exec(bContext *C, wmOperator *op)
/* make copy of layer */
bGPDlayer *gpl_dst = MEM_dupallocN(gpl_src);
gpl_dst->prev = gpl_dst->next = NULL;
- gpl_dst->runtime.derived_array = NULL;
- gpl_dst->runtime.len_derived = 0;
BLI_addtail(&gpd_dst->layers, gpl_dst);
BLI_uniquename(&gpd_dst->layers, gpl_dst, DATA_("GP_Layer"), '.', offsetof(bGPDlayer, info), sizeof(gpl_dst->info));
diff --git a/source/blender/editors/gpencil/gpencil_edit.c b/source/blender/editors/gpencil/gpencil_edit.c
index f2caba026ca..b56d46fdc1e 100644
--- a/source/blender/editors/gpencil/gpencil_edit.c
+++ b/source/blender/editors/gpencil/gpencil_edit.c
@@ -2840,10 +2840,12 @@ void GPENCIL_OT_stroke_flip(wmOperatorType *ot)
/* ***************** Reproject Strokes ********************** */
typedef enum eGP_ReprojectModes {
- /* Axis (equal to lock axis) */
- GP_REPROJECT_AXIS = 0,
+ /* Axis */
+ GP_REPROJECT_FRONT = 0,
+ GP_REPROJECT_SIDE,
+ GP_REPROJECT_TOP,
/* On same plane, parallel to viewplane */
- GP_REPROJECT_PLANAR,
+ GP_REPROJECT_VIEW,
/* Reprojected on to the scene geometry */
GP_REPROJECT_SURFACE,
} eGP_ReprojectModes;
@@ -2863,14 +2865,8 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
GP_SpaceConversion gsc = {NULL};
eGP_ReprojectModes mode = RNA_enum_get(op->ptr, "type");
- int lock_axis = ts->gp_sculpt.lock_axis;
float origin[3];
- if ((mode == GP_REPROJECT_AXIS) && (lock_axis == GP_LOCKAXIS_VIEW)) {
- BKE_report(op->reports, RPT_ERROR, "To reproject by axis, a lock axis must be set before");
- return OPERATOR_CANCELLED;
- }
-
/* init space conversion stuff */
gp_point_conversion_init(C, &gsc);
@@ -2907,24 +2903,47 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
gp_point_to_parent_space(pt, gpstroke_iter.diff_mat, &pt2);
gp_point_to_xy_fl(&gsc, gps, &pt2, &xy[0], &xy[1]);
- /* Project stroke in the axis locked */
- if (mode == GP_REPROJECT_AXIS) {
- if (lock_axis > GP_LOCKAXIS_VIEW) {
- ED_gp_get_drawing_reference(v3d, scene, ob, gpl,
- ts->gpencil_v3d_align, origin);
- ED_gp_project_point_to_plane(ob, rv3d, origin,
- lock_axis - 1, &pt2);
+ /* Project stroke in one axis */
+ if (ELEM(mode, GP_REPROJECT_FRONT, GP_REPROJECT_SIDE, GP_REPROJECT_TOP)) {
+ ED_gp_get_drawing_reference(v3d, scene, ob, gpl,
+ ts->gpencil_v3d_align, origin);
+
+ int axis = 0;
+ switch (mode) {
+ case GP_REPROJECT_FRONT:
+ {
+ axis = 1;
+ break;
+ }
+ case GP_REPROJECT_SIDE:
+ {
+ axis = 0;
+ break;
+ }
+ case GP_REPROJECT_TOP:
+ {
+ axis = 2;
+ break;
+ }
+ default:
+ {
+ axis = 1;
+ break;
+ }
+ }
+
+ ED_gp_project_point_to_plane(ob, rv3d, origin,
+ axis, &pt2);
- copy_v3_v3(&pt->x, &pt2.x);
+ copy_v3_v3(&pt->x, &pt2.x);
- /* apply parent again */
- gp_apply_parent_point(depsgraph, ob, gpd, gpl, pt);
- }
+ /* apply parent again */
+ gp_apply_parent_point(depsgraph, ob, gpd, gpl, pt);
}
/* Project screenspace back to 3D space (from current perspective)
* so that all points have been treated the same way
*/
- else if (mode == GP_REPROJECT_PLANAR) {
+ else if (mode == GP_REPROJECT_VIEW) {
/* Planar - All on same plane parallel to the viewplane */
gp_point_xy_to_3d(&gsc, scene, xy, &pt->x);
}
@@ -2947,7 +2966,7 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
}
/* Unapply parent corrections */
- if (mode != GP_REPROJECT_AXIS) {
+ if (!ELEM(mode, GP_REPROJECT_FRONT, GP_REPROJECT_SIDE, GP_REPROJECT_TOP)) {
mul_m4_v3(inverse_diff_mat, &pt->x);
}
}
@@ -2963,10 +2982,13 @@ static int gp_strokes_reproject_exec(bContext *C, wmOperator *op)
void GPENCIL_OT_reproject(wmOperatorType *ot)
{
static const EnumPropertyItem reproject_type[] = {
- {GP_REPROJECT_AXIS, "AXIS", 0, "Axis",
- "Reproject the strokes using the current lock axis configuration. This is the same projection using while"
- "drawing new strokes"},
- {GP_REPROJECT_PLANAR, "PLANAR", 0, "Planar",
+ {GP_REPROJECT_FRONT, "FRONT", 0, "Front",
+ "Reproject the strokes using the X-Z plane"},
+ {GP_REPROJECT_SIDE, "SIDE", 0, "Side",
+ "Reproject the strokes using the Y-Z plane"},
+ {GP_REPROJECT_TOP, "TOP", 0, "Top",
+ "Reproject the strokes using the X-Y plane"},
+ {GP_REPROJECT_VIEW, "VIEW", 0, "View",
"Reproject the strokes to end up on the same plane, as if drawn from the current viewpoint "
"using 'Cursor' Stroke Placement"},
{GP_REPROJECT_SURFACE, "SURFACE", 0, "Surface",
@@ -2990,7 +3012,7 @@ void GPENCIL_OT_reproject(wmOperatorType *ot)
ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO | OPTYPE_USE_EVAL_DATA;
/* properties */
- ot->prop = RNA_def_enum(ot->srna, "type", reproject_type, GP_REPROJECT_PLANAR, "Projection Type", "");
+ ot->prop = RNA_def_enum(ot->srna, "type", reproject_type, GP_REPROJECT_VIEW, "Projection Type", "");
}
/* ******************* Stroke subdivide ************************** */
diff --git a/source/blender/editors/gpencil/gpencil_intern.h b/source/blender/editors/gpencil/gpencil_intern.h
index d94b5d49add..d737d34a017 100644
--- a/source/blender/editors/gpencil/gpencil_intern.h
+++ b/source/blender/editors/gpencil/gpencil_intern.h
@@ -328,7 +328,7 @@ void GPENCIL_OT_reproject(struct wmOperatorType *ot);
/* stroke sculpting -- */
-void GPENCIL_OT_brush_paint(struct wmOperatorType *ot);
+void GPENCIL_OT_sculpt_paint(struct wmOperatorType *ot);
/* buttons editing --- */
diff --git a/source/blender/editors/gpencil/gpencil_ops.c b/source/blender/editors/gpencil/gpencil_ops.c
index a199f943a8d..01221f57f05 100644
--- a/source/blender/editors/gpencil/gpencil_ops.c
+++ b/source/blender/editors/gpencil/gpencil_ops.c
@@ -266,7 +266,7 @@ void ED_operatortypes_gpencil(void)
WM_operatortype_append(GPENCIL_OT_reproject);
- WM_operatortype_append(GPENCIL_OT_brush_paint);
+ WM_operatortype_append(GPENCIL_OT_sculpt_paint);
/* Editing (Buttons) ------------ */
diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c
index f60c7892ab5..3941c757a50 100644
--- a/source/blender/editors/gpencil/gpencil_paint.c
+++ b/source/blender/editors/gpencil/gpencil_paint.c
@@ -2012,7 +2012,7 @@ static void gp_paint_initstroke(tGPsdata *p, eGPencil_PaintModes paintmode, Deps
* (though this is only available in editmode)
*/
if (p->gpd->flag & GP_DATA_STROKE_EDITMODE) {
- if (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_SELECT_MASK) {
+ if (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_SELECT_MASK) {
p->flags |= GP_PAINTFLAG_SELECTMASK;
}
}
diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c
index 6cb539a5f60..a0c31b64666 100644
--- a/source/blender/editors/gpencil/gpencil_utils.c
+++ b/source/blender/editors/gpencil/gpencil_utils.c
@@ -1516,9 +1516,9 @@ static void gp_brush_drawcursor(bContext *C, int x, int y, void *customdata)
Object *ob = CTX_data_active_object(C);
ARegion *ar = CTX_wm_region(C);
- GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
bGPdata *gpd = ED_gpencil_data_get_active(C);
- GP_EditBrush_Data *gp_brush = NULL;
+ GP_Sculpt_Data *gp_brush = NULL;
Brush *brush = NULL;
Material *ma = NULL;
MaterialGPencilStyle *gp_style = NULL;
@@ -1599,12 +1599,12 @@ static void gp_brush_drawcursor(bContext *C, int x, int y, void *customdata)
/* for sculpt use sculpt brush size */
if (GPENCIL_SCULPT_OR_WEIGHT_MODE(gpd)) {
if (gp_brush) {
- if ((gp_brush->flag & GP_EDITBRUSH_FLAG_ENABLE_CURSOR) == 0) {
+ if ((gp_brush->flag & GP_SCULPT_FLAG_ENABLE_CURSOR) == 0) {
return;
}
radius = gp_brush->size;
- if (gp_brush->flag & (GP_EDITBRUSH_FLAG_INVERT | GP_EDITBRUSH_FLAG_TMP_INVERT)) {
+ if (gp_brush->flag & (GP_SCULPT_FLAG_INVERT | GP_SCULPT_FLAG_TMP_INVERT)) {
copy_v3_v3(color, gp_brush->curcolor_sub);
}
else {
@@ -1671,7 +1671,7 @@ static void gp_brush_drawcursor(bContext *C, int x, int y, void *customdata)
void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata)
{
Scene *scene = CTX_data_scene(C);
- GP_BrushEdit_Settings *gset = &scene->toolsettings->gp_sculpt;
+ GP_Sculpt_Settings *gset = &scene->toolsettings->gp_sculpt;
int *lastpost = customdata;
if (gset->paintcursor && !enable) {
@@ -1700,19 +1700,19 @@ void ED_gpencil_toggle_brush_cursor(bContext *C, bool enable, void *customdata)
static void gpencil_verify_brush_type(bContext *C, int newmode)
{
ToolSettings *ts = CTX_data_tool_settings(C);
- GP_BrushEdit_Settings *gset = &ts->gp_sculpt;
+ GP_Sculpt_Settings *gset = &ts->gp_sculpt;
switch (newmode) {
case OB_MODE_GPENCIL_SCULPT:
- gset->flag &= ~GP_BRUSHEDIT_FLAG_WEIGHT_MODE;
- if ((gset->brushtype < 0) || (gset->brushtype >= GP_EDITBRUSH_TYPE_WEIGHT)) {
- gset->brushtype = GP_EDITBRUSH_TYPE_PUSH;
+ gset->flag &= ~GP_SCULPT_SETT_FLAG_WEIGHT_MODE;
+ if ((gset->brushtype < 0) || (gset->brushtype >= GP_SCULPT_TYPE_WEIGHT)) {
+ gset->brushtype = GP_SCULPT_TYPE_PUSH;
}
break;
case OB_MODE_GPENCIL_WEIGHT:
- gset->flag |= GP_BRUSHEDIT_FLAG_WEIGHT_MODE;
- if ((gset->weighttype < GP_EDITBRUSH_TYPE_WEIGHT) || (gset->weighttype >= GP_EDITBRUSH_TYPE_MAX)) {
- gset->weighttype = GP_EDITBRUSH_TYPE_WEIGHT;
+ gset->flag |= GP_SCULPT_SETT_FLAG_WEIGHT_MODE;
+ if ((gset->weighttype < GP_SCULPT_TYPE_WEIGHT) || (gset->weighttype >= GP_SCULPT_TYPE_MAX)) {
+ gset->weighttype = GP_SCULPT_TYPE_WEIGHT;
}
break;
default:
@@ -1844,7 +1844,9 @@ void ED_gpencil_calc_stroke_uv(Object *ob, bGPDstroke *gps)
float factor;
/* if image, use texture width */
- if ((gp_style) && (gp_style->sima)) {
+ if ((gp_style) && (gp_style->stroke_style == GP_STYLE_STROKE_STYLE_TEXTURE) &&
+ (gp_style->sima))
+ {
factor = gp_style->sima->gen_x;
}
else if (totlen == 0) {
diff --git a/source/blender/editors/include/ED_object.h b/source/blender/editors/include/ED_object.h
index 4547aaae5d4..1101c966118 100644
--- a/source/blender/editors/include/ED_object.h
+++ b/source/blender/editors/include/ED_object.h
@@ -111,6 +111,8 @@ void ED_object_parent_clear(struct Object *ob, const int type);
void ED_object_base_select(struct Base *base, eObjectSelect_Mode mode);
void ED_object_base_activate(struct bContext *C, struct Base *base);
void ED_object_base_free_and_unlink(struct Main *bmain, struct Scene *scene, struct Object *ob);
+bool ED_object_base_deselect_all_ex(struct ViewLayer *view_layer, int action, bool *r_any_visible);
+bool ED_object_base_deselect_all(struct ViewLayer *view_layer, int action);
/* single object duplicate, if (dupflag == 0), fully linked, else it uses the flags given */
struct Base *ED_object_add_duplicate(struct Main *bmain, struct Scene *scene, struct ViewLayer *view_layer, struct Base *base, int dupflag);
@@ -300,6 +302,15 @@ const struct EnumPropertyItem *ED_object_vgroup_selection_itemf_helper(
void ED_object_check_force_modifiers(
struct Main *bmain, struct Scene *scene, struct Object *object);
+struct Base *ED_object_find_first_by_data_id(struct ViewLayer *view_layer, struct ID *id);
+
+bool ED_object_jump_to_object(
+ struct bContext *C, struct Object *ob,
+ const bool reveal_hidden);
+bool ED_object_jump_to_bone(
+ struct bContext *C, struct Object *ob, const char *bone_name,
+ const bool reveal_hidden);
+
/* object_facemap_ops.c */
void ED_object_facemap_face_add(struct Object *ob, struct bFaceMap *fmap, int facenum);
void ED_object_facemap_face_remove(struct Object *ob, struct bFaceMap *fmap, int facenum);
diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index 7adc2d99879..dd17fa6f434 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -166,6 +166,9 @@ void TRANSFORM_GGT_gizmo(struct wmGizmoGroupType *gzgt);
void VIEW3D_GGT_xform_cage(struct wmGizmoGroupType *gzgt);
void VIEW3D_GGT_xform_shear(struct wmGizmoGroupType *gzgt);
+/* *** transform_gizmo_extrude_3d.c *** */
+void VIEW3D_GGT_xform_extrude(struct wmGizmoGroupType *gzgt);
+
bool ED_widgetgroup_gizmo2d_poll(const struct bContext *C, struct wmGizmoGroupType *gzgt);
void ED_widgetgroup_gizmo2d_setup(const struct bContext *C, struct wmGizmoGroup *gzgroup);
void ED_widgetgroup_gizmo2d_refresh(const struct bContext *C, struct wmGizmoGroup *gzgroup);
diff --git a/source/blender/editors/include/UI_icons.h b/source/blender/editors/include/UI_icons.h
index 9d82e074415..9b4ee0c8264 100644
--- a/source/blender/editors/include/UI_icons.h
+++ b/source/blender/editors/include/UI_icons.h
@@ -141,7 +141,7 @@ DEF_ICON_SHADING(TEXTURE)
DEF_ICON(ANIM)
DEF_ICON_SHADING(WORLD)
DEF_ICON(SCENE)
-DEF_ICON_BLANK(144)
+DEF_ICON(OUTPUT)
DEF_ICON_BLANK(145)
DEF_ICON_BLANK(146)
DEF_ICON(SCRIPT)
@@ -235,7 +235,7 @@ DEF_ICON(PARTICLE_DATA)
DEF_ICON(LIBRARY_DATA_DIRECT)
DEF_ICON_COLLECTION(GROUP)
DEF_ICON(ARMATURE_DATA)
-DEF_ICON(POSE_DATA)
+DEF_ICON(COMMUNITY)
DEF_ICON(BONE_DATA)
DEF_ICON_MODIFIER(CONSTRAINT)
DEF_ICON(SHAPEKEY_DATA)
@@ -243,7 +243,7 @@ DEF_ICON_MODIFIER(CONSTRAINT_BONE)
DEF_ICON(CAMERA_STEREO)
DEF_ICON(PACKAGE)
DEF_ICON(UGLYPACKAGE)
-DEF_ICON_BLANK(246)
+DEF_ICON(EXPERIMENTAL)
/* DATA */
DEF_ICON_SHADING(BRUSH_DATA)
@@ -341,7 +341,7 @@ DEF_ICON_OBJECT_DATA(OUTLINER_DATA_ARMATURE)
DEF_ICON_OBJECT_DATA(OUTLINER_DATA_FONT)
DEF_ICON_OBJECT_DATA(OUTLINER_DATA_SURFACE)
DEF_ICON_OBJECT_DATA(OUTLINER_DATA_SPEAKER)
-DEF_ICON_OBJECT_DATA(OUTLINER_DATA_POSE)
+DEF_ICON_BLANK(344)
DEF_ICON_BLANK(345)
DEF_ICON_OBJECT_DATA(OUTLINER_DATA_GREASEPENCIL)
DEF_ICON(GP_SELECT_POINTS)
@@ -369,15 +369,15 @@ DEF_ICON(MESH_CYLINDER)
DEF_ICON(MESH_TORUS)
DEF_ICON(MESH_CONE)
DEF_ICON(MESH_CAPSULE)
-DEF_ICON_BLANK(372)
+DEF_ICON(EMPTY_SINGLE_ARROW)
DEF_ICON_SHADING(LIGHT_POINT)
DEF_ICON_SHADING(LIGHT_SUN)
DEF_ICON_SHADING(LIGHT_SPOT)
DEF_ICON_SHADING(LIGHT_HEMI)
DEF_ICON_SHADING(LIGHT_AREA)
-DEF_ICON_BLANK(278)
-DEF_ICON_BLANK(379)
-DEF_ICON(META_EMPTY)
+DEF_ICON(CUBE)
+DEF_ICON(SPHERE)
+DEF_ICON(CONE)
DEF_ICON(META_PLANE)
DEF_ICON(META_CUBE)
DEF_ICON(META_BALL)
@@ -392,9 +392,9 @@ DEF_ICON(SURFACE_NSURFACE)
DEF_ICON(SURFACE_NCYLINDER)
DEF_ICON(SURFACE_NSPHERE)
DEF_ICON(SURFACE_NTORUS)
-DEF_ICON(GP_EMPTY)
-DEF_ICON(GP_STROKE)
-DEF_ICON_BLANK(397)
+DEF_ICON(EMPTY_AXIS)
+DEF_ICON(STROKE)
+DEF_ICON(EMPTY_ARROWS)
DEF_ICON(CURVE_BEZCURVE)
DEF_ICON(CURVE_BEZCIRCLE)
DEF_ICON(CURVE_NCURVE)
@@ -437,9 +437,9 @@ DEF_ICON_BLANK(679)
DEF_ICON_BLANK(680)
DEF_ICON_BLANK(681)
DEF_ICON_BLANK(682)
-DEF_ICON_BLANK(683)
-DEF_ICON_BLANK(684)
-DEF_ICON_BLANK(685)
+DEF_ICON(IMAGE_PLANE)
+DEF_ICON(IMAGE_BACKGROUND)
+DEF_ICON(IMAGE_REFERENCE)
/* EMPTY */
DEF_ICON_BLANK(445)
@@ -825,7 +825,7 @@ DEF_ICON(FORWARD)
DEF_ICON_BLANK(825)
DEF_ICON_BLANK(826)
DEF_ICON_BLANK(827)
-DEF_ICON_BLANK(828)
+DEF_ICON(FILE_VOLUME)
DEF_ICON(ALEMBIC)
DEF_ICON(VOLUME)
DEF_ICON(FILE_HIDDEN)
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index d0d2b83f7cc..dd0070b3b37 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -938,7 +938,7 @@ void UI_exit(void);
#define UI_ITEM_O_DEPRESS (1 << 9)
#define UI_ITEM_R_COMPACT (1 << 10)
-#define UI_HEADER_OFFSET ((void)0, 0.2f * UI_UNIT_X)
+#define UI_HEADER_OFFSET ((void)0, 0.4f * UI_UNIT_X)
/* uiLayoutOperatorButs flags */
enum {
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index 0ad7a18b5ac..6fc627d3847 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -988,8 +988,8 @@ static bool ui_but_event_operator_string_from_menu(
IDP_AddToGroup(prop_menu, IDP_NewString(mt->idname, "name", sizeof(mt->idname)));
if (WM_key_event_operator_string(
- C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true,
- buf, buf_len))
+ C, "WM_OT_call_menu", WM_OP_INVOKE_REGION_WIN, prop_menu, true,
+ buf, buf_len))
{
found = true;
}
@@ -1151,8 +1151,8 @@ static bool ui_but_event_property_operator_string(
/* check each until one works... */
for (i = 0; (i < num_ops) && (ctx_toggle_opnames[i]); i++) {
if (WM_key_event_operator_string(
- C, ctx_toggle_opnames[i], WM_OP_INVOKE_REGION_WIN, prop_path, false,
- buf, buf_len))
+ C, ctx_toggle_opnames[i], WM_OP_INVOKE_REGION_WIN, prop_path, false,
+ buf, buf_len))
{
found = true;
break;
@@ -1510,10 +1510,10 @@ static void ui_block_message_subscribe(ARegion *ar, struct wmMsgBus *mbus, uiBlo
if (but->rnapoin.type && but->rnaprop) {
/* quick check to avoid adding buttons representing a vector, multiple times. */
if ((but_prev &&
- (but_prev->rnaprop == but->rnaprop) &&
- (but_prev->rnapoin.type == but->rnapoin.type) &&
- (but_prev->rnapoin.data == but->rnapoin.data) &&
- (but_prev->rnapoin.id.data == but->rnapoin.id.data)) == false)
+ (but_prev->rnaprop == but->rnaprop) &&
+ (but_prev->rnapoin.type == but->rnapoin.type) &&
+ (but_prev->rnapoin.data == but->rnapoin.data) &&
+ (but_prev->rnapoin.id.data == but->rnapoin.id.data)) == false)
{
/* TODO: could make this into utility function. */
WM_msg_subscribe_rna(
@@ -1829,7 +1829,7 @@ bool ui_but_is_float(const uiBut *but)
bool ui_but_is_bool(const uiBut *but)
{
- if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE, UI_BTYPE_ICON_TOGGLE_N))
+ if (ELEM(but->type, UI_BTYPE_TOGGLE, UI_BTYPE_TOGGLE_N, UI_BTYPE_ICON_TOGGLE, UI_BTYPE_ICON_TOGGLE_N, UI_BTYPE_TAB))
return true;
if (but->rnaprop && RNA_property_type(but->rnaprop) == PROP_BOOLEAN)
@@ -3019,8 +3019,8 @@ void ui_but_update_ex(uiBut *but, const bool validate)
EnumPropertyItem item;
if (RNA_property_enum_item_from_value_gettexted(
- but->block->evil_C,
- &but->rnapoin, but->rnaprop, value_enum, &item))
+ but->block->evil_C,
+ &but->rnapoin, but->rnaprop, value_enum, &item))
{
size_t slen = strlen(item.name);
ui_but_string_free_internal(but);
diff --git a/source/blender/editors/interface/interface_context_menu.c b/source/blender/editors/interface/interface_context_menu.c
index 03d941c2387..0ffc97444e1 100644
--- a/source/blender/editors/interface/interface_context_menu.c
+++ b/source/blender/editors/interface/interface_context_menu.c
@@ -361,7 +361,12 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
uiLayoutSetOperatorContext(layout, WM_OP_INVOKE_DEFAULT);
}
- if (but->type == UI_BTYPE_TAB) {
+ const bool is_disabled = but->flag & UI_BUT_DISABLED;
+
+ if (is_disabled) {
+ /* Suppress editing commands. */
+ }
+ else if (but->type == UI_BTYPE_TAB) {
uiButTab *tab = (uiButTab *)but;
if (tab->menu) {
UI_menutype_draw(C, tab->menu, layout);
@@ -639,6 +644,17 @@ bool ui_popup_context_menu_for_button(bContext *C, uiBut *but)
}
}
+ /* Pointer properties and string properties with prop_search support jumping to target object/bone. */
+ if (but->rnapoin.data && but->rnaprop) {
+ const PropertyType type = RNA_property_type(but->rnaprop);
+
+ if ((type == PROP_POINTER) || (type == PROP_STRING && but->type == UI_BTYPE_SEARCH_MENU && but->search_func == ui_rna_collection_search_cb)) {
+ uiItemO(layout, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Jump To Target"),
+ ICON_NONE, "UI_OT_jump_to_target_button");
+ uiItemS(layout);
+ }
+ }
+
/* Favorites Menu */
if (ui_but_is_user_menu_compatible(C, but)) {
uiBlock *block = uiLayoutGetBlock(layout);
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index fffc28d1cdf..eaba2fbbc95 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -1721,7 +1721,7 @@ static bool ui_but_drag_init(
/* prevent other WM gestures to start while we try to drag */
WM_gestures_remove(C);
- if (ABS(data->dragstartx - event->x) + ABS(data->dragstarty - event->y) > U.dragthreshold) {
+ if (ABS(data->dragstartx - event->x) + ABS(data->dragstarty - event->y) > U.dragthreshold * U.dpi_fac) {
button_activate_state(C, but, BUTTON_STATE_EXIT);
data->cancel = true;
@@ -2174,8 +2174,8 @@ static bool ui_but_has_array_value(uiBut *but)
{
return (but->rnapoin.data && but->rnaprop &&
ELEM(RNA_property_subtype(but->rnaprop), PROP_COLOR, PROP_TRANSLATION, PROP_DIRECTION,
- PROP_VELOCITY, PROP_ACCELERATION, PROP_MATRIX, PROP_EULER, PROP_QUATERNION, PROP_AXISANGLE,
- PROP_XYZ, PROP_XYZ_LENGTH, PROP_COLOR_GAMMA, PROP_COORDS));
+ PROP_VELOCITY, PROP_ACCELERATION, PROP_MATRIX, PROP_EULER, PROP_QUATERNION, PROP_AXISANGLE,
+ PROP_XYZ, PROP_XYZ_LENGTH, PROP_COLOR_GAMMA, PROP_COORDS));
}
static void ui_but_paste_normalized_vector(bContext *C, uiBut *but, char *buf_paste)
@@ -3882,6 +3882,15 @@ static bool ui_but_is_mouse_over_icon_extra(const ARegion *region, uiBut *but, c
static int ui_do_but_TAB(bContext *C, uiBlock *block, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
{
+#ifdef USE_DRAG_TOGGLE
+ {
+ int retval;
+ if (ui_do_but_ANY_drag_toggle(C, but, data, event, &retval)) {
+ return retval;
+ }
+ }
+#endif
+
if (data->state == BUTTON_STATE_HIGHLIGHT) {
const int rna_type = but->rnaprop ? RNA_property_type(but->rnaprop) : 0;
@@ -3894,7 +3903,7 @@ static int ui_do_but_TAB(bContext *C, uiBlock *block, uiBut *but, uiHandleButton
button_activate_state(C, but, BUTTON_STATE_TEXT_EDITING);
return WM_UI_HANDLER_BREAK;
}
- else if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && (event->val == KM_CLICK)) {
+ else if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && (event->val == KM_PRESS)) {
button_activate_state(C, but, BUTTON_STATE_EXIT);
return WM_UI_HANDLER_BREAK;
}
@@ -6614,6 +6623,17 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent *
return WM_UI_HANDLER_BREAK;
}
+ /* handle menu */
+ if ((event->type == RIGHTMOUSE) &&
+ !IS_EVENT_MOD(event, shift, ctrl, alt, oskey) &&
+ (event->val == KM_PRESS))
+ {
+ /* RMB has two options now */
+ if (ui_popup_context_menu_for_button(C, but)) {
+ return WM_UI_HANDLER_BREAK;
+ }
+ }
+
if (is_disabled) {
return WM_UI_HANDLER_CONTINUE;
}
@@ -6627,16 +6647,6 @@ static int ui_do_button(bContext *C, uiBlock *block, uiBut *but, const wmEvent *
if (event->type == EVT_DROP) {
ui_but_drop(C, event, but, data);
}
- /* handle menu */
- else if ((event->type == RIGHTMOUSE) &&
- !IS_EVENT_MOD(event, shift, ctrl, alt, oskey) &&
- (event->val == KM_PRESS))
- {
- /* RMB has two options now */
- if (ui_popup_context_menu_for_button(C, but)) {
- return WM_UI_HANDLER_BREAK;
- }
- }
}
if (but->flag & UI_BUT_DISABLED) {
@@ -8062,38 +8072,38 @@ static int ui_handle_button_event(bContext *C, const wmEvent *event, uiBut *but)
break;
}
case MOUSEMOVE:
- {
- /* deselect the button when moving the mouse away */
- /* also de-activate for buttons that only show highlights */
- if (ui_but_contains_point_px(ar, but, event->x, event->y)) {
-
- /* Drag on a hold button (used in the toolbar) now opens it immediately. */
- if (data->hold_action_timer) {
- if (but->flag & UI_SELECT) {
- if ((abs(event->x - event->prevx)) > 2 ||
- (abs(event->y - event->prevy)) > 2)
- {
- WM_event_remove_timer(data->wm, data->window, data->hold_action_timer);
- data->hold_action_timer = WM_event_add_timer(data->wm, data->window, TIMER, 0.0f);
- }
+ {
+ /* deselect the button when moving the mouse away */
+ /* also de-activate for buttons that only show highlights */
+ if (ui_but_contains_point_px(ar, but, event->x, event->y)) {
+
+ /* Drag on a hold button (used in the toolbar) now opens it immediately. */
+ if (data->hold_action_timer) {
+ if (but->flag & UI_SELECT) {
+ if ((abs(event->x - event->prevx)) > 2 ||
+ (abs(event->y - event->prevy)) > 2)
+ {
+ WM_event_remove_timer(data->wm, data->window, data->hold_action_timer);
+ data->hold_action_timer = WM_event_add_timer(data->wm, data->window, TIMER, 0.0f);
}
}
+ }
- if (!(but->flag & UI_SELECT)) {
- but->flag |= (UI_SELECT | UI_ACTIVE);
- data->cancel = false;
- ED_region_tag_redraw(data->region);
- }
+ if (!(but->flag & UI_SELECT)) {
+ but->flag |= (UI_SELECT | UI_ACTIVE);
+ data->cancel = false;
+ ED_region_tag_redraw(data->region);
}
- else {
- if (but->flag & UI_SELECT) {
- but->flag &= ~(UI_SELECT | UI_ACTIVE);
- data->cancel = true;
- ED_region_tag_redraw(data->region);
- }
+ }
+ else {
+ if (but->flag & UI_SELECT) {
+ but->flag &= ~(UI_SELECT | UI_ACTIVE);
+ data->cancel = true;
+ ED_region_tag_redraw(data->region);
}
}
break;
+ }
default:
/* otherwise catch mouse release event */
ui_do_button(C, block, but, event);
@@ -8690,7 +8700,7 @@ float ui_block_calc_pie_segment(uiBlock *block, const float event_xy[2])
len = normalize_v2_v2(block->pie_data.pie_dir, seg2);
- if (len < U.pie_menu_threshold * U.pixelsize)
+ if (len < U.pie_menu_threshold * U.dpi_fac)
block->pie_data.flags |= UI_PIE_INVALID_DIR;
else
block->pie_data.flags &= ~UI_PIE_INVALID_DIR;
@@ -9408,7 +9418,7 @@ static int ui_pie_handler(bContext *C, const wmEvent *event, uiPopupBlockHandle
but = ui_but_find_active_in_region(menu->region);
if (but && (U.pie_menu_confirm > 0) &&
- (dist >= U.pie_menu_threshold + U.pie_menu_confirm))
+ (dist >= U.dpi_fac * (U.pie_menu_threshold + U.pie_menu_confirm)))
{
if (but)
return ui_but_pie_menu_apply(C, menu, but, true);
@@ -9435,7 +9445,7 @@ static int ui_pie_handler(bContext *C, const wmEvent *event, uiPopupBlockHandle
/* here instead, we use the offset location to account for the initial direction timeout */
if ((U.pie_menu_confirm > 0) &&
- (dist >= U.pie_menu_threshold + U.pie_menu_confirm))
+ (dist >= U.dpi_fac * (U.pie_menu_threshold + U.pie_menu_confirm)))
{
block->pie_data.flags |= UI_PIE_GESTURE_END_WAIT;
copy_v2_v2(block->pie_data.last_pos, event_xy);
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index 424f5004bf0..5e8b420e018 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -268,7 +268,7 @@ static int ui_item_fit(int item, int pos, int all, int available, bool is_last,
static int ui_layout_vary_direction(uiLayout *layout)
{
return ((ELEM(layout->root->type, UI_LAYOUT_HEADER, UI_LAYOUT_PIEMENU) ||
- (layout->alignment != UI_LAYOUT_ALIGN_EXPAND)) ?
+ (layout->alignment != UI_LAYOUT_ALIGN_EXPAND)) ?
UI_ITEM_VARY_X : UI_ITEM_VARY_Y);
}
@@ -2533,8 +2533,8 @@ void uiItemMenuEnumO_ptr(
{
char keybuf[128];
if (WM_key_event_operator_string(
- C, ot->idname, layout->root->opcontext, NULL, false,
- keybuf, sizeof(keybuf)))
+ C, ot->idname, layout->root->opcontext, NULL, false,
+ keybuf, sizeof(keybuf)))
{
ui_but_add_shortcut(but, keybuf, false);
}
@@ -2957,7 +2957,7 @@ static void ui_litem_layout_root_radial(uiLayout *litem)
ui_item_size(item, &itemw, &itemh);
- ui_item_position(item, x - itemw / 2, y + U.pixelsize * (U.pie_menu_threshold + 9.0f), itemw, itemh);
+ ui_item_position(item, x - itemw / 2, y + U.dpi_fac * (U.pie_menu_threshold + 9.0f), itemw, itemh);
}
}
diff --git a/source/blender/editors/interface/interface_ops.c b/source/blender/editors/interface/interface_ops.c
index d2bed210f9c..cc609216e9a 100644
--- a/source/blender/editors/interface/interface_ops.c
+++ b/source/blender/editors/interface/interface_ops.c
@@ -31,6 +31,7 @@
#include "MEM_guardedalloc.h"
+#include "DNA_armature_types.h"
#include "DNA_screen_types.h"
#include "DNA_text_types.h" /* for UI_OT_reports_to_text */
#include "DNA_object_types.h" /* for OB_DATA_SUPPORT_ID */
@@ -65,6 +66,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_object.h"
#include "ED_paint.h"
/* only for UI_OT_editsource */
@@ -802,6 +804,153 @@ static void UI_OT_copy_to_selected_button(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "all", true, "All", "Copy to selected all elements of the array");
}
+
+/* -------------------------------------------------------------------- */
+/** \name Jump to Target Operator
+ * \{ */
+
+/** Jump to the object or bone referenced by the pointer, or check if it is possible. */
+static bool jump_to_target_ptr(bContext *C, PointerRNA ptr, const bool poll)
+{
+ if (RNA_pointer_is_null(&ptr)) {
+ return false;
+ }
+
+ /* Verify pointer type. */
+ char bone_name[MAXBONENAME];
+ const StructRNA *target_type = NULL;
+
+ if (ELEM(ptr.type, &RNA_EditBone, &RNA_PoseBone, &RNA_Bone)) {
+ RNA_string_get(&ptr, "name", bone_name);
+ if (bone_name[0] != '\0') {
+ target_type = &RNA_Bone;
+ }
+ }
+ else if (RNA_struct_is_a(ptr.type, &RNA_Object)) {
+ target_type = &RNA_Object;
+ }
+
+ if (target_type == NULL) {
+ return false;
+ }
+
+ /* Find the containing Object. */
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = NULL;
+ const short id_type = GS(((ID *)ptr.id.data)->name);
+ if (id_type == ID_OB) {
+ base = BKE_view_layer_base_find(view_layer, ptr.id.data);
+ }
+ else if (OB_DATA_SUPPORT_ID(id_type)) {
+ base = ED_object_find_first_by_data_id(view_layer, ptr.id.data);
+ }
+
+ bool ok = false;
+ if ((base == NULL) ||
+ ((target_type == &RNA_Bone) && (base->object->type != OB_ARMATURE)))
+ {
+ /* pass */
+ }
+ else if (poll) {
+ ok = true;
+ }
+ else {
+ /* Make optional. */
+ const bool reveal_hidden = true;
+ /* Select and activate the target. */
+ if (target_type == &RNA_Bone) {
+ ok = ED_object_jump_to_bone(C, base->object, bone_name, reveal_hidden);
+ }
+ else if (target_type == &RNA_Object) {
+ ok = ED_object_jump_to_object(C, base->object, reveal_hidden);
+ }
+ else {
+ BLI_assert(0);
+ }
+ }
+ return ok;
+}
+
+/**
+ * Jump to the object or bone referred to by the current UI field value.
+ *
+ * \note quite heavy for a poll callback, but the operator is only
+ * used as a right click menu item for certain UI field types, and
+ * this will fail quickly if the context is completely unsuitable.
+ */
+static bool jump_to_target_button(bContext *C, bool poll)
+{
+ PointerRNA ptr, target_ptr;
+ PropertyRNA *prop;
+ int index;
+
+ UI_context_active_but_prop_get(C, &ptr, &prop, &index);
+
+ /* If there is a valid property... */
+ if (ptr.data && prop) {
+ const PropertyType type = RNA_property_type(prop);
+
+ /* For pointer properties, use their value directly. */
+ if (type == PROP_POINTER) {
+ target_ptr = RNA_property_pointer_get(&ptr, prop);
+
+ return jump_to_target_ptr(C, target_ptr, poll);
+ }
+ /* For string properties with prop_search, look up the search collection item. */
+ else if (type == PROP_STRING) {
+ const uiBut *but = UI_context_active_but_get(C);
+
+ if (but->type == UI_BTYPE_SEARCH_MENU && but->search_func == ui_rna_collection_search_cb) {
+ uiRNACollectionSearch *coll_search = but->search_arg;
+
+ char str_buf[MAXBONENAME];
+ char *str_ptr = RNA_property_string_get_alloc(&ptr, prop, str_buf, sizeof(str_buf), NULL);
+
+ int found = RNA_property_collection_lookup_string(&coll_search->search_ptr, coll_search->search_prop, str_ptr, &target_ptr);
+
+ if (str_ptr != str_buf) {
+ MEM_freeN(str_ptr);
+ }
+
+ if (found) {
+ return jump_to_target_ptr(C, target_ptr, poll);
+ }
+ }
+ }
+ }
+
+ return false;
+}
+
+static bool jump_to_target_button_poll(bContext *C)
+{
+ return jump_to_target_button(C, true);
+}
+
+static int jump_to_target_button_exec(bContext *C, wmOperator *UNUSED(op))
+{
+ bool success = jump_to_target_button(C, false);
+
+ return (success) ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+}
+
+static void UI_OT_jump_to_target_button(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Jump To Target";
+ ot->idname = "UI_OT_jump_to_target_button";
+ ot->description = "Switch to the target object or bone";
+
+ /* callbacks */
+ ot->poll = jump_to_target_button_poll;
+ ot->exec = jump_to_target_button_exec;
+
+ /* flags */
+ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO;
+}
+
+/** \} */
+
/* Reports to Textblock Operator ------------------------ */
/* FIXME: this is just a temporary operator so that we can see all the reports somewhere
@@ -1410,6 +1559,7 @@ void ED_operatortypes_ui(void)
WM_operatortype_append(UI_OT_override_type_set_button);
WM_operatortype_append(UI_OT_override_remove_button);
WM_operatortype_append(UI_OT_copy_to_selected_button);
+ WM_operatortype_append(UI_OT_jump_to_target_button);
WM_operatortype_append(UI_OT_reports_to_textblock); /* XXX: temp? */
WM_operatortype_append(UI_OT_drop_color);
#ifdef WITH_PYTHON
diff --git a/source/blender/editors/interface/interface_panel.c b/source/blender/editors/interface/interface_panel.c
index 4662d76a5e1..3197c4a2cbf 100644
--- a/source/blender/editors/interface/interface_panel.c
+++ b/source/blender/editors/interface/interface_panel.c
@@ -1993,12 +1993,6 @@ void UI_panel_category_draw_all(ARegion *ar, const char *category_id_active)
const bool is_active = STREQ(category_id, category_id_active);
-#ifdef DEBUG
- if (STREQ(category_id, PNL_CATEGORY_FALLBACK)) {
- printf("WARNING: Panel has no 'bl_category', script needs updating!\n");
- }
-#endif
-
GPU_blend(true);
#ifdef USE_FLAT_INACTIVE
diff --git a/source/blender/editors/interface/interface_region_color_picker.c b/source/blender/editors/interface/interface_region_color_picker.c
index afa3486cf6c..a99bcb2b73c 100644
--- a/source/blender/editors/interface/interface_region_color_picker.c
+++ b/source/blender/editors/interface/interface_region_color_picker.c
@@ -549,8 +549,8 @@ static void ui_block_colorpicker(
UI_but_func_set(bt, ui_colorpicker_hex_rna_cb, bt, hexcol);
bt->custom_data = cpicker;
uiDefBut(
- block, UI_BTYPE_LABEL, 0, IFACE_("(Gamma Corrected)"), 0, yco - UI_UNIT_Y,
- butwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
+ block, UI_BTYPE_LABEL, 0, IFACE_("(Gamma Corrected)"), 0, yco - UI_UNIT_Y,
+ butwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, 0, "");
ui_rgb_to_color_picker_v(rgb_gamma, hsv);
diff --git a/source/blender/editors/interface/interface_region_menu_pie.c b/source/blender/editors/interface/interface_region_menu_pie.c
index 6887235f5db..44effc8c097 100644
--- a/source/blender/editors/interface/interface_region_menu_pie.c
+++ b/source/blender/editors/interface/interface_region_menu_pie.c
@@ -105,7 +105,7 @@ static float ui_pie_menu_title_width(const char *name, int icon)
{
const uiFontStyle *fstyle = UI_FSTYLE_WIDGET;
return (UI_fontstyle_string_width(fstyle, name) +
- (UI_UNIT_X * (1.50f + (icon ? 0.25f : 0.0f))));
+ (UI_UNIT_X * (1.50f + (icon ? 0.25f : 0.0f))));
}
uiPieMenu *UI_pie_menu_begin(struct bContext *C, const char *title, int icon, const wmEvent *event)
@@ -152,15 +152,9 @@ uiPieMenu *UI_pie_menu_begin(struct bContext *C, const char *title, int icon, co
pie->layout = UI_block_layout(pie->block_radial, UI_LAYOUT_VERTICAL, UI_LAYOUT_PIEMENU, 0, 0, 200, 0, 0, style);
- /* Open from where we started dragging. */
- if (event->val == KM_CLICK_DRAG) {
- pie->mx = event->prevclickx;
- pie->my = event->prevclicky;
- }
- else {
- pie->mx = event->x;
- pie->my = event->y;
- }
+ /* Note event->x/y is where we started dragging in case of KM_CLICK_DRAG. */
+ pie->mx = event->x;
+ pie->my = event->y;
/* create title button */
if (title[0]) {
diff --git a/source/blender/editors/interface/interface_region_tooltip.c b/source/blender/editors/interface/interface_region_tooltip.c
index 6bdcdf57f47..b8cbf7950b7 100644
--- a/source/blender/editors/interface/interface_region_tooltip.c
+++ b/source/blender/editors/interface/interface_region_tooltip.c
@@ -500,10 +500,10 @@ static uiTooltipData *ui_tooltip_data_from_tool(bContext *C, uiBut *but, bool is
{
/* Generate keymap in order to inspect it.
* Note, we could make a utility to avoid the keymap generation part of this. */
- const char *expr_imports[] = {"bpy", "bl_ui", NULL};
+ const char *expr_imports[] = {"bpy", "bl_keymap_utils", "bl_keymap_utils.keymap_from_toolbar", NULL};
const char *expr = (
"getattr("
- "bl_ui.space_toolsystem_common.keymap_from_context("
+ "bl_keymap_utils.keymap_from_toolbar.generate("
"bpy.context, "
"bpy.context.space_data.type), "
"'as_pointer', lambda: 0)()");
@@ -897,22 +897,20 @@ static uiTooltipData *ui_tooltip_data_from_gizmo(bContext *C, wmGizmo *gz)
/* Shortcut */
{
- bool found = false;
IDProperty *prop = gzop->ptr.data;
char buf[128];
if (WM_key_event_operator_string(
C, gzop->type->idname, WM_OP_INVOKE_DEFAULT, prop, true,
buf, ARRAY_SIZE(buf)))
{
- found = true;
+ uiTooltipField *field = text_field_add(
+ data, &(uiTooltipFormat){
+ .style = UI_TIP_STYLE_NORMAL,
+ .color_id = UI_TIP_LC_VALUE,
+ .is_pad = true,
+ });
+ field->text = BLI_sprintfN(TIP_("Shortcut: %s"), buf);
}
- uiTooltipField *field = text_field_add(
- data, &(uiTooltipFormat){
- .style = UI_TIP_STYLE_NORMAL,
- .color_id = UI_TIP_LC_VALUE,
- .is_pad = true,
- });
- field->text = BLI_sprintfN(TIP_("Shortcut: %s"), found ? buf : "None");
}
}
}
diff --git a/source/blender/editors/interface/interface_style.c b/source/blender/editors/interface/interface_style.c
index 738da4184b7..d4f6933693e 100644
--- a/source/blender/editors/interface/interface_style.c
+++ b/source/blender/editors/interface/interface_style.c
@@ -318,7 +318,8 @@ void UI_fontstyle_draw_simple_backdrop(
float color[4] = { col_bg[0], col_bg[1], col_bg[2], 0.5f };
UI_draw_roundbox_corner_set(UI_CNR_ALL);
- UI_draw_roundbox_aa(true,
+ UI_draw_roundbox_aa(
+ true,
x - margin,
(y + decent) - margin,
x + width + margin,
@@ -529,10 +530,11 @@ void uiStyleInit(void)
/* Set default flags based on UI preferences (not render fonts) */
{
- int flag_disable = BLF_MONOCHROME |
- BLF_HINTING_NONE |
- BLF_HINTING_SLIGHT |
- BLF_HINTING_FULL;
+ int flag_disable = (
+ BLF_MONOCHROME |
+ BLF_HINTING_NONE |
+ BLF_HINTING_SLIGHT |
+ BLF_HINTING_FULL);
int flag_enable = 0;
if (U.text_render & USER_TEXT_HINTING_NONE) {
diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c
index 5bdf8f45832..5b9f9b1faf3 100644
--- a/source/blender/editors/interface/interface_templates.c
+++ b/source/blender/editors/interface/interface_templates.c
@@ -993,14 +993,14 @@ void uiTemplateIDPreview(
}
void uiTemplateGpencilColorPreview(
- uiLayout *layout, bContext *C, PointerRNA *ptr, const char *propname,
- int rows, int cols, float scale, int filter)
+ uiLayout *layout, bContext *C, PointerRNA *ptr, const char *propname,
+ int rows, int cols, float scale, int filter)
{
ui_template_id(
- layout, C, ptr, propname,
- NULL, NULL, NULL,
- UI_ID_BROWSE | UI_ID_PREVIEWS | UI_ID_DELETE,
- rows, cols, filter, false, scale < 0.5f ? 0.5f : scale, false, false);
+ layout, C, ptr, propname,
+ NULL, NULL, NULL,
+ UI_ID_BROWSE | UI_ID_PREVIEWS | UI_ID_DELETE,
+ rows, cols, filter, false, scale < 0.5f ? 0.5f : scale, false, false);
}
/**
@@ -1355,7 +1355,7 @@ static int modifier_is_simulation(ModifierData *md)
{
/* Physic Tab */
if (ELEM(md->type, eModifierType_Cloth, eModifierType_Collision, eModifierType_Fluidsim, eModifierType_Smoke,
- eModifierType_Softbody, eModifierType_Surface, eModifierType_DynamicPaint))
+ eModifierType_Softbody, eModifierType_Surface, eModifierType_DynamicPaint))
{
return 1;
}
@@ -1533,7 +1533,7 @@ static uiLayout *draw_modifier(
UI_block_lock_set(block, ob && ID_IS_LINKED(ob), ERROR_LIBDATA_MESSAGE);
if (!ELEM(md->type, eModifierType_Fluidsim, eModifierType_Softbody, eModifierType_ParticleSystem,
- eModifierType_Cloth, eModifierType_Smoke))
+ eModifierType_Cloth, eModifierType_Smoke))
{
uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy"), ICON_NONE,
"OBJECT_OT_modifier_copy");
@@ -1636,8 +1636,8 @@ static uiLayout *gpencil_draw_modifier(
/* mode enabling buttons */
UI_block_align_begin(block);
- uiItemR(row, &ptr, "show_render", 0, "", ICON_NONE);
- uiItemR(row, &ptr, "show_viewport", 0, "", ICON_NONE);
+ uiItemR(row, &ptr, "show_render", 0, "", ICON_NONE);
+ uiItemR(row, &ptr, "show_viewport", 0, "", ICON_NONE);
if (mti->flags & eGpencilModifierTypeFlag_SupportsEditmode) {
sub = uiLayoutRow(row, true);
@@ -1675,7 +1675,7 @@ static uiLayout *gpencil_draw_modifier(
uiItemEnumO(sub, "OBJECT_OT_gpencil_modifier_apply", CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Apply"),
0, "apply_as", MODIFIER_APPLY_DATA);
uiItemO(row, CTX_IFACE_(BLT_I18NCONTEXT_OPERATOR_DEFAULT, "Copy"), ICON_NONE,
- "OBJECT_OT_gpencil_modifier_copy");
+ "OBJECT_OT_gpencil_modifier_copy");
/* result is the layout block inside the box, that we return so that modifier settings can be drawn */
result = uiLayoutColumn(box, false);
@@ -1726,8 +1726,9 @@ uiLayout *uiTemplateGpencilModifier(uiLayout *layout, bContext *UNUSED(C), Point
/************************ Shader FX Template *************************/
-static uiLayout *gpencil_draw_shaderfx(uiLayout *layout, Object *ob,
- ShaderFxData *md)
+static uiLayout *gpencil_draw_shaderfx(
+ uiLayout *layout, Object *ob,
+ ShaderFxData *md)
{
const ShaderFxTypeInfo *mti = BKE_shaderfxType_getInfo(md->type);
PointerRNA ptr;
@@ -2295,6 +2296,110 @@ static void rna_update_cb(bContext *C, void *arg_cb, void *UNUSED(arg))
RNA_property_update(C, &cb->ptr, cb->prop);
}
+enum {
+ CB_FUNC_FLIP,
+ CB_FUNC_DISTRIBUTE_LR,
+ CB_FUNC_DISTRIBUTE_EVENLY,
+ CB_FUNC_RESET,
+};
+
+static void colorband_flip_cb(bContext *C, ColorBand *coba)
+{
+ CBData data_tmp[MAXCOLORBAND];
+
+ int a;
+
+ for (a = 0; a < coba->tot; a++) {
+ data_tmp[a] = coba->data[coba->tot - (a + 1)];
+ }
+ for (a = 0; a < coba->tot; a++) {
+ data_tmp[a].pos = 1.0f - data_tmp[a].pos;
+ coba->data[a] = data_tmp[a];
+ }
+
+ /* may as well flip the cur*/
+ coba->cur = coba->tot - (coba->cur + 1);
+
+ ED_undo_push(C, "Flip Color Ramp");
+}
+
+static void colorband_distribute_cb(bContext *C, ColorBand *coba, bool evenly)
+{
+ if (coba->tot > 1) {
+ int a;
+ int tot = evenly ? coba->tot - 1 : coba->tot;
+ float gap = 1.0f / tot;
+ float pos = 0.0f;
+ for (a = 0; a < coba->tot; a++) {
+ coba->data[a].pos = pos;
+ pos += gap;
+ }
+ ED_undo_push(C, evenly ? "Distribute Stops Evenly" : "Distribute Stops from Left");
+ }
+}
+
+static void colorband_tools_dofunc(bContext *C, void *coba_v, int event)
+{
+ ColorBand *coba = coba_v;
+
+ switch (event) {
+ case CB_FUNC_FLIP:
+ colorband_flip_cb(C, coba);
+ break;
+ case CB_FUNC_DISTRIBUTE_LR:
+ colorband_distribute_cb(C, coba, false);
+ break;
+ case CB_FUNC_DISTRIBUTE_EVENLY:
+ colorband_distribute_cb(C, coba, true);
+ break;
+ case CB_FUNC_RESET:
+ BKE_colorband_init(coba, true);
+ ED_undo_push(C, "Reset Color Ramp");
+ break;
+ }
+ ED_region_tag_redraw(CTX_wm_region(C));
+}
+
+static uiBlock *colorband_tools_func(
+ bContext *C, ARegion *ar, void *coba_v)
+{
+ ColorBand *coba = coba_v;
+ uiBlock *block;
+ short yco = 0, menuwidth = 10 * UI_UNIT_X;
+
+ block = UI_block_begin(C, ar, __func__, UI_EMBOSS);
+ UI_block_func_butmenu_set(block, colorband_tools_dofunc, coba);
+
+ {
+ uiBut *but;
+ uiDefIconTextBut(
+ block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1,
+ IFACE_("Flip Color Ramp"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y,
+ NULL, 0.0, 0.0, 0, CB_FUNC_FLIP, "");
+ uiDefIconTextBut(
+ block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1,
+ IFACE_("Distribute Stops from Left"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y,
+ NULL, 0.0, 0.0, 0, CB_FUNC_DISTRIBUTE_LR, "");
+ uiDefIconTextBut(
+ block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1,
+ IFACE_("Distribute Stops Evenly"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y,
+ NULL, 0.0, 0.0, 0, CB_FUNC_DISTRIBUTE_EVENLY, "");
+ but = uiDefIconTextButO(
+ block, UI_BTYPE_BUT_MENU, "UI_OT_eyedropper_colorband", WM_OP_INVOKE_DEFAULT, ICON_EYEDROPPER,
+ IFACE_("Eyedropper"), 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y,
+ "");
+ but->custom_data = coba;
+ uiDefIconTextBut(
+ block, UI_BTYPE_BUT_MENU, 1, ICON_BLANK1, IFACE_("Reset Color Ramp"),
+ 0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, CB_FUNC_RESET, "");
+ }
+
+ UI_block_direction_set(block, UI_DIR_DOWN);
+ UI_block_bounds_set_text(block, 3.0f * UI_UNIT_X);
+
+ return block;
+}
+
static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v)
{
ColorBand *coba = coba_v;
@@ -2307,7 +2412,7 @@ static void colorband_add_cb(bContext *C, void *cb_v, void *coba_v)
if (BKE_colorband_element_add(coba, pos)) {
rna_update_cb(C, cb_v, NULL);
- ED_undo_push(C, "Add colorband");
+ ED_undo_push(C, "Add Color Ramp Stop");
}
}
@@ -2316,34 +2421,11 @@ static void colorband_del_cb(bContext *C, void *cb_v, void *coba_v)
ColorBand *coba = coba_v;
if (BKE_colorband_element_remove(coba, coba->cur)) {
- ED_undo_push(C, "Delete colorband");
+ ED_undo_push(C, "Delete Color Ramp Stop");
rna_update_cb(C, cb_v, NULL);
}
}
-static void colorband_flip_cb(bContext *C, void *cb_v, void *coba_v)
-{
- CBData data_tmp[MAXCOLORBAND];
-
- ColorBand *coba = coba_v;
- int a;
-
- for (a = 0; a < coba->tot; a++) {
- data_tmp[a] = coba->data[coba->tot - (a + 1)];
- }
- for (a = 0; a < coba->tot; a++) {
- data_tmp[a].pos = 1.0f - data_tmp[a].pos;
- coba->data[a] = data_tmp[a];
- }
-
- /* may as well flip the cur*/
- coba->cur = coba->tot - (coba->cur + 1);
-
- ED_undo_push(C, "Flip colorband");
-
- rna_update_cb(C, cb_v, NULL);
-}
-
static void colorband_update_cb(bContext *UNUSED(C), void *bt_v, void *coba_v)
{
uiBut *bt = bt_v;
@@ -2376,8 +2458,7 @@ static void colorband_buttons_layout(
bt = uiDefIconTextBut(
block, UI_BTYPE_BUT, 0, ICON_ADD, "", 0, 0, 2.0f * unit, UI_UNIT_Y, NULL,
- 0, 0, 0, 0, TIP_("Add a new color stop to the colorband"));
-
+ 0, 0, 0, 0, TIP_("Add a new color stop to the color ramp"));
UI_but_funcN_set(bt, colorband_add_cb, MEM_dupallocN(cb), coba);
bt = uiDefIconTextBut(
@@ -2385,14 +2466,10 @@ static void colorband_buttons_layout(
NULL, 0, 0, 0, 0, TIP_("Delete the active position"));
UI_but_funcN_set(bt, colorband_del_cb, MEM_dupallocN(cb), coba);
- bt = uiDefIconTextBut(
- block, UI_BTYPE_BUT, 0, ICON_ARROW_LEFTRIGHT, "", xs + 4.0f * unit, ys + UI_UNIT_Y, 2.0f * unit, UI_UNIT_Y,
- NULL, 0, 0, 0, 0, TIP_("Flip the color ramp"));
- UI_but_funcN_set(bt, colorband_flip_cb, MEM_dupallocN(cb), coba);
-
- bt = uiDefIconButO(block, UI_BTYPE_BUT, "UI_OT_eyedropper_colorband", WM_OP_INVOKE_DEFAULT, ICON_EYEDROPPER, xs + 6.0f * unit, ys + UI_UNIT_Y, UI_UNIT_X, UI_UNIT_Y, NULL);
- bt->custom_data = coba;
- bt->func_argN = MEM_dupallocN(cb);
+ bt = uiDefIconBlockBut(
+ block, colorband_tools_func, coba, 0, ICON_DOWNARROW_HLT,
+ xs + 4.0f * unit, ys + UI_UNIT_Y, 2.0f * unit, UI_UNIT_Y, TIP_("Tools"));
+ UI_but_funcN_set(bt, rna_update_cb, MEM_dupallocN(cb), coba);
UI_block_align_end(block);
UI_block_emboss_set(block, UI_EMBOSS);
@@ -2921,8 +2998,8 @@ static uiBlock *curvemap_tools_func(
0, yco -= UI_UNIT_Y, menuwidth, UI_UNIT_Y, NULL, 0.0, 0.0, 0, reset_mode, "");
}
- UI_block_direction_set(block, UI_DIR_RIGHT);
- UI_block_bounds_set_text(block, 50);
+ UI_block_direction_set(block, UI_DIR_DOWN);
+ UI_block_bounds_set_text(block, 3.0f * UI_UNIT_X);
return block;
}
@@ -3507,7 +3584,7 @@ static void uilist_draw_filter_default(struct uiList *ui_list, struct bContext *
subrow = uiLayoutRow(row, true);
uiItemR(subrow, &listptr, "use_filter_sort_alpha", UI_ITEM_R_TOGGLE | UI_ITEM_R_ICON_ONLY, "", ICON_NONE);
uiItemR(subrow, &listptr, "use_filter_sort_reverse", UI_ITEM_R_TOGGLE | UI_ITEM_R_ICON_ONLY, "",
- (ui_list->filter_sort_flag & UILST_FLT_SORT_REVERSE) ? ICON_SORT_DESC : ICON_SORT_ASC);
+ (ui_list->filter_sort_flag & UILST_FLT_SORT_REVERSE) ? ICON_SORT_DESC : ICON_SORT_ASC);
}
}
@@ -4224,8 +4301,8 @@ static void operator_search_cb(const bContext *C, void *UNUSED(arg), const char
/* check for hotkey */
if (len < sizeof(name) - 6) {
if (WM_key_event_operator_string(
- C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, true,
- &name[len + 1], sizeof(name) - len - 1))
+ C, ot->idname, WM_OP_EXEC_DEFAULT, NULL, true,
+ &name[len + 1], sizeof(name) - len - 1))
{
name[len] = UI_SEP_CHAR;
}
diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c
index ea588c703c6..0ffc40bdf9d 100644
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@ -4566,8 +4566,8 @@ void ui_draw_pie_center(uiBlock *block)
float *pie_dir = block->pie_data.pie_dir;
- float pie_radius_internal = U.pixelsize * U.pie_menu_threshold;
- float pie_radius_external = U.pixelsize * (U.pie_menu_threshold + 7.0f);
+ float pie_radius_internal = U.dpi_fac * U.pie_menu_threshold;
+ float pie_radius_external = U.dpi_fac * (U.pie_menu_threshold + 7.0f);
int subd = 40;
@@ -4609,8 +4609,8 @@ void ui_draw_pie_center(uiBlock *block)
immUnbindProgram();
if (U.pie_menu_confirm > 0 && !(block->pie_data.flags & (UI_PIE_INVALID_DIR | UI_PIE_CLICK_STYLE))) {
- float pie_confirm_radius = U.pixelsize * (pie_radius_internal + U.pie_menu_confirm);
- float pie_confirm_external = U.pixelsize * (pie_radius_internal + U.pie_menu_confirm + 7.0f);
+ float pie_confirm_radius = U.dpi_fac * (pie_radius_internal + U.pie_menu_confirm);
+ float pie_confirm_external = U.dpi_fac * (pie_radius_internal + U.pie_menu_confirm + 7.0f);
const char col[4] = {btheme->tui.wcol_pie_menu.text_sel[0],
btheme->tui.wcol_pie_menu.text_sel[1],
diff --git a/source/blender/editors/mesh/CMakeLists.txt b/source/blender/editors/mesh/CMakeLists.txt
index 5e014d3ef25..4cefbf21c24 100644
--- a/source/blender/editors/mesh/CMakeLists.txt
+++ b/source/blender/editors/mesh/CMakeLists.txt
@@ -48,7 +48,6 @@ set(SRC
editmesh_bevel.c
editmesh_bisect.c
editmesh_extrude.c
- editmesh_extrude_gizmo.c
editmesh_extrude_screw.c
editmesh_extrude_spin.c
editmesh_extrude_spin_gizmo.c
diff --git a/source/blender/editors/mesh/editmesh_extrude.c b/source/blender/editors/mesh/editmesh_extrude.c
index 714ff10f6ca..a25b296830a 100644
--- a/source/blender/editors/mesh/editmesh_extrude.c
+++ b/source/blender/editors/mesh/editmesh_extrude.c
@@ -54,8 +54,6 @@
#include "mesh_intern.h" /* own include */
-#define USE_GIZMO
-
/* -------------------------------------------------------------------- */
/** \name Extrude Internal Utilities
* \{ */
@@ -502,10 +500,6 @@ void MESH_OT_extrude_context(wmOperatorType *ot)
RNA_def_boolean(ot->srna, "use_normal_flip", false, "Flip Normals", "");
Transform_Properties(ot, P_NO_DEFAULTS | P_MIRROR_DUMMY);
-
-#ifdef USE_GIZMO
- WM_gizmogrouptype_append(MESH_GGT_extrude);
-#endif
}
/** \} */
diff --git a/source/blender/editors/mesh/editmesh_polybuild.c b/source/blender/editors/mesh/editmesh_polybuild.c
index 882ee3092b4..c175102511a 100644
--- a/source/blender/editors/mesh/editmesh_polybuild.c
+++ b/source/blender/editors/mesh/editmesh_polybuild.c
@@ -426,7 +426,10 @@ static int edbm_polybuild_dissolve_at_cursor_invoke(
BMEditMesh *em = vc.em;
BMesh *bm = em->bm;
- if (ele_act->head.htype == BM_EDGE) {
+ if (ele_act == NULL) {
+ /* pass */
+ }
+ else if (ele_act->head.htype == BM_EDGE) {
BMEdge *e_act = (BMEdge *)ele_act;
BMLoop *l_a, *l_b;
if (BM_edge_loop_pair(e_act, &l_a, &l_b)) {
diff --git a/source/blender/editors/mesh/editmesh_preselect_edgering.c b/source/blender/editors/mesh/editmesh_preselect_edgering.c
index ce62998a133..3b31b9c15f6 100644
--- a/source/blender/editors/mesh/editmesh_preselect_edgering.c
+++ b/source/blender/editors/mesh/editmesh_preselect_edgering.c
@@ -35,6 +35,8 @@
#include "ED_mesh.h"
+#include "UI_resources.h"
+
/* -------------------------------------------------------------------- */
/** \name Mesh Edge Ring Pre-Select
* Public API:
@@ -174,7 +176,7 @@ void EDBM_preselect_edgering_draw(
uint pos = GPU_vertformat_attr_add(immVertexFormat(), "pos", GPU_COMP_F32, 3, GPU_FETCH_FLOAT);
immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
- immUniformColor3ub(255, 0, 255);
+ immUniformThemeColor3(TH_GIZMO_PRIMARY);
if (psel->edges_len > 0) {
immBegin(GPU_PRIM_LINES, psel->edges_len * 2);
diff --git a/source/blender/editors/mesh/editmesh_tools.c b/source/blender/editors/mesh/editmesh_tools.c
index 4a2787e92e2..72cde69b0bc 100644
--- a/source/blender/editors/mesh/editmesh_tools.c
+++ b/source/blender/editors/mesh/editmesh_tools.c
@@ -1116,6 +1116,11 @@ static bool edbm_connect_vert_pair(BMEditMesh *em, wmOperator *op)
BMVert **verts;
bool checks_succeded = true;
+ /* sanity check */
+ if (verts_len < 2) {
+ return false;
+ }
+
verts = MEM_mallocN(sizeof(*verts) * verts_len, __func__);
{
BMIter iter;
diff --git a/source/blender/editors/mesh/mesh_intern.h b/source/blender/editors/mesh/mesh_intern.h
index 25a477546cc..9c70fdceb8d 100644
--- a/source/blender/editors/mesh/mesh_intern.h
+++ b/source/blender/editors/mesh/mesh_intern.h
@@ -110,9 +110,6 @@ void MESH_OT_extrude_edges_indiv(struct wmOperatorType *ot);
void MESH_OT_extrude_faces_indiv(struct wmOperatorType *ot);
void MESH_OT_dupli_extrude_cursor(struct wmOperatorType *ot);
-/* *** editmesh_extrude_gizmo.c *** */
-void MESH_GGT_extrude(struct wmGizmoGroupType *gzgt);
-
/* *** editmesh_extrude_screw.c *** */
void MESH_OT_screw(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 0a16a62d788..c4eb0aad337 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -79,6 +79,7 @@
#include "BKE_library.h"
#include "BKE_library_query.h"
#include "BKE_library_remap.h"
+#include "BKE_lightprobe.h"
#include "BKE_main.h"
#include "BKE_material.h"
#include "BKE_mball.h"
@@ -1304,7 +1305,7 @@ static int object_delete_exec(bContext *C, wmOperator *op)
wmWindowManager *wm = CTX_wm_manager(C);
wmWindow *win;
const bool use_global = RNA_boolean_get(op->ptr, "use_global");
- bool changed = false;
+ uint changed_count = 0;
if (CTX_data_edit_object(C))
return OPERATOR_CANCELLED;
@@ -1337,7 +1338,7 @@ static int object_delete_exec(bContext *C, wmOperator *op)
if (use_global && ob->id.lib == NULL) {
/* We want to nuke the object, let's nuke it the easy way (not for linked data though)... */
BKE_libblock_delete(bmain, &ob->id);
- changed = true;
+ changed_count += 1;
continue;
}
@@ -1356,7 +1357,7 @@ static int object_delete_exec(bContext *C, wmOperator *op)
/* remove from current scene only */
ED_object_base_free_and_unlink(bmain, scene, ob);
- changed = true;
+ changed_count += 1;
if (use_global) {
Scene *scene_iter;
@@ -1376,8 +1377,11 @@ static int object_delete_exec(bContext *C, wmOperator *op)
}
CTX_DATA_END;
- if (!changed)
+ BKE_reportf(op->reports, RPT_INFO, "Deleted %u object(s)", changed_count);
+
+ if (changed_count == 0) {
return OPERATOR_CANCELLED;
+ }
/* delete has to handle all open scenes */
BKE_main_id_tag_listbase(&bmain->scene, LIB_TAG_DOIT, true);
@@ -1406,7 +1410,7 @@ void OBJECT_OT_delete(wmOperatorType *ot)
ot->idname = "OBJECT_OT_delete";
/* api callbacks */
- ot->invoke = WM_operator_confirm;
+ ot->invoke = WM_operator_confirm_or_exec;
ot->exec = object_delete_exec;
ot->poll = ED_operator_objectmode;
@@ -1416,6 +1420,7 @@ void OBJECT_OT_delete(wmOperatorType *ot)
PropertyRNA *prop;
prop = RNA_def_boolean(ot->srna, "use_global", 0, "Delete Globally", "Remove object from all scenes");
RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
+ WM_operator_properties_confirm_or_exec(ot);
}
/**************************** Copy Utilities ******************************/
@@ -2343,6 +2348,16 @@ static Base *object_add_duplicate_internal(Main *bmain, Scene *scene, ViewLayer
id_us_min(id);
}
break;
+ case OB_LIGHTPROBE:
+ if (dupflag != 0) {
+ ID_NEW_REMAP_US2(obn->data)
+ else {
+ obn->data = ID_NEW_SET(obn->data, BKE_lightprobe_copy(bmain, obn->data));
+ didit = 1;
+ }
+ id_us_min(id);
+ }
+ break;
case OB_SPEAKER:
if (dupflag != 0) {
ID_NEW_REMAP_US2(obn->data)
diff --git a/source/blender/editors/object/object_select.c b/source/blender/editors/object/object_select.c
index a50c5a14e06..1e69916d865 100644
--- a/source/blender/editors/object/object_select.c
+++ b/source/blender/editors/object/object_select.c
@@ -44,6 +44,7 @@
#include "DNA_gpencil_types.h"
#include "BLI_math.h"
+#include "BLI_math_bits.h"
#include "BLI_listbase.h"
#include "BLI_rand.h"
#include "BLI_string_utils.h"
@@ -51,6 +52,8 @@
#include "BLT_translation.h"
+#include "BKE_action.h"
+#include "BKE_armature.h"
#include "BKE_collection.h"
#include "BKE_context.h"
#include "BKE_deform.h"
@@ -70,6 +73,7 @@
#include "WM_api.h"
#include "WM_types.h"
+#include "ED_armature.h"
#include "ED_object.h"
#include "ED_screen.h"
#include "ED_select_utils.h"
@@ -134,6 +138,235 @@ void ED_object_base_activate(bContext *C, Base *base)
DEG_id_tag_update(&CTX_data_scene(C)->id, DEG_TAG_SELECT_UPDATE);
}
+bool ED_object_base_deselect_all_ex(ViewLayer *view_layer, int action, bool *r_any_visible)
+{
+ if (action == SEL_TOGGLE) {
+ action = SEL_SELECT;
+ FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) {
+ if ((base->flag & BASE_SELECTED) != 0) {
+ action = SEL_DESELECT;
+ break;
+ }
+ }
+ FOREACH_VISIBLE_BASE_END;
+ }
+
+ bool any_visible = false;
+ bool changed = false;
+ FOREACH_VISIBLE_BASE_BEGIN(view_layer, base) {
+ switch (action) {
+ case SEL_SELECT:
+ if ((base->flag & BASE_SELECTED) == 0) {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ break;
+ case SEL_DESELECT:
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ED_object_base_select(base, BA_DESELECT);
+ changed = true;
+ }
+ break;
+ case SEL_INVERT:
+ if ((base->flag & BASE_SELECTED) != 0) {
+ ED_object_base_select(base, BA_DESELECT);
+ changed = true;
+ }
+ else {
+ ED_object_base_select(base, BA_SELECT);
+ changed = true;
+ }
+ break;
+ }
+ any_visible = true;
+ }
+ FOREACH_VISIBLE_BASE_END;
+ if (r_any_visible) {
+ *r_any_visible = any_visible;
+ }
+ return changed;
+}
+
+
+bool ED_object_base_deselect_all(ViewLayer *view_layer, int action)
+{
+ return ED_object_base_deselect_all_ex(view_layer, action, NULL);
+}
+
+/********************** Jump To Object Utilities **********************/
+
+static int get_base_select_priority(Base *base)
+{
+ if (base->flag & BASE_VISIBLE) {
+ if (base->flag & BASE_SELECTABLE) {
+ return 3;
+ }
+ else {
+ return 2;
+ }
+ }
+ else {
+ return 1;
+ }
+}
+
+/**
+ * If id is not already an Object, try to find an object that uses it as data.
+ * Prefers active, then selected, then visible/selectable.
+ */
+Base *ED_object_find_first_by_data_id(ViewLayer *view_layer, ID *id)
+{
+ BLI_assert(OB_DATA_SUPPORT_ID(GS(id->name)));
+
+ /* Try active object. */
+ Base *basact = view_layer->basact;
+
+ if (basact && basact->object && basact->object->data == id) {
+ return basact;
+ }
+
+ /* Try all objects. */
+ Base *base_best = NULL;
+ int priority_best = 0;
+
+ for (Base *base = view_layer->object_bases.first; base; base = base->next) {
+ if (base->object && base->object->data == id) {
+ if (base->flag & BASE_SELECTED) {
+ return base;
+ }
+ else {
+ int priority_test = get_base_select_priority(base);
+
+ if (priority_test > priority_best) {
+ priority_best = priority_test;
+ base_best = base;
+ }
+ }
+ }
+ }
+
+ return base_best;
+}
+
+/**
+ * Select and make the target object active in the view layer.
+ * If already selected, selection isn't changed.
+ *
+ * \returns false if not found in current view layer
+ */
+bool ED_object_jump_to_object(
+ bContext *C, Object *ob, const bool UNUSED(reveal_hidden))
+{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
+ Base *base = BKE_view_layer_base_find(view_layer, ob);
+
+ if (base == NULL) {
+ return false;
+ }
+
+ /* TODO, use 'reveal_hidden', as is done with bones. */
+
+ if (view_layer->basact != base || !(base->flag & BASE_SELECTED)) {
+ /* Select if not selected. */
+ if (!(base->flag & BASE_SELECTED)) {
+ ED_object_base_deselect_all(view_layer, SEL_DESELECT);
+
+ if (base->flag & BASE_VISIBLE) {
+ ED_object_base_select(base, BA_SELECT);
+ }
+
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, CTX_data_scene(C));
+ }
+
+ /* Make active if not active. */
+ ED_object_base_activate(C, base);
+ }
+
+ return true;
+}
+
+/**
+ * Select and make the target object and bone active.
+ * Switches to Pose mode if in Object mode so the selection is visible.
+ * Unhides the target bone and bone layer if necessary.
+ *
+ * \returns false if object not in layer, bone not found, or other error
+ */
+bool ED_object_jump_to_bone(
+ bContext *C, Object *ob, const char *bone_name,
+ const bool reveal_hidden)
+{
+ /* Verify it's a valid armature object. */
+ if (ob == NULL || ob->type != OB_ARMATURE) {
+ return false;
+ }
+
+ bArmature *arm = ob->data;
+
+ /* Activate the armature object. */
+ if (!ED_object_jump_to_object(C, ob, reveal_hidden)) {
+ return false;
+ }
+
+ /* Switch to pose mode from object mode. */
+ if (!ELEM(ob->mode, OB_MODE_EDIT, OB_MODE_POSE)) {
+ ED_object_mode_set(C, OB_MODE_POSE);
+ }
+
+ if (ob->mode == OB_MODE_EDIT && arm->edbo != NULL) {
+ /* In Edit mode select and activate the target Edit-Bone. */
+ EditBone *ebone = ED_armature_ebone_find_name(arm->edbo, bone_name);
+ if (ebone != NULL) {
+ if (reveal_hidden) {
+ /* Unhide the bone. */
+ ebone->flag &= ~BONE_HIDDEN_A;
+
+ if ((arm->layer & ebone->layer) == 0) {
+ arm->layer |= 1U << bitscan_forward_uint(ebone->layer);
+ }
+ }
+
+ /* Select it. */
+ ED_armature_edit_deselect_all(ob);
+
+ if (EBONE_SELECTABLE(arm, ebone)) {
+ ED_armature_ebone_select_set(ebone, true);
+ ED_armature_edit_sync_selection(arm->edbo);
+ }
+
+ arm->act_edbone = ebone;
+
+ ED_pose_bone_select_tag_update(ob);
+ return true;
+ }
+ }
+ else if (ob->mode == OB_MODE_POSE && ob->pose != NULL) {
+ /* In Pose mode select and activate the target Bone/Pose-Channel. */
+ bPoseChannel *pchan = BKE_pose_channel_find_name(ob->pose, bone_name);
+ if (pchan != NULL) {
+ if (reveal_hidden) {
+ /* Unhide the bone. */
+ pchan->bone->flag &= ~BONE_HIDDEN_P;
+
+ if ((arm->layer & pchan->bone->layer) == 0) {
+ arm->layer |= 1U << bitscan_forward_uint(pchan->bone->layer);
+ }
+ }
+
+ /* Select it. */
+ ED_pose_deselect_all(ob, SEL_DESELECT, true);
+ ED_pose_bone_select(ob, pchan, true);
+
+ arm->act_bone = pchan->bone;
+
+ ED_pose_bone_select_tag_update(ob);
+ return true;
+ }
+ }
+
+ return false;
+}
+
/********************** Selection Operators **********************/
static bool objects_selectable_poll(bContext *C)
@@ -154,17 +387,14 @@ static bool objects_selectable_poll(bContext *C)
static int object_select_by_type_exec(bContext *C, wmOperator *op)
{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
short obtype, extend;
obtype = RNA_enum_get(op->ptr, "type");
extend = RNA_boolean_get(op->ptr, "extend");
if (extend == 0) {
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- ED_object_base_select(base, BA_DESELECT);
- }
- CTX_DATA_END;
+ ED_object_base_deselect_all(view_layer, SEL_DESELECT);
}
CTX_DATA_BEGIN (C, Base *, base, visible_bases)
@@ -387,11 +617,7 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
extend = RNA_boolean_get(op->ptr, "extend");
if (extend == 0) {
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- ED_object_base_select(base, BA_DESELECT);
- }
- CTX_DATA_END;
+ ED_object_base_deselect_all(view_layer, SEL_DESELECT);
}
ob = OBACT(view_layer);
@@ -760,12 +986,7 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
extend = RNA_boolean_get(op->ptr, "extend");
if (extend == 0) {
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- ED_object_base_select(base, BA_DESELECT);
- changed = true;
- }
- CTX_DATA_END;
+ changed = ED_object_base_deselect_all(view_layer, SEL_DESELECT);
}
ob = OBACT(view_layer);
@@ -849,49 +1070,27 @@ void OBJECT_OT_select_grouped(wmOperatorType *ot)
static int object_select_all_exec(bContext *C, wmOperator *op)
{
+ ViewLayer *view_layer = CTX_data_view_layer(C);
int action = RNA_enum_get(op->ptr, "action");
+ bool any_visible = false;
- /* passthrough if no objects are visible */
- if (CTX_DATA_COUNT(C, visible_bases) == 0) return OPERATOR_PASS_THROUGH;
+ bool changed = ED_object_base_deselect_all_ex(view_layer, action, &any_visible);
- if (action == SEL_TOGGLE) {
- action = SEL_SELECT;
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- if ((base->flag & BASE_SELECTED) != 0) {
- action = SEL_DESELECT;
- break;
- }
- }
- CTX_DATA_END;
- }
+ if (changed) {
+ Scene *scene = CTX_data_scene(C);
+ DEG_id_tag_update(&scene->id, DEG_TAG_SELECT_UPDATE);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
- CTX_DATA_BEGIN (C, Base *, base, visible_bases)
- {
- switch (action) {
- case SEL_SELECT:
- ED_object_base_select(base, BA_SELECT);
- break;
- case SEL_DESELECT:
- ED_object_base_select(base, BA_DESELECT);
- break;
- case SEL_INVERT:
- if ((base->flag & BASE_SELECTED) != 0) {
- ED_object_base_select(base, BA_DESELECT);
- }
- else {
- ED_object_base_select(base, BA_SELECT);
- }
- break;
- }
+ return OPERATOR_FINISHED;
+ }
+ else if (any_visible == false) {
+ /* TODO(campbell): Looks like we could remove this,
+ * if not comment should say why its needed. */
+ return OPERATOR_PASS_THROUGH;
+ }
+ else {
+ return OPERATOR_CANCELLED;
}
- CTX_DATA_END;
-
- Scene *scene = CTX_data_scene(C);
- DEG_id_tag_update(&scene->id, DEG_TAG_SELECT_UPDATE);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, scene);
-
- return OPERATOR_FINISHED;
}
void OBJECT_OT_select_all(wmOperatorType *ot)
diff --git a/source/blender/editors/physics/dynamicpaint_ops.c b/source/blender/editors/physics/dynamicpaint_ops.c
index a967450408c..5fb03b628b2 100644
--- a/source/blender/editors/physics/dynamicpaint_ops.c
+++ b/source/blender/editors/physics/dynamicpaint_ops.c
@@ -130,7 +130,7 @@ static int surface_slot_remove_exec(bContext *C, wmOperator *UNUSED(op))
for (; surface; surface = surface->next) {
if (id == canvas->active_sur) {
canvas->active_sur -= 1;
- dynamicPaint_freeSurface(surface);
+ dynamicPaint_freeSurface(pmd, surface);
break;
}
id++;
diff --git a/source/blender/editors/physics/particle_edit.c b/source/blender/editors/physics/particle_edit.c
index 457ff5be4de..09d3beadb2a 100644
--- a/source/blender/editors/physics/particle_edit.c
+++ b/source/blender/editors/physics/particle_edit.c
@@ -4829,10 +4829,18 @@ static int particle_edit_toggle_exec(bContext *C, wmOperator *op)
edit = PE_create_current(depsgraph, scene, ob);
- /* mesh may have changed since last entering editmode.
- * note, this may have run before if the edit data was just created, so could avoid this and speed up a little */
- if (edit && edit->psys)
+ /* Mesh may have changed since last entering editmode.
+ * note, this may have run before if the edit data was just created,
+ * so could avoid this and speed up a little. */
+ if (edit && edit->psys) {
+ /* Make sure pointer to the evaluated modifier data is up to date,
+ * with possible changes applied when object was outside of the
+ * edit mode. */
+ Object *object_eval = DEG_get_evaluated_object(depsgraph, ob);
+ edit->psmd_eval = (ParticleSystemModifierData *)modifiers_findByName(
+ object_eval, edit->psmd->modifier.name);
recalc_emitter_field(depsgraph, ob, edit->psys);
+ }
toggle_particle_cursor(C, 1);
WM_event_add_notifier(C, NC_SCENE | ND_MODE | NS_MODE_PARTICLE, NULL);
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index 1c2aa4537e9..ad2caead1e6 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -207,7 +207,7 @@ static Main *load_main_from_memory(const void *blend, int blend_size)
BlendFileData *bfd;
G.fileflags |= G_FILE_NO_UI;
- bfd = BLO_read_from_memory(blend, blend_size, NULL, BLO_READ_SKIP_NONE);
+ bfd = BLO_read_from_memory(blend, blend_size, BLO_READ_SKIP_NONE, NULL);
if (bfd) {
bmain = bfd->main;
diff --git a/source/blender/editors/screen/area.c b/source/blender/editors/screen/area.c
index 98a59292473..0a69a53e6fa 100644
--- a/source/blender/editors/screen/area.c
+++ b/source/blender/editors/screen/area.c
@@ -1115,10 +1115,6 @@ bool ED_region_is_overlap(int spacetype, int regiontype)
if (regiontype == RGN_TYPE_HEADER)
return 1;
}
- else if (spacetype == SPACE_SEQ) {
- if (regiontype == RGN_TYPE_PREVIEW)
- return 1;
- }
}
}
diff --git a/source/blender/editors/screen/screen_draw.c b/source/blender/editors/screen/screen_draw.c
index 5371fcfd6d4..af6f9acfa47 100644
--- a/source/blender/editors/screen/screen_draw.c
+++ b/source/blender/editors/screen/screen_draw.c
@@ -370,6 +370,12 @@ static void drawscredge_area(ScrArea *sa, int sizex, int sizey, float edge_thick
void ED_screen_draw_edges(wmWindow *win)
{
bScreen *screen = WM_window_get_active_screen(win);
+ screen->do_draw = false;
+
+ if (screen->state == SCREENFULL) {
+ return;
+ }
+
const int winsize_x = WM_window_pixels_x(win);
const int winsize_y = WM_window_pixels_y(win);
float col[4], corner_scale, edge_thickness;
@@ -421,8 +427,6 @@ void ED_screen_draw_edges(wmWindow *win)
}
glDisable(GL_SCISSOR_TEST);
-
- screen->do_draw = false;
}
/**
diff --git a/source/blender/editors/space_action/action_draw.c b/source/blender/editors/space_action/action_draw.c
index 77def4af6d0..738c5e4d2e2 100644
--- a/source/blender/editors/space_action/action_draw.c
+++ b/source/blender/editors/space_action/action_draw.c
@@ -476,7 +476,6 @@ void timeline_draw_cache(SpaceAction *saction, Object *ob, Scene *scene)
}
const int sta = pid->cache->startframe, end = pid->cache->endframe;
- const int len = (end - sta + 1) * 6;
GPU_blend(true);
@@ -493,23 +492,40 @@ void timeline_draw_cache(SpaceAction *saction, Object *ob, Scene *scene)
immUniformColor4fv(col);
- if (len > 0) {
- immBeginAtMost(GPU_PRIM_TRIS, len);
+ {
+ /* draw a quad for each chunk of consecutive cached frames */
+ const int chunk_tot = 32;
+ int chunk_len = 0;
+ int ista = 0, iend = -1;
- /* draw a quad for each cached frame */
for (int i = sta; i <= end; i++) {
if (pid->cache->cached_frames[i - sta]) {
- immVertex2f(pos, (float)i - 0.5f, 0.0f);
- immVertex2f(pos, (float)i - 0.5f, 1.0f);
- immVertex2f(pos, (float)i + 0.5f, 1.0f);
-
- immVertex2f(pos, (float)i - 0.5f, 0.0f);
- immVertex2f(pos, (float)i + 0.5f, 1.0f);
- immVertex2f(pos, (float)i + 0.5f, 0.0f);
+ if (chunk_len == 0) {
+ immBeginAtMost(GPU_PRIM_TRIS, chunk_tot * 6);
+ }
+ if (ista > iend) {
+ chunk_len++;
+ ista = i;
+ }
+ iend = i;
+ }
+ else {
+ if (ista <= iend) {
+ immRectf_fast(pos, (float)ista - 0.5f, 0.0f, (float)iend + 0.5f, 1.0f);
+ iend = ista - 1;
+ }
+ if (chunk_len >= chunk_tot) {
+ immEnd();
+ chunk_len = 0;
+ }
}
}
-
- immEnd();
+ if (ista <= iend) {
+ immRectf_fast(pos, (float)ista - 0.5f, 0.0f, (float)iend + 0.5f, 1.0f);
+ }
+ if (chunk_len != 0) {
+ immEnd();
+ }
}
GPU_blend(false);
diff --git a/source/blender/editors/space_buttons/buttons_context.c b/source/blender/editors/space_buttons/buttons_context.c
index 226a663971e..151959a916e 100644
--- a/source/blender/editors/space_buttons/buttons_context.c
+++ b/source/blender/editors/space_buttons/buttons_context.c
@@ -1014,6 +1014,7 @@ void buttons_context_draw(const bContext *C, uiLayout *layout)
PointerRNA *ptr;
char namebuf[128], *name;
int a, icon;
+ bool first = true;
if (!path)
return;
@@ -1024,29 +1025,36 @@ void buttons_context_draw(const bContext *C, uiLayout *layout)
for (a = 0; a < path->len; a++) {
ptr = &path->ptr[a];
- if (a != 0)
+ /* Skip scene and view layer to save space. */
+ if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_Scene)) {
+ continue;
+ }
+ else if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_ViewLayer)) {
+ continue;
+ }
+
+ /* Add > triangle. */
+ if (!first) {
uiItemL(row, "", ICON_SMALL_TRI_RIGHT_VEC);
+ }
+ else {
+ first = false;
+ }
+ /* Add icon + name .*/
if (ptr->data) {
icon = RNA_struct_ui_icon(ptr->type);
name = RNA_struct_name_get_alloc(ptr, namebuf, sizeof(namebuf), NULL);
if (name) {
- if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_Scene)) {
- uiItemLDrag(row, ptr, "", icon); /* save some space */
- }
- else if ((!ELEM(sbuts->mainb, BCONTEXT_RENDER, BCONTEXT_OUTPUT, BCONTEXT_SCENE, BCONTEXT_VIEW_LAYER, BCONTEXT_WORLD) && ptr->type == &RNA_ViewLayer)) {
- uiItemLDrag(row, ptr, "", icon); /* save some space */
- }
- else {
- uiItemLDrag(row, ptr, name, icon);
- }
+ uiItemLDrag(row, ptr, name, icon);
if (name != namebuf)
MEM_freeN(name);
}
- else
+ else {
uiItemL(row, "", icon);
+ }
}
}
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index 10f7777ee31..83b4f0aa6ce 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -888,6 +888,9 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar)
/* data... */
movieclip_main_area_set_view2d(C, ar);
+ /* callback */
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_PRE_VIEW);
+
clip_draw_main(C, sc, ar);
/* TODO(sergey): would be nice to find a way to de-duplicate all this space conversions */
@@ -933,6 +936,9 @@ static void clip_main_region_draw(const bContext *C, ARegion *ar)
clip_draw_grease_pencil((bContext *)C, true);
}
+ /* callback */
+ ED_region_draw_cb_draw(C, ar, REGION_DRAW_POST_VIEW);
+
/* reset view matrix */
UI_view2d_view_restore(C);
diff --git a/source/blender/editors/space_file/fsmenu.c b/source/blender/editors/space_file/fsmenu.c
index 6fd2c3515fa..9b1aae03219 100644
--- a/source/blender/editors/space_file/fsmenu.c
+++ b/source/blender/editors/space_file/fsmenu.c
@@ -57,6 +57,7 @@
#ifdef __linux__
#include <mntent.h>
+#include "BLI_fileops_types.h"
#endif
#include "fsmenu.h" /* include ourselves */
@@ -628,6 +629,33 @@ void fsmenu_read_system(struct FSMenu *fsmenu, int read_bookmarks)
fprintf(stderr, "could not close the list of mounted filesystems\n");
}
}
+ /* Check gvfs shares. */
+ const char * const xdg_runtime_dir = BLI_getenv("XDG_RUNTIME_DIR");
+ if (xdg_runtime_dir != NULL) {
+ struct direntry *dir;
+ char name[FILE_MAX];
+ BLI_join_dirfile(name, sizeof(name), xdg_runtime_dir, "gvfs/");
+ const uint dir_len = BLI_filelist_dir_contents(name, &dir);
+ for (uint i = 0; i < dir_len; i++) {
+ if ((dir[i].type & S_IFDIR)) {
+ const char *dirname = dir[i].relname;
+ if (dirname[0] != '.') {
+ /* Dir names contain a lot of unwanted text.
+ * Assuming every entry ends with the share name */
+ const char *label = strstr(dirname, "share=");
+ if (label != NULL) {
+ /* Move pointer so "share=" is trimmed off or use full dirname as label. */
+ const char *label_test = label + 6;
+ label = *label_test ? label_test : dirname;
+ }
+ BLI_snprintf(line, sizeof(line), "%s%s/", name, dirname);
+ fsmenu_insert_entry(fsmenu, FS_CATEGORY_SYSTEM, line, label, FS_INSERT_SORTED);
+ found = 1;
+ }
+ }
+ }
+ BLI_filelist_free(dir, dir_len);
+ }
#endif
/* fallback */
diff --git a/source/blender/editors/space_graph/graph_ops.c b/source/blender/editors/space_graph/graph_ops.c
index a6cc047d2dc..4ed6a980fcb 100644
--- a/source/blender/editors/space_graph/graph_ops.c
+++ b/source/blender/editors/space_graph/graph_ops.c
@@ -196,9 +196,7 @@ static int graphview_cursor_modal(bContext *C, wmOperator *op, const wmEvent *ev
case LEFTMOUSE:
case RIGHTMOUSE:
case MIDDLEMOUSE:
- /* we check for either mouse-button to end, as checking for ACTIONMOUSE (which is used to init
- * the modal op) doesn't work for some reason
- */
+ /* We check for either mouse-button to end, to work with all user keymaps. */
if (event->val == KM_RELEASE) {
if (screen)
screen->scrubbing = false;
diff --git a/source/blender/editors/space_info/info_stats.c b/source/blender/editors/space_info/info_stats.c
index a6e94e0875d..c842ac07eef 100644
--- a/source/blender/editors/space_info/info_stats.c
+++ b/source/blender/editors/space_info/info_stats.c
@@ -70,14 +70,14 @@
#define MAX_INFO_NUM_LEN 16
typedef struct SceneStats {
- int totvert, totvertsel;
- int totedge, totedgesel;
- int totface, totfacesel;
- int totbone, totbonesel;
- int totobj, totobjsel;
- int totlamp, totlampsel;
- int tottri;
- int totgplayer, totgpframe, totgpstroke, totgppoint;
+ uint64_t totvert, totvertsel;
+ uint64_t totedge, totedgesel;
+ uint64_t totface, totfacesel;
+ uint64_t totbone, totbonesel;
+ uint64_t totobj, totobjsel;
+ uint64_t totlamp, totlampsel;
+ uint64_t tottri;
+ uint64_t totgplayer, totgpframe, totgpstroke, totgppoint;
char infostr[MAX_INFO_LEN];
} SceneStats;
@@ -154,16 +154,18 @@ static void stats_object(Object *ob, int sel, int totob, SceneStats *stats)
}
case OB_GPENCIL:
{
- bGPdata *gpd = (bGPdata *)ob->data;
- /* GPXX Review if we can move to other place when object change
- * maybe to depsgraph evaluation
- */
- BKE_gpencil_stats_update(gpd);
-
- stats->totgplayer = gpd->totlayer;
- stats->totgpframe = gpd->totframe;
- stats->totgpstroke = gpd->totstroke;
- stats->totgppoint = gpd->totpoint;
+ if (sel) {
+ bGPdata *gpd = (bGPdata *)ob->data;
+ /* GPXX Review if we can move to other place when object change
+ * maybe to depsgraph evaluation
+ */
+ BKE_gpencil_stats_update(gpd);
+
+ stats->totgplayer += gpd->totlayer;
+ stats->totgpframe += gpd->totframe;
+ stats->totgpstroke += gpd->totstroke;
+ stats->totgppoint += gpd->totpoint;
+ }
break;
}
}
@@ -448,7 +450,7 @@ static void stats_string(ViewLayer *view_layer)
/* Generate formatted numbers */
#define SCENE_STATS_FMT_INT(_id) \
- BLI_str_format_int_grouped(stats_fmt._id, stats->_id)
+ BLI_str_format_uint64_grouped(stats_fmt._id, stats->_id)
SCENE_STATS_FMT_INT(totvert);
SCENE_STATS_FMT_INT(totvertsel);
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index b01ef02fb38..74744f63321 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -1789,7 +1789,7 @@ static int sequencer_unmute_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_unmute(struct wmOperatorType *ot)
{
/* identifiers */
- ot->name = "Un-Mute Strips";
+ ot->name = "Unmute Strips";
ot->idname = "SEQUENCER_OT_unmute";
ot->description = "Unmute (un)selected strips";
@@ -1858,7 +1858,7 @@ static int sequencer_unlock_exec(bContext *C, wmOperator *UNUSED(op))
void SEQUENCER_OT_unlock(struct wmOperatorType *ot)
{
/* identifiers */
- ot->name = "UnLock Strips";
+ ot->name = "Unlock Strips";
ot->idname = "SEQUENCER_OT_unlock";
ot->description = "Unlock the active strip so that it can't be transformed";
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 4fe2fe08fc9..91b13e1ac87 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -704,6 +704,7 @@ static void view3d_widgets(void)
WM_gizmogrouptype_append(TRANSFORM_GGT_gizmo);
WM_gizmogrouptype_append(VIEW3D_GGT_xform_cage);
WM_gizmogrouptype_append(VIEW3D_GGT_xform_shear);
+ WM_gizmogrouptype_append(VIEW3D_GGT_xform_extrude);
WM_gizmogrouptype_append(VIEW3D_GGT_mesh_preselect_elem);
WM_gizmogrouptype_append(VIEW3D_GGT_mesh_preselect_edgering);
diff --git a/source/blender/editors/space_view3d/view3d_edit.c b/source/blender/editors/space_view3d/view3d_edit.c
index dea28b75745..82e0511afe5 100644
--- a/source/blender/editors/space_view3d/view3d_edit.c
+++ b/source/blender/editors/space_view3d/view3d_edit.c
@@ -4918,3 +4918,51 @@ void VIEW3D_OT_toggle_shading(wmOperatorType *ot)
}
/** \} */
+
+
+/* -------------------------------------------------------------------- */
+/** \name Toggle XRay
+ * \{ */
+
+static int toggle_xray_exec(bContext *C, wmOperator *op)
+{
+ View3D *v3d = CTX_wm_view3d(C);
+ ScrArea *sa = CTX_wm_area(C);
+ Object *obact = CTX_data_active_object(C);
+
+ if (obact && obact->mode & OB_MODE_POSE) {
+ v3d->overlay.flag ^= V3D_OVERLAY_BONE_SELECT;
+ }
+ else {
+ const bool xray_active = (
+ (obact && (obact->mode & OB_MODE_EDIT)) ||
+ ELEM(v3d->shading.type, OB_WIRE, OB_SOLID));
+
+ if (v3d->shading.type == OB_WIRE) {
+ v3d->shading.flag ^= V3D_SHADING_XRAY_WIREFRAME;
+ }
+ else {
+ v3d->shading.flag ^= V3D_SHADING_XRAY;
+ }
+ if (!xray_active) {
+ BKE_report(op->reports, RPT_INFO, "X-Ray not available in current mode");
+ }
+ }
+
+ ED_area_tag_redraw(sa);
+
+ return OPERATOR_FINISHED;
+}
+
+void VIEW3D_OT_toggle_xray(wmOperatorType *ot)
+{
+ /* identifiers */
+ ot->name = "Toggle X-Ray";
+ ot->idname = "VIEW3D_OT_toggle_xray";
+
+ /* api callbacks */
+ ot->exec = toggle_xray_exec;
+ ot->poll = ED_operator_view3d_active;
+}
+
+/** \} */
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_empty.c b/source/blender/editors/space_view3d/view3d_gizmo_empty.c
index c58b1a6d6cd..9ce0041c76c 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_empty.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_empty.c
@@ -107,17 +107,6 @@ static void gizmo_empty_image_prop_matrix_set(
ob->ima_ofs[1] = (matrix[3][1] - (0.5f * dims[1])) / dims[1];
}
-static bool is_image_empty_visible(Object *ob, RegionView3D *rv3d)
-{
- int visibility_flag = ob->empty_image_visibility_flag;
- if (rv3d->is_persp) {
- return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE;
- }
- else {
- return visibility_flag & OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC;
- }
-}
-
static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmGizmoGroupType *UNUSED(gzgt))
{
View3D *v3d = CTX_wm_view3d(C);
@@ -133,7 +122,7 @@ static bool WIDGETGROUP_empty_image_poll(const bContext *C, wmGizmoGroupType *UN
if (ob && ob->type == OB_EMPTY) {
if (ob->empty_drawtype == OB_EMPTY_IMAGE) {
- return is_image_empty_visible(ob, rv3d);
+ return BKE_image_empty_visible_in_view3d(ob, rv3d);
}
}
return false;
diff --git a/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c b/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c
index 356f671345a..1358204a3a4 100644
--- a/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c
+++ b/source/blender/editors/space_view3d/view3d_gizmo_navigate_type.c
@@ -209,7 +209,7 @@ static void axis_geom_draw(
float depth;
char index;
char axis;
- char is_pos;
+ bool is_pos;
} axis_order[6] = {
{-gz->matrix_offset[0][2], 0, 0, false},
{+gz->matrix_offset[0][2], 1, 0, true},
@@ -218,6 +218,22 @@ static void axis_geom_draw(
{-gz->matrix_offset[2][2], 4, 2, false},
{+gz->matrix_offset[2][2], 5, 2, true},
};
+
+ int axis_align = -1;
+ for (int axis = 0; axis < 3; axis++) {
+ if (len_squared_v2(gz->matrix_offset[axis]) < 1e-6f) {
+ axis_align = axis;
+ break;
+ }
+ }
+
+ /* Show backwards pointing highlight on-top (else we can't see it at all). */
+ if ((select == false) && (gz->highlight_part > 0) && (axis_align != -1)) {
+ if (axis_order[gz->highlight_part - 1].is_pos == false) {
+ axis_order[gz->highlight_part - 1].depth = FLT_MAX;
+ }
+ }
+
qsort(&axis_order, ARRAY_SIZE(axis_order), sizeof(axis_order[0]), BLI_sortutil_cmp_float);
static const float axis_highlight[4] = {1, 1, 1, 1};
@@ -256,14 +272,6 @@ static void axis_geom_draw(
bool draw_center_done = false;
- int axis_align = -1;
- for (int axis = 0; axis < 3; axis++) {
- if (len_squared_v2(gz->matrix_offset[axis]) < 1e-6f) {
- axis_align = axis;
- break;
- }
- }
-
for (int axis_index = 0; axis_index < ARRAY_SIZE(axis_order); axis_index++) {
const int index = axis_order[axis_index].index;
const int axis = axis_order[axis_index].axis;
diff --git a/source/blender/editors/space_view3d/view3d_intern.h b/source/blender/editors/space_view3d/view3d_intern.h
index 8c21497dd53..05f2d8f67e1 100644
--- a/source/blender/editors/space_view3d/view3d_intern.h
+++ b/source/blender/editors/space_view3d/view3d_intern.h
@@ -104,6 +104,7 @@ void VIEW3D_OT_render_border(struct wmOperatorType *ot);
void VIEW3D_OT_clear_render_border(struct wmOperatorType *ot);
void VIEW3D_OT_zoom_border(struct wmOperatorType *ot);
void VIEW3D_OT_toggle_shading(struct wmOperatorType *ot);
+void VIEW3D_OT_toggle_xray(struct wmOperatorType *ot);
void view3d_boxview_copy(struct ScrArea *sa, struct ARegion *ar);
void view3d_boxview_sync(struct ScrArea *sa, struct ARegion *ar);
diff --git a/source/blender/editors/space_view3d/view3d_ops.c b/source/blender/editors/space_view3d/view3d_ops.c
index 0c916ebf2a3..2dbe0a0b843 100644
--- a/source/blender/editors/space_view3d/view3d_ops.c
+++ b/source/blender/editors/space_view3d/view3d_ops.c
@@ -224,6 +224,7 @@ void view3d_operatortypes(void)
WM_operatortype_append(VIEW3D_OT_snap_cursor_to_active);
WM_operatortype_append(VIEW3D_OT_toggle_shading);
+ WM_operatortype_append(VIEW3D_OT_toggle_xray);
WM_operatortype_append(VIEW3D_OT_toggle_matcap_flip);
WM_operatortype_append(VIEW3D_OT_ruler_add);
diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c
index c421c96e530..a99e276979b 100644
--- a/source/blender/editors/space_view3d/view3d_select.c
+++ b/source/blender/editors/space_view3d/view3d_select.c
@@ -2368,6 +2368,7 @@ static int opengl_bone_select_buffer_cmp(const void *sel_a_p, const void *sel_b_
static int do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const eSelectOp sel_op)
{
+ bool changed = false;
int totobj = MAXPICKBUF; /* XXX solve later */
/* selection buffer now has bones potentially too, so we add MAXPICKBUF */
@@ -2386,29 +2387,32 @@ static int do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const
Base **bases = NULL;
BLI_array_declare(bases);
- /* The draw order doesn't always match the order we populate the engine, see: T51695. */
- if (hits > 0) {
- qsort(vbuffer, hits, sizeof(uint[4]), opengl_bone_select_buffer_cmp);
+ if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
+ object_deselect_all_visible(vc->view_layer);
+ changed = true;
+ }
- for (Base *base = vc->view_layer->object_bases.first; base; base = base->next) {
- if (BASE_SELECTABLE(base)) {
- if ((base->object->select_color & 0x0000FFFF) != 0) {
- BLI_array_append(bases, base);
- }
+ if ((hits == -1) && !SEL_OP_USE_OUTSIDE(sel_op)) {
+ goto finally;
+ }
+
+ for (Base *base = vc->view_layer->object_bases.first; base; base = base->next) {
+ if (BASE_SELECTABLE(base)) {
+ if ((base->object->select_color & 0x0000FFFF) != 0) {
+ BLI_array_append(bases, base);
}
}
}
+ /* The draw order doesn't always match the order we populate the engine, see: T51695. */
+ qsort(vbuffer, hits, sizeof(uint[4]), opengl_bone_select_buffer_cmp);
+
for (const uint *col = vbuffer + 3, *col_end = col + (hits * 4); col < col_end; col += 4) {
Bone *bone;
Base *base = ED_armature_base_and_bone_from_select_buffer(bases, BLI_array_len(bases), *col, &bone);
base->object->id.tag |= LIB_TAG_DOIT;
}
- if (SEL_OP_USE_PRE_DESELECT(sel_op)) {
- object_deselect_all_visible(vc->view_layer);
- }
-
for (Base *base = vc->view_layer->object_bases.first; base && hits; base = base->next) {
if (BASE_SELECTABLE(base)) {
const bool is_select = base->flag & BASE_SELECTED;
@@ -2416,18 +2420,26 @@ static int do_object_box_select(bContext *C, ViewContext *vc, rcti *rect, const
const int sel_op_result = ED_select_op_action_deselected(sel_op, is_select, is_inside);
if (sel_op_result != -1) {
ED_object_base_select(base, sel_op_result ? BA_SELECT : BA_DESELECT);
+ changed = true;
}
}
- DEG_id_tag_update(&vc->scene->id, DEG_TAG_SELECT_UPDATE);
- WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene);
}
+finally:
if (bases != NULL) {
MEM_freeN(bases);
}
+
MEM_freeN(vbuffer);
- return hits > 0 ? OPERATOR_FINISHED : OPERATOR_CANCELLED;
+ if (changed) {
+ DEG_id_tag_update(&vc->scene->id, DEG_TAG_SELECT_UPDATE);
+ WM_event_add_notifier(C, NC_SCENE | ND_OB_SELECT, vc->scene);
+ return OPERATOR_FINISHED;
+ }
+ else {
+ return OPERATOR_CANCELLED;
+ }
}
static int do_pose_box_select(bContext *C, ViewContext *vc, rcti *rect, const eSelectOp sel_op)
@@ -2773,9 +2785,12 @@ void VIEW3D_OT_select(wmOperatorType *ot)
/* properties */
WM_operator_properties_mouse_select(ot);
- RNA_def_boolean(ot->srna, "center", 0, "Center", "Use the object center when selecting, in editmode used to extend object selection");
- RNA_def_boolean(ot->srna, "enumerate", 0, "Enumerate", "List objects under the mouse (object mode only)");
- RNA_def_boolean(ot->srna, "object", 0, "Object", "Use object selection (editmode only)");
+ prop = RNA_def_boolean(ot->srna, "center", 0, "Center", "Use the object center when selecting, in editmode used to extend object selection");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ prop = RNA_def_boolean(ot->srna, "enumerate", 0, "Enumerate", "List objects under the mouse (object mode only)");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
+ prop = RNA_def_boolean(ot->srna, "object", 0, "Object", "Use object selection (editmode only)");
+ RNA_def_property_flag(prop, PROP_SKIP_SAVE);
prop = RNA_def_int_vector(ot->srna, "location", 2, NULL, INT_MIN, INT_MAX, "Location", "Mouse location", INT_MIN, INT_MAX);
RNA_def_property_flag(prop, PROP_HIDDEN);
diff --git a/source/blender/editors/transform/CMakeLists.txt b/source/blender/editors/transform/CMakeLists.txt
index 45055eb1225..ccc143af18f 100644
--- a/source/blender/editors/transform/CMakeLists.txt
+++ b/source/blender/editors/transform/CMakeLists.txt
@@ -45,9 +45,10 @@ set(SRC
transform_constraints.c
transform_conversions.c
transform_generics.c
- transform_input.c
transform_gizmo_2d.c
transform_gizmo_3d.c
+ transform_gizmo_extrude_3d.c
+ transform_input.c
transform_ops.c
transform_orientations.c
transform_snap.c
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 9bd8417c46e..29ac5a92def 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -2121,7 +2121,8 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
if (t->spacetype == SPACE_VIEW3D) {
if ((prop = RNA_struct_find_property(op->ptr, "constraint_orientation")) &&
- !RNA_property_is_set(op->ptr, prop))
+ !RNA_property_is_set(op->ptr, prop) &&
+ (t->current_orientation != V3D_MANIP_CUSTOM_MATRIX))
{
t->scene->orientation_type = t->current_orientation;
BLI_assert(((t->scene->orientation_index_custom == -1) && (t->custom_orientation == NULL)) ||
diff --git a/source/blender/editors/transform/transform_conversions.c b/source/blender/editors/transform/transform_conversions.c
index 06e4f63d3d0..3f7a41c53a7 100644
--- a/source/blender/editors/transform/transform_conversions.c
+++ b/source/blender/editors/transform/transform_conversions.c
@@ -8146,7 +8146,7 @@ static void createTransGPencil(bContext *C, TransInfo *t)
ToolSettings *ts = CTX_data_tool_settings(C);
bool is_multiedit = (bool)GPENCIL_MULTIEDIT_SESSIONS_ON(gpd);
- bool use_multiframe_falloff = (ts->gp_sculpt.flag & GP_BRUSHEDIT_FLAG_FRAME_FALLOFF) != 0;
+ bool use_multiframe_falloff = (ts->gp_sculpt.flag & GP_SCULPT_SETT_FLAG_FRAME_FALLOFF) != 0;
Object *obact = CTX_data_active_object(C);
bGPDlayer *gpl;
diff --git a/source/blender/editors/transform/transform_gizmo_3d.c b/source/blender/editors/transform/transform_gizmo_3d.c
index bf5500903a2..6f3cef7c09d 100644
--- a/source/blender/editors/transform/transform_gizmo_3d.c
+++ b/source/blender/editors/transform/transform_gizmo_3d.c
@@ -461,6 +461,18 @@ static void calc_tw_center(struct TransformBounds *tbounds, const float co[3])
}
}
+static void calc_tw_center_with_matrix(
+ struct TransformBounds *tbounds, const float co[3],
+ const bool use_matrix, const float matrix[4][4])
+{
+ float co_world[3];
+ if (use_matrix) {
+ mul_v3_m4v3(co_world, matrix, co);
+ co = co_world;
+ }
+ calc_tw_center(tbounds, co);
+}
+
static void protectflag_to_drawflags(short protectflag, short *drawflags)
{
if (protectflag & OB_LOCK_LOCX)
@@ -731,7 +743,7 @@ int ED_transform_calc_gizmo_stats(
/* global, local or normal orientation?
* if we could check 'totsel' now, this should be skipped with no selection. */
- if (ob && !is_gp_edit) {
+ if (ob) {
const short orientation_type = params->orientation_type ? (params->orientation_type - 1) : scene->orientation_type;
float mat[3][3];
ED_transform_calc_orientation_from_type_ex(
@@ -761,10 +773,9 @@ int ED_transform_calc_gizmo_stats(
if (is_gp_edit) {
float diff_mat[4][4];
- float fpt[3];
-
for (bGPDlayer *gpl = gpd->layers.first; gpl; gpl = gpl->next) {
/* only editable and visible layers are considered */
+ const bool use_mat_local = gpl->parent != NULL;
if (gpencil_layer_is_editable(gpl) && (gpl->actframe != NULL)) {
/* calculate difference matrix */
@@ -784,15 +795,8 @@ int ED_transform_calc_gizmo_stats(
/* Change selection status of all points, then make the stroke match */
for (i = 0, pt = gps->points; i < gps->totpoints; i++, pt++) {
if (pt->flag & GP_SPOINT_SELECT) {
- if (gpl->parent == NULL) {
- calc_tw_center(tbounds, &pt->x);
- totsel++;
- }
- else {
- mul_v3_m4v3(fpt, diff_mat, &pt->x);
- calc_tw_center(tbounds, fpt);
- totsel++;
- }
+ calc_tw_center_with_matrix(tbounds, &pt->x, use_mat_local, diff_mat);
+ totsel++;
}
}
}
@@ -807,6 +811,21 @@ int ED_transform_calc_gizmo_stats(
}
}
else if (obedit) {
+
+#define FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) \
+ { \
+ invert_m4_m4(obedit->imat, obedit->obmat); \
+ uint objects_len = 0; \
+ Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len); \
+ for (uint ob_index = 0; ob_index < objects_len; ob_index++) { \
+ Object *ob_iter = objects[ob_index]; \
+ const bool use_mat_local = (ob_iter != obedit);
+
+#define FOREACH_EDIT_OBJECT_END() \
+ } \
+ MEM_freeN(objects); \
+ } ((void)0)
+
ob = obedit;
if (obedit->type == OB_MESH) {
BMEditMesh *em = BKE_editmesh_from_object(obedit);
@@ -820,14 +839,7 @@ int ED_transform_calc_gizmo_stats(
totsel = 1;
}
else {
- uint objects_len = 0;
- Object **objects = BKE_view_layer_array_from_objects_in_edit_mode(view_layer, &objects_len);
-
- float mat_local[4][4];
- invert_m4_m4(obedit->imat, obedit->obmat);
-
- for (uint ob_index = 0; ob_index < objects_len; ob_index++) {
- Object *ob_iter = objects[ob_index];
+ FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) {
BMEditMesh *em_iter = BKE_editmesh_from_object(ob_iter);
BMesh *bm = em_iter->bm;
@@ -838,7 +850,7 @@ int ED_transform_calc_gizmo_stats(
BMVert *eve;
BMIter iter;
- const bool use_mat_local = (ob_iter != obedit);
+ float mat_local[4][4];
if (use_mat_local) {
mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat);
}
@@ -846,20 +858,12 @@ int ED_transform_calc_gizmo_stats(
BM_ITER_MESH (eve, &iter, bm, BM_VERTS_OF_MESH) {
if (!BM_elem_flag_test(eve, BM_ELEM_HIDDEN)) {
if (BM_elem_flag_test(eve, BM_ELEM_SELECT)) {
- float co[3];
- if (use_mat_local) {
- mul_v3_m4v3(co, mat_local, eve->co);
- }
- else {
- copy_v3_v3(co, eve->co);
- }
- calc_tw_center(tbounds, co);
+ calc_tw_center_with_matrix(tbounds, eve->co, use_mat_local, mat_local);
totsel++;
}
}
}
- }
- MEM_freeN(objects);
+ } FOREACH_EDIT_OBJECT_END();
}
} /* end editmesh */
else if (obedit->type == OB_ARMATURE) {
@@ -881,28 +885,35 @@ int ED_transform_calc_gizmo_stats(
protectflag_to_drawflags_ebone(rv3d, ebo);
}
else {
- /* TODO: multi-object support. */
- for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
- if (EBONE_VISIBLE(arm, ebo)) {
- if (ebo->flag & BONE_TIPSEL) {
- calc_tw_center(tbounds, ebo->tail);
- totsel++;
- }
- if ((ebo->flag & BONE_ROOTSEL) &&
- /* don't include same point multiple times */
- ((ebo->flag & BONE_CONNECTED) &&
- (ebo->parent != NULL) &&
- (ebo->parent->flag & BONE_TIPSEL) &&
- EBONE_VISIBLE(arm, ebo->parent)) == 0)
- {
- calc_tw_center(tbounds, ebo->head);
- totsel++;
- }
- if (ebo->flag & BONE_SELECTED) {
- protectflag_to_drawflags_ebone(rv3d, ebo);
+ FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) {
+ arm = ob_iter->data;
+
+ float mat_local[4][4];
+ if (use_mat_local) {
+ mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat);
+ }
+ for (ebo = arm->edbo->first; ebo; ebo = ebo->next) {
+ if (EBONE_VISIBLE(arm, ebo)) {
+ if (ebo->flag & BONE_TIPSEL) {
+ calc_tw_center_with_matrix(tbounds, ebo->tail, use_mat_local, mat_local);
+ totsel++;
+ }
+ if ((ebo->flag & BONE_ROOTSEL) &&
+ /* don't include same point multiple times */
+ ((ebo->flag & BONE_CONNECTED) &&
+ (ebo->parent != NULL) &&
+ (ebo->parent->flag & BONE_TIPSEL) &&
+ EBONE_VISIBLE(arm, ebo->parent)) == 0)
+ {
+ calc_tw_center_with_matrix(tbounds, ebo->head, use_mat_local, mat_local);
+ totsel++;
+ }
+ if (ebo->flag & BONE_SELECTED) {
+ protectflag_to_drawflags_ebone(rv3d, ebo);
+ }
}
}
- }
+ } FOREACH_EDIT_OBJECT_END();
}
}
else if (ELEM(obedit->type, OB_CURVE, OB_SURF)) {
@@ -914,60 +925,67 @@ int ED_transform_calc_gizmo_stats(
totsel++;
}
else {
- /* TODO: multi-object support. */
- Nurb *nu;
- BezTriple *bezt;
- BPoint *bp;
- ListBase *nurbs = BKE_curve_editNurbs_get(cu);
-
- nu = nurbs->first;
- while (nu) {
- if (nu->type == CU_BEZIER) {
- bezt = nu->bezt;
- a = nu->pntsu;
- while (a--) {
- /* exceptions
- * if handles are hidden then only check the center points.
- * If the center knot is selected then only use this as the center point.
- */
- if ((v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_HANDLES) == 0) {
- if (bezt->f2 & SELECT) {
- calc_tw_center(tbounds, bezt->vec[1]);
- totsel++;
+ FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) {
+ cu = ob_iter->data;
+ Nurb *nu;
+ BezTriple *bezt;
+ BPoint *bp;
+ ListBase *nurbs = BKE_curve_editNurbs_get(cu);
+
+ float mat_local[4][4];
+ if (use_mat_local) {
+ mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat);
+ }
+
+ nu = nurbs->first;
+ while (nu) {
+ if (nu->type == CU_BEZIER) {
+ bezt = nu->bezt;
+ a = nu->pntsu;
+ while (a--) {
+ /* exceptions
+ * if handles are hidden then only check the center points.
+ * If the center knot is selected then only use this as the center point.
+ */
+ if ((v3d->overlay.edit_flag & V3D_OVERLAY_EDIT_CU_HANDLES) == 0) {
+ if (bezt->f2 & SELECT) {
+ calc_tw_center_with_matrix(tbounds, bezt->vec[1], use_mat_local, mat_local);
+ totsel++;
+ }
}
- }
- else if (bezt->f2 & SELECT) {
- calc_tw_center(tbounds, bezt->vec[1]);
- totsel++;
- }
- else {
- if (bezt->f1 & SELECT) {
- calc_tw_center(
- tbounds, bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0]);
+ else if (bezt->f2 & SELECT) {
+ calc_tw_center_with_matrix(tbounds, bezt->vec[1], use_mat_local, mat_local);
totsel++;
}
- if (bezt->f3 & SELECT) {
- calc_tw_center(
- tbounds, bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2]);
- totsel++;
+ else {
+ if (bezt->f1 & SELECT) {
+ const float *co = bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 0];
+ calc_tw_center_with_matrix(tbounds, co, use_mat_local, mat_local);
+ totsel++;
+ }
+ if (bezt->f3 & SELECT) {
+ const float *co = bezt->vec[(pivot_point == V3D_AROUND_LOCAL_ORIGINS) ? 1 : 2];
+ calc_tw_center_with_matrix(tbounds, co, use_mat_local, mat_local);
+ totsel++;
+ }
}
+ bezt++;
}
- bezt++;
}
- }
- else {
- bp = nu->bp;
- a = nu->pntsu * nu->pntsv;
- while (a--) {
- if (bp->f1 & SELECT) {
- calc_tw_center(tbounds, bp->vec);
- totsel++;
+ else {
+ bp = nu->bp;
+ a = nu->pntsu * nu->pntsv;
+ while (a--) {
+ if (bp->f1 & SELECT) {
+ calc_tw_center_with_matrix(tbounds, bp->vec, use_mat_local, mat_local);
+ totsel++;
+ }
+ bp++;
}
- bp++;
}
+ nu = nu->next;
}
- nu = nu->next;
- }
+ } FOREACH_EDIT_OBJECT_END();
}
}
else if (obedit->type == OB_MBALL) {
@@ -979,13 +997,21 @@ int ED_transform_calc_gizmo_stats(
totsel++;
}
else {
- /* TODO: multi-object support. */
- for (ml = mb->editelems->first; ml; ml = ml->next) {
- if (ml->flag & SELECT) {
- calc_tw_center(tbounds, &ml->x);
- totsel++;
+ FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) {
+ mb = (MetaBall *)ob_iter->data;
+
+ float mat_local[4][4];
+ if (use_mat_local) {
+ mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat);
}
- }
+
+ for (ml = mb->editelems->first; ml; ml = ml->next) {
+ if (ml->flag & SELECT) {
+ calc_tw_center_with_matrix(tbounds, &ml->x, use_mat_local, mat_local);
+ totsel++;
+ }
+ }
+ } FOREACH_EDIT_OBJECT_END();
}
}
else if (obedit->type == OB_LATTICE) {
@@ -997,19 +1023,30 @@ int ED_transform_calc_gizmo_stats(
totsel++;
}
else {
- /* TODO: multi-object support. */
- bp = lt->def;
- a = lt->pntsu * lt->pntsv * lt->pntsw;
- while (a--) {
- if (bp->f1 & SELECT) {
- calc_tw_center(tbounds, bp->vec);
- totsel++;
+ FOREACH_EDIT_OBJECT_BEGIN(ob_iter, use_mat_local) {
+ lt = ((Lattice *)ob_iter->data)->editlatt->latt;
+ bp = lt->def;
+ a = lt->pntsu * lt->pntsv * lt->pntsw;
+
+ float mat_local[4][4];
+ if (use_mat_local) {
+ mul_m4_m4m4(mat_local, obedit->imat, ob_iter->obmat);
}
- bp++;
- }
+
+ while (a--) {
+ if (bp->f1 & SELECT) {
+ calc_tw_center_with_matrix(tbounds, bp->vec, use_mat_local, mat_local);
+ totsel++;
+ }
+ bp++;
+ }
+ } FOREACH_EDIT_OBJECT_END();
}
}
+#undef FOREACH_EDIT_OBJECT_BEGIN
+#undef FOREACH_EDIT_OBJECT_END
+
/* selection center */
if (totsel) {
mul_v3_fl(tbounds->center, 1.0f / (float)totsel); // centroid!
diff --git a/source/blender/editors/mesh/editmesh_extrude_gizmo.c b/source/blender/editors/transform/transform_gizmo_extrude_3d.c
index 5de8e896ddf..1dc50f476fa 100644
--- a/source/blender/editors/mesh/editmesh_extrude_gizmo.c
+++ b/source/blender/editors/transform/transform_gizmo_extrude_3d.c
@@ -15,20 +15,15 @@
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
- * The Original Code is Copyright (C) 2004 by Blender Foundation.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): Joseph Eagar
- *
* ***** END GPL LICENSE BLOCK *****
*/
-/** \file blender/editors/mesh/editmesh_extrude_gizmo.c
+/** \file blender/editors/transform/transform_gizmo_extrude_3d.c
* \ingroup edmesh
*/
+#include "BLI_utildefines.h"
+#include "BLI_array_utils.h"
#include "BLI_math.h"
#include "BLI_listbase.h"
@@ -53,8 +48,6 @@
#include "MEM_guardedalloc.h"
-#include "mesh_intern.h" /* own include */
-
/* -------------------------------------------------------------------- */
/** \name Extrude Gizmo
* \{ */
@@ -69,6 +62,7 @@ static const float extrude_button_offset_scale = 1.5f;
static const float extrude_arrow_scale = 1.0f;
static const float extrude_arrow_xyz_axis_scale = 1.0f;
static const float extrude_arrow_normal_axis_scale = 1.0f;
+static const float extrude_dial_scale = 0.2;
static const uchar shape_plus[] = {
0x5f, 0xfb, 0x40, 0xee, 0x25, 0xda, 0x11, 0xbf, 0x4, 0xa0, 0x0, 0x80, 0x4, 0x5f, 0x11,
@@ -82,10 +76,22 @@ static const uchar shape_plus[] = {
typedef struct GizmoExtrudeGroup {
/* XYZ & normal. */
- struct wmGizmo *invoke_xyz_no[4];
- struct wmGizmo *adjust;
+ wmGizmo *invoke_xyz_no[4];
+ /* Constrained & unconstrained (arrow & circle). */
+ wmGizmo *adjust[2];
int adjust_axis;
+ /* Copied from the transform operator,
+ * use to redo with the same settings. */
+ struct {
+ float constraint_matrix[3][3];
+ bool constraint_axis[3];
+ float value[4];
+ } redo_xform;
+
+ /* Depends on object type. */
+ int normal_axis;
+
struct {
float normal_mat3[3][3]; /* use Z axis for normal. */
int orientation_type;
@@ -111,21 +117,23 @@ static void gizmo_mesh_extrude_orientation_matrix_set_for_adjust(
{
/* Set orientation without location. */
for (int j = 0; j < 3; j++) {
- copy_v3_v3(ggd->adjust->matrix_basis[j], mat[j]);
+ copy_v3_v3(ggd->adjust[0]->matrix_basis[j], mat[j]);
}
/* nop when (i == 2). */
- swap_v3_v3(ggd->adjust->matrix_basis[ggd->adjust_axis], ggd->adjust->matrix_basis[2]);
+ swap_v3_v3(ggd->adjust[0]->matrix_basis[ggd->adjust_axis], ggd->adjust[0]->matrix_basis[2]);
}
-static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gzgroup)
+static void gizmo_mesh_extrude_setup(const bContext *C, wmGizmoGroup *gzgroup)
{
struct GizmoExtrudeGroup *ggd = MEM_callocN(sizeof(GizmoExtrudeGroup), __func__);
gzgroup->customdata = ggd;
const wmGizmoType *gzt_arrow = WM_gizmotype_find("GIZMO_GT_arrow_3d", true);
const wmGizmoType *gzt_move = WM_gizmotype_find("GIZMO_GT_button_2d", true);
+ const wmGizmoType *gzt_dial = WM_gizmotype_find("GIZMO_GT_dial_3d", true);
- ggd->adjust = WM_gizmo_new_ptr(gzt_arrow, gzgroup, NULL);
+ ggd->adjust[0] = WM_gizmo_new_ptr(gzt_arrow, gzgroup, NULL);
+ ggd->adjust[1] = WM_gizmo_new_ptr(gzt_dial, gzgroup, NULL);
for (int i = 0; i < 4; i++) {
ggd->invoke_xyz_no[i] = WM_gizmo_new_ptr(gzt_move, gzgroup, NULL);
ggd->invoke_xyz_no[i]->flag |= WM_GIZMO_DRAW_OFFSET_SCALE;
@@ -141,7 +149,24 @@ static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gz
}
{
- ggd->ot_extrude = WM_operatortype_find("MESH_OT_extrude_context_move", true);
+ const Object *obedit = CTX_data_edit_object(C);
+ const char *op_idname = NULL;
+ if (obedit->type == OB_MESH) {
+ op_idname = "MESH_OT_extrude_context_move";
+ ggd->normal_axis = 2;
+ }
+ else if (obedit->type == OB_ARMATURE) {
+ op_idname = "ARMATURE_OT_extrude_move";
+ ggd->normal_axis = 1;
+ }
+ else if (obedit->type == OB_CURVE) {
+ op_idname = "CURVE_OT_extrude_move";
+ ggd->normal_axis = 2;
+ }
+ else {
+ BLI_assert(0);
+ }
+ ggd->ot_extrude = WM_operatortype_find(op_idname, true);
ggd->gzgt_axis_type_prop = RNA_struct_type_find_property(gzgroup->type->srna, "axis_type");
}
@@ -149,21 +174,23 @@ static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gz
UI_GetThemeColor3fv(TH_AXIS_X + i, ggd->invoke_xyz_no[i]->color);
}
UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->invoke_xyz_no[3]->color);
- UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->adjust->color);
+ for (int i = 0; i < 2; i++) {
+ UI_GetThemeColor3fv(TH_GIZMO_PRIMARY, ggd->adjust[i]->color);
+ }
for (int i = 0; i < 4; i++) {
WM_gizmo_set_scale(ggd->invoke_xyz_no[i], extrude_button_scale);
}
- WM_gizmo_set_scale(ggd->adjust, extrude_arrow_scale);
-
- WM_gizmo_set_flag(ggd->adjust, WM_GIZMO_DRAW_VALUE, true);
+ WM_gizmo_set_scale(ggd->adjust[0], extrude_arrow_scale);
+ WM_gizmo_set_scale(ggd->adjust[1], extrude_dial_scale);
+ ggd->adjust[1]->line_width = 2.0f;
/* XYZ & normal axis extrude. */
for (int i = 0; i < 4; i++) {
PointerRNA *ptr = WM_gizmo_operator_set(ggd->invoke_xyz_no[i], 0, ggd->ot_extrude, NULL);
{
bool constraint[3] = {0, 0, 0};
- constraint[MIN2(i, 2)] = 1;
+ constraint[(i < 3) ? i : ggd->normal_axis] = true;
PointerRNA macroptr = RNA_pointer_get(ptr, "TRANSFORM_OT_translate");
RNA_boolean_set(&macroptr, "release_confirm", true);
RNA_boolean_set_array(&macroptr, "constraint_axis", constraint);
@@ -171,11 +198,12 @@ static void gizmo_mesh_extrude_setup(const bContext *UNUSED(C), wmGizmoGroup *gz
}
/* Adjust extrude. */
- {
- PointerRNA *ptr = WM_gizmo_operator_set(ggd->adjust, 0, ggd->ot_extrude, NULL);
+ for (int i = 0; i < 2; i++) {
+ wmGizmo *gz = ggd->adjust[i];
+ PointerRNA *ptr = WM_gizmo_operator_set(gz, 0, ggd->ot_extrude, NULL);
PointerRNA macroptr = RNA_pointer_get(ptr, "TRANSFORM_OT_translate");
RNA_boolean_set(&macroptr, "release_confirm", true);
- wmGizmoOpElem *gzop = WM_gizmo_operator_get(ggd->adjust, 0);
+ wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, 0);
gzop->is_redo = true;
}
}
@@ -187,7 +215,9 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
for (int i = 0; i < 4; i++) {
WM_gizmo_set_flag(ggd->invoke_xyz_no[i], WM_GIZMO_HIDDEN, true);
}
- WM_gizmo_set_flag(ggd->adjust, WM_GIZMO_HIDDEN, true);
+ for (int i = 0; i < 2; i++) {
+ WM_gizmo_set_flag(ggd->adjust[i], WM_GIZMO_HIDDEN, true);
+ }
if (G.moving) {
return;
@@ -240,32 +270,32 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
/* Offset the add icon. */
mul_v3_v3fl(
ggd->invoke_xyz_no[3]->matrix_offset[3],
- ggd->data.normal_mat3[2],
+ ggd->data.normal_mat3[ggd->normal_axis],
(extrude_arrow_normal_axis_scale * extrude_button_offset_scale) / extrude_button_scale);
/* Adjust current operator. */
/* Don't use 'WM_operator_last_redo' because selection actions will be ignored. */
wmOperator *op = CTX_wm_manager(C)->operators.last;
bool has_redo = (op && op->type == ggd->ot_extrude);
- wmOperator *op_transform = has_redo ? op->macro.last : NULL;
+ wmOperator *op_xform = has_redo ? op->macro.last : NULL;
- struct {
- float constraint_matrix[3][3];
- bool constraint_axis[3];
- float value[4];
- bool is_flip;
- } redo;
+ bool adjust_is_flip = false;
+ wmGizmo *gz_adjust = NULL;
if (has_redo) {
+ gz_adjust = ggd->adjust[1];
/* We can't access this from 'ot->last_properties'
* because some properties use skip-save. */
- RNA_float_get_array(op_transform->ptr, "constraint_matrix", &redo.constraint_matrix[0][0]);
- RNA_boolean_get_array(op_transform->ptr, "constraint_axis", redo.constraint_axis);
- RNA_float_get_array(op_transform->ptr, "value", redo.value);
+ RNA_float_get_array(op_xform->ptr, "constraint_matrix", &ggd->redo_xform.constraint_matrix[0][0]);
+ RNA_boolean_get_array(op_xform->ptr, "constraint_axis", ggd->redo_xform.constraint_axis);
+ RNA_float_get_array(op_xform->ptr, "value", ggd->redo_xform.value);
+
+ /* Set properties for redo. */
for (int i = 0; i < 3; i++) {
- if (redo.constraint_axis[i]) {
- redo.is_flip = redo.value[i] < 0.0f;
+ if (ggd->redo_xform.constraint_axis[i]) {
+ adjust_is_flip = ggd->redo_xform.value[i] < 0.0f;
ggd->adjust_axis = i;
+ gz_adjust = ggd->adjust[0];
break;
}
}
@@ -273,30 +303,25 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
/* Needed for normal orientation. */
gizmo_mesh_extrude_orientation_matrix_set(ggd, tbounds.axis);
- if (has_redo) {
- gizmo_mesh_extrude_orientation_matrix_set_for_adjust(ggd, redo.constraint_matrix);
- if (redo.is_flip) {
- negate_v3(ggd->adjust->matrix_basis[2]);
- }
- }
/* Location. */
for (int i = 0; i < axis_len_used; i++) {
WM_gizmo_set_matrix_location(ggd->invoke_xyz_no[i], tbounds.center);
}
- WM_gizmo_set_matrix_location(ggd->adjust, tbounds.center);
-
/* Un-hide. */
for (int i = 0; i < axis_len_used; i++) {
WM_gizmo_set_flag(ggd->invoke_xyz_no[i], WM_GIZMO_HIDDEN, false);
}
- WM_gizmo_set_flag(ggd->adjust, WM_GIZMO_HIDDEN, !has_redo);
- /* Operator properties. */
- if (use_normal) {
- wmGizmoOpElem *gzop = WM_gizmo_operator_get(ggd->invoke_xyz_no[3], 0);
- PointerRNA macroptr = RNA_pointer_get(&gzop->ptr, "TRANSFORM_OT_translate");
- RNA_float_set_array(&macroptr, "constraint_matrix", &ggd->data.normal_mat3[0][0]);
+ if (has_redo) {
+ if (gz_adjust == ggd->adjust[0]) {
+ gizmo_mesh_extrude_orientation_matrix_set_for_adjust(ggd, ggd->redo_xform.constraint_matrix);
+ if (adjust_is_flip) {
+ negate_v3(ggd->adjust[0]->matrix_basis[2]);
+ }
+ }
+ WM_gizmo_set_matrix_location(gz_adjust, tbounds.center);
+ WM_gizmo_set_flag(gz_adjust, WM_GIZMO_HIDDEN, false);
}
/* Redo with current settings. */
@@ -305,7 +330,8 @@ static void gizmo_mesh_extrude_refresh(const bContext *C, wmGizmoGroup *gzgroup)
RNA_enum_set(
ggd->invoke_xyz_no[i]->ptr,
"draw_options",
- (dot_v3v3(ggd->adjust->matrix_basis[2],
+ ((gz_adjust == ggd->adjust[0]) &&
+ dot_v3v3(ggd->adjust[0]->matrix_basis[2],
ggd->invoke_xyz_no[i]->matrix_offset[3]) > 0.98f) ? 0 : ED_GIZMO_BUTTON_SHOW_HELPLINE);
}
}
@@ -350,6 +376,44 @@ static void gizmo_mesh_extrude_draw_prepare(const bContext *C, wmGizmoGroup *gzg
gz->temp.f = dot_v3v3(rv3d->viewinv[2], gz->matrix_offset[3]);
}
BLI_listbase_sort(&gzgroup->gizmos, WM_gizmo_cmp_temp_fl_reverse);
+
+ if ((ggd->adjust[1]->flag & WM_GIZMO_HIDDEN) == 0) {
+ copy_v3_v3(ggd->adjust[1]->matrix_basis[0], rv3d->viewinv[0]);
+ copy_v3_v3(ggd->adjust[1]->matrix_basis[1], rv3d->viewinv[1]);
+ copy_v3_v3(ggd->adjust[1]->matrix_basis[2], rv3d->viewinv[2]);
+ }
+ }
+}
+
+static void gizmo_mesh_extrude_invoke_prepare(const bContext *UNUSED(C), wmGizmoGroup *gzgroup, wmGizmo *gz)
+{
+ GizmoExtrudeGroup *ggd = gzgroup->customdata;
+ if (ELEM(gz, ggd->adjust[0], ggd->adjust[1])) {
+ /* Set properties for redo. */
+ wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, 0);
+ PointerRNA macroptr = RNA_pointer_get(&gzop->ptr, "TRANSFORM_OT_translate");
+ if (gz == ggd->adjust[0]) {
+ RNA_float_set_array(&macroptr, "constraint_matrix", &ggd->redo_xform.constraint_matrix[0][0]);
+ RNA_boolean_set_array(&macroptr, "constraint_axis", ggd->redo_xform.constraint_axis);
+ }
+ RNA_float_set_array(&macroptr, "value", ggd->redo_xform.value);
+ }
+ else {
+ /* Workaround for extrude action modifying normals. */
+ const int i = BLI_array_findindex(ggd->invoke_xyz_no, ARRAY_SIZE(ggd->invoke_xyz_no), &gz);
+ BLI_assert(i != -1);
+ bool use_normal_matrix = false;
+ if (i == 3) {
+ use_normal_matrix = true;
+ }
+ else if (ggd->data.orientation_type == V3D_MANIP_NORMAL) {
+ use_normal_matrix = true;
+ }
+ if (use_normal_matrix) {
+ wmGizmoOpElem *gzop = WM_gizmo_operator_get(gz, 0);
+ PointerRNA macroptr = RNA_pointer_get(&gzop->ptr, "TRANSFORM_OT_translate");
+ RNA_float_set_array(&macroptr, "constraint_matrix", &ggd->data.normal_mat3[0][0]);
+ }
}
}
@@ -380,10 +444,10 @@ static void gizmo_mesh_extrude_message_subscribe(
&msg_sub_value_gz_tag_refresh, __func__);
}
-void MESH_GGT_extrude(struct wmGizmoGroupType *gzgt)
+void VIEW3D_GGT_xform_extrude(struct wmGizmoGroupType *gzgt)
{
- gzgt->name = "Mesh Extrude";
- gzgt->idname = "MESH_GGT_extrude";
+ gzgt->name = "3D View Extrude";
+ gzgt->idname = "VIEW3D_GGT_xform_extrude";
gzgt->flag = WM_GIZMOGROUPTYPE_3D;
@@ -394,6 +458,7 @@ void MESH_GGT_extrude(struct wmGizmoGroupType *gzgt)
gzgt->setup = gizmo_mesh_extrude_setup;
gzgt->refresh = gizmo_mesh_extrude_refresh;
gzgt->draw_prepare = gizmo_mesh_extrude_draw_prepare;
+ gzgt->invoke_prepare = gizmo_mesh_extrude_invoke_prepare;
gzgt->message_subscribe = gizmo_mesh_extrude_message_subscribe;
static const EnumPropertyItem axis_type_items[] = {
diff --git a/source/blender/editors/transform/transform_orientations.c b/source/blender/editors/transform/transform_orientations.c
index 447842e9bf0..b220652395d 100644
--- a/source/blender/editors/transform/transform_orientations.c
+++ b/source/blender/editors/transform/transform_orientations.c
@@ -976,6 +976,14 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
ok = true;
}
else {
+ /* When we only have the root/tip are selected. */
+ bool fallback_ok = false;
+ float fallback_normal[3];
+ float fallback_plane[3];
+
+ zero_v3(fallback_normal);
+ zero_v3(fallback_plane);
+
for (ebone = arm->edbo->first; ebone; ebone = ebone->next) {
if (arm->layer & ebone->layer) {
if (ebone->flag & BONE_SELECTED) {
@@ -984,8 +992,23 @@ int getTransformOrientation_ex(const bContext *C, float normal[3], float plane[3
add_v3_v3(plane, tmat[1]);
ok = true;
}
+ else if ((ok == false) &&
+ ((ebone->flag & BONE_TIPSEL) ||
+ ((ebone->flag & BONE_ROOTSEL) &&
+ (ebone->parent && ebone->flag & BONE_CONNECTED) == false)))
+ {
+ ED_armature_ebone_to_mat3(ebone, tmat);
+ add_v3_v3(fallback_normal, tmat[2]);
+ add_v3_v3(fallback_plane, tmat[1]);
+ fallback_ok = true;
+ }
}
}
+ if ((ok == false) && fallback_ok) {
+ ok = true;
+ copy_v3_v3(normal, fallback_normal);
+ copy_v3_v3(plane, fallback_plane);
+ }
}
if (ok) {
diff --git a/source/blender/editors/transform/transform_snap_object.c b/source/blender/editors/transform/transform_snap_object.c
index aecbb22072d..e28f00e6509 100644
--- a/source/blender/editors/transform/transform_snap_object.c
+++ b/source/blender/editors/transform/transform_snap_object.c
@@ -112,10 +112,6 @@ typedef struct SnapObjectData_EditMesh {
SnapObjectData sd;
BVHTreeFromEditMesh *bvh_trees[3];
- /* It's like a boundbox. It is tested first to avoid
- * to create a bvhtree for all the edited objects. */
- float min[3], max[3];
-
} SnapObjectData_EditMesh;
struct SnapObjectContext {
@@ -161,18 +157,6 @@ struct SnapObjectContext {
typedef void(*IterSnapObjsCallback)(SnapObjectContext *sctx, bool is_obedit, Object *ob, float obmat[4][4], void *data);
-static void min_max_from_bmesh(
- BMesh *bm, float r_min[3], float r_max[3])
-{
- BMIter iter;
- BMVert *eve;
-
- INIT_MINMAX(r_min, r_max);
- BM_ITER_MESH(eve, &iter, bm, BM_VERTS_OF_MESH) {
- minmax_v3v3_v3(r_min, r_max, eve->co);
- }
-}
-
static SnapObjectData_Mesh *snap_object_data_mesh_get(SnapObjectContext *sctx, Object *ob)
{
void **sod_p;
@@ -202,7 +186,6 @@ static SnapObjectData_EditMesh *snap_object_data_editmesh_get(SnapObjectContext
else {
SnapObjectData_EditMesh *sod = *sod_p = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(*sod));
sod->sd.type = SNAP_EDIT_MESH;
- min_max_from_bmesh(em->bm, sod->min, sod->max);
}
return *sod_p;
@@ -383,12 +366,10 @@ static bool raycastMesh(
}
float imat[4][4];
- float timat[3][3]; /* transpose inverse matrix for normals */
float ray_start_local[3], ray_normal_local[3];
float local_scale, local_depth, len_diff = 0.0f;
invert_m4_m4(imat, obmat);
- transpose_m3_m4(timat, imat);
copy_v3_v3(ray_start_local, ray_start);
copy_v3_v3(ray_normal_local, ray_dir);
@@ -478,6 +459,10 @@ static bool raycastMesh(
else {
len_diff = 0.0f;
}
+
+ float timat[3][3]; /* transpose inverse matrix for normals */
+ transpose_m3_m4(timat, imat);
+
if (r_hit_list) {
struct RayCastAll_Data data;
@@ -549,19 +534,38 @@ static bool raycastEditMesh(
BLI_assert(em->ob->data == BKE_object_get_pre_modified_mesh(ob));
- SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em);
- {
- float min[3], max[3];
- mul_v3_m4v3(min, obmat, sod->min);
- mul_v3_m4v3(max, obmat, sod->max);
+ float imat[4][4];
+ float ray_start_local[3], ray_normal_local[3];
+ float local_scale, local_depth, len_diff = 0.0f;
+
+ invert_m4_m4(imat, obmat);
+
+ copy_v3_v3(ray_start_local, ray_start);
+ copy_v3_v3(ray_normal_local, ray_dir);
+
+ mul_m4_v3(imat, ray_start_local);
+ mul_mat3_m4_v3(imat, ray_normal_local);
+
+ /* local scale in normal direction */
+ local_scale = normalize_v3(ray_normal_local);
+ local_depth = *ray_depth;
+ if (local_depth != BVH_RAYCAST_DIST_MAX) {
+ local_depth *= local_scale;
+ }
+ /* Test BoundBox */
+ BoundBox *bb = BKE_mesh_texspace_get(em->ob->data, NULL, NULL, NULL);
+ if (bb) {
+ /* was BKE_boundbox_ray_hit_check, see: cf6ca226fa58 */
if (!isect_ray_aabb_v3_simple(
- ray_start, ray_dir, min, max, NULL, NULL))
+ ray_start_local, ray_normal_local, bb->vec[0], bb->vec[6], &len_diff, NULL))
{
return retval;
}
}
+ SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em);
+
if (sod->bvh_trees[2] == NULL) {
sod->bvh_trees[2] = BLI_memarena_calloc(sctx->cache.mem_arena, sizeof(BVHTreeFromEditMesh));
}
@@ -610,26 +614,6 @@ static bool raycastEditMesh(
treedata->em = em;
}
- float imat[4][4];
- float timat[3][3]; /* transpose inverse matrix for normals */
- float ray_normal_local[3], ray_start_local[3], len_diff = 0.0f;
-
- invert_m4_m4(imat, obmat);
- transpose_m3_m4(timat, imat);
-
- copy_v3_v3(ray_normal_local, ray_dir);
- mul_mat3_m4_v3(imat, ray_normal_local);
-
- copy_v3_v3(ray_start_local, ray_start);
- mul_m4_v3(imat, ray_start_local);
-
- /* local scale in normal direction */
- float local_scale = normalize_v3(ray_normal_local);
- float local_depth = *ray_depth;
- if (local_depth != BVH_RAYCAST_DIST_MAX) {
- local_depth *= local_scale;
- }
-
/* Only use closer ray_start in case of ortho view! In perspective one, ray_start
* may already been *inside* boundbox, leading to snap failures (see T38409).
* Note also ar might be null (see T38435), in this case we assume ray_start is ok!
@@ -653,6 +637,10 @@ static bool raycastEditMesh(
}
else len_diff = 0.0f;
}
+
+ float timat[3][3]; /* transpose inverse matrix for normals */
+ transpose_m3_m4(timat, imat);
+
if (r_hit_list) {
struct RayCastAll_Data data;
@@ -875,6 +863,25 @@ static bool raycastObjects(
/** Snap Nearest utilities
* \{ */
+ /* Test BoundBox */
+static bool snap_bound_box_check_dist(BoundBox *bb, float lpmat[4][4], float win_size[2], float mval[2], float dist_px_sq)
+{
+ /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
+
+ struct DistProjectedAABBPrecalc data_precalc;
+ dist_squared_to_projected_aabb_precalc(
+ &data_precalc, lpmat, win_size, mval);
+
+ bool dummy[3];
+ float bb_dist_px_sq = dist_squared_to_projected_aabb(
+ &data_precalc, bb->vec[0], bb->vec[6], dummy);
+
+ if (bb_dist_px_sq > dist_px_sq) {
+ return false;
+ }
+ return true;
+}
+
static void cb_mvert_co_get(
const int index, const float **co, const BVHTreeFromMesh *data)
{
@@ -1421,15 +1428,8 @@ static short snapArmature(
if (use_obedit == false) {
/* Test BoundBox */
BoundBox *bb = BKE_armature_boundbox_get(ob);
- if (bb) {
- bool dummy[3];
- /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
- float bb_dist_px_sq = dist_squared_to_projected_aabb(
- &neasrest_precalc, bb->vec[0], bb->vec[6], dummy);
-
- if (bb_dist_px_sq > dist_px_sq) {
- return retval;
- }
+ if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) {
+ return retval;
}
}
@@ -1556,16 +1556,9 @@ static short snapCurve(
if (use_obedit == false) {
/* Test BoundBox */
- BoundBox *bb = BKE_curve_boundbox_get(ob);
- if (bb) {
- bool dummy[3];
- /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
- float bb_dist_px_sq = dist_squared_to_projected_aabb(
- &neasrest_precalc, bb->vec[0], bb->vec[6], dummy);
-
- if (bb_dist_px_sq > dist_px_sq) {
- return 0;
- }
+ BoundBox *bb = BKE_curve_texspace_get(cu, NULL, NULL, NULL);
+ if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) {
+ return 0;
}
}
@@ -1841,20 +1834,8 @@ static short snapMesh(
/* Test BoundBox */
BoundBox *bb = BKE_mesh_boundbox_get(ob);
- if (bb) {
- /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
-
- struct DistProjectedAABBPrecalc data_precalc;
- dist_squared_to_projected_aabb_precalc(
- &data_precalc, lpmat, snapdata->win_size, snapdata->mval);
-
- bool dummy[3];
- float bb_dist_px_sq = dist_squared_to_projected_aabb(
- &data_precalc, bb->vec[0], bb->vec[6], dummy);
-
- if (bb_dist_px_sq > dist_px_sq) {
- return 0;
- }
+ if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) {
+ return 0;
}
SnapObjectData_Mesh *sod = snap_object_data_mesh_get(sctx, ob);
@@ -2057,29 +2038,19 @@ static short snapEditMesh(
BLI_assert(em->ob->data == BKE_object_get_pre_modified_mesh(ob));
UNUSED_VARS_NDEBUG(ob);
- SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em);
+ float lpmat[4][4];
+ mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
float dist_px_sq = SQUARE(*dist_px);
- {
- float min[3], max[3];
- mul_v3_m4v3(min, obmat, sod->min);
- mul_v3_m4v3(max, obmat, sod->max);
-
- /* In vertex and edges you need to get the pixel distance from ray to BoundBox, see: T46099, T46816 */
- struct DistProjectedAABBPrecalc data_precalc;
- dist_squared_to_projected_aabb_precalc(
- &data_precalc, snapdata->pmat, snapdata->win_size, snapdata->mval);
-
- bool dummy[3];
- float bb_dist_px_sq = dist_squared_to_projected_aabb(
- &data_precalc, min, max, dummy);
-
- if (bb_dist_px_sq > dist_px_sq) {
- return 0;
- }
+ /* Test BoundBox */
+ BoundBox *bb = BKE_mesh_texspace_get(em->ob->data, NULL, NULL, NULL);
+ if (bb && !snap_bound_box_check_dist(bb, lpmat, snapdata->win_size, snapdata->mval, dist_px_sq)) {
+ return 0;
}
+ SnapObjectData_EditMesh *sod = snap_object_data_editmesh_get(sctx, em);
+
BVHCache *em_bvh_cache = ((Mesh *)em->ob->data)->runtime.bvh_cache;
if (snapdata->snap_to_flag & SCE_SNAP_MODE_VERTEX) {
@@ -2161,8 +2132,7 @@ static short snapEditMesh(
int last_index = nearest.index;
short elem = SCE_SNAP_MODE_VERTEX;
- float lpmat[4][4], tobmat[4][4], clip_planes_local[MAX_CLIPPLANE_LEN][4];
- mul_m4_m4m4(lpmat, snapdata->pmat, obmat);
+ float tobmat[4][4], clip_planes_local[MAX_CLIPPLANE_LEN][4];
transpose_m4_m4(tobmat, obmat);
for (int i = snapdata->clip_plane_len; i--;) {
diff --git a/source/blender/editors/uvedit/uvedit_smart_stitch.c b/source/blender/editors/uvedit/uvedit_smart_stitch.c
index c358cffa0b4..ffdd371dfdb 100644
--- a/source/blender/editors/uvedit/uvedit_smart_stitch.c
+++ b/source/blender/editors/uvedit/uvedit_smart_stitch.c
@@ -2549,18 +2549,6 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event)
return OPERATOR_CANCELLED;
case LEFTMOUSE:
- if (event->shift && (U.flag & USER_LMOUSESELECT)) {
- if (event->val == KM_PRESS) {
- StitchState *selected_state = stitch_select(C, scene, event, ssc);
-
- if (selected_state && !stitch_process_data(ssc, selected_state, scene, false)) {
- stitch_cancel(C, op);
- return OPERATOR_CANCELLED;
- }
- }
- break;
- }
- ATTR_FALLTHROUGH;
case PADENTER:
case RETKEY:
if (event->val == KM_PRESS) {
@@ -2658,7 +2646,7 @@ static int stitch_modal(bContext *C, wmOperator *op, const wmEvent *event)
stitch_cancel(C, op);
return OPERATOR_CANCELLED;
}
- if (event->val == KM_PRESS && !(U.flag & USER_LMOUSESELECT)) {
+ if (event->val == KM_PRESS) {
StitchState *selected_state = stitch_select(C, scene, event, ssc);
if (selected_state && !stitch_process_data(ssc, selected_state, scene, false)) {
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
index 69a48a2c93b..55728ca581f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarmature.c
@@ -203,4 +203,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Armature = {
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
index 0d0ce7476b9..553d9087c3f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilarray.c
@@ -315,6 +315,13 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
}
+static int getDuplicationFactor(GpencilModifierData *md)
+{
+ ArrayGpencilModifierData *mmd = (ArrayGpencilModifierData *)md;
+ int t = mmd->count;
+ CLAMP_MIN(t, 1);
+ return t;
+}
GpencilModifierTypeInfo modifierType_Gpencil_Array = {
/* name */ "Array",
@@ -338,4 +345,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Array = {
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ getDuplicationFactor,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
index e2a257fcb43..ba814c8538a 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilbuild.c
@@ -553,4 +553,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Build = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
index 4c1418fe0e3..94c5e9ddbdf 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilcolor.c
@@ -164,4 +164,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Color = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
index 1ec6103939a..97f260f307f 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilhook.c
@@ -353,4 +353,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Hook = {
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
index d9ec81b70b9..1d8f2c20b59 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencillattice.c
@@ -211,4 +211,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Lattice = {
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
index 9c3d3dc9235..7599e7e9bce 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilmirror.c
@@ -189,6 +189,21 @@ static void foreachObjectLink(
walk(userData, ob, &mmd->object, IDWALK_CB_NOP);
}
+static int getDuplicationFactor(GpencilModifierData *md)
+{
+ MirrorGpencilModifierData *mmd = (MirrorGpencilModifierData *)md;
+ int factor = 1;
+ /* create a duplication for each axis */
+ for (int xi = 0; xi < 3; ++xi) {
+ if (mmd->flag & (GP_MIRROR_AXIS_X << xi)) {
+ factor++;
+ }
+ }
+ CLAMP_MIN(factor, 1);
+
+ return factor;
+}
+
GpencilModifierTypeInfo modifierType_Gpencil_Mirror = {
/* name */ "Mirror",
/* structName */ "MirrorGpencilModifierData",
@@ -211,4 +226,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Mirror = {
/* foreachObjectLink */ foreachObjectLink,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ getDuplicationFactor,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
index 399ff27eafb..097b5702721 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilnoise.c
@@ -285,4 +285,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Noise = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
index 43af4b94c15..2c2a5c2f994 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciloffset.c
@@ -143,4 +143,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Offset = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
index b89c3792455..7033b246e1c 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilopacity.c
@@ -183,4 +183,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Opacity = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
index 2d0b90e6de7..6ddf40df6c0 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsimplify.c
@@ -123,4 +123,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Simplify = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
index 8d93980a9d0..ece7ebc9816 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsmooth.c
@@ -150,4 +150,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Smooth = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
index 38aa4159632..71881de50fc 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilsubdiv.c
@@ -97,6 +97,14 @@ static void bakeModifier(
}
}
+static int getDuplicationFactor(GpencilModifierData *md)
+{
+ SubdivGpencilModifierData *mmd = (SubdivGpencilModifierData *)md;
+ int t = (mmd->level + 1) * (mmd->level + 1);
+ CLAMP_MIN(t, 2);
+ return t;
+}
+
GpencilModifierTypeInfo modifierType_Gpencil_Subdiv = {
/* name */ "Subdivision",
/* structName */ "SubdivGpencilModifierData",
@@ -119,4 +127,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Subdiv = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ getDuplicationFactor,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
index 4c44559f36e..441cab909d3 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpencilthick.c
@@ -53,7 +53,7 @@ static void initData(GpencilModifierData *md)
{
ThickGpencilModifierData *gpmd = (ThickGpencilModifierData *)md;
gpmd->pass_index = 0;
- gpmd->thickness = 0;
+ gpmd->thickness = 2;
gpmd->layername[0] = '\0';
gpmd->vgname[0] = '\0';
gpmd->curve_thickness = curvemapping_add(1, 0.0f, 0.0f, 1.0f, 1.0f);
@@ -171,4 +171,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Thick = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
index e220d5a5e85..d90dea91af9 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltime.c
@@ -187,4 +187,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Time = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
index ba3b2d84861..385296c943e 100644
--- a/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
+++ b/source/blender/gpencil_modifiers/intern/MOD_gpenciltint.c
@@ -172,4 +172,5 @@ GpencilModifierTypeInfo modifierType_Gpencil_Tint = {
/* foreachObjectLink */ NULL,
/* foreachIDLink */ NULL,
/* foreachTexLink */ NULL,
+ /* getDuplicationFactor */ NULL,
};
diff --git a/source/blender/gpu/GPU_immediate_util.h b/source/blender/gpu/GPU_immediate_util.h
index 7baf359c52e..e5b259b4783 100644
--- a/source/blender/gpu/GPU_immediate_util.h
+++ b/source/blender/gpu/GPU_immediate_util.h
@@ -33,6 +33,7 @@ void immRectf(uint pos, float x1, float y1, float x2, float y2);
void immRecti(uint pos, int x1, int y1, int x2, int y2);
/* Same as immRectf/immRecti but does not call immBegin/immEnd. To use with GPU_PRIM_TRIS. */
+void immRectf_fast(uint pos, float x1, float y1, float x2, float y2);
void immRectf_fast_with_color(uint pos, uint col, float x1, float y1, float x2, float y2, const float color[4]);
void immRecti_fast_with_color(uint pos, uint col, int x1, int y1, int x2, int y2, const float color[4]);
diff --git a/source/blender/gpu/intern/gpu_immediate_util.c b/source/blender/gpu/intern/gpu_immediate_util.c
index 983c70281a2..5cba0c42ee3 100644
--- a/source/blender/gpu/intern/gpu_immediate_util.c
+++ b/source/blender/gpu/intern/gpu_immediate_util.c
@@ -87,6 +87,17 @@ void immRecti(uint pos, int x1, int y1, int x2, int y2)
immEnd();
}
+void immRectf_fast(uint pos, float x1, float y1, float x2, float y2)
+{
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y1);
+ immVertex2f(pos, x2, y2);
+
+ immVertex2f(pos, x1, y1);
+ immVertex2f(pos, x2, y2);
+ immVertex2f(pos, x1, y2);
+}
+
void immRectf_fast_with_color(uint pos, uint col, float x1, float y1, float x2, float y2, const float color[4])
{
immAttr4fv(col, color);
diff --git a/source/blender/gpu/shaders/gpu_shader_material.glsl b/source/blender/gpu/shaders/gpu_shader_material.glsl
index ae6ea7eefa2..6c7c8f24f51 100644
--- a/source/blender/gpu/shaders/gpu_shader_material.glsl
+++ b/source/blender/gpu/shaders/gpu_shader_material.glsl
@@ -141,26 +141,16 @@ void linearrgb_to_srgb(vec4 col_from, out vec4 col_to)
col_to.a = col_from.a;
}
-void color_to_normal(vec3 color, out vec3 normal)
-{
- normal.x = 2.0 * ((color.r) - 0.5);
- normal.y = -2.0 * ((color.g) - 0.5);
- normal.z = 2.0 * ((color.b) - 0.5);
-}
-
void color_to_normal_new_shading(vec3 color, out vec3 normal)
{
- normal.x = 2.0 * ((color.r) - 0.5);
- normal.y = 2.0 * ((color.g) - 0.5);
- normal.z = 2.0 * ((color.b) - 0.5);
+ normal = vec3(2.0) * color - vec3(1.0);
}
void color_to_blender_normal_new_shading(vec3 color, out vec3 normal)
{
- normal.x = 2.0 * ((color.r) - 0.5);
- normal.y = -2.0 * ((color.g) - 0.5);
- normal.z = -2.0 * ((color.b) - 0.5);
+ normal = vec3(2.0, -2.0, -2.0) * color - vec3(1.0);
}
+
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
@@ -812,6 +802,19 @@ void mix_linear(float fac, vec4 col1, vec4 col2, out vec4 outcol)
outcol = col1 + fac * (2.0 * (col2 - vec4(0.5)));
}
+void valtorgb_opti_constant(float fac, float edge, vec4 color1, vec4 color2, out vec4 outcol, out float outalpha)
+{
+ outcol = (fac > edge) ? color2 : color1;
+ outalpha = outcol.a;
+}
+
+void valtorgb_opti_linear(float fac, vec2 mulbias, vec4 color1, vec4 color2, out vec4 outcol, out float outalpha)
+{
+ fac = clamp(fac * mulbias.x + mulbias.y, 0.0, 1.0);
+ outcol = mix(color1, color2, fac);
+ outalpha = outcol.a;
+}
+
void valtorgb(float fac, sampler1DArray colormap, float layer, out vec4 outcol, out float outalpha)
{
outcol = texture(colormap, vec2(fac, layer));
diff --git a/source/blender/makesdna/DNA_gpencil_types.h b/source/blender/makesdna/DNA_gpencil_types.h
index 503ad2f28d9..8a1bccc6957 100644
--- a/source/blender/makesdna/DNA_gpencil_types.h
+++ b/source/blender/makesdna/DNA_gpencil_types.h
@@ -236,10 +236,7 @@ typedef enum eGPDframe_Flag {
/* Runtime temp data for bGPDlayer */
typedef struct bGPDlayer_Runtime {
- struct bGPDframe *derived_array;/* runtime data created by modifiers */
int icon_id; /* id for dynamic icon used to show annotation color preview for layer */
- int batch_index; /* batch used for dupli instances */
- int len_derived; /* len of the derived array */
char pad_[4];
} bGPDlayer_Runtime;
diff --git a/source/blender/makesdna/DNA_layer_types.h b/source/blender/makesdna/DNA_layer_types.h
index 3dcd31fbd7b..e363c0c54b2 100644
--- a/source/blender/makesdna/DNA_layer_types.h
+++ b/source/blender/makesdna/DNA_layer_types.h
@@ -123,7 +123,8 @@ enum {
enum {
LAYER_COLLECTION_HAS_OBJECTS = (1 << 0),
LAYER_COLLECTION_HAS_VISIBLE_OBJECTS = (1 << 1),
- LAYER_COLLECTION_HAS_ENABLED_OBJECTS = (1 << 2),
+ LAYER_COLLECTION_HAS_HIDDEN_OBJECTS = (1 << 2),
+ LAYER_COLLECTION_HAS_ENABLED_OBJECTS = (1 << 3),
};
/* ViewLayer->flag */
diff --git a/source/blender/makesdna/DNA_modifier_types.h b/source/blender/makesdna/DNA_modifier_types.h
index 4eb9f890be0..c5045caec9c 100644
--- a/source/blender/makesdna/DNA_modifier_types.h
+++ b/source/blender/makesdna/DNA_modifier_types.h
@@ -313,14 +313,20 @@ typedef struct MirrorModifierData {
/* MirrorModifierData->flag */
enum {
- MOD_MIR_CLIPPING = (1 << 0),
- MOD_MIR_MIRROR_U = (1 << 1),
- MOD_MIR_MIRROR_V = (1 << 2),
- MOD_MIR_AXIS_X = (1 << 3),
- MOD_MIR_AXIS_Y = (1 << 4),
- MOD_MIR_AXIS_Z = (1 << 5),
- MOD_MIR_VGROUP = (1 << 6),
- MOD_MIR_NO_MERGE = (1 << 7),
+ MOD_MIR_CLIPPING = (1 << 0),
+ MOD_MIR_MIRROR_U = (1 << 1),
+ MOD_MIR_MIRROR_V = (1 << 2),
+ MOD_MIR_AXIS_X = (1 << 3),
+ MOD_MIR_AXIS_Y = (1 << 4),
+ MOD_MIR_AXIS_Z = (1 << 5),
+ MOD_MIR_VGROUP = (1 << 6),
+ MOD_MIR_NO_MERGE = (1 << 7),
+ MOD_MIR_BISECT_AXIS_X = (1 << 8),
+ MOD_MIR_BISECT_AXIS_Y = (1 << 9),
+ MOD_MIR_BISECT_AXIS_Z = (1 << 10),
+ MOD_MIR_BISECT_FLIP_AXIS_X = (1 << 11),
+ MOD_MIR_BISECT_FLIP_AXIS_Y = (1 << 12),
+ MOD_MIR_BISECT_FLIP_AXIS_Z = (1 << 13),
};
typedef struct EdgeSplitModifierData {
diff --git a/source/blender/makesdna/DNA_object_types.h b/source/blender/makesdna/DNA_object_types.h
index fca6a8767be..22b878ebac6 100644
--- a/source/blender/makesdna/DNA_object_types.h
+++ b/source/blender/makesdna/DNA_object_types.h
@@ -127,6 +127,11 @@ typedef struct ObjectDisplay {
int flag;
} ObjectDisplay;
+/* Forward declaration for cache bbone deformation information.
+ *
+ * TODO(sergey): Consider moving it to more appropriate place. */
+struct ObjectBBoneDeform;
+
/* Not saved in file! */
typedef struct Object_Runtime {
/* Original mesh pointer, before object->data was changed to point
@@ -149,6 +154,8 @@ typedef struct Object_Runtime {
/* Runtime grease pencil drawing data */
struct GpencilBatchCache *gpencil_cache;
+
+ struct ObjectBBoneDeform *cached_bbone_deformation;
} Object_Runtime;
typedef struct Object {
@@ -608,6 +615,7 @@ enum {
enum {
OB_EMPTY_IMAGE_VISIBLE_PERSPECTIVE = 1 << 0,
OB_EMPTY_IMAGE_VISIBLE_ORTHOGRAPHIC = 1 << 1,
+ OB_EMPTY_IMAGE_VISIBLE_BACKSIDE = 1 << 2,
};
#define MAX_DUPLI_RECUR 8
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 3d352d4540f..029e8765c8d 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -959,28 +959,28 @@ enum {
/* ------------------------------------------- */
/* GPencil Stroke Sculpting */
-/* GP_BrushEdit_Settings.brushtype */
-typedef enum eGP_EditBrush_Types {
- GP_EDITBRUSH_TYPE_SMOOTH = 0,
- GP_EDITBRUSH_TYPE_THICKNESS = 1,
- GP_EDITBRUSH_TYPE_STRENGTH = 2,
- GP_EDITBRUSH_TYPE_GRAB = 3,
- GP_EDITBRUSH_TYPE_PUSH = 4,
- GP_EDITBRUSH_TYPE_TWIST = 5,
- GP_EDITBRUSH_TYPE_PINCH = 6,
- GP_EDITBRUSH_TYPE_RANDOMIZE = 7,
- GP_EDITBRUSH_TYPE_CLONE = 8,
- GP_EDITBRUSH_TYPE_SUBDIVIDE = 9,
- GP_EDITBRUSH_TYPE_SIMPLIFY = 10,
+/* GP_Sculpt_Settings.brushtype */
+typedef enum eGP_Sculpt_Types {
+ GP_SCULPT_TYPE_SMOOTH = 0,
+ GP_SCULPT_TYPE_THICKNESS = 1,
+ GP_SCULPT_TYPE_STRENGTH = 2,
+ GP_SCULPT_TYPE_GRAB = 3,
+ GP_SCULPT_TYPE_PUSH = 4,
+ GP_SCULPT_TYPE_TWIST = 5,
+ GP_SCULPT_TYPE_PINCH = 6,
+ GP_SCULPT_TYPE_RANDOMIZE = 7,
+ GP_SCULPT_TYPE_CLONE = 8,
+ GP_SCULPT_TYPE_SUBDIVIDE = 9,
+ GP_SCULPT_TYPE_SIMPLIFY = 10,
/* add any sculpt brush above this value */
- GP_EDITBRUSH_TYPE_WEIGHT = 11,
+ GP_SCULPT_TYPE_WEIGHT = 11,
/* add any weight paint brush below this value. Do no mix brushes */
- /* !!! Update GP_EditBrush_Data brush[###]; below !!! */
- GP_EDITBRUSH_TYPE_MAX,
-} eGP_EditBrush_Types;
+ /* !!! Update GP_Sculpt_Data brush[###]; below !!! */
+ GP_SCULPT_TYPE_MAX,
+} eGP_Sculpt_Types;
-/* GP_BrushEdit_Settings.lock_axis */
+/* GP_Sculpt_Settings.lock_axis */
typedef enum eGP_Lockaxis_Types {
GP_LOCKAXIS_VIEW = 0,
GP_LOCKAXIS_X = 1,
@@ -989,73 +989,71 @@ typedef enum eGP_Lockaxis_Types {
} eGP_Lockaxis_Types;
/* Settings for a GPencil Stroke Sculpting Brush */
-typedef struct GP_EditBrush_Data {
+typedef struct GP_Sculpt_Data {
short size; /* radius of brush */
- short flag; /* eGP_EditBrush_Flag */
+ short flag; /* eGP_Sculpt_Flag */
float strength; /* strength of effect */
float curcolor_add[3]; /* cursor color for add */
float curcolor_sub[3]; /* cursor color for sub */
-} GP_EditBrush_Data;
+ float target_weight; /* target weight */
+ char pad_[4];
+} GP_Sculpt_Data;
-/* GP_EditBrush_Data.flag */
-typedef enum eGP_EditBrush_Flag {
+/* GP_Sculpt_Data.flag */
+typedef enum eGP_Sculpt_Flag {
/* invert the effect of the brush */
- GP_EDITBRUSH_FLAG_INVERT = (1 << 0),
+ GP_SCULPT_FLAG_INVERT = (1 << 0),
/* adjust strength using pen pressure */
- GP_EDITBRUSH_FLAG_USE_PRESSURE = (1 << 1),
+ GP_SCULPT_FLAG_USE_PRESSURE = (1 << 1),
/* strength of brush falls off with distance from cursor */
- GP_EDITBRUSH_FLAG_USE_FALLOFF = (1 << 2),
+ GP_SCULPT_FLAG_USE_FALLOFF = (1 << 2),
- /* XXX: currently unused. */
/* smooth brush affects pressure values as well */
- GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE = (1 << 3),
+ GP_SCULPT_FLAG_SMOOTH_PRESSURE = (1 << 3),
/* enable screen cursor */
- GP_EDITBRUSH_FLAG_ENABLE_CURSOR = (1 << 4),
+ GP_SCULPT_FLAG_ENABLE_CURSOR = (1 << 4),
/* temporary invert action */
- GP_EDITBRUSH_FLAG_TMP_INVERT = (1 << 5),
+ GP_SCULPT_FLAG_TMP_INVERT = (1 << 5),
/* adjust radius using pen pressure */
- GP_EDITBRUSH_FLAG_PRESSURE_RADIUS = (1 << 6),
-} eGP_EditBrush_Flag;
-
-
+ GP_SCULPT_FLAG_PRESSURE_RADIUS = (1 << 6),
+} eGP_Sculpt_Flag;
/* GPencil Stroke Sculpting Settings */
-typedef struct GP_BrushEdit_Settings {
- GP_EditBrush_Data brush[12]; /* GP_EDITBRUSH_TYPE_MAX */
+typedef struct GP_Sculpt_Settings {
+ GP_Sculpt_Data brush[12]; /* GP_SCULPT_TYPE_MAX */
void *paintcursor; /* runtime */
- int brushtype; /* eGP_EditBrush_Types (sculpt) */
- int flag; /* eGP_BrushEdit_SettingsFlag */
+ int brushtype; /* eGP_Sculpt_Types (sculpt) */
+ int flag; /* eGP_Sculpt_SettingsFlag */
int lock_axis; /* eGP_Lockaxis_Types lock drawing to one axis */
char pad1[4];
/* weight paint is a submode of sculpt but use its own index. All weight paint
* brushes must be defined at the end of the brush array.
*/
- int weighttype; /* eGP_EditBrush_Types (weight paint) */
+ int weighttype; /* eGP_Sculpt_Types (weight paint) */
char pad[4];
struct CurveMapping *cur_falloff; /* multiframe edit falloff effect by frame */
-} GP_BrushEdit_Settings;
+} GP_Sculpt_Settings;
-/* GP_BrushEdit_Settings.flag */
-typedef enum eGP_BrushEdit_SettingsFlag {
+/* GP_Sculpt_Settings.flag */
+typedef enum eGP_Sculpt_SettingsFlag {
/* only affect selected points */
- GP_BRUSHEDIT_FLAG_SELECT_MASK = (1 << 0),
+ GP_SCULPT_SETT_FLAG_SELECT_MASK = (1 << 0),
/* apply brush to position */
- GP_BRUSHEDIT_FLAG_APPLY_POSITION = (1 << 1),
+ GP_SCULPT_SETT_FLAG_APPLY_POSITION = (1 << 1),
/* apply brush to strength */
- GP_BRUSHEDIT_FLAG_APPLY_STRENGTH = (1 << 2),
+ GP_SCULPT_SETT_FLAG_APPLY_STRENGTH = (1 << 2),
/* apply brush to thickness */
- GP_BRUSHEDIT_FLAG_APPLY_THICKNESS = (1 << 3),
+ GP_SCULPT_SETT_FLAG_APPLY_THICKNESS = (1 << 3),
/* apply brush to thickness */
- GP_BRUSHEDIT_FLAG_WEIGHT_MODE = (1 << 4),
+ GP_SCULPT_SETT_FLAG_WEIGHT_MODE = (1 << 4),
/* enable falloff for multiframe editing */
- GP_BRUSHEDIT_FLAG_FRAME_FALLOFF = (1 << 5),
+ GP_SCULPT_SETT_FLAG_FRAME_FALLOFF = (1 << 5),
/* apply brush to uv data */
- GP_BRUSHEDIT_FLAG_APPLY_UV = (1 << 6),
-} eGP_BrushEdit_SettingsFlag;
-
+ GP_SCULPT_SETT_FLAG_APPLY_UV = (1 << 6),
+} eGP_Sculpt_SettingsFlag;
/* Settings for GP Interpolation Operators */
typedef struct GP_Interpolate_Settings {
@@ -1311,7 +1309,7 @@ typedef struct ToolSettings {
short gpencil_selectmode; /* stroke selection mode */
/* Grease Pencil Sculpt */
- struct GP_BrushEdit_Settings gp_sculpt;
+ struct GP_Sculpt_Settings gp_sculpt;
/* Grease Pencil Interpolation Tool(s) */
struct GP_Interpolate_Settings gp_interpolate;
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 512481a75b5..c9d16351635 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -541,7 +541,9 @@ typedef struct UserDef {
* which are outside the scope of typical preferences. */
short app_flag;
short language;
- short userpref, viewzoom;
+ short userpref;
+ char userpref_flag;
+ char viewzoom;
int mixbufsize;
int audiodevice;
@@ -568,8 +570,8 @@ typedef struct UserDef {
struct ListBase themes;
struct ListBase uifonts;
struct ListBase uistyles;
- struct ListBase keymaps DNA_DEPRECATED; /* deprecated in favor of user_keymaps */
struct ListBase user_keymaps;
+ struct ListBase user_keyconfig_prefs; /* wmKeyConfigPref. */
struct ListBase addons;
struct ListBase autoexec_paths;
struct ListBase user_menus; /* bUserMenu */
@@ -616,6 +618,9 @@ typedef struct UserDef {
short anisotropic_filter;
short use_16bit_textures, use_gpu_mipmap;
+ float pressure_threshold_max; /* raw tablet pressure that maps to 100% */
+ float pressure_softness; /* curve non-linearity parameter */
+
float ndof_sensitivity; /* overall sensitivity of 3D mouse */
float ndof_orbit_sensitivity;
float ndof_deadzone; /* deadzone of 3D mouse */
@@ -684,6 +689,12 @@ typedef enum eUserPref_Section {
USER_SECTION_LIGHT = 7,
} eUserPref_Section;
+/* UserDef.userpref_flag (State of the user preferences UI). */
+typedef enum eUserPref_SectionFlag {
+ /* Hide/expand keymap preferences. */
+ USER_SECTION_INPUT_HIDE_UI_KEYCONFIG = (1 << 0),
+} eUserPref_SectionFlag;
+
/* UserDef.flag */
typedef enum eUserPref_Flag {
USER_AUTOSAVE = (1 << 0),
@@ -700,7 +711,7 @@ typedef enum eUserPref_Flag {
USER_TOOLTIPS = (1 << 11),
USER_TWOBUTTONMOUSE = (1 << 12),
USER_NONUMPAD = (1 << 13),
- USER_LMOUSESELECT = (1 << 14),
+ USER_FLAG_DEPRECATED_14 = (1 << 14), /* cleared */
USER_FILECOMPRESS = (1 << 15),
USER_SAVE_PREVIEWS = (1 << 16),
USER_CUSTOM_RANGE = (1 << 17),
diff --git a/source/blender/makesdna/DNA_windowmanager_types.h b/source/blender/makesdna/DNA_windowmanager_types.h
index e51933f5a22..1fdd4d10586 100644
--- a/source/blender/makesdna/DNA_windowmanager_types.h
+++ b/source/blender/makesdna/DNA_windowmanager_types.h
@@ -171,6 +171,8 @@ enum {
WM_KEYCONFIG_IS_INITIALIZED = (1<<1),
};
+#define WM_KEYCONFIG_STR_DEFAULT "blender"
+
/* IME is win32 only! */
#ifndef WIN32
# ifdef __GNUC__
@@ -348,6 +350,19 @@ enum {
KEYMAP_TOOL = (1 << 7), /* keymap for active tool system */
};
+/**
+ * This is similar to addon-preferences,
+ * however unlike add-ons key-config's aren't saved to disk.
+ *
+ * #wmKeyConfigPref is written to DNA,
+ * #wmKeyConfigPrefType_Runtime has the RNA type.
+ */
+typedef struct wmKeyConfigPref {
+ struct wmKeyConfigPref *next, *prev;
+ char idname[64]; /* unique name */
+ IDProperty *prop;
+} wmKeyConfigPref;
+
typedef struct wmKeyConfig {
struct wmKeyConfig *next, *prev;
@@ -355,13 +370,15 @@ typedef struct wmKeyConfig {
char basename[64]; /* idname of configuration this is derives from, "" if none */
ListBase keymaps;
- int actkeymap, flag;
+ int actkeymap;
+ short flag;
+ char _pad0[2];
} wmKeyConfig;
/* wmKeyConfig.flag */
enum {
KEYCONF_USER = (1 << 1), /* And what about (1 << 0)? */
- KEYCONF_INIT_DEFAULT = (1 << 2),
+ KEYCONF_INIT_DEFAULT = (1 << 2), /* Has default keymap been initialized? */
};
/* this one is the operator itself, stored in files for macros etc */
diff --git a/source/blender/makesrna/RNA_access.h b/source/blender/makesrna/RNA_access.h
index a74479e193c..f540930b1d5 100644
--- a/source/blender/makesrna/RNA_access.h
+++ b/source/blender/makesrna/RNA_access.h
@@ -307,6 +307,7 @@ extern StructRNA RNA_Itasc;
extern StructRNA RNA_JoystickSensor;
extern StructRNA RNA_Key;
extern StructRNA RNA_KeyConfig;
+extern StructRNA RNA_KeyConfigPreferences;
extern StructRNA RNA_KeyMap;
extern StructRNA RNA_KeyMapItem;
extern StructRNA RNA_KeyMapItems;
diff --git a/source/blender/makesrna/intern/rna_access.c b/source/blender/makesrna/intern/rna_access.c
index a0ceb6ce66a..cb6f62d35eb 100644
--- a/source/blender/makesrna/intern/rna_access.c
+++ b/source/blender/makesrna/intern/rna_access.c
@@ -2084,7 +2084,7 @@ static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerR
prop->update(bmain, scene, ptr);
}
-#if 0
+#if 1
/* TODO(campbell): Should eventually be replaced entirely by message bus (below)
* for now keep since COW, bugs are hard to track when we have other missing updates. */
if (prop->noteflag) {
diff --git a/source/blender/makesrna/intern/rna_brush.c b/source/blender/makesrna/intern/rna_brush.c
index fc443f6c2fc..d9b9677bbc6 100644
--- a/source/blender/makesrna/intern/rna_brush.c
+++ b/source/blender/makesrna/intern/rna_brush.c
@@ -117,7 +117,7 @@ const EnumPropertyItem rna_enum_brush_image_tool_items[] = {
};
const EnumPropertyItem rna_enum_brush_gpencil_types_items[] = {
- {GPAINT_TOOL_DRAW, "DRAW", ICON_GP_STROKE, "Draw", "The brush is of type used for drawing strokes"},
+ {GPAINT_TOOL_DRAW, "DRAW", ICON_STROKE, "Draw", "The brush is of type used for drawing strokes"},
{GPAINT_TOOL_FILL, "FILL", ICON_COLOR, "Fill", "The brush is of type used for filling areas"},
{GPAINT_TOOL_ERASE, "ERASE", ICON_PANEL_CLOSE, "Erase", "The brush is used for erasing strokes"},
{0, NULL, 0, NULL, NULL}
diff --git a/source/blender/makesrna/intern/rna_camera.c b/source/blender/makesrna/intern/rna_camera.c
index 60c68bc7214..1e68ab65965 100644
--- a/source/blender/makesrna/intern/rna_camera.c
+++ b/source/blender/makesrna/intern/rna_camera.c
@@ -233,7 +233,7 @@ static void rna_def_camera_background_image(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_EXPANDED);
RNA_def_property_ui_text(prop, "Show Expanded", "Show the expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
prop = RNA_def_property(srna, "use_camera_clip", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", CAM_BGIMG_FLAG_CAMERACLIP);
diff --git a/source/blender/makesrna/intern/rna_constraint.c b/source/blender/makesrna/intern/rna_constraint.c
index 898852739eb..4116dd5753f 100644
--- a/source/blender/makesrna/intern/rna_constraint.c
+++ b/source/blender/makesrna/intern/rna_constraint.c
@@ -2648,7 +2648,7 @@ void RNA_def_constraint(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", CONSTRAINT_EXPAND);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Expanded", "Constraint's panel is expanded in UI");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
/* XXX this is really an internal flag, but it may be useful for some tools to be able to access this... */
prop = RNA_def_property(srna, "is_valid", PROP_BOOLEAN, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_dynamicpaint.c b/source/blender/makesrna/intern/rna_dynamicpaint.c
index d24be434ea1..523a4e4ad6e 100644
--- a/source/blender/makesrna/intern/rna_dynamicpaint.c
+++ b/source/blender/makesrna/intern/rna_dynamicpaint.c
@@ -775,8 +775,8 @@ static void rna_def_dynamic_paint_brush_settings(BlenderRNA *brna)
/* paint collision type */
static const EnumPropertyItem prop_dynamicpaint_collisiontype[] = {
{MOD_DPAINT_COL_PSYS, "PARTICLE_SYSTEM", ICON_PARTICLES, "Particle System", ""},
- {MOD_DPAINT_COL_POINT, "POINT", ICON_META_EMPTY, "Object Center", ""},
- {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_META_EMPTY, "Proximity", ""},
+ {MOD_DPAINT_COL_POINT, "POINT", ICON_EMPTY_AXIS, "Object Center", ""},
+ {MOD_DPAINT_COL_DIST, "DISTANCE", ICON_DRIVER_DISTANCE, "Proximity", ""},
{MOD_DPAINT_COL_VOLDIST, "VOLUME_DISTANCE", ICON_META_CUBE, "Mesh Volume + Proximity", ""},
{MOD_DPAINT_COL_VOLUME, "VOLUME", ICON_MESH_CUBE, "Mesh Volume", ""},
{0, NULL, 0, NULL, NULL}
diff --git a/source/blender/makesrna/intern/rna_fcurve.c b/source/blender/makesrna/intern/rna_fcurve.c
index b4715075624..ef573079116 100644
--- a/source/blender/makesrna/intern/rna_fcurve.c
+++ b/source/blender/makesrna/intern/rna_fcurve.c
@@ -1395,7 +1395,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "F-Curve Modifier's panel is expanded in UI");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
prop = RNA_def_property(srna, "mute", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_MUTED);
@@ -1424,7 +1424,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
"F-Curve Modifier is only applied for the specified frame range to help "
"mask off effects in order to chain them");
RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, "rna_FModifier_update");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); /* XXX: depends on UI implementation */
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* XXX: depends on UI implementation */
prop = RNA_def_property(srna, "frame_start", PROP_FLOAT, PROP_NONE);
RNA_def_property_float_sdna(prop, NULL, "sfra");
@@ -1457,7 +1457,7 @@ static void rna_def_fmodifier(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "flag", FMODIFIER_FLAG_USEINFLUENCE);
RNA_def_property_ui_text(prop, "Use Influence", "F-Curve Modifier's effects will be tempered by a default factor");
RNA_def_property_update(prop, NC_ANIMATION | ND_KEYFRAME_PROP, "rna_FModifier_update");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1); /* XXX: depends on UI implementation */
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1); /* XXX: depends on UI implementation */
prop = RNA_def_property(srna, "influence", PROP_FLOAT, PROP_FACTOR);
RNA_def_property_float_sdna(prop, NULL, "influence");
diff --git a/source/blender/makesrna/intern/rna_gpencil_modifier.c b/source/blender/makesrna/intern/rna_gpencil_modifier.c
index aca68992b59..beba47f33b4 100644
--- a/source/blender/makesrna/intern/rna_gpencil_modifier.c
+++ b/source/blender/makesrna/intern/rna_gpencil_modifier.c
@@ -1628,7 +1628,7 @@ void RNA_def_greasepencil_modifier(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "mode", eGpencilModifierMode_Expanded);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
/* types */
rna_def_modifier_gpencilnoise(brna);
diff --git a/source/blender/makesrna/intern/rna_layer.c b/source/blender/makesrna/intern/rna_layer.c
index ffa48df010d..46d1f5bef7d 100644
--- a/source/blender/makesrna/intern/rna_layer.c
+++ b/source/blender/makesrna/intern/rna_layer.c
@@ -232,6 +232,16 @@ static bool rna_LayerCollection_has_visible_objects(LayerCollection *lc, ViewLay
return true;
}
+static bool rna_LayerCollection_has_hidden_objects(LayerCollection *lc, ViewLayer *view_layer)
+{
+ if ((view_layer->runtime_flag & VIEW_LAYER_HAS_HIDE) &&
+ (lc->runtime_flag & LAYER_COLLECTION_HAS_HIDDEN_OBJECTS))
+ {
+ return true;
+ }
+ return false;
+}
+
static bool rna_LayerCollection_has_selected_objects(LayerCollection *lc, ViewLayer *view_layer)
{
return BKE_layer_collection_has_selected_objects(view_layer, lc);
@@ -297,6 +307,12 @@ static void rna_def_layer_collection(BlenderRNA *brna)
RNA_def_parameter_flags(prop, 0, PARM_REQUIRED);
RNA_def_function_return(func, RNA_def_boolean(func, "result", 0, "", ""));
+ func = RNA_def_function(srna, "has_hidden_objects", "rna_LayerCollection_has_hidden_objects");
+ RNA_def_function_ui_description(func, "");
+ prop = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "ViewLayer the layer collection belongs to");
+ RNA_def_parameter_flags(prop, 0, PARM_REQUIRED);
+ RNA_def_function_return(func, RNA_def_boolean(func, "result", 0, "", ""));
+
func = RNA_def_function(srna, "has_selected_objects", "rna_LayerCollection_has_selected_objects");
RNA_def_function_ui_description(func, "");
prop = RNA_def_pointer(func, "view_layer", "ViewLayer", "", "ViewLayer the layer collection belongs to");
diff --git a/source/blender/makesrna/intern/rna_modifier.c b/source/blender/makesrna/intern/rna_modifier.c
index b633dd907ae..2a7bb6c1533 100644
--- a/source/blender/makesrna/intern/rna_modifier.c
+++ b/source/blender/makesrna/intern/rna_modifier.c
@@ -1541,19 +1541,22 @@ static void rna_def_modifier_mirror(BlenderRNA *brna)
RNA_def_struct_sdna(srna, "MirrorModifierData");
RNA_def_struct_ui_icon(srna, ICON_MOD_MIRROR);
- prop = RNA_def_property(srna, "use_x", PROP_BOOLEAN, PROP_NONE);
+ prop = RNA_def_property(srna, "use_axis", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_X);
- RNA_def_property_ui_text(prop, "X", "Enable X axis mirror");
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Mirror Axis", "Enable axis mirror");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop = RNA_def_property(srna, "use_y", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Y);
- RNA_def_property_ui_text(prop, "Y", "Enable Y axis mirror");
+ prop = RNA_def_property(srna, "use_bisect_axis", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_BISECT_AXIS_X);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Bisect Axis", "Cuts the mesh across the mirrorplane");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
- prop = RNA_def_property(srna, "use_z", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_AXIS_Z);
- RNA_def_property_ui_text(prop, "Z", "Enable Z axis mirror");
+ prop = RNA_def_property(srna, "use_bisect_flip_axis", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", MOD_MIR_BISECT_FLIP_AXIS_X);
+ RNA_def_property_array(prop, 3);
+ RNA_def_property_ui_text(prop, "Bisect Flip Axis", "Flips the direction of the slice");
RNA_def_property_update(prop, 0, "rna_Modifier_update");
prop = RNA_def_property(srna, "use_clip", PROP_BOOLEAN, PROP_NONE);
@@ -5088,7 +5091,7 @@ void RNA_def_modifier(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_Expanded);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Expanded", "Set modifier expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
prop = RNA_def_property(srna, "use_apply_on_spline", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "mode", eModifierMode_ApplyOnSpline);
diff --git a/source/blender/makesrna/intern/rna_movieclip.c b/source/blender/makesrna/intern/rna_movieclip.c
index aedaeccc0b6..db93518a6c7 100644
--- a/source/blender/makesrna/intern/rna_movieclip.c
+++ b/source/blender/makesrna/intern/rna_movieclip.c
@@ -72,6 +72,12 @@ static void rna_MovieClip_size_get(PointerRNA *ptr, int *values)
values[1] = clip->lastsize[1];
}
+static float rna_MovieClip_fps_get(PointerRNA *ptr)
+{
+ MovieClip *clip = (MovieClip *)ptr->id.data;
+ return BKE_movieclip_get_fps(clip);
+}
+
static void rna_MovieClipUser_proxy_render_settings_update(Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *ptr)
{
ID *id = (ID *) ptr->id.data;
@@ -363,6 +369,12 @@ static void rna_def_movieclip(BlenderRNA *brna)
RNA_def_property_int_sdna(prop, NULL, "len");
RNA_def_property_ui_text(prop, "Duration", "Detected duration of movie clip in frames");
+ /* FPS */
+ prop = RNA_def_property(srna, "fps", PROP_FLOAT, PROP_NONE);
+ RNA_def_property_clear_flag(prop, PROP_EDITABLE);
+ RNA_def_property_float_funcs(prop, "rna_MovieClip_fps_get", NULL, NULL);
+ RNA_def_property_ui_text(prop, "Frame Rate", "Detected frame rate of the movie clip in frames per second");
+
/* color management */
prop = RNA_def_property(srna, "colorspace_settings", PROP_POINTER, PROP_NONE);
RNA_def_property_pointer_sdna(prop, NULL, "colorspace_settings");
diff --git a/source/blender/makesrna/intern/rna_object.c b/source/blender/makesrna/intern/rna_object.c
index 9ac5d73ed93..96def17bc3e 100644
--- a/source/blender/makesrna/intern/rna_object.c
+++ b/source/blender/makesrna/intern/rna_object.c
@@ -99,14 +99,14 @@ const EnumPropertyItem rna_enum_workspace_object_mode_items[] = {
};
const EnumPropertyItem rna_enum_object_empty_drawtype_items[] = {
- {OB_PLAINAXES, "PLAIN_AXES", 0, "Plain Axes", ""},
- {OB_ARROWS, "ARROWS", 0, "Arrows", ""},
- {OB_SINGLE_ARROW, "SINGLE_ARROW", 0, "Single Arrow", ""},
- {OB_CIRCLE, "CIRCLE", 0, "Circle", ""},
- {OB_CUBE, "CUBE", 0, "Cube", ""},
- {OB_EMPTY_SPHERE, "SPHERE", 0, "Sphere", ""},
- {OB_EMPTY_CONE, "CONE", 0, "Cone", ""},
- {OB_EMPTY_IMAGE, "IMAGE", 0, "Image", ""},
+ {OB_PLAINAXES, "PLAIN_AXES", ICON_EMPTY_AXIS, "Plain Axes", ""},
+ {OB_ARROWS, "ARROWS", ICON_EMPTY_ARROWS, "Arrows", ""},
+ {OB_SINGLE_ARROW, "SINGLE_ARROW", ICON_EMPTY_SINGLE_ARROW, "Single Arrow", ""},
+ {OB_CIRCLE, "CIRCLE", ICON_MESH_CIRCLE, "Circle", ""},
+ {OB_CUBE, "CUBE", ICON_CUBE, "Cube", ""},
+ {OB_EMPTY_SPHERE, "SPHERE", ICON_SPHERE, "Sphere", ""},
+ {OB_EMPTY_CONE, "CONE", ICON_CONE, "Cone", ""},
+ {OB_EMPTY_IMAGE, "IMAGE", ICON_FILE_IMAGE, "Image", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -118,8 +118,8 @@ const EnumPropertyItem rna_enum_object_empty_image_depth_items[] = {
};
const EnumPropertyItem rna_enum_object_gpencil_type_items[] = {
- {GP_EMPTY, "EMPTY", ICON_GP_EMPTY, "Blank", "Create an empty grease pencil object"},
- {GP_STROKE, "STROKE", ICON_GP_STROKE, "Stroke", "Create a simple stroke with basic colors"},
+ {GP_EMPTY, "EMPTY", ICON_EMPTY_AXIS, "Blank", "Create an empty grease pencil object"},
+ {GP_STROKE, "STROKE", ICON_STROKE, "Stroke", "Create a simple stroke with basic colors"},
{GP_MONKEY, "MONKEY", ICON_MONKEY, "Monkey", "Construct a Suzanne grease pencil object"},
{0, NULL, 0, NULL, NULL }
};
@@ -2510,6 +2510,11 @@ static void rna_def_object(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Display in Orthographic Mode", "Display image in orthographic mode");
RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+ prop = RNA_def_property(srna, "show_empty_image_backside", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "empty_image_visibility_flag", OB_EMPTY_IMAGE_VISIBLE_BACKSIDE);
+ RNA_def_property_ui_text(prop, "Display Back Side", "Display empty image even when viewed from the back");
+ RNA_def_property_update(prop, NC_OBJECT | ND_DRAW, NULL);
+
/* render */
prop = RNA_def_property(srna, "pass_index", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "index");
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 4791fbdc642..eeb48b67d28 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -2225,7 +2225,7 @@ static void rna_def_tool_settings(BlenderRNA *brna)
{GP_PROJECT_VIEWSPACE, "ORIGIN", ICON_OBJECT_ORIGIN, "Origin", "Draw stroke at Object origin"},
{GP_PROJECT_VIEWSPACE | GP_PROJECT_CURSOR, "CURSOR", ICON_PIVOT_CURSOR, "3D Cursor", "Draw stroke at 3D cursor location" },
{GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_VIEW, "SURFACE", ICON_SNAP_FACE, "Surface", "Stick stroke to surfaces"},
- {GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_STROKE, "STROKE", ICON_GP_STROKE, "Stroke", "Stick stroke to other strokes"},
+ {GP_PROJECT_VIEWSPACE | GP_PROJECT_DEPTH_STROKE, "STROKE", ICON_STROKE, "Stroke", "Stick stroke to other strokes"},
{0, NULL, 0, NULL, NULL}
};
@@ -4872,8 +4872,7 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop = RNA_def_property(srna, "motion_blur_shutter", PROP_FLOAT, PROP_UNSIGNED);
RNA_def_property_float_sdna(prop, NULL, "blurfac");
RNA_def_property_ui_range(prop, 0.01f, 2.0f, 1, 2);
- RNA_def_property_ui_text(prop, "Shutter", "Time taken in frames between shutter open and close "
- "(NOTE: Blender Internal does not support animated shutter)");
+ RNA_def_property_ui_text(prop, "Shutter", "Time taken in frames between shutter open and close");
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, "rna_Scene_glsl_update");
prop = RNA_def_property(srna, "motion_blur_shutter_curve", PROP_POINTER, PROP_NONE);
diff --git a/source/blender/makesrna/intern/rna_sculpt_paint.c b/source/blender/makesrna/intern/rna_sculpt_paint.c
index 953571247f2..d106e2db6eb 100644
--- a/source/blender/makesrna/intern/rna_sculpt_paint.c
+++ b/source/blender/makesrna/intern/rna_sculpt_paint.c
@@ -66,20 +66,20 @@ const EnumPropertyItem rna_enum_particle_edit_hair_brush_items[] = {
};
const EnumPropertyItem rna_enum_gpencil_sculpt_brush_items[] = {
- {GP_EDITBRUSH_TYPE_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", "Smooth stroke points"},
- {GP_EDITBRUSH_TYPE_THICKNESS, "THICKNESS", ICON_GPBRUSH_THICKNESS, "Thickness", "Adjust thickness of strokes"},
- {GP_EDITBRUSH_TYPE_STRENGTH, "STRENGTH", ICON_GPBRUSH_STRENGTH, "Strength", "Adjust color strength of strokes" },
- {GP_EDITBRUSH_TYPE_GRAB, "GRAB", ICON_GPBRUSH_GRAB, "Grab", "Translate the set of points initially within the brush circle" },
- {GP_EDITBRUSH_TYPE_PUSH, "PUSH", ICON_GPBRUSH_PUSH, "Push", "Move points out of the way, as if combing them"},
- {GP_EDITBRUSH_TYPE_TWIST, "TWIST", ICON_GPBRUSH_TWIST, "Twist", "Rotate points around the midpoint of the brush"},
- {GP_EDITBRUSH_TYPE_PINCH, "PINCH", ICON_GPBRUSH_PINCH, "Pinch", "Pull points towards the midpoint of the brush"},
- {GP_EDITBRUSH_TYPE_RANDOMIZE, "RANDOMIZE", ICON_GPBRUSH_RANDOMIZE, "Randomize", "Introduce jitter/randomness into strokes"},
- {GP_EDITBRUSH_TYPE_CLONE, "CLONE", ICON_GPBRUSH_CLONE, "Clone", "Paste copies of the strokes stored on the clipboard"},
+ {GP_SCULPT_TYPE_SMOOTH, "SMOOTH", ICON_GPBRUSH_SMOOTH, "Smooth", "Smooth stroke points"},
+ {GP_SCULPT_TYPE_THICKNESS, "THICKNESS", ICON_GPBRUSH_THICKNESS, "Thickness", "Adjust thickness of strokes"},
+ {GP_SCULPT_TYPE_STRENGTH, "STRENGTH", ICON_GPBRUSH_STRENGTH, "Strength", "Adjust color strength of strokes" },
+ {GP_SCULPT_TYPE_GRAB, "GRAB", ICON_GPBRUSH_GRAB, "Grab", "Translate the set of points initially within the brush circle" },
+ {GP_SCULPT_TYPE_PUSH, "PUSH", ICON_GPBRUSH_PUSH, "Push", "Move points out of the way, as if combing them"},
+ {GP_SCULPT_TYPE_TWIST, "TWIST", ICON_GPBRUSH_TWIST, "Twist", "Rotate points around the midpoint of the brush"},
+ {GP_SCULPT_TYPE_PINCH, "PINCH", ICON_GPBRUSH_PINCH, "Pinch", "Pull points towards the midpoint of the brush"},
+ {GP_SCULPT_TYPE_RANDOMIZE, "RANDOMIZE", ICON_GPBRUSH_RANDOMIZE, "Randomize", "Introduce jitter/randomness into strokes"},
+ {GP_SCULPT_TYPE_CLONE, "CLONE", ICON_GPBRUSH_CLONE, "Clone", "Paste copies of the strokes stored on the clipboard"},
{ 0, NULL, 0, NULL, NULL }
};
const EnumPropertyItem rna_enum_gpencil_weight_brush_items[] = {
- {GP_EDITBRUSH_TYPE_WEIGHT, "WEIGHT", ICON_GPBRUSH_WEIGHT, "Weight", "Weight Paint for Vertex Groups"},
+ {GP_SCULPT_TYPE_WEIGHT, "WEIGHT", ICON_GPBRUSH_WEIGHT, "Weight", "Weight Paint for Vertex Groups"},
{0, NULL, 0, NULL, NULL}
};
@@ -518,15 +518,15 @@ static bool rna_ImaPaint_detect_data(ImagePaintSettings *imapaint)
static PointerRNA rna_GPencilSculptSettings_brush_get(PointerRNA *ptr)
{
- GP_BrushEdit_Settings *gset = (GP_BrushEdit_Settings *)ptr->data;
- GP_EditBrush_Data *brush = NULL;
+ GP_Sculpt_Settings *gset = (GP_Sculpt_Settings *)ptr->data;
+ GP_Sculpt_Data *brush = NULL;
- if ((gset) && (gset->flag & GP_BRUSHEDIT_FLAG_WEIGHT_MODE)) {
- if ((gset->weighttype >= GP_EDITBRUSH_TYPE_WEIGHT) && (gset->weighttype < GP_EDITBRUSH_TYPE_MAX))
+ if ((gset) && (gset->flag & GP_SCULPT_SETT_FLAG_WEIGHT_MODE)) {
+ if ((gset->weighttype >= GP_SCULPT_TYPE_WEIGHT) && (gset->weighttype < GP_SCULPT_TYPE_MAX))
brush = &gset->brush[gset->weighttype];
}
else {
- if ((gset->brushtype >= 0) && (gset->brushtype < GP_EDITBRUSH_TYPE_WEIGHT))
+ if ((gset->brushtype >= 0) && (gset->brushtype < GP_SCULPT_TYPE_WEIGHT))
brush = &gset->brush[gset->brushtype];
}
return rna_pointer_inherit_refine(ptr, &RNA_GPencilSculptBrush, brush);
@@ -1181,7 +1181,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
{
static const EnumPropertyItem prop_direction_items[] = {
{0, "ADD", ICON_ADD, "Add", "Add effect of brush"},
- {GP_EDITBRUSH_FLAG_INVERT, "SUBTRACT", ICON_REMOVE, "Subtract", "Subtract effect of brush"},
+ {GP_SCULPT_FLAG_INVERT, "SUBTRACT", ICON_REMOVE, "Subtract", "Subtract effect of brush"},
{0, NULL, 0, NULL, NULL}};
StructRNA *srna;
@@ -1189,7 +1189,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
/* == Settings == */
srna = RNA_def_struct(brna, "GPencilSculptSettings", NULL);
- RNA_def_struct_sdna(srna, "GP_BrushEdit_Settings");
+ RNA_def_struct_sdna(srna, "GP_Sculpt_Settings");
RNA_def_struct_path_func(srna, "rna_GPencilSculptSettings_path");
RNA_def_struct_ui_text(srna, "GPencil Sculpt Settings", "Properties for Grease Pencil stroke sculpting tool");
@@ -1214,38 +1214,38 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Brush", "");
prop = RNA_def_property(srna, "use_select_mask", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_SELECT_MASK);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_SELECT_MASK);
RNA_def_property_ui_text(prop, "Selection Mask", "Only sculpt selected stroke points");
RNA_def_property_ui_icon(prop, ICON_GP_ONLY_SELECTED, 0);
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_edit_position", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_POSITION);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_POSITION);
RNA_def_property_ui_text(prop, "Affect Position", "The brush affects the position of the point");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_edit_strength", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_STRENGTH);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_STRENGTH);
RNA_def_property_ui_text(prop, "Affect Strength", "The brush affects the color strength of the point");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_edit_thickness", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_THICKNESS);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_THICKNESS);
RNA_def_property_ui_text(prop, "Affect Thickness", "The brush affects the thickness of the point");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_edit_uv", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_APPLY_UV);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_APPLY_UV);
RNA_def_property_ui_text(prop, "Affect UV", "The brush affects the UV rotation of the point");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_multiframe_falloff", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_BRUSHEDIT_FLAG_FRAME_FALLOFF);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_SETT_FLAG_FRAME_FALLOFF);
RNA_def_property_ui_text(prop, "Use Falloff", "Use falloff effect when edit in multiframe mode to compute brush effect by frame");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
@@ -1269,7 +1269,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
/* brush */
srna = RNA_def_struct(brna, "GPencilSculptBrush", NULL);
- RNA_def_struct_sdna(srna, "GP_EditBrush_Data");
+ RNA_def_struct_sdna(srna, "GP_Sculpt_Data");
RNA_def_struct_path_func(srna, "rna_GPencilSculptBrush_path");
RNA_def_struct_ui_text(srna, "GPencil Sculpt Brush", "Stroke editing brush");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
@@ -1287,28 +1287,34 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
+ prop = RNA_def_property(srna, "target_weight", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, 0.0, 1.0);
+ RNA_def_property_ui_text(prop, "Weight", "Target weight");
+ RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
+ RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
+
prop = RNA_def_property(srna, "use_pressure_strength", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_USE_PRESSURE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_USE_PRESSURE);
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Strength Pressure", "Enable tablet pressure sensitivity for strength");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_pressure_radius", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_PRESSURE_RADIUS);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_PRESSURE_RADIUS);
RNA_def_property_ui_icon(prop, ICON_STYLUS_PRESSURE, 0);
RNA_def_property_ui_text(prop, "Radius Pressure", "Enable tablet pressure sensitivity for radius");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_falloff", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_USE_FALLOFF);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_USE_FALLOFF);
RNA_def_property_ui_text(prop, "Use Falloff", "Strength of brush decays with distance from cursor");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
prop = RNA_def_property(srna, "use_edit_pressure", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_SMOOTH_PRESSURE);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_SMOOTH_PRESSURE);
RNA_def_property_ui_text(prop, "Affect Pressure", "Affect pressure values as well when smoothing strokes");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL);
@@ -1341,7 +1347,7 @@ static void rna_def_gpencil_sculpt(BlenderRNA *brna)
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
prop = RNA_def_property(srna, "use_cursor", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_EDITBRUSH_FLAG_ENABLE_CURSOR);
+ RNA_def_property_boolean_sdna(prop, NULL, "flag", GP_SCULPT_FLAG_ENABLE_CURSOR);
RNA_def_property_boolean_default(prop, true);
RNA_def_property_ui_text(prop, "Enable Cursor", "Enable cursor on screen");
RNA_def_parameter_clear_flags(prop, PROP_ANIMATABLE, 0);
diff --git a/source/blender/makesrna/intern/rna_shader_fx.c b/source/blender/makesrna/intern/rna_shader_fx.c
index c1bc9ba191e..ef045be82ca 100644
--- a/source/blender/makesrna/intern/rna_shader_fx.c
+++ b/source/blender/makesrna/intern/rna_shader_fx.c
@@ -689,7 +689,7 @@ void RNA_def_shader_fx(BlenderRNA *brna)
RNA_def_property_boolean_sdna(prop, NULL, "mode", eShaderFxMode_Expanded);
RNA_def_property_override_flag(prop, PROPOVERRIDE_OVERRIDABLE_STATIC);
RNA_def_property_ui_text(prop, "Expanded", "Set effect expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
/* types */
rna_def_shader_fx_blur(brna);
diff --git a/source/blender/makesrna/intern/rna_space.c b/source/blender/makesrna/intern/rna_space.c
index daff33f40db..ee00d897530 100644
--- a/source/blender/makesrna/intern/rna_space.c
+++ b/source/blender/makesrna/intern/rna_space.c
@@ -278,7 +278,7 @@ static const EnumPropertyItem buttons_context_items[] = {
{BCONTEXT_TOOL, "TOOL", ICON_TOOL_SETTINGS, "Tool", "Active Tool and Workspace settings"},
{BCONTEXT_SCENE, "SCENE", ICON_SCENE_DATA, "Scene", "Scene"},
{BCONTEXT_RENDER, "RENDER", ICON_SCENE, "Render", "Render"},
- {BCONTEXT_OUTPUT, "OUTPUT", ICON_IMAGE_DATA, "Output", "Output"},
+ {BCONTEXT_OUTPUT, "OUTPUT", ICON_OUTPUT, "Output", "Output"},
{BCONTEXT_VIEW_LAYER, "VIEW_LAYER", ICON_RENDER_RESULT, "View Layer", "View Layer"},
{BCONTEXT_WORLD, "WORLD", ICON_WORLD, "World", "World"},
{BCONTEXT_OBJECT, "OBJECT", ICON_OBJECT_DATA, "Object", "Object"},
diff --git a/source/blender/makesrna/intern/rna_tracking.c b/source/blender/makesrna/intern/rna_tracking.c
index 4c5af755b13..ed41d209f6a 100644
--- a/source/blender/makesrna/intern/rna_tracking.c
+++ b/source/blender/makesrna/intern/rna_tracking.c
@@ -915,14 +915,14 @@ static void rna_def_trackingSettings(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SETTINGS_SHOW_DEFAULT_EXPANDED);
RNA_def_property_ui_text(prop, "Show Expanded", "Show default options expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
/* ** extra tracker settings ** */
prop = RNA_def_property(srna, "show_extra_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SETTINGS_SHOW_EXTRA_EXPANDED);
RNA_def_property_ui_text(prop, "Show Expanded", "Show extra options expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
/* solver settings */
prop = RNA_def_property(srna, "use_tripod_solver", PROP_BOOLEAN, PROP_NONE);
@@ -1794,7 +1794,7 @@ static void rna_def_trackingStabilization(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_ANIMATABLE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", TRACKING_SHOW_STAB_TRACKS);
RNA_def_property_ui_text(prop, "Show Tracks", "Show UI list of tracks participating in stabilization");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
}
static void rna_def_reconstructedCamera(BlenderRNA *brna)
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 5f4b6ffc41c..ea39ce72598 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -249,6 +249,9 @@ static StructRNA *rna_Panel_register(
if (dummypt.category[0] == '\0') {
/* Use a fallback, otherwise an empty value will draw the panel in every category. */
strcpy(dummypt.category, PNL_CATEGORY_FALLBACK);
+#ifndef NDEBUG
+ printf("Registering panel class: '%s' misses category, please update the script\n", dummypt.idname);
+#endif
}
}
else {
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 84258835b14..03f86eba601 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -81,7 +81,8 @@ const EnumPropertyItem rna_enum_navigation_mode_items[] = {
#if defined(WITH_INTERNATIONAL) || !defined(RNA_RUNTIME)
static const EnumPropertyItem rna_enum_language_default_items[] = {
- {0, "DEFAULT", 0, "Default (Default)", ""},
+ {0, "DEFAULT", 0, "Automatic (Automatic)",
+ "Automatically choose system's defined language if available, or fall-back to English"},
{0, NULL, 0, NULL, NULL}
};
#endif
@@ -210,23 +211,6 @@ static void rna_userdef_undo_steps_set(PointerRNA *ptr, int value)
userdef->undosteps = (value == 1) ? 2 : value;
}
-static void rna_userdef_select_mouse_set(PointerRNA *ptr, int value)
-{
- UserDef *userdef = (UserDef *)ptr->data;
-
- if (value) {
- userdef->flag |= USER_LMOUSESELECT;
- userdef->flag &= ~USER_TWOBUTTONMOUSE;
- }
- else
- userdef->flag &= ~USER_LMOUSESELECT;
-}
-
-static void rna_userdef_select_mouse_update(bContext *C, Main *UNUSED(bmain), Scene *UNUSED(scene), PointerRNA *UNUSED(ptr))
-{
- WM_keyconfig_reload(C);
-}
-
static int rna_userdef_autokeymode_get(PointerRNA *ptr)
{
UserDef *userdef = (UserDef *)ptr->data;
@@ -565,34 +549,34 @@ static StructRNA *rna_AddonPref_register(
Main *bmain, ReportList *reports, void *data, const char *identifier,
StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
{
- bAddonPrefType *apt, dummyapt = {{'\0'}};
- bAddon dummyaddon = {NULL};
- PointerRNA dummyhtr;
+ bAddonPrefType *apt, dummy_apt = {{'\0'}};
+ bAddon dummy_addon = {NULL};
+ PointerRNA dummy_ptr;
// int have_function[1];
- /* setup dummy header & header type to store static properties in */
- RNA_pointer_create(NULL, &RNA_AddonPreferences, &dummyaddon, &dummyhtr);
+ /* setup dummy addon-pref & addon-pref type to store static properties in */
+ RNA_pointer_create(NULL, &RNA_AddonPreferences, &dummy_addon, &dummy_ptr);
/* validate the python class */
- if (validate(&dummyhtr, data, NULL /* have_function */ ) != 0)
+ if (validate(&dummy_ptr, data, NULL /* have_function */ ) != 0)
return NULL;
- BLI_strncpy(dummyapt.idname, dummyaddon.module, sizeof(dummyapt.idname));
- if (strlen(identifier) >= sizeof(dummyapt.idname)) {
+ BLI_strncpy(dummy_apt.idname, dummy_addon.module, sizeof(dummy_apt.idname));
+ if (strlen(identifier) >= sizeof(dummy_apt.idname)) {
BKE_reportf(reports, RPT_ERROR, "Registering add-on preferences class: '%s' is too long, maximum length is %d",
- identifier, (int)sizeof(dummyapt.idname));
+ identifier, (int)sizeof(dummy_apt.idname));
return NULL;
}
- /* check if we have registered this header type before, and remove it */
- apt = BKE_addon_pref_type_find(dummyaddon.module, true);
+ /* check if we have registered this addon-pref type before, and remove it */
+ apt = BKE_addon_pref_type_find(dummy_addon.module, true);
if (apt && apt->ext.srna) {
rna_AddonPref_unregister(bmain, apt->ext.srna);
}
- /* create a new header type */
+ /* create a new addon-pref type */
apt = MEM_mallocN(sizeof(bAddonPrefType), "addonpreftype");
- memcpy(apt, &dummyapt, sizeof(dummyapt));
+ memcpy(apt, &dummy_apt, sizeof(dummy_apt));
BKE_addon_pref_type_add(apt);
apt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_AddonPreferences);
@@ -743,7 +727,7 @@ static void rna_UserDef_studiolight_spherical_harmonics_coefficients_get(Pointer
{
StudioLight *sl = (StudioLight *)ptr->data;
float *value = values;
- for (int i = 0; i < STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS; i++) {
+ for (int i = 0; i < STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN; i++) {
copy_v3_v3(value, sl->spherical_harmonics_coefs[i]);
value += 3;
}
@@ -3396,7 +3380,7 @@ static void rna_def_userdef_studiolight(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "SH Cache Path", "Path where the spherical harmonics cache is stored");
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
- const int spherical_harmonics_dim[] = {STUDIOLIGHT_SPHERICAL_HARMONICS_COMPONENTS, 3};
+ const int spherical_harmonics_dim[] = {STUDIOLIGHT_SH_EFFECTIVE_COEFS_LEN, 3};
prop = RNA_def_property(srna, "spherical_harmonics_coefficients", PROP_FLOAT, PROP_COLOR);
RNA_def_property_multi_array(prop, 2, spherical_harmonics_dim);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -4213,12 +4197,7 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
RNA_def_struct_ui_text(srna, "System & OpenGL", "Graphics driver and operating system settings");
- /* Language */
-
- prop = RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE);
- RNA_def_property_ui_text(prop, "International Fonts", "Use international fonts");
- RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update");
+ /* UI settings. */
prop = RNA_def_property(srna, "ui_scale", PROP_FLOAT, PROP_NONE);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
@@ -4263,7 +4242,12 @@ static void rna_def_userdef_system(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Author",
"Name that will be used in exported files when format supports such feature");
- /* Language Selection */
+ /* Language. */
+
+ prop = RNA_def_property(srna, "use_international_fonts", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_DOTRANSLATE);
+ RNA_def_property_ui_text(prop, "Translate UI", "Enable UI translation and use international fonts");
+ RNA_def_property_update(prop, NC_WINDOW, "rna_userdef_language_update");
prop = RNA_def_property(srna, "language", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_items(prop, rna_enum_language_default_items);
@@ -4275,17 +4259,21 @@ static void rna_def_userdef_system(BlenderRNA *brna)
prop = RNA_def_property(srna, "use_translate_tooltips", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_TOOLTIPS);
- RNA_def_property_ui_text(prop, "Translate Tooltips", "Translate tooltips");
+ RNA_def_property_ui_text(prop, "Translate Tooltips",
+ "Translate the descriptions when hovering UI elements (recommended)");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "use_translate_interface", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_IFACE);
- RNA_def_property_ui_text(prop, "Translate Interface", "Translate interface");
+ RNA_def_property_ui_text(prop, "Translate Interface",
+ "Translate all labels in menus, buttons and panels "
+ "(note that this might make it hard to follow tutorials or the manual)");
RNA_def_property_update(prop, 0, "rna_userdef_update");
prop = RNA_def_property(srna, "use_translate_new_dataname", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "transopts", USER_TR_NEWDATANAME);
- RNA_def_property_ui_text(prop, "Translate New Names", "Translate new data names (when adding/creating some)");
+ RNA_def_property_ui_text(prop, "Translate New Names",
+ "Translate the names of new data-blocks (objects, materials...)");
RNA_def_property_update(prop, 0, "rna_userdef_update");
/* System & OpenGL */
@@ -4500,12 +4488,6 @@ static void rna_def_userdef_input(BlenderRNA *brna)
PropertyRNA *prop;
StructRNA *srna;
- static const EnumPropertyItem select_mouse_items[] = {
- {USER_LMOUSESELECT, "LEFT", 0, "Left", "Use left Mouse Button for selection"},
- {0, "RIGHT", 0, "Right", "Use Right Mouse Button for selection"},
- {0, NULL, 0, NULL, NULL}
- };
-
static const EnumPropertyItem view_rotation_items[] = {
{0, "TURNTABLE", 0, "Turntable", "Use turntable style rotation in the viewport"},
{USER_TRACKBALL, "TRACKBALL", 0, "Trackball", "Use trackball style rotation in the viewport"},
@@ -4546,13 +4528,9 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_struct_clear_flag(srna, STRUCT_UNDO);
RNA_def_struct_ui_text(srna, "Input", "Settings for input devices");
- prop = RNA_def_property(srna, "select_mouse", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_bitflag_sdna(prop, NULL, "flag");
- RNA_def_property_enum_items(prop, select_mouse_items);
- RNA_def_property_enum_funcs(prop, NULL, "rna_userdef_select_mouse_set", NULL);
- RNA_def_property_ui_text(prop, "Select Mouse", "Mouse button used for selection");
- RNA_def_property_flag(prop, PROP_CONTEXT_UPDATE);
- RNA_def_property_update(prop, 0, "rna_userdef_select_mouse_update");
+ prop = RNA_def_property(srna, "show_ui_keyconfig", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_negative_sdna(prop, NULL, "userpref_flag", USER_SECTION_INPUT_HIDE_UI_KEYCONFIG);
+ RNA_def_property_ui_text(prop, "Show UI Key-Config", "");
prop = RNA_def_property(srna, "view_zoom_method", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "viewzoom");
@@ -4604,6 +4582,20 @@ static void rna_def_userdef_input(BlenderRNA *brna)
RNA_def_property_ui_text(prop, "Tweak Threshold",
"Number of pixels you have to drag before tweak event is triggered");
+ /* tablet pressure curve */
+ prop = RNA_def_property(srna, "pressure_threshold_max", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, 0.0f, 1.0f);
+ RNA_def_property_float_default(prop, 1.0f);
+ RNA_def_property_ui_range(prop, 0.0f, 1.0f, 0.01f, 3);
+ RNA_def_property_ui_text(prop, "Max Threshold",
+ "Raw input pressure value that is interpreted as 100% by Blender");
+
+ prop = RNA_def_property(srna, "pressure_softness", PROP_FLOAT, PROP_FACTOR);
+ RNA_def_property_range(prop, -FLT_MAX, FLT_MAX);
+ RNA_def_property_ui_range(prop, -1.0f, 1.0f, 0.1f, 2);
+ RNA_def_property_ui_text(prop, "Softness",
+ "Adjusts softness of the low pressure response onset using a gamma curve");
+
#ifdef WITH_INPUT_NDOF
/* 3D mouse settings */
/* global options */
diff --git a/source/blender/makesrna/intern/rna_wm.c b/source/blender/makesrna/intern/rna_wm.c
index 4e79c516ae3..77a10e6dbbc 100644
--- a/source/blender/makesrna/intern/rna_wm.c
+++ b/source/blender/makesrna/intern/rna_wm.c
@@ -37,6 +37,7 @@
#include "BLT_translation.h"
#include "BKE_workspace.h"
+#include "BKE_keyconfig.h"
#include "RNA_access.h"
#include "RNA_define.h"
@@ -74,8 +75,6 @@ static const EnumPropertyItem event_tweak_type_items[] = {
{EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Left", ""},
{EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Middle", ""},
{EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Right", ""},
- {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Action", ""},
- {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Select", ""},
{0, NULL, 0, NULL, NULL}
};
@@ -87,8 +86,6 @@ static const EnumPropertyItem event_mouse_type_items[] = {
{BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5", ""},
{BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6", ""},
{BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7", ""},
- {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action", ""},
- {SELECTMOUSE, "SELECTMOUSE", 0, "Select", ""},
{0, "", 0, NULL, NULL},
{TABLET_STYLUS, "PEN", 0, "Pen", ""},
{TABLET_ERASER, "ERASER", 0, "Eraser", ""},
@@ -184,8 +181,6 @@ const EnumPropertyItem rna_enum_event_type_items[] = {
{BUTTON5MOUSE, "BUTTON5MOUSE", 0, "Button5 Mouse", "MB5"},
{BUTTON6MOUSE, "BUTTON6MOUSE", 0, "Button6 Mouse", "MB6"},
{BUTTON7MOUSE, "BUTTON7MOUSE", 0, "Button7 Mouse", "MB7"},
- {ACTIONMOUSE, "ACTIONMOUSE", 0, "Action Mouse", "MBA"},
- {SELECTMOUSE, "SELECTMOUSE", 0, "Select Mouse", "MBS"},
{0, "", 0, NULL, NULL},
{TABLET_STYLUS, "PEN", 0, "Pen", ""},
{TABLET_ERASER, "ERASER", 0, "Eraser", ""},
@@ -204,8 +199,6 @@ const EnumPropertyItem rna_enum_event_type_items[] = {
{EVT_TWEAK_L, "EVT_TWEAK_L", 0, "Tweak Left", "TwkL"},
{EVT_TWEAK_M, "EVT_TWEAK_M", 0, "Tweak Middle", "TwkM"},
{EVT_TWEAK_R, "EVT_TWEAK_R", 0, "Tweak Right", "TwkR"},
- {EVT_TWEAK_A, "EVT_TWEAK_A", 0, "Tweak Action", "TwkA"},
- {EVT_TWEAK_S, "EVT_TWEAK_S", 0, "Tweak Select", "TwkS"},
{0, "", 0, NULL, NULL},
{AKEY, "A", 0, "A", ""},
{BKEY, "B", 0, "B", ""},
@@ -994,6 +987,107 @@ static void rna_WindowManager_active_keyconfig_set(PointerRNA *ptr, PointerRNA v
WM_keyconfig_set_active(wm, kc->idname);
}
+/* -------------------------------------------------------------------- */
+/** \name Key Config Preferences
+ * \{ */
+
+static PointerRNA rna_wmKeyConfig_preferences_get(PointerRNA *ptr)
+{
+ wmKeyConfig *kc = ptr->data;
+ wmKeyConfigPrefType_Runtime *kpt_rt = BKE_keyconfig_pref_type_find(kc->idname, true);
+ if (kpt_rt) {
+ wmKeyConfigPref *kpt = BKE_keyconfig_pref_ensure(&U, kc->idname);
+ return rna_pointer_inherit_refine(ptr, kpt_rt->ext.srna, kpt->prop);
+ }
+ else {
+ return PointerRNA_NULL;
+ }
+}
+
+static IDProperty *rna_wmKeyConfigPref_idprops(PointerRNA *ptr, bool create)
+{
+ if (create && !ptr->data) {
+ IDPropertyTemplate val = {0};
+ ptr->data = IDP_New(IDP_GROUP, &val, "RNA_KeyConfigPreferences group");
+ }
+ return ptr->data;
+}
+
+static void rna_wmKeyConfigPref_unregister(Main *UNUSED(bmain), StructRNA *type)
+{
+ wmKeyConfigPrefType_Runtime *kpt_rt = RNA_struct_blender_type_get(type);
+
+ if (!kpt_rt)
+ return;
+
+ RNA_struct_free_extension(type, &kpt_rt->ext);
+ RNA_struct_free(&BLENDER_RNA, type);
+
+ /* Possible we're not in the preferences if they have been reset. */
+ BKE_keyconfig_pref_type_remove(kpt_rt);
+
+ /* update while blender is running */
+ WM_main_add_notifier(NC_WINDOW, NULL);
+}
+
+static StructRNA *rna_wmKeyConfigPref_register(
+ Main *bmain, ReportList *reports, void *data, const char *identifier,
+ StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free)
+{
+ wmKeyConfigPrefType_Runtime *kpt_rt, dummy_kpt_rt = {{'\0'}};
+ wmKeyConfigPref dummy_kpt = {NULL};
+ PointerRNA dummy_ptr;
+ // int have_function[1];
+
+ /* setup dummy keyconf-prefs & keyconf-prefs type to store static properties in */
+ RNA_pointer_create(NULL, &RNA_KeyConfigPreferences, &dummy_kpt, &dummy_ptr);
+
+ /* validate the python class */
+ if (validate(&dummy_ptr, data, NULL /* have_function */ ) != 0)
+ return NULL;
+
+ STRNCPY(dummy_kpt_rt.idname, dummy_kpt.idname);
+ if (strlen(identifier) >= sizeof(dummy_kpt_rt.idname)) {
+ BKE_reportf(reports, RPT_ERROR, "Registering key-config preferences class: '%s' is too long, maximum length is %d",
+ identifier, (int)sizeof(dummy_kpt_rt.idname));
+ return NULL;
+ }
+
+ /* check if we have registered this keyconf-prefs type before, and remove it */
+ kpt_rt = BKE_keyconfig_pref_type_find(dummy_kpt.idname, true);
+ if (kpt_rt && kpt_rt->ext.srna) {
+ rna_wmKeyConfigPref_unregister(bmain, kpt_rt->ext.srna);
+ }
+
+ /* create a new keyconf-prefs type */
+ kpt_rt = MEM_mallocN(sizeof(wmKeyConfigPrefType_Runtime), "keyconfigpreftype");
+ memcpy(kpt_rt, &dummy_kpt_rt, sizeof(dummy_kpt_rt));
+
+ BKE_keyconfig_pref_type_add(kpt_rt);
+
+ kpt_rt->ext.srna = RNA_def_struct_ptr(&BLENDER_RNA, identifier, &RNA_KeyConfigPreferences);
+ kpt_rt->ext.data = data;
+ kpt_rt->ext.call = call;
+ kpt_rt->ext.free = free;
+ RNA_struct_blender_type_set(kpt_rt->ext.srna, kpt_rt);
+
+// kpt_rt->draw = (have_function[0]) ? header_draw : NULL;
+
+ /* update while blender is running */
+ WM_main_add_notifier(NC_WINDOW, NULL);
+
+ return kpt_rt->ext.srna;
+}
+
+/* placeholder, doesn't do anything useful yet */
+static StructRNA *rna_wmKeyConfigPref_refine(PointerRNA *ptr)
+{
+ return (ptr->type) ? ptr->type : &RNA_KeyConfigPreferences;
+}
+
+/** \} */
+
+
static void rna_wmKeyMapItem_idname_get(PointerRNA *ptr, char *value)
{
wmKeyMapItem *kmi = ptr->data;
@@ -2206,6 +2300,28 @@ static void rna_def_wm_keymaps(BlenderRNA *brna, PropertyRNA *cprop)
RNA_api_keymaps(srna);
}
+static void rna_def_keyconfig_prefs(BlenderRNA *brna)
+{
+ StructRNA *srna;
+ PropertyRNA *prop;
+
+ srna = RNA_def_struct(brna, "KeyConfigPreferences", NULL);
+ RNA_def_struct_ui_text(srna, "Key-Config Preferences", "");
+ RNA_def_struct_sdna(srna, "wmKeyConfigPref"); /* WARNING: only a bAddon during registration */
+
+ RNA_def_struct_refine_func(srna, "rna_wmKeyConfigPref_refine");
+ RNA_def_struct_register_funcs(srna, "rna_wmKeyConfigPref_register", "rna_wmKeyConfigPref_unregister", NULL);
+ RNA_def_struct_idprops_func(srna, "rna_wmKeyConfigPref_idprops");
+ RNA_def_struct_flag(srna, STRUCT_NO_DATABLOCK_IDPROPERTIES); /* Mandatory! */
+
+ /* registration */
+ RNA_define_verify_sdna(0);
+ prop = RNA_def_property(srna, "bl_idname", PROP_STRING, PROP_NONE);
+ RNA_def_property_string_sdna(prop, NULL, "idname");
+ RNA_def_property_flag(prop, PROP_REGISTER);
+ RNA_define_verify_sdna(1);
+}
+
static void rna_def_keyconfig(BlenderRNA *brna)
{
StructRNA *srna;
@@ -2241,6 +2357,11 @@ static void rna_def_keyconfig(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(prop, "User Defined", "Indicates that a keyconfig was defined by the user");
+ /* Collection active property */
+ prop = RNA_def_property(srna, "preferences", PROP_POINTER, PROP_NONE);
+ RNA_def_property_struct_type(prop, "KeyConfigPreferences");
+ RNA_def_property_pointer_funcs(prop, "rna_wmKeyConfig_preferences_get", NULL, NULL, NULL);
+
RNA_api_keyconfig(srna);
/* KeyMap */
@@ -2289,12 +2410,12 @@ static void rna_def_keyconfig(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_expanded_items", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_EXPANDED);
RNA_def_property_ui_text(prop, "Items Expanded", "Expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
prop = RNA_def_property(srna, "show_expanded_children", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KEYMAP_CHILDREN_EXPANDED);
RNA_def_property_ui_text(prop, "Children Expanded", "Children expanded in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
RNA_api_keymap(srna);
@@ -2401,7 +2522,7 @@ static void rna_def_keyconfig(BlenderRNA *brna)
prop = RNA_def_property(srna, "show_expanded", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "flag", KMI_EXPANDED);
RNA_def_property_ui_text(prop, "Expanded", "Show key map event and property details in the user interface");
- RNA_def_property_ui_icon(prop, ICON_TRIA_RIGHT, 1);
+ RNA_def_property_ui_icon(prop, ICON_DISCLOSURE_TRI_RIGHT, 1);
prop = RNA_def_property(srna, "propvalue", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_sdna(prop, NULL, "propvalue");
@@ -2445,6 +2566,7 @@ void RNA_def_wm(BlenderRNA *brna)
rna_def_piemenu(brna);
rna_def_window(brna);
rna_def_windowmanager(brna);
+ rna_def_keyconfig_prefs(brna);
rna_def_keyconfig(brna);
}
diff --git a/source/blender/modifiers/intern/MOD_bevel.c b/source/blender/modifiers/intern/MOD_bevel.c
index d548bae96a0..d9b6cfa1ac5 100644
--- a/source/blender/modifiers/intern/MOD_bevel.c
+++ b/source/blender/modifiers/intern/MOD_bevel.c
@@ -198,7 +198,7 @@ static void bevel_mod_harden_normals(
const bool has_vgroup = dvert != NULL;
const bool vert_of_group = (
has_vgroup &&
- (defvert_find_index(&dvert[BM_elem_index_get(l->v)], vgroup) != NULL));
+ (defvert_find_index(&dvert[BM_elem_index_get(lfan_pivot->v)], vgroup) != NULL));
if (vert_of_group && hnmode == MOD_BEVEL_HN_FACE) {
float cur[3];
diff --git a/source/blender/modifiers/intern/MOD_dynamicpaint.c b/source/blender/modifiers/intern/MOD_dynamicpaint.c
index 2e3d164a86e..c23a65ec23c 100644
--- a/source/blender/modifiers/intern/MOD_dynamicpaint.c
+++ b/source/blender/modifiers/intern/MOD_dynamicpaint.c
@@ -58,12 +58,12 @@ static void initData(ModifierData *md)
pmd->type = MOD_DYNAMICPAINT_TYPE_CANVAS;
}
-static void copyData(const ModifierData *md, ModifierData *target, const int UNUSED(flag))
+static void copyData(const ModifierData *md, ModifierData *target, const int flag)
{
const DynamicPaintModifierData *pmd = (const DynamicPaintModifierData *)md;
DynamicPaintModifierData *tpmd = (DynamicPaintModifierData *)target;
- dynamicPaint_Modifier_copy(pmd, tpmd);
+ dynamicPaint_Modifier_copy(pmd, tpmd, flag);
}
static void freeData(ModifierData *md)
diff --git a/source/blender/modifiers/intern/MOD_mirror.c b/source/blender/modifiers/intern/MOD_mirror.c
index d4e02a437d7..659ac0dee30 100644
--- a/source/blender/modifiers/intern/MOD_mirror.c
+++ b/source/blender/modifiers/intern/MOD_mirror.c
@@ -45,6 +45,9 @@
#include "BKE_modifier.h"
#include "BKE_deform.h"
+#include "bmesh.h"
+#include "bmesh_tools.h"
+
#include "MEM_guardedalloc.h"
#include "DEG_depsgraph_build.h"
@@ -78,21 +81,90 @@ static void updateDepsgraph(ModifierData *md, const ModifierUpdateDepsgraphConte
DEG_add_object_relation(ctx->node, ctx->object, DEG_OB_COMP_TRANSFORM, "Mirror Modifier");
}
-static Mesh *doMirrorOnAxis(
+static Mesh *doBiscetOnMirrorPlane(
MirrorModifierData *mmd,
Object *ob,
const Mesh *mesh,
- int axis)
+ int axis,
+ float mirrormat[4][4])
+{
+ bool do_bisect_flip_axis = (
+ (axis == 0 && mmd->flag & MOD_MIR_BISECT_FLIP_AXIS_X) ||
+ (axis == 1 && mmd->flag & MOD_MIR_BISECT_FLIP_AXIS_Y) ||
+ (axis == 2 && mmd->flag & MOD_MIR_BISECT_FLIP_AXIS_Z));
+
+ const float bisect_distance = 0.001;
+
+ Mesh *result;
+ BMesh *bm;
+ BMIter viter;
+ BMVert *v, *v_next;
+
+ bm = BKE_mesh_to_bmesh_ex(
+ mesh,
+ &(struct BMeshCreateParams){0},
+ &(struct BMeshFromMeshParams){
+ .calc_face_normal = true,
+ .cd_mask_extra = CD_MASK_ORIGINDEX,
+ });
+
+ /* prepare data for bisecting */
+ float plane[4];
+ float plane_co[3] = {0, 0, 0};
+ float plane_no[3];
+ copy_v3_v3(plane_no, mirrormat[axis]);
+
+ if (mmd->mirror_ob) {
+ float tmp[4][4];
+ invert_m4_m4(tmp, ob->obmat);
+ mul_m4_m4m4(tmp, tmp, mmd->mirror_ob->obmat);
+
+ copy_v3_v3(plane_no, tmp[axis]);
+ copy_v3_v3(plane_co, tmp[3]);
+ }
+
+ plane_from_point_normal_v3(plane, plane_co, plane_no);
+
+ BM_mesh_bisect_plane(bm, plane, false, false, 0, 0, bisect_distance);
+
+ /* Plane definitions for vert killing. */
+ float plane_offset[4];
+ copy_v3_v3(plane_offset, plane);
+ plane_offset[3] = plane[3] - bisect_distance;
+
+ if (do_bisect_flip_axis) {
+ negate_v3(plane_offset);
+ }
+
+ /* Delete verts across the mirror plane. */
+ BM_ITER_MESH_MUTABLE(v, v_next, &viter, bm, BM_VERTS_OF_MESH) {
+ if (plane_point_side_v3(plane_offset, v->co) > 0.0f) {
+ BM_vert_kill(bm, v);
+ }
+ }
+
+ result = BKE_mesh_from_bmesh_for_eval_nomain(bm, 0);
+ BM_mesh_free(bm);
+
+ return result;
+}
+
+static Mesh *doMirrorOnAxis(
+ MirrorModifierData *mmd,
+ Object *ob,
+ const Mesh *mesh,
+ int axis)
{
const float tolerance_sq = mmd->tolerance * mmd->tolerance;
const bool do_vtargetmap = (mmd->flag & MOD_MIR_NO_MERGE) == 0;
int tot_vtargetmap = 0; /* total merge vertices */
+ const bool do_bisect = (
+ (axis == 0 && mmd->flag & MOD_MIR_BISECT_AXIS_X) ||
+ (axis == 1 && mmd->flag & MOD_MIR_BISECT_AXIS_Y) ||
+ (axis == 2 && mmd->flag & MOD_MIR_BISECT_AXIS_Z));
+
Mesh *result;
- const int maxVerts = mesh->totvert;
- const int maxEdges = mesh->totedge;
- const int maxLoops = mesh->totloop;
- const int maxPolys = mesh->totpoly;
MVert *mv, *mv_prev;
MEdge *me;
MLoop *ml;
@@ -125,6 +197,18 @@ static Mesh *doMirrorOnAxis(
mul_m4_m4m4(mtx, itmp, mtx);
}
+
+ Mesh *mesh_bisect = NULL;
+ if (do_bisect) {
+ mesh_bisect = doBiscetOnMirrorPlane(mmd, ob, mesh, axis, mtx);
+ mesh = mesh_bisect;
+ }
+
+ const int maxVerts = mesh->totvert;
+ const int maxEdges = mesh->totedge;
+ const int maxLoops = mesh->totloop;
+ const int maxPolys = mesh->totpoly;
+
result = BKE_mesh_new_nomain_from_template(
mesh, maxVerts * 2, maxEdges * 2, 0, maxLoops * 2, maxPolys * 2);
@@ -290,6 +374,10 @@ static Mesh *doMirrorOnAxis(
MEM_freeN(vtargetmap);
}
+ if (mesh_bisect != NULL) {
+ BKE_id_free(NULL, mesh_bisect);
+ }
+
return result;
}
diff --git a/source/blender/nodes/shader/node_shader_tree.c b/source/blender/nodes/shader/node_shader_tree.c
index 321ac1a6b76..2c69da2d9cd 100644
--- a/source/blender/nodes/shader/node_shader_tree.c
+++ b/source/blender/nodes/shader/node_shader_tree.c
@@ -65,6 +65,10 @@
#include "node_util.h"
#include "node_shader_util.h"
+
+static void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node);
+static void ntree_shader_tag_sss_node(bNodeTree *ntree, bNode *output_node);
+
static bool shader_tree_poll(const bContext *C, bNodeTreeType *UNUSED(treetype))
{
Scene *scene = CTX_data_scene(C);
@@ -257,6 +261,30 @@ bNode *ntreeShaderOutputNode(bNodeTree *ntree, int target)
return output_node;
}
+/* Find the active output node of a group nodetree.
+ *
+ * Does not return the shading output node but the group output node.
+ */
+static bNode *ntree_group_output_node(bNodeTree *ntree)
+{
+ /* Make sure we only have single node tagged as output. */
+ ntreeSetOutput(ntree);
+
+ /* Find output node that matches type and target. If there are
+ * multiple, we prefer exact target match and active nodes. */
+ bNode *output_node = NULL;
+
+ for (bNode *node = ntree->nodes.first; node; node = node->next) {
+ if ((node->type == NODE_GROUP_OUTPUT) &&
+ (node->flag & NODE_DO_OUTPUT))
+ {
+ output_node = node;
+ }
+ }
+
+ return output_node;
+}
+
/* Find socket with a specified identifier. */
static bNodeSocket *ntree_shader_node_find_socket(ListBase *sockets,
const char *identifier)
@@ -608,6 +636,16 @@ static void ntree_shader_relink_displacement(bNodeTree *ntree, bNode *output_nod
static bool ntree_tag_ssr_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed))
{
switch (fromnode->type) {
+ case NODE_GROUP:
+ /* Recursive */
+ if (fromnode->id != NULL) {
+ bNodeTree *ntree = (bNodeTree *)fromnode->id;
+ bNode *group_output = ntree_group_output_node(ntree);
+ if (fromnode) {
+ ntree_shader_tag_ssr_node(ntree, group_output);
+ }
+ }
+ break;
case SH_NODE_BSDF_ANISOTROPIC:
case SH_NODE_EEVEE_SPECULAR:
case SH_NODE_BSDF_PRINCIPLED:
@@ -629,7 +667,7 @@ static bool ntree_tag_ssr_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *
/* EEVEE: Scan the ntree to set the Screen Space Reflection
* layer id of every specular node.
*/
-static void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node)
+void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node)
{
if (output_node == NULL) {
return;
@@ -644,6 +682,16 @@ static void ntree_shader_tag_ssr_node(bNodeTree *ntree, bNode *output_node)
static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *userdata, const bool UNUSED(reversed))
{
switch (fromnode->type) {
+ case NODE_GROUP:
+ /* Recursive */
+ if (fromnode->id != NULL) {
+ bNodeTree *ntree = (bNodeTree *)fromnode->id;
+ bNode *group_output = ntree_group_output_node(ntree);
+ if (fromnode) {
+ ntree_shader_tag_sss_node(ntree, group_output);
+ }
+ }
+ break;
case SH_NODE_BSDF_PRINCIPLED:
case SH_NODE_SUBSURFACE_SCATTERING:
fromnode->sss_id = (*(float *)userdata);
@@ -658,7 +706,7 @@ static bool ntree_tag_sss_bsdf_cb(bNode *fromnode, bNode *UNUSED(tonode), void *
/* EEVEE: Scan the ntree to set the Subsurface Scattering id of every SSS node.
*/
-static void ntree_shader_tag_sss_node(bNodeTree *ntree, bNode *output_node)
+void ntree_shader_tag_sss_node(bNodeTree *ntree, bNode *output_node)
{
if (output_node == NULL) {
return;
diff --git a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
index 4f4462f20bb..1a1d5658d97 100644
--- a/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
+++ b/source/blender/nodes/shader/nodes/node_shader_valToRgb.c
@@ -69,6 +69,26 @@ static int gpu_shader_valtorgb(GPUMaterial *mat, bNode *node, bNodeExecData *UNU
float *array, layer;
int size;
+ /* Common / easy case optimisation. */
+ if ((coba->tot <= 2) && (coba->color_mode == COLBAND_BLEND_RGB)) {
+ float mul_bias[2];
+ switch (coba->ipotype) {
+ case COLBAND_INTERP_LINEAR:
+ mul_bias[0] = 1.0f / (coba->data[1].pos - coba->data[0].pos);
+ mul_bias[1] = -mul_bias[0] * coba->data[0].pos;
+ return GPU_stack_link(mat, node, "valtorgb_opti_linear", in, out, GPU_uniform(mul_bias),
+ GPU_uniform(&coba->data[0].r),
+ GPU_uniform(&coba->data[1].r));
+ case COLBAND_INTERP_CONSTANT:
+ mul_bias[1] = max_ff(coba->data[0].pos, coba->data[1].pos);
+ return GPU_stack_link(mat, node, "valtorgb_opti_constant", in, out, GPU_uniform(&mul_bias[1]),
+ GPU_uniform(&coba->data[0].r),
+ GPU_uniform(&coba->data[1].r));
+ default:
+ break;
+ }
+ }
+
BKE_colorband_evaluate_table_rgba(coba, &array, &size);
GPUNodeLink *tex = GPU_color_band(mat, size, array, &layer);
diff --git a/source/blender/python/gpu/gpu_py_matrix.c b/source/blender/python/gpu/gpu_py_matrix.c
index ea883bea465..6c77f2ee02b 100644
--- a/source/blender/python/gpu/gpu_py_matrix.c
+++ b/source/blender/python/gpu/gpu_py_matrix.c
@@ -329,7 +329,7 @@ PyDoc_STRVAR(bpygpu_matrix_scale_uniform_doc,
".. function:: scale_uniform(scale)\n"
"\n"
" :param scale: Scale the current stack matrix.\n"
-" :type scale: sequence of 2 or 3 floats\n"
+" :type scale: float\n"
);
static PyObject *bpygpu_matrix_scale_uniform(PyObject *UNUSED(self), PyObject *value)
{
diff --git a/source/blender/python/gpu/gpu_py_offscreen.c b/source/blender/python/gpu/gpu_py_offscreen.c
index 7a8a2ca0a9f..c51a356d900 100644
--- a/source/blender/python/gpu/gpu_py_offscreen.c
+++ b/source/blender/python/gpu/gpu_py_offscreen.c
@@ -55,11 +55,36 @@
#include "gpu_py_offscreen.h" /* own include */
+
+ /* -------------------------------------------------------------------- */
+
+ /** \name GPUOffScreen Common Utilities
+ * \{ */
+
+static int bpygpu_offscreen_valid_check(BPyGPUOffScreen *bpygpu_ofs)
+{
+ if (UNLIKELY(bpygpu_ofs->ofs == NULL)) {
+ PyErr_SetString(PyExc_ReferenceError, "GPU offscreen was freed, no further access is valid");
+ return -1;
+ }
+ return 0;
+}
+
+#define BPY_GPU_OFFSCREEN_CHECK_OBJ(bpygpu) { \
+ if (UNLIKELY(bpygpu_offscreen_valid_check(bpygpu) == -1)) { \
+ return NULL; \
+ } \
+} ((void)0)
+
+/** \} */
+
+
/* -------------------------------------------------------------------- */
/** \name GPUOffscreen Type
* \{ */
+
static PyObject *bpygpu_offscreen_new(PyTypeObject *UNUSED(self), PyObject *args, PyObject *kwds)
{
GPUOffScreen *ofs;
@@ -87,21 +112,6 @@ static PyObject *bpygpu_offscreen_new(PyTypeObject *UNUSED(self), PyObject *args
return BPyGPUOffScreen_CreatePyObject(ofs);
}
-static int bpygpu_offscreen_valid_check(BPyGPUOffScreen *bpygpu_ofs)
-{
- if (UNLIKELY(bpygpu_ofs->ofs == NULL)) {
- PyErr_SetString(PyExc_ReferenceError, "GPU offscreen was freed, no further access is valid");
- return -1;
- }
- return 0;
-}
-
-#define BPY_GPU_OFFSCREEN_CHECK_OBJ(bpygpu) { \
- if (UNLIKELY(bpygpu_offscreen_valid_check(bpygpu) == -1)) { \
- return NULL; \
- } \
-} ((void)0)
-
PyDoc_STRVAR(bpygpu_offscreen_width_doc, "Width of the texture.\n\n:type: `int`");
static PyObject *bpygpu_offscreen_width_get(BPyGPUOffScreen *self, void *UNUSED(type))
{
@@ -128,15 +138,15 @@ PyDoc_STRVAR(bpygpu_offscreen_bind_doc,
".. method:: bind(save=True)\n"
"\n"
" Bind the offscreen object.\n"
+" To make sure that the offscreen gets unbind whether an exception occurs or not, pack it into a `with` statement.\n"
"\n"
" :arg save: Save the current OpenGL state, so that it can be restored when unbinding.\n"
" :type save: `bool`\n"
);
static PyObject *bpygpu_offscreen_bind(BPyGPUOffScreen *self, PyObject *args, PyObject *kwds)
{
- bool save = true;
-
BPY_GPU_OFFSCREEN_CHECK_OBJ(self);
+ bool save = true;
static const char *_keywords[] = {"save", NULL};
static _PyArg_Parser _parser = {"|O&:bind", _keywords, 0};
@@ -148,7 +158,11 @@ static PyObject *bpygpu_offscreen_bind(BPyGPUOffScreen *self, PyObject *args, Py
}
GPU_offscreen_bind(self->ofs, save);
- Py_RETURN_NONE;
+
+ self->is_saved = save;
+ Py_INCREF(self);
+
+ return (PyObject *)self;
}
PyDoc_STRVAR(bpygpu_offscreen_unbind_doc,
@@ -275,6 +289,17 @@ static PyObject *bpygpu_offscreen_free(BPyGPUOffScreen *self)
Py_RETURN_NONE;
}
+static PyObject *bpygpu_offscreen_bind_context_enter(BPyGPUOffScreen *UNUSED(self))
+{
+ Py_RETURN_NONE;
+}
+
+static PyObject *bpygpu_offscreen_bind_context_exit(BPyGPUOffScreen *self, PyObject *UNUSED(args))
+{
+ GPU_offscreen_unbind(self->ofs, self->is_saved);
+ Py_RETURN_NONE;
+}
+
static void BPyGPUOffScreen__tp_dealloc(BPyGPUOffScreen *self)
{
if (self->ofs)
@@ -294,6 +319,8 @@ static struct PyMethodDef bpygpu_offscreen_methods[] = {
{"unbind", (PyCFunction)bpygpu_offscreen_unbind, METH_VARARGS | METH_KEYWORDS, bpygpu_offscreen_unbind_doc},
{"draw_view3d", (PyCFunction)bpygpu_offscreen_draw_view3d, METH_VARARGS | METH_KEYWORDS, bpygpu_offscreen_draw_view3d_doc},
{"free", (PyCFunction)bpygpu_offscreen_free, METH_NOARGS, bpygpu_offscreen_free_doc},
+ {"__enter__", (PyCFunction)bpygpu_offscreen_bind_context_enter, METH_NOARGS},
+ {"__exit__", (PyCFunction)bpygpu_offscreen_bind_context_exit, METH_VARARGS},
{NULL, NULL, 0, NULL}
};
diff --git a/source/blender/python/gpu/gpu_py_offscreen.h b/source/blender/python/gpu/gpu_py_offscreen.h
index 8b94671b82c..c4a2d02a694 100644
--- a/source/blender/python/gpu/gpu_py_offscreen.h
+++ b/source/blender/python/gpu/gpu_py_offscreen.h
@@ -34,6 +34,7 @@ extern PyTypeObject BPyGPUOffScreen_Type;
typedef struct BPyGPUOffScreen {
PyObject_HEAD
struct GPUOffScreen *ofs;
+ bool is_saved;
} BPyGPUOffScreen;
PyObject *BPyGPUOffScreen_CreatePyObject(struct GPUOffScreen *ofs) ATTR_NONNULL(1);
diff --git a/source/blender/render/intern/source/bake_api.c b/source/blender/render/intern/source/bake_api.c
index 17b26bce7bb..ca3907e8b73 100644
--- a/source/blender/render/intern/source/bake_api.c
+++ b/source/blender/render/intern/source/bake_api.c
@@ -514,9 +514,9 @@ bool RE_bake_pixels_populate_from_objects(
tris_high[i] = mesh_calc_tri_tessface(highpoly[i].me, false, NULL);
me_highpoly[i] = highpoly[i].me;
- BKE_mesh_runtime_looptri_ensure(me_highpoly[i]);
+ BKE_mesh_tessface_ensure(me_highpoly[i]);
- if (me_highpoly[i]->runtime.looptris.len != 0) {
+ if (me_highpoly[i]->totface != 0) {
/* Create a bvh-tree for each highpoly object */
BKE_bvhtree_from_mesh_get(&treeData[i], me_highpoly[i], BVHTREE_FROM_FACES, 2);
diff --git a/source/blender/shader_fx/intern/FX_shader_rim.c b/source/blender/shader_fx/intern/FX_shader_rim.c
index 72be2202867..f3bec9a9571 100644
--- a/source/blender/shader_fx/intern/FX_shader_rim.c
+++ b/source/blender/shader_fx/intern/FX_shader_rim.c
@@ -44,7 +44,7 @@ static void initData(ShaderFxData *fx)
ARRAY_SET_ITEMS(gpfx->mask_rgb, 0.0f, 0.0f, 0.0f);
gpfx->mode = eShaderFxRimMode_Multiply;
- ARRAY_SET_ITEMS(gpfx->blur, 5, 5);
+ ARRAY_SET_ITEMS(gpfx->blur, 0, 0);
gpfx->samples = 2;
}
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 7628217d88f..8e12ac96ea3 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -287,7 +287,8 @@ void WM_menu_name_call(struct bContext *C, const char *menu_name, short context
int WM_enum_search_invoke_previews(struct bContext *C, struct wmOperator *op, short prv_cols, short prv_rows);
int WM_enum_search_invoke(struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
/* invoke callback, confirm menu + exec */
-int WM_operator_confirm (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
+int WM_operator_confirm(struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
+int WM_operator_confirm_or_exec(struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
/* invoke callback, file selector "filepath" unset + exec */
int WM_operator_filesel (struct bContext *C, struct wmOperator *op, const struct wmEvent *event);
bool WM_operator_filesel_ensure_ext_imtype(wmOperator *op, const struct ImageFormatData *im_format);
@@ -348,6 +349,7 @@ bool WM_operator_last_properties_store(struct wmOperator *op);
/* wm_operator_props.c */
+void WM_operator_properties_confirm_or_exec(struct wmOperatorType *ot);
void WM_operator_properties_filesel(
struct wmOperatorType *ot, int filter, short type, short action,
short flag, short display, short sort);
diff --git a/source/blender/windowmanager/WM_keymap.h b/source/blender/windowmanager/WM_keymap.h
index 6072749b283..2093a29ba33 100644
--- a/source/blender/windowmanager/WM_keymap.h
+++ b/source/blender/windowmanager/WM_keymap.h
@@ -150,12 +150,6 @@ char *WM_key_event_operator_string(
const char *WM_bool_as_string(bool test);
-/* Minimal keymap, see: T55666, will eventually remove.
- * Keep this until final design is settled on. */
-#if 0
-#define USE_WM_KEYMAP_27X
-#endif
-
#ifdef __cplusplus
}
#endif
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
index 90a0ff8b651..517f92491f0 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_group.c
@@ -693,16 +693,26 @@ wmKeyMap *WM_gizmogroup_keymap_common_select(
{
/* Use area and region id since we might have multiple gizmos with the same name in different areas/regions */
wmKeyMap *km = WM_keymap_ensure(config, gzgt->name, gzgt->gzmap_params.spaceid, gzgt->gzmap_params.regionid);
+ /* FIXME(campbell) */
+#if 0
+ const int select_mouse = (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
+ const int select_tweak = (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_L : EVT_TWEAK_R;
+ const int action_mouse = (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE;
+#else
+ const int select_mouse = RIGHTMOUSE;
+ const int select_tweak = EVT_TWEAK_R;
+ const int action_mouse = LEFTMOUSE;
+#endif
- WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", ACTIONMOUSE, KM_PRESS, KM_ANY, 0);
- WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", EVT_TWEAK_S, KM_ANY, 0, 0);
+ WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", action_mouse, KM_PRESS, KM_ANY, 0);
+ WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_tweak", select_tweak, KM_ANY, 0, 0);
gizmogroup_tweak_modal_keymap(config, gzgt->name);
- wmKeyMapItem *kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", SELECTMOUSE, KM_PRESS, 0, 0);
+ wmKeyMapItem *kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, 0, 0);
RNA_boolean_set(kmi->ptr, "extend", false);
RNA_boolean_set(kmi->ptr, "deselect", false);
RNA_boolean_set(kmi->ptr, "toggle", false);
- kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", SELECTMOUSE, KM_PRESS, KM_SHIFT, 0);
+ kmi = WM_keymap_add_item(km, "GIZMOGROUP_OT_gizmo_select", select_mouse, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(kmi->ptr, "extend", false);
RNA_boolean_set(kmi->ptr, "deselect", false);
RNA_boolean_set(kmi->ptr, "toggle", true);
diff --git a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
index ede0f7c96ea..ec8e012b1a7 100644
--- a/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
+++ b/source/blender/windowmanager/gizmo/intern/wm_gizmo_map.c
@@ -945,12 +945,14 @@ void wm_gizmomap_modal_set(
WM_tooltip_clear(C, win);
+ /* Use even if we don't have invoke, so we can setup data before an operator runs. */
+ if (gz->parent_gzgroup->type->invoke_prepare) {
+ gz->parent_gzgroup->type->invoke_prepare(C, gz->parent_gzgroup, gz);
+ }
+
if (gz->type->invoke &&
(gz->type->modal || gz->custom_modal))
{
- if (gz->parent_gzgroup->type->invoke_prepare) {
- gz->parent_gzgroup->type->invoke_prepare(C, gz->parent_gzgroup, gz);
- }
const int retval = gz->type->invoke(C, gz, event);
if ((retval & OPERATOR_RUNNING_MODAL) == 0) {
return;
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index 29a1252cf4b..866c846810b 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -239,12 +239,16 @@ void WM_keyconfig_init(bContext *C)
wmWindowManager *wm = CTX_wm_manager(C);
/* create standard key configs */
- if (!wm->defaultconf)
- wm->defaultconf = WM_keyconfig_new(wm, "Blender", false);
- if (!wm->addonconf)
- wm->addonconf = WM_keyconfig_new(wm, "Blender Addon", false);
- if (!wm->userconf)
- wm->userconf = WM_keyconfig_new(wm, "Blender User", false);
+ if (wm->defaultconf == NULL) {
+ /* Keep lowercase to match the preset filename. */
+ wm->defaultconf = WM_keyconfig_new(wm, WM_KEYCONFIG_STR_DEFAULT, false);
+ }
+ if (wm->addonconf == NULL) {
+ wm->addonconf = WM_keyconfig_new(wm, WM_KEYCONFIG_STR_DEFAULT " addon", false);
+ }
+ if (wm->userconf == NULL) {
+ wm->userconf = WM_keyconfig_new(wm, WM_KEYCONFIG_STR_DEFAULT " user", false);
+ }
/* initialize only after python init is done, for keymaps that
* use python operators */
diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c
index fcda06a7c2d..a9a248f027b 100644
--- a/source/blender/windowmanager/intern/wm_event_system.c
+++ b/source/blender/windowmanager/intern/wm_event_system.c
@@ -91,8 +91,9 @@
#include "DEG_depsgraph.h"
-/* Motion in pixels allowed before we don't consider single/double click. */
-#define WM_EVENT_CLICK_WIGGLE_ROOM 2
+/* Motion in pixels allowed before we don't consider single/double click,
+ * or detect the start of a tweak event. */
+#define WM_EVENT_CLICK_TWEAK_THRESHOLD (U.tweak_threshold * U.dpi_fac)
static void wm_notifier_clear(wmNotifier *note);
static void update_tablet_data(wmWindow *win, wmEvent *event);
@@ -1769,14 +1770,6 @@ void WM_event_remove_handlers(bContext *C, ListBase *handlers)
int WM_userdef_event_map(int kmitype)
{
switch (kmitype) {
- case SELECTMOUSE:
- return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
- case ACTIONMOUSE:
- return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE;
- case EVT_TWEAK_A:
- return (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_R : EVT_TWEAK_L;
- case EVT_TWEAK_S:
- return (U.flag & USER_LMOUSESELECT) ? EVT_TWEAK_L : EVT_TWEAK_R;
case WHEELOUTMOUSE:
return (U.uiflag & USER_WHEELZOOMDIR) ? WHEELUPMOUSE : WHEELDOWNMOUSE;
case WHEELINMOUSE:
@@ -1794,14 +1787,6 @@ int WM_userdef_event_map(int kmitype)
int WM_userdef_event_type_from_keymap_type(int kmitype)
{
switch (kmitype) {
- case SELECTMOUSE:
- return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
- case ACTIONMOUSE:
- return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE;
- case EVT_TWEAK_S:
- return (U.flag & USER_LMOUSESELECT) ? LEFTMOUSE : RIGHTMOUSE;
- case EVT_TWEAK_A:
- return (U.flag & USER_LMOUSESELECT) ? RIGHTMOUSE : LEFTMOUSE;
case EVT_TWEAK_L:
return LEFTMOUSE;
case EVT_TWEAK_M:
@@ -2628,11 +2613,16 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
if (wm_action_not_handled(action)) {
if (event->check_drag) {
wmWindow *win = CTX_wm_window(C);
- if ((abs(event->x - win->eventstate->prevclickx)) >= U.tweak_threshold ||
- (abs(event->y - win->eventstate->prevclicky)) >= U.tweak_threshold)
+ if ((abs(event->x - win->eventstate->prevclickx)) >= WM_EVENT_CLICK_TWEAK_THRESHOLD ||
+ (abs(event->y - win->eventstate->prevclicky)) >= WM_EVENT_CLICK_TWEAK_THRESHOLD)
{
+ int x = event->x;
+ int y = event->y;
short val = event->val;
short type = event->type;
+
+ event->x = win->eventstate->prevclickx;
+ event->y = win->eventstate->prevclicky;
event->val = KM_CLICK_DRAG;
event->type = win->eventstate->type;
@@ -2642,6 +2632,8 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
event->val = val;
event->type = type;
+ event->x = x;
+ event->y = y;
win->eventstate->check_click = 0;
win->eventstate->check_drag = 0;
@@ -2681,9 +2673,16 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
(win->eventstate->prevval == KM_PRESS) &&
(win->eventstate->check_click == true))
{
- if ((abs(event->x - win->eventstate->prevclickx)) <= WM_EVENT_CLICK_WIGGLE_ROOM &&
- (abs(event->y - win->eventstate->prevclicky)) <= WM_EVENT_CLICK_WIGGLE_ROOM)
+ if ((abs(event->x - win->eventstate->prevclickx)) < WM_EVENT_CLICK_TWEAK_THRESHOLD &&
+ (abs(event->y - win->eventstate->prevclicky)) < WM_EVENT_CLICK_TWEAK_THRESHOLD)
{
+ /* Position is where the actual click happens, for more
+ * accurate selecting in case the mouse drifts a little. */
+ int x = event->x;
+ int y = event->y;
+
+ event->x = win->eventstate->prevclickx;
+ event->y = win->eventstate->prevclicky;
event->val = KM_CLICK;
CLOG_INFO(WM_LOG_HANDLERS, 1, "handling CLICK");
@@ -2691,6 +2690,8 @@ static int wm_handlers_do(bContext *C, wmEvent *event, ListBase *handlers)
action |= wm_handlers_do_intern(C, event, handlers);
event->val = KM_RELEASE;
+ event->x = x;
+ event->y = y;
}
else {
win->eventstate->check_click = 0;
@@ -3662,6 +3663,22 @@ static void wm_eventemulation(wmEvent *event)
}
}
+/* applies the global tablet pressure correction curve */
+float wm_pressure_curve(float pressure)
+{
+ if (U.pressure_threshold_max != 0.0f) {
+ pressure /= U.pressure_threshold_max;
+ }
+
+ CLAMP(pressure, 0.0f, 1.0f);
+
+ if (U.pressure_softness != 0.0f) {
+ pressure = powf(pressure, powf(4.0f, -U.pressure_softness));
+ }
+
+ return pressure;
+}
+
/* adds customdata to event */
static void update_tablet_data(wmWindow *win, wmEvent *event)
{
@@ -3672,7 +3689,7 @@ static void update_tablet_data(wmWindow *win, wmEvent *event)
struct wmTabletData *wmtab = MEM_mallocN(sizeof(wmTabletData), "customdata tablet");
wmtab->Active = (int)td->Active;
- wmtab->Pressure = td->Pressure;
+ wmtab->Pressure = wm_pressure_curve(td->Pressure);
wmtab->Xtilt = td->Xtilt;
wmtab->Ytilt = td->Ytilt;
@@ -3767,8 +3784,8 @@ static bool wm_event_is_double_click(wmEvent *event, const wmEvent *event_state)
(event->val == KM_PRESS))
{
if ((ISMOUSE(event->type) == false) ||
- ((abs(event->x - event_state->prevclickx)) <= WM_EVENT_CLICK_WIGGLE_ROOM &&
- (abs(event->y - event_state->prevclicky)) <= WM_EVENT_CLICK_WIGGLE_ROOM))
+ ((abs(event->x - event_state->prevclickx)) < WM_EVENT_CLICK_TWEAK_THRESHOLD &&
+ (abs(event->y - event_state->prevclicky)) < WM_EVENT_CLICK_TWEAK_THRESHOLD))
{
if ((PIL_check_seconds_timer() - event_state->prevclicktime) * 1000 < U.dbl_click_time) {
return true;
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index 318147e8c25..d90ad24dc16 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -594,7 +594,10 @@ bool WM_file_read(bContext *C, const char *filepath, ReportList *reports)
/* confusing this global... */
G.relbase_valid = 1;
- retval = BKE_blendfile_read(C, filepath, reports, 0);
+ retval = BKE_blendfile_read(
+ C, filepath,
+ &(const struct BlendFileReadParams){0},
+ reports);
/* BKE_file_read sets new Main into context. */
Main *bmain = CTX_data_main(C);
@@ -865,7 +868,13 @@ int wm_homefile_read(
if (!use_factory_settings || (filepath_startup[0] != '\0')) {
if (BLI_access(filepath_startup, R_OK) == 0) {
- success = (BKE_blendfile_read(C, filepath_startup, NULL, skip_flags) != BKE_BLENDFILE_READ_FAIL);
+ success = BKE_blendfile_read(
+ C, filepath_startup,
+ &(const struct BlendFileReadParams){
+ .is_startup = true,
+ .skip_flags = skip_flags,
+ },
+ NULL) != BKE_BLENDFILE_READ_FAIL;
}
if (BLI_listbase_is_empty(&U.themes)) {
if (G.debug & G_DEBUG)
@@ -884,8 +893,12 @@ int wm_homefile_read(
if (success == false) {
success = BKE_blendfile_read_from_memory(
- C, datatoc_startup_blend, datatoc_startup_blend_size,
- NULL, skip_flags, true);
+ C, datatoc_startup_blend, datatoc_startup_blend_size, true,
+ &(const struct BlendFileReadParams){
+ .is_startup = true,
+ .skip_flags = skip_flags,
+ },
+ NULL);
if (success) {
if (use_userdef) {
if ((skip_flags & BLO_READ_SKIP_USERDEF) == 0) {
@@ -956,6 +969,17 @@ int wm_homefile_read(
/* match the read WM with current WM */
wm_window_match_do(C, &wmbase, &bmain->wm, &bmain->wm);
+
+ if (use_factory_settings) {
+ /* Clear keymaps because the current default keymap may have been initialized from user preferences,
+ * which have been reset. */
+ for (wmWindowManager *wm = bmain->wm.first; wm; wm = wm->id.next) {
+ if (wm->defaultconf) {
+ wm->defaultconf->flag &= ~KEYCONF_INIT_DEFAULT;
+ }
+ }
+ }
+
WM_check(C); /* opens window(s), checks keymaps */
bmain->name[0] = '\0';
diff --git a/source/blender/windowmanager/intern/wm_gesture.c b/source/blender/windowmanager/intern/wm_gesture.c
index 06a7f3528c5..70150e40142 100644
--- a/source/blender/windowmanager/intern/wm_gesture.c
+++ b/source/blender/windowmanager/intern/wm_gesture.c
@@ -130,7 +130,8 @@ int wm_gesture_evaluate(wmGesture *gesture)
rcti *rect = gesture->customdata;
int dx = BLI_rcti_size_x(rect);
int dy = BLI_rcti_size_y(rect);
- if (abs(dx) + abs(dy) > U.tweak_threshold) {
+ float tweak_threshold = U.tweak_threshold * U.dpi_fac;
+ if (abs(dx) + abs(dy) > tweak_threshold) {
int theta = round_fl_to_int(4.0f * atan2f((float)dy, (float)dx) / (float)M_PI);
int val = EVT_GESTURE_W;
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 52f609700b3..e6114b44221 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -70,6 +70,7 @@
#include "BKE_node.h"
#include "BKE_report.h"
#include "BKE_screen.h"
+#include "BKE_keyconfig.h"
#include "BKE_addon.h"
#include "BKE_appdir.h"
@@ -207,6 +208,7 @@ void WM_init(bContext *C, int argc, const char **argv)
GHOST_CreateSystemPaths();
BKE_addon_pref_type_init();
+ BKE_keyconfig_pref_type_init();
wm_operatortype_init();
wm_operatortypes_register();
@@ -459,7 +461,10 @@ void WM_exit_ext(bContext *C, const bool do_python)
}
WM_paneltype_clear();
+
BKE_addon_pref_type_free();
+ BKE_keyconfig_pref_type_free();
+
wm_operatortype_free();
wm_dropbox_free();
WM_menutype_free();
diff --git a/source/blender/windowmanager/intern/wm_operator_props.c b/source/blender/windowmanager/intern/wm_operator_props.c
index 4515223f829..f8fa652ed63 100644
--- a/source/blender/windowmanager/intern/wm_operator_props.c
+++ b/source/blender/windowmanager/intern/wm_operator_props.c
@@ -44,6 +44,15 @@
#include "WM_api.h"
#include "WM_types.h"
+
+void WM_operator_properties_confirm_or_exec(wmOperatorType *ot)
+{
+ PropertyRNA *prop;
+
+ prop = RNA_def_boolean(ot->srna, "confirm", true, "Confirm", "Prompt for confirmation");
+ RNA_def_property_flag(prop, PROP_HIDDEN | PROP_SKIP_SAVE);
+}
+
/* default properties for fileselect */
void WM_operator_properties_filesel(
wmOperatorType *ot, int filter, short type, short action,
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index 1bb79755e46..e0bd48dfec1 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -863,6 +863,18 @@ int WM_operator_confirm(bContext *C, wmOperator *op, const wmEvent *UNUSED(event
return WM_operator_confirm_message(C, op, NULL);
}
+int WM_operator_confirm_or_exec(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
+{
+ const bool confirm = RNA_boolean_get(op->ptr, "confirm");
+ if (confirm) {
+ return WM_operator_confirm_message(C, op, NULL);
+ }
+ else {
+ return op->type->exec(C, op);
+ }
+}
+
+
/* op->invoke, opens fileselect if path property not set, otherwise executes */
int WM_operator_filesel(bContext *C, wmOperator *op, const wmEvent *UNUSED(event))
{
diff --git a/source/blender/windowmanager/intern/wm_toolsystem.c b/source/blender/windowmanager/intern/wm_toolsystem.c
index 7b91f8360ff..d1173fccff8 100644
--- a/source/blender/windowmanager/intern/wm_toolsystem.c
+++ b/source/blender/windowmanager/intern/wm_toolsystem.c
@@ -810,17 +810,11 @@ static const char *toolsystem_default_tool(const bToolKey *tkey)
case CTX_MODE_PARTICLE:
return "Comb";
- default:
- /* FIXME(campbell): disable for now since this means we can't lasso select by default. */
-#if 0
- return "Select Box";
-#endif
- break;
}
break;
}
- return "Cursor";
+ return "Select Box";
}
/**
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index b84b851476a..df20dbd8055 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -2014,7 +2014,7 @@ float WM_cursor_pressure(const struct wmWindow *win)
const GHOST_TabletData *td = GHOST_GetTabletData(win->ghostwin);
/* if there's tablet data from an active tablet device then add it */
if ((td != NULL) && td->Active != GHOST_kTabletModeNone) {
- return td->Pressure;
+ return wm_pressure_curve(td->Pressure);
}
else {
return -1.0f;
diff --git a/source/blender/windowmanager/wm_event_system.h b/source/blender/windowmanager/wm_event_system.h
index a0610ffcff3..fe28cbf9895 100644
--- a/source/blender/windowmanager/wm_event_system.h
+++ b/source/blender/windowmanager/wm_event_system.h
@@ -101,6 +101,8 @@ void wm_event_do_depsgraph(bContext *C);
void wm_event_do_refresh_wm_and_depsgraph(bContext *C);
void wm_event_do_notifiers(bContext *C);
+float wm_pressure_curve(float raw_pressure);
+
/* wm_keymap.c */
/* wm_dropbox.c */
diff --git a/source/blender/windowmanager/wm_event_types.h b/source/blender/windowmanager/wm_event_types.h
index cfb43bf43ed..40a3d148b7b 100644
--- a/source/blender/windowmanager/wm_event_types.h
+++ b/source/blender/windowmanager/wm_event_types.h
@@ -61,9 +61,6 @@ enum {
MIDDLEMOUSE = 0x0002,
RIGHTMOUSE = 0x0003,
MOUSEMOVE = 0x0004,
- /* only use if you want user option switch possible */
- ACTIONMOUSE = 0x0005,
- SELECTMOUSE = 0x0006,
/* Extra mouse buttons */
BUTTON4MOUSE = 0x0007,
BUTTON5MOUSE = 0x0008,
@@ -324,9 +321,6 @@ enum {
EVT_TWEAK_L = 0x5002,
EVT_TWEAK_M = 0x5003,
EVT_TWEAK_R = 0x5004,
- /* tweak events for action or select mousebutton */
- EVT_TWEAK_A = 0x5005,
- EVT_TWEAK_S = 0x5006,
EVT_GESTURE = 0x5010,
/* 0x5011 is taken, see EVT_ACTIONZONE_FULLSCREEN */
@@ -371,7 +365,7 @@ enum {
#define ISMOUSE_GESTURE(event_type) ((event_type) >= MOUSEPAN && (event_type) <= MOUSEROTATE)
#define ISMOUSE_BUTTON(event_type) \
(ELEM(event_type, \
- LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, ACTIONMOUSE, SELECTMOUSE, \
+ LEFTMOUSE, MIDDLEMOUSE, RIGHTMOUSE, \
BUTTON4MOUSE, BUTTON5MOUSE, BUTTON6MOUSE, BUTTON7MOUSE))
/* test whether the event is tweak event */
diff --git a/tests/python/bl_keymap_completeness.py b/tests/python/bl_keymap_completeness.py
index 0edee3b02f0..19541b355e2 100644
--- a/tests/python/bl_keymap_completeness.py
+++ b/tests/python/bl_keymap_completeness.py
@@ -18,10 +18,15 @@
# <pep8 compliant>
-# simple script to test 'keyconfig_utils' contains correct values.
+# simple script to test 'bl_keymap_utils.keymap_hierarchy' contains correct values.
+# Needed for 'bl_keymap_utils.keymap_hierarchy' which inspects tools.
+import sys
+import os
+sys.path.append(os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, "release", "scripts", "startup"))
+del sys, os
-from bpy_extras import keyconfig_utils
+from bl_keymap_utils import keymap_hierarchy
def check_maps():
@@ -32,7 +37,7 @@ def check_maps():
maps[km_name] = (km_space_type, km_region_type)
fill_maps(km_sub)
- fill_maps(keyconfig_utils.km_hierarchy())
+ fill_maps(keymap_hierarchy.generate())
import bpy
keyconf = bpy.context.window_manager.keyconfigs.active
@@ -43,14 +48,14 @@ def check_maps():
# Check keyconfig contains only maps that exist in blender
test = maps_py - maps_bl
if test:
- print("Keymaps that are in 'keyconfig_utils' but not blender")
+ print("Keymaps that are in 'bl_keymap_utils.keymap_hierarchy' but not blender")
for km_id in sorted(test):
print("\t%s" % km_id)
err = True
test = maps_bl - maps_py
if test:
- print("Keymaps that are in blender but not in 'keyconfig_utils'")
+ print("Keymaps that are in blender but not in 'bl_keymap_utils.keymap_hierarchy'")
for km_id in sorted(test):
km = keyconf.keymaps[km_id]
print(" ('%s', '%s', '%s', [])," % (km_id, km.space_type, km.region_type))
diff --git a/tests/python/bl_run_operators.py b/tests/python/bl_run_operators.py
index 9a3f801b04a..f3b1ec2f4c2 100644
--- a/tests/python/bl_run_operators.py
+++ b/tests/python/bl_run_operators.py
@@ -81,7 +81,6 @@ op_blacklist = (
"wm.operator_cheat_sheet",
"wm.interface_theme_*",
"wm.previews_ensure", # slow - but harmless
- "wm.appconfig_*", # just annoying - but harmless
"wm.keyitem_add", # just annoying - but harmless
"wm.keyconfig_activate", # just annoying - but harmless
"wm.keyconfig_preset_add", # just annoying - but harmless