46 |
GdkEventFocus *event, |
GdkEventFocus *event, |
47 |
jobject peer); |
jobject peer); |
48 |
|
|
49 |
|
static void block_expose_events_cb (GtkWidget *widget, |
50 |
|
jobject peer); |
51 |
|
|
52 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
53 |
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create |
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_create |
54 |
(JNIEnv *env, jobject obj, jstring label) |
(JNIEnv *env, jobject obj, jstring label) |
87 |
|
|
88 |
gdk_threads_enter (); |
gdk_threads_enter (); |
89 |
|
|
|
gtk_widget_realize (GTK_WIDGET (ptr)); |
|
90 |
button = gtk_bin_get_child (GTK_BIN (ptr)); |
button = gtk_bin_get_child (GTK_BIN (ptr)); |
91 |
|
|
92 |
g_signal_connect (G_OBJECT (ptr), "event", |
g_signal_connect (G_OBJECT (ptr), "event", |
101 |
g_signal_connect (G_OBJECT (button), "focus-out-event", |
g_signal_connect (G_OBJECT (button), "focus-out-event", |
102 |
G_CALLBACK (focus_out_cb), *gref); |
G_CALLBACK (focus_out_cb), *gref); |
103 |
|
|
104 |
|
g_signal_connect_after (G_OBJECT (button), "pressed", |
105 |
|
G_CALLBACK (block_expose_events_cb), *gref); |
106 |
|
|
107 |
|
g_signal_connect_after (G_OBJECT (button), "released", |
108 |
|
G_CALLBACK (block_expose_events_cb), *gref); |
109 |
|
|
110 |
gdk_threads_leave (); |
gdk_threads_leave (); |
111 |
} |
} |
112 |
|
|
115 |
(JNIEnv *env, jobject obj, jstring jtext) |
(JNIEnv *env, jobject obj, jstring jtext) |
116 |
{ |
{ |
117 |
const char *text; |
const char *text; |
118 |
|
GtkWidget *button; |
119 |
GtkWidget *label; |
GtkWidget *label; |
120 |
void *ptr; |
void *ptr; |
121 |
|
|
125 |
|
|
126 |
gdk_threads_enter (); |
gdk_threads_enter (); |
127 |
|
|
128 |
label = gtk_bin_get_child (GTK_BIN (ptr)); |
button = gtk_bin_get_child (GTK_BIN (ptr)); |
129 |
|
label = gtk_bin_get_child (GTK_BIN (button)); |
130 |
gtk_label_set_text (GTK_LABEL (label), text); |
gtk_label_set_text (GTK_LABEL (label), text); |
131 |
|
|
132 |
gdk_threads_leave (); |
gdk_threads_leave (); |
140 |
{ |
{ |
141 |
const char *font_name; |
const char *font_name; |
142 |
void *ptr; |
void *ptr; |
143 |
|
GtkWidget *button; |
144 |
GtkWidget *label; |
GtkWidget *label; |
145 |
PangoFontDescription *font_desc; |
PangoFontDescription *font_desc; |
146 |
|
|
150 |
|
|
151 |
gdk_threads_enter(); |
gdk_threads_enter(); |
152 |
|
|
153 |
label = gtk_bin_get_child (GTK_BIN (ptr)); |
button = gtk_bin_get_child (GTK_BIN (ptr)); |
154 |
|
label = gtk_bin_get_child (GTK_BIN (button)); |
155 |
|
|
156 |
font_desc = pango_font_description_from_string (font_name); |
font_desc = pango_font_description_from_string (font_name); |
157 |
pango_font_description_set_size (font_desc, size * dpi_conversion_factor); |
pango_font_description_set_size (font_desc, size * dpi_conversion_factor); |
172 |
} |
} |
173 |
|
|
174 |
JNIEXPORT void JNICALL |
JNIEXPORT void JNICALL |
175 |
|
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetBackground |
176 |
|
(JNIEnv *env, jobject obj, jint red, jint green, jint blue) |
177 |
|
{ |
178 |
|
GdkColor normal_color; |
179 |
|
GdkColor prelight_color; |
180 |
|
GdkColor active_color; |
181 |
|
int prelight_red; |
182 |
|
int prelight_blue; |
183 |
|
int prelight_green; |
184 |
|
GtkWidget *button; |
185 |
|
void *ptr; |
186 |
|
|
187 |
|
ptr = NSA_GET_PTR (env, obj); |
188 |
|
|
189 |
|
normal_color.red = (red / 255.0) * 65535; |
190 |
|
normal_color.green = (green / 255.0) * 65535; |
191 |
|
normal_color.blue = (blue / 255.0) * 65535; |
192 |
|
|
193 |
|
/* This calculation only approximate the active color produced by |
194 |
|
Sun's AWT. */ |
195 |
|
active_color.red = 0.85 * (red / 255.0) * 65535; |
196 |
|
active_color.green = 0.85 * (green / 255.0) * 65535; |
197 |
|
active_color.blue = 0.85 * (blue / 255.0) * 65535; |
198 |
|
|
199 |
|
/* There is no separate prelight color in Motif. */ |
200 |
|
prelight_red = 1.15 * (red / 255.0) * 65535; |
201 |
|
prelight_green = 1.15 * (green / 255.0) * 65535; |
202 |
|
prelight_blue = 1.15 * (blue / 255.0) * 65535; |
203 |
|
|
204 |
|
prelight_color.red = prelight_red > 65535 ? 65535 : prelight_red; |
205 |
|
prelight_color.green = prelight_green > 65535 ? 65535 : prelight_green; |
206 |
|
prelight_color.blue = prelight_blue > 65535 ? 65535 : prelight_blue; |
207 |
|
|
208 |
|
gdk_threads_enter (); |
209 |
|
|
210 |
|
button = gtk_bin_get_child (GTK_BIN (ptr)); |
211 |
|
|
212 |
|
gtk_widget_modify_bg (button, GTK_STATE_NORMAL, &normal_color); |
213 |
|
gtk_widget_modify_bg (button, GTK_STATE_ACTIVE, &active_color); |
214 |
|
gtk_widget_modify_bg (button, GTK_STATE_PRELIGHT, &prelight_color); |
215 |
|
|
216 |
|
gdk_threads_leave (); |
217 |
|
} |
218 |
|
|
219 |
|
JNIEXPORT void JNICALL |
220 |
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetForeground |
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkWidgetSetForeground |
221 |
(JNIEnv *env, jobject obj, jint red, jint green, jint blue) |
(JNIEnv *env, jobject obj, jint red, jint green, jint blue) |
222 |
{ |
{ |
223 |
GdkColor color; |
GdkColor color; |
224 |
|
GtkWidget *button; |
225 |
GtkWidget *label; |
GtkWidget *label; |
226 |
void *ptr; |
void *ptr; |
227 |
|
|
233 |
|
|
234 |
gdk_threads_enter (); |
gdk_threads_enter (); |
235 |
|
|
236 |
label = gtk_bin_get_child (GTK_BIN(ptr)); |
button = gtk_bin_get_child (GTK_BIN (ptr)); |
237 |
|
label = gtk_bin_get_child (GTK_BIN (button)); |
238 |
|
|
239 |
gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &color); |
gtk_widget_modify_fg (label, GTK_STATE_NORMAL, &color); |
240 |
gtk_widget_modify_fg (label, GTK_STATE_ACTIVE, &color); |
gtk_widget_modify_fg (label, GTK_STATE_ACTIVE, &color); |
247 |
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate |
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_gtkActivate |
248 |
(JNIEnv *env, jobject obj) |
(JNIEnv *env, jobject obj) |
249 |
{ |
{ |
250 |
|
GtkWidget *button; |
251 |
void *ptr; |
void *ptr; |
252 |
|
|
253 |
ptr = NSA_GET_PTR (env, obj); |
ptr = NSA_GET_PTR (env, obj); |
254 |
|
|
255 |
gdk_threads_enter (); |
gdk_threads_enter (); |
256 |
|
|
257 |
gtk_widget_activate (GTK_WIDGET (ptr)); |
button = gtk_bin_get_child (GTK_BIN (ptr)); |
258 |
|
gtk_widget_activate (GTK_WIDGET (button)); |
259 |
|
|
260 |
gdk_threads_leave (); |
gdk_threads_leave (); |
261 |
} |
} |
275 |
gdk_threads_leave (); |
gdk_threads_leave (); |
276 |
} |
} |
277 |
|
|
278 |
|
JNIEXPORT void JNICALL |
279 |
|
Java_gnu_java_awt_peer_gtk_GtkButtonPeer_setNativeBounds |
280 |
|
(JNIEnv *env, jobject obj, jint x, jint y, jint width, jint height) |
281 |
|
{ |
282 |
|
GtkWidget *widget, *child; |
283 |
|
void *ptr; |
284 |
|
|
285 |
|
ptr = NSA_GET_PTR (env, obj); |
286 |
|
|
287 |
|
gdk_threads_enter (); |
288 |
|
|
289 |
|
widget = GTK_WIDGET (ptr); |
290 |
|
|
291 |
|
/* We assume that -1 is a width or height and not a request for the |
292 |
|
widget's natural size. */ |
293 |
|
width = width < 0 ? 0 : width; |
294 |
|
height = height < 0 ? 0 : height; |
295 |
|
child = gtk_bin_get_child (GTK_BIN (widget)); |
296 |
|
|
297 |
|
if (!(width == 0 && height == 0)) |
298 |
|
{ |
299 |
|
/* Set the event box's size request... */ |
300 |
|
gtk_widget_set_size_request (widget, width, height); |
301 |
|
/* ...and the button's size request... */ |
302 |
|
gtk_widget_set_size_request (child, width, height); |
303 |
|
/* ...and the label's size request. */ |
304 |
|
gtk_widget_set_size_request (gtk_bin_get_child (GTK_BIN (child)), width, |
305 |
|
height); |
306 |
|
if (widget->parent != NULL) |
307 |
|
gtk_fixed_move (GTK_FIXED (widget->parent), widget, x, y); |
308 |
|
} |
309 |
|
|
310 |
|
gdk_threads_leave (); |
311 |
|
} |
312 |
|
|
313 |
static gboolean |
static gboolean |
314 |
focus_in_cb (GtkWidget *widget __attribute((unused)), |
focus_in_cb (GtkWidget *widget __attribute((unused)), |
315 |
GdkEventFocus *event __attribute((unused)), |
GdkEventFocus *event __attribute((unused)), |
333 |
JNI_FALSE); |
JNI_FALSE); |
334 |
return FALSE; |
return FALSE; |
335 |
} |
} |
336 |
|
|
337 |
|
static void |
338 |
|
block_expose_events_cb (GtkWidget *widget, jobject peer) |
339 |
|
{ |
340 |
|
(*gdk_env)->CallVoidMethod (gdk_env, peer, |
341 |
|
beginNativeRepaintID); |
342 |
|
|
343 |
|
gdk_window_process_updates (widget->window, TRUE); |
344 |
|
|
345 |
|
(*gdk_env)->CallVoidMethod (gdk_env, peer, |
346 |
|
endNativeRepaintID); |
347 |
|
} |