Blame synfig-studio/src/gui/asyncrenderer.h

Carlos Lopez a09598
/* === S Y N F I G ========================================================= */
Carlos Lopez a09598
/*!	\file asyncrenderer.h
Carlos Lopez a09598
**	\brief Template Header
Carlos Lopez a09598
**
Carlos Lopez a09598
**	$Id$
Carlos Lopez a09598
**
Carlos Lopez a09598
**	\legal
Carlos Lopez a09598
**	Copyright (c) 2002-2005 Robert B. Quattlebaum Jr., Adrian Bentley
Carlos Lopez a09598
**	Copyright (c) 2007 Chris Moore
Carlos Lopez a09598
**
Carlos Lopez a09598
**	This package is free software; you can redistribute it and/or
Carlos Lopez a09598
**	modify it under the terms of the GNU General Public License as
Carlos Lopez a09598
**	published by the Free Software Foundation; either version 2 of
Carlos Lopez a09598
**	the License, or (at your option) any later version.
Carlos Lopez a09598
**
Carlos Lopez a09598
**	This package is distributed in the hope that it will be useful,
Carlos Lopez a09598
**	but WITHOUT ANY WARRANTY; without even the implied warranty of
Carlos Lopez a09598
**	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Carlos Lopez a09598
**	General Public License for more details.
Carlos Lopez a09598
**	\endlegal
Carlos Lopez a09598
*/
Carlos Lopez a09598
/* ========================================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
/* === S T A R T =========================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
#ifndef __SYNFIG_ASYNCRENDERER_H
Carlos Lopez a09598
#define __SYNFIG_ASYNCRENDERER_H
Carlos Lopez a09598
Carlos Lopez a09598
/* === H E A D E R S ======================================================= */
Carlos Lopez a09598
a86ba5
#include <ctime></ctime>
a86ba5
Carlos Lopez a09598
#include <etl handle=""></etl>
Carlos Lopez a09598
#include <synfig target_scanline.h=""></synfig>
Carlos Lopez a09598
#include <synfig target_tile.h=""></synfig>
Carlos Lopez 80f902
#include <synfig target_cairo.h=""></synfig>
Carlos Lopez 0be21f
#include <synfig target_cairo_tile.h=""></synfig>
Carlos Lopez a09598
#include <synfig surface.h=""></synfig>
Carlos Lopez a09598
#include <glibmm main.h=""></glibmm>
Carlos Lopez a09598
#include <etl ref_count=""></etl>
Carlos Lopez a09598
#include <glibmm thread.h=""></glibmm>
Carlos Lopez a09598
#include <glibmm dispatcher.h=""></glibmm>
Carlos Lopez a09598
557ee3
#include "app.h"
557ee3
Carlos Lopez a09598
/* === M A C R O S ========================================================= */
Carlos Lopez a09598
Carlos Lopez a09598
/* === T Y P E D E F S ===================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
/* === C L A S S E S & S T R U C T S ======================================= */
Carlos Lopez a09598
Carlos Lopez a09598
namespace studio {
Carlos Lopez a09598
Carlos Lopez a09598
class AsyncRenderer : public etl::shared_object, public sigc::trackable
Carlos Lopez a09598
{
luz.paz 99f3ef
	//! Signal emitted when target has been stopped or has finished
Carlos Lopez a09598
	sigc::signal<void> signal_finished_;</void>
luz.paz 99f3ef
	//! Signal emitted when target has succeeded
Carlos Lopez a09598
	sigc::signal<void> signal_success_;</void>
Carlos Lopez a09598
Carlos Lopez b09df0
	//! Seems to be unused
Carlos Lopez a09598
	std::list<sigc::connection> activity_connection_list;</sigc::connection>
Carlos Lopez b09df0
	
Carlos Lopez b09df0
	//! The target that is going to be asynchronously rendered.
Carlos Lopez a09598
	etl::handle<synfig::target> target;</synfig::target>
Carlos Lopez a09598
Carlos Lopez b09df0
	//! Set to true when target render fails.
Carlos Lopez a09598
	bool error;
luz.paz 99f3ef
	//! Set to true when target render succeeded
Carlos Lopez a09598
	bool success;
Carlos Lopez a09598
Carlos López d6f46b
	synfig::ProgressCallback *cb;
luz.paz 99f3ef
	//! Signal to be emitted when the target is requested to stop
Carlos Lopez a09598
	sigc::signal<void> signal_stop_;</void>
Carlos Lopez a09598
Carlos Lopez a09598
	Glib::Thread* render_thread;
Carlos Lopez a09598
	Glib::Dispatcher signal_done_;
Carlos Lopez a09598
	Glib::Mutex mutex;
Carlos Lopez a09598
	sigc::connection done_connection;
Carlos Lopez a09598
a86ba5
	clock_t start_clock;
a86ba5
	clock_t finish_clock;
5d2885
	Glib::TimeVal start_time;
5d2885
	Glib::TimeVal finish_time;
5d2885
Carlos Lopez a09598
	/*
Carlos Lopez a09598
 --	** -- P A R E N T   M E M B E R S -----------------------------------------
Carlos Lopez a09598
	*/
Carlos Lopez a09598
public:
Carlos Lopez a09598
Carlos Lopez a09598
	AsyncRenderer(etl::handle<synfig::target> target,synfig::ProgressCallback *cb=0);</synfig::target>
Carlos Lopez a09598
	virtual ~AsyncRenderer();
Carlos Lopez a09598
Carlos Lopez a09598
	void start();
Carlos Lopez a09598
	void stop();
Carlos Lopez a09598
	void pause();
Carlos Lopez a09598
	void resume();
Carlos Lopez a09598
Carlos Lopez a09598
	bool has_error()const { return error; }
Carlos Lopez a09598
	bool has_success()const { return success; }
5d2885
	synfig::Real get_execution_time() const { return (finish_time - start_time).as_double(); }
a86ba5
	synfig::Real get_execution_clock() const { return (synfig::Real)(finish_clock - start_clock)/(synfig::Real)CLOCKS_PER_SEC; }
Carlos Lopez a09598
Carlos Lopez a09598
	sigc::signal<void>& signal_finished() { return signal_finished_; }</void>
Carlos Lopez a09598
	sigc::signal<void>& signal_success() { return signal_success_; }</void>
Carlos Lopez a09598
Carlos Lopez a09598
private:
Carlos Lopez a09598
Carlos Lopez a09598
	void render_target();
Carlos Lopez a09598
	void start_();
Carlos Lopez a09598
Carlos Lopez a09598
	/*
Carlos Lopez a09598
 --	** -- C H I L D   M E M B E R S -------------------------------------------
Carlos Lopez a09598
	*/
Carlos Lopez a09598
Carlos Lopez a09598
protected:
Carlos Lopez a09598
Carlos Lopez a09598
};
Carlos Lopez a09598
Carlos Lopez a09598
}; // END of namespace studio
Carlos Lopez a09598
Carlos Lopez a09598
/* === E N D =============================================================== */
Carlos Lopez a09598
Carlos Lopez a09598
#endif