initial version
[synfig.git] / synfig-studio / trunk / src / gtkmm / asyncrenderer.h
1 /* === S I N F G =========================================================== */
2 /*!     \file asyncrenderer.h
3 **      \brief Template Header
4 **
5 **      $Id: asyncrenderer.h,v 1.3 2005/01/12 07:03:42 darco Exp $
6 **
7 **      \legal
8 **      Copyright (c) 2002 Robert B. Quattlebaum Jr.
9 **
10 **      This software and associated documentation
11 **      are CONFIDENTIAL and PROPRIETARY property of
12 **      the above-mentioned copyright holder.
13 **
14 **      You may not copy, print, publish, or in any
15 **      other way distribute this software without
16 **      a prior written agreement with
17 **      the copyright holder.
18 **      \endlegal
19 */
20 /* ========================================================================= */
21
22 /* === S T A R T =========================================================== */
23
24 #ifndef __SINFG_ASYNCRENDERER_H
25 #define __SINFG_ASYNCRENDERER_H
26
27 /* === H E A D E R S ======================================================= */
28
29 #include <ETL/handle>
30 #include <sigc++/signal.h>
31 #include <sigc++/trackable.h>
32 #include <sigc++/connection.h>
33
34 #include <sinfg/target_scanline.h>
35 #include <sinfg/target_tile.h>
36 #include <sinfg/surface.h>
37 #include <glibmm/main.h>
38 #include <ETL/ref_count>
39 #include <glibmm/thread.h>
40 #include <glibmm/dispatcher.h>
41
42 /* === M A C R O S ========================================================= */
43
44 /* === T Y P E D E F S ===================================================== */
45
46 /* === C L A S S E S & S T R U C T S ======================================= */
47
48 namespace studio {
49
50 class AsyncRenderer : public etl::shared_object, public sigc::trackable
51 {
52         sigc::signal<void> signal_finished_;
53         sigc::signal<void> signal_success_;
54
55         std::list<sigc::connection> activity_connection_list;
56         
57         //etl::handle<sinfg::Target_Scanline> target_scanline;
58         //etl::handle<sinfg::Target_Tile> target_tile;
59         etl::handle<sinfg::Target> target;
60
61         bool error;
62         bool success;
63         
64         sinfg::ProgressCallback *cb;
65         
66         sigc::signal<void> signal_stop_;
67
68         Glib::Thread* render_thread;
69         Glib::Dispatcher signal_done_;
70         Glib::Mutex mutex;
71         sigc::connection done_connection;
72
73         /*
74  --     ** -- P A R E N T   M E M B E R S -----------------------------------------
75         */
76 public:
77
78         AsyncRenderer(etl::handle<sinfg::Target> target,sinfg::ProgressCallback *cb=0);
79         virtual ~AsyncRenderer();
80
81         void start();
82         void stop();
83         void pause();
84         void resume();
85
86         bool has_error()const { return error; }
87         bool has_success()const { return success; }
88
89         sigc::signal<void>& signal_finished() { return signal_finished_; }
90         sigc::signal<void>& signal_success() { return signal_success_; }
91
92 private:
93
94         void render_target();
95         void start_();
96
97         /*
98  --     ** -- C H I L D   M E M B E R S -------------------------------------------
99         */
100
101 protected:
102         
103 };
104
105 }; // END of namespace studio
106
107 /* === E N D =============================================================== */
108
109 #endif