- Main Page
- Related Pages
- Namespaces
- Classes
- Files

# asyncrenderer.h

Go to the documentation of this file.

    00001 /* === S Y N F I G ========================================================= */
    00022 /* ========================================================================= */
    00023
    00024 /* === S T A R T =========================================================== */
    00025
    00026 #ifndef __SYNFIG_ASYNCRENDERER_H
    00027 #define __SYNFIG_ASYNCRENDERER_H
    00028
    00029 /* === H E A D E R S ======================================================= */
    00030
    00031 #include <ETL/handle>
    00032 #include <sigc++/signal.h>
    00033 #include <sigc++/trackable.h>
    00034 #include <sigc++/connection.h>
    00035
    00036 #include <synfig/target_scanline.h>
    00037 #include <synfig/target_tile.h>
    00038 #include <synfig/surface.h>
    00039 #include <glibmm/main.h>
    00040 #include <ETL/ref_count>
    00041 #include <glibmm/thread.h>
    00042 #include <glibmm/dispatcher.h>
    00043
    00044 /* === M A C R O S ========================================================= */
    00045
    00046 // uncomment to use a single thread, and hopefully get more stability
    00047 // #define SINGLE_THREADED
    00048 #ifdef SINGLE_THREADED
    00049 #  define single_threaded() App::single_threaded
    00050 #endif
    00051
    00052 /* === T Y P E D E F S ===================================================== */
    00053
    00054 /* === C L A S S E S & S T R U C T S ======================================= */
    00055
    00056 namespace studio {
    00057
    00058 class AsyncRenderer : public etl::shared_object, public sigc::trackable
    00059 {
    00060     sigc::signal<void> signal_finished_;
    00061     sigc::signal<void> signal_success_;
    00062
    00063     std::list<sigc::connection> activity_connection_list;
    00064
    00065     //etl::handle<synfig::Target_Scanline> target_scanline;
    00066     //etl::handle<synfig::Target_Tile> target_tile;
    00067     etl::handle<synfig::Target> target;
    00068
    00069     bool error;
    00070     bool success;
    00071
    00072     synfig::ProgressCallback *cb;
    00073
    00074     sigc::signal<void> signal_stop_;
    00075
    00076     Glib::Thread* render_thread;
    00077     Glib::Dispatcher signal_done_;
    00078     Glib::Mutex mutex;
    00079     sigc::connection done_connection;
    00080
    00081     /*
    00082  -- ** -- P A R E N T   M E M B E R S -----------------------------------------
    00083     */
    00084 public:
    00085
    00086     AsyncRenderer(etl::handle<synfig::Target> target,synfig::ProgressCallback *cb=0);
    00087     virtual ~AsyncRenderer();
    00088
    00089     void start();
    00090     void stop();
    00091     void pause();
    00092     void resume();
    00093 #ifdef SINGLE_THREADED
    00094     void rendering_progress();
    00095     bool updating;
    00096 #endif
    00097
    00098     bool has_error()const { return error; }
    00099     bool has_success()const { return success; }
    00100
    00101     sigc::signal<void>& signal_finished() { return signal_finished_; }
    00102     sigc::signal<void>& signal_success() { return signal_success_; }
    00103
    00104 private:
    00105
    00106     void render_target();
    00107     void start_();
    00108
    00109     /*
    00110  -- ** -- C H I L D   M E M B E R S -------------------------------------------
    00111     */
    00112
    00113 protected:
    00114
    00115 };
    00116
    00117 }; // END of namespace studio
    00118
    00119 /* === E N D =============================================================== */
    00120
    00121 #endif