home *** CD-ROM | disk | FTP | other *** search
/ IRIX Patches 1995 June / SGI IRIX Patches 1995 Jun.iso / 5.3_patches / patchSG0000154 / patchSG0000154.idb / usr / share / src / OpenGL / libwidget / double.c.z / double.c
Encoding:
C/C++ Source or Header  |  1995-06-12  |  4.3 KB  |  162 lines

  1. #include <stdio.h>
  2. #include <Xm/Form.h>
  3. #include <Xm/Frame.h>
  4. #include <X11/keysym.h>
  5. #include <GL/GLwMDrawA.h>
  6.  
  7. /* Callbacks */
  8. static void draw_scene_callback();
  9. static void do_resize();
  10. static void init_window();
  11. static void input();
  12.  
  13.  
  14. static XtAppContext app_context;
  15. static String fallback_resources[] = {
  16.     "*frame*shadowType: SHADOW_IN",
  17.     "*GLwMDrawingArea*width: 100",
  18.     "*GLwMDrawingArea*height: 100",
  19.     "*GLwMDrawingArea*rgba: TRUE",
  20.     "*GLwMDrawingArea*allocateBackground: TRUE",
  21.     "*glwidget*background:red",
  22.     "*glwidget2*background:green",
  23.     NULL
  24.     };
  25.  
  26. main(argc, argv)
  27. int argc;
  28. char *argv[];
  29. {
  30.     Arg args[20];
  31.     int n;
  32.     Widget glw, toplevel, form, frame;
  33.  
  34.  
  35.     toplevel = XtAppInitialize(&app_context, "4DgiftsGLw", 
  36.                    (XrmOptionDescList)NULL, 
  37.                    (Cardinal)0,
  38.                    (int *)&argc, 
  39.                    (String*)argv, 
  40.                    fallback_resources,
  41.                    (ArgList)NULL, 0);
  42.  
  43.     n = 0;
  44.     form = XmCreateForm(toplevel, "form", args, n);
  45.     XtManageChild(form);
  46.  
  47.     n = 0;
  48.     XtSetArg(args[n], XtNx, 30); n++;
  49.     XtSetArg(args[n], XtNy, 30); n++;
  50.     XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
  51.     XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  52.     XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  53.     XtSetArg(args[n], XmNleftOffset, 30); n++;
  54.     XtSetArg(args[n], XmNtopOffset, 30); n++;
  55.     XtSetArg(args[n], XmNrightOffset, 30); n++;
  56.     frame = XmCreateFrame (form, "frame", args, n);
  57.     XtManageChild (frame);
  58.  
  59.     n = 0;
  60.     glw = GLwCreateMDrawingArea(frame, "glwidget", args, n);
  61.     XtManageChild (glw);
  62.     XtAddCallback(glw, GLwNexposeCallback, draw_scene_callback, 0);
  63.     XtAddCallback(glw, GLwNresizeCallback, do_resize, 0);
  64.     XtAddCallback(glw, GLwNginitCallback, init_window, 0);
  65.     XtAddCallback(glw, GLwNinputCallback, input, 0);
  66.  
  67.     n = 0;
  68.     XtSetArg(args[n], XtNx, 30); n++;
  69.     XtSetArg(args[n], XtNy, 30); n++;
  70.     XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
  71.     XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
  72.     XtSetArg(args[n], XmNtopWidget, frame); n++;
  73.     XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
  74.     XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
  75.     XtSetArg(args[n], XmNleftOffset, 30); n++;
  76.     XtSetArg(args[n], XmNtopOffset, 30); n++;
  77.     XtSetArg(args[n], XmNbottomOffset, 30); n++;
  78.     XtSetArg(args[n], XmNrightOffset, 30); n++;
  79.     frame = XmCreateFrame (form, "frame", args, n);
  80.     XtManageChild (frame);
  81.  
  82.     n = 0;
  83.     glw = GLwCreateMDrawingArea(frame, "glwidget2", args, n);
  84.     XtManageChild (glw);
  85.     XtAddCallback(glw, GLwNexposeCallback, draw_scene_callback, 0);
  86.     XtAddCallback(glw, GLwNresizeCallback, do_resize, 0);
  87.     XtAddCallback(glw, GLwNginitCallback, init_window, 0);
  88.     XtAddCallback(glw, GLwNinputCallback, input, 0);
  89.  
  90.     XtRealizeWidget(toplevel);
  91.  
  92.     XtAppMainLoop(app_context);
  93.  
  94. }
  95.  
  96.  
  97. static void
  98. init_window(Widget w, XtPointer client_data, XtPointer call_data)
  99. {
  100.     Arg args[1];
  101.     XVisualInfo *vi;
  102.     GLXContext glx_context;
  103.  
  104.     printf ("ginit\n");
  105.  
  106.     XtSetArg(args[0], GLwNvisualInfo, &vi);
  107.     XtGetValues(w, args, 1);
  108.  
  109.     glx_context = glXCreateContext(XtDisplay(w), vi, 0, GL_FALSE);
  110.     XtSetArg(args[0], XmNuserData, glx_context);
  111.     XtSetValues(w, args, 1);
  112. }
  113.  
  114.  
  115. static void
  116. draw_scene_callback(Widget w, XtPointer client_data, XtPointer call_data)
  117. {
  118.     GLXContext glx_context;
  119.     Arg args[1];
  120.  
  121.     XtSetArg(args[0], XmNuserData, &glx_context);
  122.     XtGetValues(w, args, 1);
  123.  
  124.     GLwDrawingAreaMakeCurrent(w, glx_context);
  125.  
  126. #ifdef notdef
  127.     /* clear the buffer    */
  128.     glClearColor(1,1,0,1);
  129.     glClear(GL_COLOR_BUFFER_BIT);
  130.     glFlush();
  131. #endif
  132. }
  133.  
  134. static void
  135. do_resize(Widget w, XtPointer client_data,
  136.       GLwDrawingAreaCallbackStruct *call_data)
  137. {
  138.     printf ("resize to %d, %d\n", call_data->width, call_data->height);
  139. }
  140.  
  141. /* Process all Input callbacks*/
  142. static void
  143. input(Widget w, XtPointer client_data, GLwDrawingAreaCallbackStruct *call_data)
  144. {
  145.     char buffer[1];
  146.     KeySym keysym;
  147.  
  148.     switch(call_data->event->type)
  149.     {
  150.     case KeyRelease:
  151.     /* It is necessary to convert the keycode to a keysym before
  152.      * it is possible to check if it is an escape
  153.      */
  154.     if (XLookupString((XKeyEvent *) call_data->event,buffer,1,&keysym,NULL)
  155.         == 1 && keysym == (KeySym)XK_Escape)
  156.         exit(0);
  157.     break;
  158.     }
  159. }
  160.  
  161.  
  162.