fgreco@govt.shearson.COM (Frank Greco) (08/18/90)
Sorry folks, I erred in my mistatement regarding getting the canvas in an event_proc. I was a bit hasty. After looking at my own code (of course *after* I made my misposting...), the way to get the canvas in an event_proc is to use the CANVAS_PAINT_CANVAS_WINDOW attribute ...i.e., mycanvas = xv_get(pw, CANVAS_PAINT_CANVAS_WINDOW); I've enclosed an example to illustrate: Sorry for the confusion all..... Frank G. ------------------------ Start Cutting --------------------------------- #include <xview/xview.h> #include <xview/canvas.h> #include <xview/xv_xrect.h> #include <xview/win_input.h> #include <X11/Xlib.h> void event_proc(); void repaint_proc(); main(argc,argv) { Frame frame; Canvas canvas; xv_init(XV_INIT_ARGC_PTR_ARGV, &argc, argv, 0); frame = (Frame)xv_create(NULL, FRAME, FRAME_LABEL, "Event Tester", 0); canvas = (Canvas)xv_create(frame, CANVAS, XV_WIDTH, 200, XV_HEIGHT, 200, CANVAS_X_PAINT_WINDOW, TRUE, CANVAS_REPAINT_PROC, repaint_proc, 0); window_fit(frame); xv_set(canvas_paint_window(canvas), WIN_EVENT_PROC, event_proc, WIN_CONSUME_EVENTS, KBD_DONE, KBD_USE, LOC_DRAG, LOC_MOVE, LOC_WINENTER, LOC_WINEXIT, WIN_ASCII_EVENTS, WIN_MOUSE_BUTTONS, NULL, NULL); xv_main_loop(frame); } /**************************************/ void event_proc(xw, event) Xv_window xw; Event *event; { Canvas can; can = (Canvas) xv_get(xw, CANVAS_PAINT_CANVAS_WINDOW); fprintf(stderr, "****************************************\n"); fprintf(stderr, " Canvas: %u (%x)\n", can, can ); fprintf(stderr, " Event ID: %d - %c\n", event_id(event), event_is_ascii(event)? event_id(event) : ' '); fprintf(stderr, " Mouse at: [%4d, %4d]\n", event_x(event), event_y(event)); fprintf(stderr, " Event Flags: %d\n", event_flags(event)); fprintf(stderr, " Window ID: %u\n", event_window(event)); if ( event_string(event) ) fprintf(stderr, " XLookupString: [%s]\n", event_string(event)); fprintf(stderr, " Xevent-Keycode: %u\n", event_xevent(event)->xkey.keycode); fprintf(stderr, "Xevent-Key/Mouse State: %u\n\n", event_xevent(event)->xkey.state); } /**************************************/ void repaint_proc(canvas, pw, dpy, xwin, xrects) Canvas canvas; Xv_Window pw; Display dpy; Window xwin; Xv_xrectlist *xrects; { fprintf(stderr, "FG...Repaint proc called....\n"); } ------------------------ End Cutting ---------------------------------