summaryrefslogtreecommitdiff
path: root/MainWindow.cpp
diff options
context:
space:
mode:
authorDaniel Jones <admin@danieljon.es>2020-06-27 22:17:26 +0930
committerDaniel Jones <admin@danieljon.es>2020-06-27 22:17:26 +0930
commitab76afb34070a33a2a8c09426408777580d984e4 (patch)
tree4a59c933d87734e784cd99677afe6fa6bfe4ac7e /MainWindow.cpp
parentde0a6e00949bb151d32e08ee0aedcb9517c1c0c0 (diff)
downloadfoxlogicgates-ab76afb34070a33a2a8c09426408777580d984e4.tar.gz
foxlogicgates-ab76afb34070a33a2a8c09426408777580d984e4.zip
Functionality: moving multiple gates works, smoothed moving single gate
Diffstat (limited to 'MainWindow.cpp')
-rw-r--r--MainWindow.cpp26
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;
}