UI: Cleanup VSE Properties Shelf
The goal is to reduce wasted space and improve clarity in the 'N' panel of the VSE through layout changes. The changes are intentional conservative to avoid making people re-learn anything. Author: @mpan3 Differential Revision: https://developer.blender.org/D2439
This commit is contained in:
@@ -36,26 +36,35 @@ def act_strip(context):
|
|||||||
|
|
||||||
|
|
||||||
def draw_color_balance(layout, color_balance):
|
def draw_color_balance(layout, color_balance):
|
||||||
col = layout.column()
|
box = layout.box()
|
||||||
|
split = box.split(percentage=0.35)
|
||||||
|
col = split.column(align=True)
|
||||||
col.label(text="Lift:")
|
col.label(text="Lift:")
|
||||||
col.template_color_picker(color_balance, "lift", value_slider=True, cubic=True)
|
col.separator()
|
||||||
row = col.row()
|
col.separator()
|
||||||
row.prop(color_balance, "lift", text="")
|
col.prop(color_balance, "lift")
|
||||||
row.prop(color_balance, "invert_lift", text="Inverse")
|
col.prop(color_balance, "invert_lift", text="Invert", icon="ARROW_LEFTRIGHT")
|
||||||
|
split.template_color_picker(color_balance, "lift", value_slider=True, cubic=True)
|
||||||
|
|
||||||
col = layout.column()
|
box = layout.box()
|
||||||
|
split = box.split(percentage=0.35)
|
||||||
|
col = split.column(align=True)
|
||||||
col.label(text="Gamma:")
|
col.label(text="Gamma:")
|
||||||
col.template_color_picker(color_balance, "gamma", value_slider=True, lock_luminosity=True, cubic=True)
|
col.separator()
|
||||||
row = col.row()
|
col.separator()
|
||||||
row.prop(color_balance, "gamma", text="")
|
col.prop(color_balance, "gamma")
|
||||||
row.prop(color_balance, "invert_gamma", text="Inverse")
|
col.prop(color_balance, "invert_gamma", text="Invert", icon="ARROW_LEFTRIGHT")
|
||||||
|
split.template_color_picker(color_balance, "gamma", value_slider=True, lock_luminosity=True, cubic=True)
|
||||||
|
|
||||||
col = layout.column()
|
box = layout.box()
|
||||||
|
split = box.split(percentage=0.35)
|
||||||
|
col = split.column(align=True)
|
||||||
col.label(text="Gain:")
|
col.label(text="Gain:")
|
||||||
col.template_color_picker(color_balance, "gain", value_slider=True, lock_luminosity=True, cubic=True)
|
col.separator()
|
||||||
row = col.row()
|
col.separator()
|
||||||
row.prop(color_balance, "gain", text="")
|
col.prop(color_balance, "gain", text="Gain")
|
||||||
row.prop(color_balance, "invert_gain", text="Inverse")
|
col.prop(color_balance, "invert_gain", text="Invert", icon="ARROW_LEFTRIGHT")
|
||||||
|
split.template_color_picker(color_balance, "gain", value_slider=True, lock_luminosity=True, cubic=True)
|
||||||
|
|
||||||
|
|
||||||
class SEQUENCER_HT_header(Header):
|
class SEQUENCER_HT_header(Header):
|
||||||
@@ -500,16 +509,16 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
|
|||||||
frame_current = scene.frame_current
|
frame_current = scene.frame_current
|
||||||
strip = act_strip(context)
|
strip = act_strip(context)
|
||||||
|
|
||||||
split = layout.split(percentage=0.3)
|
split = layout.split(percentage=0.25, align=True)
|
||||||
split.label(text="Name:")
|
split.label(text="Name:")
|
||||||
split.prop(strip, "name", text="")
|
split.prop(strip, "name", text="")
|
||||||
|
|
||||||
split = layout.split(percentage=0.3)
|
split = layout.split(percentage=0.25)
|
||||||
split.label(text="Type:")
|
split.label(text="Type:")
|
||||||
split.prop(strip, "type", text="")
|
split.prop(strip, "type", text="")
|
||||||
|
|
||||||
if strip.type != 'SOUND':
|
if strip.type != 'SOUND':
|
||||||
split = layout.split(percentage=0.3)
|
split = layout.split(percentage=0.25)
|
||||||
split.label(text="Blend:")
|
split.label(text="Blend:")
|
||||||
split.prop(strip, "blend_type", text="")
|
split.prop(strip, "blend_type", text="")
|
||||||
|
|
||||||
@@ -518,16 +527,20 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
|
|||||||
sub.active = (not strip.mute)
|
sub.active = (not strip.mute)
|
||||||
sub.prop(strip, "blend_alpha", text="Opacity", slider=True)
|
sub.prop(strip, "blend_alpha", text="Opacity", slider=True)
|
||||||
row.prop(strip, "mute", toggle=True, icon_only=True)
|
row.prop(strip, "mute", toggle=True, icon_only=True)
|
||||||
row.prop(strip, "lock", toggle=True, icon_only=True)
|
|
||||||
else:
|
else:
|
||||||
row = layout.row(align=True)
|
row = layout.row()
|
||||||
row.prop(strip, "mute", toggle=True, icon_only=True)
|
row.prop(strip, "mute", toggle=True, icon_only=True, text='Mute', icon='MUTE_IPO_OFF')
|
||||||
row.prop(strip, "lock", toggle=True, icon_only=True)
|
|
||||||
|
|
||||||
col = layout.column()
|
col = layout.column()
|
||||||
sub = col.column()
|
col.enabled = not strip.lock
|
||||||
sub.enabled = not strip.lock
|
sub = col.row(align=True)
|
||||||
sub.prop(strip, "channel")
|
|
||||||
|
sub = col.column(align=True)
|
||||||
|
row = sub.row(align=True)
|
||||||
|
row.prop(strip, "channel")
|
||||||
|
row.prop(strip, "lock", toggle=True, icon_only=True)
|
||||||
|
|
||||||
sub.prop(strip, "frame_start")
|
sub.prop(strip, "frame_start")
|
||||||
sub.prop(strip, "frame_final_duration")
|
sub.prop(strip, "frame_final_duration")
|
||||||
|
|
||||||
@@ -552,8 +565,6 @@ class SEQUENCER_PT_edit(SequencerButtonsPanel, Panel):
|
|||||||
|
|
||||||
if elem and elem.orig_width > 0 and elem.orig_height > 0:
|
if elem and elem.orig_width > 0 and elem.orig_height > 0:
|
||||||
col.label(text=iface_("Original Dimension: %dx%d") % (elem.orig_width, elem.orig_height), translate=False)
|
col.label(text=iface_("Original Dimension: %dx%d") % (elem.orig_width, elem.orig_height), translate=False)
|
||||||
else:
|
|
||||||
col.label(text="Original Dimension: None")
|
|
||||||
|
|
||||||
|
|
||||||
class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel):
|
||||||
@@ -758,45 +769,53 @@ class SEQUENCER_PT_input(SequencerButtonsPanel, Panel):
|
|||||||
split.label(text="File:")
|
split.label(text="File:")
|
||||||
split.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
|
split.prop(elem, "filename", text="") # strip.elements[0] could be a fallback
|
||||||
|
|
||||||
layout.prop(strip.colorspace_settings, "name")
|
split = layout.split(percentage=0.4)
|
||||||
layout.prop(strip, "alpha_mode")
|
split.label(text="Color Space:")
|
||||||
|
split.prop(strip.colorspace_settings, "name", text="")
|
||||||
|
|
||||||
layout.operator("sequencer.change_path").filter_image = True
|
split = layout.split(percentage=0.4)
|
||||||
|
split.label(text="Alpha:")
|
||||||
|
split.prop(strip, "alpha_mode", text="")
|
||||||
|
|
||||||
|
layout.operator("sequencer.change_path", icon="FILESEL").filter_image = True
|
||||||
|
|
||||||
elif seq_type == 'MOVIE':
|
elif seq_type == 'MOVIE':
|
||||||
split = layout.split(percentage=0.2)
|
split = layout.split(percentage=0.2)
|
||||||
split.label(text="Path:")
|
split.label(text="Path:")
|
||||||
split.prop(strip, "filepath", text="")
|
split.prop(strip, "filepath", text="")
|
||||||
|
|
||||||
layout.prop(strip.colorspace_settings, "name")
|
split = layout.split(percentage=0.4)
|
||||||
|
split.label(text="Color Space:")
|
||||||
|
split.prop(strip.colorspace_settings, "name", text="")
|
||||||
|
|
||||||
layout.prop(strip, "mpeg_preseek")
|
layout.prop(strip, "mpeg_preseek")
|
||||||
layout.prop(strip, "stream_index")
|
layout.prop(strip, "stream_index")
|
||||||
|
|
||||||
layout.prop(strip, "use_translation", text="Image Offset")
|
layout.prop(strip, "use_translation", text="Image Offset")
|
||||||
if strip.use_translation:
|
if strip.use_translation:
|
||||||
col = layout.column(align=True)
|
row = layout.row(align=True)
|
||||||
col.prop(strip.transform, "offset_x", text="X")
|
row.prop(strip.transform, "offset_x", text="X")
|
||||||
col.prop(strip.transform, "offset_y", text="Y")
|
row.prop(strip.transform, "offset_y", text="Y")
|
||||||
|
|
||||||
layout.prop(strip, "use_crop", text="Image Crop")
|
layout.prop(strip, "use_crop", text="Image Crop")
|
||||||
if strip.use_crop:
|
if strip.use_crop:
|
||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.prop(strip.crop, "max_y")
|
col.prop(strip.crop, "max_y")
|
||||||
col.prop(strip.crop, "min_x")
|
row = col.row(align=True)
|
||||||
|
row.prop(strip.crop, "min_x")
|
||||||
|
row.prop(strip.crop, "max_x")
|
||||||
col.prop(strip.crop, "min_y")
|
col.prop(strip.crop, "min_y")
|
||||||
col.prop(strip.crop, "max_x")
|
|
||||||
|
|
||||||
if not isinstance(strip, bpy.types.EffectSequence):
|
if not isinstance(strip, bpy.types.EffectSequence):
|
||||||
col = layout.column(align=True)
|
layout.label(text="Trim Duration (hard):")
|
||||||
col.label(text="Trim Duration (hard):")
|
row = layout.row(align=True)
|
||||||
col.prop(strip, "animation_offset_start", text="Start")
|
row.prop(strip, "animation_offset_start", text="Start")
|
||||||
col.prop(strip, "animation_offset_end", text="End")
|
row.prop(strip, "animation_offset_end", text="End")
|
||||||
|
|
||||||
col = layout.column(align=True)
|
layout.label(text="Trim Duration (soft):")
|
||||||
col.label(text="Trim Duration (soft):")
|
row = layout.row(align=True)
|
||||||
col.prop(strip, "frame_offset_start", text="Start")
|
row.prop(strip, "frame_offset_start", text="Start")
|
||||||
col.prop(strip, "frame_offset_end", text="End")
|
row.prop(strip, "frame_offset_end", text="End")
|
||||||
|
|
||||||
if scene.render.use_multiview and seq_type in {'IMAGE', 'MOVIE'}:
|
if scene.render.use_multiview and seq_type in {'IMAGE', 'MOVIE'}:
|
||||||
layout.prop(strip, "use_multiview")
|
layout.prop(strip, "use_multiview")
|
||||||
@@ -851,19 +870,22 @@ class SEQUENCER_PT_sound(SequencerButtonsPanel, Panel):
|
|||||||
if st.waveform_draw_type == 'DEFAULT_WAVEFORMS':
|
if st.waveform_draw_type == 'DEFAULT_WAVEFORMS':
|
||||||
layout.prop(strip, "show_waveform")
|
layout.prop(strip, "show_waveform")
|
||||||
|
|
||||||
layout.prop(strip, "volume")
|
col = layout.column(align=True)
|
||||||
layout.prop(strip, "pitch")
|
col.prop(strip, "volume")
|
||||||
layout.prop(strip, "pan")
|
col.prop(strip, "pitch")
|
||||||
|
col.prop(strip, "pan")
|
||||||
|
|
||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.label(text="Trim Duration (hard):")
|
col.label(text="Trim Duration (hard):")
|
||||||
col.prop(strip, "animation_offset_start", text="Start")
|
row = layout.row(align=True)
|
||||||
col.prop(strip, "animation_offset_end", text="End")
|
row.prop(strip, "animation_offset_start", text="Start")
|
||||||
|
row.prop(strip, "animation_offset_end", text="End")
|
||||||
|
|
||||||
col = layout.column(align=True)
|
col = layout.column(align=True)
|
||||||
col.label(text="Trim Duration (soft):")
|
col.label(text="Trim Duration (soft):")
|
||||||
col.prop(strip, "frame_offset_start", text="Start")
|
row = layout.row(align=True)
|
||||||
col.prop(strip, "frame_offset_end", text="End")
|
row.prop(strip, "frame_offset_start", text="Start")
|
||||||
|
row.prop(strip, "frame_offset_end", text="End")
|
||||||
|
|
||||||
|
|
||||||
class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
|
class SEQUENCER_PT_scene(SequencerButtonsPanel, Panel):
|
||||||
@@ -980,22 +1002,20 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel, Panel):
|
|||||||
col.label(text="Distortion:")
|
col.label(text="Distortion:")
|
||||||
col.prop(strip, "undistort")
|
col.prop(strip, "undistort")
|
||||||
|
|
||||||
split = layout.split(percentage=0.65)
|
split = layout.split(percentage=0.6)
|
||||||
|
|
||||||
col = split.column()
|
col = split.column()
|
||||||
col.prop(strip, "use_reverse_frames", text="Backwards")
|
col.prop(strip, "use_reverse_frames", text="Reverse")
|
||||||
col.prop(strip, "use_deinterlace")
|
col.prop(strip, "use_deinterlace")
|
||||||
|
|
||||||
col = split.column()
|
col = row.column()
|
||||||
col.label(text="Flip:")
|
col.prop(strip, "use_flip_x", text="X Flip")
|
||||||
col.prop(strip, "use_flip_x", text="X")
|
col.prop(strip, "use_flip_y", text="Y Flip")
|
||||||
col.prop(strip, "use_flip_y", text="Y")
|
|
||||||
|
|
||||||
col = layout.column()
|
layout.label("Color:")
|
||||||
col.label(text="Colors:")
|
col = layout.column(align=True)
|
||||||
col.prop(strip, "color_saturation", text="Saturation")
|
col.prop(strip, "color_saturation", text="Saturation")
|
||||||
col.prop(strip, "color_multiply", text="Multiply")
|
col.prop(strip, "color_multiply", text="Multiply")
|
||||||
col.prop(strip, "use_float")
|
layout.prop(strip, "use_float", text="Convert to Float")
|
||||||
|
|
||||||
|
|
||||||
class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel):
|
class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel):
|
||||||
@@ -1029,9 +1049,9 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel):
|
|||||||
proxy = strip.proxy
|
proxy = strip.proxy
|
||||||
|
|
||||||
flow = layout.column_flow()
|
flow = layout.column_flow()
|
||||||
flow.prop(sequencer, "proxy_storage")
|
flow.prop(sequencer, "proxy_storage", text='Storage')
|
||||||
if sequencer.proxy_storage == 'PROJECT':
|
if sequencer.proxy_storage == 'PROJECT':
|
||||||
flow.prop(sequencer, "proxy_dir")
|
flow.prop(sequencer, "proxy_dir", text='Directory')
|
||||||
else:
|
else:
|
||||||
flow.prop(proxy, "use_proxy_custom_directory")
|
flow.prop(proxy, "use_proxy_custom_directory")
|
||||||
flow.prop(proxy, "use_proxy_custom_file")
|
flow.prop(proxy, "use_proxy_custom_file")
|
||||||
@@ -1050,8 +1070,7 @@ class SEQUENCER_PT_proxy(SequencerButtonsPanel, Panel):
|
|||||||
layout.prop(proxy, "use_overwrite")
|
layout.prop(proxy, "use_overwrite")
|
||||||
|
|
||||||
col = layout.column()
|
col = layout.column()
|
||||||
col.label(text="Build JPEG quality")
|
col.prop(proxy, "quality", text="Build JPEG quality")
|
||||||
col.prop(proxy, "quality")
|
|
||||||
|
|
||||||
if strip.type == 'MOVIE':
|
if strip.type == 'MOVIE':
|
||||||
col = layout.column()
|
col = layout.column()
|
||||||
|
|||||||
Reference in New Issue
Block a user