[comp.windows.x] correcting my error...

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 ---------------------------------