Updated with upstream update
This commit is contained in:
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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++;
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user