zoomedit: Added grab tool.

This commit is contained in:
neoraider 2008-01-13 16:41:01 +00:00
parent 017743d339
commit e9d27f488c
11 changed files with 165 additions and 4 deletions

View file

@ -38,6 +38,7 @@ 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();
return TRUE; return TRUE;
case GDK_ENTER_NOTIFY: case GDK_ENTER_NOTIFY:

View file

@ -7,6 +7,7 @@ class EventHandler {
virtual bool buttonPress(unsigned int button) {return false;} virtual bool buttonPress(unsigned int button) {return false;}
virtual bool buttonRelease(unsigned int button) {return false;} virtual bool buttonRelease(unsigned int button) {return false;}
virtual bool motion() {return false;}
}; };
#endif /*EVENTHANDLER_H_*/ #endif /*EVENTHANDLER_H_*/

View file

@ -11,6 +11,8 @@ class LevelObject : public Object {
virtual bool hit(const Vertex &v) const = 0; virtual bool hit(const Vertex &v) const = 0;
virtual int getPriority() const = 0; virtual int getPriority() const = 0;
virtual void move(float x, float y) {}
}; };
#endif /*LEVELOBJECT_H_*/ #endif /*LEVELOBJECT_H_*/

View file

@ -4,6 +4,7 @@ zoomedit_SOURCES = zoomedit.cpp UIManager.cpp Renderer.cpp Vertex.cpp \
IdManager.cpp WindowManager.cpp SidebarManager.cpp \ IdManager.cpp WindowManager.cpp SidebarManager.cpp \
Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \ Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \
EditManager.cpp FileManager.cpp SidebarToolbox.cpp \ EditManager.cpp FileManager.cpp SidebarToolbox.cpp \
ToolSelector.cpp ToolAddPolygon.cpp ToolAddRect.cpp Vertex3d.cpp ToolSelector.cpp ToolAddPolygon.cpp ToolAddRect.cpp \
ToolGrab.cpp Vertex3d.cpp
zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@ zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@
zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@ zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@

View file

