zoomedit: Added grab tool.
This commit is contained in:
parent
017743d339
commit
e9d27f488c
11 changed files with 165 additions and 4 deletions
|
@ -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:
|
||||||
|
|
|
@ -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_*/
|
||||||
|
|
|
@ -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_*/
|
||||||
|
|
|
@ -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@
|
21
Makefile.in
21
Makefile.in
|
@ -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
|
||||||
|
|
|
@ -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
7
Room.h
|
@ -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_*/
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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
64
ToolGrab.cpp
Normal 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
59
ToolGrab.h
Normal 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_*/
|
Reference in a new issue