X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fnode.h;h=ca5af34afc82ef80e84b5a2bf56ca975d97d5074;hb=6f42fe92c16acc3a13124ca528f2a646a6900303;hp=ac877250a402ae60c81ddf38691060d9ba7eded6;hpb=e3acc0b267b14fda5db3c7bbb2f218b993ef84b3;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/node.h b/synfig-core/trunk/src/synfig/node.h index ac87725..ca5af34 100644 --- a/synfig-core/trunk/src/synfig/node.h +++ b/synfig-core/trunk/src/synfig/node.h @@ -1,28 +1,30 @@ -/* === S I N F G =========================================================== */ +/* === S Y N F I G ========================================================= */ /*! \file node.h ** \brief Template Header ** -** $Id: node.h,v 1.3 2005/01/10 07:40:26 darco Exp $ +** $Id$ ** ** \legal -** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** -** This software and associated documentation -** are CONFIDENTIAL and PROPRIETARY property of -** the above-mentioned copyright holder. +** This package 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 2 of +** the License, or (at your option) any later version. ** -** You may not copy, print, publish, or in any -** other way distribute this software without -** a prior written agreement with -** the copyright holder. +** This package 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 more details. ** \endlegal */ /* ========================================================================= */ /* === S T A R T =========================================================== */ -#ifndef __SINFG_PARENTNODE_H -#define __SINFG_PARENTNODE_H +#ifndef __SYNFIG_PARENTNODE_H +#define __SYNFIG_PARENTNODE_H /* === H E A D E R S ======================================================= */ @@ -36,11 +38,16 @@ /* === M A C R O S ========================================================= */ +// When a PasteCanvas layer has a non-zero 'time offset' parameter, should +// the waypoints shown for the canvas be adjusted? This currently only +// partially works - see the TODO at the end of layer_pastecanvas.cpp +#define ADJUST_WAYPOINTS_FOR_TIME_OFFSET + /* === T Y P E D E F S ===================================================== */ /* === C L A S S E S & S T R U C T S ======================================= */ -namespace sinfg { +namespace synfig { class TimePoint { @@ -57,6 +64,10 @@ public: { } +#ifdef _DEBUG + const char *c_str()const; +#endif + const GUID& get_guid()const { return guid; } const Time& get_time()const { return time; } Interpolation get_before()const { return before; } @@ -66,13 +77,16 @@ public: void set_time(const Time& x) { time=x; } void set_before(Interpolation x) { before=x; } void set_after(Interpolation x) { after=x; } - + void absorb(const TimePoint& x); }; // END of class TimePoint inline TimePoint operator+(TimePoint lhs,const Time& rhs) { lhs.set_time(lhs.get_time()+rhs); return lhs; } +inline TimePoint operator-(TimePoint lhs,const Time& rhs) + { lhs.set_time(lhs.get_time()-rhs); return lhs; } + inline bool operator<(const TimePoint& lhs,const TimePoint& rhs) { return lhs.get_time() signal_changed_; //! GUID Changed /*! \note The second parameter is the *OLD* guid! */ - sigc::signal signal_guid_changed_; + sigc::signal signal_guid_changed_; //! Deleted - sigc::signal signal_deleted_; + sigc::signal signal_deleted_; /* -- ** -- S I G N A L I N T E R F A C E ------------------------------------- @@ -185,7 +199,7 @@ public: /* -- ** -- M E M B E R F U N C T I O N S ------------------------------------- */ - + public: void changed(); @@ -197,21 +211,21 @@ public: void set_guid(const GUID& x); int get_time_last_changed()const; - + void add_child(Node*x); void remove_child(Node*x); int parent_count()const; - + const time_set &get_times() const; RWLock& get_rw_lock()const { return rw_lock_; } - + protected: - + void begin_delete(); - + /* -- ** -- V I R T U A L F U N C T I O N S ----------------------------------- */ @@ -221,22 +235,48 @@ protected: virtual void on_guid_changed(GUID guid); - /*! Function to be overloaded that fills + /*! Function to be overloaded that fills */ virtual void get_times_vfunc(time_set &set) const = 0; -}; +}; -sinfg::Node* sinfg::find_node(const sinfg::GUID& guid); +synfig::Node* find_node(const synfig::GUID& guid); template etl::handle -guid_cast(const sinfg::GUID& guid) +guid_cast(const synfig::GUID& guid) +{ + return etl::handle::cast_dynamic(synfig::find_node(guid)); +} + +#ifdef _DEBUG +template +synfig::String set_string(T start, T end) +{ + synfig::String ret("["); + bool started = false; + + while (start != end) + { + if (started) ret += ", "; + else started = true; + + ret += synfig::String((*start).c_str()); + start++; + } + + return ret + "]"; +} + +template +synfig::String set_string(T set) { - return etl::handle::cast_dynamic(sinfg::find_node(guid)); + return set_string(set.begin(), set.end()); } +#endif // _DEBUG typedef etl::handle NodeHandle; -}; // END of namespace sinfg +}; // END of namespace synfig /* === E N D =============================================================== */