From 6d5fb455eb4d6d89c24f5f4e77addcc86b491c4d Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Mardelle Date: Thu, 18 Jun 2009 17:41:32 +0000 Subject: [PATCH] Rewrote correct implementation of vertical timeline zoom svn path=/trunk/kdenlive/; revision=3580 --- src/clipitem.cpp | 8 ++++---- src/customtrackscene.cpp | 13 +++++++------ src/customtrackscene.h | 6 +++--- src/customtrackview.cpp | 16 +++++++--------- src/customtrackview.h | 6 +++--- src/guide.cpp | 4 ++-- src/headertrack.cpp | 7 +++---- src/headertrack.h | 2 +- src/kdenlivesettings.kcfg | 7 +------ src/mainwindow.cpp | 2 +- src/trackview.cpp | 24 +++++++++++++++--------- src/trackview.h | 2 +- src/transition.cpp | 2 +- 13 files changed, 49 insertions(+), 50 deletions(-) diff --git a/src/clipitem.cpp b/src/clipitem.cpp index a962bf96..bbe0c1fb 100644 --- a/src/clipitem.cpp +++ b/src/clipitem.cpp @@ -512,7 +512,7 @@ void ClipItem::slotThumbReady(int frame, QPixmap pix) { if (scene() == NULL) return; QRectF r = boundingRect(); - double width = pix.width() / projectScene()->scale(); + double width = pix.width() / projectScene()->scale().x(); if (m_startThumbRequested && frame == cropStart().frames(m_fps)) { m_startPix = pix; m_startThumbRequested = false; @@ -874,7 +874,7 @@ OPERATIONTYPE ClipItem::operationMode(QPointF pos) if (m_editedKeyframe != -1) return KEYFRAME; } QRectF rect = sceneBoundingRect(); - const double scale = projectScene()->scale(); + const double scale = projectScene()->scale().x(); double maximumOffset = 6 / scale; if (qAbs((int)(pos.x() - (rect.x() + m_startFade))) < maximumOffset && qAbs((int)(pos.y() - rect.y())) < 6) { @@ -1078,7 +1078,7 @@ void ClipItem::hoverEnterEvent(QGraphicsSceneHoverEvent */*e*/) if (isItemLocked()) return; m_hover = true; QRectF r = boundingRect(); - double width = 35 / projectScene()->scale(); + double width = 35 / projectScene()->scale().x(); double height = r.height() / 2; //WARNING: seems like it generates a full repaint of the clip, maybe not so good... update(r.x(), r.y() + height, width, height); @@ -1091,7 +1091,7 @@ void ClipItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *) if (isItemLocked()) return; m_hover = false; QRectF r = boundingRect(); - double width = 35 / projectScene()->scale(); + double width = 35 / projectScene()->scale().x(); double height = r.height() / 2; //WARNING: seems like it generates a full repaint of the clip, maybe not so good... update(r.x(), r.y() + height, width, height); diff --git a/src/customtrackscene.cpp b/src/customtrackscene.cpp index eff28595..7a3209e4 100644 --- a/src/customtrackscene.cpp +++ b/src/customtrackscene.cpp @@ -25,7 +25,7 @@ CustomTrackScene::CustomTrackScene(KdenliveDoc *doc, QObject *parent) : QGraphicsScene(parent), m_document(doc), - m_scale(1.0) + m_scale(1.0, 1.0) { m_transitionPixmap = QPixmap(KStandardDirs::locate("appdata", "transition.png")); } @@ -38,8 +38,8 @@ double CustomTrackScene::getSnapPointForPos(double pos, bool doSnap) { double maximumOffset; if (doSnap) { - if (m_scale > 3) maximumOffset = 10 / m_scale; - else maximumOffset = 6 / m_scale; + if (m_scale.x() > 3) maximumOffset = 10 / m_scale.x(); + else maximumOffset = 6 / m_scale.x(); for (int i = 0; i < m_snapPoints.size(); ++i) { if (qAbs((int)(pos - m_snapPoints.at(i).frames(m_document->fps()))) < maximumOffset) { return m_snapPoints.at(i).frames(m_document->fps()); @@ -76,12 +76,13 @@ GenTime CustomTrackScene::nextSnapPoint(GenTime pos) return pos; } -void CustomTrackScene::setScale(double scale) +void CustomTrackScene::setScale(double scale, double vscale) { - m_scale = scale; + m_scale.setX(scale); + m_scale.setY(vscale); } -double CustomTrackScene::scale() const +QPointF CustomTrackScene::scale() const { return m_scale; } diff --git a/src/customtrackscene.h b/src/customtrackscene.h index 822a0676..eb22ec90 100644 --- a/src/customtrackscene.h +++ b/src/customtrackscene.h @@ -42,15 +42,15 @@ public: GenTime previousSnapPoint(GenTime pos); GenTime nextSnapPoint(GenTime pos); double getSnapPointForPos(double pos, bool doSnap = true); - void setScale(double scale); - double scale() const; + void setScale(double scale, double vscale); + QPointF scale() const; int tracksCount() const; QPixmap m_transitionPixmap; private: KdenliveDoc *m_document; QList m_snapPoints; - double m_scale; + QPointF m_scale; }; #endif diff --git a/src/customtrackview.cpp b/src/customtrackview.cpp index e2c07e64..0a88b2a9 100644 --- a/src/customtrackview.cpp +++ b/src/customtrackview.cpp @@ -84,7 +84,7 @@ CustomTrackView::CustomTrackView(KdenliveDoc *doc, CustomTrackScene* projectscene, QWidget *parent) : QGraphicsView(projectscene, parent), - m_tracksHeight(KdenliveSettings::defaulttrackheight()), + m_tracksHeight(KdenliveSettings::trackheight()), m_projectDuration(0), m_cursorPos(0), m_document(doc), @@ -198,14 +198,11 @@ void CustomTrackView::checkAutoScroll() return m_scene->m_tracksList; }*/ -void CustomTrackView::checkTrackHeight(bool resetTrackHeight) +void CustomTrackView::checkTrackHeight() { - if (resetTrackHeight) { - KdenliveSettings::setTrackheight(KdenliveSettings::defaulttrackheight()); - } if (m_tracksHeight == KdenliveSettings::trackheight()) return; m_tracksHeight = KdenliveSettings::trackheight(); - emit trackHeightChanged(resetTrackHeight); + emit trackHeightChanged(); QList itemList = items(); ClipItem *item; Transition *transitionitem; @@ -3724,11 +3721,12 @@ void CustomTrackView::setTool(PROJECTTOOL tool) m_tool = tool; } -void CustomTrackView::setScale(double scaleFactor) +void CustomTrackView::setScale(double scaleFactor, double verticalScale) { QMatrix matrix; - matrix = matrix.scale(scaleFactor, 1); - m_scene->setScale(scaleFactor); + matrix = matrix.scale(scaleFactor, verticalScale); + m_scene->setScale(scaleFactor, verticalScale); + kDebug() << "// Set SCALE: " << scaleFactor << "," << verticalScale; //scale(scaleFactor, 1); m_animationTimer->stop(); delete m_visualTip; diff --git a/src/customtrackview.h b/src/customtrackview.h index 7990df41..290159ec 100644 --- a/src/customtrackview.h +++ b/src/customtrackview.h @@ -64,7 +64,7 @@ public: void slotDeleteClipMarker(const QString &comment, const QString &id, const GenTime &position); void slotDeleteAllClipMarkers(const QString &id); void addMarker(const QString &id, const GenTime &pos, const QString comment); - void setScale(double scaleFactor); + void setScale(double scaleFactor, double verticalScale); void deleteClip(const QString &clipId); void slotAddEffect(QDomElement effect, GenTime pos, int track); void slotAddGroupEffect(QDomElement effect, AbstractGroupItem *group); @@ -81,7 +81,7 @@ public: void deleteSelectedClips(); void cutSelectedClips(); void setContextMenu(QMenu *timeline, QMenu *clip, QMenu *transition, QActionGroup *clipTypeGroup); - void checkTrackHeight(bool resetTrackHeight = false); + void checkTrackHeight(); //QList tracksList() const; void setTool(PROJECTTOOL tool); void cutClip(ItemInfo info, GenTime cutTime, bool cut); @@ -265,7 +265,7 @@ signals: void clipItemSelected(ClipItem*, int ix = -1); void transitionItemSelected(Transition*, int track = 0, QPoint p = QPoint(), bool update = false); void activateDocumentMonitor(); - void trackHeightChanged(bool zoom); + void trackHeightChanged(); void displayMessage(const QString, MessageType); void showClipFrame(DocClipBase *, const int); void doTrackLock(int, bool); diff --git a/src/guide.cpp b/src/guide.cpp index 0e55e901..4fbc53b9 100644 --- a/src/guide.cpp +++ b/src/guide.cpp @@ -111,7 +111,7 @@ QRectF Guide::boundingRect() const if (KdenliveSettings::showmarkers()) { QRectF rect = QGraphicsLineItem::boundingRect(); rect.setLeft(line().x1()); - rect.setWidth(m_width / static_cast (scene())->scale()); + rect.setWidth(m_width / static_cast (scene())->scale().x()); return rect; } else return QGraphicsLineItem::boundingRect(); } @@ -124,7 +124,7 @@ QPainterPath Guide::shape() const if (KdenliveSettings::showmarkers()) { const QFontMetrics metric = m_view->fontMetrics(); int height = metric.height(); - path.addRoundedRect(line().x1(), line().y1() + 10, m_width / static_cast (scene())->scale(), height, 3, 3); + path.addRoundedRect(line().x1(), line().y1() + 10, m_width / static_cast (scene())->scale().x(), height, 3, 3); } return path; } diff --git a/src/headertrack.cpp b/src/headertrack.cpp index 607d5ab0..c158ba04 100644 --- a/src/headertrack.cpp +++ b/src/headertrack.cpp @@ -19,7 +19,6 @@ #include "headertrack.h" -#include "kdenlivesettings.h" #include #include @@ -30,12 +29,12 @@ #include #include -HeaderTrack::HeaderTrack(int index, TrackInfo info, QWidget *parent) : +HeaderTrack::HeaderTrack(int index, TrackInfo info, int height, QWidget *parent) : QWidget(parent), m_index(index), m_type(info.type) { - setFixedHeight(KdenliveSettings::trackheight()); + setFixedHeight(height); m_view.setupUi(this); m_view.track_number->setText(QString::number(m_index)); @@ -65,7 +64,7 @@ HeaderTrack::HeaderTrack(int index, TrackInfo info, QWidget *parent) : connect(m_view.buttonLock, SIGNAL(clicked()), this, SLOT(switchLock())); // Don't show track buttons if size is too small - if (KdenliveSettings::trackheight() < 40) { + if (height < 40) { m_view.buttonVideo->setHidden(true); m_view.buttonAudio->setHidden(true); m_view.buttonLock->setHidden(true); diff --git a/src/headertrack.h b/src/headertrack.h index 27a6373a..70bcd8a7 100644 --- a/src/headertrack.h +++ b/src/headertrack.h @@ -31,7 +31,7 @@ class HeaderTrack : public QWidget Q_OBJECT public: - HeaderTrack(int index, TrackInfo info, QWidget *parent = 0); + HeaderTrack(int index, TrackInfo info, int height, QWidget *parent = 0); ~HeaderTrack(); void setLock(bool lock); diff --git a/src/kdenlivesettings.kcfg b/src/kdenlivesettings.kcfg index 74998a8b..693a449d 100644 --- a/src/kdenlivesettings.kcfg +++ b/src/kdenlivesettings.kcfg @@ -75,7 +75,7 @@ true - + 50 @@ -380,11 +380,6 @@ - - - 50 - - 1.7777778 diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 0cf498da..7477b95d 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -1976,7 +1976,7 @@ void MainWindow::updateConfiguration() if (m_activeTimeline) { m_activeTimeline->refresh(); m_activeTimeline->projectView()->checkAutoScroll(); - m_activeTimeline->projectView()->checkTrackHeight(true); + m_activeTimeline->projectView()->checkTrackHeight(); if (m_activeDocument) m_activeDocument->clipManager()->checkAudioThumbs(); } m_buttonAudioThumbs->setChecked(KdenliveSettings::audiothumbnails()); diff --git a/src/trackview.cpp b/src/trackview.cpp index c163f34d..f34077a6 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -98,7 +98,7 @@ TrackView::TrackView(KdenliveDoc *doc, QWidget *parent) : tracksLayout->addWidget(m_trackview); connect(m_trackview->verticalScrollBar(), SIGNAL(valueChanged(int)), m_view.headers_area->verticalScrollBar(), SLOT(setValue(int))); - connect(m_trackview, SIGNAL(trackHeightChanged(bool)), this, SLOT(slotRebuildTrackHeaders(bool))); + connect(m_trackview, SIGNAL(trackHeightChanged()), this, SLOT(slotRebuildTrackHeaders())); parseDocument(m_doc->toXml()); m_doc->setSceneList(); @@ -403,7 +403,7 @@ void TrackView::slotChangeZoom(int factor) m_doc->setZoom(factor); m_ruler->setPixelPerMark(factor); m_scale = (double) FRAME_SIZE / m_ruler->comboScale[factor]; // m_ruler->comboScale[m_currentZoom] / - m_trackview->setScale(m_scale); + m_trackview->setScale(m_scale, m_scene->scale().y()); } int TrackView::fitZoom() const @@ -425,18 +425,18 @@ void TrackView::refresh() m_trackview->viewport()->update(); } -void TrackView::slotRebuildTrackHeaders(bool resetZoom) +void TrackView::slotRebuildTrackHeaders() { // If the slot was triggered by a change in default track size, reset vertical zoom - if (resetZoom) m_verticalZoom = 1; QList list = m_doc->tracksList(); QLayoutItem *child; while ((child = m_headersLayout->takeAt(0)) != 0) { delete child; } int max = list.count(); + int height = KdenliveSettings::trackheight() * m_scene->scale().y(); for (int i = 0; i < max; i++) { - HeaderTrack *header = new HeaderTrack(i, list.at(max - i - 1), this); + HeaderTrack *header = new HeaderTrack(i, list.at(max - i - 1), height, this); connect(header, SIGNAL(switchTrackVideo(int)), m_trackview, SLOT(slotSwitchTrackVideo(int))); connect(header, SIGNAL(switchTrackAudio(int)), m_trackview, SLOT(slotSwitchTrackAudio(int))); connect(header, SIGNAL(switchTrackLock(int)), m_trackview, SLOT(slotSwitchTrackLock(int))); @@ -763,16 +763,22 @@ void TrackView::slotVerticalZoomDown() { if (m_verticalZoom == 0) return; m_verticalZoom--; - KdenliveSettings::setTrackheight(KdenliveSettings::trackheight() / 2); - m_trackview->checkTrackHeight(false); + if (m_verticalZoom == 0) m_trackview->setScale(m_scene->scale().x(), 0.5); + else m_trackview->setScale(m_scene->scale().x(), 1); + slotRebuildTrackHeaders(); + /*KdenliveSettings::setTrackheight(KdenliveSettings::trackheight() / 2); + m_trackview->checkTrackHeight(false);*/ } void TrackView::slotVerticalZoomUp() { if (m_verticalZoom == 2) return; m_verticalZoom++; - KdenliveSettings::setTrackheight(KdenliveSettings::trackheight() * 2); - m_trackview->checkTrackHeight(false); + /*KdenliveSettings::setTrackheight(KdenliveSettings::trackheight() * 2); + m_trackview->checkTrackHeight(false);*/ + if (m_verticalZoom == 2) m_trackview->setScale(m_scene->scale().x(), 2); + else m_trackview->setScale(m_scene->scale().x(), 1); + slotRebuildTrackHeaders(); } #include "trackview.moc" diff --git a/src/trackview.h b/src/trackview.h index 514cdd88..b938d441 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -86,7 +86,7 @@ private: private slots: void setCursorPos(int pos); void moveCursorPos(int pos); - void slotRebuildTrackHeaders(bool resetZoom = false); + void slotRebuildTrackHeaders(); void slotChangeTrackLock(int ix, bool lock); void slotVerticalZoomDown(); void slotVerticalZoomUp(); diff --git a/src/transition.cpp b/src/transition.cpp index 3fc7ac9c..cd3a4d78 100644 --- a/src/transition.cpp +++ b/src/transition.cpp @@ -268,7 +268,7 @@ OPERATIONTYPE Transition::operationMode(QPointF pos) { if (isItemLocked()) return NONE; - const double scale = projectScene()->scale(); + const double scale = projectScene()->scale().x(); double maximumOffset = 6 / scale; QRectF rect = sceneBoundingRect(); -- 2.39.2