summaryrefslogtreecommitdiff
path: root/dgedit/canvas.cc
diff options
context:
space:
mode:
Diffstat (limited to 'dgedit/canvas.cc')
-rw-r--r--dgedit/canvas.cc187
1 files changed, 24 insertions, 163 deletions
diff --git a/dgedit/canvas.cc b/dgedit/canvas.cc
index 44536b3..70ac219 100644
--- a/dgedit/canvas.cc
+++ b/dgedit/canvas.cc
@@ -34,6 +34,8 @@
#include <math.h>
+#include "canvastoolselections.h"
+
#define DEFYSCALE 200
Canvas::Canvas(QWidget *parent)
@@ -55,9 +57,6 @@ Canvas::Canvas(QWidget *parent)
threshold = 0.5;
threshold_is_moving = false;
- selection_is_moving_left = false;
- selection_is_moving_right = false;
- active_selection = NULL;
colBg = QColor(180, 200, 180);
colSec = QColor(160, 180, 160);
@@ -67,14 +66,12 @@ Canvas::Canvas(QWidget *parent)
colHalf = QColor(180, 180, 255);
colThreshold = QColor(255, 127, 127);
colThresholdMoving = QColor(180, 0, 0);
- colSelBg = QColor(255, 0, 0, 60);
- colSel = QColor(255, 0, 0, 160);
- colActiveSelBg = QColor(255, 255, 0, 60);
- colActiveSel = QColor(255, 255, 0, 160);
setCursor(Qt::ArrowCursor);
wav = QImage(width(), height(), QImage::Format_RGB32);
+
+ tools.push_back(new CanvasToolSelections(this));
}
Canvas::~Canvas()
@@ -157,41 +154,18 @@ void Canvas::mouseMoveEvent(QMouseEvent *event)
return;
}
- if(selection_is_moving_left) {
- float val = unmapX(event->x());
- if(val > active_selection->to) val = active_selection->to - 1;
- active_selection->from = val;
- update();
- emit selectionsChanged(_selections);
- return;
- }
-
- if(selection_is_moving_right) {
- float val = unmapX(event->x());
- if(val < active_selection->from) val = active_selection->from + 1;
- active_selection->to = val;
- update();
- emit selectionsChanged(_selections);
- return;
- }
-
if(event->button() != Qt::LeftButton) {
if(abs(event->y() - mapY(threshold)) < 2 ||
abs(event->y() - mapY(-threshold)) < 2 ) {
setCursor(Qt::SplitVCursor);
+ return;
} else {
setCursor(Qt::ArrowCursor);
}
+ }
- // Check if a selection is being dragged.
- QMap<int, Selection>::iterator i = _selections.begin();
- while(i != _selections.end()) {
- if(abs(event->x() - mapX(i.value().from)) < 2
- || abs(event->x() - mapX(i.value().to)) < 2) {
- setCursor(Qt::SplitHCursor);
- }
- i++;
- }
+ for(int i = 0; i < tools.size(); i++) {
+ if(tools[i]->mouseMoveEvent(event)) return;
}
}
@@ -206,48 +180,10 @@ void Canvas::mousePressEvent(QMouseEvent *event)
update();
return;
}
+ }
- // Check if a selection is being dragged.
- QMap<int, Selection>::iterator i = _selections.begin();
- while(i != _selections.end()) {
- if(abs(event->x() - mapX(i.value().from)) < 2) {
- active_selection = &i.value();
- selection_is_moving_left = true;
- emit activeSelectionChanged(i.value());
- return;
- }
-
- if(abs(event->x() - mapX(i.value().to)) < 2) {
- active_selection = &i.value();
- selection_is_moving_right = true;
- emit activeSelectionChanged(i.value());
- return;
- }
-
- i++;
- }
-
- // Check if a selection is being selected.
- i = _selections.begin();
- while(i != _selections.end()) {
- if(event->x() > mapX(i.value().from) &&
- event->x() < mapX(i.value().to)) {
- active_selection = &i.value();
- update();
- emit activeSelectionChanged(i.value());
- return;
- }
-
- i++;
- }
-
- // Make new selection
- int from = unmapX(event->x());
- _selections[from] = Selection(from, from);
- active_selection = &_selections[from];
- selection_is_moving_right = true;
- update();
- return;
+ for(int i = 0; i < tools.size(); i++) {
+ if(tools[i]->mousePressEvent(event)) return;
}
}
@@ -260,18 +196,19 @@ void Canvas::mouseReleaseEvent(QMouseEvent *event)
update();
return;
}
- if(selection_is_moving_left || selection_is_moving_right) {
- selection_is_moving_left = false;
- selection_is_moving_right = false;
- setCursor(Qt::ArrowCursor);
- update();
- return;
- }
+ }
+
+ for(int i = 0; i < tools.size(); i++) {
+ if(tools[i]->mouseReleaseEvent(event)) return;
}
}
-void Canvas::resizeEvent(QResizeEvent *)
+void Canvas::resizeEvent(QResizeEvent *event)
{
+ for(int i = 0; i < tools.size(); i++) {
+ tools[i]->resizeEvent(event);
+ }
+
wav = QImage(width(), height(), QImage::Format_RGB32);
updateWav();
update();
@@ -352,36 +289,15 @@ void Canvas::paintEvent(QPaintEvent *event)
painter.drawLine(event->rect().x(), mapY(-threshold),
event->rect().x() + event->rect().width(), mapY(-threshold));
- int pos = unmapX(event->rect().x());
- int width = unmapX(event->rect().width());
- QMap<int, Selection>::iterator i = _selections.begin();
- while(i != _selections.end()) {
- int from = i.value().from;
- int to = i.value().to;
- int fadein = i.value().fadein;
- int fadeout = i.value().fadeout;
- if(from > pos + width || to + width < pos) { i++; continue; }
- if(active_selection == &i.value()) {
- painter.setBrush(colActiveSelBg);
- painter.setPen(colActiveSel);
- } else {
- painter.setBrush(colSelBg);
- painter.setPen(colSel);
- }
- painter.drawRect(mapX(from), mapY(-1.0), mapX(to) - mapX(from), mapY(1.0) - mapY(-1.0));
- painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(-1.0));
- painter.drawLine(mapX(from), mapY(0.0), mapX(from + fadein), mapY(1.0));
- painter.drawLine(mapX(to - fadeout), mapY(-1.0), mapX(to), mapY(0.0));
- painter.drawLine(mapX(to - fadeout), mapY(1.0), mapX(to), mapY(0.0));
- i++;
+ for(int i = 0; i < tools.size(); i++) {
+ tools[i]->paintEvent(event, painter);
}
}
void Canvas::keyReleaseEvent(QKeyEvent *event)
{
- if(active_selection && event->key() == Qt::Key_Delete) {
- _selections.remove(active_selection->from);
- update();
+ for(int i = 0; i < tools.size(); i++) {
+ tools[i]->keyReleaseEvent(event);
}
}
@@ -422,58 +338,3 @@ void Canvas::setYOffset(float offset)
updateWav();
update();
}
-
-void Canvas::autoCreateSelections()
-{
- for(size_t i = 0; i < size; i++) {
- if(fabs(data[i]) > fabs(threshold)) {
- int from = i;
-
- if(data[from] > 0.0) {
- while(data[from] > data[from-1] // Falling
- && data[from-1] > 0.0 // Not crossing zero
- ) {
- from--;
- }
- } else if(data[from] < 0.0) {
- while(data[from] < data[from-1] // Rising
- && data[from-1] < 0.0 // Not crossing zero
- ) {
- from--;
- }
- }
-
- int minsize = 100; // attack.
- float minval = 0.00003; // noise floor
- int to = i;
- float runavg = fabs(data[from]);
- while((runavg > minval ||
- to < from + minsize) &&
- to < (int)size) {
- double p = 0.9;
- runavg = runavg * p + fabs(data[to]) * (1 - p);
- to++;
- }
- _selections[from] = Selection(from, to, 2, (to - from) / 3);
-
- i = to+1;
- }
- }
- update();
- emit selectionsChanged(_selections);
-}
-
-void Canvas::clearSelections()
-{
- _selections.clear();
- selection_is_moving_left = false;
- selection_is_moving_right = false;
- setCursor(Qt::ArrowCursor);
- update();
- emit selectionsChanged(_selections);
-}
-
-Selections Canvas::selections()
-{
- return _selections;
-}