zoomedit: Changed some interfaces.

This commit is contained in:
neoraider 2008-02-15 22:44:03 +00:00
parent 0ea1d38865
commit 77b187b8eb
16 changed files with 63 additions and 56 deletions

View file

@ -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:

View file

@ -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_*/

View file

@ -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) {}

View file

@ -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);
} }

View file

@ -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
View file

@ -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();

View file

@ -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();

View file

@ -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;

View file

@ -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())) {

View file

@ -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;

View file

@ -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;

View file

@ -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;

View file

@ -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();
} }

View file

@ -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;

View file

@ -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;

View file

@ -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;