summaryrefslogtreecommitdiffstats
path: root/ganv/Item.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2011-12-06 21:01:38 +0000
committerDavid Robillard <d@drobilla.net>2011-12-06 21:01:38 +0000
commit0731f12beaa0cfc0de56dc05ca3814143fd394a5 (patch)
treed8a98ee48badba378172d3a1c46fba2f2e266d37 /ganv/Item.hpp
downloadganv-0731f12beaa0cfc0de56dc05ca3814143fd394a5.tar.gz
ganv-0731f12beaa0cfc0de56dc05ca3814143fd394a5.tar.bz2
ganv-0731f12beaa0cfc0de56dc05ca3814143fd394a5.zip
FlowCanvas's successor is hereby dubbed Ganv.
git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@3820 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'ganv/Item.hpp')
-rw-r--r--ganv/Item.hpp90
1 files changed, 90 insertions, 0 deletions
diff --git a/ganv/Item.hpp b/ganv/Item.hpp
new file mode 100644
index 0000000..534048f
--- /dev/null
+++ b/ganv/Item.hpp
@@ -0,0 +1,90 @@
+/* This file is part of Ganv.
+ * Copyright 2007-2011 David Robillard <http://drobilla.net>
+ *
+ * Ganv is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free
+ * Software Foundation, either version 3 of the License, or (at your option)
+ * any later version.
+ *
+ * Ganv is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Ganv. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GANV_ITEM_HPP
+#define GANV_ITEM_HPP
+
+#include <assert.h>
+
+#include <glib.h>
+#include <libgnomecanvas/gnome-canvas.h>
+
+#include <sigc++/signal.h>
+#include <sigc++/trackable.h>
+
+#include "ganv/wrap.hpp"
+#include "ganv/Canvas.hpp"
+
+namespace Ganv {
+
+class Canvas;
+
+/** An item on the canvas.
+ */
+class Item : public sigc::trackable {
+public:
+ Item(GnomeCanvasItem* gobj)
+ : _gobj(gobj)
+ {
+ GQuark wrapper_key = g_quark_from_string("ganvmm");
+ if (gobj && gobj->parent) {
+ g_object_set_qdata(G_OBJECT(_gobj), wrapper_key, this);
+ g_signal_connect(G_OBJECT(_gobj),
+ "event", G_CALLBACK(on_item_event), this);
+ }
+ }
+
+ virtual ~Item() {}
+ RW_PROPERTY(double, x)
+ RW_PROPERTY(double, y)
+
+ METHOD0(gnome_canvas_item, show);
+ METHOD0(gnome_canvas_item, hide);
+ METHOD0(gnome_canvas_item, raise_to_top);
+ METHOD2(gnome_canvas_item, move, double, dx, double, dy);
+
+ GnomeCanvasItem* property_parent() const {
+ GnomeCanvasItem* parent;
+ g_object_get(G_OBJECT(_gobj), "parent", &parent, NULL);
+ return parent;
+ }
+
+ Canvas* canvas() const {
+ return Glib::wrap(GANV_CANVAS(_gobj->canvas));
+ }
+
+ GnomeCanvasItem* gobj() const { return _gobj; }
+
+ SIGNAL(event, GdkEvent*)
+ SIGNAL(click, GdkEventButton*)
+
+protected:
+ GnomeCanvasItem* const _gobj;
+
+private:
+ static gboolean
+ on_item_event(GnomeCanvasItem* canvasitem,
+ GdkEvent* ev,
+ void* item)
+ {
+ return ((Item*)item)->on_event(ev);
+ }
+};
+
+} // namespace Ganv
+
+#endif // GANV_ITEM_HPP