fix up dragging notes in percussive mode
authorPaul Davis <paul@linuxaudiosystems.com>
Wed, 7 Oct 2009 15:05:52 +0000 (15:05 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Wed, 7 Oct 2009 15:05:52 +0000 (15:05 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@5749 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/canvas-hit.cc
gtk2_ardour/diamond.cc
gtk2_ardour/diamond.h
gtk2_ardour/midi_region_view.cc

index c9908ac60c4577cb500aad6de064e11454a28570..23a9a1913767928255c947a8540962bbd57c0cb8 100644 (file)
@@ -22,39 +22,7 @@ CanvasHit::on_event(GdkEvent* ev)
 void 
 CanvasHit::move_event(double dx, double dy)
 {
-       move (dx, dy);
-
-#if 0
-       cerr << "Move event by " << dx << " " << dy << endl;
-
-       points->coords[0] += dx;
-       points->coords[1] += dy;
-
-       points->coords[2] += dx;
-       points->coords[3] += dy;
-
-       points->coords[4] += dx;
-       points->coords[5] += dy;
-
-       points->coords[6] += dx;
-       points->coords[7] += dy;
-
-       cerr << "Coords now " << endl
-            << '\t' << points->coords[0] << ", " << points->coords[1] << endl
-            << '\t' << points->coords[2] << ", " << points->coords[3] << endl
-            << '\t' << points->coords[4] << ", " << points->coords[5] << endl
-            << '\t' << points->coords[6] << ", " << points->coords[7] << endl
-               ;
-
-       if (_text) {
-               _text->property_x() = _text->property_x() + dx;
-               _text->property_y() = _text->property_y() + dy;
-       }
-
-       hide ();
-       show ();
-       // request_update ();
-#endif
+       move_by (dx, dy);
 }
 
 } // namespace Gnome
index 3cc198fb981d54c14eae6658dbd03e2b2e5cf76e..48c0dd4b680309da4ef5a7f22db91e727c76a23a 100644 (file)
@@ -24,10 +24,13 @@ using namespace Gnome::Art;
 
 Diamond::Diamond(Group& group, double height)
        : Polygon(group)
+       , _x (0)
+       , _y (0)
+       , _h (height)
 {
        points = gnome_canvas_points_new (4);
        g_object_set (gobj(), "points", points, NULL);
-       set_height (height);
+       move_to (0, 0);
 }
 
 Diamond::~Diamond ()
@@ -36,24 +39,47 @@ Diamond::~Diamond ()
 }
 
 void
-Diamond::set_height(double height)
+Diamond::set_height (double height)
 {
-       double x1, y1, x2, y2; 
-       
-       get_bounds (x1, y1, x2, y2);
+       _h = height;
+       move_to (_x, _y);
+}
+
+void
+Diamond::move_to (double x, double y)
+{
+       _x = x;
+       _y = y;
 
-       points->coords[0] = x1;
-       points->coords[1] = y1 + height*2.0;
+       points->coords[0] = _x;
+       points->coords[1] = _y + (_h * 2.0);
 
-       points->coords[2] = x2 + height;
-       points->coords[3] = y1 + height;
+       points->coords[2] = _x + _h;
+       points->coords[3] = _y + _h;
 
-       points->coords[4] = x1;
-       points->coords[5] = y2;
-       
-       points->coords[6] = x2 -height;
-       points->coords[7] = y2 + height;
+       points->coords[4] = _x;
+       points->coords[5] = _y;
        
+       points->coords[6] = _x - _h;
+       points->coords[7] = _y + _h;
+
        g_object_set (gobj(), "points", points, NULL);
 }
 
+void
+Diamond::move_by (double dx, double dy)
+{
+       points->coords[0] += dx;
+       points->coords[1] += dy;
+
+       points->coords[2] += dx;
+       points->coords[3] += dy;
+
+       points->coords[4] += dx;
+       points->coords[5] += dy;
+
+       points->coords[6] += dx;
+       points->coords[7] += dy;
+
+       g_object_set (gobj(), "points", points, NULL);
+}
index adfb289c6fc2b51503d0a0938be557035f6829b5..d9bcf3cff8625c6dd750828459188c4d2d379189 100644 (file)
@@ -34,9 +34,14 @@ class Diamond : public Polygon
        Diamond(Group& group, double height);
        ~Diamond ();
 
+       void move_to (double x, double y);
+       void move_by (double dx, double dy);
        void set_height(double height);
 
   protected:
+       double _x;
+       double _y;
+       double _h;
        GnomeCanvasPoints* points;
 };
 
index e9bffa13218ba97791a1817454175635033b3493..3e2fd5470d5d6ae025e209f7937a5fe28d4ce306 100644 (file)
@@ -1235,7 +1235,7 @@ MidiRegionView::update_hit (CanvasHit* ev)
        const double diamond_size = midi_stream_view()->note_height() / 2.0;
        const double y = midi_stream_view()->note_to_y(note->note()) + ((diamond_size-2) / 4.0);
 
-       ev->move_event (x, y);
+       ev->move_to (x, y);
 }
 
 /** Add a MIDI note to the view (with length).