diff options
Diffstat (limited to 'release/scripts/startup/bl_ui/space_sequencer.py')
-rw-r--r-- | release/scripts/startup/bl_ui/space_sequencer.py | 592 |
1 files changed, 420 insertions, 172 deletions
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py index 7b102604587..6035170f9df 100644 --- a/release/scripts/startup/bl_ui/space_sequencer.py +++ b/release/scripts/startup/bl_ui/space_sequencer.py @@ -37,6 +37,14 @@ from bl_ui.space_toolsystem_common import ( from rna_prop_ui import PropertyPanel +def _space_view_types(st): + view_type = st.view_type + return ( + view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}, + view_type == 'PREVIEW', + ) + + def selected_sequences_len(context): selected_sequences = getattr(context, "selected_sequences", None) if selected_sequences is None: @@ -46,44 +54,85 @@ def selected_sequences_len(context): def draw_color_balance(layout, color_balance): + layout.prop(color_balance, "correction_method") + layout.use_property_split = False flow = layout.grid_flow(row_major=True, columns=0, even_columns=True, even_rows=False, align=False) - col = flow.column() - - box = col.box() - split = box.split(factor=0.35) - col = split.column(align=True) - col.label(text="Lift:") - col.separator() - col.separator() - col.prop(color_balance, "lift", text="") - col.prop(color_balance, "invert_lift", text="Invert", icon='ARROW_LEFTRIGHT') - split.template_color_picker(color_balance, "lift", value_slider=True, cubic=True) - - col = flow.column() - - box = col.box() - split = box.split(factor=0.35) - col = split.column(align=True) - col.label(text="Gamma:") - col.separator() - col.separator() - col.prop(color_balance, "gamma", text="") - 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 = flow.column() - - box = col.box() - split = box.split(factor=0.35) - col = split.column(align=True) - col.label(text="Gain:") - col.separator() - col.separator() - col.prop(color_balance, "gain", text="") - 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) + + if color_balance.correction_method == 'LIFT_GAMMA_GAIN': + col = flow.column() + + box = col.box() + split = box.split(factor=0.35) + col = split.column(align=True) + col.label(text="Lift:") + col.separator() + col.separator() + col.prop(color_balance, "lift", text="") + col.prop(color_balance, "invert_lift", text="Invert", icon='ARROW_LEFTRIGHT') + split.template_color_picker(color_balance, "lift", value_slider=True, cubic=True) + + col = flow.column() + + box = col.box() + split = box.split(factor=0.35) + col = split.column(align=True) + col.label(text="Gamma:") + col.separator() + col.separator() + col.prop(color_balance, "gamma", text="") + 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 = flow.column() + + box = col.box() + split = box.split(factor=0.35) + col = split.column(align=True) + col.label(text="Gain:") + col.separator() + col.separator() + col.prop(color_balance, "gain", text="") + 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) + + elif color_balance.correction_method == 'OFFSET_POWER_SLOPE': + col = flow.column() + + box = col.box() + split = box.split(factor=0.35) + col = split.column(align=True) + col.label(text="Offset:") + col.separator() + col.separator() + col.prop(color_balance, "offset", text="") + col.prop(color_balance, "invert_offset", text="Invert", icon='ARROW_LEFTRIGHT') + split.template_color_picker(color_balance, "offset", value_slider=True, cubic=True) + + col = flow.column() + + box = col.box() + split = box.split(factor=0.35) + col = split.column(align=True) + col.label(text="Power:") + col.separator() + col.separator() + col.prop(color_balance, "power", text="") + col.prop(color_balance, "invert_power", text="Invert", icon='ARROW_LEFTRIGHT') + split.template_color_picker(color_balance, "power", value_slider=True, cubic=True) + + col = flow.column() + + box = col.box() + split = box.split(factor=0.35) + col = split.column(align=True) + col.label(text="Slope:") + col.separator() + col.separator() + col.prop(color_balance, "slope", text="") + col.prop(color_balance, "invert_slope", text="Invert", icon='ARROW_LEFTRIGHT') + split.template_color_picker(color_balance, "slope", value_slider=True, cubic=True) class SEQUENCER_PT_active_tool(ToolActivePanelHelper, Panel): @@ -128,8 +177,6 @@ class SEQUENCER_HT_header(Header): st = context.space_data - show_region_tool_header = st.show_region_tool_header - layout.template_header() layout.prop(st, "view_type", text="") @@ -148,8 +195,8 @@ class SEQUENCER_HT_header(Header): if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: row = layout.row(align=True) row.prop(sequencer_tool_settings, "overlap_mode", text="") - row = layout.row(align=True) - row.prop(sequencer_tool_settings, "pivot_point", text="", icon_only=True) + + if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: row = layout.row(align=True) row.prop(tool_settings, "use_snap_sequencer", text="") sub = row.row(align=True) @@ -160,11 +207,22 @@ class SEQUENCER_HT_header(Header): layout.prop(st, "display_mode", text="", icon_only=True) layout.prop(st, "preview_channels", text="", icon_only=True) + # Gizmo toggle & popover. + row = layout.row(align=True) + # FIXME: place-holder icon. + row.prop(st, "show_gizmo", text="", toggle=True, icon='GIZMO') + sub = row.row(align=True) + sub.active = st.show_gizmo + sub.popover( + panel="SEQUENCER_PT_gizmo_display", + text="", + ) + row = layout.row(align=True) - row.prop(st, "show_strip_overlay", text="", icon='OVERLAY') + row.prop(st, "show_overlays", text="", icon='OVERLAY') sub = row.row(align=True) sub.popover(panel="SEQUENCER_PT_overlay", text="") - sub.active = st.show_strip_overlay + sub.active = st.show_overlays class SEQUENCER_MT_editor_menus(Menu): @@ -174,15 +232,43 @@ class SEQUENCER_MT_editor_menus(Menu): def draw(self, context): layout = self.layout st = context.space_data + has_sequencer, _has_preview = _space_view_types(st) layout.menu("SEQUENCER_MT_view") + layout.menu("SEQUENCER_MT_select") - if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}: - layout.menu("SEQUENCER_MT_select") + if has_sequencer: if st.show_markers: layout.menu("SEQUENCER_MT_marker") layout.menu("SEQUENCER_MT_add") - layout.menu("SEQUENCER_MT_strip") + + layout.menu("SEQUENCER_MT_strip") + + if st.view_type in {'SEQUENCER', 'PREVIEW'}: + layout.menu("SEQUENCER_MT_image") + + +class SEQUENCER_PT_gizmo_display(Panel): + bl_space_type = 'SEQUENCE_EDITOR' + bl_region_type = 'HEADER' + bl_label = "Gizmos" + bl_ui_units_x = 8 + + def draw(self, context): + layout = self.layout + + scene = context.scene + st = context.space_data + + col = layout.column() + col.label(text="Viewport Gizmos") + col.separator() + + col.active = st.show_gizmo + colsub = col.column() + colsub.prop(st, "show_gizmo_navigate", text="Navigate") + colsub.prop(st, "show_gizmo_tool", text="Active Tools") + # colsub.prop(st, "show_gizmo_context", text="Active Object") # Currently unused. class SEQUENCER_PT_overlay(Panel): @@ -212,9 +298,10 @@ class SEQUENCER_PT_preview_overlay(Panel): overlay_settings = st.preview_overlay layout = self.layout - layout.active = st.show_strip_overlay + layout.active = st.show_overlays layout.prop(overlay_settings, "show_image_outline") - layout.prop(ed, "show_overlay", text="Frame Overlay") + layout.prop(overlay_settings, "show_cursor") + layout.prop(ed, "show_overlay_frame", text="Frame Overlay") layout.prop(overlay_settings, "show_safe_areas", text="Safe Areas") layout.prop(overlay_settings, "show_metadata", text="Metadata") layout.prop(overlay_settings, "show_annotation", text="Annotations") @@ -236,7 +323,7 @@ class SEQUENCER_PT_sequencer_overlay(Panel): overlay_settings = st.timeline_overlay layout = self.layout - layout.active = st.show_strip_overlay + layout.active = st.show_overlays layout.prop(overlay_settings, "show_strip_name", text="Name") layout.prop(overlay_settings, "show_strip_source", text="Source") @@ -342,6 +429,7 @@ class SEQUENCER_MT_view(Menu): # wm_keymap_item_find_props() (see T32595). layout.operator_context = 'INVOKE_REGION_PREVIEW' layout.prop(st, "show_region_ui") + layout.prop(st, "show_region_tool_header") layout.prop(st, "show_region_toolbar") layout.operator_context = 'INVOKE_DEFAULT' @@ -480,8 +568,10 @@ class SEQUENCER_MT_select_linked(Menu): class SEQUENCER_MT_select(Menu): bl_label = "Select" - def draw(self, _context): + def draw(self, context): layout = self.layout + st = context.space_data + has_sequencer, has_preview = _space_view_types(st) layout.operator("sequencer.select_all", text="All").action = 'SELECT' layout.operator("sequencer.select_all", text="None").action = 'DESELECT' @@ -490,17 +580,20 @@ class SEQUENCER_MT_select(Menu): layout.separator() layout.operator("sequencer.select_box", text="Box Select") - props = layout.operator("sequencer.select_box", text="Box Select (Include Handles)") - props.include_handles = True + if has_sequencer: + props = layout.operator("sequencer.select_box", text="Box Select (Include Handles)") + props.include_handles = True layout.separator() - layout.operator_menu_enum("sequencer.select_side_of_frame", "side", text="Side of Frame...") - layout.menu("SEQUENCER_MT_select_handle", text="Handle") - layout.menu("SEQUENCER_MT_select_channel", text="Channel") - layout.menu("SEQUENCER_MT_select_linked", text="Linked") + if has_sequencer: + layout.operator_menu_enum("sequencer.select_side_of_frame", "side", text="Side of Frame...") + layout.menu("SEQUENCER_MT_select_handle", text="Handle") + layout.menu("SEQUENCER_MT_select_channel", text="Channel") + layout.menu("SEQUENCER_MT_select_linked", text="Linked") + + layout.separator() - layout.separator() layout.operator_menu_enum("sequencer.select_grouped", "type", text="Grouped") @@ -708,43 +801,42 @@ class SEQUENCER_MT_add_effect(Menu): col.enabled = selected_sequences_len(context) != 0 -class SEQUENCER_MT_strip_image_transform(Menu): - bl_label = "Image Transform" - - def draw(self, _context): - layout = self.layout - - layout.operator("sequencer.strip_transform_fit", text="Scale To Fit").fit_method = 'FIT' - layout.operator("sequencer.strip_transform_fit", text="Scale to Fill").fit_method = 'FILL' - layout.operator("sequencer.strip_transform_fit", text="Stretch To Fill").fit_method = 'STRETCH' - layout.separator() - - layout.operator("sequencer.strip_transform_clear", text="Clear Position").property = 'POSITION' - layout.operator("sequencer.strip_transform_clear", text="Clear Scale").property = 'SCALE' - layout.operator("sequencer.strip_transform_clear", text="Clear Rotation").property = 'ROTATION' - layout.operator("sequencer.strip_transform_clear", text="Clear All").property = 'ALL' - - class SEQUENCER_MT_strip_transform(Menu): bl_label = "Transform" - def draw(self, _context): + def draw(self, context): layout = self.layout + st = context.space_data + has_sequencer, has_preview = _space_view_types(st) - layout.operator("transform.seq_slide", text="Move") - layout.operator("transform.transform", text="Move/Extend from Current Frame").mode = 'TIME_EXTEND' - layout.operator("sequencer.slip", text="Slip Strip Contents") + if has_preview: + layout.operator_context = 'INVOKE_REGION_PREVIEW' + else: + layout.operator_context = 'INVOKE_REGION_WIN' - layout.separator() - layout.operator("sequencer.snap") - layout.operator("sequencer.offset_clear") + if has_preview: + layout.operator("transform.translate", text="Move") + layout.operator("transform.rotate", text="Rotate") + layout.operator("transform.resize", text="Scale") + else: + layout.operator("transform.seq_slide", text="Move") + layout.operator("transform.transform", text="Move/Extend from Current Frame").mode = 'TIME_EXTEND' + layout.operator("sequencer.slip", text="Slip Strip Contents") - layout.separator() - layout.operator_menu_enum("sequencer.swap", "side") + # TODO (for preview) + if has_sequencer: + layout.separator() + layout.operator("sequencer.snap") + layout.operator("sequencer.offset_clear") - layout.separator() - layout.operator("sequencer.gap_remove").all = False - layout.operator("sequencer.gap_insert") + layout.separator() + + if has_sequencer: + layout.operator_menu_enum("sequencer.swap", "side") + + layout.separator() + layout.operator("sequencer.gap_remove").all = False + layout.operator("sequencer.gap_insert") class SEQUENCER_MT_strip_input(Menu): @@ -814,69 +906,123 @@ class SEQUENCER_MT_strip(Menu): def draw(self, context): layout = self.layout + st = context.space_data + has_sequencer, has_preview = _space_view_types(st) - layout.operator_context = 'INVOKE_REGION_WIN' - - layout.separator() layout.menu("SEQUENCER_MT_strip_transform") - layout.menu("SEQUENCER_MT_strip_image_transform") - layout.separator() - layout.operator("sequencer.split", text="Split").type = 'SOFT' - layout.operator("sequencer.split", text="Hold Split").type = 'HARD' - layout.separator() - layout.operator("sequencer.copy", text="Copy") - layout.operator("sequencer.paste", text="Paste") - layout.operator("sequencer.duplicate_move") + if has_sequencer: + + layout.operator("sequencer.split", text="Split").type = 'SOFT' + layout.operator("sequencer.split", text="Hold Split").type = 'HARD' + layout.separator() + + if has_sequencer: + layout.operator("sequencer.copy", text="Copy") + layout.operator("sequencer.paste", text="Paste") + layout.operator("sequencer.duplicate_move") + layout.operator("sequencer.delete", text="Delete") strip = context.active_sequence_strip - if strip: - strip_type = strip.type + if has_sequencer: + if strip: + strip_type = strip.type - if strip_type != 'SOUND': - layout.separator() - layout.operator_menu_enum("sequencer.strip_modifier_add", "type", text="Add Modifier") - layout.operator("sequencer.strip_modifier_copy", text="Copy Modifiers to Selection") + if strip_type != 'SOUND': + layout.separator() + layout.operator_menu_enum("sequencer.strip_modifier_add", "type", text="Add Modifier") + layout.operator("sequencer.strip_modifier_copy", text="Copy Modifiers to Selection") + + if strip_type in { + 'CROSS', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', + 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', 'WIPE', 'GLOW', + 'TRANSFORM', 'COLOR', 'SPEED', 'MULTICAM', 'ADJUSTMENT', + 'GAUSSIAN_BLUR', + }: + layout.separator() + layout.menu("SEQUENCER_MT_strip_effect") + elif strip_type == 'MOVIE': + layout.separator() + layout.menu("SEQUENCER_MT_strip_movie") + elif strip_type == 'IMAGE': + layout.separator() + layout.operator("sequencer.rendersize") + layout.operator("sequencer.images_separate") + elif strip_type == 'TEXT': + layout.separator() + layout.menu("SEQUENCER_MT_strip_effect") + elif strip_type == 'META': + layout.separator() + layout.operator("sequencer.meta_make") + layout.operator("sequencer.meta_separate") + layout.operator("sequencer.meta_toggle", text="Toggle Meta") + if strip_type != 'META': + layout.separator() + layout.operator("sequencer.meta_make") + layout.operator("sequencer.meta_toggle", text="Toggle Meta") - if strip_type in { - 'CROSS', 'ADD', 'SUBTRACT', 'ALPHA_OVER', 'ALPHA_UNDER', - 'GAMMA_CROSS', 'MULTIPLY', 'OVER_DROP', 'WIPE', 'GLOW', - 'TRANSFORM', 'COLOR', 'SPEED', 'MULTICAM', 'ADJUSTMENT', - 'GAUSSIAN_BLUR', - }: - layout.separator() - layout.menu("SEQUENCER_MT_strip_effect") - elif strip_type == 'MOVIE': - layout.separator() - layout.menu("SEQUENCER_MT_strip_movie") - elif strip_type == 'IMAGE': - layout.separator() - layout.operator("sequencer.rendersize") - layout.operator("sequencer.images_separate") - elif strip_type == 'TEXT': - layout.separator() - layout.menu("SEQUENCER_MT_strip_effect") - elif strip_type == 'META': - layout.separator() - layout.operator("sequencer.meta_make") - layout.operator("sequencer.meta_separate") - layout.operator("sequencer.meta_toggle", text="Toggle Meta") - if strip_type != 'META': - layout.separator() - layout.operator("sequencer.meta_make") - layout.operator("sequencer.meta_toggle", text="Toggle Meta") + if has_sequencer: + layout.separator() + layout.menu("SEQUENCER_MT_color_tag_picker") - layout.separator() - layout.menu("SEQUENCER_MT_color_tag_picker") + layout.separator() + layout.menu("SEQUENCER_MT_strip_lock_mute") - layout.separator() - layout.menu("SEQUENCER_MT_strip_lock_mute") + layout.separator() + layout.menu("SEQUENCER_MT_strip_input") - layout.separator() - layout.menu("SEQUENCER_MT_strip_input") + +class SEQUENCER_MT_image(Menu): + bl_label = "Image" + + def draw(self, context): + layout = self.layout + st = context.space_data + + if st.view_type == {'PREVIEW', 'SEQUENCER_PREVIEW'}: + layout.menu("SEQUENCER_MT_image_transform") + + layout.menu("SEQUENCER_MT_image_clear") + layout.menu("SEQUENCER_MT_image_apply") + + +class SEQUENCER_MT_image_transform(Menu): + bl_label = "Transform" + + def draw(self, _context): + layout = self.layout + + layout.operator_context = 'INVOKE_REGION_PREVIEW' + + layout.operator("transform.translate") + layout.operator("transform.rotate") + layout.operator("transform.resize", text="Scale") + + +class SEQUENCER_MT_image_clear(Menu): + bl_label = "Clear" + + def draw(self, _context): + layout = self.layout + + layout.operator("sequencer.strip_transform_clear", text="Position").property = 'POSITION' + layout.operator("sequencer.strip_transform_clear", text="Scale").property = 'SCALE' + layout.operator("sequencer.strip_transform_clear", text="Rotation").property = 'ROTATION' + layout.operator("sequencer.strip_transform_clear", text="All Transforms").property = 'ALL' + + +class SEQUENCER_MT_image_apply(Menu): + bl_label = "Apply" + + def draw(self, _context): + layout = self.layout + + layout.operator("sequencer.strip_transform_fit", text="Scale To Fit").fit_method = 'FIT' + layout.operator("sequencer.strip_transform_fit", text="Scale to Fill").fit_method = 'FILL' + layout.operator("sequencer.strip_transform_fit", text="Stretch To Fill").fit_method = 'STRETCH' class SEQUENCER_MT_context_menu(Menu): @@ -976,6 +1122,68 @@ class SEQUENCER_MT_context_menu(Menu): layout.menu("SEQUENCER_MT_strip_lock_mute") +class SEQUENCER_MT_preview_context_menu(Menu): + bl_label = "Sequencer Preview Context Menu" + + def draw(self, context): + layout = self.layout + + layout.operator_context = 'INVOKE_REGION_WIN' + + props = layout.operator("wm.call_panel", text="Rename...") + props.name = "TOPBAR_PT_name" + props.keep_open = False + + # TODO: support in preview. + # layout.operator("sequencer.delete", text="Delete") + + strip = context.active_sequence_strip + + if strip: + pass + + +class SEQUENCER_MT_pivot_pie(Menu): + bl_label = "Pivot Point" + + def draw(self, context): + layout = self.layout + pie = layout.menu_pie() + + tool_settings = context.tool_settings + sequencer_tool_settings = context.tool_settings.sequencer_tool_settings + + pie.prop_enum(sequencer_tool_settings, "pivot_point", value='CENTER') + pie.prop_enum(sequencer_tool_settings, "pivot_point", value='CURSOR') + pie.prop_enum(sequencer_tool_settings, "pivot_point", value='INDIVIDUAL_ORIGINS') + pie.prop_enum(sequencer_tool_settings, "pivot_point", value='MEDIAN') + + +class SEQUENCER_MT_view_pie(Menu): + bl_label = "View" + + def draw(self, _context): + layout = self.layout + + pie = layout.menu_pie() + pie.operator("sequencer.view_all") + pie.operator("sequencer.view_selected", text="Frame Selected", icon='ZOOM_SELECTED') + + +class SEQUENCER_MT_preview_view_pie(Menu): + bl_label = "View" + + def draw(self, _context): + layout = self.layout + + pie = layout.menu_pie() + pie.operator_context = 'INVOKE_REGION_PREVIEW' + pie.operator("sequencer.view_all_preview") + pie.operator("sequencer.view_selected", text="Frame Selected", icon='ZOOM_SELECTED') + pie.separator() + pie.operator("sequencer.view_zoom_ratio", text="Zoom 1:1").ratio = 1 + + class SequencerButtonsPanel: bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' @@ -1003,35 +1211,38 @@ class SequencerButtonsPanel_Output: return cls.has_preview(context) -class SEQUENCER_PT_color_tag_picker(Panel): - bl_label = "Color Tag" +class SequencerColorTagPicker: bl_space_type = 'SEQUENCE_EDITOR' bl_region_type = 'UI' - bl_category = "Strip" - bl_options = {'HIDE_HEADER', 'INSTANCED'} + + @staticmethod + def has_sequencer(context): + return (context.space_data.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}) @classmethod def poll(cls, context): - return context.active_sequence_strip is not None + return cls.has_sequencer(context) and context.active_sequence_strip is not None - def draw(self, context): + +class SEQUENCER_PT_color_tag_picker(SequencerColorTagPicker, Panel): + bl_label = "Color Tag" + bl_category = "Strip" + bl_options = {'HIDE_HEADER', 'INSTANCED'} + + def draw(self, _context): layout = self.layout row = layout.row(align=True) - row.operator("sequencer.strip_color_tag_set", icon="X").color = 'NONE' + row.operator("sequencer.strip_color_tag_set", icon='X').color = 'NONE' for i in range(1, 10): icon = 'SEQUENCE_COLOR_%02d' % i row.operator("sequencer.strip_color_tag_set", icon=icon).color = 'COLOR_%02d' % i -class SEQUENCER_MT_color_tag_picker(Menu): +class SEQUENCER_MT_color_tag_picker(SequencerColorTagPicker, Menu): bl_label = "Set Color Tag" - @classmethod - def poll(cls, context): - return context.active_sequence_strip is not None - - def draw(self, context): + def draw(self, _context): layout = self.layout row = layout.row(align=True) @@ -1195,15 +1406,15 @@ class SEQUENCER_PT_effect(SequencerButtonsPanel, Panel): elif strip_type == 'SPEED': col = layout.column(align=True) col.prop(strip, "speed_control", text="Speed Control") - if strip.speed_control == "MULTIPLY": + if strip.speed_control == 'MULTIPLY': col.prop(strip, "speed_factor", text=" ") - elif strip.speed_control == "LENGTH": + elif strip.speed_control == 'LENGTH': col.prop(strip, "speed_length", text=" ") - elif strip.speed_control == "FRAME_NUMBER": + elif strip.speed_control == 'FRAME_NUMBER': col.prop(strip, "speed_frame_number", text=" ") row = layout.row(align=True) - row.enabled = strip.speed_control != "STRETCH" + row.enabled = strip.speed_control != 'STRETCH' row = layout.row(align=True, heading="Interpolation") row.prop(strip, "use_frame_interpolate", text="") @@ -1710,7 +1921,6 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel): def draw(self, context): layout = self.layout - layout.use_property_split = False st = context.space_data overlay_settings = st.timeline_overlay @@ -1720,16 +1930,7 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel): layout.active = not strip.mute if sound is not None: - col = layout.column() - - split = col.split(factor=0.4) - split.label(text="") - split.prop(sound, "use_mono") - if overlay_settings.waveform_display_type == 'DEFAULT_WAVEFORMS': - split = col.split(factor=0.4) - split.label(text="") - split.prop(strip, "show_waveform") - + layout.use_property_split = True col = layout.column() split = col.split(factor=0.4) @@ -1742,15 +1943,37 @@ class SEQUENCER_PT_adjust_sound(SequencerButtonsPanel, Panel): split.label(text="Pitch") split.prop(strip, "pitch", text="") + audio_channels = context.scene.render.ffmpeg.audio_channels + pan_enabled = sound.use_mono and audio_channels != 'MONO' + pan_text = "%.2f°" % (strip.pan * 90) + split = col.split(factor=0.4) split.alignment = 'RIGHT' split.label(text="Pan") - audio_channels = context.scene.render.ffmpeg.audio_channels - pan_text = "" + split.prop(strip, "pan", text="") + split.enabled = pan_enabled + if audio_channels != 'MONO' and audio_channels != 'STEREO': - pan_text = "%.2f°" % (strip.pan * 90) - split.prop(strip, "pan", text=pan_text) - split.enabled = sound.use_mono and audio_channels != 'MONO' + split = col.split(factor=0.4) + split.alignment = 'RIGHT' + split.label(text="Pan Angle") + split.enabled = pan_enabled + subsplit = split.row() + subsplit.alignment = 'CENTER' + subsplit.label(text=pan_text) + subsplit.label(text=" ") # Compensate for no decorate. + subsplit.enabled = pan_enabled + + layout.use_property_split = False + col = layout.column() + + split = col.split(factor=0.4) + split.label(text="") + split.prop(sound, "use_mono") + if overlay_settings.waveform_display_type == 'DEFAULT_WAVEFORMS': + split = col.split(factor=0.4) + split.label(text="") + split.prop(strip, "show_waveform") @@ -2104,6 +2327,22 @@ class SEQUENCER_PT_view(SequencerButtonsPanel_Output, Panel): col.prop(st, "show_separate_color") +class SEQUENCER_PT_view_cursor(SequencerButtonsPanel_Output, Panel): + bl_category = "View" + bl_label = "2D Cursor" + + def draw(self, context): + layout = self.layout + + st = context.space_data + + layout.use_property_split = True + layout.use_property_decorate = False + + col = layout.column() + col.prop(st, "cursor_location", text="Location") + + class SEQUENCER_PT_frame_overlay(SequencerButtonsPanel_Output, Panel): bl_label = "Frame Overlay" bl_category = "View" @@ -2119,7 +2358,7 @@ class SEQUENCER_PT_frame_overlay(SequencerButtonsPanel_Output, Panel): scene = context.scene ed = scene.sequence_editor - self.layout.prop(ed, "show_overlay", text="") + self.layout.prop(ed, "show_overlay_frame", text="") def draw(self, context): layout = self.layout @@ -2135,12 +2374,12 @@ class SEQUENCER_PT_frame_overlay(SequencerButtonsPanel_Output, Panel): scene = context.scene ed = scene.sequence_editor - layout.active = ed.show_overlay + layout.active = ed.show_overlay_frame col = layout.column() col.prop(ed, "overlay_frame", text="Frame Offset") - col.prop(st, "overlay_type") - col.prop(ed, "use_overlay_lock") + col.prop(st, "overlay_frame_type") + col.prop(ed, "use_overlay_frame_lock") class SEQUENCER_PT_view_safe_areas(SequencerButtonsPanel_Output, Panel): @@ -2376,18 +2615,26 @@ classes = ( SEQUENCER_MT_strip_effect, SEQUENCER_MT_strip_movie, SEQUENCER_MT_strip, - SEQUENCER_MT_strip_image_transform, SEQUENCER_MT_strip_transform, SEQUENCER_MT_strip_input, SEQUENCER_MT_strip_lock_mute, + SEQUENCER_MT_image, + SEQUENCER_MT_image_transform, + SEQUENCER_MT_image_clear, + SEQUENCER_MT_image_apply, SEQUENCER_MT_color_tag_picker, SEQUENCER_MT_context_menu, + SEQUENCER_MT_preview_context_menu, + SEQUENCER_MT_pivot_pie, + SEQUENCER_MT_view_pie, + SEQUENCER_MT_preview_view_pie, SEQUENCER_PT_color_tag_picker, SEQUENCER_PT_active_tool, SEQUENCER_PT_strip, + SEQUENCER_PT_gizmo_display, SEQUENCER_PT_overlay, SEQUENCER_PT_preview_overlay, SEQUENCER_PT_sequencer_overlay, @@ -2418,6 +2665,7 @@ classes = ( SEQUENCER_PT_custom_props, SEQUENCER_PT_view, + SEQUENCER_PT_view_cursor, SEQUENCER_PT_frame_overlay, SEQUENCER_PT_view_safe_areas, SEQUENCER_PT_view_safe_areas_center_cut, |