implemented plot as a subclass of canvas - gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
path: root/agg-plot/canvas-window-cpp.h
diff options
context:
space:
mode:
authorFrancesco Abbate <francesco.bbt@gmail.com>2010年07月20日 21:58:52 +0200
committerFrancesco Abbate <francesco.bbt@gmail.com>2010年07月20日 21:58:52 +0200
commit9cc9699acd1723024c8ba5c82eed9d317115428d (patch)
tree9ca317bc38196af30a29db9bdff23b975a50fb52 /agg-plot/canvas-window-cpp.h
parent9f5ff91f0bc36ecf48d1ae30c3670eaef336703a (diff)
downloadgsl-shell-9cc9699acd1723024c8ba5c82eed9d317115428d.tar.gz
implemented plot as a subclass of canvas
The implementation is still buggy for the moment but it basically works. The plot-window inherit from the canvas-window from the C++ point of view. The relation is mirrored in Lua by introducing inheritance in the gs-types files.
Diffstat (limited to 'agg-plot/canvas-window-cpp.h')
-rw-r--r--agg-plot/canvas-window-cpp.h 80
1 files changed, 80 insertions, 0 deletions
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
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月16日 21:32:52 +0000

AltStyle によって変換されたページ (->オリジナル) /