- Timestamp:
- May 26, 2009, 3:34:36 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/visualization/OpenGL/src/G4OpenGLXmWindowHandlingCallbacks.cc
r1041 r1049 35 35 36 36 #ifdef G4VIS_BUILD_OPENGLXM_DRIVER 37 37 //#define RESIZE_TEST 38 38 #include "G4OpenGLXmViewer.hh" 39 39 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 40 52 void G4OpenGLXmViewer::resize_callback (Widget w, 41 53 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 53 71 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData; 54 72 Dimension width, height; … … 58 76 XmNheight, &height, 59 77 NULL); 60 61 78 pView->ResizeWindow(width,height); 62 63 glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx); 64 79 #endif 80 } 81 82 83 void 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 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:%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 65 169 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 66 174 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 67 179 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 68 188 } 69 189
Note: See TracChangeset
for help on using the changeset viewer.