@ -61,7 +61,8 @@ am_zoomedit_OBJECTS = zoomedit-zoomedit.$(OBJEXT) \
zoomedit-SidebarToolbox.$(OBJEXT) \ zoomedit-SidebarToolbox.$(OBJEXT) \
zoomedit-ToolSelector.$(OBJEXT) \ zoomedit-ToolSelector.$(OBJEXT) \
zoomedit-ToolAddPolygon.$(OBJEXT) \ zoomedit-ToolAddPolygon.$(OBJEXT) \
zoomedit-ToolAddRect.$(OBJEXT) zoomedit-Vertex3d.$(OBJEXT) zoomedit-ToolAddRect.$(OBJEXT) zoomedit-ToolGrab.$(OBJEXT) \
zoomedit-Vertex3d.$(OBJEXT)
zoomedit_OBJECTS = $(am_zoomedit_OBJECTS) zoomedit_OBJECTS = $(am_zoomedit_OBJECTS)
zoomedit_DEPENDENCIES = zoomedit_DEPENDENCIES =
DEFAULT_INCLUDES = -I.@am__isrc@ DEFAULT_INCLUDES = -I.@am__isrc@
@ -188,7 +189,8 @@ zoomedit_SOURCES = zoomedit.cpp UIManager.cpp Renderer.cpp Vertex.cpp \
IdManager.cpp WindowManager.cpp SidebarManager.cpp \ IdManager.cpp WindowManager.cpp SidebarManager.cpp \
Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \ Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \
EditManager.cpp FileManager.cpp SidebarToolbox.cpp \ EditManager.cpp FileManager.cpp SidebarToolbox.cpp \
ToolSelector.cpp ToolAddPolygon.cpp ToolAddRect.cpp Vertex3d.cpp ToolSelector.cpp ToolAddPolygon.cpp ToolAddRect.cpp \
ToolGrab.cpp Vertex3d.cpp
zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@ zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@
zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@ zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@
@ -294,6 +296,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-SidebarView.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-SidebarView.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolAddPolygon.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolAddPolygon.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolAddRect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolAddRect.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolGrab.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolSelector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolSelector.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-Triangle.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-Triangle.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-UIManager.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-UIManager.Po@am__quote@
@ -611,6 +614,20 @@ zoomedit-ToolAddRect.obj: ToolAddRect.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-ToolAddRect.obj `if test -f 'ToolAddRect.cpp'; then $(CYGPATH_W) 'ToolAddRect.cpp'; else $(CYGPATH_W) '$(srcdir)/ToolAddRect.cpp'; fi` @am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-ToolAddRect.obj `if test -f 'ToolAddRect.cpp'; then $(CYGPATH_W) 'ToolAddRect.cpp'; else $(CYGPATH_W) '$(srcdir)/ToolAddRect.cpp'; fi`
zoomedit-ToolGrab.o: ToolGrab.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-ToolGrab.o -MD -MP -MF $(DEPDIR)/zoomedit-ToolGrab.Tpo -c -o zoomedit-ToolGrab.o `test -f 'ToolGrab.cpp' || echo '$(srcdir)/'`ToolGrab.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-ToolGrab.Tpo $(DEPDIR)/zoomedit-ToolGrab.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ToolGrab.cpp' object='zoomedit-ToolGrab.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-ToolGrab.o `test -f 'ToolGrab.cpp' || echo '$(srcdir)/'`ToolGrab.cpp
zoomedit-ToolGrab.obj: ToolGrab.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-ToolGrab.obj -MD -MP -MF $(DEPDIR)/zoomedit-ToolGrab.Tpo -c -o zoomedit-ToolGrab.obj `if test -f 'ToolGrab.cpp'; then $(CYGPATH_W) 'ToolGrab.cpp'; else $(CYGPATH_W) '$(srcdir)/ToolGrab.cpp'; fi`
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-ToolGrab.Tpo $(DEPDIR)/zoomedit-ToolGrab.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ToolGrab.cpp' object='zoomedit-ToolGrab.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-ToolGrab.obj `if test -f 'ToolGrab.cpp'; then $(CYGPATH_W) 'ToolGrab.cpp'; else $(CYGPATH_W) '$(srcdir)/ToolGrab.cpp'; fi`
zoomedit-Vertex3d.o: Vertex3d.cpp zoomedit-Vertex3d.o: Vertex3d.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-Vertex3d.o -MD -MP -MF $(DEPDIR)/zoomedit-Vertex3d.Tpo -c -o zoomedit-Vertex3d.o `test -f 'Vertex3d.cpp' || echo '$(srcdir)/'`Vertex3d.cpp @am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-Vertex3d.o -MD -MP -MF $(DEPDIR)/zoomedit-Vertex3d.Tpo -c -o zoomedit-Vertex3d.o `test -f 'Vertex3d.cpp' || echo '$(srcdir)/'`Vertex3d.cpp
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-Vertex3d.Tpo $(DEPDIR)/zoomedit-Vertex3d.Po @am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-Vertex3d.Tpo $(DEPDIR)/zoomedit-Vertex3d.Po

View file

@ -16,6 +16,11 @@ class PlayerStart : public Vertex3d, public LevelObject {
virtual const char* getType() const { virtual const char* getType() const {
return "PlayerStart"; return "PlayerStart";
} }
virtual void move(float x, float y) {
setX(getX()+x);
setZ(getZ()+y);
}
}; };
#endif /*PLAYERSTART_H_*/ #endif /*PLAYERSTART_H_*/

7
Room.h
View file

@ -28,6 +28,13 @@ class Room : public Polygon, public LevelObject {
virtual const char* getType() const { virtual const char* getType() const {
return "Room"; return "Room";
} }
virtual void move(float x, float y) {
for(iterator v = begin(); v != end(); v++) {
v->setX(v->getX()+x);
v->setY(v->getY()+y);
}
}
}; };
#endif /*ROOM_H_*/ #endif /*ROOM_H_*/

View file

