/[classpath]/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c
ViewVC logotype

Diff of /classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.16.2.1 by gnu_andrew, Fri Jan 14 10:24:17 2005 UTC revision 1.16.2.2 by gnu_andrew, Sat Jan 15 17:02:22 2005 UTC
# Line 46  static gboolean focus_out_cb (GtkWidget Line 46  static gboolean focus_out_cb (GtkWidget
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)
# Line 84  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 87  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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",
# Line 99  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 101  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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    
# Line 107  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 115  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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    
# Line 116  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 125  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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 ();
# Line 130  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 140  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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    
# Line 139  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 150  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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);
# Line 160  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 172  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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    
# Line 175  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 233  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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);
# Line 188  JNIEXPORT void JNICALL Line 247  JNIEXPORT void JNICALL
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  }  }
# Line 214  Java_gnu_java_awt_peer_gtk_GtkButtonPeer Line 275  Java_gnu_java_awt_peer_gtk_GtkButtonPeer
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)),
# Line 237  focus_out_cb (GtkWidget *widget __attrib Line 333  focus_out_cb (GtkWidget *widget __attrib
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    }

Legend:
Removed from v.1.16.2.1  
changed lines
  Added in v.1.16.2.2

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26