diff options
author | Bent Bisballe Nyeng <deva@aasimon.org> | 2011-07-29 16:38:51 +0200 |
---|---|---|
committer | Bent Bisballe Nyeng <deva@aasimon.org> | 2011-07-29 16:38:51 +0200 |
commit | aab627accb4b57166259f0128cc16b88b4c1dc25 (patch) | |
tree | 9bd87e855d1961e37d6c7d856d74ac22df94d64f /dgedit/canvastoolthreshold.cc | |
parent | 805ee744e5482dbcb3b37b54c2442f89af29cc42 (diff) |
Ported threshold to canvastool.
Diffstat (limited to 'dgedit/canvastoolthreshold.cc')
-rw-r--r-- | dgedit/canvastoolthreshold.cc | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/dgedit/canvastoolthreshold.cc b/dgedit/canvastoolthreshold.cc new file mode 100644 index 0000000..6fa1b2e --- /dev/null +++ b/dgedit/canvastoolthreshold.cc @@ -0,0 +1,108 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/*************************************************************************** + * canvastoolthreshold.cc + * + * Fri Jul 29 16:27:00 CEST 2011 + * Copyright 2011 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of DrumGizmo. + * + * DrumGizmo is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * DrumGizmo is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with DrumGizmo; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +#include "canvastoolthreshold.h" + +#include <math.h> + +#define mapX(x) canvas->mapX(x) +#define mapY(x) canvas->mapY(x) +#define unmapX(x) canvas->unmapX(x) +#define unmapY(x) canvas->unmapY(x) + +CanvasToolThreshold::CanvasToolThreshold(Canvas *c) +{ + canvas = c; + threshold = 0.5; + threshold_is_moving = false; + + colThreshold = QColor(255, 127, 127); + colThresholdMoving = QColor(180, 0, 0); +} + +bool CanvasToolThreshold::mouseMoveEvent(QMouseEvent *event) +{ + if(event->button() != Qt::LeftButton) { + if(abs(event->y() - mapY(threshold)) < 2 || + abs(event->y() - mapY(-threshold)) < 2 ) { + canvas->setCursor(Qt::SplitVCursor); + return true; + } else { + canvas->setCursor(Qt::ArrowCursor); + } + } + + if(threshold_is_moving) { + float val = unmapY(event->y()); + if(fabs(val) > 1.0) val = 1.0; + threshold = fabs(val); + canvas->update(); + return true; + } + + return false; +} + +bool CanvasToolThreshold::mousePressEvent(QMouseEvent *event) +{ + if(event->button() == Qt::LeftButton) { + + // Check if threshold is being dragged. + if(abs(event->y() - mapY(threshold)) < 2 || + abs(event->y() - mapY(-threshold)) < 2 ) { + threshold_is_moving = true; + canvas->update(); + return true; + } + } + + return false; +} + +bool CanvasToolThreshold::mouseReleaseEvent(QMouseEvent *event) +{ + if(event->button() == Qt::LeftButton) { + if(threshold_is_moving) { + threshold_is_moving = false; + canvas->setCursor(Qt::ArrowCursor); + canvas->update(); + return true; + } + } + + return false; +} + +void CanvasToolThreshold::paintEvent(QPaintEvent *event, QPainter &painter) +{ + if(threshold_is_moving) painter.setPen(colThresholdMoving); + else painter.setPen(colThreshold); + painter.drawLine(event->rect().x(), mapY(threshold), + event->rect().x() + event->rect().width(), mapY(threshold)); + painter.drawLine(event->rect().x(), mapY(-threshold), + event->rect().x() + event->rect().width(), mapY(-threshold)); +} + |