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 |
83 |
} |
} |
84 |
|
|
85 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
86 |
|
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectJObject |
87 |
|
(JNIEnv *env, jobject obj) |
88 |
|
{ |
89 |
|
void *ptr; |
90 |
|
|
91 |
|
ptr = NSA_GET_PTR (env, obj); |
92 |
|
|
93 |
|
gdk_threads_enter (); |
94 |
|
|
95 |
|
connect_awt_hook (env, obj, 1, GTK_WIDGET (ptr)->window); |
96 |
|
|
97 |
|
gdk_threads_leave (); |
98 |
|
} |
99 |
|
|
100 |
|
JNIEXPORT void JNICALL |
101 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_connectSignals |
102 |
(JNIEnv *env, jobject obj) |
(JNIEnv *env, jobject obj) |
103 |
{ |
{ |
107 |
|
|
108 |
gdk_threads_enter (); |
gdk_threads_enter (); |
109 |
|
|
110 |
g_signal_connect (G_OBJECT (ptr), "value-changed", |
g_signal_connect (G_OBJECT (ptr), "change-value", |
111 |
G_CALLBACK (post_change_event), *gref); |
GTK_SIGNAL_FUNC (slider_moved_cb), *gref); |
112 |
|
|
113 |
gdk_threads_leave (); |
gdk_threads_leave (); |
114 |
|
|
116 |
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj); |
Java_gnu_java_awt_peer_gtk_GtkComponentPeer_connectSignals (env, obj); |
117 |
} |
} |
118 |
|
|
119 |
|
JNIEXPORT void JNICALL |
|
JNIEXPORT void JNICALL |
|
120 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setLineIncrement |
121 |
(JNIEnv *env, jobject obj, jint amount) |
(JNIEnv *env, jobject obj, jint amount) |
122 |
{ |
{ |
123 |
void *ptr; |
void *ptr; |
124 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
134 |
gdk_threads_leave (); |
gdk_threads_leave (); |
135 |
} |
} |
136 |
|
|
137 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
138 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setPageIncrement |
139 |
(JNIEnv *env, jobject obj, jint amount) |
(JNIEnv *env, jobject obj, jint amount) |
140 |
{ |
{ |
141 |
void *ptr; |
void *ptr; |
142 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
152 |
gdk_threads_leave (); |
gdk_threads_leave (); |
153 |
} |
} |
154 |
|
|
155 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
156 |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues |
Java_gnu_java_awt_peer_gtk_GtkScrollbarPeer_setValues |
157 |
(JNIEnv *env, jobject obj, jint value, jint visible, jint min, jint max) |
(JNIEnv *env, jobject obj, jint value, jint visible, jint min, jint max) |
158 |
{ |
{ |
159 |
void *ptr; |
void *ptr; |
160 |
GtkAdjustment *adj; |
GtkAdjustment *adj; |
169 |
gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max); |
gtk_range_set_range (GTK_RANGE (ptr), (gdouble) min, (gdouble) max); |
170 |
gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value); |
gtk_range_set_value (GTK_RANGE (ptr), (gdouble) value); |
171 |
|
|
|
gtk_adjustment_changed (adj); |
|
|
|
|
172 |
gdk_threads_leave (); |
gdk_threads_leave (); |
173 |
} |
} |
174 |
|
|
175 |
static void |
static gboolean |
176 |
post_change_event (GtkRange *range, jobject peer) |
slider_moved_cb (GtkRange *range, |
177 |
{ |
GtkScrollType scroll, |
178 |
GtkAdjustment *adj; |
gdouble value, |
179 |
adj = gtk_range_get_adjustment (range); |
jobject obj) |
180 |
(*gdk_env())->CallVoidMethod (gdk_env(), peer, postAdjustmentEventID, |
{ |
181 |
AWT_ADJUSTMENT_TRACK, (jint) adj->value); |
GtkAdjustment *adj = gtk_range_get_adjustment (GTK_RANGE (range)); |
182 |
|
|
183 |
|
value = CLAMP (value, adj->lower, |
184 |
|
(adj->upper - adj->page_size)); |
185 |
|
|
186 |
|
if (range->round_digits >= 0) |
187 |
|
{ |
188 |
|
gdouble power; |
189 |
|
gint i; |
190 |
|
|
191 |
|
i = range->round_digits; |
192 |
|
power = 1; |
193 |
|
while (i--) |
194 |
|
power *= 10; |
195 |
|
|
196 |
|
value = floor ((value * power) + 0.5) / power; |
197 |
|
} |
198 |
|
|
199 |
|
switch (scroll) |
200 |
|
{ |
201 |
|
case GTK_SCROLL_STEP_BACKWARD: |
202 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
203 |
|
AWT_ADJUSTMENT_UNIT_DECREMENT, |
204 |
|
(jint) value); |
205 |
|
break; |
206 |
|
case GTK_SCROLL_STEP_FORWARD: |
207 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
208 |
|
AWT_ADJUSTMENT_UNIT_INCREMENT, |
209 |
|
(jint) value); |
210 |
|
break; |
211 |
|
case GTK_SCROLL_PAGE_BACKWARD: |
212 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
213 |
|
AWT_ADJUSTMENT_BLOCK_DECREMENT, |
214 |
|
(jint) value); |
215 |
|
break; |
216 |
|
case GTK_SCROLL_PAGE_FORWARD: |
217 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
218 |
|
AWT_ADJUSTMENT_BLOCK_INCREMENT, |
219 |
|
(jint) value); |
220 |
|
break; |
221 |
|
default: |
222 |
|
/* GTK_SCROLL_JUMP: */ |
223 |
|
(*gdk_env())->CallVoidMethod (gdk_env(), obj, postAdjustmentEventID, |
224 |
|
AWT_ADJUSTMENT_TRACK, |
225 |
|
(jint) value); |
226 |
|
break; |
227 |
|
} |
228 |
|
return FALSE; |
229 |
} |
} |