@ -3,7 +3,8 @@
SidebarManager::SidebarManager(Window *window) SidebarManager::SidebarManager(Window *window)
: sidebarToolbox(window), toolAddRect(&window->getEditManager()), toolAddPolygon(&window->getEditManager()) : sidebarToolbox(window), toolGrab(&window->getEditManager()),
toolAddRect(&window->getEditManager()), toolAddPolygon(&window->getEditManager())
{ {
this->window = window; this->window = window;
activeSidebar = NULL; activeSidebar = NULL;
@ -27,6 +28,7 @@ SidebarManager::SidebarManager(Window *window)
viewport = gtk_viewport_new(NULL, NULL); viewport = gtk_viewport_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(scrolledWindow), viewport); gtk_container_add(GTK_CONTAINER(scrolledWindow), viewport);
sidebarToolbox.addTool(&toolGrab);
sidebarToolbox.addTool(&toolAddRect); sidebarToolbox.addTool(&toolAddRect);
sidebarToolbox.addTool(&toolAddPolygon); sidebarToolbox.addTool(&toolAddPolygon);

View file

@ -5,6 +5,7 @@
#include "Sidebar.h" #include "Sidebar.h"
#include "SidebarToolbox.h" #include "SidebarToolbox.h"
#include "EditManager.h" #include "EditManager.h"
#include "ToolGrab.h"
#include "ToolAddRect.h" #include "ToolAddRect.h"
#include "ToolAddPolygon.h" #include "ToolAddPolygon.h"
@ -22,6 +23,7 @@ class SidebarManager {
Window *window; Window *window;
ToolGrab toolGrab;
ToolAddRect toolAddRect; ToolAddRect toolAddRect;
ToolAddPolygon toolAddPolygon; ToolAddPolygon toolAddPolygon;

64
ToolGrab.cpp Normal file
View file

@ -0,0 +1,64 @@
#include "ToolGrab.h"
ToolGrab::ToolGrab(EditManager *editManager) : sidebar(editManager) {
this->editManager = editManager;
pressed = false;
image = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON);
g_object_ref_sink(G_OBJECT(image));
}
ToolGrab::~ToolGrab() {
g_object_unref(G_OBJECT(image));
}
void ToolGrab::activate() {
pressed = false;
editManager->setSelectedObject(NULL);
}
bool ToolGrab::buttonPress(unsigned int button) {
if(button != 1)
return false;
pressed = true;
grabbedVertex = *editManager->getHoveredVertex();
editManager->setSelectedObject(editManager->getHoveredObject());
editManager->redraw();
sidebar.update();
return true;
}
bool ToolGrab::buttonRelease(unsigned int button) {
if(button != 1)
return false;
pressed = false;
editManager->setSelectedObject(NULL);
editManager->redraw();
sidebar.update();
return true;
}
bool ToolGrab::motion() {
if(!pressed)
return false;
Vertex *v = editManager->getHoveredVertex();
if(!v)
return false;
editManager->getSelectedObject()->move(v->getX()-grabbedVertex.getX(), v->getY()-grabbedVertex.getY());
grabbedVertex = *v;
return true;
}

59
ToolGrab.h Normal file
View file

@ -0,0 +1,59 @@
#ifndef TOOLGRAB_H_
#define TOOLGRAB_H_
#include "Tool.h"
#include "EditManager.h"
#include "SidebarView.h"
class ToolGrab : public Tool, public EventHandler {
private:
GtkWidget *image;
EditManager *editManager;
SidebarView sidebar;
bool pressed;
Vertex grabbedVertex;
// prevent shallow copy
ToolGrab(const ToolGrab &t);
const ToolGrab& operator=(const ToolGrab &t);
public:
ToolGrab(EditManager *editManager);
virtual ~ToolGrab();
virtual void activate();
virtual const char *getType() const {
return "ToolGrab";
}
virtual const char *getName() const {
return "Grab";
}
virtual bool isSensitive() {
return TRUE;
}
virtual GtkWidget *getImage() {
return image;
}
virtual EventHandler* getEventHandler() {
return this;
}
virtual bool buttonPress(unsigned int button);
virtual bool buttonRelease(unsigned int button);
virtual bool motion();
virtual Sidebar* getSidebar() {
return &sidebar;
}
};
#endif /*TOOLGRAB_H_*/