X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;f=synfig-core%2Fsrc%2Fsynfig%2Ftarget.h;fp=synfig-core%2Fsrc%2Fsynfig%2Ftarget.h;h=9f6e3049011f285ad47777ebdbb25ff296dec14e;hb=a095981e18cc37a8ecc7cd237cc22b9c10329264;hp=0000000000000000000000000000000000000000;hpb=9459638ad6797b8139f1e9f0715c96076dbf0890;p=synfig.git diff --git a/synfig-core/src/synfig/target.h b/synfig-core/src/synfig/target.h new file mode 100644 index 0000000..9f6e304 --- /dev/null +++ b/synfig-core/src/synfig/target.h @@ -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 +#include "string_decl.h" +#include +//#include +#include +#include +#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 Handle; + typedef etl::loose_handle LooseHandle; + typedef etl::handle ConstHandle; + + /* + -- ** -- S I G N A L S ------------------------------------------------------- + */ + +private: + + sigc::signal signal_progress_; + + /* + -- ** -- S I G N A L I N T E R F A C E ------------------------------------- + */ + +public: + + sigc::signal& 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 > Book; + + typedef std::map 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; + + 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 c); + + const etl::handle &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