Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ XmRedisplayWidget(3X) — IRIX 6.5.3f

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

XmPrintSetup(3)

XmPrintShell(3)



     XmRedisplayWidget(3X)     UNIX System V     XmRedisplayWidget(3X)



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

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

     VERSION
          This page documents Motif 2.1.

     DESCRIPTION
          This function is a convenience routine that hides the
          details of the Xt internals to the application programmer by
          calling the exposemethod of the given widget with a well
          formed Exposeevent and Regioncorresponding to the total area
          of the widget. If the widget doesn't have an Exposemethod,
          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 completely control the sequence
          of rendering requests.

          XmRedisplayWidgetdoesn't clear the widget window prior to
          calling the exposemethod, 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,



     Page 1                                          (printed 1/22/99)





     XmRedisplayWidget(3X)     UNIX System V     XmRedisplayWidget(3X)



               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);
          }




     Page 2                                          (printed 1/22/99)





     XmRedisplayWidget(3X)     UNIX System V     XmRedisplayWidget(3X)



          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)


































     Page 3                                          (printed 1/22/99)



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026