UI: Layout changes for new checkbox layout possibilities

Follow-up to previous commit.

Some examples:
{F8473507} {F8473508} {F8473509} {F8473510}
For more screenshots, please see D7430.

We use column or row headings here to bring more structure, and to give
the eye visual anchors which aid eye-scanning. The left-aligned
checkboxes likewise help with this. And we keep the adherence to the
center line, so the alignment matches up between the various buttons and
controls.

* Changes the property split percentage from 50/50% to 40/60%. This is
  needed to give enough space for the checkboxes. But in most cases this
  looks better anyway - see Transform panel. In some cases it simply
  fills out the available space more efficently.
* Fix various hacks where we previously used manually defined splits.
  When we did this, the alignment was never quite right, and the layout
  code was a mess.
* Adds column headings to many places where a list of checkboxes all
  share a common purpose or leading text.
* Add checkbox + value configurations various places where a checkbox
  only serves to enable the value slider
* Removes most uses of grid flow layout. The grid flow layouts combine
  poorly with column headings, and also they would mess alignment up
  badly. The grid flow layouts also often made buttons and controls jump
  around on the screen if you would just resize editors slightly,
  causing visual confusion, making users lose their place. The logic for
  at what time the list of items would re-flow was often flawed, jumping
  to multiple columns too fast or too late - and frankly, the grid flow
  layouts would often just look bad.

Maniphest Task: https://developer.blender.org/T65965

Differential Revision: https://developer.blender.org/D7430

Reviewed by: Brecht Van Lommel, Pablo Vazquez.

Most work here by William Reynish, few changes by Julian Eisel.
This commit is contained in:
William Reynish 2020-04-17 16:54:03 +02:00 committed by Julian Eisel
parent 219049bb3b
commit 7fc60bff14
Notes: blender-bot 2023-02-14 02:08:39 +01:00
Referenced by commit 77187718e4, Fix T78469: Output Metadata: Strip Name no longer accessible
Referenced by commit 6154aa1529, Cleanup: remove redundant decorator for eevee 'overscan_size'
Referenced by commit 879032d2ab, Cleanup: Correct order of proxy resolutions
Referenced by commit d07dab0d61, Fix T76225: Cycles View layer filters are grayed out while still working
Referenced by issue #78469, UI: Output Metadata: Strip Name no long accessible
Referenced by issue #76225, View layer filters are grayed out while still working.
Referenced by issue #65965, Checkboxes alignment tweaks
20 changed files with 499 additions and 716 deletions

View File

@ -500,8 +500,9 @@ class CYCLES_RENDER_PT_light_paths_caustics(CyclesButtonsPanel, Panel):
col = layout.column()
col.prop(cscene, "blur_glossy")
col.prop(cscene, "caustics_reflective")
col.prop(cscene, "caustics_refractive")
col = layout.column(heading="Caustics", align=True)
col.prop(cscene, "caustics_reflective", text="Reflective")
col.prop(cscene, "caustics_refractive", text="Refractive")
class CYCLES_RENDER_PT_motion_blur(CyclesButtonsPanel, Panel):
@ -762,20 +763,13 @@ class CYCLES_RENDER_PT_filter(CyclesButtonsPanel, Panel):
rd = scene.render
view_layer = context.view_layer
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column(heading="Include")
col.prop(view_layer, "use_sky", text="Environment")
col = flow.column()
col.prop(view_layer, "use_ao", text="Ambient Occlusion")
col = flow.column()
col.prop(view_layer, "use_solid", text="Surfaces")
col = flow.column()
col.prop(view_layer, "use_strand", text="Hair")
col = flow.column()
col.prop(view_layer, "use_volumes", text="Volumes")
if with_freestyle:
col = flow.column()
col.prop(view_layer, "use_freestyle", text="Freestyle")
col.active = rd.use_freestyle
@ -819,36 +813,27 @@ class CYCLES_RENDER_PT_passes_data(CyclesButtonsPanel, Panel):
view_layer = context.view_layer
cycles_view_layer = view_layer.cycles
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column(heading="Include", align=True)
col.prop(view_layer, "use_pass_combined")
col = flow.column()
col.prop(view_layer, "use_pass_z")
col = flow.column()
col.prop(view_layer, "use_pass_mist")
col = flow.column()
col.prop(view_layer, "use_pass_normal")
col = flow.column()
col.prop(view_layer, "use_pass_vector")
col.active = not rd.use_motion_blur
col = flow.column()
sub = col.column()
sub.active = not rd.use_motion_blur
sub.prop(view_layer, "use_pass_vector")
col.prop(view_layer, "use_pass_uv")
col = flow.column()
col.prop(cycles_view_layer, "denoising_store_passes", text="Denoising Data")
col = layout.column(heading="Indexes", align=True)
col.prop(view_layer, "use_pass_object_index")
col = flow.column()
col.prop(view_layer, "use_pass_material_index")
layout.separator()
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col.prop(cycles_view_layer, "denoising_store_passes", text="Denoising Data")
col = flow.column()
col = layout.column(heading="Debug", align=True)
col.prop(cycles_view_layer, "pass_debug_render_time", text="Render Time")
col = flow.column()
col.prop(cycles_view_layer, "pass_debug_sample_count", text="Sample Count")
layout.separator()
layout.prop(view_layer, "pass_alpha_threshold")
@ -866,38 +851,26 @@ class CYCLES_RENDER_PT_passes_light(CyclesButtonsPanel, Panel):
view_layer = context.view_layer
cycles_view_layer = view_layer.cycles
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Diffuse")
row = split.row(align=True)
row.prop(view_layer, "use_pass_diffuse_direct", text="Direct", toggle=True)
row.prop(view_layer, "use_pass_diffuse_indirect", text="Indirect", toggle=True)
row.prop(view_layer, "use_pass_diffuse_color", text="Color", toggle=True)
col = layout.column(heading="Diffuse", align=True)
col.prop(view_layer, "use_pass_diffuse_direct", text="Direct")
col.prop(view_layer, "use_pass_diffuse_indirect", text="Indirect")
col.prop(view_layer, "use_pass_diffuse_color", text="Color")
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Glossy")
row = split.row(align=True)
row.prop(view_layer, "use_pass_glossy_direct", text="Direct", toggle=True)
row.prop(view_layer, "use_pass_glossy_indirect", text="Indirect", toggle=True)
row.prop(view_layer, "use_pass_glossy_color", text="Color", toggle=True)
col = layout.column(heading="Glossy", align=True)
col.prop(view_layer, "use_pass_glossy_direct", text="Direct")
col.prop(view_layer, "use_pass_glossy_indirect", text="Indirect")
col.prop(view_layer, "use_pass_glossy_color", text="Color")
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Transmission")
row = split.row(align=True)
row.prop(view_layer, "use_pass_transmission_direct", text="Direct", toggle=True)
row.prop(view_layer, "use_pass_transmission_indirect", text="Indirect", toggle=True)
row.prop(view_layer, "use_pass_transmission_color", text="Color", toggle=True)
col = layout.column(heading="Transmission", align=True)
col.prop(view_layer, "use_pass_transmission_direct", text="Direct")
col.prop(view_layer, "use_pass_transmission_indirect", text="Indirect")
col.prop(view_layer, "use_pass_transmission_color", text="Color")
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Volume")
row = split.row(align=True)
row.prop(cycles_view_layer, "use_pass_volume_direct", text="Direct", toggle=True)
row.prop(cycles_view_layer, "use_pass_volume_indirect", text="Indirect", toggle=True)
col = layout.column(heading="Volume", align=True)
col.prop(cycles_view_layer, "use_pass_volume_direct", text="Direct")
col.prop(cycles_view_layer, "use_pass_volume_indirect", text="Indirect")
col = layout.column(align=True)
col = layout.column(heading="Other", align=True)
col.prop(view_layer, "use_pass_emit", text="Emission")
col.prop(view_layer, "use_pass_environment")
col.prop(view_layer, "use_pass_shadow")
@ -918,11 +891,10 @@ class CYCLES_RENDER_PT_passes_crypto(CyclesButtonsPanel, Panel):
cycles_view_layer = context.view_layer.cycles
row = layout.row(align=True)
row.use_property_split = False
row.prop(cycles_view_layer, "use_pass_crypto_object", text="Object", toggle=True)
row.prop(cycles_view_layer, "use_pass_crypto_material", text="Material", toggle=True)
row.prop(cycles_view_layer, "use_pass_crypto_asset", text="Asset", toggle=True)
col = layout.column(heading="Include", align=True)
col.prop(cycles_view_layer, "use_pass_crypto_object", text="Object")
col.prop(cycles_view_layer, "use_pass_crypto_material", text="Material")
col.prop(cycles_view_layer, "use_pass_crypto_asset", text="Asset")
layout.prop(cycles_view_layer, "pass_crypto_depth", text="Levels")
@ -1012,10 +984,9 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
view_layer = context.view_layer
cycles_view_layer = view_layer.cycles
split = layout.split()
split.active = cycles_view_layer.use_denoising
layout.active = cycles_view_layer.use_denoising
col = split.column(align=True)
col = layout.column()
if show_optix_denoising(context):
col.prop(cycles_view_layer, "use_optix_denoising")
@ -1026,51 +997,29 @@ class CYCLES_RENDER_PT_denoising(CyclesButtonsPanel, Panel):
return
col.prop(cycles_view_layer, "denoising_radius", text="Radius")
col = layout.column()
col.prop(cycles_view_layer, "denoising_strength", slider=True, text="Strength")
col.prop(cycles_view_layer, "denoising_feature_strength", slider=True, text="Feature Strength")
col.prop(cycles_view_layer, "denoising_relative_pca")
layout.separator()
split = layout.split(factor=0.5)
split.active = cycles_view_layer.use_denoising or cycles_view_layer.denoising_store_passes
col = layout.column()
col.active = cycles_view_layer.use_denoising or cycles_view_layer.denoising_store_passes
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Diffuse")
row = split.row(align=True)
row.use_property_split = False
row = col.row(heading="Diffuse", align=True)
row.prop(cycles_view_layer, "denoising_diffuse_direct", text="Direct", toggle=True)
row.prop(cycles_view_layer, "denoising_diffuse_indirect", text="Indirect", toggle=True)
split = layout.split(factor=0.5)
split.active = cycles_view_layer.use_denoising or cycles_view_layer.denoising_store_passes
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Glossy")
row = split.row(align=True)
row.use_property_split = False
row = col.row(heading="Glossy", align=True)
row.prop(cycles_view_layer, "denoising_glossy_direct", text="Direct", toggle=True)
row.prop(cycles_view_layer, "denoising_glossy_indirect", text="Indirect", toggle=True)
split = layout.split(factor=0.5)
split.active = cycles_view_layer.use_denoising or cycles_view_layer.denoising_store_passes
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Transmission")
row = split.row(align=True)
row.use_property_split = False
row = col.row(heading="Transmission", align=True)
row.prop(cycles_view_layer, "denoising_transmission_direct", text="Direct", toggle=True)
row.prop(cycles_view_layer, "denoising_transmission_indirect", text="Indirect", toggle=True)
split = layout.split(factor=0.5)
split.active = cycles_view_layer.use_denoising or cycles_view_layer.denoising_store_passes
class CYCLES_PT_post_processing(CyclesButtonsPanel, Panel):
bl_label = "Post Processing"
@ -1084,7 +1033,7 @@ class CYCLES_PT_post_processing(CyclesButtonsPanel, Panel):
rd = context.scene.render
col = layout.column(align=True)
col = layout.column(align=True, heading="Pipeline")
col.prop(rd, "use_compositing")
col.prop(rd, "use_sequencer")
@ -1273,22 +1222,18 @@ class CYCLES_OBJECT_PT_visibility(CyclesButtonsPanel, Panel):
layout = self.layout
layout.use_property_split = True
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
layout = self.layout
ob = context.object
col = flow.column()
col.prop(ob, "hide_viewport", text="Show in Viewports", invert_checkbox=True, toggle=False)
col = flow.column()
col.prop(ob, "hide_render", text="Show in Renders", invert_checkbox=True, toggle=False)
col = flow.column()
col.prop(ob, "hide_select", text="Selectable", invert_checkbox=True, toggle=False)
layout.prop(ob, "hide_select", text="Selectable", invert_checkbox=True, toggle=False)
col = layout.column(heading="Show in")
col.prop(ob, "hide_viewport", text="Viewports", invert_checkbox=True, toggle=False)
col.prop(ob, "hide_render", text="Renders", invert_checkbox=True, toggle=False)
if has_geometry_visibility(ob):
cob = ob.cycles
col = flow.column()
col = layout.column(heading="Mask")
col.prop(cob, "is_shadow_catcher")
col = flow.column()
col.prop(cob, "is_holdout")
@ -1312,24 +1257,16 @@ class CYCLES_OBJECT_PT_visibility_ray_visibility(CyclesButtonsPanel, Panel):
cob = ob.cycles
visibility = ob.cycles_visibility
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column()
col.prop(visibility, "camera")
col = flow.column()
col.prop(visibility, "diffuse")
col = flow.column()
col.prop(visibility, "glossy")
col = flow.column()
col.prop(visibility, "transmission")
col = flow.column()
col.prop(visibility, "scatter")
if ob.type != 'LIGHT':
col = flow.column()
col.prop(visibility, "shadow")
layout.separator()
sub = col.column()
sub.prop(visibility, "shadow")
class CYCLES_OBJECT_PT_visibility_culling(CyclesButtonsPanel, Panel):
@ -1352,15 +1289,13 @@ class CYCLES_OBJECT_PT_visibility_culling(CyclesButtonsPanel, Panel):
ob = context.object
cob = ob.cycles
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
row = layout.row()
row.active = scene.render.use_simplify and cscene.use_camera_cull
row.prop(cob, "use_camera_cull")
col = flow.column()
col.active = scene.render.use_simplify and cscene.use_camera_cull
col.prop(cob, "use_camera_cull")
col = flow.column()
col.active = scene.render.use_simplify and cscene.use_distance_cull
col.prop(cob, "use_distance_cull")
row = layout.row()
row.active = scene.render.use_simplify and cscene.use_distance_cull
row.prop(cob, "use_distance_cull")
def panel_node_draw(layout, id_data, output_type, input_name):
@ -1906,26 +1841,24 @@ class CYCLES_RENDER_PT_bake_influence(CyclesButtonsPanel, Panel):
sub.prop(cbk, "normal_b", text="B")
elif cscene.bake_type == 'COMBINED':
row = col.row(align=True)
row.use_property_split = False
row.prop(cbk, "use_pass_direct", toggle=True)
row.prop(cbk, "use_pass_indirect", toggle=True)
flow = col.grid_flow(row_major=False, columns=0, even_columns=False, even_rows=False, align=True)
col = layout.column(heading="Lighting", align=True)
col.prop(cbk, "use_pass_direct")
col.prop(cbk, "use_pass_indirect")
flow.active = cbk.use_pass_direct or cbk.use_pass_indirect
flow.prop(cbk, "use_pass_diffuse")
flow.prop(cbk, "use_pass_glossy")
flow.prop(cbk, "use_pass_transmission")
flow.prop(cbk, "use_pass_ambient_occlusion")
flow.prop(cbk, "use_pass_emit")
col = layout.column(heading="Contributions", align=True)
col.active = cbk.use_pass_direct or cbk.use_pass_indirect
col.prop(cbk, "use_pass_diffuse")
col.prop(cbk, "use_pass_glossy")
col.prop(cbk, "use_pass_transmission")
col.prop(cbk, "use_pass_ambient_occlusion")
col.prop(cbk, "use_pass_emit")
elif cscene.bake_type in {'DIFFUSE', 'GLOSSY', 'TRANSMISSION'}:
row = col.row(align=True)
row.use_property_split = False
row.prop(cbk, "use_pass_direct", toggle=True)
row.prop(cbk, "use_pass_indirect", toggle=True)
row.prop(cbk, "use_pass_color", toggle=True)
col = layout.column(heading="Contributions", align=True)
col.prop(cbk, "use_pass_direct")
col.prop(cbk, "use_pass_indirect")
col.prop(cbk, "use_pass_color")
class CYCLES_RENDER_PT_bake_selected_to_active(CyclesButtonsPanel, Panel):
@ -2131,17 +2064,17 @@ class CYCLES_RENDER_PT_simplify_culling(CyclesButtonsPanel, Panel):
layout.active = rd.use_simplify
col = layout.column()
col.prop(cscene, "use_camera_cull")
sub = col.column()
row = layout.row(heading="Camera Culling")
row.prop(cscene, "use_camera_cull", text="")
sub = row.column()
sub.active = cscene.use_camera_cull
sub.prop(cscene, "camera_cull_margin")
sub.prop(cscene, "camera_cull_margin", text="")
col = layout.column()
col.prop(cscene, "use_distance_cull")
sub = col.column()
row = layout.row(heading="Distance Culling")
row.prop(cscene, "use_distance_cull", text="")
sub = row.column()
sub.active = cscene.use_distance_cull
sub.prop(cscene, "distance_cull_margin", text="Distance")
sub.prop(cscene, "distance_cull_margin", text="")
class CYCLES_VIEW3D_PT_shading_render_pass(Panel):

