X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcanvas.h;fp=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Fcanvas.h;h=0000000000000000000000000000000000000000;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=a6474da9afbb902d93c77e582cbdb5fa748caa4a;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/canvas.h b/synfig-core/trunk/src/synfig/canvas.h deleted file mode 100644 index a6474da..0000000 --- a/synfig-core/trunk/src/synfig/canvas.h +++ /dev/null @@ -1,572 +0,0 @@ -/* === S Y N F I G ========================================================= */ -/*! \file canvas.h -** \brief Canvas Class Implementation -** -** $Id$ -** -** \legal -** Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley -** Copyright (c) 2007, 2008 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 -** published by the Free Software Foundation; either version 2 of -** the License, or (at your option) any later version. -** -** 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 __SYNFIG_CANVAS_H -#define __SYNFIG_CANVAS_H - -/* === H E A D E R S ======================================================= */ - -#include -#include -#include -#include -#include - -#include "vector.h" -#include "string.h" -#include "canvasbase.h" -#include "valuenode.h" -#include "keyframe.h" -#include "renddesc.h" -#include "node.h" -#include "guid.h" - -/* === M A C R O S ========================================================= */ - -/* version change history: - * - * 0.1: the original version - * - * if a waypoint goes from -179 to 179 degrees, that is a 2 - * degree change. there's no way to express a 720 degree - * rotation with a single pair of waypoints - * - * 0.2: svn r1227 - * - * angles no longer wrap at -180 degrees back to 180 degrees; if - * a waypoint goes from -179 to 179 degrees, that is a rotation - * of 358 degrees. loading a version 0.1 canvas will modify - * constant angle waypoints to that they are within 180 degrees - * of the previous waypoint's value - * - * the 'straight' blend method didn't used to work properly. it - * didn't work at all on transparent pixels in layers other than - * the PasteCanvas layer. for example, the examples/japan.sifz - * file has a red circle (straight, amount=1.0) on top of a - * striped conical gradient. if 'straight' was working, the - * conical gradient would be entirely obscured by the circle - * layer (even by its transparent pixels) - * - * 0.3: svn r1422 - * - * the 'straight' blend method was fixed. loading a version 0.2 - * or older canvas will replace the 'straight' blend method in - * non-pastecanvas layers with 'composite', unless they're - * completely transparent, in which case it will replace them - * with an 'alpha over' blend instead. Images like - * examples/logo.sifz use transparent straight blends to do - * masking, which no longer works now that 'straight' blending is - * fixed. - * - * Tangent lengths calculated by the "Segment Tangent" and "BLine - * Tangent" ValueNodes were scaled by a factor of 0.5. - * - * 0.4: svn r1856 - * - * Stop scaling tangents by 0.5. - * - * 0.5: svn r1863 - * - * Added "offset", "scale", and "fixed_length" links to the - * "BLine Tangent" ValueNode. - * - * 0.6: svn r2067 - * - * Added "scale" link to the "BLine Width" ValueNode in svn r1872. - * - * Added "loop" link to the "Gradient Color" ValueNode in svn r1901. - * - * 0.7: svn r2315 - * - * Added "loop" link to the "Random" ValueNode in svn r2315. - */ - -#define CURRENT_CANVAS_VERSION "0.7" - -/* === T Y P E D E F S ===================================================== */ - -/* === C L A S S E S & S T R U C T S ======================================= */ - -namespace synfig { - -class Context; -class GUID; - -/*! \class Canvas -** \todo writeme -*/ -class Canvas : public CanvasBase, public Node -{ - /* - -- ** -- T Y P E S ----------------------------------------------------------- - */ - -public: - typedef etl::handle Handle; - typedef etl::loose_handle LooseHandle; - typedef etl::handle ConstHandle; - - typedef std::list Children; - - friend void synfig::optimize_layers(Time, Context, Canvas::Handle, bool seen_motion_blur); - - /* - -- ** -- D A T A ------------------------------------------------------------- - */ - -private: - - //! Contains the ID string for the Canvas - /*! \see get_id(), set_id() */ - String id_; - - //! Contains the name of the Canvas - /*! \see set_name(), get_name() */ - String name_; - - //! Contains a description of the Canvas - /*! \see set_description(), get_description() */ - String description_; - - //! Contains the canvas' version string - /*! \see set_version(), get_version() */ - String version_; - - //! Contains the author's name - /*! \see set_author(), get_author() */ - String author_; - - //! Contains the author's email address - /*! \todo This private parameter has no binding, so it's unusable at the moment */ - String email_; - - //! File name of Canvas - /*! \see get_file_name(), set_file_name() */ - String file_name_; - - //! Metadata map for Canvas. - /*! \see get_meta_data(), set_meta_data(), erase_meta_data() */ - std::map meta_data_; - - //! Contains a list of ValueNodes that are in this Canvas - /*! \see value_node_list(), find_value_node() */ - ValueNodeList value_node_list_; - - //! \writeme - KeyframeList keyframe_list_; - - //! A handle to the parent canvas of this canvas. - /*! If canvas is a root canvas, then this handle is empty - ** \see parent() - */ - LooseHandle parent_; - - //! List containing any child Canvases - /*! \see children() */ - Children children_; - - //! Render Description for Canvas - /*! \see rend_desc() */ - RendDesc desc_; - - //! Contains the value of the last call to set_time() - Time cur_time_; - - //! \writeme - mutable std::map externals_; - - //! This flag is set if this canvas is "inline" - bool is_inline_; - - mutable bool is_dirty_; - - bool op_flag_; - - //! Layer Group database - std::map > > group_db_; - - //! Layer Connection database - std::map,std::vector > connections_; - - /* - -- ** -- S I G N A L S ------------------------------------------------------- - */ - -private: - - //! Group Added - sigc::signal signal_group_added_; - - //! Group Removed - sigc::signal signal_group_removed_; - - //! Group Changed - sigc::signal signal_group_changed_; - - sigc::signal > signal_group_pair_added_; - sigc::signal > signal_group_pair_removed_; - - //! Layers Reordered - sigc::signal signal_layers_reordered_; - - //! RendDesc Changed - sigc::signal signal_rend_desc_changed_; - - //! ID Changed - sigc::signal signal_id_changed_; - - //! Dirty - //sigc::signal signal_dirty_; - - //! FileName Changed - sigc::signal signal_file_name_changed_; - - //! Metadata Changed - sigc::signal signal_meta_data_changed_; - - //! Key-Specific meta data changed signals - std::map > signal_map_meta_data_changed_; - - - //! ValueBasenode Changed - sigc::signal > signal_value_node_changed_; - - sigc::signal > signal_value_node_renamed_; - - sigc::signal, etl::handle > signal_value_node_child_added_; - - sigc::signal, etl::handle > signal_value_node_child_removed_; - - /* - -- ** -- S I G N A L I N T E R F A C E ------------------------------------- - */ - -public: - - sigc::signal >& signal_group_pair_added() { return signal_group_pair_added_; } - sigc::signal >& signal_group_pair_removed() { return signal_group_pair_removed_; } - - //! Group Added - sigc::signal& signal_group_added() { return signal_group_added_; } - - //! Group Removed - sigc::signal& signal_group_removed() { return signal_group_removed_; } - - //! Group Changed - sigc::signal& signal_group_changed() { return signal_group_changed_; } - - //! Layers Reordered - sigc::signal& signal_layers_reordered() { return signal_layers_reordered_; } - - //! RendDesc Changed - sigc::signal& signal_rend_desc_changed() { return signal_rend_desc_changed_; } - - //! ID Changed - sigc::signal& signal_id_changed() { return signal_id_changed_; } - - //! File name Changed - sigc::signal& signal_file_name_changed(); - - //! Metadata Changed - sigc::signal& signal_meta_data_changed() { return signal_meta_data_changed_; } - - //! Metadata Changed - sigc::signal& signal_meta_data_changed(const String& key) { return signal_map_meta_data_changed_[key]; } - - - sigc::signal >& signal_value_node_changed() { return signal_value_node_changed_; } - - sigc::signal >& signal_value_node_renamed() { return signal_value_node_renamed_; } - - //! Dirty - sigc::signal& signal_dirty() { return signal_changed(); } - - //! \writeme - sigc::signal, etl::handle >& signal_value_node_child_added() { return signal_value_node_child_added_; } - - //! \writeme - sigc::signal, etl::handle >& signal_value_node_child_removed() { return signal_value_node_child_removed_; } - - /* - -- ** -- C O N S T R U C T O R S --------------------------------------------- - */ - -protected: - - Canvas(const String &name); - -public: - - ~Canvas(); - - /* - -- ** -- M E M B E R F U N C T I O N S ------------------------------------- - */ - -public: - - //! Returns the set of layers in group - std::set > get_layers_in_group(const String&group); - - //! Gets all the groups - std::set get_groups()const; - - //! Gets the number of groups in this canvas - int get_group_count()const; - - //! Renames the given group - void rename_group(const String&old_name,const String&new_name); - - //! \writeme - bool is_inline()const { return is_inline_; } - - //! Returns a handle to the RendDesc for this Canvas - RendDesc &rend_desc() { return desc_; } - - //! Returns a handle to the RendDesc for this Canvas - const RendDesc &rend_desc()const { return desc_; } - - //! Gets the name of the canvas - const String & get_name()const { return name_; } - - //! Sets the name of the canvas - void set_name(const String &x); - - //! Gets the version string of the canvas - const String get_version()const { return version_; } - - //! Sets the version string of the canvas - void set_version(const String &x) { version_ = x; } - - //! Gets the author of the canvas - const String & get_author()const { return author_; } - - //! Sets the author of the canvas - void set_author(const String &x); - - //! Gets the description of the canvas - const String & get_description()const { return description_; } - - //! Sets the name of the canvas - void set_description(const String &x); - - //! Gets the ID of the canvas - const String & get_id()const { return id_; } - - //! Sets the ID of the canvas - void set_id(const String &x); - - //! Returns the data string for the given meta data key - String get_meta_data(const String& key)const; - - //! Returns a list of meta data keys - std::list get_meta_data_keys()const; - - //! Sets a meta data key to a specific string - void set_meta_data(const String& key, const String& data); - - //! Removes a meta data key - void erase_meta_data(const String& key); - - //! \writeme - String get_relative_id(etl::loose_handle x)const; - - //! \internal \writeme - String _get_relative_id(etl::loose_handle x)const; - - //! Returns \c true if the Canvas is a root Canvas. \c false otherwise - bool is_root()const { return !parent_; } - - //! Returns a handle to the parent Canvas. - /*! The returned handle will be empty if this is a root canvas */ - LooseHandle parent()const { return parent_; } - - LooseHandle get_root()const; - - //! Returns a list of all child canvases in this canvas - std::list &children() { return children_; } - - //! Returns a list of all child canvases in this canvas - const std::list &children()const { return children_; } - - //! Gets the color at the specified point - //Color get_color(const Point &pos)const; - - //! Sets the time for all the layers in the canvas - void set_time(Time t)const; - - //! \writeme - Time get_time()const { return cur_time_; } - - //! Returns the number of layers in the canvas - int size()const; - - //! Removes all the layers from the canvas - void clear(); - - //! Returns true if the canvas has no layers - bool empty()const; - - //! Returns a reference to the ValueNodeList for this Canvas - // ValueNodeList &value_node_list() { return value_node_list_; } - - //! Returns a reference to the ValueNodeList for this Canvas - const ValueNodeList &value_node_list()const; - - //! Returns a reference to the KeyframeList for this Canvas - KeyframeList &keyframe_list(); - - //! Returns a reference to the KeyframeList for this Canvas - const KeyframeList &keyframe_list()const; - - //! Finds the ValueNode in the Canvas with the given \a id - /*! \return If found, returns a handle to the ValueNode. - ** Otherwise, returns an empty handle. - */ - ValueNode::Handle find_value_node(const String &id); - - //! \internal \writeme - ValueNode::Handle surefind_value_node(const String &id); - - //! Finds the ValueNode in the Canvas with the given \a id - /*! \return If found, returns a handle to the ValueNode. - ** Otherwise, returns an empty handle. - */ - ValueNode::ConstHandle find_value_node(const String &id)const; - - //! \writeme - void add_value_node(ValueNode::Handle x, const String &id); - - //! writeme - //void rename_value_node(ValueNode::Handle x, const String &id); - - //! \writeme - void remove_value_node(ValueNode::Handle x); - - //! \writeme - void remove_value_node(const String &id) { remove_value_node(find_value_node(id)); } - - //! Finds a child Canvas in the Canvas with the given \a name - /*! \return If found, returns a handle to the child Canvas. - ** If not found, it creates a new Canvas and returns it - ** If an error occurs, it returns an empty handle - */ - Handle surefind_canvas(const String &id,String &warnings); - - //! Finds a child Canvas in the Canvas with the given \a id - /*! \return If found, returns a handle to the child Canvas. - ** Otherwise, returns an empty handle. - */ - Handle find_canvas(const String &id, String &warnings); - - //! Finds a child Canvas in the Canvas with the given \a id - /*! \return If found, returns a handle to the child Canvas. - ** Otherwise, returns an empty handle. - */ - ConstHandle find_canvas(const String &id, String &warnings)const; - - //! Sets the file path for the Canvas - //void set_file_path(const String &); - - //! Returns the file path from the file name - String get_file_path()const; - - //! Sets the filename (with path) - void set_file_name(const String &); - - //! Gets the filename (with path) - String get_file_name()const; - - //! Creates a new child canvas, and returns its handle - Handle new_child_canvas(); - - //! Creates a new child canvas with an ID of \a id, and returns its handle - Handle new_child_canvas(const String &id); - - //! Adds the given canvas as a child - Handle add_child_canvas(Handle child_canvas, const String &id); - - void remove_child_canvas(Handle child_canvas); - - etl::handle find_layer(const Point &pos); - - int get_depth(etl::handle)const; - - Context get_context()const; - - iterator end(); - - const_iterator end()const; - - reverse_iterator rbegin(); - - const_reverse_iterator rbegin()const; - - etl::handle &back(); - - void push_back(etl::handle x); - - void push_front(etl::handle x); - - void push_back_simple(etl::handle x); - - void insert(iterator iter,etl::handle x); - void erase(iterator iter); - - const etl::handle &back()const; - - void set_inline(LooseHandle parent); - - static Handle create(); - - static Handle create_inline(Handle parent); - - Handle clone(const GUID& deriv_guid=GUID())const; - - void register_external_canvas(String file, Handle canvas); - -#ifdef _DEBUG - void show_externals(String file, int line, String text) const; -#endif // _DEBUG - -private: - void add_group_pair(String group, etl::handle layer); - void remove_group_pair(String group, etl::handle layer); - void add_connection(etl::loose_handle layer, sigc::connection connection); - void disconnect_connections(etl::loose_handle layer); - -protected: - virtual void on_changed(); - virtual void get_times_vfunc(Node::time_set &set) const; -}; // END of class Canvas - -void optimize_layers(Time time, Context context, Canvas::Handle op_canvas, bool seen_motion_blur=false); - - -}; // END of namespace synfig - -/* === E N D =============================================================== */ - -#endif