X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fnode.h;h=ca5af34afc82ef80e84b5a2bf56ca975d97d5074;hb=9459638ad6797b8139f1e9f0715c96076dbf0890;hp=6d6bbd5b9ff25f86fa4be288dc614082a7eb1162;hpb=e8a065f2385c219c511b57dac52786120bfa097d;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/node.h b/synfig-core/trunk/src/synfig/node.h index 6d6bbd5..ca5af34 100644 --- a/synfig-core/trunk/src/synfig/node.h +++ b/synfig-core/trunk/src/synfig/node.h @@ -2,10 +2,11 @@ /*! \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-2005 Robert B. Quattlebaum Jr., Adrian Bentley +** Copyright (c) 2007 Chris Moore ** ** This package is free software; you can redistribute it and/or ** modify it under the terms of the GNU General Public License as @@ -37,6 +38,11 @@ /* === 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 ======================================= */ @@ -58,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; } @@ -67,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 ------------------------------------- @@ -186,7 +199,7 @@ public: /* -- ** -- M E M B E R F U N C T I O N S ------------------------------------- */ - + public: void changed(); @@ -198,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 ----------------------------------- */ @@ -222,10 +235,10 @@ 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; -}; +}; synfig::Node* find_node(const synfig::GUID& guid); @@ -235,6 +248,32 @@ 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 set_string(set.begin(), set.end()); +} +#endif // _DEBUG + typedef etl::handle NodeHandle; }; // END of namespace synfig