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:
|
case GDK_MOTION_NOTIFY:
|
||||||
drawer->updateHoveredPoint(event->motion.x, event->motion.y);
|
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;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_ENTER_NOTIFY:
|
case GDK_ENTER_NOTIFY:
|
||||||
drawer->updateHoveredPoint(event->crossing.x, event->crossing.y);
|
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;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_LEAVE_NOTIFY:
|
case GDK_LEAVE_NOTIFY:
|
||||||
drawer->window->getEditManager().setHoveredVertex(NULL, drawer->scale);
|
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;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_BUTTON_PRESS:
|
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;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_BUTTON_RELEASE:
|
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;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_SCROLL:
|
case GDK_SCROLL:
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
#ifndef EVENTHANDLER_H_
|
#ifndef EVENTHANDLER_H_
|
||||||
#define EVENTHANDLER_H_
|
#define EVENTHANDLER_H_
|
||||||
|
|
||||||
|
#include "Vertex.h"
|
||||||
|
|
||||||
|
|
||||||
class EventHandler {
|
class EventHandler {
|
||||||
public:
|
public:
|
||||||
virtual ~EventHandler() {}
|
virtual ~EventHandler() {}
|
||||||
|
|
||||||
virtual bool buttonPress(unsigned int button) {return false;}
|
virtual bool buttonPress(unsigned int button, const Vertex *v) {return false;}
|
||||||
virtual bool buttonRelease(unsigned int button) {return false;}
|
virtual bool buttonRelease(unsigned int button, const Vertex *v) {return false;}
|
||||||
virtual bool motion() {return false;}
|
virtual bool motion(const Vertex *v) {return false;}
|
||||||
|
virtual bool motion(const Vertex *v, float scale) {return motion(v);}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*EVENTHANDLER_H_*/
|
#endif /*EVENTHANDLER_H_*/
|
||||||
|
|
|
@ -11,8 +11,7 @@ class LevelObject : public Object {
|
||||||
LevelObject *parent;
|
LevelObject *parent;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
LevelObject() : parent(NULL) {}
|
LevelObject(LevelObject *p = NULL) : parent(p) {}
|
||||||
LevelObject(LevelObject *p) : parent(p) {}
|
|
||||||
virtual ~LevelObject() {}
|
virtual ~LevelObject() {}
|
||||||
|
|
||||||
LevelObject* getParent() const {
|
LevelObject* getParent() const {
|
||||||
|
@ -23,7 +22,8 @@ class LevelObject : public Object {
|
||||||
return std::vector<SharedPtr<LevelObject> >();
|
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 int getPriority() const {return 0;}
|
||||||
|
|
||||||
virtual void move(float x, float y) {}
|
virtual void move(float x, float y) {}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
class PlayerStart : public Vertex3d, public LevelObject {
|
class PlayerStart : public Vertex3d, public LevelObject {
|
||||||
public:
|
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);
|
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;
|
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 int getPriority() const {return 1;}
|
||||||
|
|
||||||
virtual const char* getType() const {
|
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;}
|
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 int getPriority() const {return 0;}
|
||||||
|
|
||||||
virtual std::vector<SharedPtr<LevelObject> > getChildren();
|
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)
|
if(button != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!editManager->getHoveredVertex())
|
if(!v)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!editManager->vertexOk(*editManager->getHoveredVertex(), &newRoom))
|
if(!editManager->vertexOk(*v, &newRoom))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
newRoom.addVertex(*editManager->getHoveredVertex());
|
newRoom.addVertex(*v);
|
||||||
|
|
||||||
editManager->redraw();
|
editManager->redraw();
|
||||||
sidebar.update();
|
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 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() {
|
virtual Sidebar* getSidebar() {
|
||||||
return &sidebar;
|
return &sidebar;
|
||||||
|
|
|
@ -50,18 +50,18 @@ void ToolAddRect::render(const Level &level, const Rectangle &rect, float scale)
|
||||||
drawPolygon(room.getPolygon());
|
drawPolygon(room.getPolygon());
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolAddRect::buttonPress(unsigned int button) {
|
bool ToolAddRect::buttonPress(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1)
|
if(button != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!editManager->getHoveredVertex())
|
if(!v)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(!editManager->vertexOk(*editManager->getHoveredVertex()))
|
if(!editManager->vertexOk(*v))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pressed = true;
|
pressed = true;
|
||||||
v1 = *editManager->getHoveredVertex();
|
v1 = *v;
|
||||||
|
|
||||||
editManager->redraw();
|
editManager->redraw();
|
||||||
sidebar.update();
|
sidebar.update();
|
||||||
|
@ -69,13 +69,13 @@ bool ToolAddRect::buttonPress(unsigned int button) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolAddRect::buttonRelease(unsigned int button) {
|
bool ToolAddRect::buttonRelease(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1 || !pressed)
|
if(button != 1 || !pressed)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pressed = false;
|
pressed = false;
|
||||||
|
|
||||||
if(editManager->getHoveredVertex()) {
|
if(v) {
|
||||||
Room room = createRoom();
|
Room room = createRoom();
|
||||||
|
|
||||||
if(editManager->polygonOk(room.getPolygon())) {
|
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 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 bool buttonRelease(unsigned int button);
|
virtual bool buttonRelease(unsigned int button, const Vertex *v);
|
||||||
|
|
||||||
virtual Sidebar* getSidebar() {
|
virtual Sidebar* getSidebar() {
|
||||||
return &sidebar;
|
return &sidebar;
|
||||||
|
|
10
ToolGrab.cpp
10
ToolGrab.cpp
|
@ -19,12 +19,12 @@ void ToolGrab::activate() {
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolGrab::buttonPress(unsigned int button) {
|
bool ToolGrab::buttonPress(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1 || !editManager->getHoveredObject())
|
if(button != 1 || !editManager->getHoveredObject())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pressed = true;
|
pressed = true;
|
||||||
grabbedVertex = *editManager->getHoveredVertex();
|
grabbedVertex = *v;
|
||||||
|
|
||||||
editManager->setSelectedObject(editManager->getHoveredObject());
|
editManager->setSelectedObject(editManager->getHoveredObject());
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ bool ToolGrab::buttonPress(unsigned int button) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolGrab::buttonRelease(unsigned int button) {
|
bool ToolGrab::buttonRelease(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1)
|
if(button != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -48,14 +48,12 @@ bool ToolGrab::buttonRelease(unsigned int button) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolGrab::motion() {
|
bool ToolGrab::motion(const Vertex *v) {
|
||||||
if(!pressed) {
|
if(!pressed) {
|
||||||
editManager->highlightHoveredObject();
|
editManager->highlightHoveredObject();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
const Vertex *v = editManager->getHoveredVertex();
|
|
||||||
|
|
||||||
if(!v)
|
if(!v)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -47,9 +47,9 @@ class ToolGrab : public Tool, public EventHandler {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool buttonPress(unsigned int button);
|
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||||
virtual bool buttonRelease(unsigned int button);
|
virtual bool buttonRelease(unsigned int button, const Vertex *v);
|
||||||
virtual bool motion();
|
virtual bool motion(const Vertex *v);
|
||||||
|
|
||||||
virtual Sidebar* getSidebar() {
|
virtual Sidebar* getSidebar() {
|
||||||
return &sidebar;
|
return &sidebar;
|
||||||
|
|
|
@ -21,13 +21,13 @@ void ToolRotate::activate() {
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolRotate::buttonPress(unsigned int button) {
|
bool ToolRotate::buttonPress(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1 || !editManager->getHoveredObject())
|
if(button != 1 || !v)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pressed = true;
|
pressed = true;
|
||||||
valid = false;
|
valid = false;
|
||||||
v0 = v = *editManager->getHoveredVertex();
|
vertexRot = vertex = *v;
|
||||||
|
|
||||||
editManager->setSelectedObject(editManager->getHoveredObject());
|
editManager->setSelectedObject(editManager->getHoveredObject());
|
||||||
|
|
||||||
|
@ -37,7 +37,7 @@ bool ToolRotate::buttonPress(unsigned int button) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolRotate::buttonRelease(unsigned int button) {
|
bool ToolRotate::buttonRelease(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1)
|
if(button != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -51,22 +51,22 @@ bool ToolRotate::buttonRelease(unsigned int button) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolRotate::motion() {
|
bool ToolRotate::motion(const Vertex *v, float scale) {
|
||||||
if(!pressed) {
|
if(!pressed) {
|
||||||
editManager->highlightHoveredObject();
|
editManager->highlightHoveredObject();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!editManager->getHoveredVertex())
|
if(!v)
|
||||||
return false;
|
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)
|
if(valid)
|
||||||
editManager->getSelectedObject()->rotate(v0, a-angle);
|
editManager->getSelectedObject()->rotate(vertexRot, a-angle);
|
||||||
|
|
||||||
else
|
else
|
||||||
valid = true;
|
valid = true;
|
||||||
|
@ -85,14 +85,14 @@ void ToolRotate::render(const Level &level, const Rectangle &rect, float scale)
|
||||||
if(pressed && valid) {
|
if(pressed && valid) {
|
||||||
glLineWidth(1.0f);
|
glLineWidth(1.0f);
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.7f);
|
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);
|
glLineWidth(2.0f);
|
||||||
|
|
||||||
glBegin(GL_LINES);
|
glBegin(GL_LINES);
|
||||||
|
|
||||||
glVertex2f(v0.getX(), v0.getY());
|
glVertex2f(vertexRot.getX(), vertexRot.getY());
|
||||||
glVertex2f(v.getX(), v.getY());
|
glVertex2f(vertex.getX(), vertex.getY());
|
||||||
|
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ class ToolRotate : public Tool, private EventHandler, private Renderer {
|
||||||
|
|
||||||
bool pressed, valid;
|
bool pressed, valid;
|
||||||
float angle;
|
float angle;
|
||||||
Vertex v0, v;
|
Vertex vertexRot, vertex;
|
||||||
|
|
||||||
// prevent shallow copy
|
// prevent shallow copy
|
||||||
ToolRotate(const ToolRotate &t);
|
ToolRotate(const ToolRotate &t);
|
||||||
|
@ -47,9 +47,9 @@ class ToolRotate : public Tool, private EventHandler, private Renderer {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool buttonPress(unsigned int button);
|
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||||
virtual bool buttonRelease(unsigned int button);
|
virtual bool buttonRelease(unsigned int button, const Vertex *v);
|
||||||
virtual bool motion();
|
virtual bool motion(const Vertex *v, float scale);
|
||||||
|
|
||||||
virtual Renderer *getRenderer() {
|
virtual Renderer *getRenderer() {
|
||||||
return this;
|
return this;
|
||||||
|
|
|
@ -12,7 +12,7 @@ ToolSelector::~ToolSelector() {
|
||||||
g_object_unref(G_OBJECT(image));
|
g_object_unref(G_OBJECT(image));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolSelector::buttonPress(unsigned int button) {
|
bool ToolSelector::buttonPress(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1)
|
if(button != 1)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
|
@ -46,9 +46,9 @@ class ToolSelector : public Tool, public EventHandler {
|
||||||
return this;
|
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();
|
editManager->highlightHoveredObject();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
Reference in a new issue