author | Francesco Abbate <francesco.bbt@gmail.com> | 2010年07月20日 21:58:52 +0200 |
---|---|---|
committer | Francesco Abbate <francesco.bbt@gmail.com> | 2010年07月20日 21:58:52 +0200 |
commit | 9cc9699acd1723024c8ba5c82eed9d317115428d (patch) | |
tree | 9ca317bc38196af30a29db9bdff23b975a50fb52 /agg-plot/canvas-window-cpp.h | |
parent | 9f5ff91f0bc36ecf48d1ae30c3670eaef336703a (diff) | |
download | gsl-shell-9cc9699acd1723024c8ba5c82eed9d317115428d.tar.gz |
-rw-r--r-- | agg-plot/canvas-window-cpp.h | 80 |
diff --git a/agg-plot/canvas-window-cpp.h b/agg-plot/canvas-window-cpp.h new file mode 100644 index 00000000..21a54da0 --- /dev/null +++ b/agg-plot/canvas-window-cpp.h @@ -0,0 +1,80 @@ +#ifndef CANVAS_WINDOW_CPP_H +#define CANVAS_WINDOW_CPP_H + +#include "platform/agg_platform_support.h" +#include "agg_trans_affine.h" +#include "agg_color_rgba.h" + +#include "defs.h" +#include "canvas-window.h" +#include "vertex-source.h" +#include "canvas.h" +#include "utils.h" + +extern void platform_support_prepare (); +extern void platform_support_lock (agg::platform_support *app); +extern void platform_support_unlock (agg::platform_support *app); +extern bool platform_support_is_mapped (agg::platform_support *app); + +class canvas_window : public agg::platform_support { +protected: + canvas *m_canvas; + agg::rgba m_bgcolor; + + agg::trans_affine m_user_trans; + agg::trans_affine m_canvas_trans; + +public: + + enum win_status_e { not_ready, starting, running, error, closed }; + + int id; + enum win_status_e status; + + canvas_window(agg::rgba& bgcol) : + agg::platform_support(agg::pix_format_bgr24, true), + m_canvas(NULL), m_bgcolor(bgcol), m_user_trans(), m_canvas_trans(), + id(-1), status(not_ready) + { }; + + virtual ~canvas_window() + { + if (m_canvas) + delete m_canvas; + }; + + virtual void on_init(); + virtual void on_resize(int sx, int sy); + virtual void on_draw(); + + void start(); + + void lock() { platform_support_lock(this); }; + void unlock() { platform_support_unlock(this); }; + + void start_new_thread (lua_State *L); + + bool draw(vertex_source *obj, agg::rgba8 *color) + { + if (! m_canvas) + return false; + + m_canvas->draw(*obj, *color); + return true; + }; + + void set_user_transform(agg::trans_affine& mtx) + { + m_user_trans = mtx; + }; + + void set_global_transform(agg::trans_affine& mtx) + { + mtx = m_user_trans; + trans_affine_compose (mtx, m_canvas_trans); + } + + static canvas_window *check (lua_State *L, int index); +}; + +#endif |