diff --git a/panels/viewer.cpp b/panels/viewer.cpp index 6b014db3b..f827bd1f0 100644 --- a/panels/viewer.cpp +++ b/panels/viewer.cpp @@ -471,6 +471,7 @@ void Viewer::update_parents(bool reload_fx) { update_ui(reload_fx); } else { update_viewer(); + panel_timeline->repaint_timeline(); } } @@ -685,14 +686,17 @@ void Viewer::setup_ui() { void Viewer::set_media(Media* m) { main_sequence = false; - media = m; - clean_created_seq(); + media = m; + + clean_created_seq(); if (media != nullptr) { switch (media->get_type()) { case MEDIA_TYPE_FOOTAGE: { Footage* footage = media->to_footage(); + marker_ref = &footage->markers; + seq = new Sequence(); created_sequence = true; seq->wrapper_sequence = true; @@ -856,10 +860,15 @@ void Viewer::set_sequence(bool main, Sequence *s) { update_end_timecode(); viewer_container->adjust(); + + if (!created_sequence) { + marker_ref = &seq->markers; + } } else { update_playhead_timecode(0); update_end_timecode(); } + update_window_title(); update_header_zoom(); diff --git a/panels/viewer.h b/panels/viewer.h index 002caea1a..41bcdd1b4 100644 --- a/panels/viewer.h +++ b/panels/viewer.h @@ -16,6 +16,8 @@ class LabelSlider; class QPushButton; class QLabel; +#include "project/marker.h" + bool frame_rate_is_droppable(float rate); long timecode_to_frame(const QString& s, int view, double frame_rate); QString frame_to_timecode(long f, int view, double frame_rate); @@ -71,7 +73,8 @@ public: ViewerWidget* viewer_widget; Media* media; - Sequence* seq; + Sequence* seq; + QVector* marker_ref; void resizeEvent(QResizeEvent *event); diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index e37f16374..02e9c0b8a 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -5,6 +5,7 @@ #include "panels/timeline.h" #include "project/sequence.h" #include "project/undo.h" +#include "project/media.h" #include "panels/viewer.h" #include "io/config.h" #include "debug.h" @@ -142,8 +143,8 @@ void TimelineHeader::mousePressEvent(QMouseEvent* event) { if (event->pos().y() > get_marker_offset() && (event->pos().x() < playhead_x-PLAYHEAD_SIZE || event->pos().x() > playhead_x+PLAYHEAD_SIZE)) { - for (int i=0;iseq->markers.size();i++) { - int marker_pos = getHeaderScreenPointFromFrame(viewer->seq->markers.at(i).frame); + for (int i=0;imarker_ref->size();i++) { + int marker_pos = getHeaderScreenPointFromFrame(viewer->marker_ref->at(i).frame); if (event->pos().x() > marker_pos - MARKER_SIZE && event->pos().x() < marker_pos + MARKER_SIZE) { bool found = false; for (int j=0;jseq->markers.at(selected_markers.at(i)).frame; + selected_marker_original_times[i] = viewer->marker_ref->at(selected_markers.at(i)).frame; } drag_start = event->pos().x(); dragging_markers = true; @@ -224,7 +225,7 @@ void TimelineHeader::mouseMoveEvent(QMouseEvent* event) { // move markers for (int i=0;iseq->markers[selected_markers.at(i)].frame = selected_marker_original_times.at(i) + frame_movement; + viewer->marker_ref[0][selected_markers.at(i)].frame = selected_marker_original_times.at(i) + frame_movement; } update_parents(); @@ -263,7 +264,7 @@ void TimelineHeader::mouseReleaseEvent(QMouseEvent*) { bool moved = false; ComboAction* ca = new ComboAction(); for (int i=0;iseq->markers[selected_markers.at(i)]; + Marker* m = &viewer->marker_ref[0][selected_markers.at(i)]; if (selected_marker_original_times.at(i) != m->frame) { ca->append(new MoveMarkerAction(m, selected_marker_original_times.at(i), m->frame)); moved = true; @@ -403,8 +404,8 @@ void TimelineHeader::paintEvent(QPaintEvent*) { } // draw markers - for (int i=0;iseq->markers.size();i++) { - const Marker& m = viewer->seq->markers.at(i); + for (int i=0;imarker_ref->size();i++) { + const Marker& m = viewer->marker_ref->at(i); int marker_x = getHeaderScreenPointFromFrame(m.frame);