=================================================================== RCS file: /home/cvs/OpenXM_contrib2/windows/engine2000/ox_plot_win.c,v retrieving revision 1.3 retrieving revision 1.6 diff -u -p -r1.3 -r1.6 --- OpenXM_contrib2/windows/engine2000/ox_plot_win.c 2002/07/30 03:06:20 1.3 +++ OpenXM_contrib2/windows/engine2000/ox_plot_win.c 2002/10/03 03:05:44 1.6 @@ -45,7 +45,7 @@ * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. * - * $OpenXM: OpenXM_contrib2/windows/engine2000/ox_plot_win.c,v 1.2 2001/10/09 01:36:29 noro Exp $ + * $OpenXM: OpenXM_contrib2/windows/engine2000/ox_plot_win.c,v 1.5 2002/10/02 09:33:32 noro Exp $ */ #include "ca.h" #include "parse.h" @@ -62,9 +62,7 @@ static int remotes; static int depth,scrn; extern jmp_buf ox_env; -extern DWORD MainThread; - static int busy; HBRUSH ClearBrush,DrawBrush; @@ -92,21 +90,29 @@ int search_active_canvas() return -1; } +volatile DWORD MainThread; +volatile int canvas_created; +extern HANDLE hMainThreadReady,hCanvasCreated; + void create_canvas(struct canvas *can) { alloc_pixmap(can); can->real_can = can; + WaitForSingleObject(hMainThreadReady,(DWORD)-1); + ResetEvent(hCanvasCreated); PostThreadMessage(MainThread,WM_APP,can->index,0); + WaitForSingleObject(hCanvasCreated,(DWORD)-1); } -void popdown_canvas(int index); - void destroy_canvas(struct canvas *can) { if ( can == current_can ) { reset_busy(can); current_can = 0; } - popdown_canvas(can->index); + can->window = 0; + DeleteObject(can->pix); + closed_canvas[can->index] = can; + canvas[can->index] = 0; } void clear_pixmap(struct canvas *can) @@ -148,12 +154,7 @@ void copy_to_canvas(struct canvas *can) void popup_canvas(int index) { - PostThreadMessage(MainThread,WM_APP+1,index,0); -} - -void popdown_canvas(int index) -{ - PostThreadMessage(MainThread,WM_APP+2,index,0); + create_canvas(canvas[index]); } void copy_subimage(struct canvas *subcan,struct canvas *can,POINT pos)