manpagez: man pages & more
man XmRedisplayWidget(3)
Home | html | info | man
XmRedisplayWidget(library call)                XmRedisplayWidget(library call)




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
       Expose 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(library call)

openMotif 2.3.1 - Generated Tue Dec 2 08:38:34 CST 2008
© manpagez.com 2000-2024
Individual documents may contain additional copyright information.