View File

@ -84,17 +84,12 @@ class DATA_PT_display(ArmatureButtonsPanel, Panel):
layout.prop(arm, "display_type", text="Display As")
flow = layout.grid_flow(row_major=False, columns=0, even_columns=False, even_rows=False, align=True)
col = flow.column()
col = layout.column(heading="Show")
col.prop(arm, "show_names", text="Names")
col = flow.column()
col.prop(arm, "show_axes", text="Axes")
col = flow.column()
col.prop(arm, "show_bone_custom_shapes", text="Shapes")
col = flow.column()
col.prop(arm, "show_group_colors", text="Group Colors")
if ob:
col = flow.column()
col.prop(ob, "show_in_front", text="In Front")

View File

@ -360,8 +360,9 @@ class DATA_PT_camera_background_image(CameraButtonsPanel, Panel):
col.prop(bg, "rotation")
col.prop(bg, "scale")
col.prop(bg, "use_flip_x")
col.prop(bg, "use_flip_y")
col = box.column(heading="Flip")
col.prop(bg, "use_flip_x", text="X")
col.prop(bg, "use_flip_y", text="Y")
class DATA_PT_camera_display(CameraButtonsPanel, Panel):
@ -377,21 +378,12 @@ class DATA_PT_camera_display(CameraButtonsPanel, Panel):
col = layout.column(align=True)
col.separator()
col.prop(cam, "display_size", text="Size")
col.separator()
flow = layout.grid_flow(row_major=False, columns=0, even_columns=False, even_rows=False, align=False)
col = flow.column()
col = layout.column(heading="Show")
col.prop(cam, "show_limits", text="Limits")
col = flow.column()
col.prop(cam, "show_mist", text="Mist")
col = flow.column()
col.prop(cam, "show_sensor", text="Sensor")
col = flow.column()
col.prop(cam, "show_name", text="Name")
@ -407,24 +399,20 @@ class DATA_PT_camera_display_composition_guides(CameraButtonsPanel, Panel):
cam = context.camera
flow = layout.grid_flow(row_major=False, columns=0, even_columns=False, even_rows=False, align=False)
layout.prop(cam, "show_composition_thirds")
col = flow.column()
col = layout.column(heading="Center", align=True)
col.prop(cam, "show_composition_center")
col = flow.column()
col.prop(cam, "show_composition_center_diagonal")
col = flow.column()
col.prop(cam, "show_composition_thirds")
col = flow.column()
col.prop(cam, "show_composition_golden")
col = flow.column()
col.prop(cam, "show_composition_golden_tria_a")
col = flow.column()
col.prop(cam, "show_composition_golden_tria_b")
col = flow.column()
col.prop(cam, "show_composition_harmony_tri_a")
col = flow.column()
col.prop(cam, "show_composition_harmony_tri_b")
col.prop(cam, "show_composition_center_diagonal", text="Diagonal")
col = layout.column(heading="Golden", align=True)
col.prop(cam, "show_composition_golden", text="Ratio")
col.prop(cam, "show_composition_golden_tria_a", text="Triangle A")
col.prop(cam, "show_composition_golden_tria_b", text="Triangle B")
col = layout.column(heading="Harmony", align=True)
col.prop(cam, "show_composition_harmony_tri_a", text="Triangle A")
col.prop(cam, "show_composition_harmony_tri_b", text="Triangle B")
class DATA_PT_camera_display_passepartout(CameraButtonsPanel, Panel):

