| 111 |
111 |
| 112 static void pidgin_whiteboard_set_canvas_as_icon(PidginWhiteboard *gtkwb); |
112 static void pidgin_whiteboard_set_canvas_as_icon(PidginWhiteboard *gtkwb); |
| 113 |
113 |
| 114 static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color); |
114 static void pidgin_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color); |
| 115 |
115 |
| 116 static void color_select_dialog(GtkWidget *widget, PidginWhiteboard *gtkwb); |
116 static void color_selected(GtkColorButton *button, PidginWhiteboard *gtkwb); |
| 117 |
117 |
| 118 /****************************************************************************** |
118 /****************************************************************************** |
| 119 * Globals |
119 * Globals |
| 120 *****************************************************************************/ |
120 *****************************************************************************/ |
| 121 |
121 |
| 167 -------------------------- |
167 -------------------------- |
| 168 */ |
168 */ |
| 169 GtkWidget *clear_button; |
169 GtkWidget *clear_button; |
| 170 GtkWidget *save_button; |
170 GtkWidget *save_button; |
| 171 GtkWidget *color_button; |
171 GtkWidget *color_button; |
| |
172 GdkColor color; |
| 172 |
173 |
| 173 PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); |
174 PidginWhiteboard *gtkwb = g_new0(PidginWhiteboard, 1); |
| 174 gtkwb->priv = g_new0(PidginWhiteboardPrivate, 1); |
175 gtkwb->priv = g_new0(PidginWhiteboardPrivate, 1); |
| 175 |
176 |
| 176 gtkwb->wb = wb; |
177 gtkwb->wb = wb; |
| 270 |
271 |
| 271 g_signal_connect(G_OBJECT(save_button), "clicked", |
272 g_signal_connect(G_OBJECT(save_button), "clicked", |
| 272 G_CALLBACK(pidgin_whiteboard_button_save_press), gtkwb); |
273 G_CALLBACK(pidgin_whiteboard_button_save_press), gtkwb); |
| 273 |
274 |
| 274 /* Add a color selector */ |
275 /* Add a color selector */ |
| 275 color_button = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR); |
276 color_button = gtk_color_button_new(); |
| 276 gtk_box_pack_start(GTK_BOX(vbox_controls), color_button, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE); |
277 gtk_box_pack_start(GTK_BOX(vbox_controls), color_button, FALSE, FALSE, PIDGIN_HIG_BOX_SPACE); |
| 277 gtk_widget_show(color_button); |
278 gtk_widget_show(color_button); |
| 278 g_signal_connect(G_OBJECT(color_button), "clicked", |
279 |
| 279 G_CALLBACK(color_select_dialog), gtkwb); |
280 gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(color_button), FALSE); |
| |
281 pidgin_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); |
| |
282 pidgin_color_chooser_set_rgb(GTK_COLOR_CHOOSER(color_button), &color); |
| |
283 |
| |
284 g_signal_connect(G_OBJECT(color_button), "color-set", |
| |
285 G_CALLBACK(color_selected), gtkwb); |
| 280 |
286 |
| 281 /* Make all this (window) visible */ |
287 /* Make all this (window) visible */ |
| 282 gtk_widget_show(window); |
288 gtk_widget_show(window); |
| 283 |
289 |
| 284 pidgin_whiteboard_set_canvas_as_icon(gtkwb); |
290 pidgin_whiteboard_set_canvas_as_icon(gtkwb); |
| 865 color->green = (color_rgb & 0xFF00) | 0xFF; |
871 color->green = (color_rgb & 0xFF00) | 0xFF; |
| 866 color->blue = ((color_rgb & 0xFF) << 8) | 0xFF; |
872 color->blue = ((color_rgb & 0xFF) << 8) | 0xFF; |
| 867 } |
873 } |
| 868 |
874 |
| 869 static void |
875 static void |
| 870 color_selected(GtkDialog *dialog, gint response, gpointer _gtkwb) |
876 color_selected(GtkColorButton *button, PidginWhiteboard *gtkwb) |
| 871 { |
877 { |
| 872 GdkColor color; |
878 GdkColor color; |
| 873 PidginWhiteboard *gtkwb = _gtkwb; |
|
| 874 PurpleWhiteboard *wb = gtkwb->wb; |
879 PurpleWhiteboard *wb = gtkwb->wb; |
| 875 int old_size, old_color; |
880 int old_size, old_color; |
| 876 int new_color; |
881 int new_color; |
| 877 |
882 |
| 878 pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(dialog), &color); |
883 pidgin_color_chooser_get_rgb(GTK_COLOR_CHOOSER(button), &color); |
| 879 g_object_set_data(G_OBJECT(gtkwb->window), "colour-dialog", NULL); |
|
| 880 gtk_widget_destroy(GTK_WIDGET(dialog)); |
|
| 881 |
|
| 882 if (response != GTK_RESPONSE_OK) |
|
| 883 return; |
|
| 884 |
884 |
| 885 new_color = (color.red & 0xFF00) << 8; |
885 new_color = (color.red & 0xFF00) << 8; |
| 886 new_color |= (color.green & 0xFF00); |
886 new_color |= (color.green & 0xFF00); |
| 887 new_color |= (color.blue & 0xFF00) >> 8; |
887 new_color |= (color.blue & 0xFF00) >> 8; |
| 888 |
888 |
| 889 purple_whiteboard_get_brush(wb, &old_size, &old_color); |
889 purple_whiteboard_get_brush(wb, &old_size, &old_color); |
| 890 purple_whiteboard_send_brush(wb, old_size, new_color); |
890 purple_whiteboard_send_brush(wb, old_size, new_color); |
| 891 } |
891 } |
| 892 |
892 |
| 893 static void color_select_dialog(GtkWidget *widget, PidginWhiteboard *gtkwb) |
|
| 894 { |
|
| 895 GdkColor color; |
|
| 896 GtkWidget *dialog; |
|
| 897 |
|
| 898 dialog = gtk_color_chooser_dialog_new(_("Select color"), |
|
| 899 GTK_WINDOW(gtk_widget_get_ancestor(widget, GTK_TYPE_WINDOW))); |
|
| 900 gtk_color_chooser_set_use_alpha(GTK_COLOR_CHOOSER(dialog), FALSE); |
|
| 901 g_object_set_data(G_OBJECT(gtkwb->window), "colour-dialog", dialog); |
|
| 902 |
|
| 903 g_signal_connect(G_OBJECT(dialog), "response", |
|
| 904 G_CALLBACK(color_selected), gtkwb); |
|
| 905 |
|
| 906 pidgin_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); |
|
| 907 pidgin_color_chooser_set_rgb(GTK_COLOR_CHOOSER(dialog), &color); |
|
| 908 |
|
| 909 gtk_widget_show_all(GTK_WIDGET(dialog)); |
|
| 910 } |
|