#include "ToolAddRect.h" #include Room ToolAddRect::createRoom() { const Vertex *v2 = editManager->getHoveredVertex(); Room room; room.addVertex(v1); room.addVertex(Vertex(v1.getX(), v2->getY())); room.addVertex(*v2); room.addVertex(Vertex(v2->getX(), v1.getY())); return room; } ToolAddRect::ToolAddRect(EditManager *editManager) : Renderer(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)); } ToolAddRect::~ToolAddRect() { g_object_unref(G_OBJECT(image)); } void ToolAddRect::activate() { editManager->setSelectedObject(NULL); } void ToolAddRect::render(const Level &level, const Rectangle &rect, float scale) { if(!pressed || !editManager->getHoveredVertex()) return; Room room = createRoom(); if(editManager->polygonOk(room.getPolygon())) glColor4f(0.0f, 0.7f, 1.0f, 0.2f); else glColor4f(1.0f, 0.3f, 0.3f, 0.2f); fillPolygon(room.getPolygon()); glLineWidth(2.0f); glColor4f(0.0f, 0.7f, 1.0f, 0.7f); drawPolygon(room.getPolygon()); } bool ToolAddRect::buttonPress(unsigned int button, const Vertex *v) { if(button != 1) return false; if(!v) return false; if(!editManager->vertexOk(*v)) return false; pressed = true; v1 = *v; editManager->redraw(); sidebar.update(); return true; } bool ToolAddRect::buttonRelease(unsigned int button, const Vertex *v) { if(button != 1 || !pressed) return false; pressed = false; if(v) { Room room = createRoom(); if(editManager->polygonOk(room.getPolygon())) { editManager->addRoom(room); editManager->redraw(); sidebar.update(); return true; } } editManager->redraw(); sidebar.update(); return false; }