View File

@ -276,23 +276,23 @@ class DATA_PT_active_spline(CurveButtonsPanelActive, Panel):
col.prop(act_spline, "use_smooth")
else:
sub = col.column(align=True)
sub.prop(act_spline, "use_cyclic_u")
sub = col.column(heading="Cyclic", align=True)
sub.prop(act_spline, "use_cyclic_u", text="U")
if is_surf:
sub.prop(act_spline, "use_cyclic_v", text="V")
if act_spline.type == 'NURBS':
sub = col.column(align=True)
sub = col.column(heading="Bezier", align=True)
# sub.active = (not act_spline.use_cyclic_u)
sub.prop(act_spline, "use_bezier_u", text="Bezier U")
sub.prop(act_spline, "use_bezier_u", text="U")
if is_surf:
subsub = sub.column()
subsub.active = (not act_spline.use_cyclic_v)
subsub.prop(act_spline, "use_bezier_v", text="V")
sub = col.column(align=True)
sub.prop(act_spline, "use_endpoint_u", text="Endpoint U")
sub = col.column(heading="Endpoint", align=True)
sub.prop(act_spline, "use_endpoint_u", text="U")
if is_surf:
subsub = sub.column()

View File

@ -53,9 +53,11 @@ class DATA_PT_empty(DataButtonsPanel, Panel):
depth_row.enabled = not ob.show_in_front
depth_row.prop(ob, "empty_image_depth", text="Depth", expand=True)
col.row().prop(ob, "empty_image_side", text="Side", expand=True)
col.prop(ob, "show_empty_image_orthographic", text="Display Orthographic")
col.prop(ob, "show_empty_image_perspective", text="Display Perspective")
col.prop(ob, "show_empty_image_only_axis_aligned")
col = layout.column(heading="Show in", align=True)
col.prop(ob, "show_empty_image_orthographic", text="Orthographic")
col.prop(ob, "show_empty_image_perspective", text="Perspective")
col.prop(ob, "show_empty_image_only_axis_aligned", text="Only Axis Aligned")
class DATA_PT_empty_alpha(DataButtonsPanel, Panel):

View File

