|
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
|