workaround for qt's dock jump bug

This commit is contained in:
itsmattkc
2018-08-20 13:11:41 +10:00
parent b06ab214ea
commit b0e76efd27
6 changed files with 49 additions and 27 deletions
+14 -13
View File
@@ -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();
}
}
+14 -1
View File
@@ -17,7 +17,20 @@
<iconset resource="icons/icons.qrc">
<normaloff>:/icons/full-icon.png</normaloff>:/icons/full-icon.png</iconset>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QWidget" name="centralWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
+5 -8
View File
@@ -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() {
+13 -1
View File
@@ -10,6 +10,12 @@
<height>592</height>
</rect>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="windowTitle">
<string>Timeline</string>
</property>
@@ -258,7 +264,7 @@
<item>
<widget class="QWidget" name="timeline_area" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
<horstretch>1</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -364,6 +370,12 @@
</item>
<item>
<widget class="QSplitter" name="splitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
+1 -2
View File
@@ -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) {
+2 -2
View File
@@ -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));