36 |
exception statement from your version. */ |
exception statement from your version. */ |
37 |
|
|
38 |
|
|
39 |
|
#include <math.h> |
40 |
#include "gtkpeer.h" |
#include "gtkpeer.h" |
41 |
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" |
#include "gnu_java_awt_peer_gtk_GtkComponentPeer.h" |
42 |
#include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h" |
#include "gnu_java_awt_peer_gtk_GtkScrollbarPeer.h" |
43 |
|
|
44 |
static void post_change_event (GtkRange *range, jobject peer); |
static gboolean slider_moved_cb (GtkRange *range, |
45 |
|
GtkScrollType scroll, |
46 |
|
gdouble value, |
47 |
|
jobject obj); |
48 |
|
|
49 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
50 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_create |
51 |
(JNIEnv *env, jobject obj, jint orientation, jint value, |
(JNIEnv *env, jobject obj, jint orientation, jint value, |
52 |
jint min, jint max, jint step_incr, jint page_incr, jint visible_amount) |
jint min, jint max, jint step_incr, jint page_incr, jint visible_amount) |
53 |
{ |
{ |
54 |
GtkWidget *scrollbar; |
GtkWidget *scrollbar; |
55 |
GtkObject *adj; |
GtkObject *adj; |
58 |
NSA_SET_GLOBAL_REF (env, obj); |
NSA_SET_GLOBAL_REF (env, obj); |
59 |
|
|
60 |
gdk_threads_enter (); |
gdk_threads_enter (); |
61 |
|
|
62 |
adj = gtk_adjustment_new ((gdouble) value, |
adj = gtk_adjustment_new ((gdouble) value, |
63 |
(gdouble) min, |
(gdouble) min, |
64 |
(gdouble) max, |
(gdouble) max, |
66 |
(gdouble) page_incr, |
(gdouble) page_incr, |
67 |
(gdouble) visible_amount); |
(gdouble) visible_amount); |
68 |
|
|
69 |
scrollbar = (orientation) ? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) : |
scrollbar = orientation |
70 |
gtk_hscrollbar_new (GTK_ADJUSTMENT (adj)); |
? gtk_vscrollbar_new (GTK_ADJUSTMENT (adj)) |
71 |
|
: gtk_hscrollbar_new (GTK_ADJUSTMENT (adj)); |
72 |
|
|
73 |
GTK_RANGE (scrollbar)->round_digits = 0; |
GTK_RANGE (scrollbar)->round_digits = 0; |
74 |
/* These calls seem redundant but they are not. They clamp values |
/* These calls seem redundant but they are not. They clamp values |
92 |
|
|
93 |
gdk_threads_enter (); |
gdk_threads_enter (); |
94 |
|
|
95 |
g_signal_connect (G_OBJECT (ptr), "value-changed", |
g_signal_connect (G_OBJECT (ptr), "change-value", |
96 |
G_CALLBACK (post_change_event), *gref); |
GTK_SIGNAL_FUNC (slider_moved_cb), *gref); |
97 |
|
|
98 |
gdk_threads_leave (); |
gdk_threads_leave (); |
99 |
|
|
101 |
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj); |
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj); |
102 |
} |
} |
103 |
|
|
104 |
|
JNIEXPORT void JNICALL |
|
JNIEXPORT void JNICALL |
|
105 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement |
106 |
(JNIEnv *env, jobject obj, jint amount) |
(JNIEnv *env, jobject obj, jint amount) |
107 |
{ |
{ |
108 |
void *ptr; |
void *ptr; |
109 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
119 |
gdk_threads_leave (); |
gdk_threads_leave (); |
120 |
} |
} |
121 |
|
|
122 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
123 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement |
124 |
(JNIEnv *env, jobject obj, jint amount) |
(JNIEnv *env, jobject obj, jint amount) |
125 |
{ |
{ |
126 |
void *ptr; |
void *ptr; |
127 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
137 |
gdk_threads_leave (); |
gdk_threads_leave (); |
138 |
} |
} |
139 |
|
|
140 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
141 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues |
142 |
(JNIEnv *env, jobject obj, jint value, jint visible, jint min, jint max) |
(JNIEnv *env, jobject obj, jint value, jint visible, jint min, jint max) |
143 |
{ |
{ |
144 |
void *ptr; |
void *ptr; |
145 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
154 |
gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max); |
gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max); |
155 |
gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value); |
gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value); |
156 |
|
|
|
gtk_adjustment_changed (adj); |
|
|
|
|
157 |
gdk_threads_leave (); |
gdk_threads_leave (); |
158 |
} |
} |
159 |
|
|
160 |
static void |
static gboolean |
161 |
post_change_event (GtkRange *range, jobject peer) |
slider_moved_cb (GtkRange *range, |
162 |
{ |
GtkScrollType scroll, |
163 |
GtkAdjustment *adj; |
gdouble value, |
164 |
adj = gtk_range_get_adjustment (range); |
jobject obj) |
165 |
(*gdk_env())->CallVoidMethod (gdk_env(), peer, postAdjustmentEventID, |
{ |
166 |
AWT_ADJUSTMENT_TRACK, (jint) adj->value); |
GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range)); |
167 |
|
|
168 |
|
value = CLAMP (value, adj->lower, |
169 |
|
(adj->upper - adj->page_size)); |
170 |
|
|
171 |
|
if (range->round_digits >= 0) |
172 |
|
{ |
173 |
|
gdouble power; |
174 |
|
gint i; |
175 |
|
|
176 |
|
i = range->round_digits; |
177 |
|
power = 1; |
178 |
|
while (i--) |
179 |
|
power *= 10; |
180 |
|
|
181 |
|
value = floor ((value * power) + 0.5) / power; |
182 |
|
} |
183 |
|
|
184 |
|
switch (scroll) |
185 |
|
{ |
186 |
|
case GTK_SCROLL_STEP_BACKWARD: |
187 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
188 |
|
AWT_ADJUSTMENT_UNIT_DECREMENT, |
189 |
|
(jint) value); |
190 |
|
break; |
191 |
|
case GTK_SCROLL_STEP_FORWARD: |
192 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
193 |
|
AWT_ADJUSTMENT_UNIT_INCREMENT, |
194 |
|
(jint) value); |
195 |
|
break; |
196 |
|
case GTK_SCROLL_PAGE_BACKWARD: |
197 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
198 |
|
AWT_ADJUSTMENT_BLOCK_DECREMENT, |
199 |
|
(jint) value); |
200 |
|
break; |
201 |
|
case GTK_SCROLL_PAGE_FORWARD: |
202 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
203 |
|
AWT_ADJUSTMENT_BLOCK_INCREMENT, |
204 |
|
(jint) value); |
205 |
|
break; |
206 |
|
default: |
207 |
|
/* GTK_SCROLL_JUMP: */ |
208 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
209 |
|
AWT_ADJUSTMENT_TRACK, |
210 |
|
(jint) value); |
211 |
|
break; |
212 |
|
} |
213 |
|
return FALSE; |
214 |
} |
} |