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