zoomedit: Changed some interfaces.
This commit is contained in:
parent
0ea1d38865
commit
77b187b8eb
16 changed files with 63 additions and 56 deletions
15
Drawer.cpp
15
Drawer.cpp
|
@ -38,25 +38,30 @@ gboolean Drawer::eventHandler(GtkWidget *widget, GdkEvent *event, Drawer *drawer
|
|||
|
||||
case GDK_MOTION_NOTIFY:
|
||||
drawer->updateHoveredPoint(event->motion.x, event->motion.y);
|
||||
drawer->window->getActiveTool()->getEventHandler()->motion();
|
||||
drawer->window->getActiveTool()->getEventHandler()->motion(
|
||||
drawer->window->getEditManager().getHoveredVertex(), drawer->scale);
|
||||
return TRUE;
|
||||
|
||||
case GDK_ENTER_NOTIFY:
|
||||
drawer->updateHoveredPoint(event->crossing.x, event->crossing.y);
|
||||
drawer->window->getActiveTool()->getEventHandler()->motion();
|
||||
drawer->window->getActiveTool()->getEventHandler()->motion(
|
||||
drawer->window->getEditManager().getHoveredVertex(), drawer->scale);
|
||||
return TRUE;
|
||||
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
drawer->window->getEditManager().setHoveredVertex(NULL, drawer->scale);
|
||||
drawer->window->getActiveTool()->getEventHandler()->motion();
|
||||
drawer->window->getActiveTool()->getEventHandler()->motion(
|
||||
drawer->window->getEditManager().getHoveredVertex(), drawer->scale);
|
||||
return TRUE;
|
||||
|
||||
case GDK_BUTTON_PRESS:
|
||||
drawer->window->getActiveTool()->getEventHandler()->buttonPress(event->button.button);
|
||||
drawer->window->getActiveTool()->getEventHandler()->buttonPress(event->button.button,
|
||||
drawer->window->getEditManager().getHoveredVertex());
|
||||
return TRUE;
|
||||
|
||||
case GDK_BUTTON_RELEASE:
|
||||
drawer->window->getActiveTool()->getEventHandler()->buttonRelease(event->button.button);
|
||||
drawer->window->getActiveTool()->getEventHandler()->buttonRelease(event->button.button,
|
||||
drawer->window->getEditManager().getHoveredVertex());
|
||||
return TRUE;
|
||||
|
||||
case GDK_SCROLL:
|
||||
|
|
|
@ -1,13 +1,17 @@
|
|||
#ifndef EVENTHANDLER_H_
|
||||
#define EVENTHANDLER_H_
|
||||
|
||||
#include "Vertex.h"
|
||||
|
||||
|
||||
class EventHandler {
|
||||
public:
|
||||
virtual ~EventHandler() {}
|
||||
|
||||
virtual bool buttonPress(unsigned int button) {return false;}
|
||||
virtual bool buttonRelease(unsigned int button) {return false;}
|
||||
virtual bool motion() {return false;}
|
||||
virtual bool buttonPress(unsigned int button, const Vertex *v) {return false;}
|
||||
virtual bool buttonRelease(unsigned int button, const Vertex *v) {return false;}
|
||||
virtual bool motion(const Vertex *v) {return false;}
|
||||
virtual bool motion(const Vertex *v, float scale) {return motion(v);}
|
||||
};
|
||||
|
||||
#endif /*EVENTHANDLER_H_*/
|
||||
|
|
|
@ -11,8 +11,7 @@ class LevelObject : public Object {
|
|||
LevelObject *parent;
|
||||
|
||||
public:
|
||||
LevelObject() : parent(NULL) {}
|
||||
LevelObject(LevelObject *p) : parent(p) {}
|
||||
LevelObject(LevelObject *p = NULL) : parent(p) {}
|
||||
virtual ~LevelObject() {}
|
||||
|
||||
LevelObject* getParent() const {
|
||||
|
@ -23,7 +22,8 @@ class LevelObject : public Object {
|
|||
return std::vector<SharedPtr<LevelObject> >();
|
||||
}
|
||||
|
||||
virtual bool hit(const Vertex &v, float scale) const = 0;
|
||||
virtual bool hit(const Vertex &v) const {return false;}
|
||||
virtual bool hit(const Vertex &v, float scale) const {return hit(v);};
|
||||
virtual int getPriority() const {return 0;}
|
||||
|
||||
virtual void move(float x, float y) {}
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
|
||||
class PlayerStart : public Vertex3d, public LevelObject {
|
||||
public:
|
||||
virtual bool hit(const Vertex &v, float scale) const {
|
||||
virtual bool hit(const Vertex &v) const {
|
||||
return (v.distanceSq(Vertex(getX(), getZ())) < 0.09);
|
||||
}
|
||||
|
||||
|
|
2
Portal.h
2
Portal.h
|
@ -76,7 +76,7 @@ class Portal : public LevelObject, public VertexProvider {
|
|||
return children;
|
||||
}
|
||||
|
||||
virtual bool hit(const Vertex &v, float scale) const {return createPolygon().contains(v);}
|
||||
virtual bool hit(const Vertex &v) const {return createPolygon().contains(v);}
|
||||
virtual int getPriority() const {return 1;}
|
||||
|
||||
virtual const char* getType() const {
|
||||
|
|
2
Room.h
2
Room.h
|
@ -39,7 +39,7 @@ class Room : public LevelObject, private VertexProvider, private EdgeProvider {
|
|||
|
||||
const Polygon& getPolygon() const {return polygon;}
|
||||
|
||||
virtual bool hit(const Vertex &v, float scale) const {return polygon.contains(v);}
|
||||
virtual bool hit(const Vertex &v) const {return polygon.contains(v);}
|
||||
virtual int getPriority() const {return 0;}
|
||||
|
||||
virtual std::vector<SharedPtr<LevelObject> > getChildren();
|
||||
|
|
|
@ -49,17 +49,17 @@ void ToolAddPolygon::render(const Level &level, const Rectangle &rect, float sca
|
|||
}
|
||||
}
|
||||
|
||||
bool ToolAddPolygon::buttonPress(unsigned int button) {
|
||||
bool ToolAddPolygon::buttonPress(unsigned int button, const Vertex *v) {
|
||||
if(button != 1)
|
||||
return false;
|
||||
|
||||
if(!editManager->getHoveredVertex())
|
||||
if(!v)
|
||||
return false;
|
||||
|
||||
if(!editManager->vertexOk(*editManager->getHoveredVertex(), &newRoom))
|
||||
if(!editManager->vertexOk(*v, &newRoom))
|
||||
return false;
|
||||
|
||||
newRoom.addVertex(*editManager->getHoveredVertex());
|
||||
newRoom.addVertex(*v);
|
||||
|
||||
editManager->redraw();
|
||||
sidebar.update();
|
||||
|
|
|
@ -53,7 +53,7 @@ class ToolAddPolygon : public Tool, private EventHandler, private Renderer {
|
|||
|
||||
virtual void render(const Level &level, const Rectangle &rect, float scale);
|
||||
|
||||
virtual bool buttonPress(unsigned int button);
|
||||
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||
|
||||
virtual Sidebar* getSidebar() {
|
||||
return &sidebar;
|
||||
|
|
|
@ -50,18 +50,18 @@ void ToolAddRect::render(const Level &level, const Rectangle &rect, float scale)
|
|||
drawPolygon(room.getPolygon());
|
||||
}
|
||||
|
||||
bool ToolAddRect::buttonPress(unsigned int button) {
|
||||
bool ToolAddRect::buttonPress(unsigned int button, const Vertex *v) {
|
||||
if(button != 1)
|
||||
return false;
|
||||
|
||||
if(!editManager->getHoveredVertex())
|
||||
if(!v)
|
||||
return false;
|
||||
|
||||
if(!editManager->vertexOk(*editManager->getHoveredVertex()))
|
||||
if(!editManager->vertexOk(*v))
|
||||
return false;
|
||||
|
||||
pressed = true;
|
||||
v1 = *editManager->getHoveredVertex();
|
||||
v1 = *v;
|
||||
|
||||
editManager->redraw();
|
||||
sidebar.update();
|
||||
|
@ -69,13 +69,13 @@ bool ToolAddRect::buttonPress(unsigned int button) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ToolAddRect::buttonRelease(unsigned int button) {
|
||||
bool ToolAddRect::buttonRelease(unsigned int button, const Vertex *v) {
|
||||
if(button != 1 || !pressed)
|
||||
return false;
|
||||
|
||||
pressed = false;
|
||||
|
||||
if(editManager->getHoveredVertex()) {
|
||||
if(v) {
|
||||
Room room = createRoom();
|
||||
|
||||
if(editManager->polygonOk(room.getPolygon())) {
|
||||
|
|
|
@ -54,8 +54,8 @@ class ToolAddRect : public Tool, public EventHandler, public Renderer {
|
|||
|
||||
virtual void render(const Level &level, const Rectangle &rect, float scale);
|
||||
|
||||
virtual bool buttonPress(unsigned int button);
|
||||
virtual bool buttonRelease(unsigned int button);
|
||||
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||
virtual bool buttonRelease(unsigned int button, const Vertex *v);
|
||||
|
||||
virtual Sidebar* getSidebar() {
|
||||
return &sidebar;
|
||||
|
|
10
ToolGrab.cpp
10
ToolGrab.cpp
|
@ -19,12 +19,12 @@ void ToolGrab::activate() {
|
|||
editManager->setSelectedObject(NULL);
|
||||
}
|
||||
|
||||
bool ToolGrab::buttonPress(unsigned int button) {
|
||||
bool ToolGrab::buttonPress(unsigned int button, const Vertex *v) {
|
||||
if(button != 1 || !editManager->getHoveredObject())
|
||||
return false;
|
||||
|
||||
pressed = true;
|
||||
grabbedVertex = *editManager->getHoveredVertex();
|
||||
grabbedVertex = *v;
|
||||
|
||||
editManager->setSelectedObject(editManager->getHoveredObject());
|
||||
|
||||
|
@ -34,7 +34,7 @@ bool ToolGrab::buttonPress(unsigned int button) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ToolGrab::buttonRelease(unsigned int button) {
|
||||
bool ToolGrab::buttonRelease(unsigned int button, const Vertex *v) {
|
||||
if(button != 1)
|
||||
return false;
|
||||
|
||||
|
@ -48,14 +48,12 @@ bool ToolGrab::buttonRelease(unsigned int button) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ToolGrab::motion() {
|
||||
bool ToolGrab::motion(const Vertex *v) {
|
||||
if(!pressed) {
|
||||
editManager->highlightHoveredObject();
|
||||
return true;
|
||||
}
|
||||
|
||||
const Vertex *v = editManager->getHoveredVertex();
|
||||
|
||||
if(!v)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -47,9 +47,9 @@ class ToolGrab : public Tool, public EventHandler {
|
|||
return this;
|
||||
}
|
||||
|
||||
virtual bool buttonPress(unsigned int button);
|
||||
virtual bool buttonRelease(unsigned int button);
|
||||
virtual bool motion();
|
||||
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||
virtual bool buttonRelease(unsigned int button, const Vertex *v);
|
||||
virtual bool motion(const Vertex *v);
|
||||
|
||||
virtual Sidebar* getSidebar() {
|
||||
return &sidebar;
|
||||
|
|
|
@ -21,13 +21,13 @@ void ToolRotate::activate() {
|
|||
editManager->setSelectedObject(NULL);
|
||||
}
|
||||
|
||||
bool ToolRotate::buttonPress(unsigned int button) {
|
||||
if(button != 1 || !editManager->getHoveredObject())
|
||||
bool ToolRotate::buttonPress(unsigned int button, const Vertex *v) {
|
||||
if(button != 1 || !v)
|
||||
return false;
|
||||
|
||||
pressed = true;
|
||||
valid = false;
|
||||
v0 = v = *editManager->getHoveredVertex();
|
||||
vertexRot = vertex = *v;
|
||||
|
||||
editManager->setSelectedObject(editManager->getHoveredObject());
|
||||
|
||||
|
@ -37,7 +37,7 @@ bool ToolRotate::buttonPress(unsigned int button) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ToolRotate::buttonRelease(unsigned int button) {
|
||||
bool ToolRotate::buttonRelease(unsigned int button, const Vertex *v) {
|
||||
if(button != 1)
|
||||
return false;
|
||||
|
||||
|
@ -51,22 +51,22 @@ bool ToolRotate::buttonRelease(unsigned int button) {
|
|||
return true;
|
||||
}
|
||||
|
||||
bool ToolRotate::motion() {
|
||||
bool ToolRotate::motion(const Vertex *v, float scale) {
|
||||
if(!pressed) {
|
||||
editManager->highlightHoveredObject();
|
||||
return true;
|
||||
}
|
||||
|
||||
if(!editManager->getHoveredVertex())
|
||||
if(!v)
|
||||
return false;
|
||||
|
||||
v = *editManager->getHoveredVertex();
|
||||
vertex = *v;
|
||||
|
||||
float a = atan2((v-v0).getY(), (v-v0).getX());
|
||||
float a = atan2((vertex-vertexRot).getY(), (vertex-vertexRot).getX());
|
||||
|
||||
if(v0.distanceSq(v) > 0.04f) {
|
||||
if(vertexRot.distanceSq(vertex) > (10*10)/(scale*scale)) {
|
||||
if(valid)
|
||||
editManager->getSelectedObject()->rotate(v0, a-angle);
|
||||
editManager->getSelectedObject()->rotate(vertexRot, a-angle);
|
||||
|
||||
else
|
||||
valid = true;
|
||||
|
@ -85,14 +85,14 @@ void ToolRotate::render(const Level &level, const Rectangle &rect, float scale)
|
|||
if(pressed && valid) {
|
||||
glLineWidth(1.0f);
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 0.7f);
|
||||
drawCircleDotted(v0, v0.distance(v), 64, 16, angle);
|
||||
drawCircleDotted(vertexRot, vertexRot.distance(vertex), 64, 16, angle);
|
||||
|
||||
glLineWidth(2.0f);
|
||||
|
||||
glBegin(GL_LINES);
|
||||
|
||||
glVertex2f(v0.getX(), v0.getY());
|
||||
glVertex2f(v.getX(), v.getY());
|
||||
glVertex2f(vertexRot.getX(), vertexRot.getY());
|
||||
glVertex2f(vertex.getX(), vertex.getY());
|
||||
|
||||
glEnd();
|
||||
}
|
||||
|
|
|
@ -15,7 +15,7 @@ class ToolRotate : public Tool, private EventHandler, private Renderer {
|
|||
|
||||
bool pressed, valid;
|
||||
float angle;
|
||||
Vertex v0, v;
|
||||
Vertex vertexRot, vertex;
|
||||
|
||||
// prevent shallow copy
|
||||
ToolRotate(const ToolRotate &t);
|
||||
|
@ -47,9 +47,9 @@ class ToolRotate : public Tool, private EventHandler, private Renderer {
|
|||
return this;
|
||||
}
|
||||
|
||||
virtual bool buttonPress(unsigned int button);
|
||||
virtual bool buttonRelease(unsigned int button);
|
||||
virtual bool motion();
|
||||
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||
virtual bool buttonRelease(unsigned int button, const Vertex *v);
|
||||
virtual bool motion(const Vertex *v, float scale);
|
||||
|
||||
virtual Renderer *getRenderer() {
|
||||
return this;
|
||||
|
|
|
@ -12,7 +12,7 @@ ToolSelector::~ToolSelector() {
|
|||
g_object_unref(G_OBJECT(image));
|
||||
}
|
||||
|
||||
bool ToolSelector::buttonPress(unsigned int button) {
|
||||
bool ToolSelector::buttonPress(unsigned int button, const Vertex *v) {
|
||||
if(button != 1)
|
||||
return false;
|
||||
|
||||
|
|
|
@ -46,9 +46,9 @@ class ToolSelector : public Tool, public EventHandler {
|
|||
return this;
|
||||
}
|
||||
|
||||
virtual bool buttonPress(unsigned int button);
|
||||
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||
|
||||
virtual bool motion() {
|
||||
virtual bool motion(const Vertex *v) {
|
||||
editManager->highlightHoveredObject();
|
||||
|
||||
return true;
|
||||
|
|
Reference in a new issue