Mercurial > pidgin
comparison src/gtkwhiteboard.c @ 12039:bff6009364d4
[gaim-migrate @ 14332]
Sadrul enabled color changing in the whiteboard. It is kind of cool.
committer: Tailor Script <tailor@pidgin.im>
author | Daniel Atallah <daniel.atallah@gmail.com> |
---|---|
date | Thu, 10 Nov 2005 19:47:54 +0000 |
parents | 9d562dde0a3a |
children | 184d62658af2 |
comparison
equal
deleted
inserted
replaced
12038:112dad7aeba9 | 12039:bff6009364d4 |
---|---|
59 | 59 |
60 static void gaim_gtk_whiteboard_set_canvas_as_icon(GaimGtkWhiteboard *gtkwb); | 60 static void gaim_gtk_whiteboard_set_canvas_as_icon(GaimGtkWhiteboard *gtkwb); |
61 | 61 |
62 static void gaim_gtk_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color); | 62 static void gaim_gtk_whiteboard_rgb24_to_rgb48(int color_rgb, GdkColor *color); |
63 | 63 |
64 #if 0 | 64 static void color_select_dialog(GtkWidget *widget, GaimGtkWhiteboard *gtkwb); |
65 static void change_color_cb(GtkColorButton *w, GaimGtkWhiteboard *gtkwb); | |
66 #endif | |
67 | 65 |
68 /****************************************************************************** | 66 /****************************************************************************** |
69 * Globals | 67 * Globals |
70 *****************************************************************************/ | 68 *****************************************************************************/ |
71 /* | 69 /* |
99 return &ui_ops; | 97 return &ui_ops; |
100 } | 98 } |
101 | 99 |
102 void gaim_gtk_whiteboard_create(GaimWhiteboard *wb) | 100 void gaim_gtk_whiteboard_create(GaimWhiteboard *wb) |
103 { | 101 { |
104 int i; | |
105 | |
106 GtkWidget *window; | 102 GtkWidget *window; |
107 GtkWidget *drawing_area; | 103 GtkWidget *drawing_area; |
108 | 104 GtkWidget *vbox_controls; |
109 GtkWidget *hbox_palette; | |
110 GtkWidget *vbox_palette_above_canvas_and_controls; | |
111 GtkWidget *hbox_canvas_and_controls; | 105 GtkWidget *hbox_canvas_and_controls; |
112 GtkWidget *vbox_controls; | |
113 | 106 |
114 /* | 107 /* |
115 -------------------------- | 108 -------------------------- |
116 |[][][][palette[][][][][]| | 109 |[][][][palette[][][][][]| |
117 |------------------------| | 110 |------------------------| |
122 | | | | 115 | | | |
123 -------------------------- | 116 -------------------------- |
124 */ | 117 */ |
125 GtkWidget *clear_button; | 118 GtkWidget *clear_button; |
126 GtkWidget *save_button; | 119 GtkWidget *save_button; |
127 | 120 GtkWidget *color_button; |
128 GtkWidget *palette_color_box[PALETTE_NUM_COLORS]; | |
129 | 121 |
130 GaimGtkWhiteboard *gtkwb = g_new0(GaimGtkWhiteboard, 1); | 122 GaimGtkWhiteboard *gtkwb = g_new0(GaimGtkWhiteboard, 1); |
131 | 123 |
132 const char *window_title; | 124 const char *window_title; |
133 | 125 |
165 gtk_window_set_resizable((GtkWindow*)(window), FALSE); | 157 gtk_window_set_resizable((GtkWindow*)(window), FALSE); |
166 | 158 |
167 g_signal_connect(G_OBJECT(window), "destroy", | 159 g_signal_connect(G_OBJECT(window), "destroy", |
168 G_CALLBACK(gaim_gtk_whiteboard_exit), gtkwb); | 160 G_CALLBACK(gaim_gtk_whiteboard_exit), gtkwb); |
169 | 161 |
162 #if 0 | |
163 int i; | |
164 | |
165 GtkWidget *hbox_palette; | |
166 GtkWidget *vbox_palette_above_canvas_and_controls; | |
167 GtkWidget *palette_color_box[PALETTE_NUM_COLORS]; | |
168 | |
170 /* Create vertical box to place palette above the canvas and controls */ | 169 /* Create vertical box to place palette above the canvas and controls */ |
171 vbox_palette_above_canvas_and_controls = gtk_vbox_new(FALSE, 0); | 170 vbox_palette_above_canvas_and_controls = gtk_vbox_new(FALSE, 0); |
172 gtk_container_add(GTK_CONTAINER(window), vbox_palette_above_canvas_and_controls); | 171 gtk_container_add(GTK_CONTAINER(window), vbox_palette_above_canvas_and_controls); |
173 gtk_widget_show(vbox_palette_above_canvas_and_controls); | 172 gtk_widget_show(vbox_palette_above_canvas_and_controls); |
174 | 173 |
175 /* Create horizontal box for the palette and all its entries */ | 174 /* Create horizontal box for the palette and all its entries */ |
176 hbox_palette = gtk_hbox_new(FALSE, 0); | 175 hbox_palette = gtk_hbox_new(FALSE, 0); |
177 gtk_container_add(GTK_CONTAINER(vbox_palette_above_canvas_and_controls), hbox_palette); | 176 gtk_box_pack_start(GTK_BOX(vbox_palette_above_canvas_and_controls), |
177 hbox_palette, FALSE, FALSE, GAIM_HIG_BORDER); | |
178 gtk_widget_show(hbox_palette); | 178 gtk_widget_show(hbox_palette); |
179 | 179 |
180 /* Create horizontal box to seperate the canvas from the controls */ | 180 /* Create horizontal box to seperate the canvas from the controls */ |
181 hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0); | 181 hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0); |
182 gtk_container_add(GTK_CONTAINER(vbox_palette_above_canvas_and_controls), hbox_canvas_and_controls); | 182 gtk_box_pack_start(GTK_BOX(vbox_palette_above_canvas_and_controls), |
183 hbox_canvas_and_controls, FALSE, FALSE, GAIM_HIG_BORDER); | |
183 gtk_widget_show(hbox_canvas_and_controls); | 184 gtk_widget_show(hbox_canvas_and_controls); |
184 | 185 |
185 for(i = 0; i < PALETTE_NUM_COLORS; i++) | 186 for(i = 0; i < PALETTE_NUM_COLORS; i++) |
186 { | 187 { |
187 palette_color_box[i] = gtk_image_new_from_pixbuf(NULL); | 188 palette_color_box[i] = gtk_image_new_from_pixbuf(NULL); |
188 gtk_widget_set_size_request(palette_color_box[i], gtkwb->width / PALETTE_NUM_COLORS ,32); | 189 gtk_widget_set_size_request(palette_color_box[i], gtkwb->width / PALETTE_NUM_COLORS ,32); |
189 gtk_container_add(GTK_CONTAINER(hbox_palette), palette_color_box[i]); | 190 gtk_container_add(GTK_CONTAINER(hbox_palette), palette_color_box[i]); |
190 | 191 |
191 gtk_widget_show(palette_color_box[i]); | 192 gtk_widget_show(palette_color_box[i]); |
192 } | 193 } |
194 #endif | |
195 | |
196 hbox_canvas_and_controls = gtk_hbox_new(FALSE, 0); | |
197 gtk_widget_show(hbox_canvas_and_controls); | |
198 | |
199 gtk_container_add(GTK_CONTAINER(window), hbox_canvas_and_controls); | |
200 gtk_container_set_border_width(GTK_CONTAINER(window), GAIM_HIG_BORDER); | |
193 | 201 |
194 /* Create the drawing area */ | 202 /* Create the drawing area */ |
195 drawing_area = gtk_drawing_area_new(); | 203 drawing_area = gtk_drawing_area_new(); |
196 gtkwb->drawing_area = drawing_area; | 204 gtkwb->drawing_area = drawing_area; |
197 gtk_widget_set_size_request(GTK_WIDGET(drawing_area), gtkwb->width, gtkwb->height); | 205 gtk_widget_set_size_request(GTK_WIDGET(drawing_area), gtkwb->width, gtkwb->height); |
198 gtk_box_pack_start(GTK_BOX(hbox_canvas_and_controls), drawing_area, TRUE, TRUE, 8); | 206 gtk_box_pack_start(GTK_BOX(hbox_canvas_and_controls), drawing_area, TRUE, TRUE, GAIM_HIG_BOX_SPACE); |
199 | 207 |
200 gtk_widget_show(drawing_area); | 208 gtk_widget_show(drawing_area); |
201 | 209 |
202 /* Signals used to handle backing pixmap */ | 210 /* Signals used to handle backing pixmap */ |
203 g_signal_connect(G_OBJECT(drawing_area), "expose_event", | 211 g_signal_connect(G_OBJECT(drawing_area), "expose_event", |
224 GDK_BUTTON_RELEASE_MASK | | 232 GDK_BUTTON_RELEASE_MASK | |
225 GDK_POINTER_MOTION_HINT_MASK); | 233 GDK_POINTER_MOTION_HINT_MASK); |
226 | 234 |
227 /* Create vertical box to contain the controls */ | 235 /* Create vertical box to contain the controls */ |
228 vbox_controls = gtk_vbox_new(FALSE, 0); | 236 vbox_controls = gtk_vbox_new(FALSE, 0); |
229 gtk_container_add(GTK_CONTAINER(hbox_canvas_and_controls), vbox_controls); | 237 gtk_box_pack_start(GTK_BOX(hbox_canvas_and_controls), |
238 vbox_controls, FALSE, FALSE, GAIM_HIG_BOX_SPACE); | |
230 gtk_widget_show(vbox_controls); | 239 gtk_widget_show(vbox_controls); |
231 | 240 |
232 /* Add a clear button */ | 241 /* Add a clear button */ |
233 clear_button = gtk_button_new_from_stock(GTK_STOCK_CLEAR); | 242 clear_button = gtk_button_new_from_stock(GTK_STOCK_CLEAR); |
234 gtk_box_pack_start(GTK_BOX(vbox_controls), clear_button, FALSE, FALSE, 0); | 243 gtk_box_pack_start(GTK_BOX(vbox_controls), clear_button, FALSE, FALSE, GAIM_HIG_BOX_SPACE); |
235 gtk_widget_show(clear_button); | 244 gtk_widget_show(clear_button); |
236 g_signal_connect(G_OBJECT(clear_button), "clicked", | 245 g_signal_connect(G_OBJECT(clear_button), "clicked", |
237 G_CALLBACK(gaim_gtk_whiteboard_button_clear_press), gtkwb); | 246 G_CALLBACK(gaim_gtk_whiteboard_button_clear_press), gtkwb); |
238 | 247 |
239 /* Add a save button */ | 248 /* Add a save button */ |
240 save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE); | 249 save_button = gtk_button_new_from_stock(GTK_STOCK_SAVE); |
241 gtk_box_pack_start(GTK_BOX(vbox_controls), save_button, FALSE, FALSE, 8); | 250 gtk_box_pack_start(GTK_BOX(vbox_controls), save_button, FALSE, FALSE, GAIM_HIG_BOX_SPACE); |
242 gtk_widget_show(save_button); | 251 gtk_widget_show(save_button); |
243 | 252 |
244 g_signal_connect(G_OBJECT(save_button), "clicked", | 253 g_signal_connect(G_OBJECT(save_button), "clicked", |
245 G_CALLBACK(gaim_gtk_whiteboard_button_save_press), gtkwb); | 254 G_CALLBACK(gaim_gtk_whiteboard_button_save_press), gtkwb); |
246 | 255 |
247 #if 0 | |
248 /* Add a color selector */ | 256 /* Add a color selector */ |
249 { | 257 color_button = gtk_button_new_from_stock(GTK_STOCK_SELECT_COLOR); |
250 GdkColor color; | 258 gtk_box_pack_start(GTK_BOX(vbox_controls), color_button, FALSE, FALSE, GAIM_HIG_BOX_SPACE); |
251 GtkWidget *color_button; | 259 gtk_widget_show(color_button); |
252 | 260 g_signal_connect(G_OBJECT(color_button), "clicked", |
253 gaim_gtk_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); | 261 G_CALLBACK(color_select_dialog), gtkwb); |
254 color_button = gtk_color_button_new_with_color(&color); | |
255 gtk_box_pack_start(GTK_BOX(vbox_controls), color_button, FALSE, FALSE, 8); | |
256 gtk_widget_show(color_button); | |
257 | |
258 g_signal_connect(G_OBJECT(color_button), "color-set", | |
259 G_CALLBACK(change_color_cb), gtkwb); | |
260 } | |
261 #endif | |
262 | 262 |
263 /* Make all this (window) visible */ | 263 /* Make all this (window) visible */ |
264 gtk_widget_show(window); | 264 gtk_widget_show(window); |
265 | 265 |
266 gaim_gtk_whiteboard_set_canvas_as_icon(gtkwb); | 266 gaim_gtk_whiteboard_set_canvas_as_icon(gtkwb); |
837 color->red = (color_rgb >> 8) | 0xFF; | 837 color->red = (color_rgb >> 8) | 0xFF; |
838 color->green = (color_rgb & 0xFF00) | 0xFF; | 838 color->green = (color_rgb & 0xFF00) | 0xFF; |
839 color->blue = ((color_rgb & 0xFF) << 8) | 0xFF; | 839 color->blue = ((color_rgb & 0xFF) << 8) | 0xFF; |
840 } | 840 } |
841 | 841 |
842 #if 0 | |
843 static void | 842 static void |
844 change_color_cb(GtkColorButton *w, GaimGtkWhiteboard *gtkwb) | 843 change_color_cb(GtkColorSelection *selection, GaimGtkWhiteboard *gtkwb) |
845 { | 844 { |
846 GdkColor color; | 845 GdkColor color; |
847 int old_size = 5; | 846 int old_size = 5; |
848 int old_color = 0; | 847 int old_color = 0; |
849 int new_color; | 848 int new_color; |
850 GaimWhiteboard *wb = gtkwb->wb; | 849 GaimWhiteboard *wb = gtkwb->wb; |
851 | 850 |
852 gtk_color_button_get_color(w, &color); | 851 gtk_color_selection_get_current_color(selection, &color); |
853 new_color = (color.red & 0xFF00) << 8; | 852 new_color = (color.red & 0xFF00) << 8; |
854 new_color |= (color.green & 0xFF00); | 853 new_color |= (color.green & 0xFF00); |
855 new_color |= (color.blue & 0xFF00) >> 8; | 854 new_color |= (color.blue & 0xFF00) >> 8; |
856 | 855 |
857 gaim_whiteboard_get_brush(wb, &old_size, &old_color); | 856 gaim_whiteboard_get_brush(wb, &old_size, &old_color); |
858 gaim_whiteboard_send_brush(wb, old_size, new_color); | 857 gaim_whiteboard_send_brush(wb, old_size, new_color); |
859 } | 858 } |
860 #endif | 859 |
860 static void color_selection_dialog_destroy(GtkWidget *w, GtkWidget *destroy) | |
861 { | |
862 gtk_widget_destroy(destroy); | |
863 } | |
864 | |
865 static void color_select_dialog(GtkWidget *widget, GaimGtkWhiteboard *gtkwb) | |
866 { | |
867 GdkColor color; | |
868 GtkColorSelectionDialog *dialog; | |
869 | |
870 dialog = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new("Select color"); | |
871 | |
872 g_signal_connect(G_OBJECT(dialog->colorsel), "color-changed", | |
873 G_CALLBACK(change_color_cb), gtkwb); | |
874 | |
875 gtk_widget_destroy(dialog->cancel_button); | |
876 gtk_widget_destroy(dialog->help_button); | |
877 | |
878 g_signal_connect(G_OBJECT(dialog->ok_button), "clicked", | |
879 G_CALLBACK(color_selection_dialog_destroy), dialog); | |
880 | |
881 gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(dialog->colorsel), TRUE); | |
882 | |
883 gaim_gtk_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); | |
884 gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(dialog->colorsel), &color); | |
885 | |
886 gtk_widget_show_all(GTK_WIDGET(dialog)); | |
887 } | |
888 |