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