Path: utzoo!attcan!uunet!tut.cis.ohio-state.edu!bloom-beacon!GATEWAY.MITRE.ORG!sbuck
From: sbuck@GATEWAY.MITRE.ORG (Steve Buck)
Newsgroups: comp.windows.x
Subject: re: graphics and widgets
Message-ID: <8908161508.AA12805@gateway.mitre.org>
Date: 16 Aug 89 15:08:25 GMT
References: <8908161014.AA08537@gateway.mitre.org>
Sender: daemon@bloom-beacon.MIT.EDU
Organization: The Internet
Lines: 98

> out in the manuals, sigh.   Anyway all you need to display graphics
> is the Display and Window id of the widget you want to draw into
> (plus of course a suitable graphics context).   To retrieve the Display

Ok,
   here is a section of code that I use to create the GC and when I try
to run it it gives me 'X Protocol error: BadDrawable, invalid Pixmap or Window
			parameter'
	Widget dispwin;
	Window displaywin;
             .
	     .
	     .
	/* get window from widget */
	displaywin = XtWindow (dispwin);
	
        /* create GC for text and drawing */
	get_GC(displaywin, &gc, font_info);

	/* Ask parents to manage children */
	XtManageChild (dispwin);

	/* Realize widget tree */
	XtRealizeWidget (win);

	/* Start event processing loop */
	XtAppMainLoop (app_context);
}

void get_GC (displaywin, gc, font_info)
Window displaywin;
GC *gc;
XFontStruct *font_info;
{
	/* create default graphics context */
	*gc = XCreateGC (display, displaywin, 0, NULL);

	/* specify font */
	XSetFont (display, *gc, font_info->fid);

	/* specify black foreground since default may be white on white */
	XSetForeground (display, *gc, BlackPixel(display, screen));
}

> and Window id from a widget use ... XtDisplay(w) and XtWindow(w).  Nothing
> could be simpler! eg:
> 
> 	XDrawLine(XtDisplay(w), XtWindow(w), gc, 0, 0, 10, 20);
> 
> However ... a word of warning this will not work until the window has been
> realized and mapped and has received the first ConfigureNotify event.
> ie. The Server will ignore these requests as it has no real window to draw
> into.  So what you need to do is to capture the first ConfigureNotify event
> either using a translation string ": turn_on_graphics()"
> or using XtAddEventHandler(w, ... ), the choice is yours,  plus you
> need to capture resize and expose events for redrawing, so a suitable
> XtNtranslations string for your drawing widget might be...
> 
> 	": turn_on_graphics() resize()\n\
> 	 : redraw()"
> 

Ok,
   I also have the problem that when I try to add the procedure draw_graphics
to the translation table it comes back with the error 'X Toolkit Warning:
		Actions not found: draw_graphics.  Here is how I'm changing
the translation table:

	XtTranslations  DisplayTrans;
	static char	DisplayTransTable[]=
				": draw_graphics() \n\
				 : draw_graphics()";
		.
		.
		.
	/* create display window */
	i = 0;
	XtSetArg(args[i], XtNx, 2); i++;
	XtSetArg(args[i], XtNy, 152); i++;
	XtSetArg(args[i], XtNwidth, 600); i++;
	XtSetArg(args[i], XtNheight, 600); i++;
	XtSetArg(args[i], XtNborderWidth, border_width); i++;
	dispwin = XtCreateWidget ("window", formWidgetClass, win, args, i); 

	/* modify translation table */
	DisplayTrans = XtParseTranslationTable(DisplayTransTable);
	XtAugmentTranslations (dispwin, DisplayTrans);


Any ideas as to what is wrong would be appreciated.
             Thanks,
-- 
			-- Steve Buck

The MITRE Corporation, Networking Center
McLean, Virginia
phone:	(703) 883-5574
email:	sbuck@gateway.mitre.org