[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