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:
authorDalai Felinto <dfelinto@gmail.com>2018-06-26 17:07:39 +0300
committerDalai Felinto <dfelinto@gmail.com>2018-06-26 17:07:39 +0300
commitfbaf6e6fb3d2eb2f0c737b7d4713a5ea171738e6 (patch)
tree35bfa54eef6240693a13d594bb49ed7c8d33b32e /release
parentbba0ad903cfa407368c78b0b8480b1a729474305 (diff)
parentc07f2bc89196ea449a2875634eb85efa45733fb5 (diff)
Merge remote-tracking branch 'origin/blender2.8' into temp-dynamic-overridestemp-dynamic-overrides
Diffstat (limited to 'release')
-rw-r--r--release/datafiles/blender_icons.svg325
-rw-r--r--release/datafiles/blender_icons16/icon16_hide_off.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_hide_on.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_mouse_drag.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_mouse_lmb.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_mouse_mmb.datbin0 -> 1048 bytes
-rw-r--r--release/datafiles/blender_icons16/icon16_mouse_rmb.datbin0 -> 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_icons32/icon32_hide_off.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_hide_on.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_mouse_drag.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_mouse_lmb.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_mouse_mmb.datbin0 -> 4120 bytes
-rw-r--r--release/datafiles/blender_icons32/icon32_mouse_rmb.datbin0 -> 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_icons_geom.py2
-rw-r--r--release/scripts/presets/interface_theme/flatty_dark_blueberry.xml125
-rw-r--r--release/scripts/startup/bl_operators/presets.py22
-rw-r--r--release/scripts/startup/bl_operators/wm.py32
-rw-r--r--release/scripts/startup/bl_ui/properties_data_camera.py12
-rw-r--r--release/scripts/startup/bl_ui/properties_data_lightprobe.py2
-rw-r--r--release/scripts/startup/bl_ui/properties_data_mesh.py20
-rw-r--r--release/scripts/startup/bl_ui/properties_material.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_object.py23
-rw-r--r--release/scripts/startup/bl_ui/properties_particle.py89
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_cloth.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_common.py59
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py24
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_field.py209
-rw-r--r--release/scripts/startup/bl_ui/properties_physics_fluid.py6
-rw-r--r--release/scripts/startup/bl_ui/properties_render.py15
-rw-r--r--release/scripts/startup/bl_ui/properties_scene.py13
-rw-r--r--release/scripts/startup/bl_ui/properties_texture.py19
-rw-r--r--release/scripts/startup/bl_ui/properties_view_layer.py15
-rw-r--r--release/scripts/startup/bl_ui/properties_world.py7
-rw-r--r--release/scripts/startup/bl_ui/space_clip.py18
-rw-r--r--release/scripts/startup/bl_ui/space_dopesheet.py215
-rw-r--r--release/scripts/startup/bl_ui/space_graph.py33
-rw-r--r--release/scripts/startup/bl_ui/space_nla.py30
-rw-r--r--release/scripts/startup/bl_ui/space_node.py6
-rw-r--r--release/scripts/startup/bl_ui/space_outliner.py38
-rw-r--r--release/scripts/startup/bl_ui/space_statusbar.py6
-rw-r--r--release/scripts/startup/bl_ui/space_toolsystem_toolbar.py12
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py70
-rw-r--r--release/scripts/startup/bl_ui/space_view3d.py153
-rw-r--r--release/scripts/startup/bl_ui/space_view3d_toolbar.py1
48 files changed, 1120 insertions, 493 deletions
diff --git a/release/datafiles/blender_icons.svg b/release/datafiles/blender_icons.svg
index d389831e668..fe4e2015e79 100644
--- a/release/datafiles/blender_icons.svg
+++ b/release/datafiles/blender_icons.svg
@@ -31919,6 +31919,108 @@
y1="199.12067"
x2="17.16466"
y2="211.01585" />
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask25369-1">
+ <g
+ id="g25371-3"
+ transform="translate(-21,-21)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient25381);fill-rule:evenodd;stroke:none"
+ d="m 341,302 8,8 -8,8 z"
+ id="path25373-1"
+ sodipodi:nodetypes="cccc"
+ inkscape:transform-center-x="4" />
+ <path
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="-4"
+ sodipodi:nodetypes="cccc"
+ id="path25375-1"
+ d="m 357,302 -8,8 -8,-8 z"
+ style="fill:url(#linearGradient25383-9);fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-4"
+ sodipodi:nodetypes="cccc"
+ id="path25377-0"
+ d="m 357,318 -8,-8 8,-8 z"
+ style="fill:url(#linearGradient25385-1);fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="4"
+ sodipodi:nodetypes="cccc"
+ id="path25379-3"
+ d="m 341,318 8,-8 8,8 z"
+ style="fill:url(#linearGradient25387-9);fill-rule:evenodd;stroke:none" />
+ </g>
+ </mask>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16595"
+ id="linearGradient25383-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(90,339,299)"
+ x1="342"
+ y1="288.5"
+ x2="344.5"
+ y2="288.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16595"
+ id="linearGradient25385-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(180,349.5,299.5)"
+ x1="342"
+ y1="288.5"
+ x2="344.5"
+ y2="288.5" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient16595"
+ id="linearGradient25387-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="rotate(-90,360,300)"
+ x1="342"
+ y1="288.5"
+ x2="344.5"
+ y2="288.5" />
+ <mask
+ maskUnits="userSpaceOnUse"
+ id="mask25369-1-6">
+ <g
+ id="g25371-3-4"
+ transform="translate(-21,-21)">
+ <path
+ inkscape:connector-curvature="0"
+ style="fill:url(#linearGradient25381);fill-rule:evenodd;stroke:none"
+ d="m 341,302 8,8 -8,8 z"
+ id="path25373-1-0"
+ sodipodi:nodetypes="cccc"
+ inkscape:transform-center-x="4" />
+ <path
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="-4"
+ sodipodi:nodetypes="cccc"
+ id="path25375-1-0"
+ d="m 357,302 -8,8 -8,-8 z"
+ style="fill:url(#linearGradient25383-9);fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-x="-4"
+ sodipodi:nodetypes="cccc"
+ id="path25377-0-4"
+ d="m 357,318 -8,-8 8,-8 z"
+ style="fill:url(#linearGradient25385-1);fill-rule:evenodd;stroke:none" />
+ <path
+ inkscape:connector-curvature="0"
+ inkscape:transform-center-y="4"
+ sodipodi:nodetypes="cccc"
+ id="path25379-3-6"
+ d="m 341,318 8,-8 8,8 z"
+ style="fill:url(#linearGradient25387-9);fill-rule:evenodd;stroke:none" />
+ </g>
+ </mask>
</defs>
<sodipodi:namedview
id="base"
@@ -92721,6 +92823,229 @@
sodipodi:nodetypes="ccccccc" />
</g>
</g>
+ <g
+ style="display:inline;enable-background:new"
+ transform="translate(168.01766,170.03707)"
+ id="ICON_GRID-3"
+ mask="url(#mask25369-1)">
+ <rect
+ y="281"
+ x="320"
+ height="16"
+ width="16"
+ id="rect36193-3"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 324.5,295.75 v -13.5 m 7,13.5 v -13.5"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path36195-8"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path36197-0"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 321.25001,285.50001 334.75,285.5 M 321.25001,292.50001 334.75,292.5"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path36199-5"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.5,296.5 v -14.99999 m 7,14.99999 v -14.99999"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 320.5,285.50001 h 15 m -15,6.99999 h 15"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path36201-6"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ style="display:inline;enable-background:new;opacity:0.25"
+ transform="translate(188.9552,170.08067)"
+ id="ICON_GRID-3-7"
+ mask="url(#mask25369-1-6)">
+ <rect
+ y="281"
+ x="320"
+ height="16"
+ width="16"
+ id="rect36193-3-2"
+ style="display:inline;overflow:visible;visibility:visible;opacity:0.01000001;fill:#cccccc;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:2.70000005;marker:none;enable-background:accumulate" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 324.5,295.75 v -13.5 m 7,13.5 v -13.5"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path36195-8-8"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path36197-0-2"
+ style="fill:#ffffff;fill-rule:evenodd;stroke:#000000;stroke-width:2.5;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 321.25001,285.50001 334.75,285.5 M 321.25001,292.50001 334.75,292.5"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ id="path36199-5-9"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="m 324.5,296.5 v -14.99999 m 7,14.99999 v -14.99999"
+ sodipodi:nodetypes="cccc"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="cccc"
+ d="m 320.5,285.50001 h 15 m -15,6.99999 h 15"
+ style="fill:none;stroke:#ffffff;stroke-width:1;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ id="path36201-6-9"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ transform="translate(-564,-55.99997)"
+ id="g10320"
+ style="display:inline;enable-background:new">
+ <rect
+ style="opacity:0;vector-effect:none;fill:#d40000;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"
+ id="rect10310"
+ width="15.999999"
+ height="15.999999"
+ x="-669"
+ y="506.99997"
+ transform="scale(-1,1)" />
+ <path
+ transform="scale(-1,1)"
+ 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 -655.5,515.49997 v 4.0165 c 0,1.65287 -1.33066,2.98353 -2.98353,2.98353 h -4.03294 c -1.65287,0 -2.98353,-1.33066 -2.98353,-2.98353 v -9.03297 c 0,-1.65287 1.33066,-2.98353 2.98353,-2.98353 H -660.5"
+ id="rect10312"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssssssc" />
+ <g
+ id="g10318"
+ transform="translate(-20)" />
+ <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;marker:none;enable-background:new"
+ d="m 658.5,507.49997 h -0.0165 c -1.65287,0 -2.98353,1.33066 -2.98353,2.98353 v 3.01647 l 3.00824,0.008 z"
+ id="rect10312-0"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssccc" />
+ </g>
+ <g
+ style="display:inline;enable-background:new"
+ id="g10350">
+ <rect
+ y="451.5"
+ x="152.5"
+ height="15"
+ width="10"
+ id="rect10334"
+ 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"
+ rx="3.0625"
+ ry="3.0625" />
+ <g
+ id="g10338"
+ transform="translate(-523,-55.999969)">
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ d="m 680.5,513.49997 -0.01,-4.03235"
+ style="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"
+ id="path10336" />
+ </g>
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path10340"
+ d="M 165.5,459.5 V 455"
+ 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:open="true"
+ d="M 164.50114,451.52593 A 9.3798456,5.5 0 0 1 165.50372,454"
+ sodipodi:end="0"
+ sodipodi:start="5.8166094"
+ sodipodi:ry="5.5"
+ sodipodi:rx="9.3798456"
+ sodipodi:cy="454"
+ sodipodi:cx="156.12387"
+ sodipodi:type="arc"
+ id="path10342"
+ 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
+ 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 167.50001,457.60147 v -4.05761"
+ id="path10344"
+ inkscape:connector-curvature="0"
+ 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 165.5,459.5 V 454"
+ id="path10346"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path10348"
+ d="m 167.50001,457.60147 v -4.05761"
+ 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;enable-background:new"
+ id="g10432"
+ transform="translate(-522,-55.99997)">
+ <rect
+ transform="scale(-1,1)"
+ y="506.99997"
+ x="-669"
+ height="15.999999"
+ width="15.999999"
+ id="rect10424"
+ style="opacity:0;vector-effect:none;fill:#d40000;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" />
+ <path
+ sodipodi:nodetypes="cssssssc"
+ inkscape:connector-curvature="0"
+ id="path10426"
+ d="m 665.49995,515.49997 v 4.0165 c 0,1.65287 -1.33066,2.98353 -2.98353,2.98353 h -4.03294 c -1.65287,0 -2.98353,-1.33066 -2.98353,-2.98353 v -9.03297 c 0,-1.65287 1.33066,-2.98353 2.98353,-2.98353 h 2.01647"
+ 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
+ transform="translate(-20)"
+ id="g10428" />
+ <path
+ sodipodi:nodetypes="cssccc"
+ inkscape:connector-curvature="0"
+ id="path10430"
+ d="m 662.49995,507.49997 h 0.0165 c 1.65287,0 2.98353,1.33066 2.98353,2.98353 v 3.01647 l -3.00824,0.008 z"
+ 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" />
+ </g>
+ <g
+ transform="translate(-563,-34.99997)"
+ id="g10308-9"
+ style="display:inline;enable-background:new">
+ <rect
+ style="opacity:0;vector-effect:none;fill:#d40000;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"
+ id="rect10296-2"
+ width="15.999999"
+ height="15.999999"
+ x="673"
+ y="485.99997" />
+ <rect
+ 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="rect10298-7"
+ width="10"
+ height="14.999969"
+ x="675.5"
+ y="486.5"
+ rx="2.9835341"
+ ry="2.9835341" />
+ <rect
+ ry="0.546875"
+ rx="0.546875"
+ y="489.49997"
+ x="679.5"
+ height="5.0000005"
+ width="2"
+ id="rect10300-9"
+ style="opacity:1;vector-effect:none;fill:#f9f9f9;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" />
+ <g
+ transform="translate(0,-21)"
+ id="g10306-4" />
+ </g>
</g>
<g
inkscape:groupmode="layer"
diff --git a/release/datafiles/blender_icons16/icon16_hide_off.dat b/release/datafiles/blender_icons16/icon16_hide_off.dat
new file mode 100644
index 00000000000..4feb0d26696
--- /dev/null
+++ 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
new file mode 100644
index 00000000000..906edb431dd
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_hide_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_mouse_drag.dat b/release/datafiles/blender_icons16/icon16_mouse_drag.dat
new file mode 100644
index 00000000000..751421684b1
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_mouse_drag.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_mouse_lmb.dat b/release/datafiles/blender_icons16/icon16_mouse_lmb.dat
new file mode 100644
index 00000000000..2a0c42f4a6a
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_mouse_lmb.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_mouse_mmb.dat b/release/datafiles/blender_icons16/icon16_mouse_mmb.dat
new file mode 100644
index 00000000000..300f6be4ee3
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_mouse_mmb.dat
Binary files differ
diff --git a/release/datafiles/blender_icons16/icon16_mouse_rmb.dat b/release/datafiles/blender_icons16/icon16_mouse_rmb.dat
new file mode 100644
index 00000000000..3f13b167eff
--- /dev/null
+++ b/release/datafiles/blender_icons16/icon16_mouse_rmb.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 730f5749104..320c1be5259 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 edef3a356b2..279d744a012 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_icons32/icon32_hide_off.dat b/release/datafiles/blender_icons32/icon32_hide_off.dat
new file mode 100644
index 00000000000..e13dd195ee6
--- /dev/null
+++ 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
new file mode 100644
index 00000000000..25c83fb165d
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_hide_on.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_mouse_drag.dat b/release/datafiles/blender_icons32/icon32_mouse_drag.dat
new file mode 100644
index 00000000000..96d3e23181c
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_mouse_drag.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_mouse_lmb.dat b/release/datafiles/blender_icons32/icon32_mouse_lmb.dat
new file mode 100644
index 00000000000..5cb01a4199b
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_mouse_lmb.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_mouse_mmb.dat b/release/datafiles/blender_icons32/icon32_mouse_mmb.dat
new file mode 100644
index 00000000000..2c0bc4e1873
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_mouse_mmb.dat
Binary files differ
diff --git a/release/datafiles/blender_icons32/icon32_mouse_rmb.dat b/release/datafiles/blender_icons32/icon32_mouse_rmb.dat
new file mode 100644
index 00000000000..3e8bf43d306
--- /dev/null
+++ b/release/datafiles/blender_icons32/icon32_mouse_rmb.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 f9b3a48cfde..ec850df393e 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 482530bab58..07e66cc51a9 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_icons_geom.py b/release/datafiles/blender_icons_geom.py
index e9155a91fc8..bb7a6568767 100644
--- a/release/datafiles/blender_icons_geom.py
+++ b/release/datafiles/blender_icons_geom.py
@@ -288,7 +288,7 @@ def main():
objects = []
if args.group:
- group = bpy.data.groups.get(args.group)
+ group = bpy.data.collections.get(args.group)
if group is None:
print(f"Group {args.group!r} not found!")
return
diff --git a/release/scripts/presets/interface_theme/flatty_dark_blueberry.xml b/release/scripts/presets/interface_theme/flatty_dark_blueberry.xml
index eb6c8e68511..fce74a4fac0 100644
--- a/release/scripts/presets/interface_theme/flatty_dark_blueberry.xml
+++ b/release/scripts/presets/interface_theme/flatty_dark_blueberry.xml
@@ -8,21 +8,21 @@
icon_saturation="0.4"
widget_emboss="#00000005"
editor_outline="#1c1d20"
- axis_x="#dc4242"
- axis_y="#42dc42"
- axis_z="#4242dc"
+ axis_x="#ff3352"
+ axis_y="#8bdc00"
+ axis_z="#2890ff"
manipulator_hi="#ffffff"
- manipulator_primary="#e3ff33"
- manipulator_secondary="#33ffff"
- manipulator_a="#177f17"
- manipulator_b="#7f1717">
+ manipulator_primary="#f5f14d"
+ manipulator_secondary="#63ffff"
+ manipulator_a="#4da84d"
+ manipulator_b="#a33535">
<wcol_regular>
<ThemeWidgetColors outline="#38393e"
inner="#505158ff"
- inner_sel="#407180ff"
+ inner_sel="#93989eff"
item="#38393eff"
text="#eeeeee"
- text_sel="#ffffff"
+ text_sel="#e9e9ff"
show_shaded="FALSE"
shadetop="0"
shadedown="-5"
@@ -32,7 +32,7 @@
<wcol_tool>
<ThemeWidgetColors outline="#2f2f34"
inner="#505158ff"
- inner_sel="#599eb3ff"
+ inner_sel="#2f2f34ff"
item="#e6ebffff"
text="#f2f2f2"
text_sel="#ffffff"
@@ -56,7 +56,7 @@
</ThemeWidgetColors>
</wcol_toolbar_item>
<wcol_radio>
- <ThemeWidgetColors outline="#2d2e33"
+ <ThemeWidgetColors outline="#424352"
inner="#505158ff"
inner_sel="#2d2d33ff"
item="#ffffffff"
@@ -82,8 +82,8 @@
</ThemeWidgetColors>
</wcol_text>
<wcol_option>
- <ThemeWidgetColors outline="#2d2e33"
- inner="#2d2e33ff"
+ <ThemeWidgetColors outline="#424352"
+ inner="#222325b3"
inner_sel="#595966ff"
item="#ffffffff"
text="#eeeeee"
@@ -97,7 +97,7 @@
<wcol_toggle>
<ThemeWidgetColors outline="#43434d"
inner="#595966ff"
- inner_sel="#599eb3ff"
+ inner_sel="#3f7d80ff"
item="#191919ff"
text="#eeeeee"
text_sel="#ffffff"
@@ -110,20 +110,20 @@
<wcol_num>
<ThemeWidgetColors outline="#46464d"
inner="#505158ff"
- inner_sel="#3f7180ff"
+ inner_sel="#3f7780ff"
item="#46464dff"
text="#eeeeee"
text_sel="#ffffff"
- show_shaded="FALSE"
+ show_shaded="TRUE"
shadetop="0"
shadedown="0"
- roundness="0.8">
+ roundness="0.6">
</ThemeWidgetColors>
</wcol_num>
<wcol_numslider>
<ThemeWidgetColors outline="#46464d"
inner="#3f3f47ff"
- inner_sel="#3f7180ff"
+ inner_sel="#3f7780ff"
item="#505158ff"
text="#eeeeee"
text_sel="#ffffff"
@@ -136,7 +136,7 @@
<wcol_box>
<ThemeWidgetColors outline="#2d2e33"
inner="#43454dff"
- inner_sel="#599eb3ff"
+ inner_sel="#3f7780ff"
item="#191919ff"
text="#eeeeee"
text_sel="#ffffff"
@@ -173,7 +173,7 @@
</ThemeWidgetColors>
</wcol_pulldown>
<wcol_menu_back>
- <ThemeWidgetColors outline="#1f1f1f"
+ <ThemeWidgetColors outline="#29282e"
inner="#1f1f1fef"
inner_sel="#505158ff"
item="#646464ff"
@@ -186,10 +186,10 @@
</ThemeWidgetColors>
</wcol_menu_back>
<wcol_pie_menu>
- <ThemeWidgetColors outline="#4d4d4d"
- inner="#1a1a1aff"
- inner_sel="#599eb3ff"
- item="#599eb3ff"
+ <ThemeWidgetColors outline="#29282e"
+ inner="#29282eff"
+ inner_sel="#505158ff"
+ item="#696a72ff"
text="#eeeeee"
text_sel="#ffffff"
show_shaded="FALSE"
@@ -199,10 +199,10 @@
</ThemeWidgetColors>
</wcol_pie_menu>
<wcol_tooltip>
- <ThemeWidgetColors outline="#000000"
- inner="#1f1f1fef"
- inner_sel="#2d2d2de6"
- item="#646464ff"
+ <ThemeWidgetColors outline="#2f3035"
+ inner="#19191aef"
+ inner_sel="#19191aef"
+ item="#19191aef"
text="#eeeeee"
text_sel="#ffffff"
show_shaded="FALSE"
@@ -277,10 +277,10 @@
</wcol_state>
<wcol_tab>
<ThemeWidgetColors outline="#28292d"
- inner="#38393fff"
+ inner="#323239ff"
inner_sel="#43444bff"
item="#28292dff"
- text="#ffffff"
+ text="#bebebe"
text_sel="#ffffff"
show_shaded="FALSE"
shadetop="0"
@@ -381,6 +381,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -436,6 +437,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -472,6 +474,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -517,6 +520,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -574,8 +578,9 @@
tab_back="#28292dff"
tab_outline="#28292d">
<panelcolors>
- <ThemePanelColors header="#29282eff"
+ <ThemePanelColors header="#2f3035ff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -652,6 +657,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -700,6 +706,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -711,11 +718,11 @@
<properties>
<ThemeProperties>
<space>
- <ThemeSpaceGeneric back="#2f3035"
- title="#ffffff"
+ <ThemeSpaceGeneric back="#3a3c42"
+ title="#eeeeee"
text="#ffffff"
text_hi="#ffffff"
- header="#29282eff"
+ header="#3a3c42ff"
header_text="#eeeeee"
header_text_hi="#ffffff"
button="#2f303599"
@@ -724,11 +731,12 @@
button_text_hi="#ffffff"
tab_active="#446499"
tab_inactive="#28292d"
- tab_back="#28292dff"
+ tab_back="#303034e6"
tab_outline="#28292d">
<panelcolors>
- <ThemePanelColors header="#29282eff"
- back="#3e3f46ff"
+ <ThemePanelColors header="#3a3c42cc"
+ back="#2c2e33b3"
+ sub_back="#0000003e"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -768,6 +776,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -823,6 +832,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -840,13 +850,13 @@
</node_editor>
<outliner>
<ThemeOutliner match="#337f33"
- selected_highlight="#7297d0">
+ selected_highlight="#747a83">
<space>
- <ThemeSpaceGeneric back="#2f3035"
+ <ThemeSpaceGeneric back="#3a3c42"
title="#ffffff"
- text="#ffffff"
+ text="#dedede"
text_hi="#ffffff"
- header="#29282eff"
+ header="#3f3f45ff"
header_text="#eeeeee"
header_text_hi="#ffffff"
button="#2f303599"
@@ -860,6 +870,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -898,6 +909,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -913,7 +925,7 @@
title="#ffffff"
text="#ffffff"
text_hi="#ffffff"
- header="#29282eff"
+ header="#2f3035ff"
header_text="#eeeeee"
header_text_hi="#ffffff"
button="#2f303599"
@@ -927,6 +939,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -961,6 +974,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -1014,6 +1028,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000019"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -1036,7 +1051,7 @@
title="#ffffff"
text="#ffffff"
text_hi="#ffffff"
- header="#29282eff"
+ header="#1f1f23ff"
header_text="#eeeeee"
header_text_hi="#ffffff"
button="#2f303599"
@@ -1050,6 +1065,7 @@
<panelcolors>
<ThemePanelColors header="#29282eff"
back="#3e3f46ff"
+ sub_back="#00000000"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
@@ -1061,24 +1077,25 @@
<statusbar>
<ThemeStatusBar>
<space>
- <ThemeSpaceGeneric back="#09090a"
- title="#8f8f8f"
- text="#8f8f8f"
+ <ThemeSpaceGeneric back="#29282e"
+ title="#e4e8ff"
+ text="#747a83"
text_hi="#ffffff"
- header="#252528ff"
- header_text="#cbcbcb"
+ header="#1f1f23ff"
+ header_text="#959eaa"
header_text_hi="#ffffff"
- button="#72727280"
+ button="#2f3035ff"
button_title="#000000"
button_text="#000000"
button_text_hi="#ffffff"
- tab_active="#727272"
- tab_inactive="#535353"
- tab_back="#404040ff"
- tab_outline="#3c3c3c">
+ tab_active="#666c76"
+ tab_inactive="#2f3035"
+ tab_back="#2f3035ff"
+ tab_outline="#2f3035">
<panelcolors>
- <ThemePanelColors header="#5f5f5fff"
+ <ThemePanelColors header="#2f3035ff"
back="#46464699"
+ sub_back="#00000000"
show_header="TRUE"
show_back="TRUE">
</ThemePanelColors>
diff --git a/release/scripts/startup/bl_operators/presets.py b/release/scripts/startup/bl_operators/presets.py
index 074177bc4b7..5c1ca0ab2ad 100644
--- a/release/scripts/startup/bl_operators/presets.py
+++ b/release/scripts/startup/bl_operators/presets.py
@@ -297,7 +297,7 @@ class AddPresetRender(AddPresetBase, Operator):
"""Add or remove a Render Preset"""
bl_idname = "render.preset_add"
bl_label = "Add Render Preset"
- preset_menu = "RENDER_MT_presets"
+ preset_menu = "RENDER_PT_presets"
preset_defines = [
"scene = bpy.context.scene"
@@ -320,7 +320,7 @@ class AddPresetCamera(AddPresetBase, Operator):
"""Add or remove a Camera Preset"""
bl_idname = "camera.preset_add"
bl_label = "Add Camera Preset"
- preset_menu = "CAMERA_MT_presets"
+ preset_menu = "CAMERA_PT_presets"
preset_defines = [
"cam = bpy.context.camera"
@@ -351,7 +351,7 @@ class AddPresetSafeAreas(AddPresetBase, Operator):
"""Add or remove a Safe Areas Preset"""
bl_idname = "safe_areas.preset_add"
bl_label = "Add Safe Area Preset"
- preset_menu = "SAFE_AREAS_MT_presets"
+ preset_menu = "SAFE_AREAS_PT_presets"
preset_defines = [
"safe_areas = bpy.context.scene.safe_areas"
@@ -371,7 +371,7 @@ class AddPresetCloth(AddPresetBase, Operator):
"""Add or remove a Cloth Preset"""
bl_idname = "cloth.preset_add"
bl_label = "Add Cloth Preset"
- preset_menu = "CLOTH_MT_presets"
+ preset_menu = "CLOTH_PT_presets"
preset_defines = [
"cloth = bpy.context.cloth"
@@ -393,7 +393,7 @@ class AddPresetFluid(AddPresetBase, Operator):
"""Add or remove a Fluid Preset"""
bl_idname = "fluid.preset_add"
bl_label = "Add Fluid Preset"
- preset_menu = "FLUID_MT_presets"
+ preset_menu = "FLUID_PT_presets"
preset_defines = [
"fluid = bpy.context.fluid"
@@ -411,7 +411,7 @@ class AddPresetHairDynamics(AddPresetBase, Operator):
"""Add or remove a Hair Dynamics Preset"""
bl_idname = "particle.hair_dynamics_preset_add"
bl_label = "Add Hair Dynamics Preset"
- preset_menu = "PARTICLE_MT_hair_dynamics_presets"
+ preset_menu = "PARTICLE_PT_hair_dynamics_presets"
preset_defines = [
"psys = bpy.context.particle_system",
@@ -467,7 +467,7 @@ class AddPresetTrackingCamera(AddPresetBase, Operator):
"""Add or remove a Tracking Camera Intrinsics Preset"""
bl_idname = "clip.camera_preset_add"
bl_label = "Add Camera Preset"
- preset_menu = "CLIP_MT_camera_presets"
+ preset_menu = "CLIP_PT_camera_presets"
preset_defines = [
"camera = bpy.context.edit_movieclip.tracking.camera"
@@ -501,7 +501,7 @@ class AddPresetTrackingTrackColor(AddPresetBase, Operator):
"""Add or remove a Clip Track Color Preset"""
bl_idname = "clip.track_color_preset_add"
bl_label = "Add Track Color Preset"
- preset_menu = "CLIP_MT_track_color_presets"
+ preset_menu = "CLIP_PT_track_color_presets"
preset_defines = [
"track = bpy.context.edit_movieclip.tracking.tracks.active"
@@ -519,7 +519,7 @@ class AddPresetTrackingSettings(AddPresetBase, Operator):
"""Add or remove a motion tracking settings preset"""
bl_idname = "clip.tracking_settings_preset_add"
bl_label = "Add Tracking Settings Preset"
- preset_menu = "CLIP_MT_tracking_settings_presets"
+ preset_menu = "CLIP_PT_tracking_settings_presets"
preset_defines = [
"settings = bpy.context.edit_movieclip.tracking.settings"
@@ -549,7 +549,7 @@ class AddPresetNodeColor(AddPresetBase, Operator):
"""Add or remove a Node Color Preset"""
bl_idname = "node.node_color_preset_add"
bl_label = "Add Node Color Preset"
- preset_menu = "NODE_MT_node_color_presets"
+ preset_menu = "NODE_PT_node_color_presets"
preset_defines = [
"node = bpy.context.active_node"
@@ -662,7 +662,7 @@ class AddPresetUnitsLength(AddPresetBase, Operator):
"""Add or remove length units preset"""
bl_idname = "scene.units_length_preset_add"
bl_label = "Add Length Units Preset"
- preset_menu = "SCENE_MT_units_length_presets"
+ preset_menu = "SCENE_PT_units_length_presets"
preset_defines = [
"scene = bpy.context.scene"
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index b0a5e19d269..b6f77505410 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -2456,7 +2456,7 @@ class WM_OT_studiolight_install(Operator):
for filepath in filepaths:
shutil.copy(str(filepath), str(path_studiolights))
- userpref.studio_lights_refresh()
+ userpref.studio_lights.new(str(path_studiolights.joinpath(filepath.name)), self.orientation)
# print message
msg = (
@@ -2478,34 +2478,23 @@ class WM_OT_studiolight_uninstall(Operator):
bl_label = "Uninstall Studio Light"
index = bpy.props.IntProperty()
+ def _remove_path(self, path):
+ if path.exists():
+ path.unlink()
+
def execute(self, context):
import pathlib
userpref = context.user_preferences
for studio_light in userpref.studio_lights:
if studio_light.index == self.index:
- path = pathlib.Path(studio_light.path)
- if path.exists():
- path.unlink()
- userpref.studio_lights_refresh()
- return {'FINISHED'}
+ self._remove_path(pathlib.Path(studio_light.path))
+ self._remove_path(pathlib.Path(studio_light.path_irr_cache))
+ self._remove_path(pathlib.Path(studio_light.path_sh_cache))
+ userpref.studio_lights.remove(studio_light)
+ return {'FINISHED'}
return {'CANCELLED'}
-class WM_OT_studiolight_expand(Operator):
- bl_idname = "wm.studiolight_expand"
- bl_label = "Expand Studio Light"
- index = bpy.props.IntProperty()
-
- def execute(self, context):
- userpref = context.user_preferences
- for studio_light in userpref.studio_lights:
- if studio_light.index == self.index:
- studio_light.show_expanded = not studio_light.show_expanded
- break
-
- return {'FINISHED'}
-
-
class WM_OT_studiolight_userpref_show(Operator):
"""Show light user preferences"""
bl_idname = "wm.studiolight_userpref_show"
@@ -2572,7 +2561,6 @@ classes = (
WM_OT_owner_disable,
WM_OT_owner_enable,
WM_OT_url_open,
- WM_OT_studiolight_expand,
WM_OT_studiolight_install,
WM_OT_studiolight_uninstall,
WM_OT_studiolight_userpref_show,
diff --git a/release/scripts/startup/bl_ui/properties_data_camera.py b/release/scripts/startup/bl_ui/properties_data_camera.py
index 22c7964173b..10709676b85 100644
--- a/release/scripts/startup/bl_ui/properties_data_camera.py
+++ b/release/scripts/startup/bl_ui/properties_data_camera.py
@@ -34,7 +34,7 @@ class CameraButtonsPanel:
return context.camera and (engine in cls.COMPAT_ENGINES)
-class CAMERA_MT_presets(PresetMenu):
+class CAMERA_PT_presets(PresetMenu):
bl_label = "Camera Presets"
preset_subdir = "camera"
preset_operator = "script.execute_preset"
@@ -42,7 +42,7 @@ class CAMERA_MT_presets(PresetMenu):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
-class SAFE_AREAS_MT_presets(PresetMenu):
+class SAFE_AREAS_PT_presets(PresetMenu):
bl_label = "Camera Presets"
preset_subdir = "safe_areas"
preset_operator = "script.execute_preset"
@@ -187,7 +187,7 @@ class DATA_PT_camera(CameraButtonsPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw_header_preset(self, context):
- CAMERA_MT_presets.draw_panel_header(self.layout)
+ CAMERA_PT_presets.draw_panel_header(self.layout)
def draw(self, context):
layout = self.layout
@@ -409,7 +409,7 @@ class DATA_PT_camera_safe_areas(CameraButtonsPanel, Panel):
self.layout.prop(cam, "show_safe_areas", text="")
def draw_header_preset(self, context):
- SAFE_AREAS_MT_presets.draw_panel_header(self.layout)
+ SAFE_AREAS_PT_presets.draw_panel_header(self.layout)
def draw(self, context):
layout = self.layout
@@ -449,8 +449,8 @@ def draw_display_safe_settings(layout, safe_data, settings):
classes = (
- CAMERA_MT_presets,
- SAFE_AREAS_MT_presets,
+ CAMERA_PT_presets,
+ SAFE_AREAS_PT_presets,
DATA_PT_context_camera,
DATA_PT_lens,
DATA_PT_camera,
diff --git a/release/scripts/startup/bl_ui/properties_data_lightprobe.py b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
index f3ccc9f3176..10b66dd0033 100644
--- a/release/scripts/startup/bl_ui/properties_data_lightprobe.py
+++ b/release/scripts/startup/bl_ui/properties_data_lightprobe.py
@@ -155,7 +155,7 @@ class DATA_PT_lightprobe_display(DataButtonsPanel, Panel):
col = layout.column()
- if probe.type != "PLANAR":
+ if probe.type != 'PLANAR':
col.prop(probe, "data_draw_size", text="Size")
else:
col.prop(ob, "empty_draw_size", text="Arrow Size")
diff --git a/release/scripts/startup/bl_ui/properties_data_mesh.py b/release/scripts/startup/bl_ui/properties_data_mesh.py
index 5ff9f83b1a9..e8015327c1d 100644
--- a/release/scripts/startup/bl_ui/properties_data_mesh.py
+++ b/release/scripts/startup/bl_ui/properties_data_mesh.py
@@ -353,19 +353,16 @@ class DATA_PT_shape_keys(MeshButtonsPanel, Panel):
row.active = enable_edit_value
row.prop(kb, "value")
- split = layout.split()
+ layout.use_property_split = True
- col = split.column(align=True)
- col.active = enable_edit_value
- col.label(text="Range:")
- col.prop(kb, "slider_min", text="Min")
- col.prop(kb, "slider_max", text="Max")
+ col = layout.column()
+ sub.active = enable_edit_value
+ sub = col.column(align=True)
+ sub.prop(kb, "slider_min", text="Range Min")
+ sub.prop(kb, "slider_max", text="Max")
- col = split.column(align=True)
- col.active = enable_edit_value
- col.label(text="Blend:")
- col.prop_search(kb, "vertex_group", ob, "vertex_groups", text="")
- col.prop_search(kb, "relative_key", key, "key_blocks", text="")
+ col.prop_search(kb, "vertex_group", ob, "vertex_groups", text="Vertex Group")
+ col.prop_search(kb, "relative_key", key, "key_blocks", text="Relative To")
else:
layout.prop(kb, "interpolation")
@@ -419,6 +416,7 @@ class DATA_PT_customdata(MeshButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
obj = context.object
me = context.mesh
diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py
index 2b298c560c7..fdbf0b240c4 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -198,14 +198,14 @@ class EEVEE_MATERIAL_PT_options(MaterialButtonsPanel, Panel):
layout.prop(mat, "blend_method")
- if mat.blend_method != "OPAQUE":
+ if mat.blend_method != 'OPAQUE':
layout.prop(mat, "transparent_shadow_method")
row = layout.row()
- row.active = ((mat.blend_method == "CLIP") or (mat.transparent_shadow_method == "CLIP"))
+ row.active = ((mat.blend_method == 'CLIP') or (mat.transparent_shadow_method == 'CLIP'))
row.prop(mat, "alpha_threshold")
- if mat.blend_method not in {"OPAQUE", "CLIP", "HASHED"}:
+ if mat.blend_method not in {'OPAQUE', 'CLIP', 'HASHED'}:
layout.prop(mat, "show_transparent_backside")
layout.prop(mat, "use_screen_refraction")
diff --git a/release/scripts/startup/bl_ui/properties_object.py b/release/scripts/startup/bl_ui/properties_object.py
index 153d6af9b24..17034689528 100644
--- a/release/scripts/startup/bl_ui/properties_object.py
+++ b/release/scripts/startup/bl_ui/properties_object.py
@@ -57,15 +57,17 @@ class OBJECT_PT_transform(ObjectButtonsPanel, Panel):
col = flow.column()
row = col.row(align=True)
row.prop(ob, "location")
- row.prop(ob, "lock_location", text="")
+ row.use_property_decorate = False
+ row.prop(ob, "lock_location", text="", emboss=False)
if ob.rotation_mode == 'QUATERNION':
col = flow.column()
row = col.row(align=True)
row.prop(ob, "rotation_quaternion", text="Rotation")
sub = row.column(align=True)
- sub.prop(ob, "lock_rotation_w", text="")
- sub.prop(ob, "lock_rotation", text="")
+ sub.use_property_decorate = False
+ sub.prop(ob, "lock_rotation_w", text="", emboss=False)
+ sub.prop(ob, "lock_rotation", text="", emboss=False)
elif ob.rotation_mode == 'AXIS_ANGLE':
# row.column().label(text="Rotation")
#row.column().prop(pchan, "rotation_angle", text="Angle")
@@ -75,20 +77,25 @@ class OBJECT_PT_transform(ObjectButtonsPanel, Panel):
row.prop(ob, "rotation_axis_angle", text="Rotation")
sub = row.column(align=True)
- sub.prop(ob, "lock_rotation_w", text="")
- sub.prop(ob, "lock_rotation", text="")
+ sub.use_property_decorate = False
+ sub.prop(ob, "lock_rotation_w", text="", emboss=False)
+ sub.prop(ob, "lock_rotation", text="", emboss=False)
else:
col = flow.column()
row = col.row(align=True)
row.prop(ob, "rotation_euler", text="Rotation")
- row.prop(ob, "lock_rotation", text="")
+ row.use_property_decorate = False
+ row.prop(ob, "lock_rotation", text="", emboss=False)
col = flow.column()
row = col.row(align=True)
row.prop(ob, "scale")
- row.prop(ob, "lock_scale", text="")
+ row.use_property_decorate = False
+ row.prop(ob, "lock_scale", text="", emboss=False)
- layout.prop(ob, "rotation_mode")
+ row = layout.row(align=True)
+ row.prop(ob, "rotation_mode")
+ row.label(text="", icon='BLANK1')
class OBJECT_PT_delta_transform(ObjectButtonsPanel, Panel):
diff --git a/release/scripts/startup/bl_ui/properties_particle.py b/release/scripts/startup/bl_ui/properties_particle.py
index 76e490ad07a..fbc053a565f 100644
--- a/release/scripts/startup/bl_ui/properties_particle.py
+++ b/release/scripts/startup/bl_ui/properties_particle.py
@@ -83,7 +83,7 @@ class PARTICLE_MT_specials(Menu):
layout.operator("particle.duplicate_particle_system")
-class PARTICLE_MT_hair_dynamics_presets(PresetMenu):
+class PARTICLE_PT_hair_dynamics_presets(PresetMenu):
bl_label = "Hair Dynamics Presets"
preset_subdir = "hair_dynamics"
preset_operator = "script.execute_preset"
@@ -349,7 +349,7 @@ class PARTICLE_PT_hair_dynamics(ParticleButtonsPanel, Panel):
layout = self.layout
layout.enabled = psys.use_hair_dynamics and psys.point_cache.is_baked is False
- PARTICLE_MT_hair_dynamics_presets.draw_panel_header(layout)
+ PARTICLE_PT_hair_dynamics_presets.draw_panel_header(layout)
def draw(self, context):
layout = self.layout
@@ -500,6 +500,7 @@ class PARTICLE_PT_cache(ParticleButtonsPanel, Panel):
class PARTICLE_PT_velocity(ParticleButtonsPanel, Panel):
bl_label = "Velocity"
+ bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
@@ -626,6 +627,7 @@ class PARTICLE_PT_rotation_angular_velocity(ParticleButtonsPanel, Panel):
class PARTICLE_PT_physics(ParticleButtonsPanel, Panel):
bl_label = "Physics"
+ bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
@@ -1012,6 +1014,7 @@ class PARTICLE_PT_boidbrain(ParticleButtonsPanel, Panel):
class PARTICLE_PT_render(ParticleButtonsPanel, Panel):
bl_label = "Render"
+ bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
@@ -1710,30 +1713,74 @@ class PARTICLE_PT_force_fields(ParticleButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
part = particle_get_settings(context)
- row = layout.row()
- row.prop(part, "use_self_effect")
- row.prop(part, "effector_amount", text="Amount")
+ col = layout.column()
+ col.prop(part, "use_self_effect")
+ col.prop(part, "effector_amount", text="Effector Amount")
+
+
+class PARTICLE_PT_force_fields_type1(ParticleButtonsPanel, Panel):
+ bl_label = "Type 1"
+ bl_parent_id = "PARTICLE_PT_force_fields"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
- split = layout.split(percentage=0.2)
- split.label(text="Type 1:")
- split.prop(part.force_field_1, "type", text="")
+ part = particle_get_settings(context)
+
+ col = layout.column()
+ col.prop(part.force_field_1, "type", text="Type 1")
basic_force_field_settings_ui(self, context, part.force_field_1)
- if part.force_field_1.type != 'NONE':
- layout.label(text="Falloff:")
- basic_force_field_falloff_ui(self, context, part.force_field_1)
- if part.force_field_1.type != 'NONE':
- layout.label(text="")
- split = layout.split(percentage=0.2)
- split.label(text="Type 2:")
- split.prop(part.force_field_2, "type", text="")
+class PARTICLE_PT_force_fields_type2(ParticleButtonsPanel, Panel):
+ bl_label = "Type 2"
+ bl_parent_id = "PARTICLE_PT_force_fields"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ part = particle_get_settings(context)
+
+ col = layout.column()
+ col.prop(part.force_field_2, "type", text="Type 2")
basic_force_field_settings_ui(self, context, part.force_field_2)
- if part.force_field_2.type != 'NONE':
- layout.label(text="Falloff:")
+
+
+class PARTICLE_PT_force_fields_type1_falloff(ParticleButtonsPanel, Panel):
+ bl_label = "Falloff"
+ bl_options = {'DEFAULT_CLOSED'}
+ bl_parent_id = "PARTICLE_PT_force_fields_type1"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ part = particle_get_settings(context)
+
+ basic_force_field_falloff_ui(self, context, part.force_field_1)
+
+
+class PARTICLE_PT_force_fields_type2_falloff(ParticleButtonsPanel, Panel):
+ bl_label = "Falloff"
+ bl_options = {'DEFAULT_CLOSED'}
+ bl_parent_id = "PARTICLE_PT_force_fields_type2"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ part = particle_get_settings(context)
+
basic_force_field_falloff_ui(self, context, part.force_field_2)
@@ -1879,7 +1926,7 @@ class PARTICLE_PT_custom_props(ParticleButtonsPanel, PropertyPanel, Panel):
classes = (
PARTICLE_MT_specials,
- PARTICLE_MT_hair_dynamics_presets,
+ PARTICLE_PT_hair_dynamics_presets,
PARTICLE_UL_particle_systems,
PARTICLE_PT_context_particles,
PARTICLE_PT_emission,
@@ -1916,6 +1963,10 @@ classes = (
PARTICLE_PT_hair_shape,
PARTICLE_PT_field_weights,
PARTICLE_PT_force_fields,
+ PARTICLE_PT_force_fields_type1,
+ PARTICLE_PT_force_fields_type1_falloff,
+ PARTICLE_PT_force_fields_type2,
+ PARTICLE_PT_force_fields_type2_falloff,
PARTICLE_PT_vertexgroups,
PARTICLE_PT_textures,
PARTICLE_PT_custom_props,
diff --git a/release/scripts/startup/bl_ui/properties_physics_cloth.py b/release/scripts/startup/bl_ui/properties_physics_cloth.py
index 82e93a240f1..2f659af3891 100644
--- a/release/scripts/startup/bl_ui/properties_physics_cloth.py
+++ b/release/scripts/startup/bl_ui/properties_physics_cloth.py
@@ -31,7 +31,7 @@ def cloth_panel_enabled(md):
return md.point_cache.is_baked is False
-class CLOTH_MT_presets(PresetMenu):
+class CLOTH_PT_presets(PresetMenu):
bl_label = "Cloth Presets"
preset_subdir = "cloth"
preset_operator = "script.execute_preset"
@@ -54,7 +54,7 @@ class PHYSICS_PT_cloth(PhysicButtonsPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw_header_preset(self, context):
- CLOTH_MT_presets.draw_panel_header(self.layout)
+ CLOTH_PT_presets.draw_panel_header(self.layout)
def draw(self, context):
layout = self.layout
@@ -258,7 +258,7 @@ class PHYSICS_PT_cloth_field_weights(PhysicButtonsPanel, Panel):
classes = (
- CLOTH_MT_presets,
+ CLOTH_PT_presets,
PHYSICS_PT_cloth,
PHYSICS_PT_cloth_cache,
PHYSICS_PT_cloth_collision,
diff --git a/release/scripts/startup/bl_ui/properties_physics_common.py b/release/scripts/startup/bl_ui/properties_physics_common.py
index 05c72bf47ee..e071de0108b 100644
--- a/release/scripts/startup/bl_ui/properties_physics_common.py
+++ b/release/scripts/startup/bl_ui/properties_physics_common.py
@@ -139,14 +139,16 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
layout.enabled = False
if not cache.use_external or cachetype == 'SMOKE':
- row = layout.row(align=True)
+ col = layout.column(align=True)
+ col.use_property_split = True
if cachetype not in {'PSYS', 'DYNAMIC_PAINT'}:
- row.enabled = enabled
- row.prop(cache, "frame_start")
- row.prop(cache, "frame_end")
+
+ col.enabled = enabled
+ col.prop(cache, "frame_start", text="Simulation Start")
+ col.prop(cache, "frame_end")
if cachetype not in {'SMOKE', 'CLOTH', 'DYNAMIC_PAINT', 'RIGID_BODY'}:
- row.prop(cache, "frame_step")
+ col.prop(cache, "frame_step")
if cachetype != 'SMOKE':
layout.label(text=cache.info)
@@ -206,9 +208,12 @@ def point_cache_ui(self, context, cache, enabled, cachetype):
def effector_weights_ui(self, context, weights, weight_type):
layout = self.layout
+ layout.use_property_split = True
layout.prop(weights, "group")
+ layout.use_property_split = False
+
split = layout.split()
split.prop(weights, "gravity", slider=True)
@@ -239,13 +244,12 @@ def effector_weights_ui(self, context, weights, weight_type):
def basic_force_field_settings_ui(self, context, field):
layout = self.layout
-
- split = layout.split()
+ layout.use_property_split = True
if not field or field.type == 'NONE':
return
- col = split.column()
+ col = layout.column()
if field.type == 'DRAG':
col.prop(field, "linear_drag", text="Linear")
@@ -265,10 +269,10 @@ def basic_force_field_settings_ui(self, context, field):
else:
col.prop(field, "flow")
- col = split.column()
+ col = layout.column()
sub = col.column(align=True)
sub.prop(field, "noise")
- sub.prop(field, "seed")
+ sub.prop(field, "seed", text="Noise Seed")
if field.type == 'TURBULENCE':
col.prop(field, "use_global_coords", text="Global")
elif field.type == 'HARMONIC':
@@ -276,46 +280,33 @@ def basic_force_field_settings_ui(self, context, field):
if field.type == 'FORCE':
col.prop(field, "use_gravity_falloff", text="Gravitation")
- split = layout.split()
-
- col = split.column()
- col.label(text="Effect point:")
- col.prop(field, "apply_to_location")
- col.prop(field, "apply_to_rotation")
-
- col = split.column()
- col.label(text="Collision:")
+ col.prop(field, "apply_to_location", text="Affect Location")
+ col.prop(field, "apply_to_rotation", text="Affect Rotation")
col.prop(field, "use_absorption")
def basic_force_field_falloff_ui(self, context, field):
layout = self.layout
- split = layout.split(percentage=0.35)
-
if not field or field.type == 'NONE':
return
- col = split.column()
- col.prop(field, "z_direction", text="")
+ col = layout.column()
+ col.prop(field, "z_direction")
- col = split.column()
col.prop(field, "falloff_power", text="Power")
split = layout.split()
- col = split.column()
- row = col.row(align=True)
- row.prop(field, "use_min_distance", text="")
- sub = row.row(align=True)
+ split.prop(field, "use_min_distance", text="Min Distance")
+ sub = split.column(align=True)
sub.active = field.use_min_distance
- sub.prop(field, "distance_min", text="Minimum")
+ sub.prop(field, "distance_min", text="")
- col = split.column()
- row = col.row(align=True)
- row.prop(field, "use_max_distance", text="")
- sub = row.row(align=True)
+ split = layout.split()
+ split.prop(field, "use_max_distance", text="Max Distance")
+ sub = split.column(align=True)
sub.active = field.use_max_distance
- sub.prop(field, "distance_max", text="Maximum")
+ sub.prop(field, "distance_max", text="")
classes = (
diff --git a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py
index 476a448f978..6a66dafadf0 100644
--- a/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py
+++ b/release/scripts/startup/bl_ui/properties_physics_dynamicpaint.py
@@ -127,7 +127,8 @@ class PHYSICS_PT_dynamic_paint(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Advanced"
+ bl_label = "Advanced"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
@@ -202,7 +203,8 @@ class PHYSICS_PT_dp_advanced_canvas(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Output"
+ bl_label = "Output"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@@ -295,7 +297,8 @@ class PHYSICS_PT_dp_canvas_output(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Initial Color"
+ bl_label = "Initial Color"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@@ -331,7 +334,8 @@ class PHYSICS_PT_dp_canvas_initial_color(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_effects(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Effects"
+ bl_label = "Effects"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@@ -380,7 +384,8 @@ class PHYSICS_PT_dp_effects(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_cache(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Cache"
+ bl_label = "Cache"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@@ -402,7 +407,8 @@ class PHYSICS_PT_dp_cache(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Source"
+ bl_label = "Source"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@classmethod
@@ -454,7 +460,8 @@ class PHYSICS_PT_dp_brush_source(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Velocity"
+ bl_label = "Velocity"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
@@ -490,7 +497,8 @@ class PHYSICS_PT_dp_brush_velocity(PhysicButtonsPanel, Panel):
class PHYSICS_PT_dp_brush_wave(PhysicButtonsPanel, Panel):
- bl_label = "Dynamic Paint Waves"
+ bl_label = "Waves"
+ bl_parent_id = "PHYSICS_PT_dynamic_paint"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
diff --git a/release/scripts/startup/bl_ui/properties_physics_field.py b/release/scripts/startup/bl_ui/properties_physics_field.py
index 12e4feb8c0b..72b5d9f1574 100644
--- a/release/scripts/startup/bl_ui/properties_physics_field.py
+++ b/release/scripts/startup/bl_ui/properties_physics_field.py
@@ -47,44 +47,34 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
ob = context.object
field = ob.field
- split = layout.split(percentage=0.2)
- split.label(text="Type:")
-
- split.prop(field, "type", text="")
+ layout.prop(field, "type")
if field.type not in {'NONE', 'GUIDE', 'TEXTURE'}:
- split = layout.split(percentage=0.2)
- split.label(text="Shape:")
- split.prop(field, "shape", text="")
+ layout.prop(field, "shape", text="Shape")
elif field.type == 'TEXTURE':
- split = layout.split(percentage=0.2)
- split.label(text="Texture:")
- split.row().template_ID(field, "texture", new="texture.new")
-
- split = layout.split()
+ layout.row().template_ID(field, "texture", new="texture.new")
if field.type == 'NONE':
return # nothing to draw
elif field.type == 'GUIDE':
- col = split.column()
+ col = layout.column()
col.prop(field, "guide_minimum")
col.prop(field, "guide_free")
col.prop(field, "falloff_power")
col.prop(field, "use_guide_path_add")
col.prop(field, "use_guide_path_weight")
- col = split.column()
- col.label(text="Clumping:")
+ col.label(text="Clumping")
col.prop(field, "guide_clump_amount")
col.prop(field, "guide_clump_shape")
- row = layout.row()
- row.prop(field, "use_max_distance")
- sub = row.row()
+ col.prop(field, "use_max_distance")
+ sub = col.column()
sub.active = field.use_max_distance
sub.prop(field, "distance_max")
@@ -94,83 +84,86 @@ class PHYSICS_PT_field(PhysicButtonsPanel, Panel):
if field.guide_kink_type != 'NONE':
layout.prop(field, "guide_kink_axis")
- split = layout.split()
-
- col = split.column()
+ col = layout.column()
col.prop(field, "guide_kink_frequency")
col.prop(field, "guide_kink_shape")
-
- col = split.column()
col.prop(field, "guide_kink_amplitude")
elif field.type == 'TEXTURE':
- col = split.column()
+ col = layout.column()
col.prop(field, "strength")
- col.prop(field, "texture_mode", text="")
+ col.prop(field, "texture_mode")
col.prop(field, "texture_nabla")
- col = split.column()
col.prop(field, "use_object_coords")
col.prop(field, "use_2d_force")
elif field.type == 'SMOKE_FLOW':
- col = split.column()
+ col = layout.column()
col.prop(field, "strength")
col.prop(field, "flow")
- col = split.column()
- col.label(text="Domain Object:")
- col.prop(field, "source_object", "")
+ col.prop(field, "source_object")
col.prop(field, "use_smoke_density")
else:
basic_force_field_settings_ui(self, context, field)
- if field.type not in {'NONE', 'GUIDE'}:
- layout.label(text="Falloff:")
- layout.row().prop(field, "falloff_type", expand=True)
+class PHYSICS_PT_field_falloff(PhysicButtonsPanel, Panel):
+ bl_label = "Falloff"
+ bl_parent_id = "PHYSICS_PT_field"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (context.engine in cls.COMPAT_ENGINES) and (ob.field) and (ob.field.type not in {'NONE', 'GUIDE'})
+
+ def draw(self, context):
+ layout = self.layout
+ layout.use_property_split = True
+
+ ob = context.object
+ field = ob.field
- basic_force_field_falloff_ui(self, context, field)
+ layout.prop(field, "falloff_type", text="Shape")
- if field.falloff_type == 'CONE':
- layout.separator()
+ basic_force_field_falloff_ui(self, context, field)
- split = layout.split(percentage=0.35)
+ if field.falloff_type == 'CONE':
+ layout.separator()
- col = split.column()
- col.label(text="Angular:")
- col.prop(field, "use_radial_min", text="Use Minimum")
- col.prop(field, "use_radial_max", text="Use Maximum")
+ col = layout.column()
+ col.prop(field, "radial_falloff", text="Power")
- col = split.column()
- col.prop(field, "radial_falloff", text="Power")
+ col.label(text="Angular")
- sub = col.column()
- sub.active = field.use_radial_min
- sub.prop(field, "radial_min", text="Angle")
+ col.prop(field, "use_radial_min", text="Use Min Angle")
+ sub = col.column()
+ sub.active = field.use_radial_min
+ sub.prop(field, "radial_min", text="Min Angle")
- sub = col.column()
- sub.active = field.use_radial_max
- sub.prop(field, "radial_max", text="Angle")
+ col.prop(field, "use_radial_max", text="Use Max Angle")
+ sub = col.column()
+ sub.active = field.use_radial_max
+ sub.prop(field, "radial_max", text="Max Angle")
- elif field.falloff_type == 'TUBE':
- layout.separator()
+ elif field.falloff_type == 'TUBE':
+ layout.separator()
- split = layout.split(percentage=0.35)
+ col = layout.column()
- col = split.column()
- col.label(text="Radial:")
- col.prop(field, "use_radial_min", text="Use Minimum")
- col.prop(field, "use_radial_max", text="Use Maximum")
+ col.prop(field, "radial_falloff", text="Power")
- col = split.column()
- col.prop(field, "radial_falloff", text="Power")
+ col.label(text="Radial")
- sub = col.column()
- sub.active = field.use_radial_min
- sub.prop(field, "radial_min", text="Distance")
+ col.prop(field, "use_radial_min", text="Use Minimum")
+ sub = col.column()
+ sub.active = field.use_radial_min
+ sub.prop(field, "radial_min", text="Distance")
- sub = col.column()
- sub.active = field.use_radial_max
- sub.prop(field, "radial_max", text="Distance")
+ col.prop(field, "use_radial_max", text="Use Maximum")
+ sub = col.column()
+ sub.active = field.use_radial_max
+ sub.prop(field, "radial_max", text="Distance")
class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
@@ -188,6 +181,7 @@ class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
md = context.collision
split = layout.split()
+ layout.use_property_split = True
coll = md.settings
@@ -196,39 +190,90 @@ class PHYSICS_PT_collision(PhysicButtonsPanel, Panel):
layout.active = settings.use
- split = layout.split()
+ col = layout.column()
+ col.prop(settings, "absorption", text="Force Field Absorption")
+
+
+class PHYSICS_PT_collision_particle(PhysicButtonsPanel, Panel):
+ bl_label = "Particle"
+ bl_parent_id = "PHYSICS_PT_collision"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.type == 'MESH') and (context.engine in cls.COMPAT_ENGINES) and (context.collision)
+
+ def draw(self, context):
+ layout = self.layout
+
+ md = context.collision
+
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, num_columns=0, even_columns=True, even_rows=False, align=False)
+
+ coll = md.settings
- col = split.column()
- col.label(text="Particle:")
+ if coll:
+ settings = context.object.collision
+
+ layout.active = settings.use
+
+ col = flow.column()
col.prop(settings, "permeability", slider=True)
col.prop(settings, "stickiness")
+ col = flow.column()
col.prop(settings, "use_particle_kill")
- col.label(text="Particle Damping:")
- sub = col.column(align=True)
- sub.prop(settings, "damping_factor", text="Factor", slider=True)
- sub.prop(settings, "damping_random", text="Random", slider=True)
- col.label(text="Particle Friction:")
+ col = flow.column()
sub = col.column(align=True)
- sub.prop(settings, "friction_factor", text="Factor", slider=True)
- sub.prop(settings, "friction_random", text="Random", slider=True)
+ sub.prop(settings, "damping_factor", text="Damping", slider=True)
+ sub.prop(settings, "damping_random", text="Randomize", slider=True)
- col = split.column()
- col.label(text="Soft Body and Cloth:")
+ col = flow.column()
sub = col.column(align=True)
- sub.prop(settings, "thickness_outer", text="Outer", slider=True)
- sub.prop(settings, "thickness_inner", text="Inner", slider=True)
+ sub.prop(settings, "friction_factor", text="Friction", slider=True)
+ sub.prop(settings, "friction_random", text="Randomize", slider=True)
+
+
+class PHYSICS_PT_collision_softbody(PhysicButtonsPanel, Panel):
+ bl_label = "Softbody"
+ bl_parent_id = "PHYSICS_PT_collision"
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
+
+ @classmethod
+ def poll(cls, context):
+ ob = context.object
+ return (ob and ob.type == 'MESH') and (context.engine in cls.COMPAT_ENGINES) and (context.collision)
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.use_property_split = True
+ flow = layout.grid_flow(row_major=True, num_columns=0, even_columns=True, even_rows=False, align=False)
+
+ md = context.collision
+ coll = md.settings
+
+ if coll:
+ settings = context.object.collision
+
+ layout.active = settings.use
- col.label(text="Soft Body Damping:")
- col.prop(settings, "damping", text="Factor", slider=True)
+ col = flow.column()
+ col.prop(settings, "damping", text="Damping", slider=True)
- col.label(text="Force Fields:")
- col.prop(settings, "absorption", text="Absorption")
+ col = flow.column()
+ col.prop(settings, "thickness_outer", text="Thickness Outer", slider=True)
+ col.prop(settings, "thickness_inner", text="Inner", slider=True)
classes = (
PHYSICS_PT_field,
+ PHYSICS_PT_field_falloff,
PHYSICS_PT_collision,
+ PHYSICS_PT_collision_particle,
+ PHYSICS_PT_collision_softbody,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/properties_physics_fluid.py b/release/scripts/startup/bl_ui/properties_physics_fluid.py
index 26957c40ff3..94611808059 100644
--- a/release/scripts/startup/bl_ui/properties_physics_fluid.py
+++ b/release/scripts/startup/bl_ui/properties_physics_fluid.py
@@ -23,7 +23,7 @@ from bpy.app.translations import pgettext_iface as iface_
from bl_operators.presets import PresetMenu
-class FLUID_MT_presets(PresetMenu):
+class FLUID_PT_presets(PresetMenu):
bl_label = "Fluid Presets"
preset_subdir = "fluid"
preset_operator = "script.execute_preset"
@@ -242,7 +242,7 @@ class PHYSICS_PT_domain_gravity(PhysicButtonsPanel, Panel):
col.prop(fluid, "simulation_scale", text="Meters")
col = split.column()
- FLUID_MT_presets.draw_menu(col, text="Viscosity Presets")
+ FLUID_PT_presets.draw_menu(col, text="Viscosity Presets")
sub = col.column(align=True)
sub.prop(fluid, "viscosity_base", text="Base")
@@ -306,7 +306,7 @@ class PHYSICS_PT_domain_particles(PhysicButtonsPanel, Panel):
classes = (
- FLUID_MT_presets,
+ FLUID_PT_presets,
PHYSICS_PT_fluid,
PHYSICS_PT_domain_gravity,
PHYSICS_PT_domain_boundary,
diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py
index 2e7a6b7ee23..5458b038d98 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -23,14 +23,14 @@ from bpy.types import Menu, Panel, UIList
from bl_operators.presets import PresetMenu
-class RENDER_MT_presets(PresetMenu):
+class RENDER_PT_presets(PresetMenu):
bl_label = "Render Presets"
preset_subdir = "render"
preset_operator = "script.execute_preset"
preset_add_operator = "render.preset_add"
-class RENDER_MT_ffmpeg_presets(PresetMenu):
+class RENDER_PT_ffmpeg_presets(PresetMenu):
bl_label = "FFMPEG Presets"
preset_subdir = "ffmpeg"
preset_operator = "script.python_file_run"
@@ -85,7 +85,7 @@ class RENDER_PT_dimensions(RenderButtonsPanel, Panel):
_preset_class = None
def draw_header_preset(self, context):
- RENDER_MT_presets.draw_panel_header(self.layout)
+ RENDER_PT_presets.draw_panel_header(self.layout)
@staticmethod
def _draw_framerate_label(*args):
@@ -205,7 +205,8 @@ class RENDER_PT_stamp(RenderButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
- layout.use_property_split = False
+ layout.use_property_split = True
+ layout.use_property_decorate = False # No animation.
rd = context.scene.render
@@ -300,7 +301,7 @@ class RENDER_PT_encoding(RenderButtonsPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw_header_preset(self, context):
- RENDER_MT_ffmpeg_presets.draw_panel_header(self.layout)
+ RENDER_PT_ffmpeg_presets.draw_panel_header(self.layout)
@classmethod
def poll(cls, context):
@@ -764,8 +765,8 @@ class RENDER_PT_hair(RenderButtonsPanel, Panel):
classes = (
- RENDER_MT_presets,
- RENDER_MT_ffmpeg_presets,
+ RENDER_PT_presets,
+ RENDER_PT_ffmpeg_presets,
RENDER_MT_framerate_presets,
RENDER_PT_context,
RENDER_PT_dimensions,
diff --git a/release/scripts/startup/bl_ui/properties_scene.py b/release/scripts/startup/bl_ui/properties_scene.py
index 2ee1c156935..43706c360da 100644
--- a/release/scripts/startup/bl_ui/properties_scene.py
+++ b/release/scripts/startup/bl_ui/properties_scene.py
@@ -33,7 +33,7 @@ from .properties_physics_common import (
)
-class SCENE_MT_units_length_presets(PresetMenu):
+class SCENE_PT_units_length_presets(PresetMenu):
"""Unit of measure for properties that use length values"""
bl_label = "Unit Presets"
preset_subdir = "units_length"
@@ -83,7 +83,7 @@ class SCENE_PT_unit(SceneButtonsPanel, Panel):
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE'}
def draw_header_preset(self, context):
- SCENE_MT_units_length_presets.draw_panel_header(self.layout)
+ SCENE_PT_units_length_presets.draw_panel_header(self.layout)
def draw(self, context):
layout = self.layout
@@ -369,6 +369,7 @@ class SCENE_PT_rigid_body_world(SceneButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
scene = context.scene
@@ -386,13 +387,11 @@ class SCENE_PT_rigid_body_world(SceneButtonsPanel, Panel):
col.prop(rbw, "group")
col.prop(rbw, "constraints")
- split = col.split()
-
- col = split.column()
+ col = col.column()
col.prop(rbw, "time_scale", text="Speed")
col.prop(rbw, "use_split_impulse")
- col = split.column()
+ col = col.column()
col.prop(rbw, "steps_per_second", text="Steps Per Second")
col.prop(rbw, "solver_iterations", text="Solver Iterations")
@@ -503,7 +502,7 @@ class SCENE_PT_custom_props(SceneButtonsPanel, PropertyPanel, Panel):
classes = (
- SCENE_MT_units_length_presets,
+ SCENE_PT_units_length_presets,
SCENE_UL_keying_set_paths,
SCENE_PT_scene,
SCENE_PT_unit,
diff --git a/release/scripts/startup/bl_ui/properties_texture.py b/release/scripts/startup/bl_ui/properties_texture.py
index e5bf2c910a0..16e29d1ecc8 100644
--- a/release/scripts/startup/bl_ui/properties_texture.py
+++ b/release/scripts/startup/bl_ui/properties_texture.py
@@ -211,30 +211,25 @@ class TEXTURE_PT_colors(TextureButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
tex = context.texture
- layout.prop(tex, "use_color_ramp", text="Ramp")
- if tex.use_color_ramp:
- layout.template_color_ramp(tex, "color_ramp", expand=True)
-
- split = layout.split()
-
- col = split.column()
- col.label(text="RGB Multiply:")
+ col = layout.column()
sub = col.column(align=True)
- sub.prop(tex, "factor_red", text="R")
+ sub.prop(tex, "factor_red", text="Multiply R")
sub.prop(tex, "factor_green", text="G")
sub.prop(tex, "factor_blue", text="B")
- col = split.column()
- col.label(text="Adjust:")
col.prop(tex, "intensity")
col.prop(tex, "contrast")
col.prop(tex, "saturation")
- col = layout.column()
col.prop(tex, "use_clamp", text="Clamp")
+ col.prop(tex, "use_color_ramp", text="Ramp")
+ if tex.use_color_ramp:
+ layout.use_property_split = False
+ layout.template_color_ramp(tex, "color_ramp", expand=True)
class TextureTypePanel(TextureButtonsPanel):
diff --git a/release/scripts/startup/bl_ui/properties_view_layer.py b/release/scripts/startup/bl_ui/properties_view_layer.py
index 85fde8fb748..6ce53445299 100644
--- a/release/scripts/startup/bl_ui/properties_view_layer.py
+++ b/release/scripts/startup/bl_ui/properties_view_layer.py
@@ -38,6 +38,7 @@ class VIEWLAYER_PT_layer(ViewLayerButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
scene = context.scene
rd = scene.render
@@ -54,26 +55,20 @@ class VIEWLAYER_PT_eevee_layer_passes(ViewLayerButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
scene = context.scene
rd = scene.render
view_layer = context.view_layer
- split = layout.split()
-
- col = split.column()
+ col = layout.column()
col.prop(view_layer, "use_pass_combined")
col.prop(view_layer, "use_pass_z")
col.prop(view_layer, "use_pass_mist")
col.prop(view_layer, "use_pass_normal")
- col.separator()
col.prop(view_layer, "use_pass_ambient_occlusion")
-
- col = split.column()
- col.label(text="Subsurface:")
- row = col.row(align=True)
- row.prop(view_layer, "use_pass_subsurface_direct", text="Direct", toggle=True)
- row.prop(view_layer, "use_pass_subsurface_color", text="Color", toggle=True)
+ col.prop(view_layer, "use_pass_subsurface_direct", text="Subsurface Direct")
+ col.prop(view_layer, "use_pass_subsurface_color", text="Subsurface Color")
class VIEWLAYER_UL_override_sets(UIList):
diff --git a/release/scripts/startup/bl_ui/properties_world.py b/release/scripts/startup/bl_ui/properties_world.py
index 1ec2d4774e8..bba7f9e132a 100644
--- a/release/scripts/startup/bl_ui/properties_world.py
+++ b/release/scripts/startup/bl_ui/properties_world.py
@@ -74,13 +74,12 @@ class EEVEE_WORLD_PT_mist(WorldButtonsPanel, Panel):
def draw(self, context):
layout = self.layout
+ layout.use_property_split = True
world = context.world
- split = layout.split(align=True)
- split.prop(world.mist_settings, "start")
- split.prop(world.mist_settings, "depth")
-
+ layout.prop(world.mist_settings, "start")
+ layout.prop(world.mist_settings, "depth")
layout.prop(world.mist_settings, "falloff")
diff --git a/release/scripts/startup/bl_ui/space_clip.py b/release/scripts/startup/bl_ui/space_clip.py
index 91e725b451d..d4ae3121a88 100644
--- a/release/scripts/startup/bl_ui/space_clip.py
+++ b/release/scripts/startup/bl_ui/space_clip.py
@@ -279,7 +279,7 @@ class CLIP_PT_tracking_settings(CLIP_PT_tracking_panel, Panel):
bl_category = "Track"
def draw_header_preset(self, context):
- CLIP_MT_tracking_settings_presets.draw_panel_header(self.layout)
+ CLIP_PT_tracking_settings_presets.draw_panel_header(self.layout)
def draw(self, context):
@@ -621,7 +621,7 @@ class CLIP_PT_track(CLIP_PT_tracking_panel, Panel):
layout.separator()
row = layout.row(align=True)
- CLIP_MT_track_color_presets.draw_menu(row, 'Color Presets')
+ CLIP_PT_track_color_presets.draw_menu(row, 'Color Presets')
row.menu('CLIP_MT_track_color_specials', text="", icon='DOWNARROW_HLT')
row = layout.row()
@@ -713,7 +713,7 @@ class CLIP_PT_tracking_camera(Panel):
return False
def draw_header_preset(self, context):
- CLIP_MT_camera_presets.draw_panel_header(self.layout)
+ CLIP_PT_camera_presets.draw_panel_header(self.layout)
def draw(self, context):
layout = self.layout
@@ -1419,7 +1419,7 @@ class CLIP_MT_tracking_specials(Menu):
text="Unlock Tracks").action = 'UNLOCK'
-class CLIP_MT_camera_presets(PresetMenu):
+class CLIP_PT_camera_presets(PresetMenu):
"""Predefined tracking camera intrinsics"""
bl_label = "Camera Presets"
preset_subdir = "tracking_camera"
@@ -1427,7 +1427,7 @@ class CLIP_MT_camera_presets(PresetMenu):
preset_add_operator = "clip.camera_preset_add"
-class CLIP_MT_track_color_presets(PresetMenu):
+class CLIP_PT_track_color_presets(PresetMenu):
"""Predefined track color"""
bl_label = "Color Presets"
preset_subdir = "tracking_track_color"
@@ -1435,7 +1435,7 @@ class CLIP_MT_track_color_presets(PresetMenu):
preset_add_operator = "clip.track_color_preset_add"
-class CLIP_MT_tracking_settings_presets(PresetMenu):
+class CLIP_PT_tracking_settings_presets(PresetMenu):
"""Predefined tracking settings"""
bl_label = "Tracking Presets"
preset_subdir = "tracking_settings"
@@ -1524,9 +1524,9 @@ classes = (
CLIP_MT_select,
CLIP_MT_select_grouped,
CLIP_MT_tracking_specials,
- CLIP_MT_camera_presets,
- CLIP_MT_track_color_presets,
- CLIP_MT_tracking_settings_presets,
+ CLIP_PT_camera_presets,
+ CLIP_PT_track_color_presets,
+ CLIP_PT_tracking_settings_presets,
CLIP_MT_track_color_specials,
CLIP_MT_stabilize_2d_specials,
CLIP_MT_stabilize_2d_rotation_specials,
diff --git a/release/scripts/startup/bl_ui/space_dopesheet.py b/release/scripts/startup/bl_ui/space_dopesheet.py
index a238e81d868..7208135f5e6 100644
--- a/release/scripts/startup/bl_ui/space_dopesheet.py
+++ b/release/scripts/startup/bl_ui/space_dopesheet.py
@@ -19,12 +19,12 @@
# <pep8 compliant>
import bpy
-from bpy.types import Header, Menu
+from bpy.types import Header, Menu, Panel
from .space_time import *
#######################################
-# DopeSheet Filtering
+# DopeSheet Filtering - Header Buttons
# used for DopeSheet, NLA, and Graph Editors
def dopesheet_filter(layout, context, genericFiltersOnly=False):
@@ -43,66 +43,153 @@ def dopesheet_filter(layout, context, genericFiltersOnly=False):
if not genericFiltersOnly:
if bpy.data.collections:
row = layout.row(align=True)
- row.prop(dopesheet, "show_only_collection_objects", text="")
- if dopesheet.show_only_collection_objects:
- row.prop(dopesheet, "filter_collection", text="")
+ row.prop(dopesheet, "filter_collection", text="")
if not is_nla:
row = layout.row(align=True)
- row.prop(dopesheet, "show_only_matching_fcurves", text="")
- if dopesheet.show_only_matching_fcurves:
- row.prop(dopesheet, "filter_fcurve_name", text="")
- row.prop(dopesheet, "use_multi_word_filter", text="")
+ row.prop(dopesheet, "filter_fcurve_name", text="")
+ row.prop(dopesheet, "use_multi_word_filter", text="")
else:
row = layout.row(align=True)
- row.prop(dopesheet, "use_filter_text", text="")
- if dopesheet.use_filter_text:
+ row.prop(dopesheet, "filter_text", text="")
+ row.prop(dopesheet, "use_multi_word_filter", text="")
+
+#######################################
+# Dopesheet Filtering Popovers
+
+# Generic Layout - Used as base for filtering popovers used in all animation editors
+# Used for DopeSheet, NLA, and Graph Editors
+class DopesheetFilterPopoverBase:
+ bl_region_type = 'HEADER'
+ bl_label = "Filters"
+
+ # Generic = Affects all datatypes
+ # XXX: Perhaps we want these to stay in the header instead, for easy/fast access
+ @classmethod
+ def draw_generic_filters(cls, context, layout):
+ dopesheet = context.space_data.dopesheet
+ is_nla = context.area.type == 'NLA_EDITOR'
+
+ col = layout.column(align=True)
+ col.prop(dopesheet, "show_only_selected", icon='NONE')
+ col.prop(dopesheet, "show_hidden", icon='NONE')
+
+ if is_nla:
+ col.prop(dopesheet, "show_missing_nla", icon='NONE')
+ else: # graph and dopesheet editors - F-Curves and drivers only
+ col.prop(dopesheet, "show_only_errors", icon='NONE')
+
+ # Name/Membership Filters
+ # XXX: Perhaps these should just stay in the headers (exclusively)?
+ @classmethod
+ def draw_search_filters(cls, context, layout, generic_filters_only=False):
+ dopesheet = context.space_data.dopesheet
+ is_nla = context.area.type == 'NLA_EDITOR'
+
+ col = layout.column(align=True)
+ col.label("With Name:")
+ if not is_nla:
+ row = col.row(align=True)
+ row.prop(dopesheet, "filter_fcurve_name", text="")
+ row.prop(dopesheet, "use_multi_word_filter", text="")
+ else:
+ row = col.row(align=True)
row.prop(dopesheet, "filter_text", text="")
row.prop(dopesheet, "use_multi_word_filter", text="")
- if not genericFiltersOnly:
- row = layout.row(align=True)
- row.prop(dopesheet, "show_datablock_filters", text="Filters")
-
- if dopesheet.show_datablock_filters:
- row.prop(dopesheet, "show_scenes", text="")
- row.prop(dopesheet, "show_worlds", text="")
- row.prop(dopesheet, "show_nodes", text="")
-
- row.prop(dopesheet, "show_transforms", text="")
-
- if bpy.data.meshes:
- row.prop(dopesheet, "show_meshes", text="")
- if bpy.data.shape_keys:
- row.prop(dopesheet, "show_shapekeys", text="")
- if bpy.data.meshes:
- row.prop(dopesheet, "show_modifiers", text="")
- if bpy.data.materials:
- row.prop(dopesheet, "show_materials", text="")
- if bpy.data.lamps:
- row.prop(dopesheet, "show_lamps", text="")
- if bpy.data.textures:
- row.prop(dopesheet, "show_textures", text="")
- if bpy.data.cameras:
- row.prop(dopesheet, "show_cameras", text="")
- if bpy.data.curves:
- row.prop(dopesheet, "show_curves", text="")
- if bpy.data.metaballs:
- row.prop(dopesheet, "show_metaballs", text="")
- if bpy.data.lattices:
- row.prop(dopesheet, "show_lattices", text="")
- if bpy.data.armatures:
- row.prop(dopesheet, "show_armatures", text="")
- if bpy.data.particles:
- row.prop(dopesheet, "show_particles", text="")
- if bpy.data.speakers:
- row.prop(dopesheet, "show_speakers", text="")
- if bpy.data.linestyles:
- row.prop(dopesheet, "show_linestyles", text="")
- if bpy.data.grease_pencil:
- row.prop(dopesheet, "show_gpencil", text="")
-
- layout.prop(dopesheet, "use_datablock_sort", text="")
+ if (not generic_filters_only) and (bpy.data.collections):
+ col = layout.column(align=True)
+ col.label("In Collection:")
+ col.prop(dopesheet, "filter_collection", text="")
+
+ # Standard = Present in all panels
+ @classmethod
+ def draw_standard_filters(cls, context, layout):
+ dopesheet = context.space_data.dopesheet
+
+ # Object Data Filters
+ layout.label("Include Sub-Object Data:")
+ split = layout.split()
+
+ # TODO: Add per-channel/axis convenience toggles?
+ col = split.column()
+ col.prop(dopesheet, "show_transforms", text="Transforms")
+
+ col = split.column()
+ col.prop(dopesheet, "show_modifiers", text="Modifiers")
+
+ layout.separator()
+
+ # datablock filters
+ layout.label("Include From Types:")
+ flow = layout.grid_flow(row_major=True, num_columns=2, even_rows=False, align=False)
+
+ flow.prop(dopesheet, "show_scenes", text="Scenes")
+ flow.prop(dopesheet, "show_worlds", text="Worlds")
+ flow.prop(dopesheet, "show_nodes", text="Node Trees")
+
+ if bpy.data.armatures:
+ flow.prop(dopesheet, "show_armatures", text="Armatures")
+ if bpy.data.cameras:
+ flow.prop(dopesheet, "show_cameras", text="Cameras")
+ if bpy.data.grease_pencil:
+ flow.prop(dopesheet, "show_gpencil", text="Grease Pencil Objects")
+ if bpy.data.lamps:
+ flow.prop(dopesheet, "show_lamps", text="Lamps")
+ if bpy.data.materials:
+ flow.prop(dopesheet, "show_materials", text="Materials")
+ if bpy.data.textures:
+ flow.prop(dopesheet, "show_textures", text="Textures")
+ if bpy.data.meshes:
+ flow.prop(dopesheet, "show_meshes", text="Meshes")
+ if bpy.data.shape_keys:
+ flow.prop(dopesheet, "show_shapekeys", text="Shape Keys")
+ if bpy.data.curves:
+ flow.prop(dopesheet, "show_curves", text="Curves")
+ if bpy.data.particles:
+ flow.prop(dopesheet, "show_particles", text="Particles")
+ if bpy.data.lattices:
+ flow.prop(dopesheet, "show_lattices", text="Lattices")
+ if bpy.data.linestyles:
+ flow.prop(dopesheet, "show_linestyles", text="Line Styles")
+ if bpy.data.metaballs:
+ flow.prop(dopesheet, "show_metaballs", text="Metas")
+ if bpy.data.speakers:
+ flow.prop(dopesheet, "show_speakers", text="Speakers")
+
+ layout.separator()
+
+ # performance-related options (users will mostly have these enabled)
+ col = layout.column(align=True)
+ col.label("Options:")
+ col.prop(dopesheet, "use_datablock_sort", icon='NONE')
+
+
+# Popover for Dopesheet Editor(s) - Dopesheet, Action, Shapekey, GPencil, Mask, etc.
+class DOPESHEET_PT_filters(DopesheetFilterPopoverBase, Panel):
+ bl_space_type = 'DOPESHEET_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Filters"
+
+ def draw(self, context):
+ layout = self.layout
+
+ dopesheet = context.space_data.dopesheet
+ ds_mode = context.space_data.mode
+
+ layout.prop(dopesheet, "show_summary", text="Summary")
+
+ DopesheetFilterPopoverBase.draw_generic_filters(context, layout)
+
+ if ds_mode in {'DOPESHEET', 'ACTION', 'GPENCIL'}:
+ layout.separator()
+ generic_filters_only = ds_mode != 'DOPESHEET'
+ DopesheetFilterPopoverBase.draw_search_filters(context, layout,
+ generic_filters_only=generic_filters_only)
+
+ if ds_mode == 'DOPESHEET':
+ layout.separator()
+ DopesheetFilterPopoverBase.draw_standard_filters(context, layout)
#######################################
@@ -119,19 +206,21 @@ class DOPESHEET_HT_header(Header):
row = layout.row(align=True)
row.template_header()
- # XXX: perhaps our mode menu can be retired eventually when we get editor submodes in the main menu?
- layout.prop(st, "mode", text="")
-
if st.mode == 'TIMELINE':
TIME_MT_editor_menus.draw_collapsible(context, layout)
TIME_HT_editor_buttons.draw_header(context, layout)
else:
+ layout.prop(st, "ui_mode", text="")
+ layout.popover(space_type='DOPESHEET_EDITOR',
+ region_type='HEADER',
+ panel_type="DOPESHEET_PT_filters",
+ text="",
+ icon='FILTER')
DOPESHEET_MT_editor_menus.draw_collapsible(context, layout)
DOPESHEET_HT_editor_buttons.draw_header(context, layout)
# Header for "normal" dopesheet editor modes (e.g. Dope Sheet, Action, Shape Keys, etc.)
-# XXX: Temporary, until we have editor submodes in the actual editors menu
class DOPESHEET_HT_editor_buttons(Header):
bl_idname = "DOPESHEET_HT_editor_buttons"
bl_space_type = 'DOPESHEET_EDITOR'
@@ -146,6 +235,7 @@ class DOPESHEET_HT_editor_buttons(Header):
toolsettings = context.tool_settings
if st.mode in {'ACTION', 'SHAPEKEY'}:
+ # TODO: These buttons need some tidying up - Probably by using a popover, and bypassing the template_id() here
row = layout.row(align=True)
row.operator("action.layer_prev", text="", icon='TRIA_DOWN')
row.operator("action.layer_next", text="", icon='TRIA_UP')
@@ -156,7 +246,7 @@ class DOPESHEET_HT_editor_buttons(Header):
row.operator("action.push_down", text="Push Down", icon='NLA_PUSHDOWN')
row.operator("action.stash", text="Stash", icon='FREEZE')
- layout.prop(st.dopesheet, "show_summary", text="Summary")
+ # layout.separator_spacer()
if st.mode == 'DOPESHEET':
dopesheet_filter(layout, context)
@@ -174,10 +264,8 @@ class DOPESHEET_HT_editor_buttons(Header):
row.prop(st.dopesheet, "show_hidden", text="")
row = layout.row(align=True)
- row.prop(st.dopesheet, "use_filter_text", text="")
- if st.dopesheet.use_filter_text:
- row.prop(st.dopesheet, "filter_text", text="")
- row.prop(st.dopesheet, "use_multi_word_filter", text="")
+ row.prop(st.dopesheet, "filter_text", text="")
+ row.prop(st.dopesheet, "use_multi_word_filter", text="")
layout.separator_spacer()
@@ -545,6 +633,7 @@ classes = (
DOPESHEET_MT_delete,
DOPESHEET_MT_specials,
DOPESHEET_MT_channel_specials,
+ DOPESHEET_PT_filters,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_graph.py b/release/scripts/startup/bl_ui/space_graph.py
index e655f9d5d15..9a22e0b4bd7 100644
--- a/release/scripts/startup/bl_ui/space_graph.py
+++ b/release/scripts/startup/bl_ui/space_graph.py
@@ -19,15 +19,17 @@
# <pep8 compliant>
import bpy
-from bpy.types import Header, Menu
+from bpy.types import Header, Menu, Panel
+from .space_dopesheet import (
+ DopesheetFilterPopoverBase,
+ dopesheet_filter,
+ )
class GRAPH_HT_header(Header):
bl_space_type = 'GRAPH_EDITOR'
def draw(self, context):
- from .space_dopesheet import dopesheet_filter
-
layout = self.layout
toolsettings = context.tool_settings
@@ -36,7 +38,14 @@ class GRAPH_HT_header(Header):
row = layout.row(align=True)
row.template_header()
- layout.prop(st, "mode", text="")
+ # Now a exposed as a sub-space type
+ # layout.prop(st, "mode", text="")
+
+ layout.popover(space_type='GRAPH_EDITOR',
+ region_type='HEADER',
+ panel_type="GRAPH_PT_filters",
+ text="",
+ icon='FILTER')
GRAPH_MT_editor_menus.draw_collapsible(context, layout)
@@ -71,6 +80,21 @@ class GRAPH_HT_header(Header):
row.operator("graph.ghost_curves_create", text="", icon='GHOST_ENABLED')
+class GRAPH_PT_filters(DopesheetFilterPopoverBase, Panel):
+ bl_space_type = 'GRAPH_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Filters"
+
+ def draw(self, context):
+ layout = self.layout
+
+ DopesheetFilterPopoverBase.draw_generic_filters(context, layout)
+ layout.separator()
+ DopesheetFilterPopoverBase.draw_search_filters(context, layout)
+ layout.separator()
+ DopesheetFilterPopoverBase.draw_standard_filters(context, layout)
+
+
class GRAPH_MT_editor_menus(Menu):
bl_idname = "GRAPH_MT_editor_menus"
bl_label = ""
@@ -381,6 +405,7 @@ classes = (
GRAPH_MT_delete,
GRAPH_MT_specials,
GRAPH_MT_channel_specials,
+ GRAPH_PT_filters,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_nla.py b/release/scripts/startup/bl_ui/space_nla.py
index 607e2d28d0f..9f23420298f 100644
--- a/release/scripts/startup/bl_ui/space_nla.py
+++ b/release/scripts/startup/bl_ui/space_nla.py
@@ -19,15 +19,17 @@
# <pep8 compliant>
import bpy
-from bpy.types import Header, Menu
+from bpy.types import Header, Menu, Panel
+from .space_dopesheet import (
+ DopesheetFilterPopoverBase,
+ dopesheet_filter,
+ )
class NLA_HT_header(Header):
bl_space_type = 'NLA_EDITOR'
def draw(self, context):
- from .space_dopesheet import dopesheet_filter
-
layout = self.layout
st = context.space_data
@@ -35,6 +37,12 @@ class NLA_HT_header(Header):
row = layout.row(align=True)
row.template_header()
+ layout.popover(space_type='NLA_EDITOR',
+ region_type='HEADER',
+ panel_type="NLA_PT_filters",
+ text="",
+ icon='FILTER')
+
NLA_MT_editor_menus.draw_collapsible(context, layout)
dopesheet_filter(layout, context)
@@ -43,6 +51,21 @@ class NLA_HT_header(Header):
layout.prop(st, "auto_snap", text="")
+class NLA_PT_filters(DopesheetFilterPopoverBase, Panel):
+ bl_space_type = 'NLA_EDITOR'
+ bl_region_type = 'HEADER'
+ bl_label = "Filters"
+
+ def draw(self, context):
+ layout = self.layout
+
+ DopesheetFilterPopoverBase.draw_generic_filters(context, layout)
+ layout.separator()
+ DopesheetFilterPopoverBase.draw_search_filters(context, layout)
+ layout.separator()
+ DopesheetFilterPopoverBase.draw_standard_filters(context, layout)
+
+
class NLA_MT_editor_menus(Menu):
bl_idname = "NLA_MT_editor_menus"
bl_label = ""
@@ -218,6 +241,7 @@ classes = (
NLA_MT_marker,
NLA_MT_add,
NLA_MT_edit_transform,
+ NLA_PT_filters,
)
if __name__ == "__main__": # only for live edit.
diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py
index 7c9c47f8eb8..521c510ad2d 100644
--- a/release/scripts/startup/bl_ui/space_node.py
+++ b/release/scripts/startup/bl_ui/space_node.py
@@ -290,7 +290,7 @@ class NODE_MT_node(Menu):
layout.operator("node.read_fullsamplelayers")
-class NODE_MT_node_color_presets(PresetMenu):
+class NODE_PT_node_color_presets(PresetMenu):
"""Predefined node color"""
bl_label = "Color Presets"
preset_subdir = "node_color"
@@ -375,7 +375,7 @@ class NODE_PT_active_node_color(Panel):
self.layout.prop(node, "use_custom_color", text="")
def draw_header_preset(self, context):
- NODE_MT_node_color_presets.draw_panel_header(self.layout)
+ NODE_PT_node_color_presets.draw_panel_header(self.layout)
def draw(self, context):
layout = self.layout
@@ -584,7 +584,7 @@ classes = (
NODE_MT_view,
NODE_MT_select,
NODE_MT_node,
- NODE_MT_node_color_presets,
+ NODE_PT_node_color_presets,
NODE_MT_node_color_specials,
NODE_MT_specials,
NODE_PT_active_node_generic,
diff --git a/release/scripts/startup/bl_ui/space_outliner.py b/release/scripts/startup/bl_ui/space_outliner.py
index 9a27985a352..44813b699a2 100644
--- a/release/scripts/startup/bl_ui/space_outliner.py
+++ b/release/scripts/startup/bl_ui/space_outliner.py
@@ -35,7 +35,17 @@ class OUTLINER_HT_header(Header):
row = layout.row(align=True)
row.template_header()
- layout.prop(space, "display_mode", text="")
+ layout.prop(space, "display_mode", icon_only=True)
+
+ if display_mode in {'VIEW_LAYER'}:
+ layout.operator("outliner.collection_new", text="", icon='GROUP').nested = True
+
+ layout.separator_spacer()
+
+ row = layout.row(align=True)
+ row.prop(space, "filter_text", icon='VIEWZOOM', text="")
+
+ layout.separator_spacer()
row = layout.row(align=True)
if display_mode in {'VIEW_LAYER'}:
@@ -50,8 +60,6 @@ class OUTLINER_HT_header(Header):
sub.active = space.use_filter_id_type
sub.prop(space, "filter_id_type", text="", icon_only=True)
- OUTLINER_MT_editor_menus.draw_collapsible(context, layout)
-
if space.display_mode == 'DATA_API':
layout.separator()
@@ -70,12 +78,7 @@ class OUTLINER_HT_header(Header):
row = layout.row()
row.label(text="No Keying Set Active")
- row = layout.row(align=True)
- row.prop(space, "use_filter_search", text="")
- if space.use_filter_search:
- row.prop(space, "filter_text", text="")
- row.prop(space, "use_filter_complete", text="")
- row.prop(space, "use_filter_case_sensitive", text="")
+ OUTLINER_MT_editor_menus.draw_collapsible(context, layout)
class OUTLINER_MT_editor_menus(Menu):
@@ -106,12 +109,19 @@ class OUTLINER_MT_view(Menu):
space = context.space_data
+ layout.prop(space, "use_filter_complete", text="Exact Match Search")
+ layout.prop(space, "use_filter_case_sensitive", text="Case Sensitive Search")
+
+ layout.separator()
+
if space.display_mode != 'DATA_API':
layout.prop(space, "use_sort_alpha")
layout.prop(space, "show_restrict_columns")
layout.separator()
layout.operator("outliner.show_active")
+ layout.separator()
+
layout.operator("outliner.show_one_level", text="Show One Level")
layout.operator("outliner.show_one_level", text="Hide One Level").open = False
layout.operator("outliner.show_hierarchy")
@@ -205,6 +215,8 @@ class OUTLINER_MT_object(Menu):
layout = self.layout
space = context.space_data
+ obj = context.active_object
+ object_mode = 'OBJECT' if obj is None else obj.mode
layout.operator("outliner.object_operation", text="Delete").type = 'DELETE'
if space.display_mode == 'VIEW_LAYER' and not space.use_filter_collection:
@@ -218,6 +230,14 @@ class OUTLINER_MT_object(Menu):
layout.separator()
+ if object_mode in {'EDIT', 'POSE'}:
+ name = bpy.types.Object.bl_rna.properties["mode"].enum_items[object_mode].name
+ layout.operator("outliner.object_operation", text=f"{name} Set").type = 'OBJECT_MODE_ENTER'
+ layout.operator("outliner.object_operation", text=f"{name} Clear").type = 'OBJECT_MODE_EXIT'
+ del name
+
+ layout.separator()
+
if not (space.display_mode == 'VIEW_LAYER' and not space.use_filter_collection):
layout.operator("outliner.id_operation", text="Unlink").type = 'UNLINK'
layout.separator()
diff --git a/release/scripts/startup/bl_ui/space_statusbar.py b/release/scripts/startup/bl_ui/space_statusbar.py
index 3a6fc4925d8..a738eb315e7 100644
--- a/release/scripts/startup/bl_ui/space_statusbar.py
+++ b/release/scripts/startup/bl_ui/space_statusbar.py
@@ -39,11 +39,7 @@ class STATUSBAR_HT_header(Header):
def draw_left(self, context):
layout = self.layout
- row = layout.row(align=True)
- if (bpy.data.filepath):
- row.label(text=bpy.data.filepath, translate=False)
- if bpy.data.is_dirty:
- row.label("(Modified)")
+ layout.template_cursor_keymap()
def draw_center(self, context):
layout = self.layout
diff --git a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
index c1331425572..c5c17d2c3cb 100644
--- a/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_toolsystem_toolbar.py
@@ -83,6 +83,12 @@ def generate_from_brushes_ex(
class _defs_view3d_generic:
@ToolDef.from_fn
def cursor():
+ def draw_settings(context, layout, tool):
+ wm = context.window_manager
+ props = tool.operator_properties("view3d.cursor3d")
+ layout.prop(props, "use_depth")
+ layout.prop(props, "orientation")
+
return dict(
text="Cursor",
icon="ops.generic.cursor",
@@ -93,6 +99,7 @@ class _defs_view3d_generic:
dict(type='EVT_TWEAK_A', value='ANY'),
),
),
+ draw_settings=draw_settings,
)
@ToolDef.from_fn
@@ -166,11 +173,16 @@ class _defs_transform:
@ToolDef.from_fn
def transform():
+ def draw_settings(context, layout, tool):
+ tool_settings = context.tool_settings
+ layout.prop(tool_settings, "use_manipulator_mode")
+
return dict(
text="Transform",
icon="ops.transform.transform",
widget="TRANSFORM_WGT_manipulator",
# No keymap default action, only for manipulators!
+ draw_settings=draw_settings,
)
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index e7f667f5d5f..90917d52724 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -73,9 +73,9 @@ class USERPREF_HT_header(Header):
layout.operator("wm.addon_refresh", icon='FILE_REFRESH')
layout.menu("USERPREF_MT_addons_online_resources")
elif userpref.active_section == 'LIGHTS':
- layout.operator('wm.studiolight_install', text="Install MatCap").orientation='MATCAP'
- layout.operator('wm.studiolight_install', text="Install World HDRI").orientation='WORLD'
- layout.operator('wm.studiolight_install', text="Install Camera HDRI").orientation='CAMERA'
+ layout.operator('wm.studiolight_install', text="Install MatCap").orientation = 'MATCAP'
+ layout.operator('wm.studiolight_install', text="Install World HDRI").orientation = 'WORLD'
+ layout.operator('wm.studiolight_install', text="Install Camera HDRI").orientation = 'CAMERA'
elif userpref.active_section == 'THEMES':
layout.operator("ui.reset_default_theme")
layout.operator("wm.theme_install")
@@ -230,7 +230,6 @@ class USERPREF_PT_interface(Panel):
col.prop(view, "ui_scale", text="Scale")
col.prop(view, "ui_line_width", text="Line Width")
col.prop(view, "show_tooltips")
- col.prop(view, "show_tooltips_python")
col.prop(view, "show_object_info", text="Object Info")
col.prop(view, "show_large_cursors")
col.prop(view, "show_view_name", text="View Name")
@@ -238,19 +237,39 @@ class USERPREF_PT_interface(Panel):
col.prop(view, "object_origin_size")
col.separator()
- col.separator()
- col.separator()
- col.prop(view, "show_mini_axis", text="Display Mini Axis")
- sub = col.column()
+ col.prop(view, "show_manipulator_navigate")
+
+ sub = col.column(align=True)
+
+ sub.prop(view, "show_mini_axis", text="Display Mini Axis")
+ sub.active = not view.show_manipulator_navigate
+
+ sub = col.column(align=True)
sub.active = view.show_mini_axis
sub.prop(view, "mini_axis_size", text="Size")
sub.prop(view, "mini_axis_brightness", text="Brightness")
col.separator()
- col.label("Warnings")
- col.prop(view, "use_quit_dialog")
+ # Toolbox doesn't exist yet
+ # col.label(text="Toolbox:")
+ #col.prop(view, "show_column_layout")
+ #col.label(text="Open Toolbox Delay:")
+ #col.prop(view, "open_left_mouse_delay", text="Hold LMB")
+ #col.prop(view, "open_right_mouse_delay", text="Hold RMB")
+ col.prop(view, "show_manipulator", text="Transform Manipulator")
+ # Currently not working
+ # col.prop(view, "show_manipulator_shaded")
+ sub = col.column()
+ sub.active = view.show_manipulator
+ sub.prop(view, "manipulator_size", text="Size")
+
+ col.separator()
+
+ col.label("Development")
+ col.prop(view, "show_tooltips_python")
+ col.prop(view, "show_developer_ui")
row.separator()
row.separator()
@@ -286,24 +305,6 @@ class USERPREF_PT_interface(Panel):
row.separator()
col = row.column()
- # Toolbox doesn't exist yet
- # col.label(text="Toolbox:")
- #col.prop(view, "show_column_layout")
- #col.label(text="Open Toolbox Delay:")
- #col.prop(view, "open_left_mouse_delay", text="Hold LMB")
- #col.prop(view, "open_right_mouse_delay", text="Hold RMB")
- col.prop(view, "show_manipulator")
- # Currently not working
- # col.prop(view, "show_manipulator_shaded")
- sub = col.column()
- sub.active = view.show_manipulator
- sub.prop(view, "manipulator_size", text="Size")
-
- col.prop(view, "show_manipulator_navigate")
-
- col.separator()
- col.separator()
- col.separator()
col.label(text="Menus:")
col.prop(view, "use_mouse_over_open")
@@ -324,6 +325,10 @@ class USERPREF_PT_interface(Panel):
col.separator()
col.prop(view, "show_splash")
+
+ col.label("Warnings")
+ col.prop(view, "use_quit_dialog")
+
col.separator()
col.label(text="App Template:")
@@ -1440,12 +1445,13 @@ class USERPREF_PT_addons(Panel):
continue
# check if addon should be visible with current filters
- if ((filter == "All") or
- (filter == info["category"]) or
- (filter == "Enabled" and is_enabled) or
+ if (
+ (filter == "All") or
+ (filter == info["category"]) or
+ (filter == "Enabled" and is_enabled) or
(filter == "Disabled" and not is_enabled) or
(filter == "User" and (mod.__file__.startswith((scripts_addons_folder, userpref_addons_folder))))
- ):
+ ):
if search and search not in info["name"].lower():
if info["author"]:
if search not in info["author"].lower():
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index c9768f54ba0..6645a1b12ef 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -65,9 +65,11 @@ class VIEW3D_HT_header(Header):
row.prop(tool_settings.particle_edit, "select_mode", text="", expand=True)
# Occlude geometry
- if ((((shading.type not in {'SOLID', 'TEXTURED'}) or not shading.show_xray) and
- (object_mode == 'PARTICLE_EDIT' or (object_mode == 'EDIT' and obj.type == 'MESH'))) or
- (object_mode in {'WEIGHT_PAINT', 'VERTEX_PAINT'})):
+ if (
+ (((shading.type not in {'SOLID', 'TEXTURED'}) or not shading.show_xray) and
+ (object_mode == 'PARTICLE_EDIT' or (object_mode == 'EDIT' and obj.type == 'MESH'))) or
+ (object_mode in {'WEIGHT_PAINT', 'VERTEX_PAINT'})
+ ):
row = layout.row()
row.prop(view, "use_occlude_geometry", text="")
@@ -195,7 +197,7 @@ class VIEW3D_HT_header(Header):
sub.popover(space_type='VIEW_3D', region_type='HEADER', panel_type="VIEW3D_PT_shading")
row = layout.row(align=True)
- row.prop(overlay, "show_overlays", icon="WIRE", text="")
+ row.prop(overlay, "show_overlays", icon='WIRE', text="")
sub = row.row(align=True)
sub.active = overlay.show_overlays
@@ -1517,6 +1519,10 @@ class VIEW3D_MT_object(Menu):
layout.separator()
+ layout.menu("VIEW3D_MT_object_showhide")
+
+ layout.separator()
+
layout.operator("object.delete", text="Delete...").use_global = False
@@ -1873,6 +1879,20 @@ class VIEW3D_MT_object_quick_effects(Menu):
layout.operator("object.quick_fluid")
+class VIEW3D_MT_object_showhide(Menu):
+ bl_label = "Show/Hide"
+
+ def draw(self, context):
+ layout = self.layout
+
+ layout.operator("object.hide_view_clear", text="Show Hidden")
+
+ layout.separator()
+
+ layout.operator("object.hide_view_set", text="Hide Selected").unselected = False
+ layout.operator("object.hide_view_set", text="Hide Unselected").unselected = True
+
+
class VIEW3D_MT_make_single_user(Menu):
bl_label = "Make Single User"
@@ -2626,7 +2646,7 @@ class VIEW3D_MT_edit_mesh_specials(Menu):
layout.operator("mesh.merge", text="Merge Vertices...")
layout.operator("mesh.remove_doubles", text="Remove Double Vertices")
layout.operator("mesh.dissolve_verts")
- layout.operator("mesh.delete", text="Delete Vertices").type = "VERT"
+ layout.operator("mesh.delete", text="Delete Vertices").type = 'VERT'
# Edge Select Commands
if select_mode[1]:
@@ -2637,7 +2657,7 @@ class VIEW3D_MT_edit_mesh_specials(Menu):
layout.separator()
layout.operator("mesh.dissolve_edges")
- layout.operator("mesh.delete", text="Delete Edges").type = "EDGE"
+ layout.operator("mesh.delete", text="Delete Edges").type = 'EDGE'
# Face Select Commands
if select_mode[2]:
@@ -2667,7 +2687,7 @@ class VIEW3D_MT_edit_mesh_specials(Menu):
layout.separator()
layout.operator("mesh.dissolve_faces")
- layout.operator("mesh.delete", text="Delete Faces").type = "FACE"
+ layout.operator("mesh.delete", text="Delete Faces").type = 'FACE'
# General Mesh Commands
@@ -2953,17 +2973,21 @@ class VIEW3D_MT_edit_mesh_shading(Menu):
def draw(self, context):
layout = self.layout
- layout.label(text="Faces:")
- layout.operator("mesh.faces_shade_smooth", text="Smooth")
- layout.operator("mesh.faces_shade_flat", text="Flat")
- layout.label(text="Edges:")
- layout.operator("mesh.mark_sharp", text="Smooth").clear = True
- layout.operator("mesh.mark_sharp", text="Sharp")
- layout.label(text="Vertices:")
- props = layout.operator("mesh.mark_sharp", text="Smooth")
+ layout.operator("mesh.faces_shade_smooth", text="Smooth Faces")
+ layout.operator("mesh.faces_shade_flat", text="Flat Faces")
+
+ layout.separator()
+
+ layout.operator("mesh.mark_sharp", text="Smooth Edges").clear = True
+ layout.operator("mesh.mark_sharp", text="Sharp Edges")
+
+ layout.separator()
+
+ props = layout.operator("mesh.mark_sharp", text="Smooth Vertices")
props.use_verts = True
props.clear = True
- layout.operator("mesh.mark_sharp", text="Sharp").use_verts = True
+
+ layout.operator("mesh.mark_sharp", text="Sharp Vertices").use_verts = True
class VIEW3D_MT_edit_mesh_weights(Menu):
@@ -3493,7 +3517,7 @@ class VIEW3D_MT_edit_gpencil_interpolate(Menu):
layout.operator("gpencil.interpolate_sequence", text="Sequence")
-class VIEW3D_PIE_object_mode(Menu):
+class VIEW3D_MT_object_mode_pie(Menu):
bl_label = "Mode"
def draw(self, context):
@@ -3503,9 +3527,9 @@ class VIEW3D_PIE_object_mode(Menu):
pie.operator_enum("OBJECT_OT_mode_set", "mode")
-class VIEW3D_PIE_view(Menu):
+class VIEW3D_MT_view_pie(Menu):
bl_label = "View"
- bl_idname = "VIEW3D_PIE_view"
+ bl_idname = "VIEW3D_MT_view_pie"
def draw(self, context):
layout = self.layout
@@ -3626,7 +3650,7 @@ class VIEW3D_PT_shading_lighting(Panel):
view = context.space_data
shading = view.shading
- if shading.type in ('SOLID', 'TEXTURED'):
+ if shading.type == 'SOLID':
layout.row().prop(shading, "light", expand=True)
if shading.light == 'STUDIO':
row = layout.row()
@@ -3643,7 +3667,7 @@ class VIEW3D_PT_shading_lighting(Panel):
sub.operator('VIEW3D_OT_toggle_matcap_flip', emboss=False, text="", icon='ARROW_LEFTRIGHT')
sub.operator('wm.studiolight_userpref_show', emboss=False, text="", icon='PREFERENCES')
- elif shading.type in ('MATERIAL'):
+ elif shading.type == 'MATERIAL':
row = layout.row()
row.template_icon_view(shading, "studio_light", show_labels=True)
sub = row.column()
@@ -3688,7 +3712,7 @@ class VIEW3D_PT_shading_options(Panel):
def poll(cls, context):
view = context.space_data
shading = view.shading
- return shading.type in ['SOLID', 'TEXTURED']
+ return shading.type == 'SOLID'
def draw(self, context):
layout = self.layout
@@ -3700,35 +3724,34 @@ class VIEW3D_PT_shading_options(Panel):
row = layout.row()
row.prop(shading, "show_specular_highlight")
- if shading.type in ('SOLID', 'TEXTURED'):
- row = layout.split(0.4)
- row.prop(shading, "show_xray")
- sub = row.row()
- sub.active = shading.show_xray
- sub.prop(shading, "xray_alpha", text="")
-
- row = layout.split(0.4)
- row.active = not shading.show_xray
- row.prop(shading, "show_shadows")
- sub = row.row()
- sub.active = shading.show_shadows and not shading.show_xray
- sub.prop(shading, "shadow_intensity", text="")
-
- row = layout.split(0.4)
- row.active = not shading.show_xray
- row.prop(shading, "show_cavity")
- sub = row.column(align=True)
- sub.active = not shading.show_xray and shading.show_cavity
- sub.prop(shading, "cavity_ridge_factor")
- sub.prop(shading, "cavity_valley_factor")
-
- row = layout.split(0.4)
- row.prop(shading, "show_object_outline")
- sub = row.row()
- sub.active = shading.show_object_outline
- sub.prop(shading, "object_outline_color", text="")
-
- layout.prop(view, "show_world")
+ row = layout.split(0.4)
+ row.prop(shading, "show_xray")
+ sub = row.row()
+ sub.active = shading.show_xray
+ sub.prop(shading, "xray_alpha", text="")
+
+ row = layout.split(0.4)
+ row.active = not shading.show_xray
+ row.prop(shading, "show_shadows")
+ sub = row.row()
+ sub.active = shading.show_shadows and not shading.show_xray
+ sub.prop(shading, "shadow_intensity", text="")
+
+ row = layout.split(0.4)
+ row.active = not shading.show_xray
+ row.prop(shading, "show_cavity")
+ sub = row.column(align=True)
+ sub.active = not shading.show_xray and shading.show_cavity
+ sub.prop(shading, "cavity_ridge_factor")
+ sub.prop(shading, "cavity_valley_factor")
+
+ row = layout.split(0.4)
+ row.prop(shading, "show_object_outline")
+ sub = row.row()
+ sub.active = shading.show_object_outline
+ sub.prop(shading, "object_outline_color", text="")
+
+ layout.prop(view, "show_world")
class VIEW3D_PT_overlay(Panel):
@@ -3766,7 +3789,7 @@ class VIEW3D_PT_overlay(Panel):
#sub.prop(overlay, "show_onion_skins")
sub.prop(overlay, "show_face_orientation")
sub.prop(overlay, "show_backface_culling")
- if shading.type == "MATERIAL":
+ if shading.type == 'MATERIAL':
sub.prop(overlay, "show_look_dev")
row = col.row()
@@ -3826,6 +3849,7 @@ class VIEW3D_PT_overlay_edit_mesh(Panel):
data = context.active_object.data
statvis = tool_settings.statvis
with_freestyle = bpy.app.build_options.freestyle
+ show_developer_ui = context.user_preferences.view.show_developer_ui
col = layout.column()
col.active = display_all
@@ -3848,7 +3872,7 @@ class VIEW3D_PT_overlay_edit_mesh(Panel):
sub.prop(data, "show_extra_face_area", text="Face Area")
sub.prop(data, "show_extra_face_angle", text="Face Angle")
- if bpy.app.debug:
+ if show_developer_ui:
sub.prop(data, "show_extra_indices", text="Indices")
if with_freestyle:
@@ -4001,12 +4025,20 @@ class VIEW3D_PT_overlay_paint(Panel):
bl_space_type = 'VIEW_3D'
bl_region_type = 'HEADER'
bl_parent_id = 'VIEW3D_PT_overlay'
- bl_label = "Paint"
+ bl_label = ""
@classmethod
def poll(cls, context):
return context.mode in {'PAINT_WEIGHT', 'PAINT_VERTEX', 'PAINT_TEXTURE'}
+ def draw_header(self, context):
+ layout = self.layout
+ layout.label(text={
+ 'PAINT_TEXTURE': "Texture Paint",
+ 'PAINT_VERTEX': "Vertex Paint",
+ 'PAINT_WEIGHT': "Weight Paint",
+ }[context.mode])
+
def draw(self, context):
layout = self.layout
view = context.space_data
@@ -4016,11 +4048,15 @@ class VIEW3D_PT_overlay_paint(Panel):
col = layout.column()
col.active = display_all
+ col.prop(overlay, {
+ 'PAINT_TEXTURE': "texture_paint_mode_opacity",
+ 'PAINT_VERTEX': "vertex_paint_mode_opacity",
+ 'PAINT_WEIGHT': "weight_paint_mode_opacity",
+ }[context.mode], text="Opacity")
+
if context.mode in {'PAINT_WEIGHT', 'PAINT_VERTEX'}:
col.prop(overlay, "show_paint_wire")
- col.prop(view, "show_mode_shade_override")
-
class VIEW3D_PT_quad_view(Panel):
bl_space_type = 'VIEW_3D'
@@ -4217,6 +4253,7 @@ classes = (
VIEW3D_MT_object_collection,
VIEW3D_MT_object_constraints,
VIEW3D_MT_object_quick_effects,
+ VIEW3D_MT_object_showhide,
VIEW3D_MT_make_single_user,
VIEW3D_MT_make_links,
VIEW3D_MT_brush,
@@ -4283,8 +4320,8 @@ classes = (
VIEW3D_MT_edit_armature_delete,
VIEW3D_MT_edit_gpencil_transform,
VIEW3D_MT_edit_gpencil_interpolate,
- VIEW3D_PIE_object_mode,
- VIEW3D_PIE_view,
+ VIEW3D_MT_object_mode_pie,
+ VIEW3D_MT_view_pie,
VIEW3D_PT_grease_pencil,
VIEW3D_PT_grease_pencil_palettecolor,
VIEW3D_PT_view3d_properties,
diff --git a/release/scripts/startup/bl_ui/space_view3d_toolbar.py b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
index 53947a7d8af..864dcc4b0e9 100644
--- a/release/scripts/startup/bl_ui/space_view3d_toolbar.py
+++ b/release/scripts/startup/bl_ui/space_view3d_toolbar.py
@@ -1021,7 +1021,6 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
row.prop(sculpt, "lock_y", text="Y", toggle=True)
row.prop(sculpt, "lock_z", text="Z", toggle=True)
-
split = layout.split()
col = split.column()