diff options
author | Dalai Felinto <dfelinto@gmail.com> | 2018-06-26 17:07:39 +0300 |
---|---|---|
committer | Dalai Felinto <dfelinto@gmail.com> | 2018-06-26 17:07:39 +0300 |
commit | fbaf6e6fb3d2eb2f0c737b7d4713a5ea171738e6 (patch) | |
tree | 35bfa54eef6240693a13d594bb49ed7c8d33b32e /release | |
parent | bba0ad903cfa407368c78b0b8480b1a729474305 (diff) | |
parent | c07f2bc89196ea449a2875634eb85efa45733fb5 (diff) |
Merge remote-tracking branch 'origin/blender2.8' into temp-dynamic-overridestemp-dynamic-overrides
Diffstat (limited to 'release')
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 Binary files differnew file mode 100644 index 00000000000..4feb0d26696 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_hide_off.dat diff --git a/release/datafiles/blender_icons16/icon16_hide_on.dat b/release/datafiles/blender_icons16/icon16_hide_on.dat Binary files differnew file mode 100644 index 00000000000..906edb431dd --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_hide_on.dat diff --git a/release/datafiles/blender_icons16/icon16_mouse_drag.dat b/release/datafiles/blender_icons16/icon16_mouse_drag.dat Binary files differnew file mode 100644 index 00000000000..751421684b1 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mouse_drag.dat diff --git a/release/datafiles/blender_icons16/icon16_mouse_lmb.dat b/release/datafiles/blender_icons16/icon16_mouse_lmb.dat Binary files differnew file mode 100644 index 00000000000..2a0c42f4a6a --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mouse_lmb.dat diff --git a/release/datafiles/blender_icons16/icon16_mouse_mmb.dat b/release/datafiles/blender_icons16/icon16_mouse_mmb.dat Binary files differnew file mode 100644 index 00000000000..300f6be4ee3 --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mouse_mmb.dat diff --git a/release/datafiles/blender_icons16/icon16_mouse_rmb.dat b/release/datafiles/blender_icons16/icon16_mouse_rmb.dat Binary files differnew file mode 100644 index 00000000000..3f13b167eff --- /dev/null +++ b/release/datafiles/blender_icons16/icon16_mouse_rmb.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_view_off.dat b/release/datafiles/blender_icons16/icon16_restrict_view_off.dat Binary files differindex 730f5749104..320c1be5259 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_view_off.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_view_off.dat diff --git a/release/datafiles/blender_icons16/icon16_restrict_view_on.dat b/release/datafiles/blender_icons16/icon16_restrict_view_on.dat Binary files differindex edef3a356b2..279d744a012 100644 --- a/release/datafiles/blender_icons16/icon16_restrict_view_on.dat +++ b/release/datafiles/blender_icons16/icon16_restrict_view_on.dat diff --git a/release/datafiles/blender_icons32/icon32_hide_off.dat b/release/datafiles/blender_icons32/icon32_hide_off.dat Binary files differnew file mode 100644 index 00000000000..e13dd195ee6 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_hide_off.dat diff --git a/release/datafiles/blender_icons32/icon32_hide_on.dat b/release/datafiles/blender_icons32/icon32_hide_on.dat Binary files differnew file mode 100644 index 00000000000..25c83fb165d --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_hide_on.dat diff --git a/release/datafiles/blender_icons32/icon32_mouse_drag.dat b/release/datafiles/blender_icons32/icon32_mouse_drag.dat Binary files differnew file mode 100644 index 00000000000..96d3e23181c --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mouse_drag.dat diff --git a/release/datafiles/blender_icons32/icon32_mouse_lmb.dat b/release/datafiles/blender_icons32/icon32_mouse_lmb.dat Binary files differnew file mode 100644 index 00000000000..5cb01a4199b --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mouse_lmb.dat diff --git a/release/datafiles/blender_icons32/icon32_mouse_mmb.dat b/release/datafiles/blender_icons32/icon32_mouse_mmb.dat Binary files differnew file mode 100644 index 00000000000..2c0bc4e1873 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mouse_mmb.dat diff --git a/release/datafiles/blender_icons32/icon32_mouse_rmb.dat b/release/datafiles/blender_icons32/icon32_mouse_rmb.dat Binary files differnew file mode 100644 index 00000000000..3e8bf43d306 --- /dev/null +++ b/release/datafiles/blender_icons32/icon32_mouse_rmb.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_view_off.dat b/release/datafiles/blender_icons32/icon32_restrict_view_off.dat Binary files differindex f9b3a48cfde..ec850df393e 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_view_off.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_view_off.dat diff --git a/release/datafiles/blender_icons32/icon32_restrict_view_on.dat b/release/datafiles/blender_icons32/icon32_restrict_view_on.dat Binary files differindex 482530bab58..07e66cc51a9 100644 --- a/release/datafiles/blender_icons32/icon32_restrict_view_on.dat +++ b/release/datafiles/blender_icons32/icon32_restrict_view_on.dat 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() |