Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members   Related Pages  

Common/vtkJavaAwt.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile: vtkJavaAwt.h,v $
00005   Language:  C++
00006 
00007   Copyright (c) 1993-2002 Ken Martin, Will Schroeder, Bill Lorensen 
00008   All rights reserved.
00009   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00010 
00011      This software is distributed WITHOUT ANY WARRANTY; without even 
00012      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00013      PURPOSE.  See the above copyright notice for more information.
00014 
00015 =========================================================================*/
00016 // for use with JAWT
00017 #include "jawt_md.h"
00018 
00019 #define VTK_JAVA_DEBUG
00020 
00021 extern "C" JNIEXPORT jint  JNICALL 
00022 Java_vtk_vtkPanel_RenderCreate(JNIEnv *env, jobject canvas, jobject id0)
00023 {
00024   JAWT awt;
00025   JAWT_DrawingSurface* ds;
00026   JAWT_DrawingSurfaceInfo* dsi;
00027   jint lock;
00028 
00029   // get the render window pointer
00030   vtkRenderWindow *temp0;
00031   temp0 = (vtkRenderWindow *)(vtkJavaGetPointerFromObject(env,id0,(char *) "vtkRenderWindow"));
00032   
00033   /* Get the AWT */
00034   awt.version = JAWT_VERSION_1_3;
00035   if (JAWT_GetAWT(env, &awt) == JNI_FALSE) 
00036     {
00037 #ifndef VTK_JAVA_DEBUG
00038     printf("AWT Not found\n");
00039 #endif
00040     return 1;
00041     }
00042   
00043   /* Get the drawing surface */
00044   ds = awt.GetDrawingSurface(env, canvas);
00045   if (ds == NULL) 
00046     {
00047 #ifndef VTK_JAVA_DEBUG
00048     printf("NULL drawing surface\n");
00049 #endif
00050     return 1;
00051     }
00052   
00053   /* Lock the drawing surface */
00054   lock = ds->Lock(ds);
00055   if((lock & JAWT_LOCK_ERROR) != 0) 
00056     {
00057 #ifndef VTK_JAVA_DEBUG
00058     printf("Error locking surface\n");
00059 #endif
00060     awt.FreeDrawingSurface(ds);
00061     return 1;
00062     }
00063 
00064   /* Get the drawing surface info */
00065   dsi = ds->GetDrawingSurfaceInfo(ds);
00066   if (dsi == NULL) 
00067     {
00068     printf("Error getting surface info\n");
00069     ds->Unlock(ds);
00070     awt.FreeDrawingSurface(ds);
00071     return 1;
00072     }
00073   
00074 // Here is the win32 drawing code
00075 #if defined(_WIN32) || defined(WIN32)
00076   JAWT_Win32DrawingSurfaceInfo* dsi_win;
00077   dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;
00078   temp0->SetWindowId((void *)dsi_win->hwnd);
00079   temp0->SetDisplayId((void *)dsi_win->hdc);
00080   // also set parent id to avoid border sizes being added
00081   temp0->SetParentId((void *)dsi_win->hdc);
00082 // use mac code
00083 #elif defined(VTK_USE_CARBON) || defined(VTK_USE_COCOA)
00084   JAWT_MacDrawingSurfaceInfo* dsi_mac;
00085   dsi_mac = (JAWT_MacDrawingSurfaceInfo*)dsi->platformInfo;
00086   temp0->SetWindowId((void *)dsi_mac->fQDWindow);
00087 // otherwise use X11 code
00088 #else
00089   JAWT_X11DrawingSurfaceInfo* dsi_x11;
00090   dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;
00091   temp0->SetDisplayId((void *)dsi_x11->display);
00092   temp0->SetWindowId((void *)dsi_x11->drawable);
00093   temp0->SetParentId((void *)dsi_x11->display);
00094 #endif
00095   
00096   /* Free the drawing surface info */
00097   ds->FreeDrawingSurfaceInfo(dsi);
00098   
00099   /* Unlock the drawing surface */
00100   ds->Unlock(ds);
00101   
00102   /* Free the drawing surface */
00103   awt.FreeDrawingSurface(ds);
00104 
00105   return 0;
00106 
00107 }
00108 
00109 
00110 // Lock must be called prior to render or anything which might
00111 // cause vtkRenderWindow to make an XLib call or to call Render(). 
00112 // The Lock() and UnLock() functions are necessary for drawing in
00113 // JAWT, but they also provide a form of mutex locking so that multiple
00114 // java threads are prevented from accessing X at the same time.  The only
00115 // requirement JAWT has is that all operations on a JAWT_DrawingSurface 
00116 // MUST be performed from the same thread as the call to GetDrawingSurface.
00117 extern "C" JNIEXPORT jint  JNICALL 
00118 Java_vtk_vtkPanel_Lock(JNIEnv *env, 
00119                        jobject canvas)
00120 {
00121   JAWT awt;
00122   JAWT_DrawingSurface* ds;
00123   jint lock;
00124 
00125   /* Get the AWT */
00126   awt.version = JAWT_VERSION_1_3;
00127   if (JAWT_GetAWT(env, &awt) == JNI_FALSE) 
00128     {
00129 #ifndef VTK_JAVA_DEBUG
00130     printf("AWT Not found\n");
00131 #endif
00132     return 1;
00133     }
00134   
00135   /* Get the drawing surface */
00136   ds = awt.GetDrawingSurface(env, canvas);
00137   if (ds == NULL) 
00138     {
00139 #ifndef VTK_JAVA_DEBUG
00140     printf("NULL drawing surface\n");
00141 #endif
00142     return 1;
00143     }
00144   
00145   /* Lock the drawing surface */
00146   lock = ds->Lock(ds);
00147   if((lock & JAWT_LOCK_ERROR) != 0) 
00148     {
00149 #ifndef VTK_JAVA_DEBUG
00150     printf("Error locking surface\n");
00151 #endif
00152     awt.FreeDrawingSurface(ds);
00153     return 1;
00154     }
00155 
00156   return 0;
00157 
00158 }
00159 
00160 // UnLock() must be called after a Lock() and execution of a
00161 // function which might change the drawing surface.  See Lock().
00162 extern "C" JNIEXPORT jint  JNICALL 
00163 Java_vtk_vtkPanel_UnLock(JNIEnv *env, 
00164                          jobject canvas)
00165 {
00166   JAWT awt;
00167   JAWT_DrawingSurface* ds;
00168 
00169   /* Get the AWT */
00170   awt.version = JAWT_VERSION_1_3;
00171   if (JAWT_GetAWT(env, &awt) == JNI_FALSE) 
00172     {
00173 #ifndef VTK_JAVA_DEBUG
00174     printf("AWT Not found\n");
00175 #endif
00176     return 1;
00177     }
00178   
00179   /* Get the drawing surface */
00180   ds = awt.GetDrawingSurface(env, canvas);
00181   if (ds == NULL) 
00182     {
00183 #ifndef VTK_JAVA_DEBUG
00184     printf("NULL drawing surface\n");
00185 #endif
00186     return 1;
00187     }
00188   
00189   /* Unlock the drawing surface */
00190   ds->Unlock(ds);
00191   
00192   /* Free the drawing surface */
00193   awt.FreeDrawingSurface(ds);
00194 
00195   return 0;
00196 }