pidgin/plugins/screencap.c

changeset 39262
53c6b966ac05
parent 38433
361c801c4536
child 39499
cbf89a92d224
equal deleted inserted replaced
39254:f11c4b993424 39262:53c6b966ac05
115 *pixels /= 2; 115 *pixels /= 2;
116 pixels += pad; 116 pixels += pad;
117 } 117 }
118 } 118 }
119 119
120 static gboolean
121 scrncap_pixbuf_to_image_cb(const gchar *buf, gsize count, GError **error,
122 gpointer data)
123 {
124 PurpleImage *image = *(PurpleImage **)data;
125
126 image = purple_image_new_from_data(buf, count);
127
128 return TRUE;
129 }
130
131 static PurpleImage * 120 static PurpleImage *
132 scrncap_pixbuf_to_image(GdkPixbuf *pixbuf) 121 scrncap_pixbuf_to_image(GdkPixbuf *pixbuf)
133 { 122 {
134 PurpleImage *image = NULL; 123 PurpleImage *image = NULL;
124 gchar *buffer;
125 gsize count;
135 GError *error = NULL; 126 GError *error = NULL;
136 127
137 gdk_pixbuf_save_to_callback(pixbuf, scrncap_pixbuf_to_image_cb, &image, 128 if (!gdk_pixbuf_save_to_buffer(pixbuf, &buffer, &count, "png",
138 "png", &error, NULL); 129 &error, NULL)) {
139
140 if (error != NULL) {
141 purple_debug_error("screencap", "Failed saving an image: %s", 130 purple_debug_error("screencap", "Failed saving an image: %s",
142 error->message); 131 error->message);
143 g_error_free(error); 132 g_error_free(error);
144 g_object_unref(image);
145 return NULL; 133 return NULL;
146 } 134 }
135
136 image = purple_image_new_take_data((guint8 *)buffer, count);
147 137
148 if (purple_image_get_extension(image) == NULL) { 138 if (purple_image_get_extension(image) == NULL) {
149 purple_debug_error("screencap", "Invalid image format"); 139 purple_debug_error("screencap", "Invalid image format");
150 g_object_unref(image); 140 g_object_unref(image);
151 return NULL; 141 return NULL;

mercurial