Commit a0521a52 authored by Michael Natterer's avatar Michael Natterer 😴

app: change the "XCF compat" stuff to "XCF compression"

Both in the GimpImage API and in the GUI. The toggle in the save
dialog now controls ZLIB compression directly. Changed the various
info labels accordingly. Ditch the XCF parasite that saved the XCF
compat mode.
parent 8689f14d
......@@ -258,37 +258,12 @@ file_save_cmd_callback (GtkAction *action,
if (file && save_proc)
{
const gchar *version_string;
gint rle_version;
gint zlib_version;
gboolean compat_possible = FALSE;
gimp_image_get_xcf_version (image, FALSE,
&rle_version, &version_string);
gimp_image_get_xcf_version (image, TRUE,
&zlib_version, NULL);
if (rle_version != zlib_version)
compat_possible = TRUE;
if (gimp_image_get_xcf_compat_mode (image) &&
! compat_possible)
{
gimp_message (image->gimp, G_OBJECT (display),
GIMP_MESSAGE_WARNING,
_("The image uses features from %s and "
"cannot be saved for older GIMP "
"versions."),
version_string);
}
saved = file_save_dialog_save_image (GIMP_PROGRESS (display),
gimp, image, file,
save_proc,
GIMP_RUN_WITH_LAST_VALS,
TRUE, FALSE, FALSE,
gimp_image_get_xcf_compat_mode (image) &&
compat_possible,
gimp_image_get_xcf_compression (image),
TRUE);
break;
}
......
......@@ -74,7 +74,7 @@ struct _GimpImagePrivate
GFile *save_a_copy_file; /* the image's save-a-copy file */
GFile *untitled_file; /* a file saying "Untitled" */
gboolean xcf_compat_mode; /* if possible, save compat XCF */
gboolean xcf_compression; /* XCF compression enabled? */
gint dirty; /* dirty flag -- # of ops */
gint64 dirty_time; /* time when image became dirty */
......
......@@ -2539,20 +2539,20 @@ gimp_image_get_xcf_version (GimpImage *image,
}
void
gimp_image_set_xcf_compat_mode (GimpImage *image,
gboolean compat_mode)
gimp_image_set_xcf_compression (GimpImage *image,
gboolean compression)
{
g_return_if_fail (GIMP_IS_IMAGE (image));
GIMP_IMAGE_GET_PRIVATE (image)->xcf_compat_mode = compat_mode;
GIMP_IMAGE_GET_PRIVATE (image)->xcf_compression = compression;
}
gboolean
gimp_image_get_xcf_compat_mode (GimpImage *image)
gimp_image_get_xcf_compression (GimpImage *image)
{
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
return GIMP_IMAGE_GET_PRIVATE (image)->xcf_compat_mode;
return GIMP_IMAGE_GET_PRIVATE (image)->xcf_compression;
}
void
......
......@@ -171,9 +171,9 @@ gint gimp_image_get_xcf_version (GimpImage *image,
gint *gimp_version,
const gchar **version_string);
void gimp_image_set_xcf_compat_mode (GimpImage *image,
gboolean compat_mode);
gboolean gimp_image_get_xcf_compat_mode (GimpImage *image);
void gimp_image_set_xcf_compression (GimpImage *image,
gboolean compression);
gboolean gimp_image_get_xcf_compression (GimpImage *image);
void gimp_image_set_resolution (GimpImage *image,
gdouble xres,
......
......@@ -179,17 +179,15 @@ file_save_dialog_response (GtkWidget *dialog,
case CHECK_URI_OK:
{
gboolean xcf_compat = FALSE;
gboolean xcf_compression = FALSE;
gimp_file_dialog_set_sensitive (file_dialog, FALSE);
if (GIMP_IS_SAVE_DIALOG (dialog))
{
GimpSaveDialog* save_dialog = GIMP_SAVE_DIALOG (dialog);
xcf_compat = save_dialog->compat &&
gtk_widget_get_sensitive (save_dialog->compat_toggle);
xcf_compression = GIMP_SAVE_DIALOG (dialog)->compression;
}
if (file_save_dialog_save_image (GIMP_PROGRESS (dialog),
gimp,
file_dialog->image,
......@@ -200,7 +198,7 @@ file_save_dialog_response (GtkWidget *dialog,
! GIMP_SAVE_DIALOG (dialog)->save_a_copy,
FALSE,
GIMP_IS_EXPORT_DIALOG (dialog),
xcf_compat,
xcf_compression,
FALSE))
{
/* Save was successful, now store the URI in a couple of
......@@ -753,7 +751,7 @@ file_save_dialog_save_image (GimpProgress *progress,
gboolean change_saved_state,
gboolean export_backward,
gboolean export_forward,
gboolean xcf_compat,
gboolean xcf_compression,
gboolean verbose_cancel)
{
GimpPDBStatusType status;
......@@ -768,7 +766,7 @@ file_save_dialog_save_image (GimpProgress *progress,
gimp_action_group_set_action_sensitive (list->data, "file-quit", FALSE);
}
gimp_image_set_xcf_compat_mode (image, xcf_compat);
gimp_image_set_xcf_compression (image, xcf_compression);
status = file_save (gimp, image, progress, file,
save_proc, run_mode,
......
......@@ -34,7 +34,7 @@ gboolean file_save_dialog_save_image (GimpProgress *progress_and_handl
gboolean save_a_copy,
gboolean export_backward,
gboolean export_forward,
gboolean xcf_compat,
gboolean xcf_compression,
gboolean verbose_cancel);
......
......@@ -46,7 +46,7 @@ typedef struct _GimpSaveDialogState GimpSaveDialogState;
struct _GimpSaveDialogState
{
gchar *filter_name;
gboolean compat;
gboolean compression;
};
......@@ -57,8 +57,10 @@ static void gimp_save_dialog_save_state (GimpFileDialog *dialog,
static void gimp_save_dialog_load_state (GimpFileDialog *dialog,
const gchar *state_name);
static void gimp_save_dialog_add_compat_toggle (GimpSaveDialog *dialog);
static void gimp_save_dialog_compat_toggled (GtkToggleButton *button,
static void gimp_save_dialog_add_compression_toggle
(GimpSaveDialog *dialog);
static void gimp_save_dialog_compression_toggled
(GtkToggleButton *button,
GimpSaveDialog *dialog);
static GimpSaveDialogState
......@@ -101,7 +103,7 @@ gimp_save_dialog_constructed (GObject *object)
*/
G_OBJECT_CLASS (parent_class)->constructed (object);
gimp_save_dialog_add_compat_toggle (dialog);
gimp_save_dialog_add_compression_toggle (dialog);
}
static void
......@@ -254,49 +256,37 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
if (rle_version == zlib_version)
{
gtk_widget_set_sensitive (dialog->compat_toggle, FALSE);
gtk_widget_set_sensitive (dialog->compat_info, FALSE);
tooltip = g_strdup_printf (_("The image uses features from %s and "
"cannot be saved for older GIMP "
"versions."),
tooltip = g_strdup_printf (_("The image uses features from %s, disabling "
"compression won't make the XCF file "
"readable by older GIMP versions."),
version_string);
}
else
{
gtk_widget_set_sensitive (dialog->compat_toggle, TRUE);
gtk_widget_set_sensitive (dialog->compat_info, TRUE);
tooltip = g_strdup_printf (_("Disables compression to make the XCF "
tooltip = g_strdup_printf (_("Keep compression disabled to make the XCF "
"file readable by %s and later."),
version_string);
if (gimp_image_get_metadata (image))
{
gchar *temp_tooltip;
}
temp_tooltip = g_strconcat (tooltip, "\n",
_("Metadata won't be visible in GIMP "
"older than version 2.10."), NULL);
g_free (tooltip);
tooltip = temp_tooltip;
}
if (gimp_image_get_metadata (image))
{
gchar *temp_tooltip;
temp_tooltip = g_strconcat (tooltip, "\n",
_("Metadata won't be visible in GIMP "
"older than version 2.10."), NULL);
g_free (tooltip);
tooltip = temp_tooltip;
}
gtk_label_set_text (GTK_LABEL (dialog->compat_info), tooltip);
g_free (tooltip);
gtk_widget_show (dialog->compat_toggle);
gtk_widget_show (dialog->compression_toggle);
gtk_widget_show (dialog->compat_info);
/* We set the compatibility mode by default either if the image was
* previously saved with the compatibility mode, or if it has never
* been saved and the last GimpSaveDialogState had compatibility
* mode ON.
*/
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->compat_toggle),
gtk_widget_get_sensitive (dialog->compat_toggle) &&
(gimp_image_get_xcf_compat_mode (image) ||
(! gimp_image_get_file (image) && dialog->compat)));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dialog->compression_toggle),
gimp_image_get_xcf_compression (image));
if (ext_file)
{
......@@ -331,41 +321,37 @@ gimp_save_dialog_set_image (GimpSaveDialog *dialog,
/* private functions */
static void
gimp_save_dialog_add_compat_toggle (GimpSaveDialog *dialog)
gimp_save_dialog_add_compression_toggle (GimpSaveDialog *dialog)
{
GtkWidget *compat_frame;
GtkWidget *frame;
compat_frame = gimp_frame_new (NULL);
dialog->compression_toggle =
gtk_check_button_new_with_label (_("Save this XCF file with better but slower compression"));
/* The checkbox. */
dialog->compat_toggle =
gtk_check_button_new_with_label (_("Save this XCF file with maximum compatibility"));
gtk_frame_set_label_widget (GTK_FRAME (compat_frame),
dialog->compat_toggle);
frame = gimp_frame_new (NULL);
gtk_frame_set_label_widget (GTK_FRAME (frame), dialog->compression_toggle);
gimp_file_dialog_add_extra_widget (GIMP_FILE_DIALOG (dialog), frame,
FALSE, FALSE, 0);
gtk_widget_show (frame);
/* Additional information explaining what this mode does. */
/* Additional information explaining file compatibility things */
dialog->compat_info = gtk_label_new ("");
gtk_label_set_xalign (GTK_LABEL (dialog->compat_info), 0.0);
gimp_label_set_attributes (GTK_LABEL (dialog->compat_info),
PANGO_ATTR_STYLE, PANGO_STYLE_ITALIC,
-1);
gtk_container_add (GTK_CONTAINER (compat_frame), dialog->compat_info);
gimp_file_dialog_add_extra_widget (GIMP_FILE_DIALOG (dialog),
compat_frame,
FALSE, FALSE, 0);
gtk_widget_show (compat_frame);
gtk_container_add (GTK_CONTAINER (frame), dialog->compat_info);
g_signal_connect (dialog->compat_toggle, "toggled",
G_CALLBACK (gimp_save_dialog_compat_toggled),
g_signal_connect (dialog->compression_toggle, "toggled",
G_CALLBACK (gimp_save_dialog_compression_toggled),
dialog);
}
static void
gimp_save_dialog_compat_toggled (GtkToggleButton *button,
GimpSaveDialog *dialog)
gimp_save_dialog_compression_toggled (GtkToggleButton *button,
GimpSaveDialog *dialog)
{
dialog->compat = gtk_toggle_button_get_active (button);
dialog->compression = gtk_toggle_button_get_active (button);
}
static GimpSaveDialogState *
......@@ -381,7 +367,7 @@ gimp_save_dialog_get_state (GimpSaveDialog *dialog)
if (filter)
state->filter_name = g_strdup (gtk_file_filter_get_name (filter));
state->compat = dialog->compat;
state->compression = dialog->compression;
return state;
}
......@@ -412,7 +398,7 @@ gimp_save_dialog_set_state (GimpSaveDialog *dialog,
g_slist_free (filters);
}
dialog->compat = state->compat;
dialog->compression = state->compression;
}
static void
......
......@@ -43,9 +43,9 @@ struct _GimpSaveDialog
gboolean close_after_saving;
GimpObject *display_to_close;
GtkWidget *compat_toggle;
GtkWidget *compression_toggle;
GtkWidget *compat_info;
gboolean compat;
gboolean compression;
};
struct _GimpSaveDialogClass
......
......@@ -380,7 +380,7 @@ xcf_load_image (Gimp *gimp,
{
GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image);
gimp_image_set_xcf_compat_mode (image, TRUE);
/* just ditch it, it's unused but shouldn't be re-saved */
gimp_parasite_list_remove (private->parasites,
gimp_parasite_name (parasite));
}
......@@ -696,6 +696,9 @@ xcf_load_image_props (XcfInfo *info,
info->compression = compression;
gimp_image_set_xcf_compression (image,
compression >= COMPRESS_ZLIB);
GIMP_LOG (XCF, "prop compression=%d", compression);
}
break;
......
......@@ -344,11 +344,10 @@ xcf_save_image_props (XcfInfo *info,
GimpImage *image,
GError **error)
{
GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image);
GimpParasite *grid_parasite = NULL;
GimpParasite *meta_parasite = NULL;
GimpParasite *compat_parasite = NULL;
GimpUnit unit = gimp_image_get_unit (image);
GimpImagePrivate *private = GIMP_IMAGE_GET_PRIVATE (image);
GimpParasite *grid_parasite = NULL;
GimpParasite *meta_parasite = NULL;
GimpUnit unit = gimp_image_get_unit (image);
gdouble xres;
gdouble yres;
......@@ -418,23 +417,6 @@ xcf_save_image_props (XcfInfo *info,
}
}
if (gimp_image_get_xcf_compat_mode (image))
{
gint gimp_version;
/* Save the GIMP version we are trying to get compatible with.
* This specific information is unused as of now though.
*/
gimp_image_get_xcf_version (image, FALSE, &gimp_version, NULL);
gimp_version = g_htonl (gimp_version);
compat_parasite = gimp_parasite_new ("gimp-xcf-compatibility-mode",
GIMP_PARASITE_PERSISTENT,
sizeof (gimp_version),
&gimp_version);
gimp_parasite_list_add (private->parasites, compat_parasite);
}
if (gimp_parasite_list_length (private->parasites) > 0)
{
xcf_check_error (xcf_save_prop (info, image, PROP_PARASITES, error,
......@@ -455,13 +437,6 @@ xcf_save_image_props (XcfInfo *info,
gimp_parasite_free (meta_parasite);
}
if (compat_parasite)
{
gimp_parasite_list_remove (private->parasites,
gimp_parasite_name (compat_parasite));
gimp_parasite_free (compat_parasite);
}
xcf_check_error (xcf_save_prop (info, image, PROP_END, error));
return TRUE;
......
......@@ -363,10 +363,10 @@ xcf_save_stream (Gimp *gimp,
info.progress = progress;
info.file = output_file;
if (gimp_image_get_xcf_compat_mode (image))
info.compression = COMPRESS_RLE;
else
if (gimp_image_get_xcf_compression (image))
info.compression = COMPRESS_ZLIB;
else
info.compression = COMPRESS_RLE;
info.file_version = gimp_image_get_xcf_version (image,
info.compression ==
......
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