Commit d8a9ce28 authored by Stepan Salenikovich's avatar Stepan Salenikovich

fix avatar manipulation when selecting an image

The crop area was not being set correctly when selecting an image
from a file. Also the crop area needs to be re-set (re-initialized)
each time a new image is used because otherwise it behaves weirdly
if the new image is smaller than the previous.

Change-Id: Ieef9b3f537567f3823dbd9f4cb18667c80d740c7
Tuleap: #917
parent 09e0b784
......@@ -80,7 +80,6 @@ struct _AvatarManipulationPrivate
GtkWidget *image_avatar;
GtkWidget *vbox_crop_area;
GtkWidget *frame_video;
GdkPixbuf *pix_scaled;
AvatarManipulationState state;
AvatarManipulationState last_state;
......@@ -128,11 +127,6 @@ avatar_manipulation_dispose(GObject *object)
static void
avatar_manipulation_finalize(GObject *object)
{
AvatarManipulationPrivate *priv = AVATAR_MANIPULATION_GET_PRIVATE(object);
if (priv->pix_scaled)
g_object_unref(priv->pix_scaled);
G_OBJECT_CLASS(avatar_manipulation_parent_class)->finalize(object);
}
......@@ -191,10 +185,6 @@ avatar_manipulation_init(AvatarManipulation *self)
AvatarManipulationPrivate *priv = AVATAR_MANIPULATION_GET_PRIVATE(self);
gtk_widget_init_template(GTK_WIDGET(self));
/* crop area */
priv->crop_area = cc_crop_area_new();
gtk_box_pack_start(GTK_BOX(priv->vbox_crop_area), priv->crop_area, TRUE, TRUE, 0);
/* our desired size for the image area */
gtk_widget_set_size_request(priv->stack_views, VIDEO_WIDTH, VIDEO_HEIGHT);
......@@ -413,13 +403,18 @@ choose_picture(AvatarManipulation *self)
if(auto filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog))) {
GError* error = nullptr; /* initialising to null avoid trouble... */
if (priv->pix_scaled) {
g_object_unref(priv->pix_scaled);
priv->pix_scaled = nullptr;
}
priv->pix_scaled = gdk_pixbuf_new_from_file_at_size (filename, VIDEO_WIDTH, VIDEO_HEIGHT, &error);
auto picture = gdk_pixbuf_new_from_file_at_size (filename, VIDEO_WIDTH, VIDEO_HEIGHT, &error);
if (!error) {
/* reset crop area */
if (priv->crop_area)
gtk_container_remove(GTK_CONTAINER(priv->vbox_crop_area), priv->crop_area);
priv->crop_area = cc_crop_area_new();
gtk_widget_show(priv->crop_area);
gtk_box_pack_start(GTK_BOX(priv->vbox_crop_area), priv->crop_area, TRUE, TRUE, 0);
cc_crop_area_set_picture(CC_CROP_AREA(priv->crop_area), picture);
g_object_unref(picture);
set_state(self, AVATAR_MANIPULATION_STATE_EDIT);
} else {
g_warning("(choose_picture) failed to load pixbuf from file: %s", error->message);
......@@ -460,6 +455,11 @@ got_snapshot(AvatarManipulation *self)
AvatarManipulationPrivate *priv = AVATAR_MANIPULATION_GET_PRIVATE(self);
GdkPixbuf* pix = video_widget_get_snapshot(VIDEO_WIDGET(priv->video_widget));
if (priv->crop_area)
gtk_container_remove(GTK_CONTAINER(priv->vbox_crop_area), priv->crop_area);
priv->crop_area = cc_crop_area_new();
gtk_widget_show(priv->crop_area);
gtk_box_pack_start(GTK_BOX(priv->vbox_crop_area), priv->crop_area, TRUE, TRUE, 0);
cc_crop_area_set_picture(CC_CROP_AREA(priv->crop_area), pix);
set_state(self, AVATAR_MANIPULATION_STATE_EDIT);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment