Remove ancient trunk folder from svn repository
[synfig.git] / synfig-core / src / synfig / target.h
diff --git a/synfig-core/src/synfig/target.h b/synfig-core/src/synfig/target.h
new file mode 100644 (file)
index 0000000..9f6e304
--- /dev/null
@@ -0,0 +1,187 @@
+/* === S Y N F I G ========================================================= */
+/*!    \file target.h
+**     \brief Target Class Implementation
+**
+**     $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
+**     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_TARGET_H
+#define __SYNFIG_TARGET_H
+
+/* === H E A D E R S ======================================================= */
+
+#include <sigc++/signal.h>
+#include "string_decl.h"
+#include <utility>
+//#include <list>
+#include <map>
+#include <ETL/handle>
+#include "renddesc.h"
+//#include "general.h"
+#include "color.h"
+#include "canvas.h"
+
+/* === M A C R O S ========================================================= */
+
+//! \writeme
+#define SYNFIG_TARGET_MODULE_EXT public: static const char name__[], version__[], ext__[],cvs_id__[]; static Target *create(const char *filename);
+
+//! Sets the name of the target
+#define SYNFIG_TARGET_SET_NAME(class,x) const char class::name__[]=x
+
+//! \writeme
+#define SYNFIG_TARGET_SET_EXT(class,x) const char class::ext__[]=x
+
+//! Sets the version of the target
+#define SYNFIG_TARGET_SET_VERSION(class,x) const char class::version__[]=x
+
+//! Sets the CVS ID of the target
+#define SYNFIG_TARGET_SET_CVS_ID(class,x) const char class::cvs_id__[]=x
+
+//! \writeme
+#define SYNFIG_TARGET_INIT(class) synfig::Target* class::create(const char *filename) { return new class(filename); }
+
+/* === 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 Surface;
+class RendDesc;
+class Canvas;
+class ProgressCallback;
+
+/*!    \class Target
+**     \brief Render-target
+**     \todo writeme
+*/
+class Target : public etl::shared_object
+{
+public:
+       typedef etl::handle<Target> Handle;
+       typedef etl::loose_handle<Target> LooseHandle;
+       typedef etl::handle<const Target> ConstHandle;
+
+       /*
+ -- ** -- S I G N A L S -------------------------------------------------------
+       */
+
+private:
+
+       sigc::signal<void> signal_progress_;
+
+       /*
+ -- ** -- S I G N A L   I N T E R F A C E -------------------------------------
+       */
+
+public:
+
+       sigc::signal<void>& signal_progress() { return signal_progress_; }
+
+       /*
+ --    ** -- C O N S T R U C T O R S ---------------------------------------------
+       */
+
+public:
+       typedef Target* (*Factory)(const char *filename);
+
+       //! A type for a map of targets, indexed by the name of the Target
+       typedef std::map<String,std::pair<Factory,String> > Book;
+
+       typedef std::map<String,String> ExtBook;
+
+       //! Target Book, indexed by the target's name
+       static Book* book_;
+
+       //! Map of target names indexed by associated file extension
+       static ExtBook* ext_book_;
+
+       static Book& book();
+       static ExtBook& ext_book();
+
+       static bool subsys_init();
+       static bool subsys_stop();
+
+       //! Adjusted Render description set by set_rend_desc()
+       RendDesc desc;
+
+       etl::handle<Canvas> canvas;
+
+       int quality_;
+       Gamma gamma_;
+
+       bool remove_alpha;
+
+       bool avoid_time_sync_;
+
+protected:
+
+       Target();
+
+public:
+       virtual ~Target() { }
+
+       int get_quality()const { return quality_; }
+
+       void set_quality(int q) { quality_=q; }
+
+       void set_avoid_time_sync(bool x=true) { avoid_time_sync_=x; }
+
+       bool get_avoid_time_sync()const { return avoid_time_sync_; }
+
+       bool get_remove_alpha()const { return remove_alpha; }
+
+       void set_remove_alpha(bool x=true) { remove_alpha=x; }
+
+       Gamma &gamma() { return gamma_; }
+
+       const Gamma &gamma()const { return gamma_; }
+
+       virtual void set_canvas(etl::handle<Canvas> c);
+
+       const etl::handle<Canvas> &get_canvas()const { return canvas; }
+
+       RendDesc &rend_desc() { return desc; }
+       const RendDesc &rend_desc()const { return desc; }
+
+       //! Renders the canvas to the target
+       virtual bool render(ProgressCallback *cb=NULL)=0;
+
+       //! Sets the RendDesc for the Target to \a desc.
+       /*!     If there are any parts of \a desc that the render target
+       **      is not capable of doing, the render target will adjust
+       **      \a desc to fit its needs.
+       */
+       virtual bool set_rend_desc(RendDesc *d) { desc=*d; return true; }
+
+       virtual bool init() { return true; }
+
+       //! Creates a new Target described by \a type, outputting to a file described by \a filename.
+       static Handle create(const String &type, const String &filename);
+}; // END of class Target
+
+}; // END of namespace synfig
+
+/* === E N D =============================================================== */
+
+#include "canvas.h"
+#endif