Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
XmRedisplayWidget(3)	   Library Functions Manual	  XmRedisplayWidget(3)

NAME
       XmRedisplayWidget  --  Synchronously  activates	the expose method of a
       widget to draw its content

SYNOPSIS
       #include	<Xm/Xm.h>
       voidXmRedisplayWidget(
       Widgetwidget);

DESCRIPTION
       This function is	a convenience routine that hides the details of	the Xt
       internals to the	application programmer by calling the expose method of
       the given widget	with a well formed Expose event	and Region correspond-
       ing  to the total area of the widget. If	the widget doesn't have	an Ex-
       pose method, the	function does nothing.

       This is primarily used in the context of	X Printing if the  programming
       model  chosen  by  the  application is synchronous; that	is, it doesn't
       rely of X Print events for the driving of page layout but wants to com-
       pletely control the sequence of rendering requests.

       XmRedisplayWidget  doesn't clear	the widget window prior	to calling the
       expose method, since this is handled by calls to	XpStartPage .

       widget	 The widget to redisplay.

RETURN VALUE
       None.

ERRORS/WARNINGS
       Not applicable

EXAMPLES
       In the following, a simple application wants to print the content of  a
       multi-page text widget (similar to dtpad).

       PrintOKCallback(print_dialog...)
       /*-------------*/
       {
	   pshell = XmPrintSetup (print_dialog,	pbs->print_screen,
					  "Print", NULL, 0);

	   XpStartJob(XtDisplay(pshell), XPSpool);

	   /**** here I	realize	the shell, get its size, create	my widget
	    hierarchy: a bulletin board, and then a text widget,
	    that I stuff with the video	text widget buffer */

	   /* get the total number of pages to print */
	   XtVaGetValues(ptext,	XmNrows, &prows,
				XmNtotalLines, n_lines,	NULL);
	   n_pages = n_lines / prows;

	   /***** now print the	pages in a loop	*/

	   for (cur_page=0; cur_page !=	n_pages; cur_page++) {

		      XpStartPage(XtDisplay(pshell), XtWindow(pshell), False);
		      XmRedisplayWidget(ptext);	 /* do the drawing */
		      XpEndPage(XtDisplay(pshell));

	       XmTextScroll(ptext, prows);  /* get ready for next page */
	   }

	   /***** I'm done */
	   XpEndJob(XtDisplay(pshell));

       }

       Of  course,  one	 could change the above	code to	include	it in a	fork()
       branch so that the main program is not blocked while printing is	 going
       on. Another way to achieve a "print-in-the-background" effect is	to use
       an Xt workproc. Using the same sample application, that gives us:

       Boolean
       PrintOnePageWP(XtPointer	npages)	/* workproc */
       /*-------------*/
       {
	   static int cur_page = 0;
	   cur_page++;

	   XpStartPage(XtDisplay(pshell), XtWindow(pshell), False);
	   XmRedisplayWidget(ptext);  /* do the	drawing	*/
	   XpEndPage(XtDisplay(pshell));

	   XmTextScroll(ptext, prows);	/*  get	ready for next page */

	   if (cur_page	== n_pages) { /***** I'm done */
	       XpEndJob(XtDisplay(pshell));

	       XtDestroyWidget(pshell);
	       XtCloseDisplay(XtDisplay(pshell));
	   }

	   return (cur_page == n_pages);
       }

       PrintOKCallback(...)
       /*-------------*/
       {
	   pshell = XmPrintSetup (widget, pbs->print_screen,
					  "Print", NULL, 0);

	   XpStartJob(XtDisplay(pshell), XPSpool);

	   /**** here I	get the	size of	the shell, create my widget
		 hierarchy: a bulletin board, and then a text widget,
			 that I	stuff with the video text widget buffer	*/

	   /* get the total number of pages to print */
	   /* ... same code as above example */

	   /***** print	the pages in the background */
	   XtAppAddWorkProc(app_context, PrintOnePageWP, n_pages);
       }

SEE ALSO
       XmPrintSetup(3),	XmPrintShell(3)

							  XmRedisplayWidget(3)

NAME | SYNOPSIS | DESCRIPTION | RETURN VALUE | ERRORS/WARNINGS | EXAMPLES | SEE ALSO

Want to link to this manual page? Use this URL:
<https://www.freebsd.org/cgi/man.cgi?query=XmRedisplayWidget&sektion=3&manpath=FreeBSD+12.0-RELEASE+and+Ports>

home | help