diff options
author | Daniel Jones <admin@danieljon.es> | 2020-06-27 22:17:26 +0930 |
---|---|---|
committer | Daniel Jones <admin@danieljon.es> | 2020-06-27 22:17:26 +0930 |
commit | ab76afb34070a33a2a8c09426408777580d984e4 (patch) | |
tree | 4a59c933d87734e784cd99677afe6fa6bfe4ac7e /MainWindow.cpp | |
parent | de0a6e00949bb151d32e08ee0aedcb9517c1c0c0 (diff) | |
download | foxlogicgates-ab76afb34070a33a2a8c09426408777580d984e4.tar.gz foxlogicgates-ab76afb34070a33a2a8c09426408777580d984e4.zip |
Functionality: moving multiple gates works, smoothed moving single gate
Diffstat (limited to 'MainWindow.cpp')
-rw-r--r-- | MainWindow.cpp | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/MainWindow.cpp b/MainWindow.cpp index 3cc0439..20f7a8c 100644 --- a/MainWindow.cpp +++ b/MainWindow.cpp @@ -986,27 +986,33 @@ MainWindow::on_mouse_move(FXObject *sender, FXSelector sel, void *ptr) FXEvent* event = (FXEvent*)ptr; if (lmouse_down && !dragging_link && selected_gate) { - selected_gate->set_x(event->last_x-selected_gate->get_width()/2); - selected_gate->set_y(event->last_y-selected_gate->get_height()/2); + Coord currentPos { event->last_x, event->last_y }; + auto diff = currentPos - lastPos; + + selected_gate->set_x(selected_gate->get_x() + diff.X); + selected_gate->set_y(selected_gate->get_y() + diff.Y); } else if (lmouse_down && !dragging_link && !selected_gates.empty()) { + Coord currentPos { event->last_x, event->last_y }; + auto diff = currentPos - lastPos; + /* moving multiple gates */ - Gate *gate; - for (auto g = selected_gates.begin(); g != selected_gates.end(); ++g) + for (auto* gate : selected_gates) { - gate = (*g); - int gx, gy; - gx = gate->get_x(); - gy = gate->get_y(); - gate->set_x(event->last_x + (event->last_x - gx)); - gate->set_y(event->last_y + (event->last_y - gy)); + int gx = gate->get_x(); + int gy = gate->get_y(); + gate->set_x(diff.X + gx); + gate->set_y(diff.Y + gy); } } if (lmouse_down) draw(); + + lastPos = { event->last_x, event->last_y }; + return 1; } |