diff --git a/mainwindow.cpp b/mainwindow.cpp
index b2a3005df..2354caf01 100644
--- a/mainwindow.cpp
+++ b/mainwindow.cpp
@@ -311,7 +311,11 @@ void MainWindow::on_actionZoom_In_triggered()
panel_timeline->set_zoom(true);
} else if (panel_effect_controls->keyframe_focus()) {
panel_effect_controls->set_zoom(true);
- }
+ } else if (panel_footage_viewer->is_focused()) {
+ panel_footage_viewer->set_zoom(true);
+ } else if (panel_sequence_viewer->is_focused()) {
+ panel_sequence_viewer->set_zoom(true);
+ }
}
void MainWindow::on_actionZoom_out_triggered()
@@ -320,7 +324,11 @@ void MainWindow::on_actionZoom_out_triggered()
panel_timeline->set_zoom(false);
} else if (panel_effect_controls->keyframe_focus()) {
panel_effect_controls->set_zoom(false);
- }
+ } else if (panel_footage_viewer->is_focused()) {
+ panel_footage_viewer->set_zoom(false);
+ } else if (panel_sequence_viewer->is_focused()) {
+ panel_sequence_viewer->set_zoom(false);
+ }
}
void MainWindow::on_actionExport_triggered()
@@ -582,7 +590,7 @@ void MainWindow::on_actionEdit_Tool_triggered()
void MainWindow::on_actionToggle_Snapping_triggered()
{
- if (panel_timeline->focused()) panel_timeline->ui->snappingButton->click();
+ if (panel_timeline->focused() || panel_effect_controls->keyframe_focus()) panel_timeline->ui->snappingButton->click();
}
void MainWindow::on_actionPointer_Tool_triggered()
diff --git a/panels/viewer.cpp b/panels/viewer.cpp
index 9e2fccde9..5b13fe699 100644
--- a/panels/viewer.cpp
+++ b/panels/viewer.cpp
@@ -37,7 +37,8 @@ Viewer::Viewer(QWidget *parent) :
ui(new Ui::Viewer),
created_sequence(false),
cue_recording_internal(false),
- panel_name("Viewer: ")
+ panel_name("Viewer: "),
+ minimum_zoom(1.0)
{
ui->setupUi(this);
ui->headers->viewer = this;
@@ -59,6 +60,7 @@ Viewer::Viewer(QWidget *parent) :
connect(&playback_updater, SIGNAL(timeout()), this, SLOT(timer_update()));
connect(&recording_flasher, SIGNAL(timeout()), this, SLOT(recording_flasher_update()));
+ connect(ui->horizontalScrollBar, SIGNAL(valueChanged(int)), ui->headers, SLOT(set_scroll(int)));
update_playhead_timecode(0);
update_end_timecode();
@@ -380,7 +382,12 @@ void Viewer::update_end_timecode() {
void Viewer::update_header_zoom() {
if (seq != NULL) {
long sequenceEndFrame = seq->getEndFrame();
- ui->headers->update_zoom((sequenceEndFrame > 0) ? ((double) ui->headers->width() / (double) sequenceEndFrame) : 1);
+ if (cached_end_frame != sequenceEndFrame) {
+ minimum_zoom = (sequenceEndFrame > 0) ? ((double) ui->headers->width() / (double) sequenceEndFrame) : 1;
+ ui->headers->update_zoom(qMax(ui->headers->get_zoom(), minimum_zoom));
+ } else {
+ ui->headers->update();
+ }
}
}
@@ -411,7 +418,15 @@ void Viewer::set_in_point() {
}
void Viewer::set_out_point() {
- ui->headers->set_out_point(seq->playhead);
+ ui->headers->set_out_point(seq->playhead);
+}
+
+void Viewer::set_zoom(bool in) {
+ if (in) {
+ ui->headers->update_zoom(ui->headers->get_zoom()*2);
+ } else {
+ ui->headers->update_zoom(qMax(minimum_zoom, ui->headers->get_zoom()*0.5));
+ }
}
void Viewer::set_media(int type, void* media) {
diff --git a/panels/viewer.h b/panels/viewer.h
index 547efdf7b..a46c24c66 100644
--- a/panels/viewer.h
+++ b/panels/viewer.h
@@ -36,6 +36,7 @@ public:
void clear_inout_point();
void set_in_point();
void set_out_point();
+ void set_zoom(bool in);
// playback functions
void go_to_start();
@@ -86,7 +87,9 @@ private:
void set_sequence(bool main, Sequence* s);
bool main_sequence;
bool created_sequence;
+ long cached_end_frame;
QString panel_name;
+ double minimum_zoom;
bool cue_recording_internal;
QTimer recording_flasher;
diff --git a/panels/viewer.ui b/panels/viewer.ui
index 111812803..648765042 100644
--- a/panels/viewer.ui
+++ b/panels/viewer.ui
@@ -64,6 +64,13 @@
-
+ -
+
+
+ Qt::Horizontal
+
+
+
-
diff --git a/ui/timelineheader.cpp b/ui/timelineheader.cpp
index 00094fac2..c67c8d39f 100644
--- a/ui/timelineheader.cpp
+++ b/ui/timelineheader.cpp
@@ -255,7 +255,11 @@ void TimelineHeader::update_parents() {
void TimelineHeader::update_zoom(double z) {
zoom = z;
- update();
+ update();
+}
+
+double TimelineHeader::get_zoom() {
+ return zoom;
}
void TimelineHeader::delete_markers() {
diff --git a/ui/timelineheader.h b/ui/timelineheader.h
index 68cb38573..979b3fd38 100644
--- a/ui/timelineheader.h
+++ b/ui/timelineheader.h
@@ -20,6 +20,7 @@ public:
void show_text(bool enable);
void update_zoom(double z);
+ double get_zoom();
void delete_markers();
public slots: