|
From: Tapio V. <aa...@us...> - 2011-02-08 08:19:41
|
Module: editor
Branch: master
Commit: 0ce3d87cc67f65afe1eaaae32f30edc4bb25ddd3
Author: Tapio Vierros <tap...@gm...>
Date: Tue Feb 8 10:18:34 2011 +0200
Initial note zoom.
Doesn't maintain viewport position yet.
---
notegraphwidget.cc | 12 ++++++++++++
notegraphwidget.hh | 2 ++
notelabelmanager.cc | 14 ++++++++++++++
3 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/notegraphwidget.cc b/notegraphwidget.cc
index 0e2f850..a616f24 100644
--- a/notegraphwidget.cc
+++ b/notegraphwidget.cc
@@ -332,6 +332,14 @@ void NoteGraphWidget::mouseReleaseEvent(QMouseEvent *event)
void NoteGraphWidget::wheelEvent(QWheelEvent *event)
{
+ // Ctrl + Wheel = Zoom
+ if (event->modifiers() & Qt::ControlModifier && event->orientation() == Qt::Vertical) {
+ float numDegrees = event->delta() / 8;
+ float numSteps = numDegrees / 15;
+ zoom(numSteps);
+ event->accept();
+ return;
+ }
event->ignore();
}
@@ -401,6 +409,10 @@ void NoteGraphWidget::keyPressEvent(QKeyEvent *event)
move(selectedNote(), -1);
} else if (k == Qt::Key_Delete) { // Delete selected note(s)
del(selectedNote());
+ } else if (k == Qt::Key_Plus && (m & Qt::ControlModifier)) {
+ zoom(1.0);
+ } else if (k == Qt::Key_Minus && (m & Qt::ControlModifier)) {
+ zoom(-1.0);
} else {
QWidget::keyPressEvent(event);
}
diff --git a/notegraphwidget.hh b/notegraphwidget.hh
index 71deb05..eeedde7 100644
--- a/notegraphwidget.hh
+++ b/notegraphwidget.hh
@@ -54,6 +54,8 @@ public:
void doOperation(const Operation& op, Operation::OperationFlags flags = Operation::NORMAL);
+ void zoom(float steps);
+
int s2px(double sec) const;
double px2s(int px) const;
int n2px(double note) const;
diff --git a/notelabelmanager.cc b/notelabelmanager.cc
index 540f4da..79ae309 100644
--- a/notelabelmanager.cc
+++ b/notelabelmanager.cc
@@ -243,6 +243,20 @@ void NoteLabelManager::doOperation(const Operation& op, Operation::OperationFlag
}
}
+void NoteLabelManager::zoom(float steps) {
+ m_pixelsPerSecond += steps * 20;
+ if (m_pixelsPerSecond < 100) m_pixelsPerSecond = 100;
+ else if (m_pixelsPerSecond > 300) m_pixelsPerSecond = 300;
+
+ for (int i = 0; i < m_notes.size(); ++i) {
+ const Note &n = m_notes[i]->note();
+ m_notes[i]->setGeometry(s2px(n.begin), m_notes[i]->y(), s2px(n.length()), m_notes[i]->height());
+ }
+
+ update();
+ std::cout << "pixPerSec: " << m_pixelsPerSecond << std::endl;
+}
+
int NoteLabelManager::s2px(double sec) const { return sec * m_pixelsPerSecond; }
double NoteLabelManager::px2s(int px) const { return px / m_pixelsPerSecond; }
int NoteLabelManager::n2px(double note) const { return height() - 16.0 * note; }
|