Updated with upstream update
This commit is contained in:
@ -427,6 +427,8 @@ icns_attach_image (PikaImage *image,
|
||||
|
||||
if (temp_file_type && procedure_name)
|
||||
{
|
||||
PikaProcedure *procedure;
|
||||
|
||||
temp_file = pika_temp_file (temp_file_type);
|
||||
fp = g_fopen (g_file_peek_path (temp_file), "wb");
|
||||
|
||||
@ -443,12 +445,11 @@ icns_attach_image (PikaImage *image,
|
||||
fwrite (icns->data + 8, sizeof (guchar), icns->size - 8, fp);
|
||||
fclose (fp);
|
||||
|
||||
return_vals =
|
||||
pika_pdb_run_procedure (pika_get_pdb (),
|
||||
procedure_name,
|
||||
PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE,
|
||||
G_TYPE_FILE, temp_file,
|
||||
G_TYPE_NONE);
|
||||
procedure = pika_pdb_lookup_procedure (pika_get_pdb (), procedure_name);
|
||||
return_vals = pika_procedure_run (procedure,
|
||||
"run-mode", PIKA_RUN_NONINTERACTIVE,
|
||||
"file", temp_file,
|
||||
NULL);
|
||||
}
|
||||
|
||||
if (temp_image && return_vals)
|
||||
@ -464,9 +465,9 @@ icns_attach_image (PikaImage *image,
|
||||
|
||||
g_file_delete (temp_file, NULL, NULL);
|
||||
g_object_unref (temp_file);
|
||||
pika_value_array_unref (return_vals);
|
||||
g_free (layers);
|
||||
}
|
||||
g_clear_pointer (&return_vals, pika_value_array_unref);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -548,6 +549,7 @@ icns_load_thumbnail_image (GFile *file,
|
||||
GError **error)
|
||||
{
|
||||
gint w = 0;
|
||||
gint target_w = *width;
|
||||
FILE *fp;
|
||||
PikaImage *image = NULL;
|
||||
IcnsResource *icns;
|
||||
@ -586,16 +588,38 @@ icns_load_thumbnail_image (GFile *file,
|
||||
resources = g_new (IcnsResource, 256);
|
||||
while (resource_get_next (icns, &resources[nResources++])) {}
|
||||
|
||||
*width = 0;
|
||||
*height = 0;
|
||||
for (i = 0; iconTypes[i].type; i++)
|
||||
{
|
||||
if ((icns = resource_find (resources, iconTypes[i].type, nResources)))
|
||||
{
|
||||
if (iconTypes[i].width > w)
|
||||
if (iconTypes[i].width > w && iconTypes[i].width <= target_w)
|
||||
{
|
||||
w = iconTypes[i].width;
|
||||
match = i;
|
||||
}
|
||||
}
|
||||
*width = MAX (*width, iconTypes[i].width);
|
||||
*height = MAX (*height, iconTypes[i].height);
|
||||
}
|
||||
|
||||
if (match == -1)
|
||||
{
|
||||
/* We didn't find any icon with size smaller or equal to the target.
|
||||
* Settle with the smallest bigger icon instead.
|
||||
*/
|
||||
for (i = 0; iconTypes[i].type; i++)
|
||||
{
|
||||
if ((icns = resource_find (resources, iconTypes[i].type, nResources)))
|
||||
{
|
||||
if (match == -1 || iconTypes[i].width < w)
|
||||
{
|
||||
w = iconTypes[i].width;
|
||||
match = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (match > -1)
|
||||
|
@ -417,7 +417,6 @@ icns_export_image (GFile *file,
|
||||
GList *iter;
|
||||
gint i;
|
||||
guint32 file_size = 8;
|
||||
PikaValueArray *return_vals = NULL;
|
||||
gint duplicates[ICNS_TYPE_NUM];
|
||||
|
||||
for (i = 0; i < ICNS_TYPE_NUM; i++)
|
||||
@ -456,6 +455,8 @@ icns_export_image (GFile *file,
|
||||
/* MacOS X format icons */
|
||||
if (match != -1 && duplicates[match] == 0)
|
||||
{
|
||||
PikaProcedure *procedure;
|
||||
PikaValueArray *return_vals;
|
||||
PikaDrawable **drawables = NULL;
|
||||
GFile *temp_file = NULL;
|
||||
PikaObjectArray *args;
|
||||
@ -470,23 +471,22 @@ icns_export_image (GFile *file,
|
||||
|
||||
args = pika_object_array_new (PIKA_TYPE_DRAWABLE, (GObject **) drawables, 1, FALSE);
|
||||
|
||||
return_vals =
|
||||
pika_pdb_run_procedure (pika_get_pdb (),
|
||||
"file-png-save",
|
||||
PIKA_TYPE_RUN_MODE, PIKA_RUN_NONINTERACTIVE,
|
||||
PIKA_TYPE_IMAGE, image,
|
||||
G_TYPE_INT, 1,
|
||||
PIKA_TYPE_OBJECT_ARRAY, args,
|
||||
G_TYPE_FILE, temp_file,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_INT, 9,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_BOOLEAN, FALSE,
|
||||
G_TYPE_NONE);
|
||||
procedure = pika_pdb_lookup_procedure (pika_get_pdb (), "file-png-save");
|
||||
return_vals = pika_procedure_run (procedure,
|
||||
"run-mode", PIKA_RUN_NONINTERACTIVE,
|
||||
"image", image,
|
||||
"num-drawables", 1,
|
||||
"drawables", args,
|
||||
"file", temp_file,
|
||||
"interlaced", FALSE,
|
||||
"compression", 9,
|
||||
"bkgd", FALSE,
|
||||
"offs", FALSE,
|
||||
"phys", FALSE,
|
||||
"time", FALSE,
|
||||
"save-transparent", FALSE,
|
||||
"optimize-palette", FALSE,
|
||||
NULL);
|
||||
|
||||
pika_object_array_free (args);
|
||||
g_clear_pointer (&drawables, g_free);
|
||||
|
@ -59,33 +59,36 @@ struct _IcnsClass
|
||||
};
|
||||
|
||||
|
||||
#define ICNS_TYPE (icns_get_type ())
|
||||
#define ICNS (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ICNS_TYPE, Icns))
|
||||
#define ICNS_TYPE (icns_get_type ())
|
||||
#define ICNS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), ICNS_TYPE, Icns))
|
||||
|
||||
GType icns_get_type (void) G_GNUC_CONST;
|
||||
|
||||
static GList * icns_query_procedures (PikaPlugIn *plug_in);
|
||||
static PikaProcedure * icns_create_procedure (PikaPlugIn *plug_in,
|
||||
const gchar *name);
|
||||
static GList * icns_query_procedures (PikaPlugIn *plug_in);
|
||||
static PikaProcedure * icns_create_procedure (PikaPlugIn *plug_in,
|
||||
const gchar *name);
|
||||
|
||||
static PikaValueArray * icns_load (PikaProcedure *procedure,
|
||||
PikaRunMode run_mode,
|
||||
GFile *file,
|
||||
const PikaValueArray *args,
|
||||
gpointer run_data);
|
||||
static PikaValueArray * icns_load_thumb (PikaProcedure *procedure,
|
||||
GFile *file,
|
||||
gint size,
|
||||
const PikaValueArray *args,
|
||||
gpointer run_data);
|
||||
static PikaValueArray * icns_save (PikaProcedure *procedure,
|
||||
PikaRunMode run_mode,
|
||||
PikaImage *image,
|
||||
gint n_drawables,
|
||||
PikaDrawable **drawables,
|
||||
GFile *file,
|
||||
const PikaValueArray *args,
|
||||
gpointer run_data);
|
||||
static PikaValueArray * icns_load (PikaProcedure *procedure,
|
||||
PikaRunMode run_mode,
|
||||
GFile *file,
|
||||
PikaMetadata *metadata,
|
||||
PikaMetadataLoadFlags *flags,
|
||||
PikaProcedureConfig *config,
|
||||
gpointer run_data);
|
||||
static PikaValueArray * icns_load_thumb (PikaProcedure *procedure,
|
||||
GFile *file,
|
||||
gint size,
|
||||
PikaProcedureConfig *config,
|
||||
gpointer run_data);
|
||||
static PikaValueArray * icns_save (PikaProcedure *procedure,
|
||||
PikaRunMode run_mode,
|
||||
PikaImage *image,
|
||||
gint n_drawables,
|
||||
PikaDrawable **drawables,
|
||||
GFile *file,
|
||||
PikaMetadata *metadata,
|
||||
PikaProcedureConfig *config,
|
||||
gpointer run_data);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (Icns, icns, PIKA_TYPE_PLUG_IN)
|
||||
@ -172,7 +175,7 @@ icns_create_procedure (PikaPlugIn *plug_in,
|
||||
{
|
||||
procedure = pika_save_procedure_new (plug_in, name,
|
||||
PIKA_PDB_PROC_TYPE_PLUGIN,
|
||||
icns_save, NULL, NULL);
|
||||
FALSE, icns_save, NULL, NULL);
|
||||
|
||||
pika_procedure_set_image_types (procedure, "*");
|
||||
|
||||
@ -198,11 +201,13 @@ icns_create_procedure (PikaPlugIn *plug_in,
|
||||
}
|
||||
|
||||
static PikaValueArray *
|
||||
icns_load (PikaProcedure *procedure,
|
||||
PikaRunMode run_mode,
|
||||
GFile *file,
|
||||
const PikaValueArray *args,
|
||||
gpointer run_data)
|
||||
icns_load (PikaProcedure *procedure,
|
||||
PikaRunMode run_mode,
|
||||
GFile *file,
|
||||
PikaMetadata *metadata,
|
||||
PikaMetadataLoadFlags *flags,
|
||||
PikaProcedureConfig *config,
|
||||
gpointer run_data)
|
||||
{
|
||||
PikaValueArray *return_vals;
|
||||
PikaImage *image;
|
||||
@ -227,11 +232,11 @@ icns_load (PikaProcedure *procedure,
|
||||
}
|
||||
|
||||
static PikaValueArray *
|
||||
icns_load_thumb (PikaProcedure *procedure,
|
||||
GFile *file,
|
||||
gint size,
|
||||
const PikaValueArray *args,
|
||||
gpointer run_data)
|
||||
icns_load_thumb (PikaProcedure *procedure,
|
||||
GFile *file,
|
||||
gint size,
|
||||
PikaProcedureConfig *config,
|
||||
gpointer run_data)
|
||||
{
|
||||
PikaValueArray *return_vals;
|
||||
gint width;
|
||||
@ -272,7 +277,8 @@ icns_save (PikaProcedure *procedure,
|
||||
gint n_drawables,
|
||||
PikaDrawable **drawables,
|
||||
GFile *file,
|
||||
const PikaValueArray *args,
|
||||
PikaMetadata *metadata,
|
||||
PikaProcedureConfig *config,
|
||||
gpointer run_data)
|
||||
{
|
||||
PikaPDBStatusType status;
|
||||
|
Reference in New Issue
Block a user