summaryrefslogtreecommitdiff
path: root/gtk2_ardour/canvas-note.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-03-26 11:11:47 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-03-26 11:11:47 +0000
commit6554200e66cc243e92818e6e74d4647d1c34ae9c (patch)
tree6caec38b29a11056007795f509951bb283407d9d /gtk2_ardour/canvas-note.cc
parent022c45361e77d5848f4a10abbe6a2cd3577db42c (diff)
hans' patches for MIDI note resizing++
git-svn-id: svn://localhost/ardour2/branches/3.0@3184 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/canvas-note.cc')
-rw-r--r--gtk2_ardour/canvas-note.cc29
1 files changed, 15 insertions, 14 deletions
diff --git a/gtk2_ardour/canvas-note.cc b/gtk2_ardour/canvas-note.cc
index 5e8eb6904f..b39deb0fed 100644
--- a/gtk2_ardour/canvas-note.cc
+++ b/gtk2_ardour/canvas-note.cc
@@ -12,38 +12,39 @@ bool
CanvasNote::on_event(GdkEvent* ev)
{
double event_x;
- static double middle_point, pressed_x, last_x;
+ static double middle_point, last_x;
Gdk::Cursor cursor;
static NoteEnd note_end;
+ Editing::MidiEditMode edit_mode = _region.get_trackview().editor.current_midi_edit_mode();
switch(ev->type) {
case GDK_BUTTON_PRESS:
- if (ev->button.button == 2) {
+ if (ev->button.button == 2 ||
+ (ev->button.button == 1 &&
+ edit_mode == Editing::MidiEditResize)) {
+ double region_start = _region.get_position_pixels();
event_x = ev->button.x;
- middle_point = x1() + (x2() - x1()) / 2.0L;
+ middle_point = region_start + x1() + (x2() - x1()) / 2.0L;
if(event_x <= middle_point) {
cursor = Gdk::Cursor(Gdk::LEFT_SIDE);
- last_x = x1();
note_end = NOTE_ON;
} else {
cursor = Gdk::Cursor(Gdk::RIGHT_SIDE);
- last_x = x2();
note_end = NOTE_OFF;
}
_item->grab(GDK_POINTER_MOTION_MASK | GDK_BUTTON_RELEASE_MASK, cursor, ev->motion.time);
if (_region.mouse_state() == MidiRegionView::SelectTouchDragging) {
- _mouse2_state = AbsoluteResize;
+ _note_state = AbsoluteResize;
} else {
- _mouse2_state = RelativeResize;
+ _note_state = RelativeResize;
}
- pressed_x = event_x;
-
_region.note_selected(this, true);
_region.begin_resizing(note_end);
+ last_x = event_x;
return true;
}
@@ -51,13 +52,13 @@ CanvasNote::on_event(GdkEvent* ev)
case GDK_MOTION_NOTIFY:
event_x = ev->motion.x;
- if (_mouse2_state == RelativeResize) {
+ if (_note_state == RelativeResize) {
_region.update_resizing(note_end, event_x - last_x, true);
last_x = event_x;
return true;
}
- if (_mouse2_state == AbsoluteResize) {
+ if (_note_state == AbsoluteResize) {
_region.update_resizing(note_end, event_x, false);
return true;
}
@@ -65,17 +66,17 @@ CanvasNote::on_event(GdkEvent* ev)
case GDK_BUTTON_RELEASE:
event_x = ev->button.x;
- switch (_mouse2_state) {
+ switch (_note_state) {
case RelativeResize: // Clicked
_item->ungrab(ev->button.time);
_region.commit_resizing(note_end, event_x, true);
- _mouse2_state = None;
+ _note_state = None;
return true;
case AbsoluteResize: // Clicked
_item->ungrab(ev->button.time);
_region.commit_resizing(note_end, event_x, false);
- _mouse2_state = None;
+ _note_state = None;
return true;
default: