GimpSymmetry * gimp_symmetry_from_parasite (const GimpParasite *parasite, GimpImage *image, GType type) { GimpSymmetry *symmetry; gchar *parasite_name; const gchar *str; GError *error = NULL; parasite_name = gimp_symmetry_parasite_name (type); g_return_val_if_fail (parasite != NULL, NULL); g_return_val_if_fail (strcmp (gimp_parasite_name (parasite), parasite_name) == 0, NULL); g_free (parasite_name); str = gimp_parasite_data (parasite); g_return_val_if_fail (str != NULL, NULL); symmetry = gimp_image_symmetry_new (image, type); if (! gimp_config_deserialize_string (GIMP_CONFIG (symmetry), str, gimp_parasite_data_size (parasite), NULL, &error)) { g_warning ("Failed to deserialize symmetry parasite: %s", error->message); g_error_free (error); } return symmetry; }
GimpParasite * gimp_symmetry_to_parasite (const GimpSymmetry *sym) { GimpParasite *parasite; gchar *parasite_name; gchar *str; g_return_val_if_fail (GIMP_IS_SYMMETRY (sym), NULL); str = gimp_config_serialize_to_string (GIMP_CONFIG (sym), NULL); g_return_val_if_fail (str != NULL, NULL); parasite_name = gimp_symmetry_parasite_name (G_TYPE_FROM_INSTANCE (sym)); parasite = gimp_parasite_new (parasite_name, GIMP_PARASITE_PERSISTENT, strlen (str) + 1, str); g_free (parasite_name); g_free (str); return parasite; }
GimpSymmetry * gimp_symmetry_from_parasite (const GimpParasite *parasite, GimpImage *image, GType type) { GimpSymmetry *symmetry; gchar *parasite_name; const gchar *str; GError *error = NULL; parasite_name = gimp_symmetry_parasite_name (type); g_return_val_if_fail (parasite != NULL, NULL); g_return_val_if_fail (strcmp (gimp_parasite_name (parasite), parasite_name) == 0, NULL); str = gimp_parasite_data (parasite); if (! str) { g_warning ("Empty symmetry parasite \"%s\"", parasite_name); return NULL; } symmetry = gimp_image_symmetry_new (image, type); g_object_set (symmetry, "version", -1, NULL); if (! gimp_config_deserialize_string (GIMP_CONFIG (symmetry), str, gimp_parasite_data_size (parasite), NULL, &error)) { g_printerr ("Failed to deserialize symmetry parasite: %s\n" "\t- parasite name: %s\n\t- parasite data: %s\n", error->message, parasite_name, str); g_error_free (error); g_object_unref (symmetry); symmetry = NULL; } g_free (parasite_name); if (symmetry) { gint version; g_object_get (symmetry, "version", &version, NULL); if (version == -1) { /* If version has not been updated, let's assume this parasite was * not representing symmetry settings. */ g_object_unref (symmetry); symmetry = NULL; } else if (GIMP_SYMMETRY_GET_CLASS (symmetry)->update_version (symmetry) && ! GIMP_SYMMETRY_GET_CLASS (symmetry)->update_version (symmetry)) { g_object_unref (symmetry); symmetry = NULL; } } return symmetry; }