@ -189,28 +189,21 @@ class DATA_PT_normals(MeshButtonsPanel, Panel):
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw(self, context):
pass
class DATA_PT_normals_auto_smooth(MeshButtonsPanel, Panel):
bl_label = "Auto Smooth"
bl_parent_id = "DATA_PT_normals"
COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
def draw_header(self, context):
mesh = context.mesh
self.layout.prop(mesh, "use_auto_smooth", text="")
def draw(self, context):
layout = self.layout
layout.use_property_split = True
mesh = context.mesh
layout.active = mesh.use_auto_smooth and not mesh.has_custom_normals
layout.prop(mesh, "auto_smooth_angle", text="Angle")
col = layout.column(align=False, heading="Auto Smooth")
col.use_property_decorate = False
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(mesh, "use_auto_smooth", text="")
sub = sub.row(align=True)
sub.active = mesh.use_auto_smooth and not mesh.has_custom_normals
sub.prop(mesh, "auto_smooth_angle", text="")
row.prop_decorator(mesh, "auto_smooth_angle")
class DATA_PT_texture_space(MeshButtonsPanel, Panel):
@ -485,9 +478,11 @@ class DATA_PT_remesh(MeshButtonsPanel, Panel):
col.prop(mesh, "remesh_voxel_adaptivity")
col.prop(mesh, "use_remesh_fix_poles")
col.prop(mesh, "use_remesh_smooth_normals")
col.prop(mesh, "use_remesh_preserve_volume")
col.prop(mesh, "use_remesh_preserve_paint_mask")
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets")
col = layout.column(heading="Preserve")
col.prop(mesh, "use_remesh_preserve_volume", text="Volume")
col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask")
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets")
col.operator("object.voxel_remesh", text="Voxel Remesh")
else:
col.operator("object.quadriflow_remesh", text="QuadriFlow Remesh")
@ -515,12 +510,12 @@ class DATA_PT_customdata(MeshButtonsPanel, Panel):
else:
col.operator("mesh.customdata_custom_splitnormals_add", icon='ADD')
col = layout.column()
col = layout.column(heading="Store")
col.enabled = obj is not None and obj.mode != 'EDIT'
col.prop(me, "use_customdata_vertex_bevel")
col.prop(me, "use_customdata_edge_bevel")
col.prop(me, "use_customdata_edge_crease")
col.prop(me, "use_customdata_vertex_bevel", text="Vertex Bevel Weight")
col.prop(me, "use_customdata_edge_bevel", text="Edge Bevel Weight")
col.prop(me, "use_customdata_edge_crease", text="Edge Crease")
class DATA_PT_custom_props_mesh(MeshButtonsPanel, PropertyPanel, Panel):
@ -544,7 +539,6 @@ classes = (
DATA_PT_vertex_colors,
DATA_PT_face_maps,
DATA_PT_normals,
DATA_PT_normals_auto_smooth,
DATA_PT_texture_space,
DATA_PT_remesh,
DATA_PT_customdata,

View File

@ -212,7 +212,6 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
layout = self.layout
layout.use_property_split = True
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
obj = context.object
obj_type = obj.type
@ -222,35 +221,22 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
is_dupli = (obj.instance_type != 'NONE')
is_gpencil = (obj_type == 'GPENCIL')
col = flow.column()
col = layout.column(heading="Show")
col.prop(obj, "show_name", text="Name")
col = flow.column()
col.prop(obj, "show_axis", text="Axis")
# Makes no sense for cameras, armatures, etc.!
# but these settings do apply to dupli instances
if is_geometry or is_dupli:
col = flow.column()
col.prop(obj, "show_wire", text="Wireframe")
if obj_type == 'MESH' or is_dupli:
col = flow.column()
col.prop(obj, "show_all_edges", text="All Edges")
col = flow.column()
if is_geometry:
col.prop(obj, "show_texture_space", text="Texture Space")
col = flow.column()
col.prop(obj.display, "show_shadows", text="Shadow")
col = flow.column()
col.prop(obj, "show_in_front", text="In Front")
# if obj_type == 'MESH' or is_empty_image:
# col.prop(obj, "show_transparent", text="Transparency")
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
if is_wire:
# wire objects only use the max. display type for duplis
col.active = is_dupli
@ -258,28 +244,17 @@ class OBJECT_PT_display(ObjectButtonsPanel, Panel):
if is_geometry or is_dupli or is_empty_image or is_gpencil:
# Only useful with object having faces/materials...
col = flow.column()
col.prop(obj, "color")
class OBJECT_PT_display_bounds(ObjectButtonsPanel, Panel):
bl_label = "Bounds"
bl_parent_id = "OBJECT_PT_display"
bl_options = {'DEFAULT_CLOSED'}
def draw_header(self, context):
obj = context.object
self.layout.prop(obj, "show_bounds", text="")
def draw(self, context):
layout = self.layout
obj = context.object
layout.use_property_split = True
layout.active = obj.show_bounds or (obj.display_type == 'BOUNDS')
layout.prop(obj, "display_bounds_type", text="Shape")
col = layout.column(align=False, heading="Bounds")
col.use_property_decorate = False
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(obj, "show_bounds", text="")
sub = sub.row(align=True)
sub.active = obj.show_bounds or (obj.display_type == 'BOUNDS')
sub.prop(obj, "display_bounds_type", text="")
row.prop_decorator(obj, "display_bounds_type")
class OBJECT_PT_instancing(ObjectButtonsPanel, Panel):
@ -295,7 +270,6 @@ class OBJECT_PT_instancing(ObjectButtonsPanel, Panel):
row.prop(ob, "instance_type", expand=True)
layout.use_property_split = True
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
if ob.instance_type == 'VERTS':
layout.prop(ob, "use_instance_vertices_rotation", text="Align to Vertex Normal")
@ -305,9 +279,9 @@ class OBJECT_PT_instancing(ObjectButtonsPanel, Panel):
col.prop(ob, "instance_collection", text="Collection")
if ob.instance_type != 'NONE' or ob.particle_systems:
col = flow.column(align=True)
col.prop(ob, "show_instancer_for_viewport")
col.prop(ob, "show_instancer_for_render")
col = layout.column(heading="Show Instancer", align=True)
col.prop(ob, "show_instancer_for_viewport", text="Viewport")
col.prop(ob, "show_instancer_for_render", text="Render")
class OBJECT_PT_instancing_size(ObjectButtonsPanel, Panel):
@ -385,19 +359,16 @@ class OBJECT_PT_visibility(ObjectButtonsPanel, Panel):
layout = self.layout
layout.use_property_split = True
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
layout = self.layout
ob = context.object
col = flow.column()
col.prop(ob, "hide_viewport", text="Show in Viewports", toggle=False, invert_checkbox=True)
col = flow.column()
col.prop(ob, "hide_render", text="Show in Renders", toggle=False, invert_checkbox=True)
col = flow.column()
col.prop(ob, "hide_select", text="Selectable", toggle=False, invert_checkbox=True)
layout.prop(ob, "hide_select", text="Selectable", toggle=False, invert_checkbox=True)
col = layout.column(heading="Show in")
col.prop(ob, "hide_viewport", text="Viewports", toggle=False, invert_checkbox=True)
col.prop(ob, "hide_render", text="Renders", toggle=False, invert_checkbox=True)
if context.object.type == 'GPENCIL':
col = flow.column()
col.prop(ob, "use_grease_pencil_lights", toggle=False)
@ -419,7 +390,6 @@ classes = (
OBJECT_PT_motion_paths,
OBJECT_PT_motion_paths_display,
OBJECT_PT_display,
OBJECT_PT_display_bounds,
OBJECT_PT_visibility,
OBJECT_PT_custom_props,
)

View File

@ -94,14 +94,14 @@ class RENDER_PT_dimensions(RenderOutputButtonsPanel, Panel):
return args
@staticmethod
def draw_framerate(layout, sub, rd):
def draw_framerate(layout, rd):
if RENDER_PT_dimensions._preset_class is None:
RENDER_PT_dimensions._preset_class = bpy.types.RENDER_MT_framerate_presets
args = rd.fps, rd.fps_base, RENDER_PT_dimensions._preset_class.bl_label
fps_label_text, show_framerate = RENDER_PT_dimensions._draw_framerate_label(*args)
sub.menu("RENDER_MT_framerate_presets", text=fps_label_text)
layout.menu("RENDER_MT_framerate_presets", text=fps_label_text)
if show_framerate:
col = layout.column(align=True)
@ -136,10 +136,8 @@ class RENDER_PT_dimensions(RenderOutputButtonsPanel, Panel):
col.prop(scene, "frame_end", text="End")
col.prop(scene, "frame_step", text="Step")
col = layout.split()
col.alignment = 'RIGHT'
col.label(text="Frame Rate")
self.draw_framerate(layout, col, rd)
col = layout.column(heading="Frame Rate")
self.draw_framerate(col, rd)
class RENDER_PT_frame_remapping(RenderOutputButtonsPanel, Panel):
@ -171,10 +169,8 @@ class RENDER_PT_post_processing(RenderOutputButtonsPanel, Panel):
rd = context.scene.render
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column(heading="Pipeline")
col.prop(rd, "use_compositing")
col = flow.column()
col.prop(rd, "use_sequencer")
layout.prop(rd, "dither_intensity", text="Dither", slider=True)
@ -192,43 +188,22 @@ class RENDER_PT_stamp(RenderOutputButtonsPanel, Panel):
rd = context.scene.render
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col.prop(rd, "use_stamp_date", text="Date")
col = flow.column()
col.prop(rd, "use_stamp_time", text="Time")
col = flow.column()
col.prop(rd, "use_stamp_render_time", text="Render Time")
col = flow.column()
col.prop(rd, "use_stamp_frame", text="Frame")
col = flow.column()
col.prop(rd, "use_stamp_frame_range", text="Frame Range")
col = flow.column()
col.prop(rd, "use_stamp_memory", text="Memory")
col = flow.column()
col.prop(rd, "use_stamp_hostname", text="Hostname")
col = flow.column()
col.prop(rd, "use_stamp_camera", text="Camera")
col = flow.column()
col.prop(rd, "use_stamp_lens", text="Lens")
col = flow.column()
col.prop(rd, "use_stamp_scene", text="Scene")
col = flow.column()
col.prop(rd, "use_stamp_marker", text="Marker")
col = flow.column()
col.prop(rd, "use_stamp_filename", text="Filename")
col = flow.column()
col.prop(rd, "use_stamp_sequencer_strip", text="Strip Name")
if rd.use_sequencer:
col = flow.column()
col.prop(rd, "use_stamp_strip_meta", text="Use Strip Metadata")
layout.prop(rd, "metadata_input")
col = layout.column(heading="Include")
col.prop(rd, "use_stamp_date", text="Date")
col.prop(rd, "use_stamp_time", text="Time")
col.prop(rd, "use_stamp_render_time", text="Render Time")
col.prop(rd, "use_stamp_frame", text="Frame")
col.prop(rd, "use_stamp_frame_range", text="Frame Range")
col.prop(rd, "use_stamp_memory", text="Memory")
col.prop(rd, "use_stamp_hostname", text="Hostname")
col.prop(rd, "use_stamp_camera", text="Camera")
col.prop(rd, "use_stamp_lens", text="Lens")
col.prop(rd, "use_stamp_scene", text="Scene")
col.prop(rd, "use_stamp_marker", text="Marker")
col.prop(rd, "use_stamp_filename", text="Filename")
class RENDER_PT_stamp_note(RenderOutputButtonsPanel, Panel):
@ -293,21 +268,17 @@ class RENDER_PT_output(RenderOutputButtonsPanel, Panel):
layout.use_property_split = True
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col.active = not rd.is_movie_format
col.prop(rd, "use_overwrite")
col = flow.column()
col.active = not rd.is_movie_format
col.prop(rd, "use_placeholder")
col = flow.column()
col = layout.column(heading="Saving")
col.prop(rd, "use_file_extension")
col = flow.column()
col.prop(rd, "use_render_cache")
layout.template_image_settings(image_settings, color_management=False)
if not rd.is_movie_format:
col = layout.column(heading="Image Sequence")
col.prop(rd, "use_overwrite")
col.prop(rd, "use_placeholder")
class RENDER_PT_output_views(RenderOutputButtonsPanel, Panel):
bl_label = "Views"

View File

@ -587,10 +587,12 @@ def brush_settings(layout, context, brush, popover=False):
slider=True,
)
layout.prop(brush, "use_plane_trim", text="Plane Trim")
row = layout.row()
row.active = brush.use_plane_trim
row.prop(brush, "plane_trim", slider=True, text="Distance")
row = layout.row(heading="Plane Trim")
row.prop(brush, "use_plane_trim", text="")
sub = row.row()
sub.active = brush.use_plane_trim
sub.prop(brush, "plane_trim", slider=True, text="")
layout.separator()
# height
@ -808,23 +810,27 @@ def brush_settings_advanced(layout, context, brush, popover=False):
use_accumulate = capabilities.has_accumulate
use_frontface = True
col = layout.column(heading="Auto-Masking", align=True)
# topology automasking
layout.prop(brush, "use_automasking_topology")
col.prop(brush, "use_automasking_topology", text="Topology")
# face masks automasking
layout.prop(brush, "use_automasking_face_sets")
# boundary edges/face sets automasking
layout.prop(brush, "use_automasking_boundary_edges")
layout.prop(brush, "use_automasking_boundary_face_sets")
layout.prop(brush, "automasking_boundary_edges_propagation_steps")
col.prop(brush, "use_automasking_face_sets", text="Face Sets")
# boundary edges/face sets automasking
col.prop(brush, "use_automasking_boundary_edges", text="Mesh Boundary")
col.prop(brush, "use_automasking_boundary_face_sets", text="Face Sets")
col.prop(brush, "automasking_boundary_edges_propagation_steps")
layout.separator()
# sculpt plane settings
if capabilities.has_sculpt_plane:
layout.prop(brush, "sculpt_plane")
layout.prop(brush, "use_original_normal")
layout.prop(brush, "use_original_plane")
col = layout.column(heading="Use Original", align=True)
col.prop(brush, "use_original_normal", text="Normal")
col.prop(brush, "use_original_plane", text="Plane")
layout.separator()
# 3D and 2D Texture Paint.

View File

