zoomedit: Added some features like hover filters and connectable vertices.
This commit is contained in:
parent
77b187b8eb
commit
4c9b0f34f8
20 changed files with 90 additions and 62 deletions
|
@ -31,7 +31,6 @@ EditManager::EditManager(Window *window) {
|
||||||
this->window = window;
|
this->window = window;
|
||||||
|
|
||||||
hoveredObject = NULL;
|
hoveredObject = NULL;
|
||||||
highlightedObject = NULL;
|
|
||||||
selectedObject = NULL;
|
selectedObject = NULL;
|
||||||
|
|
||||||
hasHoveredVertex = false;
|
hasHoveredVertex = false;
|
||||||
|
@ -70,6 +69,9 @@ void EditManager::setHoveredVertex(const Vertex *v, float scale) {
|
||||||
hoveredObject = NULL;
|
hoveredObject = NULL;
|
||||||
|
|
||||||
for(Level::iterator object = window->getLevel().begin(); object != window->getLevel().end(); object++) {
|
for(Level::iterator object = window->getLevel().begin(); object != window->getLevel().end(); object++) {
|
||||||
|
if(!window->getActiveTool()->hoverFilter(**object))
|
||||||
|
continue;
|
||||||
|
|
||||||
if((*object)->hit(*v, scale)) {
|
if((*object)->hit(*v, scale)) {
|
||||||
if(hoveredObject && (*object)->getPriority() < hoveredObject->getPriority())
|
if(hoveredObject && (*object)->getPriority() < hoveredObject->getPriority())
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -16,7 +16,6 @@ class EditManager {
|
||||||
Window *window;
|
Window *window;
|
||||||
|
|
||||||
LevelObject *hoveredObject;
|
LevelObject *hoveredObject;
|
||||||
LevelObject *highlightedObject;
|
|
||||||
LevelObject *selectedObject;
|
LevelObject *selectedObject;
|
||||||
|
|
||||||
Vertex hoveredVertex;
|
Vertex hoveredVertex;
|
||||||
|
@ -33,18 +32,6 @@ class EditManager {
|
||||||
return hoveredObject;
|
return hoveredObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
void setHighlightedObject(LevelObject *object) {
|
|
||||||
highlightedObject = object;
|
|
||||||
}
|
|
||||||
|
|
||||||
LevelObject* getHighlightedObject() {
|
|
||||||
return highlightedObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
void highlightHoveredObject() {
|
|
||||||
highlightedObject = hoveredObject;
|
|
||||||
}
|
|
||||||
|
|
||||||
void setSelectedObject(LevelObject *object) {
|
void setSelectedObject(LevelObject *object) {
|
||||||
selectedObject = object;
|
selectedObject = object;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,9 @@ class LevelObject : public Object {
|
||||||
virtual bool hit(const Vertex &v, float scale) const {return hit(v);};
|
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 bool canMove() const {return false;}
|
||||||
virtual void move(float x, float y) {}
|
virtual void move(float x, float y) {}
|
||||||
|
virtual bool canRotate() const {return false;}
|
||||||
virtual void rotate(Vertex m, float a) {}
|
virtual void rotate(Vertex m, float a) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -34,6 +34,9 @@ class LevelVertex : public LevelObject {
|
||||||
provider->rotateVertex(id, m, a);
|
provider->rotateVertex(id, m, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canConnect() const {return provider->canConnectVertex(id);}
|
||||||
|
virtual void connect() {provider->connectVertex(id);}
|
||||||
|
|
||||||
const Vertex* operator->() const {return provider->getVertex(id);}
|
const Vertex* operator->() const {return provider->getVertex(id);}
|
||||||
const Vertex& operator*() const {return *provider->getVertex(id);}
|
const Vertex& operator*() const {return *provider->getVertex(id);}
|
||||||
};
|
};
|
||||||
|
|
|
@ -17,6 +17,8 @@ class PlayerStart : public Vertex3d, public LevelObject {
|
||||||
return "PlayerStart";
|
return "PlayerStart";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canMove() const {return true;}
|
||||||
|
|
||||||
virtual void move(float x, float y) {
|
virtual void move(float x, float y) {
|
||||||
setX(getX()+x);
|
setX(getX()+x);
|
||||||
setZ(getZ()+y);
|
setZ(getZ()+y);
|
||||||
|
|
17
Portal.h
17
Portal.h
|
@ -16,6 +16,7 @@ class Portal : public LevelObject, public VertexProvider {
|
||||||
|
|
||||||
Vertex vertices[4];
|
Vertex vertices[4];
|
||||||
float s, c;
|
float s, c;
|
||||||
|
bool connected[4];
|
||||||
|
|
||||||
|
|
||||||
void updateVertices() {
|
void updateVertices() {
|
||||||
|
@ -54,6 +55,10 @@ class Portal : public LevelObject, public VertexProvider {
|
||||||
|
|
||||||
orient = 0;
|
orient = 0;
|
||||||
|
|
||||||
|
for(int i = 0; i < 4; i++) {
|
||||||
|
connected[i] = false;
|
||||||
|
}
|
||||||
|
|
||||||
updateOrient();
|
updateOrient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,13 +114,25 @@ class Portal : public LevelObject, public VertexProvider {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canMove() const {return true;}
|
||||||
|
|
||||||
virtual void moveVertex(size_t id, float x, float y) {
|
virtual void moveVertex(size_t id, float x, float y) {
|
||||||
move(x, y);
|
move(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canRotate() const {return true;}
|
||||||
|
|
||||||
virtual void rotateVertex(size_t id, Vertex m, float a) {
|
virtual void rotateVertex(size_t id, Vertex m, float a) {
|
||||||
rotate(m, a);
|
rotate(m, a);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canConnectVertex(size_t id) const {
|
||||||
|
return !connected[id];
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void connectVertex(size_t id) {
|
||||||
|
connected[id] = true;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*PORTAL_H_*/
|
#endif /*PORTAL_H_*/
|
||||||
|
|
36
Renderer.cpp
36
Renderer.cpp
|
@ -104,39 +104,39 @@ void Renderer::drawCross(const Vertex &m, float r) {
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderObject(const LevelObject &object, bool selected, bool highlighted, float scale) {
|
void Renderer::renderObject(const LevelObject &object, bool selected, bool hovered, float scale) {
|
||||||
if(object.isOfType("LevelVertex"))
|
if(object.isOfType("LevelVertex"))
|
||||||
renderLevelVertex(*(LevelVertex*)&object, selected, highlighted, scale);
|
renderLevelVertex(*(LevelVertex*)&object, selected, hovered, scale);
|
||||||
else if(object.isOfType("LevelEdge"))
|
else if(object.isOfType("LevelEdge"))
|
||||||
renderLevelEdge(*(LevelEdge*)&object, selected, highlighted, scale);
|
renderLevelEdge(*(LevelEdge*)&object, selected, hovered, scale);
|
||||||
else if(object.isOfType("Room"))
|
else if(object.isOfType("Room"))
|
||||||
renderRoom(*(Room*)&object, selected, highlighted, scale);
|
renderRoom(*(Room*)&object, selected, hovered, scale);
|
||||||
else if(object.isOfType("PlayerStart"))
|
else if(object.isOfType("PlayerStart"))
|
||||||
renderPlayerStart(*(PlayerStart*)&object, selected, highlighted, scale);
|
renderPlayerStart(*(PlayerStart*)&object, selected, hovered, scale);
|
||||||
else if(object.isOfType("Portal"))
|
else if(object.isOfType("Portal"))
|
||||||
renderPortal(*(Portal*)&object, selected, highlighted, scale);
|
renderPortal(*(Portal*)&object, selected, hovered, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderLevelVertex(const LevelVertex &vertex, bool selected, bool highlighted, float scale) {
|
void Renderer::renderLevelVertex(const LevelVertex &vertex, bool selected, bool hovered, float scale) {
|
||||||
if(!selected && !highlighted) return;
|
if(!selected && !hovered) return;
|
||||||
|
|
||||||
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
|
glColor4f(0.0f, 0.0f, 0.0f, 1.0f);
|
||||||
fillCircle(*vertex, 3.5f/scale, 16);
|
fillCircle(*vertex, 3.5f/scale, 16);
|
||||||
|
|
||||||
glLineWidth(1.0f);
|
glLineWidth(1.0f);
|
||||||
if(highlighted)
|
if(hovered)
|
||||||
glColor4f(1.0f, 0.9f, 0.0f, 0.9f);
|
glColor4f(1.0f, 0.9f, 0.0f, 0.9f);
|
||||||
else
|
else
|
||||||
glColor4f(1.0f, 0.7f, 0.0f, 0.9f);
|
glColor4f(1.0f, 0.7f, 0.0f, 0.9f);
|
||||||
drawCircle(*vertex, 3.5f/scale, 16);
|
drawCircle(*vertex, 3.5f/scale, 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderLevelEdge(const LevelEdge &edge, bool selected, bool highlighted, float scale) {
|
void Renderer::renderLevelEdge(const LevelEdge &edge, bool selected, bool hovered, float scale) {
|
||||||
if(selected) {
|
if(selected) {
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
else if(highlighted) {
|
else if(hovered) {
|
||||||
glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
|
glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
|
@ -151,7 +151,7 @@ void Renderer::renderLevelEdge(const LevelEdge &edge, bool selected, bool highli
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderRoom(const Room &room, bool selected, bool highlighted, float scale) {
|
void Renderer::renderRoom(const Room &room, bool selected, bool hovered, float scale) {
|
||||||
if(selected)
|
if(selected)
|
||||||
glColor4f(0.0f, 0.7f, 1.0f, 0.2f);
|
glColor4f(0.0f, 0.7f, 1.0f, 0.2f);
|
||||||
else
|
else
|
||||||
|
@ -163,7 +163,7 @@ void Renderer::renderRoom(const Room &room, bool selected, bool highlighted, flo
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
else if(highlighted) {
|
else if(hovered) {
|
||||||
glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
|
glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
|
@ -175,12 +175,12 @@ void Renderer::renderRoom(const Room &room, bool selected, bool highlighted, flo
|
||||||
drawPolygon(room.getPolygon());
|
drawPolygon(room.getPolygon());
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool highlighted, float scale) {
|
void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool hovered, float scale) {
|
||||||
if(selected) {
|
if(selected) {
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
else if(highlighted) {
|
else if(hovered) {
|
||||||
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
|
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
|
@ -195,12 +195,12 @@ void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool h
|
||||||
drawCross(Vertex(start.getX(), start.getZ()), 0.5f/sqrtf(scale));
|
drawCross(Vertex(start.getX(), start.getZ()), 0.5f/sqrtf(scale));
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderPortal(const Portal &portal, bool selected, bool highlighted, float scale) {
|
void Renderer::renderPortal(const Portal &portal, bool selected, bool hovered, float scale) {
|
||||||
if(selected) {
|
if(selected) {
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
glColor4f(1.0f, 1.0f, 1.0f, 0.9f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
else if(highlighted) {
|
else if(hovered) {
|
||||||
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
|
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
|
@ -242,6 +242,6 @@ void Renderer::render(const Level &level, const Rectangle &rect, float scale) {
|
||||||
|
|
||||||
for(Level::const_iterator object = level.begin(); object != level.end(); object++) {
|
for(Level::const_iterator object = level.begin(); object != level.end(); object++) {
|
||||||
renderObject(**object, (&**object == editManager->getSelectedObject()),
|
renderObject(**object, (&**object == editManager->getSelectedObject()),
|
||||||
(&**object == editManager->getHighlightedObject()), scale);
|
(&**object == editManager->getHoveredObject()), scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
12
Renderer.h
12
Renderer.h
|
@ -25,14 +25,14 @@ class Renderer {
|
||||||
void drawCircleDotted(const Vertex &m, float r, int n = 64, int d = 8, float rot = 0);
|
void drawCircleDotted(const Vertex &m, float r, int n = 64, int d = 8, float rot = 0);
|
||||||
void drawCross(const Vertex &m, float r);
|
void drawCross(const Vertex &m, float r);
|
||||||
|
|
||||||
void renderObject(const LevelObject &object, bool selected, bool highlighted, float scale);
|
void renderObject(const LevelObject &object, bool selected, bool hovered, float scale);
|
||||||
|
|
||||||
void renderLevelVertex(const LevelVertex &vertex, bool selected, bool highlighted, float scale);
|
void renderLevelVertex(const LevelVertex &vertex, bool selected, bool hovered, float scale);
|
||||||
void renderLevelEdge(const LevelEdge &edge, bool selected, bool highlighted, float scale);
|
void renderLevelEdge(const LevelEdge &edge, bool selected, bool hovered, float scale);
|
||||||
|
|
||||||
void renderRoom(const Room &room, bool selected, bool highlighted, float scale);
|
void renderRoom(const Room &room, bool selected, bool hovered, float scale);
|
||||||
void renderPlayerStart(const PlayerStart &start, bool selected, bool highlighted, float scale);
|
void renderPlayerStart(const PlayerStart &start, bool selected, bool hovered, float scale);
|
||||||
void renderPortal(const Portal &portal, bool selected, bool highlighted, float scale);
|
void renderPortal(const Portal &portal, bool selected, bool hovered, float scale);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Renderer(EditManager *editManager) {
|
Renderer(EditManager *editManager) {
|
||||||
|
|
4
Room.h
4
Room.h
|
@ -48,6 +48,8 @@ class Room : public LevelObject, private VertexProvider, private EdgeProvider {
|
||||||
return "Room";
|
return "Room";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canMove() const {return true;}
|
||||||
|
|
||||||
virtual void move(float x, float y) {
|
virtual void move(float x, float y) {
|
||||||
Vertex m(x, y);
|
Vertex m(x, y);
|
||||||
|
|
||||||
|
@ -55,6 +57,8 @@ class Room : public LevelObject, private VertexProvider, private EdgeProvider {
|
||||||
*v += m;
|
*v += m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool canRotate() const {return true;}
|
||||||
|
|
||||||
virtual void rotate(Vertex m, float a);
|
virtual void rotate(Vertex m, float a);
|
||||||
|
|
||||||
virtual const Vertex* getVertex(size_t id) const {
|
virtual const Vertex* getVertex(size_t id) const {
|
||||||
|
|
2
Tool.h
2
Tool.h
|
@ -22,6 +22,8 @@ class Tool : public Object {
|
||||||
virtual GtkWidget* getImage() = 0;
|
virtual GtkWidget* getImage() = 0;
|
||||||
virtual bool isSensitive() = 0;
|
virtual bool isSensitive() = 0;
|
||||||
|
|
||||||
|
virtual bool hoverFilter(const LevelObject &object) const = 0;
|
||||||
|
|
||||||
virtual EventHandler* getEventHandler() = 0;
|
virtual EventHandler* getEventHandler() = 0;
|
||||||
virtual Sidebar* getSidebar() = 0;
|
virtual Sidebar* getSidebar() = 0;
|
||||||
virtual Renderer* getRenderer() {return NULL;}
|
virtual Renderer* getRenderer() {return NULL;}
|
||||||
|
|
|
@ -16,7 +16,6 @@ ToolAddPolygon::~ToolAddPolygon() {
|
||||||
void ToolAddPolygon::activate() {
|
void ToolAddPolygon::activate() {
|
||||||
newRoom = Room();
|
newRoom = Room();
|
||||||
|
|
||||||
editManager->setHighlightedObject(NULL);
|
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
#include "Tool.h"
|
#include "Tool.h"
|
||||||
#include "EditManager.h"
|
#include "EditManager.h"
|
||||||
#include "SidebarAdd.h"
|
#include "SidebarAdd.h"
|
||||||
|
#include "LevelVertex.h"
|
||||||
|
|
||||||
|
|
||||||
class ToolAddPolygon : public Tool, private EventHandler, private Renderer {
|
class ToolAddPolygon : public Tool, private EventHandler, private Renderer {
|
||||||
|
@ -43,6 +44,13 @@ class ToolAddPolygon : public Tool, private EventHandler, private Renderer {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool hoverFilter(const LevelObject &object) const {
|
||||||
|
if(!object.isOfType("LevelVertex"))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return ((LevelVertex*)&object)->canConnect();
|
||||||
|
}
|
||||||
|
|
||||||
virtual EventHandler* getEventHandler() {
|
virtual EventHandler* getEventHandler() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@ ToolAddRect::~ToolAddRect() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolAddRect::activate() {
|
void ToolAddRect::activate() {
|
||||||
editManager->setHighlightedObject(NULL);
|
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,10 @@ class ToolAddRect : public Tool, public EventHandler, public Renderer {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool hoverFilter(const LevelObject &object) const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
virtual EventHandler* getEventHandler() {
|
virtual EventHandler* getEventHandler() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,6 @@ ToolGrab::~ToolGrab() {
|
||||||
|
|
||||||
void ToolGrab::activate() {
|
void ToolGrab::activate() {
|
||||||
pressed = false;
|
pressed = false;
|
||||||
editManager->highlightHoveredObject();
|
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,10 +48,8 @@ bool ToolGrab::buttonRelease(unsigned int button, const Vertex *v) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolGrab::motion(const Vertex *v) {
|
bool ToolGrab::motion(const Vertex *v) {
|
||||||
if(!pressed) {
|
if(!pressed)
|
||||||
editManager->highlightHoveredObject();
|
return false;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!v)
|
if(!v)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
#include "SidebarView.h"
|
#include "SidebarView.h"
|
||||||
|
|
||||||
|
|
||||||
class ToolGrab : public Tool, public EventHandler {
|
class ToolGrab : public Tool, private EventHandler {
|
||||||
private:
|
private:
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
|
|
||||||
|
@ -43,6 +43,10 @@ class ToolGrab : public Tool, public EventHandler {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool hoverFilter(const LevelObject &object) const {
|
||||||
|
return object.canMove();
|
||||||
|
}
|
||||||
|
|
||||||
virtual EventHandler* getEventHandler() {
|
virtual EventHandler* getEventHandler() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,12 +17,11 @@ ToolRotate::~ToolRotate() {
|
||||||
|
|
||||||
void ToolRotate::activate() {
|
void ToolRotate::activate() {
|
||||||
pressed = false;
|
pressed = false;
|
||||||
editManager->highlightHoveredObject();
|
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolRotate::buttonPress(unsigned int button, const Vertex *v) {
|
bool ToolRotate::buttonPress(unsigned int button, const Vertex *v) {
|
||||||
if(button != 1 || !v)
|
if(button != 1 || !editManager->getHoveredObject())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
pressed = true;
|
pressed = true;
|
||||||
|
@ -52,10 +51,8 @@ bool ToolRotate::buttonRelease(unsigned int button, const Vertex *v) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolRotate::motion(const Vertex *v, float scale) {
|
bool ToolRotate::motion(const Vertex *v, float scale) {
|
||||||
if(!pressed) {
|
if(!pressed)
|
||||||
editManager->highlightHoveredObject();
|
return false;
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!v)
|
if(!v)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -43,6 +43,10 @@ class ToolRotate : public Tool, private EventHandler, private Renderer {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool hoverFilter(const LevelObject &object) const {
|
||||||
|
return object.canRotate();
|
||||||
|
}
|
||||||
|
|
||||||
virtual EventHandler* getEventHandler() {
|
virtual EventHandler* getEventHandler() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,10 +26,6 @@ class ToolSelector : public Tool, public EventHandler {
|
||||||
return "ToolSelector";
|
return "ToolSelector";
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void activate() {
|
|
||||||
editManager->highlightHoveredObject();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual const char *getName() const {
|
virtual const char *getName() const {
|
||||||
return "Select";
|
return "Select";
|
||||||
}
|
}
|
||||||
|
@ -42,18 +38,16 @@ class ToolSelector : public Tool, public EventHandler {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual bool hoverFilter(const LevelObject &object) const {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual EventHandler *getEventHandler() {
|
virtual EventHandler *getEventHandler() {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
virtual bool buttonPress(unsigned int button, const Vertex *v);
|
||||||
|
|
||||||
virtual bool motion(const Vertex *v) {
|
|
||||||
editManager->highlightHoveredObject();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual Sidebar* getSidebar() {
|
virtual Sidebar* getSidebar() {
|
||||||
return &sidebar;
|
return &sidebar;
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,9 @@ class VertexProvider {
|
||||||
|
|
||||||
virtual void moveVertex(size_t id, float x, float y) {}
|
virtual void moveVertex(size_t id, float x, float y) {}
|
||||||
virtual void rotateVertex(size_t id, Vertex m, float a) {}
|
virtual void rotateVertex(size_t id, Vertex m, float a) {}
|
||||||
|
|
||||||
|
virtual bool canConnectVertex(size_t id) const {return false;}
|
||||||
|
virtual void connectVertex(size_t id) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /*VERTEXPROVIDER_H_*/
|
#endif /*VERTEXPROVIDER_H_*/
|
||||||
|
|
Reference in a new issue