📄 gnu_java_awt_peer_gtk_gtkcomponentpeer.c
字号:
It infers numlock state from the only Java virtual keys that are affected by it. */ if (keyCode == VK_NUMPAD9 || keyCode == VK_NUMPAD8 || keyCode == VK_NUMPAD7 || keyCode == VK_NUMPAD6 || keyCode == VK_NUMPAD5 || keyCode == VK_NUMPAD4 || keyCode == VK_NUMPAD3 || keyCode == VK_NUMPAD2 || keyCode == VK_NUMPAD1 || keyCode == VK_NUMPAD0 || keyCode == VK_DECIMAL) event->key.state |= GDK_MOD2_MASK; /* These values don't need to be filled in since GTK doesn't use them. */ event->key.length = 0; event->key.string = NULL; lookup_keyval = cp_gtk_awt_keycode_to_keysym (keyCode, keyLocation); if (!gdk_keymap_get_entries_for_keyval (gdk_keymap_get_default (), lookup_keyval, &keymap_keys, &n_keys)) { /* No matching keymap entry was found. */ g_printerr ("No matching keymap entries were found\n"); gdk_threads_leave (); return; } /* Note: if n_keys > 1 then there are multiple hardware keycodes that translate to lookup_keyval. We arbitrarily choose the first hardware keycode from the list returned by gdk_keymap_get_entries_for_keyval. */ event->key.hardware_keycode = keymap_keys[0].keycode; event->key.group = keymap_keys[0].group; g_free (keymap_keys); if (!gdk_keymap_translate_keyboard_state (gdk_keymap_get_default (), event->key.hardware_keycode, event->key.state, event->key.group, &event->key.keyval, NULL, NULL, NULL)) { /* No matching keyval was found. */ g_printerr ("No matching keyval was found\n"); gdk_threads_leave (); return; } /* keyevent = (GdkEventKey *) event; */ /* g_printerr ("generated event: sent: %d time: %d state: %d keyval: %d length: %d string: %s hardware_keycode: %d group: %d\n", keyevent->send_event, keyevent->time, keyevent->state, keyevent->keyval, keyevent->length, keyevent->string, keyevent->hardware_keycode, keyevent->group); */ /* We already received the original key event on the window itself, so we don't want to resend it. */ if (!GTK_IS_WINDOW (ptr)) { if (GTK_IS_SCROLLED_WINDOW (ptr)) gtk_widget_event (GTK_WIDGET (GTK_SCROLLED_WINDOW (ptr)->container.child), event); else gtk_widget_event (GTK_WIDGET (ptr), event); } gdk_threads_leave ();}/* * Find the origin of a widget's window. */JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWindowGetLocationOnScreen (JNIEnv * env, jobject obj, jintArray jpoint){ void *ptr; jint *point; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); point = (*env)->GetIntArrayElements (env, jpoint, 0); gdk_window_get_root_origin (GTK_WIDGET (ptr)->window, point, point+1); (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); gdk_threads_leave ();}/* * Find the origin of a widget */JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetLocationOnScreen (JNIEnv * env, jobject obj, jintArray jpoint){ void *ptr; jint *point; GtkWidget *widget; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); point = (*env)->GetIntArrayElements (env, jpoint, 0); widget = GTK_WIDGET(ptr); while(gtk_widget_get_parent(widget) != NULL) widget = gtk_widget_get_parent(widget); gdk_window_get_position (GTK_WIDGET(widget)->window, point, point+1); *point += GTK_WIDGET(ptr)->allocation.x; *(point+1) += GTK_WIDGET(ptr)->allocation.y; (*env)->ReleaseIntArrayElements(env, jpoint, point, 0); gdk_threads_leave ();}/* * Find this widget's current size. */JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetDimensions (JNIEnv *env, jobject obj, jintArray jdims){ void *ptr; jint *dims; GtkRequisition requisition; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); dims = (*env)->GetIntArrayElements (env, jdims, 0); dims[0] = dims[1] = 0; gtk_widget_size_request (GTK_WIDGET (ptr), &requisition); dims[0] = requisition.width; dims[1] = requisition.height; (*env)->ReleaseIntArrayElements (env, jdims, dims, 0); gdk_threads_leave ();}/* * Find this widget's preferred size. */JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetPreferredDimensions (JNIEnv *env, jobject obj, jintArray jdims){ void *ptr; jint *dims; GtkRequisition current_req; GtkRequisition natural_req; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); dims = (*env)->GetIntArrayElements (env, jdims, 0); dims[0] = dims[1] = 0; /* Widgets that extend GtkWindow such as GtkFileChooserDialog may have a default size. These values seem more useful then the natural requisition values, particularly for GtkFileChooserDialog. */ if (GTK_IS_WINDOW (ptr)) { gint width, height; gtk_window_get_default_size (GTK_WINDOW (ptr), &width, &height); dims[0] = width; dims[1] = height; } else { /* Save the widget's current size request. */ gtk_widget_size_request (GTK_WIDGET (ptr), ¤t_req); /* Get the widget's "natural" size request. */ gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1); gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req); /* Reset the widget's size request. */ gtk_widget_set_size_request (GTK_WIDGET (ptr), current_req.width, current_req.height); dims[0] = natural_req.width; dims[1] = natural_req.height; } (*env)->ReleaseIntArrayElements (env, jdims, dims, 0); gdk_threads_leave ();}JNIEXPORT void JNICALLJava_gnu_java_awt_peer_gtk_GtkComponentPeer_setNativeBounds (JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height){ GtkWidget *widget; void *ptr; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); widget = GTK_WIDGET (ptr); /* We assume that -1 is a width or height and not a request for the widget's natural size. */ width = width < 0 ? 0 : width; height = height < 0 ? 0 : height; if (GTK_IS_VIEWPORT (widget->parent)) gtk_widget_set_size_request (widget, width, height); else { if (!(width == 0 && height == 0)) { gtk_widget_set_size_request (widget, width, height); if (widget->parent != NULL) gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y); } } gdk_threads_leave ();}JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetBackground (JNIEnv *env, jobject obj){ void *ptr; jintArray array; int *rgb; GdkColor bg; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); bg = GTK_WIDGET (ptr)->style->bg[GTK_STATE_NORMAL]; array = (*env)->NewIntArray (env, 3); rgb = (*env)->GetIntArrayElements (env, array, NULL); /* convert color data from 16 bit values down to 8 bit values */ rgb[0] = bg.red >> 8; rgb[1] = bg.green >> 8; rgb[2] = bg.blue >> 8; (*env)->ReleaseIntArrayElements (env, array, rgb, 0); gdk_threads_leave (); return array;}JNIEXPORT jintArray JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetGetForeground (JNIEnv *env, jobject obj){ void *ptr; jintArray array; jint *rgb; GdkColor fg; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); fg = GTK_WIDGET (ptr)->style->fg[GTK_STATE_NORMAL]; array = (*env)->NewIntArray (env, 3); rgb = (*env)->GetIntArrayElements (env, array, NULL); /* convert color data from 16 bit values down to 8 bit values */ rgb[0] = fg.red >> 8; rgb[1] = fg.green >> 8; rgb[2] = fg.blue >> 8; (*env)->ReleaseIntArrayElements (env, array, rgb, 0); gdk_threads_leave (); return array;}JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetBackground (JNIEnv *env, jobject obj, jint red, jint green, jint blue){ GdkColor normal_color; GdkColor active_color; GtkWidget *widget; void *ptr; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); normal_color.red = (red / 255.0) * 65535; normal_color.green = (green / 255.0) * 65535; normal_color.blue = (blue / 255.0) * 65535; /* This calculation only approximates the active colors produced by Sun's AWT. */ active_color.red = 0.85 * (red / 255.0) * 65535; active_color.green = 0.85 * (green / 255.0) * 65535; active_color.blue = 0.85 * (blue / 255.0) * 65535; widget = find_bg_color_widget (GTK_WIDGET (ptr)); gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &normal_color); gtk_widget_modify_bg (widget, GTK_STATE_ACTIVE, &active_color); gtk_widget_modify_bg (widget, GTK_STATE_PRELIGHT, &normal_color); gdk_threads_leave ();}JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_gtkWidgetSetForeground (JNIEnv *env, jobject obj, jint red, jint green, jint blue){ GdkColor color; GtkWidget *widget; void *ptr; gdk_threads_enter (); ptr = NSA_GET_PTR (env, obj); color.red = (red / 255.0) * 65535; color.green = (green / 255.0) * 65535; color.blue = (blue / 255.0) * 65535; widget = find_fg_color_widget (GTK_WIDGET (ptr)); gtk_widget_modify_fg (widget, GTK_STATE_NORMAL, &color); gtk_widget_modify_fg (widget, GTK_STATE_ACTIVE, &color); gtk_widget_modify_fg (widget, GTK_STATE_PRELIGHT, &color); gdk_threads_leave ();}JNIEXPORT void JNICALLJava_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNative (JNIEnv *env, jobject obj, jboolean visible){ gdk_threads_enter(); Java_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNativeUnlocked (env, obj, visible); gdk_threads_leave();}JNIEXPORT void JNICALLJava_gnu_java_awt_peer_gtk_GtkComponentPeer_setVisibleNativeUnlocked (JNIEnv *env, jobject obj, jboolean visible){ void *ptr; ptr = NSA_GET_PTR (env, obj); if (visible) gtk_widget_show (GTK_WIDGET (ptr)); else gtk_widget_hide (GTK_WIDGET (ptr));}JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_GtkComponentPeer_isEnabled (JNIEnv *env, jobject obj)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -