summaryrefslogtreecommitdiff
path: root/muse2/muse/master/master.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'muse2/muse/master/master.cpp')
-rw-r--r--muse2/muse/master/master.cpp89
1 files changed, 84 insertions, 5 deletions
diff --git a/muse2/muse/master/master.cpp b/muse2/muse/master/master.cpp
index 76d22a2f..712d2985 100644
--- a/muse2/muse/master/master.cpp
+++ b/muse2/muse/master/master.cpp
@@ -216,8 +216,63 @@ void Master::draw(QPainter& p, const QRect& rect)
{
drawTickRaster(p, rect.x(), rect.y(),
rect.width(), rect.height(), 0);
+
+ if ((tool == MusEGui::DrawTool) && drawLineMode) {
+ p.setPen(Qt::black);
+ p.drawLine(line1x, line1y, line2x, line2y);
+ }
}
+ //---------------------------------------------------------
+// changeValRamp
+//---------------------------------------------------------
+
+void Master::newValRamp(int x1, int y1, int x2, int y2)
+{
+ MusECore::Undo operations;
+
+ int h = height();
+
+// loop through all tick positions between x1 and x2
+// remove all tempo changes and add new ones for changed
+
+ int tickStart = editor->rasterVal1(x1);
+ int tickEnd = editor->rasterVal2(x2);
+
+ const MusECore::TempoList* tl = &MusEGlobal::tempomap;
+ for (MusECore::ciTEvent i = tl->begin(); i != tl->end(); ++i) {
+ MusECore::TEvent* e = i->second;
+ int etick = mapx(i->first);
+ int endOldTick = i->first;
+ int stick = mapx(i->second->tick);
+ int startOldTick = i->second->tick;
+ //printf("stick=%d startOldTick=%d tickEnd=%d\n",stick, startOldTick, tickEnd);
+ if (startOldTick > tickStart && startOldTick < tickEnd ) {
+ operations.push_back(MusECore::UndoOp(MusECore::UndoOp::DeleteTempo, startOldTick, e->tempo));
+ //printf("tempo = %f %d %d\n", 60000000.0/e->tempo, endOldTick, startOldTick);
+ }
+ }
+
+ int priorTick = editor->rasterVal1(x1);
+ int tempoVal = int(60000000000.0/(280000 - y1));
+ operations.push_back(MusECore::UndoOp(MusECore::UndoOp::AddTempo, tickStart, tempoVal));
+ for (int i = x1; i < x2; i++) {
+ int tick = editor->rasterVal1(i);
+ if (tick > priorTick) {
+ double xproportion = double(tick-tickStart)/double(tickEnd-tickStart);
+ int yproportion = double(y2 - y1) * xproportion;
+ int yNew = y1 + yproportion;
+ int tempoVal = int(60000000000.0/(280000 - yNew));
+ //printf("tickStart %d tickEnd %d yNew %d xproportion %f yproportion %d\n", tickStart, tickEnd, yNew, xproportion, yproportion);
+ operations.push_back(MusECore::UndoOp(MusECore::UndoOp::AddTempo, tick, tempoVal));
+ priorTick = tick;
+ }
+ }
+
+ MusEGlobal::song->applyOperationGroup(operations);
+}
+
+
//---------------------------------------------------------
// viewMousePressEvent
//---------------------------------------------------------
@@ -225,8 +280,13 @@ void Master::draw(QPainter& p, const QRect& rect)
void Master::viewMousePressEvent(QMouseEvent* event)
{
start = event->pos();
+ int xpos = start.x();
+ int ypos = start.y();
+
MusEGui::Tool activeTool = tool;
-// bool shift = event->state() & ShiftButton;
+ bool ctrlKey = event->modifiers() & Qt::ControlModifier;
+
+ //MusECore::MidiController::ControllerType type = MusECore::midiControllerType(_controller->num());
switch (activeTool) {
case MusEGui::PointerTool:
@@ -245,6 +305,20 @@ void Master::viewMousePressEvent(QMouseEvent* event)
deleteVal(start.x(), start.x());
break;
+ case MusEGui::DrawTool:
+ if (drawLineMode) {
+ line2x = xpos;
+ line2y = ypos;
+ newValRamp(line1x, line1y, line2x, line2y);
+ drawLineMode = false;
+ }
+ else {
+ line2x = line1x = xpos;
+ line2y = line1y = ypos;
+ drawLineMode = true;
+ }
+ redraw();
+ break;
default:
break;
}
@@ -257,9 +331,12 @@ void Master::viewMousePressEvent(QMouseEvent* event)
void Master::viewMouseMoveEvent(QMouseEvent* event)
{
QPoint pos = event->pos();
-// QPoint dist = pos - start;
-// bool moving = dist.y() >= 3 || dist.y() <= 3 || dist.x() >= 3 || dist.x() <= 3; DELETETHIS
-
+ if (tool == MusEGui::DrawTool && drawLineMode) {
+ line2x = pos.x();
+ line2y = pos.y();
+ redraw();
+ return;
+ }
switch (drag) {
case DRAG_NEW:
newVal(start.x(), pos.x(), pos.y());
@@ -349,6 +426,9 @@ void Master::setTool(int t)
case MusEGui::PencilTool:
setCursor(QCursor(*pencilIcon, 4, 15));
break;
+ case MusEGui::DrawTool:
+ drawLineMode = false;
+ break;
default:
setCursor(QCursor(Qt::ArrowCursor));
break;
@@ -373,5 +453,4 @@ void Master::newVal(int x1, int x2, int y)
MusEGlobal::audio->msgAddTempo(xx1, int(60000000000.0/(280000 - y)), false);
redraw();
}
-
} // namespace MusEGui