summaryrefslogtreecommitdiffstats
path: root/ToolRotate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ToolRotate.cpp')
-rw-r--r--ToolRotate.cpp70
1 files changed, 70 insertions, 0 deletions
diff --git a/ToolRotate.cpp b/ToolRotate.cpp
new file mode 100644
index 0000000..6cd7626
--- /dev/null
+++ b/ToolRotate.cpp
@@ -0,0 +1,70 @@
+#include "ToolRotate.h"
+
+ToolRotate::ToolRotate(EditManager *editManager) : sidebar(editManager) {
+ this->editManager = editManager;
+
+ pressed = false;
+
+ image = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON);
+ g_object_ref_sink(G_OBJECT(image));
+}
+
+ToolRotate::~ToolRotate() {
+ g_object_unref(G_OBJECT(image));
+}
+
+void ToolRotate::activate() {
+ pressed = false;
+ editManager->highlightHoveredObject();
+ editManager->setSelectedObject(NULL);
+}
+
+bool ToolRotate::buttonPress(unsigned int button) {
+ if(button != 1 || !editManager->getHoveredObject())
+ return false;
+
+ pressed = true;
+ Vertex v = *editManager->getHoveredVertex() - editManager->getHoveredObject()->getCenter();
+ angle = atan2(v.getY(), v.getX());
+
+ editManager->setSelectedObject(editManager->getHoveredObject());
+
+ editManager->redraw();
+ sidebar.update();
+
+ return true;
+}
+
+bool ToolRotate::buttonRelease(unsigned int button) {
+ if(button != 1)
+ return false;
+
+ pressed = false;
+
+ editManager->setSelectedObject(NULL);
+
+ editManager->redraw();
+ sidebar.update();
+
+ return true;
+}
+
+bool ToolRotate::motion() {
+ if(!pressed) {
+ editManager->highlightHoveredObject();
+ return true;
+ }
+
+ if(!editManager->getHoveredVertex())
+ return false;
+
+ Vertex v = *editManager->getHoveredVertex() - editManager->getSelectedObject()->getCenter();
+
+ float a = atan2(v.getY(), v.getX());
+
+ editManager->getSelectedObject()->rotate(a-angle);
+
+ angle = a;
+
+ return false;
+}