X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fdesigner%2Fmanipulator.cpp;fp=source%2Fdesigner%2Fmanipulator.cpp;h=d1e458baed645445fd11f1853b2fb377e0632bc6;hb=ec1f75d72e5c4f7f7c9dafdf80f58c30ffb1a855;hp=c103314564a69daead55d65c255382681819b3e1;hpb=29433673a88dffd61ecb8e6c8fe6ab38e2012586;p=r2c2.git diff --git a/source/designer/manipulator.cpp b/source/designer/manipulator.cpp index c103314..d1e458b 100644 --- a/source/designer/manipulator.cpp +++ b/source/designer/manipulator.cpp @@ -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 <racks = 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::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));