/*=========================================================================Program: Visualization ToolkitModule: vtkJavaAwt.hCopyright (c) Ken Martin, Will Schroeder, Bill LorensenAll rights reserved.See Copyright.txt or http://www.kitware.com/Copyright.htm for details.This software is distributed WITHOUT ANY WARRANTY; without eventhe implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULARPURPOSE. See the above copyright notice for more information.=========================================================================*/#ifndef vtkJavaAwt_h#define vtkJavaAwt_h// for use with JAWT#include "jawt_md.h"#define VTK_JAVA_DEBUG// On OS X, disable deprecation warnings since JAWT_GetAWT() is deprecated.#if defined(__APPLE__) && defined(__GNUC__)#pragma GCC diagnostic push#pragma GCC diagnostic ignored "-Wdeprecated-declarations"#endif#if defined(_WIN32)#define WIN32_JAWT_LOCK_HACK#endif#if defined(WIN32_JAWT_LOCK_HACK)#define WJLH_MAX_COUNT (32)#define WJLH_HASH_FUNC(E,C,H) {\jclass cls = E->GetObjectClass(C);\jmethodID mid = E->GetMethodID(cls, "hashCode", "()I");\H = E->CallIntMethod(C, mid); }# include "vtkWindows.h"int WJLH_init_check = 0;# include <map> // STL Headerstd::map<int,int> WJLH_lock_map;#endifextern "C" JNIEXPORT jint JNICALLJava_vtk_vtkPanel_RenderCreate(JNIEnv *env, jobject canvas, jobject id0){#if defined(WIN32_JAWT_LOCK_HACK)int hash;WJLH_HASH_FUNC(env, canvas, hash);WJLH_lock_map[hash] = 0;#endifJAWT awt;JAWT_DrawingSurface* ds;JAWT_DrawingSurfaceInfo* dsi;jint lock;// get the render window pointervtkRenderWindow *temp0;temp0 = (vtkRenderWindow *)(vtkJavaGetPointerFromObject(env,id0));/* Get the AWT */awt.version = JAWT_VERSION_1_3;if (JAWT_GetAWT(env, &awt) == JNI_FALSE){#ifndef VTK_JAVA_DEBUGprintf("AWT Not found\n");#endifreturn 1;}/* Get the drawing surface */ds = awt.GetDrawingSurface(env, canvas);if (ds == NULL){#ifndef VTK_JAVA_DEBUGprintf("NULL drawing surface\n");#endifreturn 1;}/* Lock the drawing surface */lock = ds->Lock(ds);if((lock & JAWT_LOCK_ERROR) != 0){#ifndef VTK_JAVA_DEBUGprintf("Error locking surface\n");#endifawt.FreeDrawingSurface(ds);return 1;}/* Get the drawing surface info */dsi = ds->GetDrawingSurfaceInfo(ds);if (dsi == NULL){printf("Error getting surface info\n");ds->Unlock(ds);awt.FreeDrawingSurface(ds);return 1;}// Here is the win32 drawing code#if defined(_WIN32)temp0->Finalize();JAWT_Win32DrawingSurfaceInfo* dsi_win;dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;temp0->SetWindowId((void *)dsi_win->hwnd);temp0->SetDisplayId((void *)dsi_win->hdc);// also set parent id to avoid border sizes being addedtemp0->SetParentId((void *)dsi_win->hdc);// use mac code#elif defined(__APPLE__)JAWT_DrawingSurfaceInfo* dsi_mac;dsi_mac = (JAWT_DrawingSurfaceInfo*)dsi->platformInfo;// temp0->SetWindowId(dsi_mac->cocoaViewRef); // Wrong but allow compilation// otherwise use X11 code#elseJAWT_X11DrawingSurfaceInfo* dsi_x11;dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;temp0->SetDisplayId((void *)dsi_x11->display);temp0->SetWindowId((void *)dsi_x11->drawable);temp0->SetParentId((void *)dsi_x11->display);#endif/* Free the drawing surface info */ds->FreeDrawingSurfaceInfo(dsi);/* Unlock the drawing surface */ds->Unlock(ds);/* Free the drawing surface */awt.FreeDrawingSurface(ds);#if defined(WIN32_JAWT_LOCK_HACK)if (WJLH_init_check == 0){WJLH_init_check = 1;}WJLH_lock_map[hash] = 1;#endifreturn 0;}extern "C" JNIEXPORT jint JNICALLJava_vtk_rendering_awt_vtkInternalAwtComponent_RenderCreate(JNIEnv *env, jobject canvas, jobject id0){#if defined(WIN32_JAWT_LOCK_HACK)int hash;WJLH_HASH_FUNC(env, canvas, hash);WJLH_lock_map[hash] = 0;#endifJAWT awt;JAWT_DrawingSurface* ds;JAWT_DrawingSurfaceInfo* dsi;jint lock;// get the render window pointervtkRenderWindow *temp0;temp0 = (vtkRenderWindow *)(vtkJavaGetPointerFromObject(env,id0));/* Get the AWT */awt.version = JAWT_VERSION_1_3;if (JAWT_GetAWT(env, &awt) == JNI_FALSE){#ifndef VTK_JAVA_DEBUGprintf("AWT Not found\n");#endifreturn 1;}/* Get the drawing surface */ds = awt.GetDrawingSurface(env, canvas);if (ds == NULL){#ifndef VTK_JAVA_DEBUGprintf("NULL drawing surface\n");#endifreturn 1;}/* Lock the drawing surface */lock = ds->Lock(ds);if((lock & JAWT_LOCK_ERROR) != 0){#ifndef VTK_JAVA_DEBUGprintf("Error locking surface\n");#endifawt.FreeDrawingSurface(ds);return 1;}/* Get the drawing surface info */dsi = ds->GetDrawingSurfaceInfo(ds);if (dsi == NULL){printf("Error getting surface info\n");ds->Unlock(ds);awt.FreeDrawingSurface(ds);return 1;}// Here is the win32 drawing code#if defined(_WIN32)temp0->Finalize();JAWT_Win32DrawingSurfaceInfo* dsi_win;dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo;temp0->SetWindowId((void *)dsi_win->hwnd);temp0->SetDisplayId((void *)dsi_win->hdc);// also set parent id to avoid border sizes being addedtemp0->SetParentId((void *)dsi_win->hdc);// use mac code#elif defined(__APPLE__)JAWT_DrawingSurfaceInfo* dsi_mac;dsi_mac = (JAWT_DrawingSurfaceInfo*)dsi->platformInfo;// temp0->SetWindowId(dsi_mac->cocoaViewRef); // Wrong but allow compilation// otherwise use X11 code#elseJAWT_X11DrawingSurfaceInfo* dsi_x11;dsi_x11 = (JAWT_X11DrawingSurfaceInfo*)dsi->platformInfo;temp0->SetDisplayId((void *)dsi_x11->display);temp0->SetWindowId((void *)dsi_x11->drawable);temp0->SetParentId((void *)dsi_x11->display);#endif/* Free the drawing surface info */ds->FreeDrawingSurfaceInfo(dsi);/* Unlock the drawing surface */ds->Unlock(ds);/* Free the drawing surface */awt.FreeDrawingSurface(ds);#if defined(WIN32_JAWT_LOCK_HACK)if (WJLH_init_check == 0){WJLH_init_check = 1;}WJLH_lock_map[hash] = 1;#endifreturn 0;}// Lock must be called prior to render or anything which might// cause vtkRenderWindow to make an XLib call or to call Render().// The Lock() and UnLock() functions are necessary for drawing in// JAWT, but they also provide a form of mutex locking so that multiple// java threads are prevented from accessing X at the same time. The only// requirement JAWT has is that all operations on a JAWT_DrawingSurface// MUST be performed from the same thread as the call to GetDrawingSurface.extern "C" JNIEXPORT jint JNICALLJava_vtk_vtkPanel_Lock(JNIEnv *env,jobject canvas){JAWT awt;JAWT_DrawingSurface* ds;jint lock;/* Get the AWT */awt.version = JAWT_VERSION_1_3;if (JAWT_GetAWT(env, &awt) == JNI_FALSE){#ifndef VTK_JAVA_DEBUGprintf("AWT Not found\n");#endifreturn 1;}/* Get the drawing surface */ds = awt.GetDrawingSurface(env, canvas);if (ds == NULL){#ifndef VTK_JAVA_DEBUGprintf("NULL drawing surface\n");#endifreturn 1;}#if defined(WIN32_JAWT_LOCK_HACK)int hash;WJLH_HASH_FUNC(env, canvas, hash);if (WJLH_init_check && WJLH_lock_map[hash] > WJLH_MAX_COUNT){env->MonitorEnter(canvas);}else{#endif/* Lock the drawing surface */lock = ds->Lock(ds);if((lock & JAWT_LOCK_ERROR) != 0){#ifndef VTK_JAVA_DEBUGprintf("Error locking surface\n");#endifawt.FreeDrawingSurface(ds);return 1;}#if defined(WIN32_JAWT_LOCK_HACK)}#endifreturn 0;}// UnLock() must be called after a Lock() and execution of a// function which might change the drawing surface. See Lock().extern "C" JNIEXPORT jint JNICALLJava_vtk_vtkPanel_UnLock(JNIEnv *env,jobject canvas){JAWT awt;JAWT_DrawingSurface* ds;/* Get the AWT */awt.version = JAWT_VERSION_1_3;if (JAWT_GetAWT(env, &awt) == JNI_FALSE){#ifndef VTK_JAVA_DEBUGprintf("AWT Not found\n");#endifreturn 1;}/* Get the drawing surface */ds = awt.GetDrawingSurface(env, canvas);if (ds == NULL){#ifndef VTK_JAVA_DEBUGprintf("NULL drawing surface\n");#endifreturn 1;}#if defined(WIN32_JAWT_LOCK_HACK)int hash;WJLH_HASH_FUNC(env, canvas, hash);if (WJLH_init_check && WJLH_lock_map[hash] > WJLH_MAX_COUNT){env->MonitorExit(canvas);}else{if (WJLH_init_check) WJLH_lock_map[hash]++;#endif/* Unlock the drawing surface */ds->Unlock(ds);#if defined(WIN32_JAWT_LOCK_HACK)}#endif/* Free the drawing surface */awt.FreeDrawingSurface(ds);return 0;}// Undo disabling of deprecation warning.#if defined(__APPLE__) && defined(__GNUC__)#pragma GCC diagnostic pop#endif#endif// VTK-HeaderTest-Exclude: vtkJavaAwt.h
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。