diff --git a/src/avatarmanipulation.cpp b/src/avatarmanipulation.cpp index 547b8cee4f5066241e311a635a4531f88c611c1c..137c8ac3c33898b3e5897448600ac40bc922279b 100644 --- a/src/avatarmanipulation.cpp +++ b/src/avatarmanipulation.cpp @@ -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);