diff --git a/mainwindow.cpp b/mainwindow.cpp index 5328600eb..165e69f57 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -743,6 +743,10 @@ void MainWindow::setup_menus() { playback_menu->addSeparator(); playback_menu->addAction(tr("Go to In Point"), this, SLOT(go_to_in()), QKeySequence("Shift+I"))->setProperty("id", "gotoin"); playback_menu->addAction(tr("Go to Out Point"), this, SLOT(go_to_out()), QKeySequence("Shift+O"))->setProperty("id", "gotoout"); + playback_menu->addSeparator(); + playback_menu->addAction(tr("Increase Speed"), this, SLOT(go_to_out()), QKeySequence("L"))->setProperty("id", "incspeed"); + playback_menu->addAction(tr("Pause"), panel_sequence_viewer, SLOT(pause()), QKeySequence("K"))->setProperty("id", "pause"); + playback_menu->addAction(tr("Decrease Speed"), this, SLOT(go_to_in()), QKeySequence("J"))->setProperty("id", "decspeed"); loop_action = playback_menu->addAction(tr("Loop"), this, SLOT(toggle_bool_action())); loop_action->setProperty("id", "loop"); diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index f8ef7b4c7..89be63626 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -74,6 +74,10 @@ void TimelineHeader::set_playhead(int mouse_x) { } } +int TimelineHeader::get_marker_offset() { + return (text_enabled) ? height()/2 : 0; +} + void TimelineHeader::set_visible_in(long i) { in_visible = i; update(); @@ -122,32 +126,46 @@ void TimelineHeader::mousePressEvent(QMouseEvent* event) { if (resizing_workarea) { sequence_end = viewer->seq->getEndFrame(); } else { + /*int + QPoint start(in_x, height()+2); + QPainterPath path; + path.moveTo(start + QPoint(1,0)); + path.lineTo(in_x-PLAYHEAD_SIZE, yoff); + path.lineTo(in_x+PLAYHEAD_SIZE+1, yoff);*/ + bool shift = (event->modifiers() & Qt::ShiftModifier); bool clicked_on_marker = false; - for (int i=0;iseq->markers.size();i++) { - int marker_pos = getHeaderScreenPointFromFrame(viewer->seq->markers.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->playhead); + + 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); + if (event->pos().x() > marker_pos - MARKER_SIZE && event->pos().x() < marker_pos + MARKER_SIZE) { + bool found = false; + for (int j=0;jpos().x(); dragging_markers = true; } else { - if (selected_markers.size() > 0) { + if (selected_markers.size() > 0 && !shift) { selected_markers.clear(); update(); } @@ -296,7 +314,7 @@ void TimelineHeader::delete_markers() { void TimelineHeader::paintEvent(QPaintEvent*) { if (viewer->seq != nullptr && zoom > 0) { QPainter p(this); - int yoff = (text_enabled) ? height()/2 : 0; + int yoff = get_marker_offset(); double interval = viewer->seq->frame_rate; int textWidth = 0; @@ -321,7 +339,7 @@ void TimelineHeader::paintEvent(QPaintEvent*) { while (true) { long frame = qRound(interval*i); - int lineX = qRound(frame*zoom) - scroll; + int lineX = qRound(frame*zoom) - scroll; if (lineX > width()) break; @@ -366,7 +384,7 @@ void TimelineHeader::paintEvent(QPaintEvent*) { if (viewer->seq->using_workarea) { in_x = getHeaderScreenPointFromFrame((resizing_workarea ? temp_workarea_in : viewer->seq->workarea_in)); int out_x = getHeaderScreenPointFromFrame((resizing_workarea ? temp_workarea_out : viewer->seq->workarea_out)); - p.fillRect(QRect(in_x, 0, out_x-in_x, height()), viewer->seq->enable_workarea ? QColor(0, 192, 255, 128) : QColor(255, 255, 255, 64)); + p.fillRect(QRect(in_x, 0, out_x-in_x, height()), viewer->seq->enable_workarea ? QColor(0, 192, 255, 128) : QColor(255, 255, 255, 64)); p.setPen(Qt::white); p.drawLine(in_x, 0, in_x, height()); p.drawLine(out_x, 0, out_x, height()); @@ -383,6 +401,13 @@ void TimelineHeader::paintEvent(QPaintEvent*) { QPoint(marker_x - MARKER_SIZE, yoff), QPoint(marker_x - MARKER_SIZE, height() - MARKER_SIZE - 1) }; + /*const QPoint points[5] = { + QPoint(marker_x, height()-1), + QPoint(marker_x + MARKER_SIZE, height() - MARKER_SIZE - 1), + QPoint(marker_x + MARKER_SIZE, yoff), + QPoint(marker_x - MARKER_SIZE, yoff), + QPoint(marker_x - MARKER_SIZE, height() - MARKER_SIZE - 1) + };*/ p.setPen(Qt::black); bool selected = false; for (int j=0;jseq->playhead); QPoint start(in_x, height()+2); QPainterPath path; diff --git a/ui/timelineheader.h b/ui/timelineheader.h index 2950cb0fc..6a2a11a47 100644 --- a/ui/timelineheader.h +++ b/ui/timelineheader.h @@ -10,27 +10,27 @@ bool center_scroll_to_playhead(QScrollBar* bar, double zoom, long playhead); class TimelineHeader : public QWidget { - Q_OBJECT + Q_OBJECT public: explicit TimelineHeader(QWidget *parent = 0); - void set_in_point(long p); - void set_out_point(long p); + void set_in_point(long p); + void set_out_point(long p); Viewer* viewer; bool snapping; void show_text(bool enable); - double get_zoom(); + double get_zoom(); void delete_markers(); - void set_scrollbar_max(QScrollBar* bar, long sequence_end_frame, int offset); + void set_scrollbar_max(QScrollBar* bar, long sequence_end_frame, int offset); public slots: void update_zoom(double z); void set_scroll(int); void set_visible_in(long i); - void show_context_menu(const QPoint &pos); - void resized_scroll_listener(double d); + void show_context_menu(const QPoint &pos); + void resized_scroll_listener(double d); protected: void paintEvent(QPaintEvent*); @@ -42,21 +42,23 @@ protected: private: void update_parents(); - bool dragging; + bool dragging; - bool resizing_workarea; - bool resizing_workarea_in; - long temp_workarea_in; - long temp_workarea_out; - long sequence_end; + bool resizing_workarea; + bool resizing_workarea_in; + long temp_workarea_in; + long temp_workarea_out; + long sequence_end; double zoom; - long in_visible; + long in_visible; void set_playhead(int mouse_x); - QFontMetrics fm; + int get_marker_offset(); + + QFontMetrics fm; int drag_start; bool dragging_markers;