]> git.tdb.fi Git - r2c2.git/blobdiff - source/designer/manipulator.cpp
Rewrite input even handling
[r2c2.git] / source / designer / manipulator.cpp
index c103314564a69daead55d65c255382681819b3e1..d1e458baed645445fd11f1853b2fb377e0632bc6 100644 (file)
@@ -10,15 +10,15 @@ using namespace std;
 using namespace R2C2;
 using namespace Msp;
 
-Manipulator::Manipulator(Designer &d, Graphics::EventSource &es, Selection &s):
+Manipulator::Manipulator(Designer &d, Input::Mouse &m, Selection &s):
        designer(d),
-       event_source(es),
+       mouse(m),
        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));
+       mouse.signal_button_press.connect(sigc::mem_fun(this, &Manipulator::button_press));
+       mouse.signal_axis_motion.connect(sigc::mem_fun(this, &Manipulator::axis_motion));
        selection.signal_changed.connect(sigc::mem_fun(this, &Manipulator::selection_changed));
 }
 
@@ -47,8 +47,6 @@ void Manipulator::start_elevate()
        if(mode)
                cancel();
 
-       elev_origin = pointer_y;
-
        mode = ELEVATE;
 }
 
@@ -316,7 +314,7 @@ void Manipulator::cancel()
        signal_done.emit(false);
 }
 
-void Manipulator::button_press(int, int, unsigned btn, unsigned)
+void Manipulator::button_press(unsigned btn)
 {
        if(!mode)
                return;
@@ -363,10 +361,13 @@ void Manipulator::button_press(int, int, unsigned btn, unsigned)
        }
 }
 
-void Manipulator::pointer_motion(int x, int y)
+void Manipulator::axis_motion(unsigned axis, float value, float change)
 {
-       pointer_y = event_source.get_height()-1-y;
-       gpointer = designer.map_pointer_to_ground(x, pointer_y);
+       if(axis==0)
+               pointer.x = value;
+       else if(axis==1)
+               pointer.y = value;
+       gpointer = designer.map_pointer_to_ground(pointer);
 
        if(mode==MOVE)
        {
@@ -380,7 +381,7 @@ void Manipulator::pointer_motion(int x, int y)
 
                const set<Track *> &ltracks = designer.get_layout().get_tracks();
                float limit = max(designer.get_layout().get_catalogue().get_gauge(),
-                       designer.get_camera_controller().get_view_scale()*5/event_source.get_height());
+                       designer.get_camera_controller().get_view_scale()/100.0f);
                MTrack *snapped = 0;
                for(set<Track *>::const_iterator i=ltracks.begin(); (i!=ltracks.end() && !snapped); ++i)
                {
@@ -425,9 +426,9 @@ void Manipulator::pointer_motion(int x, int y)
                        i->track->set_rotation(angle+i->rot);
                }
        }
-       else if(mode==ELEVATE)
+       else if(mode==ELEVATE && axis==1)
        {
-               float dz = (pointer_y-elev_origin)/1000.;
+               float dz = -change;
 
                signal_status.emit(format("Elevation: %+.0fmm (%.0fmm)", dz*1000, (center.z+dz)*1000));