- Timestamp:
- Nov 9, 2009, 6:57:11 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/source/visualization/OpenGL/src/G4OpenGLXmWindowHandlingCallbacks.cc
r1137 r1160 35 35 36 36 #ifdef G4VIS_BUILD_OPENGLXM_DRIVER 37 #define RESIZE_TEST 37 38 38 #include "G4OpenGLXmViewer.hh" 39 40 void G4OpenGLXmViewer::resize_callback (Widget w, 41 XtPointer clientData, 42 XtPointer x) 43 { 44 expose_callback(w,clientData,x); 45 } 39 46 40 47 41 48 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, 49 void G4OpenGLXmViewer::expose_callback (Widget w, 53 50 XtPointer clientData, 54 XtPointer callData)51 XtPointer) 55 52 { 56 #ifdef G4DEBUG_VIS_OGL57 printf("G4OpenGLXmViewer::resize_callback \n");58 #endif59 XmDrawingAreaCallbackStruct *data = (XmDrawingAreaCallbackStruct *)callData;60 61 XEvent event;62 63 // flush others resize events64 #ifdef G4DEBUG_VIS_OGL65 while (XCheckWindowEvent(XtDisplay(w), data->window,66 ResizeRedirectMask, &event)) {67 printf("G4OpenGLXmViewer::resize_callback ------ next RESIZE !\n");68 }69 #endif70 #ifdef RESIZE_TEST71 53 G4OpenGLXmViewer* pView = (G4OpenGLXmViewer*) clientData; 72 54 Dimension width, height; … … 76 58 XmNheight, &height, 77 59 NULL); 60 78 61 pView->ResizeWindow(width,height); 79 #endif80 }81 62 63 glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx); 82 64 83 void G4OpenGLXmViewer::activate_callback (Widget,84 XtPointer,85 XtPointer)86 {87 #ifdef G4DEBUG_VIS_OGL88 printf("G4OpenGLXmViewer::activate_callback \n");89 #endif90 }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_OGL98 printf("G4OpenGLXmViewer::expose_callback ?\n");99 #endif100 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 next118 // 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_OGL127 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 #endif139 return;140 }141 #ifdef G4DEBUG_VIS_OGL142 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 #endif152 153 #ifdef G4DEBUG_VIS_OGL154 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 #endif162 163 #ifdef RESIZE_TEST164 glXMakeCurrent (pView->dpy, XtWindow(pView->glxarea), pView->cx);165 #ifdef G4DEBUG_VIS_OGL166 G4cout << "G4OpenGLXmViewer::expose_callback" << G4endl;167 printf("G4OpenGLXmViewer::expose_callback Call SetView()\n");168 #endif169 65 pView->SetView (); 170 #ifdef G4DEBUG_VIS_OGL171 printf("G4OpenGLXmViewer::expose_callback Call SetView() END \n");172 printf("G4OpenGLXmViewer::expose_callback Call ClearView() \n");173 #endif174 66 pView->ClearView (); 175 #ifdef G4DEBUG_VIS_OGL176 printf("G4OpenGLXmViewer::expose_callback Call ClearView() END \n");177 printf("G4OpenGLXmViewer::expose_callback Call DrawView() \n");178 #endif179 67 pView->DrawView (); 180 #ifdef G4DEBUG_VIS_OGL181 printf("G4OpenGLXmViewer::expose_callback Call DrawView() END \n");182 G4cout << "G4OpenGLXmViewer::expose_callback END" << G4endl;183 #endif184 #endif185 return;186 187 188 68 } 189 69
Note: See TracChangeset
for help on using the changeset viewer.