gnu_java_awt_peer_gtk_GtkCheckboxPeer.c [plain text]
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkCheckboxPeer.h"
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
static void item_toggled (GtkToggleButton *item, jobject peer);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_create
(JNIEnv *env, jobject obj, jobject group)
{
GtkWidget *button;
NSA_SET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
if (group == NULL)
button = gtk_check_button_new_with_label ("");
else
{
void *native_group = NSA_GET_PTR (env, group);
button = gtk_radio_button_new_with_label_from_widget (native_group, "");
if (native_group == NULL)
{
NSA_SET_PTR (env, group, button);
}
}
gdk_threads_leave ();
NSA_SET_PTR (env, obj, button);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_connectSignals
(JNIEnv *env, jobject obj)
{
void *ptr = NSA_GET_PTR (env, obj);
jobject *gref = NSA_GET_GLOBAL_REF (env, obj);
g_assert (gref);
gdk_threads_enter ();
g_signal_connect (G_OBJECT (ptr), "toggled",
GTK_SIGNAL_FUNC (item_toggled), *gref);
gdk_threads_leave ();
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_nativeSetCheckboxGroup
(JNIEnv *env, jobject obj, jobject group)
{
GtkRadioButton *button;
void *native_group, *ptr;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
button = GTK_RADIO_BUTTON (ptr);
native_group = NSA_GET_PTR (env, group);
if (native_group == NULL)
gtk_radio_button_set_group (button, NULL);
else
gtk_radio_button_set_group (button,
gtk_radio_button_group
(GTK_RADIO_BUTTON (native_group)));
gdk_threads_leave ();
if (native_group == NULL)
NSA_SET_PTR (env, group, native_group);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkToggleButtonSetActive
(JNIEnv *env, jobject obj, jboolean is_active)
{
void *ptr;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr), is_active);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkWidgetModifyFont
(JNIEnv *env, jobject obj, jstring name, jint style, jint size)
{
const char *font_name;
void *ptr;
GtkWidget *button;
GtkWidget *label;
PangoFontDescription *font_desc;
ptr = NSA_GET_PTR (env, obj);
button = GTK_WIDGET (ptr);
label = gtk_bin_get_child (GTK_BIN(button));
if (!label)
return;
font_name = (*env)->GetStringUTFChars (env, name, NULL);
gdk_threads_enter();
font_desc = pango_font_description_from_string (font_name);
pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
if (style & AWT_STYLE_BOLD)
pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
if (style & AWT_STYLE_ITALIC)
pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
gtk_widget_modify_font (GTK_WIDGET(label), font_desc);
pango_font_description_free (font_desc);
gdk_threads_leave();
(*env)->ReleaseStringUTFChars (env, name, font_name);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkButtonSetLabel
(JNIEnv *env, jobject obj, jstring label)
{
const char *c_label;
GtkWidget *label_widget;
void *ptr;
ptr = NSA_GET_PTR (env, obj);
c_label = (*env)->GetStringUTFChars (env, label, NULL);
gdk_threads_enter ();
label_widget = gtk_bin_get_child (GTK_BIN (ptr));
gtk_label_set_text (GTK_LABEL (label_widget), c_label);
gdk_threads_leave ();
(*env)->ReleaseStringUTFChars (env, label, c_label);
}
static void
item_toggled (GtkToggleButton *item, jobject peer)
{
(*gdk_env())->CallVoidMethod (gdk_env(), peer,
postItemEventID,
peer,
item->active ?
(jint) AWT_ITEM_SELECTED :
(jint) AWT_ITEM_DESELECTED);
}