gnu_java_awt_peer_gtk_gtktoolkit.c
来自「Mac OS X 10.4.9 for x86 Source Code gcc」· C语言 代码 · 共 538 行 · 第 1/2 页
C
538 行
property */ portableNativeSync = 1;#else portableNativeSync = 0;#endif } (*env)->GetJavaVM( env, &the_vm ); if (!g_thread_supported ()) { if (portableNativeSync) g_thread_init ( &portable_native_sync_jni_functions ); else g_thread_init ( NULL ); } else { /* Warn if portable native sync is desired but the threading system is already initialized. In that case we can't override the threading implementation with our portable native sync functions. */ if (portableNativeSync) g_printerr ("peer warning: portable native sync disabled.\n"); } /* Debugging progress message; uncomment if needed: */ /* printf("called gthread init\n"); */}/* This is a big hack, needed until this pango bug is resolved: http://bugzilla.gnome.org/show_bug.cgi?id=119081. See: http://mail.gnome.org/archives/gtk-i18n-list/2003-August/msg00001.html for details. */static voidinit_dpi_conversion_factor (){ GtkSettings *settings = gtk_settings_get_default (); GObjectClass *klass; klass = G_OBJECT_CLASS (GTK_SETTINGS_GET_CLASS (settings)); if (g_object_class_find_property (klass, "gtk-xft-dpi")) { int int_dpi; g_object_get (settings, "gtk-xft-dpi", &int_dpi, NULL); /* If int_dpi == -1 gtk-xft-dpi returns the default value. So we have to do approximate calculation here. */ if (int_dpi < 0) dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.; else dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE); g_signal_connect (settings, "notify::gtk-xft-dpi", G_CALLBACK (dpi_changed_cb), NULL); } else /* Approximate. */ dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.;}static voiddpi_changed_cb (GtkSettings *settings, GParamSpec *pspec __attribute__((unused))){ int int_dpi; g_object_get (settings, "gtk-xft-dpi", &int_dpi, NULL); if (int_dpi < 0) dpi_conversion_factor = PANGO_SCALE * 72.0 / 96.; else dpi_conversion_factor = PANGO_SCALE * 72.0 / (int_dpi / PANGO_SCALE);}static intwithin_human_latency_tolerance(struct timeval *init){ struct timeval curr; unsigned long milliseconds_elapsed; gettimeofday(&curr, NULL); milliseconds_elapsed = (((curr.tv_sec * 1000) + (curr.tv_usec / 1000)) - ((init->tv_sec * 1000) + (init->tv_usec / 1000))); return milliseconds_elapsed < 100;}JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_iterateNativeQueue(JNIEnv *env, jobject self __attribute__((unused)), jobject lockedQueue, jboolean block){ /* We're holding an EventQueue lock, and we're about to acquire the GDK * lock before dropping the EventQueue lock. This can deadlock if someone * holds the GDK lock and wants to acquire the EventQueue lock; however * all callbacks from GTK happen with the GDK lock released, so this * would only happen in an odd case such as some JNI helper code * acquiring the GDK lock and calling back into * EventQueue.getNextEvent(). */ struct timeval init; gettimeofday(&init, NULL); gdk_threads_enter (); (*env)->MonitorExit (env, lockedQueue); if (block) { /* If we're blocking-when-empty, we want a do .. while loop. */ do gtk_main_iteration (); while (within_human_latency_tolerance (&init) && gtk_events_pending ()); } else { /* If we're not blocking-when-empty, we want a while loop. */ while (within_human_latency_tolerance (&init) && gtk_events_pending ()) gtk_main_iteration (); } (*env)->MonitorEnter (env, lockedQueue); gdk_threads_leave ();}JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_wakeNativeQueue (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))){ g_main_context_wakeup (NULL);}JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_nativeQueueEmpty (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))){ jboolean empty = FALSE; gdk_threads_enter (); empty = ! gtk_events_pending(); gdk_threads_leave (); return empty;}static jint gdk_color_to_java_color (GdkColor color);JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_beep (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))){ gdk_threads_enter (); gdk_beep (); gdk_threads_leave ();}JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_sync (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))){ gdk_threads_enter (); gdk_flush (); gdk_threads_leave ();}JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenSizeDimensions (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused)), jintArray jdims){ jint *dims = (*env)->GetIntArrayElements (env, jdims, 0); gdk_threads_enter (); dims[0] = gdk_screen_width (); dims[1] = gdk_screen_height (); gdk_threads_leave (); (*env)->ReleaseIntArrayElements(env, jdims, dims, 0);}JNIEXPORT jint JNICALL Java_gnu_java_awt_peer_gtk_GtkToolkit_getScreenResolution (JNIEnv *env __attribute__((unused)), jobject obj __attribute__((unused))){ jint res; gdk_threads_enter (); res = gdk_screen_width () / (gdk_screen_width_mm () / 25.4); gdk_threads_leave (); return res;}#define CONVERT(type, state) \ gdk_color_to_java_color (style->type[GTK_STATE_ ## state])JNIEXPORT void JNICALLJava_gnu_java_awt_peer_gtk_GtkToolkit_loadSystemColors (JNIEnv *env, jobject obj __attribute__((unused)), jintArray jcolors){ jint *colors; GtkStyle *style; colors = (*env)->GetIntArrayElements (env, jcolors, 0); gdk_threads_enter (); style = gtk_widget_get_default_style (); colors[AWT_DESKTOP] = CONVERT (bg, SELECTED); colors[AWT_ACTIVE_CAPTION] = CONVERT (bg, SELECTED); colors[AWT_ACTIVE_CAPTION_TEXT] = CONVERT (text, SELECTED); colors[AWT_ACTIVE_CAPTION_BORDER] = CONVERT (fg, NORMAL); colors[AWT_INACTIVE_CAPTION] = CONVERT (base, INSENSITIVE); colors[AWT_INACTIVE_CAPTION_TEXT] = CONVERT (fg, INSENSITIVE); colors[AWT_INACTIVE_CAPTION_BORDER] = CONVERT (fg, INSENSITIVE); colors[AWT_WINDOW] = CONVERT (bg, NORMAL); colors[AWT_WINDOW_BORDER] = CONVERT (fg, NORMAL); colors[AWT_WINDOW_TEXT] = CONVERT (fg, NORMAL); colors[AWT_MENU] = CONVERT (bg, NORMAL); colors[AWT_MENU_TEXT] = CONVERT (fg, NORMAL); colors[AWT_TEXT] = CONVERT (bg, NORMAL); colors[AWT_TEXT_TEXT] = CONVERT (fg, NORMAL); colors[AWT_TEXT_HIGHLIGHT] = CONVERT (bg, SELECTED); colors[AWT_TEXT_HIGHLIGHT_TEXT] = CONVERT (fg, SELECTED); colors[AWT_TEXT_INACTIVE_TEXT] = CONVERT (bg, INSENSITIVE); colors[AWT_CONTROL] = CONVERT (bg, NORMAL); colors[AWT_CONTROL_TEXT] = CONVERT (fg, NORMAL); colors[AWT_CONTROL_HIGHLIGHT] = CONVERT (base, ACTIVE); colors[AWT_CONTROL_LT_HIGHLIGHT] = CONVERT (bg, PRELIGHT); colors[AWT_CONTROL_SHADOW] = CONVERT (bg, ACTIVE); colors[AWT_CONTROL_DK_SHADOW] = CONVERT (fg, INSENSITIVE); colors[AWT_SCROLLBAR] = CONVERT (base, INSENSITIVE); colors[AWT_INFO] = CONVERT (bg, NORMAL); colors[AWT_INFO_TEXT] = CONVERT (fg, NORMAL); gdk_threads_leave (); (*env)->ReleaseIntArrayElements(env, jcolors, colors, 0);}#undef CONVERTstatic jintgdk_color_to_java_color (GdkColor gdk_color){ guchar red; guchar green; guchar blue; float factor; factor = 255.0 / 65535.0; red = (float) gdk_color.red * factor; green = (float) gdk_color.green * factor; blue = (float) gdk_color.blue * factor; return (jint) (0xff000000 | (red << 16) | (green << 8) | blue);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?