/* 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 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 "ganv/canvas-base.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(GanvItem* 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() { gtk_object_destroy(GTK_OBJECT(_gobj)); } RW_PROPERTY(double, x) RW_PROPERTY(double, y) METHOD0(ganv_item, show); METHOD0(ganv_item, hide); METHOD0(ganv_item, raise_to_top); METHOD2(ganv_item, move, double, dx, double, dy); GanvItem* property_parent() const { GanvItem* parent; g_object_get(G_OBJECT(_gobj), "parent", &parent, NULL); return parent; } Canvas* canvas() const { return Glib::wrap(GANV_CANVAS(_gobj->canvas)); } GanvItem* gobj() const { return _gobj; } SIGNAL(event, GdkEvent*) SIGNAL(click, GdkEventButton*) protected: GanvItem* const _gobj; private: static gboolean on_item_event(GanvItem* canvasitem, GdkEvent* ev, void* item) { return ((Item*)item)->on_event(ev); } }; } // namespace Ganv #endif // GANV_ITEM_HPP