Ignore:
Timestamp:
Nov 9, 2009, 6:57:11 PM (15 years ago)
Author:
garnier
Message:

mise en place de Vis dans UI

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/source/visualization/OpenGL/src/G4OpenGLXmWindowHandlingCallbacks.cc

    r1137 r1160  
    3535
    3636#ifdef G4VIS_BUILD_OPENGLXM_DRIVER
    37 #define RESIZE_TEST
     37
    3838#include "G4OpenGLXmViewer.hh"
     39
     40void G4OpenGLXmViewer::resize_callback (Widget w,
     41                                      XtPointer clientData,
     42                                      XtPointer x)
     43{
     44  expose_callback(w,clientData,x);
     45}
    3946
    4047
    4148
    42 // L. Garnier 20 May 2009
    43 // Each resize event send 2-3-4 expose events. Sequence on MacOsX 10.5 is :
    44 // - Expose(s) callback for pixels top/left from resize button
    45 // - Resize callback
    46 // - Expose for main part of content
    47 // - Expose(s) for new part of content
    48 //
    49 // BUT we want to redraw things only ONE time.
    50 // First expose is send with size=="before resize" size and x,y !=0
    51 // and  x+dw!=w || y+dh !=h
    52 void G4OpenGLXmViewer::resize_callback (Widget w,
     49void G4OpenGLXmViewer::expose_callback (Widget w,
    5350                                      XtPointer clientData,
    54                                       XtPointer callData)
     51                                      XtPointer)
    5552{
    56 #ifdef G4DEBUG_VIS_OGL
    57   printf("G4OpenGLXmViewer::resize_callback \n");
    58 #endif
    59   XmDrawingAreaCallbackStruct *data = (XmDrawingAreaCallbackStruct *)callData;
    60 
    61   XEvent                       event;
    62 
    63   // flush others resize events
    64 #ifdef G4DEBUG_VIS_OGL
    65   while (XCheckWindowEvent(XtDisplay(w), data->window,
    66                            ResizeRedirectMask, &event)) {
    67     printf("G4OpenGLXmViewer::resize_callback ------ next RESIZE !\n");
    68   }
    69 #endif
    70 #ifdef RESIZE_TEST
    7153  G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
    7254  Dimension width, height;
     
    7658                 XmNheight, &height,
    7759                 NULL);
     60
    7861  pView->ResizeWindow(width,height);
    79 #endif
    80 }
    8162
     63  glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx);
    8264
    83 void G4OpenGLXmViewer::activate_callback (Widget,
    84                                       XtPointer,
    85                                       XtPointer)
    86 {
    87 #ifdef G4DEBUG_VIS_OGL
    88   printf("G4OpenGLXmViewer::activate_callback \n");
    89 #endif
    90 }
    91 
    92 void G4OpenGLXmViewer::expose_callback (Widget w,
    93                                       XtPointer clientData,
    94                                       XtPointer callData)
    95 {
    96   /* ensure last expose event in sequence */
    97 #ifdef G4DEBUG_VIS_OGL
    98   printf("G4OpenGLXmViewer::expose_callback ?\n");
    99 #endif
    100   XmDrawingAreaCallbackStruct *data = (XmDrawingAreaCallbackStruct *)callData;
    101 
    102   XEvent                       event;
    103 
    104   Dimension width, height;
    105   G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
    106 
    107   XtVaGetValues (w,
    108                  XmNwidth, &width,
    109                  XmNheight, &height,
    110                  NULL);
    111  
    112   XSetWindowAttributes xswa;
    113   xswa.bit_gravity = ForgetGravity ;
    114   XChangeWindowAttributes(XtDisplay(w), XtWindow(w),
    115                           CWBitGravity, &xswa);
    116  
    117     // look for next
    118     //    while (XCheckTypedWindowEvent(XtDisplay(w), XtWindow(w), ResizeRequest, &event)) {
    119     //    printf("G4OpenGLXmViewer::expose_callback --- event type :%d\n",event.type);
    120     //    printf("G4OpenGLXmViewer::expose_callback --- resize %d\n",event.type);
    121     //  }
    122    
    123   // Several expose events are send for each area to be redraw.
    124   // Because we want to optimise redrawing, we only need to redraw once.
    125     if (((XExposeEvent *) data->event)->count != 0) {
    126 #ifdef G4DEBUG_VIS_OGL
    127       printf("G4OpenGLXmViewer::expose_callback NOOOOO %d %d type:%d number:%d send:%lud x:%d y:%d w:%d h:%d c:%d\n",width,height,
    128            ((XExposeEvent *) data->event)->type,
    129            ((XExposeEvent *) data->event)->serial,
    130            ((XExposeEvent *) data->event)->send_event,
    131            ((XExposeEvent *) data->event)->x,
    132            ((XExposeEvent *) data->event)->y,
    133            ((XExposeEvent *) data->event)->width,
    134            ((XExposeEvent *) data->event)->height,
    135            ((XExposeEvent *) data->event)->count);
    136 
    137 
    138 #endif
    139       return;
    140     }
    141 #ifdef G4DEBUG_VIS_OGL
    142     printf("G4OpenGLXmViewer::expose_callback Should redraw %d %d type:%d number:%d send:%lud x:%d y:%d w:%d h:%d c:%d\n",width,height,
    143            ((XExposeEvent *) data->event)->type,
    144            ((XExposeEvent *) data->event)->serial,
    145            ((XExposeEvent *) data->event)->send_event,
    146            ((XExposeEvent *) data->event)->x,
    147            ((XExposeEvent *) data->event)->y,
    148            ((XExposeEvent *) data->event)->width,
    149            ((XExposeEvent *) data->event)->height,
    150            ((XExposeEvent *) data->event)->count);
    151 #endif
    152    
    153 #ifdef G4DEBUG_VIS_OGL
    154     while (XCheckMaskEvent(XtDisplay(w), ResizeRedirectMask, &event)) {
    155       //       printf("G4OpenGLXmViewer::expose_callback ------ next EXPOSE ! %d\n");
    156       //     }
    157       //     while (XCheckWindowEvent(XtDisplay(w), data->window,
    158       //                              ResizeRedirectMask, &event)) {
    159       printf("G4OpenGLXmViewer::expose_callback ------ next RESIZE ! \n");
    160     }
    161 #endif
    162  
    163 #ifdef RESIZE_TEST
    164     glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx);
    165 #ifdef G4DEBUG_VIS_OGL
    166   G4cout << "G4OpenGLXmViewer::expose_callback" << G4endl;
    167   printf("G4OpenGLXmViewer::expose_callback Call SetView()\n");
    168 #endif
    16965  pView->SetView ();
    170 #ifdef G4DEBUG_VIS_OGL
    171   printf("G4OpenGLXmViewer::expose_callback Call SetView() END \n");
    172   printf("G4OpenGLXmViewer::expose_callback Call ClearView() \n");
    173 #endif
    17466  pView->ClearView ();
    175 #ifdef G4DEBUG_VIS_OGL
    176   printf("G4OpenGLXmViewer::expose_callback Call ClearView() END \n");
    177   printf("G4OpenGLXmViewer::expose_callback Call DrawView() \n");
    178 #endif
    17967  pView->DrawView ();
    180 #ifdef G4DEBUG_VIS_OGL
    181   printf("G4OpenGLXmViewer::expose_callback Call DrawView() END \n");
    182   G4cout << "G4OpenGLXmViewer::expose_callback END" << G4endl;
    183 #endif
    184 #endif
    185   return;
    186    
    187  
    18868}
    18969
Note: See TracChangeset for help on using the changeset viewer.