gnu_java_awt_peer_gtk_GtkScrollBarPeer.c [plain text]
#include "gtkpeer.h"
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h"
#include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h"
static void post_change_event (GtkRange *range, jobject peer);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create
(JNIEnv *env, jobject obj, jint orientation, jint value,
jint min, jint max, jint step_incr, jint page_incr, jint visible_amount)
{
GtkWidget *scrollbar;
GtkObject *adj;
NSA_SET_GLOBAL_REF (env, obj);
gdk_threads_enter ();
adj = gtk_adjustment_new ((gdouble) value,
(gdouble) min,
(gdouble) max,
(gdouble) step_incr,
(gdouble) page_incr,
(gdouble) visible_amount);
scrollbar = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) :
gtk_hscrollbar_new (GTK_ADJUSTMENT (adj));
GTK_RANGE (scrollbar)->round_digits = 0;
gtk_range_set_range (GTK_RANGE (scrollbar), (gdouble) min, (gdouble) max);
gtk_range_set_value (GTK_RANGE (scrollbar), (gdouble) value);
gdk_threads_leave ();
NSA_SET_PTR (env, obj, scrollbar);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_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), "value-changed",
G_CALLBACK (post_change_event), *gref);
gdk_threads_leave ();
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj);
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement
(JNIEnv *env, jobject obj, jint amount)
{
void *ptr;
GtkAdjustment *adj;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
adj->step_increment = (gdouble) amount;
gtk_adjustment_changed (adj);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement
(JNIEnv *env, jobject obj, jint amount)
{
void *ptr;
GtkAdjustment *adj;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
adj->page_increment = (gdouble) amount;
gtk_adjustment_changed (adj);
gdk_threads_leave ();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues
(JNIEnv *env, jobject obj, jint value, jint visible, jint min, jint max)
{
void *ptr;
GtkAdjustment *adj;
ptr = NSA_GET_PTR (env, obj);
gdk_threads_enter ();
adj = gtk_range_get_adjustment (GTK_RANGE (ptr));
adj->page_size = (gdouble) visible;
gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max);
gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value);
gtk_adjustment_changed (adj);
gdk_threads_leave ();
}
static void
post_change_event (GtkRange *range, jobject peer)
{
GtkAdjustment *adj;
adj = gtk_range_get_adjustment (range);
(*gdk_env())->CallVoidMethod (gdk_env(), peer, postAdjustmentEventID,
AWT_ADJUSTMENT_TRACK, (jint) adj->value);
}