@ -310,8 +310,10 @@ def basic_force_field_settings_ui(self, field):
else:
col.prop(field, "flow")
col.prop(field, "apply_to_location", text="Affect Location")
col.prop(field, "apply_to_rotation", text="Affect Rotation")
sub = col.column(heading="Affect")
sub.prop(field, "apply_to_location", text="Location")
sub.prop(field, "apply_to_rotation", text="Rotation")
col = flow.column()
sub = col.column(align=True)
@ -336,26 +338,29 @@ def basic_force_field_falloff_ui(self, field):
if not field or field.type == 'NONE':
return
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=True)
col = flow.column()
col = layout.column()
col.prop(field, "z_direction")
col.prop(field, "falloff_power", text="Power")
col = flow.column()
col.prop(field, "use_min_distance", text="Use Minimum")
sub = col.column(align=True)
col = layout.column(align=False, heading="Minimum Distance")
col.use_property_decorate = False
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(field, "use_min_distance", text="")
sub = sub.row(align=True)
sub.active = field.use_min_distance
sub.prop(field, "distance_min", text="Min Distance")
sub.prop(field, "distance_min", text="")
row.prop_decorator(field, "distance_min")
col = flow.column()
col.prop(field, "use_max_distance", text="Use Maximum")
sub = col.column(align=True)
col = layout.column(align=False, heading="Maximum Distance")
col.use_property_decorate = False
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(field, "use_max_distance", text="")
sub = sub.row(align=True)
sub.active = field.use_max_distance
sub.prop(field, "distance_max", text="Max Distance")
sub.prop(field, "distance_max", text="")
row.prop_decorator(field, "distance_max")
classes = (
PHYSICS_PT_add,

View File

@ -475,33 +475,21 @@ class RENDER_PT_eevee_film(RenderButtonsPanel, Panel):
scene = context.scene
rd = scene.render
props = scene.eevee
col = layout.column()
col.prop(rd, "filter_size")
col.prop(rd, "film_transparent", text="Transparent")
class RENDER_PT_eevee_film_overscan(RenderButtonsPanel, Panel):
bl_label = "Overscan"
bl_parent_id = "RENDER_PT_eevee_film"
bl_options = {'DEFAULT_CLOSED'}
COMPAT_ENGINES = {'BLENDER_EEVEE'}
def draw_header(self, context):
scene = context.scene
props = scene.eevee
self.layout.prop(props, "use_overscan", text="")
def draw(self, context):
layout = self.layout
layout.use_property_split = True
scene = context.scene
props = scene.eevee
layout.active = props.use_overscan
layout.prop(props, "overscan_size", text="Size")
col = layout.column(align=False, heading="Overscan")
col.use_property_decorate = False
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(props, "use_overscan", text="")
sub = sub.row(align=True)
sub.active = props.use_overscan
sub.prop(props, "overscan_size", text="")
row.prop_decorator(props, "overscan_size")
class RENDER_PT_eevee_hair(RenderButtonsPanel, Panel):
@ -696,7 +684,6 @@ classes = (
RENDER_PT_eevee_indirect_lighting,
RENDER_PT_eevee_indirect_lighting_display,
RENDER_PT_eevee_film,
RENDER_PT_eevee_film_overscan,
RENDER_PT_opengl_sampling,
RENDER_PT_opengl_lighting,
RENDER_PT_opengl_color,

View File

@ -40,17 +40,12 @@ class VIEWLAYER_PT_layer(ViewLayerButtonsPanel, Panel):
layout.use_property_split = True
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
layout.use_property_split = True
scene = context.scene
rd = scene.render
layer = context.view_layer
col = flow.column()
col = layout.column()
col.prop(layer, "use", text="Use for Rendering")
col = flow.column()
col.prop(rd, "use_single_layer", text="Render Single Layer")
@ -77,14 +72,10 @@ class VIEWLAYER_PT_eevee_layer_passes_data(ViewLayerButtonsPanel, Panel):
rd = scene.render
view_layer = context.view_layer
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column()
col.prop(view_layer, "use_pass_combined")
col = flow.column()
col.prop(view_layer, "use_pass_z")
col = flow.column()
col.prop(view_layer, "use_pass_mist")
col = flow.column()
col.prop(view_layer, "use_pass_normal")
@ -104,29 +95,19 @@ class VIEWLAYER_PT_eevee_layer_passes_light(ViewLayerButtonsPanel, Panel):
scene = context.scene
scene_eevee = scene.eevee
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Diffuse")
row = split.row(align=True)
row.prop(view_layer, "use_pass_diffuse_direct", text="Light", toggle=True)
row.prop(view_layer, "use_pass_diffuse_color", text="Color", toggle=True)
col = layout.column(heading="Diffuse", align=True)
col.prop(view_layer, "use_pass_diffuse_direct", text="Light")
col.prop(view_layer, "use_pass_diffuse_color", text="Color")
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Specular")
row = split.row(align=True)
row.prop(view_layer, "use_pass_glossy_direct", text="Light", toggle=True)
row.prop(view_layer, "use_pass_glossy_color", text="Color", toggle=True)
col = layout.column(heading="Specular", align=True)
col.prop(view_layer, "use_pass_glossy_direct", text="Light")
col.prop(view_layer, "use_pass_glossy_color", text="Color")
split = layout.split(factor=0.35)
split.use_property_split = False
split.label(text="Volume")
row = split.row(align=True)
row.prop(view_layer_eevee, "use_pass_volume_transmittance", text="Transmittance", toggle=True)
row.prop(view_layer_eevee, "use_pass_volume_scatter", text="Scatter", toggle=True)
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column(heading="Volume", align=True)
col.prop(view_layer_eevee, "use_pass_volume_transmittance", text="Transmittance")
col.prop(view_layer_eevee, "use_pass_volume_scatter", text="Scatter")
col = layout.column(align=True)
col = layout.column(heading="Other", align=True)
col.prop(view_layer, "use_pass_emit", text="Emission")
col.prop(view_layer, "use_pass_environment")
col.prop(view_layer, "use_pass_shadow")
@ -146,14 +127,12 @@ class VIEWLAYER_PT_eevee_layer_passes_effects(ViewLayerButtonsPanel, Panel):
layout.use_property_split = True
layout.use_property_decorate = False
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
view_layer = context.view_layer
view_layer_eevee = view_layer.eevee
scene = context.scene
scene_eevee = scene.eevee
col = flow.column()
col = layout.column()
col.prop(view_layer_eevee, "use_pass_bloom", text="Bloom")
col.active = scene_eevee.use_bloom

View File

@ -1687,18 +1687,15 @@ class SEQUENCER_PT_adjust_transform(SequencerButtonsPanel, Panel):
layout = self.layout
strip = act_strip(context)
layout.use_property_split = True
layout.use_property_decorate = False
layout.active = not strip.mute
split = layout.split()
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Mirror")
col = split.column()
row = col.row(align=True)
row.prop(strip, "use_flip_x", text="X", toggle=True)
row.prop(strip, "use_flip_y", text="Y", toggle=True)
row = layout.row(heading="Mirror")
sub = row.row(align=True)
sub.prop(strip, "use_flip_x", text="X", toggle=True)
sub.prop(strip, "use_flip_y", text="Y", toggle=True)
class SEQUENCER_PT_adjust_video(SequencerButtonsPanel, Panel):
@ -1802,12 +1799,12 @@ class SEQUENCER_PT_cache_settings(SequencerButtonsPanel, Panel):
ed = context.scene.sequence_editor
col = layout.column()
col = layout.column(heading="Cache", align=True)
col.prop(ed, "use_cache_raw")
col.prop(ed, "use_cache_preprocessed")
col.prop(ed, "use_cache_composite")
col.prop(ed, "use_cache_final")
col.prop(ed, "use_cache_raw", text="Raw")
col.prop(ed, "use_cache_preprocessed", text="Pre-Processed")
col.prop(ed, "use_cache_composite", text="Composite")
col.prop(ed, "use_cache_final", text="Final")
col.separator()
col.prop(ed, "recycle_max_cost")
@ -1871,21 +1868,19 @@ class SEQUENCER_PT_strip_proxy(SequencerButtonsPanel, Panel):
flow = layout.column_flow()
if ed.proxy_storage == 'PER_STRIP':
flow.prop(proxy, "use_proxy_custom_directory")
flow.prop(proxy, "use_proxy_custom_file")
col = layout.column(heading="Custom Proxy")
col.prop(proxy, "use_proxy_custom_directory", text="Directory")
if proxy.use_proxy_custom_directory and not proxy.use_proxy_custom_file:
flow.prop(proxy, "directory")
col.prop(proxy, "directory")
col.prop(proxy, "use_proxy_custom_file", text="File")
if proxy.use_proxy_custom_file:
flow.prop(proxy, "filepath")
col.prop(proxy, "filepath")
box = layout.box()
row = box.row(align=True)
row.prop(strip.proxy, "build_25")
row.prop(strip.proxy, "build_75")
row = box.row(align=True)
row.prop(strip.proxy, "build_50")
row.prop(strip.proxy, "build_100")
row = layout.row(heading="Resolutions", align=True)
row.prop(strip.proxy, "build_25", toggle=True)
row.prop(strip.proxy, "build_75", toggle=True)
row.prop(strip.proxy, "build_50", toggle=True)
row.prop(strip.proxy, "build_100", toggle=True)
layout.use_property_split = True
layout.use_property_decorate = False
@ -1926,10 +1921,10 @@ class SEQUENCER_PT_strip_cache(SequencerButtonsPanel, Panel):
strip = act_strip(context)
layout.active = strip.override_cache_settings
col = layout.column()
col.prop(strip, "use_cache_raw")
col.prop(strip, "use_cache_preprocessed")
col.prop(strip, "use_cache_composite")
col = layout.column(heading="Cache")
col.prop(strip, "use_cache_raw", text="Raw")
col.prop(strip, "use_cache_preprocessed", text="Pre-Processed")
col.prop(strip, "use_cache_composite", text="Composite")
class SEQUENCER_PT_preview(SequencerButtonsPanel_Output, Panel):

View File

@ -129,18 +129,21 @@ class TEXT_PT_properties(Panel):
layout.use_property_decorate = False
st = context.space_data
flow = layout.column_flow()
if not st.text:
flow.active = False
row = flow.row(align=True)
st = context.space_data
row.prop(st, "show_margin", text="Margin")
rowsub = row.row()
rowsub.active = st.show_margin
rowsub.prop(st, "margin_column", text="")
layout.active = False
flow.prop(st, "font_size")
flow.prop(st, "tab_width")
st = context.space_data
col = layout.column(align=False, heading="Margin")
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(st, "show_margin", text="")
sub = sub.row(align=True)
sub.active = st.show_margin
sub.prop(st, "margin_column", text="")
layout.prop(st, "font_size")
layout.prop(st, "tab_width")
text = st.text
if text:

View File

@ -628,9 +628,10 @@ class _defs_edit_mesh:
layout.prop(props, "vertex_only")
layout.prop(props, "clamp_overlap")
layout.prop(props, "loop_slide")
layout.prop(props, "mark_seam")
layout.prop(props, "mark_sharp")
layout.prop(props, "harden_normals")
col = layout.column(heading="Mark")
col.prop(props, "mark_seam", text="Seam")
col.prop(props, "mark_sharp", text="Sharp")
layout.prop(props, "material")

View File

@ -200,19 +200,16 @@ class USERPREF_PT_interface_display(InterfacePanel, CenterAlignMixIn, Panel):
prefs = context.preferences
view = prefs.view
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
flow.prop(view, "ui_scale", text="Resolution Scale")
flow.prop(view, "ui_line_width", text="Line Width")
col.prop(view, "ui_scale", text="Resolution Scale")
col.prop(view, "ui_line_width", text="Line Width")
col.prop(view, "show_splash", text="Splash Screen")
col.prop(view, "show_developer_ui")
layout.separator()
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(view, "show_splash", text="Splash Screen")
flow.prop(view, "show_tooltips")
flow.prop(view, "show_tooltips_python")
flow.prop(view, "show_developer_ui")
col = layout.column(heading="Tooltips")
col.prop(view, "show_tooltips")
col.prop(view, "show_tooltips_python")
class USERPREF_PT_interface_text(InterfacePanel, CenterAlignMixIn, Panel):
@ -248,12 +245,11 @@ class USERPREF_PT_interface_translation(InterfacePanel, CenterAlignMixIn, Panel)
layout.prop(view, "language")
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.active = (bpy.app.translations.locale != 'en_US')
flow.prop(view, "use_translate_tooltips", text="Tooltips")
flow.prop(view, "use_translate_interface", text="Interface")
flow.prop(view, "use_translate_new_dataname", text="New Data")
col = layout.column(heading="Affect")
col.active = (bpy.app.translations.locale != 'en_US')
col.prop(view, "use_translate_tooltips", text="Tooltips")
col.prop(view, "use_translate_interface", text="Interface")
col.prop(view, "use_translate_new_dataname", text="New Data")
class USERPREF_PT_interface_editors(InterfacePanel, CenterAlignMixIn, Panel):
@ -264,14 +260,13 @@ class USERPREF_PT_interface_editors(InterfacePanel, CenterAlignMixIn, Panel):
view = prefs.view
system = prefs.system
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(system, "use_region_overlap")
flow.prop(view, "show_layout_ui", text="Corner Splitting")
flow.prop(view, "show_navigate_ui")
flow.prop(view, "color_picker_type")
flow.row().prop(view, "header_align")
flow.prop(view, "factor_display_type")
col = layout.column()
col.prop(system, "use_region_overlap")
col.prop(view, "show_layout_ui", text="Corner Splitting")
col.prop(view, "show_navigate_ui")
col.prop(view, "color_picker_type")
col.row().prop(view, "header_align")
col.prop(view, "factor_display_type")
class USERPREF_PT_interface_temporary_windows(InterfacePanel, CenterAlignMixIn, Panel):
@ -283,10 +278,9 @@ class USERPREF_PT_interface_temporary_windows(InterfacePanel, CenterAlignMixIn,
prefs = context.preferences
view = prefs.view
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(view, "render_display_type", text="Render in")
flow.prop(view, "filebrowser_display_type", text="File Browser")
col = layout.column()
col.prop(view, "render_display_type", text="Render in")
col.prop(view, "filebrowser_display_type", text="File Browser")
class USERPREF_PT_interface_menus(InterfacePanel, Panel):
@ -376,6 +370,8 @@ class USERPREF_PT_edit_objects_duplicate_data(EditingPanel, CenterAlignMixIn, Pa
prefs = context.preferences
edit = prefs.edit
layout.use_property_split = False
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=True)
col = flow.column()
@ -409,10 +405,9 @@ class USERPREF_PT_edit_cursor(EditingPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "use_mouse_depth_cursor")
flow.prop(edit, "use_cursor_lock_adjust")
col = layout.column()
col.prop(edit, "use_mouse_depth_cursor")
col.prop(edit, "use_cursor_lock_adjust")
class USERPREF_PT_edit_gpencil(EditingPanel, CenterAlignMixIn, Panel):
@ -423,10 +418,9 @@ class USERPREF_PT_edit_gpencil(EditingPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "grease_pencil_manhattan_distance", text="Manhattan Distance")
flow.prop(edit, "grease_pencil_euclidean_distance", text="Euclidean Distance")
col = layout.column(heading="Distance")
col.prop(edit, "grease_pencil_manhattan_distance", text="Manhattan")
col.prop(edit, "grease_pencil_euclidean_distance", text="Euclidean")
class USERPREF_PT_edit_annotations(EditingPanel, CenterAlignMixIn, Panel):
@ -436,10 +430,9 @@ class USERPREF_PT_edit_annotations(EditingPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "grease_pencil_default_color", text="Default Color")
flow.prop(edit, "grease_pencil_eraser_radius", text="Eraser Radius")
col = layout.column()
col.prop(edit, "grease_pencil_default_color", text="Default Color")
col.prop(edit, "grease_pencil_eraser_radius", text="Eraser Radius")
class USERPREF_PT_edit_weight_paint(EditingPanel, CenterAlignMixIn, Panel):
@ -450,6 +443,8 @@ class USERPREF_PT_edit_weight_paint(EditingPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
view = prefs.view
layout.use_property_split = False
layout.prop(view, "use_weight_color_range", text="Use Custom Colors")
col = layout.column()
@ -465,10 +460,9 @@ class USERPREF_PT_edit_misc(EditingPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "sculpt_paint_overlay_color", text="Sculpt Overlay Color")
flow.prop(edit, "node_margin", text="Node Auto-offset Margin")
col = layout.column()
col.prop(edit, "sculpt_paint_overlay_color", text="Sculpt Overlay Color")
col.prop(edit, "node_margin", text="Node Auto-offset Margin")
# -----------------------------------------------------------------------------
@ -488,20 +482,16 @@ class USERPREF_PT_animation_timeline(AnimationPanel, CenterAlignMixIn, Panel):
view = prefs.view
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "use_negative_frames")
col = layout.column()
col.prop(edit, "use_negative_frames")
layout.separator()
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(view, "view2d_grid_spacing_min", text="Minimum Grid Spacing")
flow.prop(view, "timecode_style")
flow.prop(view, "view_frame_type")
col.prop(view, "view2d_grid_spacing_min", text="Minimum Grid Spacing")
col.prop(view, "timecode_style")
col.prop(view, "view_frame_type")
if view.view_frame_type == 'SECONDS':
flow.prop(view, "view_frame_seconds")
col.prop(view, "view_frame_seconds")
elif view.view_frame_type == 'KEYFRAMES':
flow.prop(view, "view_frame_keyframes")
col.prop(view, "view_frame_keyframes")
class USERPREF_PT_animation_keyframes(AnimationPanel, CenterAlignMixIn, Panel):
@ -511,25 +501,14 @@ class USERPREF_PT_animation_keyframes(AnimationPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
col.prop(edit, "use_visual_keying")
col.prop(edit, "use_keyframe_insert_needed", text="Only Insert Needed")
flow.prop(edit, "use_visual_keying")
flow.prop(edit, "use_keyframe_insert_needed", text="Only Insert Needed")
class USERPREF_PT_animation_autokey(AnimationPanel, CenterAlignMixIn, Panel):
bl_label = "Auto-Keyframing"
bl_parent_id = "USERPREF_PT_animation_keyframes"
def draw_centered(self, context, layout):
prefs = context.preferences
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "use_auto_keying_warning", text="Show Warning")
flow.prop(edit, "use_keyframe_insert_available", text="Only Insert Available")
flow.prop(edit, "use_auto_keying", text="Enable in New Scenes")
col = layout.column(heading="Auto-Keyframing")
col.prop(edit, "use_auto_keying_warning", text="Show Warning")
col.prop(edit, "use_keyframe_insert_available", text="Only Insert Available")
col.prop(edit, "use_auto_keying", text="Enable in New Scenes")
class USERPREF_PT_animation_fcurves(AnimationPanel, CenterAlignMixIn, Panel):
@ -604,33 +583,36 @@ class USERPREF_PT_system_memory(SystemPanel, CenterAlignMixIn, Panel):
system = prefs.system
edit = prefs.edit
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(edit, "undo_steps", text="Undo Steps")
flow.prop(edit, "undo_memory_limit", text="Undo Memory Limit")
flow.prop(edit, "use_global_undo")
col = layout.column()
col.prop(edit, "undo_steps", text="Undo Steps")
col.prop(edit, "undo_memory_limit", text="Undo Memory Limit")
col.prop(edit, "use_global_undo")
layout.separator()
flow.prop(system, "texture_time_out", text="Texture Time Out")
flow.prop(system, "texture_collection_rate", text="Garbage Collection Rate")
col = layout.column()
col.prop(system, "memory_cache_limit", text="Sequencer Cache Limit")
col.prop(system, "scrollback", text="Console Scrollback Lines")
layout.separator()
flow.prop(system, "vbo_time_out", text="Vbo Time Out")
flow.prop(system, "vbo_collection_rate", text="Garbage Collection Rate")
col = layout.column()
col.prop(system, "use_sequencer_disk_cache")
col.prop(system, "sequencer_disk_cache_dir")
col.prop(system, "sequencer_disk_cache_size_limit")
col.prop(system, "sequencer_disk_cache_compression")
layout.separator()
flow.prop(system, "scrollback", text="Console Scrollback Lines")
col = layout.column()
col.prop(system, "texture_time_out", text="Texture Time Out")
col.prop(system, "texture_collection_rate", text="Garbage Collection Rate")
layout.separator()
flow.prop(system, "memory_cache_limit", text="Sequencer Cache Limit")
flow.prop(system, "use_sequencer_disk_cache")
flow.prop(system, "sequencer_disk_cache_dir")
flow.prop(system, "sequencer_disk_cache_size_limit")
flow.prop(system, "sequencer_disk_cache_compression")
col = layout.column()
col.prop(system, "vbo_time_out", text="Vbo Time Out")
col.prop(system, "vbo_collection_rate", text="Garbage Collection Rate")
# -----------------------------------------------------------------------------
@ -649,23 +631,19 @@ class USERPREF_PT_viewport_display(ViewportPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
view = prefs.view
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(view, "show_object_info", text="Object Info")
flow.prop(view, "show_view_name", text="View Name")
flow.prop(view, "show_playback_fps", text="Playback FPS")
col = layout.column(heading="Show")
col.prop(view, "show_object_info", text="Object Info")
col.prop(view, "show_view_name", text="View Name")
col.prop(view, "show_playback_fps", text="Playback FPS")
layout.separator()
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column()
col.prop(view, "gizmo_size")
col.prop(view, "lookdev_sphere_size")
flow.separator()
col.separator()
col = flow.column()
col.prop(view, "mini_axis_type", text="3D Viewport Axis")
if view.mini_axis_type == 'MINIMAL':
@ -680,11 +658,12 @@ class USERPREF_PT_viewport_quality(ViewportPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
system = prefs.system
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
col.prop(system, "viewport_aa")
flow.prop(system, "viewport_aa")
flow.prop(system, "use_overlay_smooth_wire")
flow.prop(system, "use_edit_mode_smooth_wire")
col = layout.column(heading="Smooth Wires")
col.prop(system, "use_overlay_smooth_wire", text="Overlay")
col.prop(system, "use_edit_mode_smooth_wire", text="Edit Mode")
class USERPREF_PT_viewport_textures(ViewportPanel, CenterAlignMixIn, Panel):
@ -694,12 +673,11 @@ class USERPREF_PT_viewport_textures(ViewportPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
system = prefs.system
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(system, "gl_texture_limit", text="Limit Size")
flow.prop(system, "anisotropic_filter")
flow.prop(system, "gl_clip_alpha", slider=True)
flow.prop(system, "image_draw_method", text="Image Display Method")
col = layout.column()
col.prop(system, "gl_texture_limit", text="Limit Size")
col.prop(system, "anisotropic_filter")
col.prop(system, "gl_clip_alpha", slider=True)
col.prop(system, "image_draw_method", text="Image Display Method")
class USERPREF_PT_viewport_selection(ViewportPanel, CenterAlignMixIn, Panel):
@ -710,9 +688,7 @@ class USERPREF_PT_viewport_selection(ViewportPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
system = prefs.system
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(system, "use_select_pick_depth")
layout.prop(system, "use_select_pick_depth")
# -----------------------------------------------------------------------------
@ -1320,37 +1296,40 @@ class USERPREF_PT_saveload_blend(SaveLoadPanel, CenterAlignMixIn, Panel):
paths = prefs.filepaths
view = prefs.view
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column(heading="Save")
col.prop(view, "use_save_prompt")
col.prop(paths, "use_save_preview_images")
flow.prop(paths, "use_relative_paths")
flow.prop(paths, "use_file_compression")
flow.prop(paths, "use_load_ui")
flow.prop(paths, "use_save_preview_images")
flow.prop(paths, "use_tabs_as_spaces")
flow.prop(view, "use_save_prompt")
col = layout.column(heading="Default to")
col.prop(paths, "use_relative_paths")
col.prop(paths, "use_file_compression")
col.prop(paths, "use_load_ui")
layout.separator()
col = layout.column(heading="Text Files")
col.prop(paths, "use_tabs_as_spaces")
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(paths, "save_version")
flow.prop(paths, "recent_files")
col = layout.column()
col.prop(paths, "save_version")
col.prop(paths, "recent_files")
class USERPREF_PT_saveload_blend_autosave(SaveLoadPanel, CenterAlignMixIn, Panel):
bl_label = "Auto Save"
bl_parent_id = "USERPREF_PT_saveload_blend"
def draw_header(self, context):
prefs = context.preferences
paths = prefs.filepaths
self.layout.prop(paths, "use_auto_save_temporary_files", text="")
def draw_centered(self, context, layout):
prefs = context.preferences
paths = prefs.filepaths
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(paths, "use_auto_save_temporary_files")
sub = flow.column()
sub.active = paths.use_auto_save_temporary_files
sub.prop(paths, "auto_save_time", text="Timer (mins)")
col = layout.column()
col.active = paths.use_auto_save_temporary_files
col.prop(paths, "auto_save_time", text="Timer (mins)")
class USERPREF_PT_saveload_file_browser(SaveLoadPanel, CenterAlignMixIn, Panel):
@ -1360,12 +1339,13 @@ class USERPREF_PT_saveload_file_browser(SaveLoadPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
paths = prefs.filepaths
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
col.prop(paths, "use_filter_files")
flow.prop(paths, "use_filter_files")
flow.prop(paths, "show_hidden_files_datablocks")
flow.prop(paths, "hide_recent_locations")
flow.prop(paths, "hide_system_bookmarks")
col = layout.column(heading="Hide")
col.prop(paths, "show_hidden_files_datablocks", text="Dot File & Datablocks")
col.prop(paths, "hide_recent_locations", text="Recent Locations")
col.prop(paths, "hide_system_bookmarks", text="System Bookmarks")
# -----------------------------------------------------------------------------
@ -1424,10 +1404,9 @@ class USERPREF_PT_input_tablet(InputPanel, CenterAlignMixIn, Panel):
layout.prop(inputs, "tablet_api")
layout.separator()
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(inputs, "pressure_threshold_max")
flow.prop(inputs, "pressure_softness")
col = layout.column()
col.prop(inputs, "pressure_threshold_max")
col.prop(inputs, "pressure_softness")
class USERPREF_PT_input_ndof(InputPanel, CenterAlignMixIn, Panel):
@ -1474,24 +1453,27 @@ class USERPREF_PT_navigation_orbit(NavigationPanel, CenterAlignMixIn, Panel):
inputs = prefs.inputs
view = prefs.view
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
flow.row().prop(inputs, "view_rotate_method", expand=True)
col.row().prop(inputs, "view_rotate_method", expand=True)
if inputs.view_rotate_method == 'TURNTABLE':
flow.prop(inputs, "view_rotate_sensitivity_turntable")
col.prop(inputs, "view_rotate_sensitivity_turntable")
else:
flow.prop(inputs, "view_rotate_sensitivity_trackball")
col.prop(inputs, "view_rotate_sensitivity_trackball")
col.prop(inputs, "use_rotate_around_active")
col.separator()
flow.prop(inputs, "use_rotate_around_active")
flow.prop(inputs, "use_auto_perspective")
flow.prop(inputs, "use_mouse_depth_navigate")
if sys.platform == "darwin":
flow.prop(inputs, "use_trackpad_natural", text="Natural Trackpad Direction")
col.prop(inputs, "use_trackpad_natural", text="Natural Trackpad Direction")
flow.separator()
col = layout.column(heading="Auto")
col.prop(inputs, "use_auto_perspective", text="Perspective")
col.prop(inputs, "use_mouse_depth_navigate", text="Depth")
flow.prop(view, "smooth_view")
flow.prop(view, "rotation_angle")
col = layout.column()
col.prop(view, "smooth_view")
col.prop(view, "rotation_angle")
class USERPREF_PT_navigation_zoom(NavigationPanel, CenterAlignMixIn, Panel):
@ -1501,16 +1483,20 @@ class USERPREF_PT_navigation_zoom(NavigationPanel, CenterAlignMixIn, Panel):
prefs = context.preferences
inputs = prefs.inputs
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
flow.row().prop(inputs, "view_zoom_method", text="Zoom Method")
col.row().prop(inputs, "view_zoom_method", text="Zoom Method")
if inputs.view_zoom_method in {'DOLLY', 'CONTINUE'}:
flow.row().prop(inputs, "view_zoom_axis")
flow.prop(inputs, "invert_mouse_zoom", text="Invert Mouse Zoom Direction")
col.row().prop(inputs, "view_zoom_axis")
col.prop(inputs, "use_zoom_to_mouse")
col = layout.column(heading="Invert Zoom Direction", align=True)
col.prop(inputs, "invert_mouse_zoom", text="Mouse")
col.prop(inputs, "invert_zoom_wheel", text="Wheel")
else:
col.prop(inputs, "use_zoom_to_mouse")
col.prop(inputs, "invert_zoom_wheel", text="Invert Wheel Zoom Direction")
flow.prop(inputs, "invert_zoom_wheel", text="Invert Wheel Zoom Direction")
# sub.prop(view, "wheel_scroll_lines", text="Scroll Lines")
flow.prop(inputs, "use_zoom_to_mouse")
class USERPREF_PT_navigation_fly_walk(NavigationPanel, CenterAlignMixIn, Panel):
@ -1541,15 +1527,14 @@ class USERPREF_PT_navigation_fly_walk_navigation(NavigationPanel, CenterAlignMix
inputs = prefs.inputs
walk = inputs.walk_navigation
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
col = layout.column()
col.prop(walk, "use_mouse_reverse")
col.prop(walk, "mouse_speed")
col.prop(walk, "teleport_time")
flow.prop(walk, "use_mouse_reverse")
flow.prop(walk, "mouse_speed")
flow.prop(walk, "teleport_time")
sub = flow.column(align=True)
sub.prop(walk, "walk_speed")
sub.prop(walk, "walk_speed_factor")
col = layout.column(align=True)
col.prop(walk, "walk_speed")
col.prop(walk, "walk_speed_factor")
class USERPREF_PT_navigation_fly_walk_gravity(NavigationPanel, CenterAlignMixIn, Panel):
@ -1576,10 +1561,9 @@ class USERPREF_PT_navigation_fly_walk_gravity(NavigationPanel, CenterAlignMixIn,
layout.active = walk.use_gravity
flow = layout.grid_flow(row_major=False, columns=0, even_columns=True, even_rows=False, align=False)
flow.prop(walk, "view_height")
flow.prop(walk, "jump_height")
col = layout.column()
col.prop(walk, "view_height")
col.prop(walk, "jump_height")
# Special case, this is only exposed as a popover.
@ -2124,7 +2108,7 @@ class ExperimentalPanel:
experimental = prefs.experimental
layout = self.layout
layout.use_property_split = True
layout.use_property_split = False
layout.use_property_decorate = False
for prop_keywords, task in items:

View File

@ -5396,8 +5396,8 @@ class VIEW3D_PT_view3d_properties(Panel):
layout.use_property_split = True
layout.use_property_decorate = False # No animation.
flow = layout.grid_flow(row_major=True, columns=0, even_columns=False, even_rows=False, align=True)
col = flow.column()
col = layout.column()
subcol = col.column()
subcol.active = bool(view.region_3d.view_perspective != 'CAMERA' or view.region_quadviews)
@ -5409,14 +5409,16 @@ class VIEW3D_PT_view3d_properties(Panel):
subcol.separator()
col = flow.column()
col = layout.column()
subcol = col.column()
subcol.prop(view, "use_local_camera")
subcol = col.column()
subcol.enabled = view.use_local_camera
subcol.prop(view, "camera", text="Local Camera")
col = layout.column(align=False, heading="Local Camera")
col.use_property_decorate = False
row = col.row(align=True)
sub = row.row(align=True)
sub.prop(view, "use_local_camera", text="")
sub = sub.row(align=True)
sub.enabled = view.use_local_camera
sub.prop(view, "camera", text="")
subcol = col.column(align=True)
subcol.prop(view, "use_render_border")
@ -5439,23 +5441,24 @@ class VIEW3D_PT_view3d_lock(Panel):
view = context.space_data
col = layout.column(align=True)
subcol = col.column()
subcol.active = bool(view.region_3d.view_perspective != 'CAMERA' or view.region_quadviews)
sub = col.column()
sub.active = bool(view.region_3d.view_perspective != 'CAMERA' or view.region_quadviews)
subcol.prop(view, "lock_object")
sub.prop(view, "lock_object")
lock_object = view.lock_object
if lock_object:
if lock_object.type == 'ARMATURE':
subcol.prop_search(
sub.prop_search(
view, "lock_bone", lock_object.data,
"edit_bones" if lock_object.mode == 'EDIT'
else "bones",
text="",
)
else:
subcol.prop(view, "lock_cursor", text="Lock to 3D Cursor")
subcol = sub.column(heading="Lock")
subcol.prop(view, "lock_cursor", text="To 3D Cursor")
col.prop(view, "lock_camera")
col.prop(view, "lock_camera", text="Camera to View")
class VIEW3D_PT_view3d_cursor(Panel):

View File

@ -125,21 +125,15 @@ class View3DPanel:
# Used by vertex & weight paint
def draw_vpaint_symmetry(layout, vpaint):
split = layout.split()
col = layout.column()
col.use_property_split = True
col.use_property_decorate = False
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Mirror")
col = split.column()
row = col.row(align=True)
row = col.row(heading="Mirror", align=True)
row.prop(vpaint, "use_symmetry_x", text="X", toggle=True)
row.prop(vpaint, "use_symmetry_y", text="Y", toggle=True)
row.prop(vpaint, "use_symmetry_z", text="Z", toggle=True)
col = layout.column()
col.use_property_split = True
col.use_property_decorate = False
col.prop(vpaint, "radial_symmetry", text="Radial")
@ -179,10 +173,10 @@ class VIEW3D_PT_tools_object_options_transform(View3DPanel, Panel):
tool_settings = context.tool_settings
layout.label(text="Affect Only")
layout.prop(tool_settings, "use_transform_data_origin", text="Origins")
layout.prop(tool_settings, "use_transform_pivot_point_align", text="Locations")
layout.prop(tool_settings, "use_transform_skip_children", text="Parents")
col = layout.column(heading="Affect Only", align=True)
col.prop(tool_settings, "use_transform_data_origin", text="Origins")
col.prop(tool_settings, "use_transform_pivot_point_align", text="Locations")
col.prop(tool_settings, "use_transform_skip_children", text="Parents")
# ********** default tools for editmode_mesh ****************
@ -209,16 +203,11 @@ class VIEW3D_PT_tools_meshedit_options(View3DPanel, Panel):
split = layout.split()
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Mirror")
col = split.column()
row = col.row(align=True)
row.prop(mesh, "use_mirror_x", text="X", toggle=True)
row.prop(mesh, "use_mirror_y", text="Y", toggle=True)
row.prop(mesh, "use_mirror_z", text="Z", toggle=True)
row = layout.row(heading="Mirror")
sub = row.row(align=True)
sub.prop(mesh, "use_mirror_x", text="X", toggle=True)
sub.prop(mesh, "use_mirror_y", text="Y", toggle=True)
sub.prop(mesh, "use_mirror_z", text="Z", toggle=True)
row = layout.row(align=True)
row.active = ob.data.use_mirror_x or ob.data.use_mirror_y or ob.data.use_mirror_z
@ -872,10 +861,13 @@ class VIEW3D_PT_sculpt_voxel_remesh(Panel, View3DPaintPanel):
col.prop(mesh, "remesh_voxel_adaptivity")
col.prop(mesh, "use_remesh_fix_poles")
col.prop(mesh, "use_remesh_smooth_normals")
col.prop(mesh, "use_remesh_preserve_volume")
col.prop(mesh, "use_remesh_preserve_paint_mask")
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets")
col.operator("object.voxel_remesh", text="Remesh")
col = layout.column(heading="Preserve", align=True)
col.prop(mesh, "use_remesh_preserve_volume", text="Volume")
col.prop(mesh, "use_remesh_preserve_paint_mask", text="Paint Mask")
col.prop(mesh, "use_remesh_preserve_sculpt_face_sets", text="Face Sets")
layout.operator("object.voxel_remesh", text="Remesh")
# TODO, move to space_view3d.py
@ -896,23 +888,19 @@ class VIEW3D_PT_sculpt_options(Panel, View3DPaintPanel):
tool_settings = context.tool_settings
sculpt = tool_settings.sculpt
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column(heading="Display", align=True)
col.prop(sculpt, "use_threaded", text="Threaded Sculpt")
col = flow.column()
col.prop(sculpt, "show_low_resolution")
col = flow.column()
col.prop(sculpt, "use_sculpt_delay_updates")
col = flow.column()
col.prop(sculpt, "use_deform_only")
col = flow.column()
col.separator()
col.prop(sculpt, "use_automasking_topology")
col.prop(sculpt, "use_automasking_face_sets")
col.prop(sculpt, "use_automasking_boundary_edges")
col.prop(sculpt, "use_automasking_boundary_face_sets")
col = layout.column(heading="Auto-Masking", align=True)
col.prop(sculpt, "use_automasking_topology", text="Topology")
col.prop(sculpt, "use_automasking_face_sets", text="Face Sets")
col.prop(sculpt, "use_automasking_boundary_edges", text="Boundary Edges")
col.prop(sculpt, "use_automasking_boundary_face_sets", text="Boundary Face Sets")
class VIEW3D_PT_sculpt_options_gravity(Panel, View3DPaintPanel):
@ -955,61 +943,34 @@ class VIEW3D_PT_sculpt_symmetry(Panel, View3DPaintPanel):
def draw(self, context):
layout = self.layout
layout.use_property_split = True
layout.use_property_decorate = False
sculpt = context.tool_settings.sculpt
split = layout.split()
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Mirror")
col = split.column()
row = col.row(align=True)
row = layout.row(align=True, heading="Mirror")
row.prop(sculpt, "use_symmetry_x", text="X", toggle=True)
row.prop(sculpt, "use_symmetry_y", text="Y", toggle=True)
row.prop(sculpt, "use_symmetry_z", text="Z", toggle=True)
split = layout.split()
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Lock")
col = split.column()
row = col.row(align=True)
row = layout.row(align=True, heading="Lock")
row.prop(sculpt, "lock_x", text="X", toggle=True)
row.prop(sculpt, "lock_y", text="Y", toggle=True)
row.prop(sculpt, "lock_z", text="Z", toggle=True)
split = layout.split()
col = split.column()
col.alignment = 'RIGHT'
col.label(text="Tiling")
col = split.column()
row = col.row(align=True)
row = layout.row(align=True, heading="Tiling")
row.prop(sculpt, "tile_x", text="X", toggle=True)
row.prop(sculpt, "tile_y", text="Y", toggle=True)
row.prop(sculpt, "tile_z", text="Z", toggle=True)
layout.use_property_split = True
layout.use_property_decorate = False
layout.prop(sculpt, "use_symmetry_feather", text="Feather")
layout.column().prop(sculpt, "radial_symmetry", text="Radial")
layout.column().prop(sculpt, "tile_offset", text="Tile Offset")
layout.prop(sculpt, "radial_symmetry", text="Radial")
layout.prop(sculpt, "tile_offset", text="Tile Offset")
layout.separator()
col = layout.column()
col.prop(sculpt, "symmetrize_direction")
col.operator("sculpt.symmetrize")
layout.prop(sculpt, "symmetrize_direction")
layout.operator("sculpt.symmetrize")
class VIEW3D_PT_sculpt_symmetry_for_topbar(Panel):
@ -1212,12 +1173,8 @@ class VIEW3D_PT_tools_imagepaint_options(View3DPaintPanel, Panel):
layout.prop(ipaint, "seam_bleed")
layout.prop(ipaint, "dither", slider=True)
flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False)
col = flow.column()
col = layout.column()
col.prop(ipaint, "use_occlude")
col = flow.column()
col.prop(ipaint, "use_backface_culling", text="Backface Culling")

View File

@ -75,7 +75,7 @@
} \
(void)0
#define UI_ITEM_PROP_SEP_DIVIDE 0.5f
#define UI_ITEM_PROP_SEP_DIVIDE 0.4f
/* uiLayoutRoot */

View File

@ -5699,6 +5699,16 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL},
};
static const EnumPropertyItem meta_input_items[] = {
{0, "SCENE", 0, "Scene", "Use metadata from the current scene"},
{R_STAMP_STRIPMETA,
"STRIPS",
0,
"Sequencer Strips",
"Use metadata from the strips in the sequencer"},
{0, NULL, 0, NULL, NULL},
};
rna_def_scene_ffmpeg_settings(brna);
srna = RNA_def_struct(brna, "RenderSettings", NULL);
@ -6216,10 +6226,10 @@ static void rna_def_scene_render_data(BlenderRNA *brna)
prop, "Stamp Labels", "Display stamp labels (\"Camera\" in front of camera name, etc.)");
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
prop = RNA_def_property(srna, "use_stamp_strip_meta", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "stamp", R_STAMP_STRIPMETA);
RNA_def_property_ui_text(
prop, "Strip Metadata", "Use metadata from the strips in the sequencer");
prop = RNA_def_property(srna, "metadata_input", PROP_ENUM, PROP_NONE); /* as an enum */
RNA_def_property_enum_bitflag_sdna(prop, NULL, "stamp");
RNA_def_property_enum_items(prop, meta_input_items);
RNA_def_property_ui_text(prop, "Metadata Input", "Where to take the metadata from");
RNA_def_property_update(prop, NC_SCENE | ND_RENDER_OPTIONS, NULL);
prop = RNA_def_property(srna, "use_stamp_memory", PROP_BOOLEAN, PROP_NONE);