Ignore:
Timestamp:
May 26, 2009, 3:34:36 PM (15 years ago)
Author:
garnier
Message:

update pas dans CVS

File:
1 edited

Legend:

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

    r1041 r1049  
    3535
    3636#ifdef G4VIS_BUILD_OPENGLXM_DRIVER
    37 
     37//#define RESIZE_TEST
    3838#include "G4OpenGLXmViewer.hh"
    3939
     40
     41
     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
    4052void G4OpenGLXmViewer::resize_callback (Widget w,
    4153                                      XtPointer clientData,
    42                                       XtPointer x)
    43 {
    44   expose_callback(w,clientData,x);
    45 }
    46 
    47 
    48 
    49 void G4OpenGLXmViewer::expose_callback (Widget w,
    50                                       XtPointer clientData,
    51                                       XtPointer)
    52 {
     54                                      XtPointer callData)
     55{
     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 ! %d\n");
     68  }
     69#endif
     70#ifdef RESIZE_TEST
    5371  G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData;
    5472  Dimension width, height;
     
    5876                 XmNheight, &height,
    5977                 NULL);
    60 
    6178  pView->ResizeWindow(width,height);
    62 
    63   glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx);
    64 
     79#endif
     80}
     81
     82
     83void G4OpenGLXmViewer::activate_callback (Widget w,
     84                                      XtPointer clientData,
     85                                      XtPointer callData)
     86{
     87#ifdef G4DEBUG_VIS_OGL
     88  printf("G4OpenGLXmViewer::activate_callback \n");
     89#endif
     90}
     91
     92void 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:%d 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:%d 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
    65169  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
    66174  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
    67179  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 
    68188}
    69189
Note: See TracChangeset for help on using the changeset viewer.