pidgin/gtkwhiteboard.c

changeset 35550
b18fa06ff063
parent 35549
1128302c7511
child 37111
efe4b7c5218a
equal deleted inserted replaced
35549:1128302c7511 35550:b18fa06ff063
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 }

mercurial