]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/manipulator.cpp
Connect manipulator directly to event signals
[r2c2.git] / source / designer / manipulator.cpp
index aad20a084b84bcd0511192e25d2f7fb087502821..e9d6b955f05619e678223200398a8ea8db3b0c85 100644 (file)
@@ -17,12 +17,15 @@ using namespace std;
 using namespace Marklin;
 using namespace Msp;
 
-Manipulator::Manipulator(Designer &d, Selection &s):
+Manipulator::Manipulator(Designer &d, Graphics::EventSource &es, Selection &s):
        designer(d),
+       event_source(es),
        selection(s),
        mode(NONE),
        angle(0)
 {
+       event_source.signal_button_press.connect(sigc::mem_fun(this, &Manipulator::button_press));
+       event_source.signal_pointer_motion.connect(sigc::mem_fun(this, &Manipulator::pointer_motion));
        selection.signal_changed.connect(sigc::mem_fun(this, &Manipulator::selection_changed));
 }
 
@@ -306,11 +309,14 @@ void Manipulator::cancel()
        signal_done.emit(false);
 }
 
-void Manipulator::button_press(int, int, float, float, unsigned btn)
+void Manipulator::button_press(int, int, unsigned btn, unsigned)
 {
+       if(!mode)
+               return;
+
        if(btn==3)
                cancel();
-       else if(btn==1 && mode)
+       else if(btn==1)
        {
                Mode m = mode;
                mode = NONE;
@@ -350,10 +356,10 @@ void Manipulator::button_press(int, int, float, float, unsigned btn)
        }
 }
 
-void Manipulator::pointer_motion(int, int y, float gx, float gy)
+void Manipulator::pointer_motion(int x, int y)
 {
        pointer_y = y;
-       gpointer = Point(gx, gy, 0);
+       gpointer = designer.map_pointer_to_ground(x, event_source.get_height()-1-y);
 
        if(mode==MOVE)
        {
@@ -439,8 +445,8 @@ void Manipulator::pointer_motion(int, int y, float gx, float gy)
                                float ep_dir = i->track->get_endpoint_direction(j);
                                float c = cos(ep_dir);
                                float s = sin(ep_dir);
-                               float dx = gx-ep_pos.x;
-                               float dy = gy-ep_pos.y;
+                               float dx = gpointer.x-ep_pos.x;
+                               float dy = gpointer.y-ep_pos.y;
 
                                float len = dx*c+dy*s;
                                if(len<length)