From b0e76efd27b1556fea65c680eb0b1da0dbe3d50e Mon Sep 17 00:00:00 2001 From: itsmattkc Date: Mon, 20 Aug 2018 13:11:41 +1000 Subject: [PATCH] workaround for qt's dock jump bug --- mainwindow.cpp | 27 ++++++++++++++------------- mainwindow.ui | 15 ++++++++++++++- panels/timeline.cpp | 13 +++++-------- panels/timeline.ui | 14 +++++++++++++- ui/timelineheader.cpp | 3 +-- ui/timelinewidget.cpp | 4 ++-- 6 files changed, 49 insertions(+), 27 deletions(-) diff --git a/mainwindow.cpp b/mainwindow.cpp index 9e01514f6..7bb462e35 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -47,7 +47,9 @@ void MainWindow::setup_layout() { addDockWidget(Qt::TopDockWidgetArea, panel_project); addDockWidget(Qt::TopDockWidgetArea, panel_effect_controls); addDockWidget(Qt::TopDockWidgetArea, panel_viewer); - addDockWidget(Qt::BottomDockWidgetArea, panel_timeline); + addDockWidget(Qt::BottomDockWidgetArea, panel_timeline); + + resizeDocks({panel_project}, {40}, Qt::Horizontal); } MainWindow::MainWindow(QWidget *parent) : @@ -84,7 +86,6 @@ MainWindow::MainWindow(QWidget *parent) : setWindowTitle("Olive (August 2018 | Alpha)"); statusBar()->showMessage("Welcome to Olive"); - ui->centralWidget->setMaximumSize(0, 0); setDockNestingEnabled(true); // TODO maybe replace these with non-pointers later on? @@ -398,42 +399,42 @@ void MainWindow::on_actionDeselect_All_triggered() } } -void MainWindow::on_actionGo_to_start_triggered() -{ - if (panel_timeline->focused() || panel_viewer->hasFocus()) { - panel_timeline->go_to_start(); - } -} - void MainWindow::on_actionReset_to_default_layout_triggered() { setup_layout(); } +void MainWindow::on_actionGo_to_start_triggered() +{ + if (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus()) { + panel_timeline->go_to_start(); + } +} + void MainWindow::on_actionPrevious_Frame_triggered() { - if (panel_timeline->focused() || panel_viewer->hasFocus()) { + if (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus()) { panel_timeline->previous_frame(); } } void MainWindow::on_actionNext_Frame_triggered() { - if (panel_timeline->focused() || panel_viewer->hasFocus()) { + if (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus()) { panel_timeline->next_frame(); } } void MainWindow::on_actionGo_to_End_triggered() { - if (panel_timeline->focused() || panel_viewer->hasFocus()) { + if (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus()) { panel_timeline->go_to_end(); } } void MainWindow::on_actionPlay_Pause_triggered() { - if (panel_timeline->focused() || panel_viewer->hasFocus()) { + if (panel_timeline->focused() || panel_viewer->hasFocus() || panel_effect_controls->keyframe_focus()) { panel_timeline->toggle_play(); } } diff --git a/mainwindow.ui b/mainwindow.ui index 14579a075..7fa42b5c3 100644 --- a/mainwindow.ui +++ b/mainwindow.ui @@ -17,7 +17,20 @@ :/icons/full-icon.png:/icons/full-icon.png - + + + + 0 + 0 + + + + + 0 + 0 + + + diff --git a/panels/timeline.cpp b/panels/timeline.cpp index 027c97da4..772f230ca 100644 --- a/panels/timeline.cpp +++ b/panels/timeline.cpp @@ -148,13 +148,10 @@ void Timeline::reset_all_audio() { } void Timeline::seek(long p) { - pause(); - + pause(); playhead = p; - reset_all_audio(); - - repaint_timeline(); + repaint_timeline(); } void Timeline::toggle_play() { @@ -268,7 +265,7 @@ bool Timeline::focused() { } void Timeline::repaint_timeline() { - if (playing) { + if (playing) { playhead = round(playhead_start + ((QDateTime::currentMSecsSinceEpoch()-start_msecs) * 0.001 * sequence->frame_rate)); } @@ -282,7 +279,7 @@ void Timeline::repaint_timeline() { ui->audio_monitor->update(); last_frame = playhead; } - panel_viewer->update_playhead_timecode(playhead); + panel_viewer->update_playhead_timecode(playhead); } void Timeline::redraw_all_clips(bool changed) { @@ -296,7 +293,7 @@ void Timeline::redraw_all_clips(bool changed) { ui->audio_area->redraw_clips(); panel_effect_controls->update_keyframes(); - panel_viewer->update_end_timecode(); + panel_viewer->update_end_timecode(); } void Timeline::select_all() { diff --git a/panels/timeline.ui b/panels/timeline.ui index 693493d2d..da4020351 100644 --- a/panels/timeline.ui +++ b/panels/timeline.ui @@ -10,6 +10,12 @@ 592 + + + 0 + 0 + + Timeline @@ -258,7 +264,7 @@ - + 1 0 @@ -364,6 +370,12 @@ + + + 0 + 0 + + Qt::Vertical diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp index 0d1bd04fb..9b9a8389a 100644 --- a/ui/timelineheader.cpp +++ b/ui/timelineheader.cpp @@ -20,8 +20,7 @@ TimelineHeader::TimelineHeader(QWidget *parent) : QWidget(parent), dragging(fals void TimelineHeader::set_playhead(int mouse_x) { long frame = getFrameFromScreenPoint(zoom, mouse_x); if (snapping) panel_timeline->snap_to_clip(&frame, false); - panel_timeline->seek(frame); - panel_timeline->repaint_timeline(); + panel_timeline->seek(frame); } void TimelineHeader::set_visible_in(long i) { diff --git a/ui/timelinewidget.cpp b/ui/timelinewidget.cpp index 3609e2ac9..fb8190bc0 100644 --- a/ui/timelinewidget.cpp +++ b/ui/timelinewidget.cpp @@ -1565,7 +1565,7 @@ void TimelineWidget::redraw_clips() { } } int panel_width = panel_timeline->getTimelineScreenPointFromFrame(end_frame) + 100; - int panel_height = 0; + int panel_height = 100; if (bottom_align) { for (int i=-1;i>=video_track_limit;i--) { panel_height += panel_timeline->calculate_track_height(i, -1); @@ -1577,7 +1577,7 @@ void TimelineWidget::redraw_clips() { } if (minimumWidth() != panel_width || clip_pixmap.height() != height() || panel_height != minimumHeight()) { - panel_timeline->ui->headers->setMinimumWidth(panel_width); + panel_timeline->ui->headers->setMinimumWidth(panel_width + 100); setMinimumWidth(panel_width); setMinimumHeight(panel_height); clip_pixmap = QPixmap(qMax(width(), panel_width), qMax(height(), panel_height));