diff -r 69f260ac8ea8 -r f883709bdba4 pidgin/gtkwhiteboard.c --- a/pidgin/gtkwhiteboard.c Mon Nov 22 10:18:15 2010 +0000 +++ b/pidgin/gtkwhiteboard.c Thu Nov 25 22:30:18 2010 +0000 @@ -280,13 +280,13 @@ /* TODO Ask if user wants to save picture before the session is closed */ /* Clear graphical memory */ - if(gtkwb->pixmap) + if(gtkwb->pixbuf) { - cairo_t *cr = g_object_get_data(G_OBJECT(gtkwb->pixmap), "cairo-context"); + cairo_t *cr = g_object_get_data(G_OBJECT(gtkwb->pixbuf), "cairo-context"); if (cr) cairo_destroy(cr); - g_object_unref(gtkwb->pixmap); - gtkwb->pixmap = NULL; + g_object_unref(gtkwb->pixbuf); + gtkwb->pixbuf = NULL; } colour_dialog = g_object_get_data(G_OBJECT(gtkwb->window), "colour-dialog"); @@ -356,28 +356,33 @@ static gboolean pidgin_whiteboard_configure_event(GtkWidget *widget, GdkEventConfigure *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; cairo_t *cr; - - if (pixmap) { - cr = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); + GdkWindow *window = gtk_widget_get_window(widget); + GtkAllocation allocation; + + if (pixbuf) { + cr = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); if (cr) cairo_destroy(cr); - g_object_unref(pixmap); + g_object_unref(pixbuf); } - pixmap = gdk_pixmap_new(widget->window, - widget->allocation.width, - widget->allocation.height, - -1); - gtkwb->pixmap = pixmap; + gtk_widget_get_allocation(widget, &allocation); + + pixbuf = gdk_pixbuf_new(GDK_COLORSPACE_RGB, + FALSE, + gdk_visual_get_depth(GDK_VISUAL(window)), + allocation.width, allocation.height); + + gtkwb->pixbuf = pixbuf; - cr = gdk_cairo_create(GDK_DRAWABLE(pixmap)); - g_object_set_data(G_OBJECT(pixmap), "cairo-context", cr); - gdk_cairo_set_source_color(cr, &widget->style->white); + cr = gdk_cairo_create(GDK_DRAWABLE(pixbuf)); + g_object_set_data(G_OBJECT(pixbuf), "cairo-context", cr); + gdk_cairo_set_source_color(cr, >k_widget_get_style(widget)->white); cairo_rectangle(cr, 0, 0, - widget->allocation.width, widget->allocation.height); + allocation.width, allocation.height); cairo_fill(cr); return TRUE; @@ -386,11 +391,11 @@ static gboolean pidgin_whiteboard_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)(data); - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; cairo_t *cr; - cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); - gdk_cairo_set_source_pixmap(cr, pixmap, 0, 0); + cr = gdk_cairo_create(GDK_DRAWABLE(gtk_widget_get_window(widget))); + gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0); cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height); @@ -403,7 +408,7 @@ static gboolean pidgin_whiteboard_brush_down(GtkWidget *widget, GdkEventButton *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = wb->draw_list; @@ -418,7 +423,7 @@ BrushState = BRUSH_STATE_DOWN; - if(event->button == 1 && pixmap != NULL) + if(event->button == 1 && pixbuf != NULL) { /* Check if draw_list has contents; if so, clear it */ if(draw_list) @@ -456,7 +461,7 @@ GdkModifierType state; PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = wb->draw_list; @@ -470,7 +475,7 @@ state = event->state; } - if(state & GDK_BUTTON1_MASK && pixmap != NULL) + if(state & GDK_BUTTON1_MASK && pixbuf != NULL) { if((BrushState != BRUSH_STATE_DOWN) && (BrushState != BRUSH_STATE_MOTION)) { @@ -536,7 +541,7 @@ static gboolean pidgin_whiteboard_brush_up(GtkWidget *widget, GdkEventButton *event, gpointer data) { PidginWhiteboard *gtkwb = (PidginWhiteboard*)data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; PurpleWhiteboard *wb = gtkwb->wb; GList *draw_list = wb->draw_list; @@ -551,7 +556,7 @@ } BrushState = BRUSH_STATE_UP; - if(event->button == 1 && pixmap != NULL) + if(event->button == 1 && pixbuf != NULL) { /* If the brush was never moved, express two sets of two deltas That's a * 'point,' but not for Yahoo! @@ -593,9 +598,9 @@ { PidginWhiteboard *gtkwb = wb->ui_data; GtkWidget *widget = gtkwb->drawing_area; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; - cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); + cairo_t *gfx_con = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); GdkColor col; /* Interpret and convert color */ @@ -701,21 +706,24 @@ static void pidgin_whiteboard_clear(PurpleWhiteboard *wb) { PidginWhiteboard *gtkwb = wb->ui_data; - GdkPixmap *pixmap = gtkwb->pixmap; + GdkPixbuf *pixbuf = gtkwb->pixbuf; GtkWidget *drawing_area = gtkwb->drawing_area; - cairo_t *cr = g_object_get_data(G_OBJECT(pixmap), "cairo-context"); + cairo_t *cr = g_object_get_data(G_OBJECT(pixbuf), "cairo-context"); + GtkAllocation allocation; - gdk_cairo_set_source_color(cr, &drawing_area->style->white); + gtk_widget_get_allocation(drawing_area, &allocation); + + gdk_cairo_set_source_color(cr, >k_widget_get_style(drawing_area)->white); cairo_rectangle(cr, 0, 0, - drawing_area->allocation.width, - drawing_area->allocation.height); + allocation.width, + allocation.height); cairo_fill(cr); gtk_widget_queue_draw_area(drawing_area, 0, 0, - drawing_area->allocation.width, - drawing_area->allocation.height); + allocation.width, + allocation.height); } static void pidgin_whiteboard_button_clear_press(GtkWidget *widget, gpointer data) @@ -781,12 +789,15 @@ gtk_widget_destroy(dialog); /* Makes an icon from the whiteboard's canvas 'image' */ + pixbuf = gtkwb->pixbuf; + /* pixbuf = gdk_pixbuf_get_from_drawable(NULL, (GdkDrawable*)(gtkwb->pixmap), gdk_drawable_get_colormap(gtkwb->pixmap), 0, 0, 0, 0, gtkwb->width, gtkwb->height); + */ if(gdk_pixbuf_save(pixbuf, filename, "jpeg", NULL, "quality", "100", NULL)) purple_debug_info("gtkwhiteboard", "File Saved...\n"); @@ -807,12 +818,15 @@ GdkPixbuf *pixbuf; /* Makes an icon from the whiteboard's canvas 'image' */ + pixbuf = gtkwb->pixbuf; + /* pixbuf = gdk_pixbuf_get_from_drawable(NULL, (GdkDrawable*)(gtkwb->pixmap), gdk_drawable_get_colormap(gtkwb->pixmap), 0, 0, 0, 0, gtkwb->width, gtkwb->height); + */ gtk_window_set_icon((GtkWindow*)(gtkwb->window), pixbuf); } @@ -853,23 +867,29 @@ { GdkColor color; GtkColorSelectionDialog *dialog; - + GtkWidget *ok_button; + dialog = (GtkColorSelectionDialog *)gtk_color_selection_dialog_new(_("Select color")); g_object_set_data(G_OBJECT(gtkwb->window), "colour-dialog", dialog); - g_signal_connect(G_OBJECT(dialog->colorsel), "color-changed", + g_signal_connect(G_OBJECT(gtk_color_selection_dialog_get_color_selection(dialog)), + "color-changed", G_CALLBACK(change_color_cb), gtkwb); + /* gtk_widget_destroy(dialog->cancel_button); gtk_widget_destroy(dialog->help_button); - - g_signal_connect(G_OBJECT(dialog->ok_button), "clicked", + */ + g_object_get(G_OBJECT(dialog), "ok-button", &ok_button, NULL); + + g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(color_selection_dialog_destroy), gtkwb); - gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(dialog->colorsel), TRUE); + gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(dialog)), TRUE); pidgin_whiteboard_rgb24_to_rgb48(gtkwb->brush_color, &color); - gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(dialog->colorsel), &color); + gtk_color_selection_set_current_color( + GTK_COLOR_SELECTION(gtk_color_selection_dialog_get_color_selection(dialog)), &color); gtk_widget_show_all(GTK_WIDGET(dialog)); }