author | francesco-ST <francesco.abbate@st.com> | 2010年08月04日 15:26:20 +0200 |
---|---|---|
committer | francesco-ST <francesco.abbate@st.com> | 2010年08月04日 15:26:20 +0200 |
commit | 544643a77a901bc27fc17b7756764c1cb8ccc2a8 (patch) | |
tree | 246e1d2896b984ea9dab3b233fcf801935edc71e /agg-plot | |
parent | f145fa7be5615ac2ffc15f5859e1c9290ba5b9e3 (diff) | |
download | gsl-shell-544643a77a901bc27fc17b7756764c1cb8ccc2a8.tar.gz |
-rw-r--r-- | agg-plot/agg_platform_support_win32.cpp | 12 | ||||
-rw-r--r-- | agg-plot/canvas-window-cpp.h | 11 | ||||
-rw-r--r-- | agg-plot/canvas-window.cpp | 11 | ||||
-rw-r--r-- | agg-plot/canvas-window.h | 4 |
diff --git a/agg-plot/agg_platform_support_win32.cpp b/agg-plot/agg_platform_support_win32.cpp index 3a8f52a9..e5234b01 100644 --- a/agg-plot/agg_platform_support_win32.cpp +++ b/agg-plot/agg_platform_support_win32.cpp @@ -58,6 +58,8 @@ namespace agg unsigned translate(unsigned keycode); + void close(); + pix_format_e m_format; pix_format_e m_sys_format; bool m_flip_y; @@ -231,6 +233,11 @@ namespace agg pthread_mutex_destroy (m_mutex); } + void platform_specific::close() + { + ::SendMessage(m_hwnd, WM_CLOSE, 0, 0); + } + //------------------------------------------------------------------------ void platform_specific::create_pmap(unsigned width, @@ -1218,3 +1225,8 @@ bool platform_support_is_mapped(agg::platform_support *app) { return app->m_specific->m_is_mapped; } + +void platform_support_close_window(agg::platform_support *app) +{ + app->m_specific->close(); +} diff --git a/agg-plot/canvas-window-cpp.h b/agg-plot/canvas-window-cpp.h index df9f02e2..d350e6bd 100644 --- a/agg-plot/canvas-window-cpp.h +++ b/agg-plot/canvas-window-cpp.h @@ -11,10 +11,11 @@ #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); +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); +extern void platform_support_close_window (agg::platform_support *app); class canvas_window : public agg::platform_support { protected: @@ -57,6 +58,8 @@ public: void lock() { platform_support_lock(this); }; void unlock() { platform_support_unlock(this); }; + void close() { platform_support_close_window(this); }; + void start_new_thread (lua_State *L); bool draw(drawable *obj, agg::rgba8 *color, bool as_line) diff --git a/agg-plot/canvas-window.cpp b/agg-plot/canvas-window.cpp index 927a69e7..73cfb81b 100644 --- a/agg-plot/canvas-window.cpp +++ b/agg-plot/canvas-window.cpp @@ -69,6 +69,7 @@ static const struct luaL_Reg canvas_window_methods_protected[] = { {"clear", canvas_window_clear}, {"refresh", canvas_window_refresh}, {"setview", canvas_window_set_box_trans}, + {"close", canvas_window_close}, {NULL, NULL} }; @@ -144,9 +145,11 @@ canvas_thread_function (void *_win) { win->status = canvas_window::running; win->run(); + printf("window id %d terminate.\n", win->id); win->status = canvas_window::closed; GSL_SHELL_LOCK(); + printf("request reference remove window id %d\n", win->id); gsl_shell_unref_plot (win->id); GSL_SHELL_UNLOCK(); } @@ -239,6 +242,14 @@ canvas_window_refresh (lua_State *L) } int +canvas_window_close (lua_State *L) +{ + canvas_window *win = canvas_window::check (L, 1); + win->close(); + return 0; +} + +int canvas_window_index_protected (lua_State *L) { canvas_window *win = canvas_window::check(L, lua_upvalueindex(2)); diff --git a/agg-plot/canvas-window.h b/agg-plot/canvas-window.h index a3b7230a..ef71a002 100644 --- a/agg-plot/canvas-window.h +++ b/agg-plot/canvas-window.h @@ -8,8 +8,8 @@ __BEGIN_DECLS #include "lua.h" extern void canvas_window_register (lua_State *L); - -extern int canvas_window_index (lua_State *L); +extern int canvas_window_index (lua_State *L); +extern int canvas_window_close (lua_State *L); __END_DECLS |