X-Git-Url: https://git.pterodactylus.net/?a=blobdiff_plain;ds=sidebyside;f=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Ftarget.h;fp=synfig-core%2Ftrunk%2Fsrc%2Fsynfig%2Ftarget.h;h=e2c48cce50a066262908e6090f429c0c1388b6d4;hb=e3acc0b267b14fda5db3c7bbb2f218b993ef84b3;hp=0000000000000000000000000000000000000000;hpb=ced68168d8518aac837f20e73bcd1e84a6bd6178;p=synfig.git diff --git a/synfig-core/trunk/src/synfig/target.h b/synfig-core/trunk/src/synfig/target.h new file mode 100644 index 0000000..e2c48cc --- /dev/null +++ b/synfig-core/trunk/src/synfig/target.h @@ -0,0 +1,163 @@ +/* === S I N F G =========================================================== */ +/*! \file target.h +** \brief Target Class Implementation +** +** $Id: target.h,v 1.1.1.1 2005/01/04 01:23:15 darco Exp $ +** +** \legal +** Copyright (c) 2002 Robert B. Quattlebaum Jr. +** +** This software and associated documentation +** are CONFIDENTIAL and PROPRIETARY property of +** the above-mentioned copyright holder. +** +** You may not copy, print, publish, or in any +** other way distribute this software without +** a prior written agreement with +** the copyright holder. +** \endlegal +*/ +/* ========================================================================= */ + +/* === S T A R T =========================================================== */ + +#ifndef __SINFG_TARGET_H +#define __SINFG_TARGET_H + +/* === H E A D E R S ======================================================= */ + +#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 SINFG_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 SINFG_TARGET_SET_NAME(class,x) const char class::name__[]=x + +//! \writeme +#define SINFG_TARGET_SET_EXT(class,x) const char class::ext__[]=x + +//! Sets the version of the target +#define SINFG_TARGET_SET_VERSION(class,x) const char class::version__[]=x + +//! Sets the CVS ID of the target +#define SINFG_TARGET_SET_CVS_ID(class,x) const char class::cvs_id__[]=x + +//! \writeme +#define SINFG_TARGET_INIT(class) sinfg::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 sinfg { + +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; + + 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 it's 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, outputing to a file described by \a filename. + static Handle create(const String &type, const String &filename); +}; // END of class Target + +}; // END of namespace sinfg + +/* === E N D =============================================================== */ + +#include "canvas.h" +#endif