added win32 platform specific functions to close windows - gsl-shell.git - gsl-shell

index : gsl-shell.git
gsl-shell
summary refs log tree commit diff
path: root/agg-plot
diff options
context:
space:
mode:
authorfrancesco-ST <francesco.abbate@st.com>2010年08月04日 15:26:20 +0200
committerfrancesco-ST <francesco.abbate@st.com>2010年08月04日 15:26:20 +0200
commit544643a77a901bc27fc17b7756764c1cb8ccc2a8 (patch)
tree246e1d2896b984ea9dab3b233fcf801935edc71e /agg-plot
parentf145fa7be5615ac2ffc15f5859e1c9290ba5b9e3 (diff)
downloadgsl-shell-544643a77a901bc27fc17b7756764c1cb8ccc2a8.tar.gz
added win32 platform specific functions to close windows
Now all the windows are closed to close the main program to ensure proper object finalisations.
Diffstat (limited to 'agg-plot')
-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
4 files changed, 32 insertions, 6 deletions
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
generated by cgit v1.2.3 (git 2.39.1) at 2025年09月17日 06:44:02 +0000

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