diff options
author | neoraider <devnull@localhost> | 2008-02-08 22:21:01 +0100 |
---|---|---|
committer | neoraider <devnull@localhost> | 2008-02-08 22:21:01 +0100 |
commit | acb1721e94a49a4941bb11dfc2f832c3848aa204 (patch) | |
tree | 6398053a11b46242974ae171d700418bd42c92b8 /ToolRotate.cpp | |
parent | a39525ca36e2c002332f914907f74061533c2b04 (diff) | |
download | zoomedit-acb1721e94a49a4941bb11dfc2f832c3848aa204.tar zoomedit-acb1721e94a49a4941bb11dfc2f832c3848aa204.zip |
zoomedit: Implemented Rotate tool; added simple gates.
Diffstat (limited to 'ToolRotate.cpp')
-rw-r--r-- | ToolRotate.cpp | 70 |
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; +} |