[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [kdenlive/refactoring_timeline] src: Fix various issues with timeline zoom
From:       Jean-Baptiste Mardelle <null () kde ! org>
Date:       2018-09-28 15:09:06
Message-ID: E1g5uOA-0003KV-Hs () code ! kde ! org
[Download RAW message or body]

Git commit 5cc1bf207320a18483d722f23b2238cdf03ad417 by Jean-Baptiste Mardelle.
Committed on 28/09/2018 at 15:08.
Pushed by mardelle into branch 'refactoring_timeline'.

Fix various issues with timeline zoom

M  +10   -16   src/mainwindow.cpp
M  +2    -0    src/mainwindow.h
M  +3    -2    src/timeline2/view/qml/timeline.qml
M  +3    -4    src/timeline2/view/timelinecontroller.cpp
M  +1    -0    src/timeline2/view/timelinecontroller.h
M  +3    -0    src/timeline2/view/timelinetabs.cpp
M  +3    -0    src/timeline2/view/timelinetabs.hpp
M  +10   -0    src/timeline2/view/timelinewidget.cpp
M  +2    -0    src/timeline2/view/timelinewidget.h

https://commits.kde.org/kdenlive/5cc1bf207320a18483d722f23b2238cdf03ad417

diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index da46fb8a5..4ddc0c321 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -311,6 +311,7 @@ void MainWindow::init()
     connect(m_assetPanel, &AssetPanel::changeSpeed, this, \
                &MainWindow::slotChangeSpeed);
     connect(m_timelineTabs, &TimelineTabs::showTransitionModel, m_assetPanel, \
                &AssetPanel::showTransition);
     connect(m_timelineTabs, &TimelineTabs::showItemEffectStack, m_assetPanel, \
&AssetPanel::showEffectStack); +    connect(m_timelineTabs, \
                &TimelineTabs::updateZoom, this, &MainWindow::updateZoomSlider);
     connect(pCore->bin(), &Bin::requestShowEffectStack, m_assetPanel, \
                &AssetPanel::showEffectStack);
     connect(this, &MainWindow::clearAssetPanel, m_assetPanel, \
&AssetPanel::clearAssetPanel);  connect(m_assetPanel, &AssetPanel::seekToPos, \
[this](int pos) { @@ -1071,7 +1072,7 @@ void MainWindow::setupActions()
     m_zoomOut->setShortcut(Qt::CTRL + Qt::Key_Minus);
 
     m_zoomSlider = new QSlider(Qt::Horizontal, this);
-    m_zoomSlider->setMaximum(14);
+    m_zoomSlider->setRange(0, 13);
     m_zoomSlider->setPageStep(1);
     m_zoomSlider->setInvertedAppearance(true);
     m_zoomSlider->setInvertedControls(true);
@@ -1082,21 +1083,6 @@ void MainWindow::setupActions()
     m_zoomIn = new QAction(QIcon::fromTheme(QStringLiteral("zoom-in")), i18n("Zoom \
In"), this);  m_zoomIn->setShortcut(Qt::CTRL + Qt::Key_Plus);
 
-    /*actionWidget = toolbar->widgetForAction(m_buttonFitZoom);
-    actionWidget->setMaximumWidth(max);
-    actionWidget->setMaximumHeight(max - 4);
-    actionWidget->setStyleSheet(styleBorderless);
-
-    actionWidget = toolbar->widgetForAction(m_zoomIn);
-    actionWidget->setMaximumWidth(max);
-    actionWidget->setMaximumHeight(max - 4);
-    actionWidget->setStyleSheet(styleBorderless);
-
-    actionWidget = toolbar->widgetForAction(m_zoomOut);
-    actionWidget->setMaximumWidth(max);
-    actionWidget->setMaximumHeight(max - 4);
-    actionWidget->setStyleSheet(styleBorderless);*/
-
     connect(m_zoomSlider, SIGNAL(valueChanged(int)), this, SLOT(slotSetZoom(int)));
     connect(m_zoomSlider, &QAbstractSlider::sliderMoved, this, \
                &MainWindow::slotShowZoomSliderToolTip);
     connect(m_buttonFitZoom, &QAction::triggered, this, &MainWindow::slotFitZoom);
@@ -2667,6 +2653,14 @@ void MainWindow::slotSetZoom(int value, bool zoomOnMouse)
     m_zoomSlider->blockSignals(false);
 }
 
+void MainWindow::updateZoomSlider(int value)
+{
+    slotUpdateZoomSliderToolTip(value);
+    m_zoomSlider->blockSignals(true);
+    m_zoomSlider->setValue(value);
+    m_zoomSlider->blockSignals(false);
+}
+
 void MainWindow::slotShowZoomSliderToolTip(int zoomlevel)
 {
     if (zoomlevel != -1) {
diff --git a/src/mainwindow.h b/src/mainwindow.h
index 6d158702d..f735cb052 100644
--- a/src/mainwindow.h
+++ b/src/mainwindow.h
@@ -298,6 +298,8 @@ private slots:
     void slotFitZoom();
     /** @brief Updates the zoom slider tooltip to fit @param zoomlevel. */
     void slotUpdateZoomSliderToolTip(int zoomlevel);
+    /** @brief Timeline was zoom, update slider to reflect that */
+    void updateZoomSlider(int value);
 
     /** @brief Displays the zoom slider tooltip.
      * @param zoomlevel (optional) The zoom level to show in the tooltip.
diff --git a/src/timeline2/view/qml/timeline.qml \
b/src/timeline2/view/qml/timeline.qml index cccbf2cb6..0bd0981ce 100644
--- a/src/timeline2/view/qml/timeline.qml
+++ b/src/timeline2/view/qml/timeline.qml
@@ -51,7 +51,8 @@ Rectangle {
                 timeline.triggerAction('monitor_seek_snap_forward')
             }
         } else if (wheel.modifiers & Qt.ControlModifier) {
-            timeline.setScaleFactor(timeline.scaleFactor + 0.2 * wheel.angleDelta.y \
/ 120); +            zoomOnMouse = getMousePos();
+            timeline.setScaleFactor(Math.max(0.005, timeline.scaleFactor * (1.0 + \
wheel.angleDelta.y / 600)));  } else {
             var newScroll = Math.min(scrollView.flickableItem.contentX - \
wheel.angleDelta.y, timeline.fullDuration * root.timeScale - (scrollView.width - \
scrollView.__verticalScrollBar.width))  scrollView.flickableItem.contentX = \
Math.max(newScroll, 0) @@ -159,7 +160,7 @@ Rectangle {
     //onCurrentTrackChanged: timeline.selection = []
     onTimeScaleChanged: {
         if (root.zoomOnMouse >= 0) {
-            var mouseFraction = scrollView.flickableItem.contentX = Math.max(0, \
root.zoomOnMouse * timeline.scaleFactor - tracksArea.mouseX) +            \
scrollView.flickableItem.contentX = Math.max(0, root.zoomOnMouse * \
timeline.scaleFactor - tracksArea.mouseX)  root.zoomOnMouse = -1
         } else {
             scrollView.flickableItem.contentX = Math.max(0, (timeline.seekPosition > \
-1 ? timeline.seekPosition : timeline.position) * timeline.scaleFactor - \
                (scrollView.width / 2))
diff --git a/src/timeline2/view/timelinecontroller.cpp \
b/src/timeline2/view/timelinecontroller.cpp index 564eba154..c2d001ac7 100644
--- a/src/timeline2/view/timelinecontroller.cpp
+++ b/src/timeline2/view/timelinecontroller.cpp
@@ -222,11 +222,10 @@ void TimelineController::setScaleFactorOnMouse(double scale, \
bool zoomOnMouse)  
 void TimelineController::setScaleFactor(double scale)
 {
-    /*if (m_duration * scale < width() - 160) {
-        // Don't allow scaling less than full project's width
-        scale = (width() - 160.0) / m_duration;
-    }*/
     m_scale = scale;
+    // Update mainwindow's zoom slider
+    emit updateZoom(scale);
+    // inform qml
     emit scaleFactorChanged();
 }
 
diff --git a/src/timeline2/view/timelinecontroller.h \
b/src/timeline2/view/timelinecontroller.h index 8f8077fe2..29f7b6084 100644
--- a/src/timeline2/view/timelinecontroller.h
+++ b/src/timeline2/view/timelinecontroller.h
@@ -479,6 +479,7 @@ signals:
     void renderedChunksChanged();
     void workingPreviewChanged();
     void useRulerChanged();
+    void updateZoom(double);
     Q_INVOKABLE void ungrabHack();
 };
 
diff --git a/src/timeline2/view/timelinetabs.cpp \
b/src/timeline2/view/timelinetabs.cpp index 1eaa6c2b1..5d19495aa 100644
--- a/src/timeline2/view/timelinetabs.cpp
+++ b/src/timeline2/view/timelinetabs.cpp
@@ -72,6 +72,9 @@ void TimelineTabs::connectTimeline(TimelineWidget *timeline)
     connect(this, &TimelineTabs::showAudioThumbnailsChanged, timeline->controller(), \
                &TimelineController::showAudioThumbnailsChanged);
     connect(this, &TimelineTabs::changeZoom, timeline, \
                &TimelineWidget::slotChangeZoom);
     connect(timeline->controller(), &TimelineController::showTransitionModel, this, \
&TimelineTabs::showTransitionModel); +    connect(timeline->controller(), \
&TimelineController::updateZoom, [&](double value) { +        emit \
updateZoom(getCurrentTimeline()->zoomForScale(value)); +    });
     connect(timeline->controller(), &TimelineController::showItemEffectStack, this, \
&TimelineTabs::showItemEffectStack);  }
 
diff --git a/src/timeline2/view/timelinetabs.hpp \
b/src/timeline2/view/timelinetabs.hpp index b455af1c3..41bc5943e 100644
--- a/src/timeline2/view/timelinetabs.hpp
+++ b/src/timeline2/view/timelinetabs.hpp
@@ -74,6 +74,9 @@ signals:
     void showTransitionModel(int tid, std::shared_ptr<AssetParameterModel>);
     /* @brief Requests that a given effectstack model is displayed in the asset \
                panel */
     void showItemEffectStack(const QString &clipName, \
std::shared_ptr<EffectStackModel>, QSize, bool); +    /** @brief Zoom level changed \
in timeline, update slider +     */
+    void updateZoom(int);
 
 private:
     TimelineWidget *m_mainTimeline;
diff --git a/src/timeline2/view/timelinewidget.cpp \
b/src/timeline2/view/timelinewidget.cpp index 92a891c08..82f39739f 100644
--- a/src/timeline2/view/timelinewidget.cpp
+++ b/src/timeline2/view/timelinewidget.cpp
@@ -184,3 +184,13 @@ void TimelineWidget::slotUngrabHack()
         quickWindow()->mouseGrabberItem()->ungrabMouse();
     }
 }
+
+int TimelineWidget::zoomForScale(double value) const
+{
+    int scale = 100.0 / value;
+    int ix = 13;
+    while(comboScale[ix] > scale && ix > 0) {
+        ix --;
+    }
+    return ix;
+}
diff --git a/src/timeline2/view/timelinewidget.h \
b/src/timeline2/view/timelinewidget.h index 88363ebf5..dc22a8f2e 100644
--- a/src/timeline2/view/timelinewidget.h
+++ b/src/timeline2/view/timelinewidget.h
@@ -49,6 +49,8 @@ public:
     TimelineController *controller();
     void setTool(ProjectTool tool);
     QPoint getTracksCount() const;
+    /* @brief calculate zoom level for a scale */
+    int zoomForScale(double value) const;
     bool loading;
 
 protected:


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic