From 0731f12beaa0cfc0de56dc05ca3814143fd394a5 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Tue, 6 Dec 2011 21:01:38 +0000 Subject: FlowCanvas's successor is hereby dubbed Ganv. git-svn-id: http://svn.drobilla.net/lad/trunk/ganv@3820 a436a847-0d15-0410-975c-d299462d15a1 --- ganv/Item.hpp | 90 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 ganv/Item.hpp (limited to 'ganv/Item.hpp') 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 + * + * 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 . + */ + +#ifndef GANV_ITEM_HPP +#define GANV_ITEM_HPP + +#include + +#include +#include + +#include +#include + +#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 -- cgit v1.2.1