zoomedit: Let tools decide wether to highlight hovered objects.
This commit is contained in:
parent
e9d27f488c
commit
8b4b9845d6
9 changed files with 50 additions and 19 deletions
|
@ -43,10 +43,12 @@ gboolean Drawer::eventHandler(GtkWidget *widget, GdkEvent *event, Drawer *drawer
|
||||||
|
|
||||||
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();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_LEAVE_NOTIFY:
|
case GDK_LEAVE_NOTIFY:
|
||||||
drawer->window->getEditManager().setHoveredVertex(NULL);
|
drawer->window->getEditManager().setHoveredVertex(NULL);
|
||||||
|
drawer->window->getActiveTool()->getEventHandler()->motion();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
case GDK_BUTTON_PRESS:
|
case GDK_BUTTON_PRESS:
|
||||||
|
|
|
@ -31,6 +31,7 @@ EditManager::EditManager(Window *window) {
|
||||||
this->window = window;
|
this->window = window;
|
||||||
|
|
||||||
hoveredObject = NULL;
|
hoveredObject = NULL;
|
||||||
|
highlightedObject = NULL;
|
||||||
selectedObject = NULL;
|
selectedObject = NULL;
|
||||||
|
|
||||||
hasHoveredVertex = false;
|
hasHoveredVertex = false;
|
||||||
|
@ -56,12 +57,12 @@ bool EditManager::addRoom(const Room &newRoom) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Vertex* EditManager::getHoveredVertex() {
|
const Vertex* EditManager::getHoveredVertex() const {
|
||||||
if(hasHoveredVertex) return &hoveredVertex;
|
if(hasHoveredVertex) return &hoveredVertex;
|
||||||
else return NULL;
|
else return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditManager::setHoveredVertex(Vertex *v) {
|
void EditManager::setHoveredVertex(const Vertex *v) {
|
||||||
if(v) {
|
if(v) {
|
||||||
hasHoveredVertex = true;
|
hasHoveredVertex = true;
|
||||||
hoveredVertex = *v;
|
hoveredVertex = *v;
|
||||||
|
|
|
@ -16,6 +16,7 @@ class EditManager {
|
||||||
Window *window;
|
Window *window;
|
||||||
|
|
||||||
LevelObject *hoveredObject;
|
LevelObject *hoveredObject;
|
||||||
|
LevelObject *highlightedObject;
|
||||||
LevelObject *selectedObject;
|
LevelObject *selectedObject;
|
||||||
|
|
||||||
Vertex hoveredVertex;
|
Vertex hoveredVertex;
|
||||||
|
@ -32,6 +33,18 @@ 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;
|
||||||
}
|
}
|
||||||
|
@ -42,8 +55,8 @@ class EditManager {
|
||||||
|
|
||||||
bool addRoom(const Room &room);
|
bool addRoom(const Room &room);
|
||||||
|
|
||||||
Vertex* getHoveredVertex();
|
const Vertex* getHoveredVertex() const;
|
||||||
void setHoveredVertex(Vertex *v);
|
void setHoveredVertex(const Vertex *v);
|
||||||
|
|
||||||
bool vertexOk(const Vertex &v, const Room *newRoom = NULL) const;
|
bool vertexOk(const Vertex &v, const Room *newRoom = NULL) const;
|
||||||
bool polygonOk(const Polygon &polygon) const;
|
bool polygonOk(const Polygon &polygon) const;
|
||||||
|
|
16
Renderer.cpp
16
Renderer.cpp
|
@ -107,14 +107,14 @@ void Renderer::drawCross(const Vertex &m, float r) {
|
||||||
glEnd();
|
glEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderObject(const LevelObject &object, bool selected, bool hovered, float scale) {
|
void Renderer::renderObject(const LevelObject &object, bool selected, bool highlighted, float scale) {
|
||||||
if(object.isOfType("Room"))
|
if(object.isOfType("Room"))
|
||||||
renderRoom(*(Room*)&object, selected, hovered, scale);
|
renderRoom(*(Room*)&object, selected, highlighted, scale);
|
||||||
else if(object.isOfType("PlayerStart"))
|
else if(object.isOfType("PlayerStart"))
|
||||||
renderPlayerStart(*(PlayerStart*)&object, selected, hovered, scale);
|
renderPlayerStart(*(PlayerStart*)&object, selected, highlighted, scale);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderRoom(const Room &room, bool selected, bool hovered, float scale) {
|
void Renderer::renderRoom(const Room &room, bool selected, bool highlighted, 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
|
||||||
|
@ -126,7 +126,7 @@ void Renderer::renderRoom(const Room &room, bool selected, bool hovered, float s
|
||||||
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(hovered) {
|
else if(highlighted) {
|
||||||
glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
|
glColor4f(0.0f, 0.7f, 1.0f, 0.7f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
|
@ -138,12 +138,12 @@ void Renderer::renderRoom(const Room &room, bool selected, bool hovered, float s
|
||||||
drawPolygon(room);
|
drawPolygon(room);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool hovered, float scale) {
|
void Renderer::renderPlayerStart(const PlayerStart &start, bool selected, bool highlighted, 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(hovered) {
|
else if(highlighted) {
|
||||||
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
|
glColor4f(0.0f, 0.7f, 0.7f, 0.7f);
|
||||||
glLineWidth(2.0f);
|
glLineWidth(2.0f);
|
||||||
}
|
}
|
||||||
|
@ -168,6 +168,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->getHoveredObject()), scale);
|
(&**object == editManager->getHighlightedObject()), scale);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,10 +21,10 @@ class Renderer {
|
||||||
void drawCircle(const Vertex &m, float r, int n);
|
void drawCircle(const Vertex &m, float r, int n);
|
||||||
void drawCross(const Vertex &m, float r);
|
void drawCross(const Vertex &m, float r);
|
||||||
|
|
||||||
void renderObject(const LevelObject &object, bool selected, bool hovered, float scale);
|
void renderObject(const LevelObject &object, bool selected, bool highlighted, float scale);
|
||||||
|
|
||||||
void renderRoom(const Room &room, bool selected, bool hovered, float scale);
|
void renderRoom(const Room &room, bool selected, bool highlighted, float scale);
|
||||||
void renderPlayerStart(const PlayerStart &start, bool selected, bool hovered, float scale);
|
void renderPlayerStart(const PlayerStart &start, bool selected, bool highlighted, float scale);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Renderer(EditManager *editManager) {
|
Renderer(EditManager *editManager) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ ToolAddPolygon::~ToolAddPolygon() {
|
||||||
void ToolAddPolygon::activate() {
|
void ToolAddPolygon::activate() {
|
||||||
newRoom = Room();
|
newRoom = Room();
|
||||||
|
|
||||||
|
editManager->setHighlightedObject(NULL);
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
|
|
||||||
Room ToolAddRect::createRoom() {
|
Room ToolAddRect::createRoom() {
|
||||||
Vertex *v2 = editManager->getHoveredVertex();
|
const Vertex *v2 = editManager->getHoveredVertex();
|
||||||
|
|
||||||
Room room;
|
Room room;
|
||||||
room.push_back(v1);
|
room.push_back(v1);
|
||||||
|
@ -28,6 +28,7 @@ ToolAddRect::~ToolAddRect() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolAddRect::activate() {
|
void ToolAddRect::activate() {
|
||||||
|
editManager->setHighlightedObject(NULL);
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ ToolGrab::~ToolGrab() {
|
||||||
|
|
||||||
void ToolGrab::activate() {
|
void ToolGrab::activate() {
|
||||||
pressed = false;
|
pressed = false;
|
||||||
|
editManager->highlightHoveredObject();
|
||||||
editManager->setSelectedObject(NULL);
|
editManager->setSelectedObject(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,10 +49,12 @@ bool ToolGrab::buttonRelease(unsigned int button) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ToolGrab::motion() {
|
bool ToolGrab::motion() {
|
||||||
if(!pressed)
|
if(!pressed) {
|
||||||
return false;
|
editManager->highlightHoveredObject();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
Vertex *v = editManager->getHoveredVertex();
|
const Vertex *v = editManager->getHoveredVertex();
|
||||||
|
|
||||||
if(!v)
|
if(!v)
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -26,6 +26,10 @@ 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";
|
||||||
}
|
}
|
||||||
|
@ -44,6 +48,12 @@ class ToolSelector : public Tool, public EventHandler {
|
||||||
|
|
||||||
virtual bool buttonPress(unsigned int button);
|
virtual bool buttonPress(unsigned int button);
|
||||||
|
|
||||||
|
virtual bool motion() {
|
||||||
|
editManager->highlightHoveredObject();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
virtual Sidebar* getSidebar() {
|
virtual Sidebar* getSidebar() {
|
||||||
return &sidebar;
|
return &sidebar;
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue