Updated with upstream update

This commit is contained in:
2023-10-30 15:55:30 -07:00
parent 098531073c
commit 3bbdd873ef
584 changed files with 91827 additions and 70362 deletions

View File

@ -2226,6 +2226,22 @@ add_layers (PikaImage *image,
l_y = lyr_a[lidx]->top;
l_w = lyr_a[lidx]->right - lyr_a[lidx]->left;
l_h = lyr_a[lidx]->bottom - lyr_a[lidx]->top;
if (l_h <= 0)
{
/* For fill layers this can be -1 apparently;
e.g. test file CT_SkillTest_v1.psd
Mark as empty and set height to 1.
*/
empty = TRUE;
l_h = 1;
}
if (l_w <= 0)
{
g_warning ("Unexpected layer width: %d", l_w);
empty = TRUE;
l_w = 1;
}
}
image_type = get_pika_image_type (img_a->base_type, TRUE);

View File

@ -2448,7 +2448,8 @@ save_dialog (PikaImage *image,
/* CMYK profile label */
profile_label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog),
"profile-label", _("No soft-proofing profile"));
"profile-label", _("No soft-proofing profile"),
FALSE, FALSE);
gtk_label_set_xalign (GTK_LABEL (profile_label), 0.0);
gtk_label_set_ellipsize (GTK_LABEL (profile_label), PANGO_ELLIPSIZE_END);
pika_label_set_attributes (GTK_LABEL (profile_label),
@ -2492,7 +2493,8 @@ save_dialog (PikaImage *image,
"duotone-notice",
_("Duotone color space information "
"from the original\nimported image "
"will be used."));
"will be used."),
FALSE, FALSE);
gtk_label_set_xalign (GTK_LABEL (duotone_notice), 0.0);
gtk_label_set_ellipsize (GTK_LABEL (duotone_notice), PANGO_ELLIPSIZE_END);
pika_label_set_attributes (GTK_LABEL (duotone_notice),
@ -2560,7 +2562,8 @@ save_dialog (PikaImage *image,
"path-warning",
_("PSD files can store up to "
"998 paths. \nThe rest "
"will be discarded."));
"will be discarded."),
FALSE, FALSE);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END);
pika_label_set_attributes (GTK_LABEL (label),
@ -2666,7 +2669,8 @@ save_dialog (PikaImage *image,
"switching to those layer modes."));
label = pika_procedure_dialog_get_label (PIKA_PROCEDURE_DIALOG (dialog),
"compat-notice", "Compatibility Notice");
"compat-notice", "Compatibility Notice",
FALSE, FALSE);
gtk_label_set_markup (GTK_LABEL (label), text);
gtk_label_set_xalign (GTK_LABEL (label), 0.0);
gtk_label_set_max_width_chars (GTK_LABEL (label), 50);

View File

@ -587,6 +587,7 @@ decode_packbits (const gchar *src,
{
IFDBG(2) g_debug ("Overrun in packbits replicate of %d chars", n - unpack_left);
error_code = 2;
break;
}
memset (dst, *src, n);
src++;

View File

@ -52,37 +52,42 @@ struct _PsdClass
#define PSD_TYPE (psd_get_type ())
#define PSD (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSD_TYPE, Psd))
#define PSD(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), PSD_TYPE, Psd))
GType psd_get_type (void) G_GNUC_CONST;
static GList * psd_query_procedures (PikaPlugIn *plug_in);
static PikaProcedure * psd_create_procedure (PikaPlugIn *plug_in,
const gchar *name);
static GList * psd_query_procedures (PikaPlugIn *plug_in);
static PikaProcedure * psd_create_procedure (PikaPlugIn *plug_in,
const gchar *name);
static PikaValueArray * psd_load (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
const PikaValueArray *args,
gpointer run_data);
static PikaValueArray * psd_load_thumb (PikaProcedure *procedure,
GFile *file,
gint size,
const PikaValueArray *args,
gpointer run_data);
static PikaValueArray * psd_save (PikaProcedure *procedure,
PikaRunMode run_mode,
PikaImage *image,
gint n_drawables,
PikaDrawable **drawables,
GFile *file,
const PikaValueArray *args,
gpointer run_data);
static PikaValueArray * psd_load_metadata (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
const PikaValueArray *args,
static PikaValueArray * psd_load (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
PikaMetadata *metadata,
PikaMetadataLoadFlags *flags,
PikaProcedureConfig *config,
gpointer run_data);
static PikaValueArray * psd_load_thumb (PikaProcedure *procedure,
GFile *file,
gint size,
PikaProcedureConfig *config,
gpointer run_data);
static PikaValueArray * psd_save (PikaProcedure *procedure,
PikaRunMode run_mode,
PikaImage *image,
gint n_drawables,
PikaDrawable **drawables,
GFile *file,
PikaMetadata *metadata,
PikaProcedureConfig *config,
gpointer run_data);
static PikaValueArray * psd_load_metadata (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
PikaMetadata *metadata,
PikaMetadataLoadFlags *flags,
PikaProcedureConfig *config,
gpointer run_data);
G_DEFINE_TYPE (Psd, psd, PIKA_TYPE_PLUG_IN)
@ -208,7 +213,7 @@ psd_create_procedure (PikaPlugIn *plug_in,
{
procedure = pika_save_procedure_new (plug_in, name,
PIKA_PDB_PROC_TYPE_PLUGIN,
psd_save, NULL, NULL);
TRUE, psd_save, NULL, NULL);
pika_procedure_set_image_types (procedure, "*");
@ -313,17 +318,18 @@ psd_create_procedure (PikaPlugIn *plug_in,
}
static PikaValueArray *
psd_load (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
const PikaValueArray *args,
gpointer run_data)
psd_load (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
PikaMetadata *metadata,
PikaMetadataLoadFlags *flags,
PikaProcedureConfig *config,
gpointer run_data)
{
PikaValueArray *return_vals;
gboolean resolution_loaded = FALSE;
gboolean profile_loaded = FALSE;
PikaImage *image;
PikaMetadata *metadata;
PikaParasite *parasite = NULL;
GError *error = NULL;
PSDSupport unsupported_features;
@ -368,23 +374,11 @@ psd_load (PikaProcedure *procedure,
pika_parasite_free (parasite);
}
metadata = pika_image_metadata_load_prepare (image, "image/x-psd",
file, NULL);
if (metadata)
{
PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_ALL;
if (resolution_loaded)
*flags &= ~PIKA_METADATA_LOAD_RESOLUTION;
if (resolution_loaded)
flags &= ~PIKA_METADATA_LOAD_RESOLUTION;
if (profile_loaded)
flags &= ~PIKA_METADATA_LOAD_COLORSPACE;
pika_image_metadata_load_finish (image, "image/x-psd",
metadata, flags);
g_object_unref (metadata);
}
if (profile_loaded)
*flags &= ~PIKA_METADATA_LOAD_COLORSPACE;
return_vals = pika_procedure_new_return_values (procedure,
PIKA_PDB_SUCCESS,
@ -396,11 +390,11 @@ psd_load (PikaProcedure *procedure,
}
static PikaValueArray *
psd_load_thumb (PikaProcedure *procedure,
GFile *file,
gint size,
const PikaValueArray *args,
gpointer run_data)
psd_load_thumb (PikaProcedure *procedure,
GFile *file,
gint size,
PikaProcedureConfig *config,
gpointer run_data)
{
PikaValueArray *return_vals;
gint width = 0;
@ -437,21 +431,16 @@ psd_save (PikaProcedure *procedure,
gint n_drawables,
PikaDrawable **drawables,
GFile *file,
const PikaValueArray *args,
PikaMetadata *metadata,
PikaProcedureConfig *config,
gpointer run_data)
{
PikaProcedureConfig *config;
PikaPDBStatusType status = PIKA_PDB_SUCCESS;
PikaMetadata *metadata;
PikaExportReturn export = PIKA_EXPORT_IGNORE;
GError *error = NULL;
PikaPDBStatusType status = PIKA_PDB_SUCCESS;
PikaExportReturn export = PIKA_EXPORT_IGNORE;
GError *error = NULL;
gegl_init (NULL, NULL);
config = pika_procedure_create_config (procedure);
metadata = pika_procedure_config_begin_export (config, image, run_mode,
args, "image/x-psd");
switch (run_mode)
{
case PIKA_RUN_INTERACTIVE:
@ -492,9 +481,6 @@ psd_save (PikaProcedure *procedure,
status = PIKA_PDB_EXECUTION_ERROR;
}
pika_procedure_config_end_export (config, image, file, status);
g_object_unref (config);
if (export == PIKA_EXPORT_EXPORT)
{
pika_image_delete (image);
@ -505,11 +491,13 @@ psd_save (PikaProcedure *procedure,
}
static PikaValueArray *
psd_load_metadata (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
const PikaValueArray *args,
gpointer run_data)
psd_load_metadata (PikaProcedure *procedure,
PikaRunMode run_mode,
GFile *file,
PikaMetadata *metadata,
PikaMetadataLoadFlags *flags,
PikaProcedureConfig *config,
gpointer run_data)
{
PikaValueArray *return_vals;
PikaImage *image;
@ -522,22 +510,12 @@ psd_load_metadata (PikaProcedure *procedure,
gegl_init (NULL, NULL);
/* Retrieve image */
if (pika_value_array_length (args) > 1)
{
data_length = g_value_get_int (pika_value_array_index (args, 0));
image = g_value_get_object (pika_value_array_index (args, 1));
}
else
{
return pika_procedure_new_return_values (procedure,
PIKA_PDB_EXECUTION_ERROR,
error);
}
if (pika_value_array_length (args) > 2)
is_layer = g_value_get_boolean (pika_value_array_index (args, 2));
if (pika_value_array_length (args) > 3)
is_cmyk = g_value_get_boolean (pika_value_array_index (args, 3));
g_object_get (config,
"image", &image,
"size", &data_length,
"metadata-type", &is_layer,
"cmyk", &is_cmyk,
NULL);
image = load_image_metadata (file, data_length, image, is_layer, is_cmyk,
&unsupported_features, &error);