plug-ins: Port file-tiff-load to GimpProcedureDialog

Note that GimpPageSelector is still added
manually as there is no GimpProcedureDialog 
equivalent yet.
This commit is contained in:
Alx Sa 2024-05-31 04:34:51 +00:00
parent 583dfbd8a3
commit e9f2e9012f
3 changed files with 108 additions and 114 deletions

View File

@ -91,66 +91,67 @@ typedef enum
/* Declare some local functions */
static GimpColorProfile * load_profile (TIFF *tif);
static GimpColorProfile * load_profile (TIFF *tif);
static void load_rgba (TIFF *tif,
ChannelData *channel);
static void load_contiguous (TIFF *tif,
ChannelData *channel,
const Babl *type,
gushort bps,
gushort spp,
TiffColorMode tiff_mode,
gboolean is_signed,
gint extra);
static void load_separate (TIFF *tif,
ChannelData *channel,
const Babl *type,
gushort bps,
gushort spp,
TiffColorMode tiff_mode,
gboolean is_signed,
gint extra);
static void load_rgba (TIFF *tif,
ChannelData *channel);
static void load_contiguous (TIFF *tif,
ChannelData *channel,
const Babl *type,
gushort bps,
gushort spp,
TiffColorMode tiff_mode,
gboolean is_signed,
gint extra);
static void load_separate (TIFF *tif,
ChannelData *channel,
const Babl *type,
gushort bps,
gushort spp,
TiffColorMode tiff_mode,
gboolean is_signed,
gint extra);
static gboolean is_non_conformant_tiff (gushort photomet,
gushort spp);
static gushort get_extra_channels_count (gushort photomet,
gushort spp,
gboolean alpha);
static gboolean is_non_conformant_tiff (gushort photomet,
gushort spp);
static gushort get_extra_channels_count (gushort photomet,
gushort spp,
gboolean alpha);
static void fill_bit2byte (TiffColorMode tiff_mode);
static void fill_2bit2byte (TiffColorMode tiff_mode);
static void fill_4bit2byte (TiffColorMode tiff_mode);
static void convert_bit2byte (const guchar *src,
guchar *dest,
gint width,
gint height);
static void convert_2bit2byte (const guchar *src,
guchar *dest,
gint width,
gint height);
static void convert_4bit2byte (const guchar *src,
guchar *dest,
gint width,
gint height);
static void fill_bit2byte (TiffColorMode tiff_mode);
static void fill_2bit2byte (TiffColorMode tiff_mode);
static void fill_4bit2byte (TiffColorMode tiff_mode);
static void convert_bit2byte (const guchar *src,
guchar *dest,
gint width,
gint height);
static void convert_2bit2byte (const guchar *src,
guchar *dest,
gint width,
gint height);
static void convert_4bit2byte (const guchar *src,
guchar *dest,
gint width,
gint height);
static void convert_miniswhite (guchar *buffer,
gint width,
gint height);
static void convert_int2uint (guchar *buffer,
gint bps,
gint spp,
gint width,
gint height,
gint stride);
static void convert_miniswhite (guchar *buffer,
gint width,
gint height);
static void convert_int2uint (guchar *buffer,
gint bps,
gint spp,
gint width,
gint height,
gint stride);
static gboolean load_dialog (const gchar *help_id,
TiffSelectedPages *pages,
const gchar *extra_message,
DefaultExtra *default_extra);
static gboolean load_dialog (GimpProcedure *procedure,
GimpProcedureConfig *config,
TiffSelectedPages *pages,
const gchar *extra_message,
DefaultExtra *default_extra);
static void tiff_dialog_show_reduced (GtkWidget *toggle,
gpointer data);
static void tiff_dialog_show_reduced (GtkWidget *toggle,
gpointer data);
@ -259,7 +260,8 @@ get_extra_channels_count (gushort photomet, gushort spp, gboolean alpha)
}
GimpPDBStatusType
load_image (GFile *file,
load_image (GimpProcedure *procedure,
GFile *file,
GimpRunMode run_mode,
GimpImage **image,
gboolean *resolution_loaded,
@ -484,10 +486,10 @@ load_image (GFile *file,
pages.tif = tif;
if (run_mode == GIMP_RUN_INTERACTIVE &&
if (run_mode == GIMP_RUN_INTERACTIVE &&
(pages.n_pages > 1 || extra_message) &&
! load_dialog (LOAD_PROC, &pages,
extra_message, &default_extra))
! load_dialog (procedure, config, &pages, extra_message,
&default_extra))
{
TIFFClose (tif);
g_clear_pointer (&pages.pages, g_free);
@ -2530,47 +2532,38 @@ convert_int2uint (guchar *buffer,
}
static gboolean
load_dialog (const gchar *help_id,
TiffSelectedPages *pages,
const gchar *extra_message,
DefaultExtra *default_extra)
load_dialog (GimpProcedure *procedure,
GimpProcedureConfig *config,
TiffSelectedPages *pages,
const gchar *extra_message,
DefaultExtra *default_extra)
{
GtkWidget *dialog;
GtkWidget *vbox;
GtkWidget *show_reduced = NULL;
GtkWidget *crop_option = NULL;
GtkWidget *extra_radio = NULL;
GtkWidget *toggle = NULL;
GtkWidget *extra_radio = NULL;
gboolean run;
pages->selector = NULL;
dialog = gimp_dialog_new (_("Import from TIFF"), PLUG_IN_ROLE,
NULL, 0,
gimp_standard_help_func, help_id,
dialog = gimp_procedure_dialog_new (procedure,
GIMP_PROCEDURE_CONFIG (config),
_("Import from TIFF"));
_("_Cancel"), GTK_RESPONSE_CANCEL,
_("_Import"), GTK_RESPONSE_OK,
vbox = gimp_procedure_dialog_fill_box (GIMP_PROCEDURE_DIALOG (dialog), "tiff-vbox",
"keep-empty-space", NULL);
NULL);
gimp_procedure_dialog_fill (GIMP_PROCEDURE_DIALOG (dialog),
"tiff-vbox", NULL);
gimp_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
GTK_RESPONSE_OK,
GTK_RESPONSE_CANCEL,
-1);
gimp_window_set_transient (GTK_WINDOW (dialog));
vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 12);
gtk_container_set_border_width (GTK_CONTAINER (vbox), 12);
gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
vbox, TRUE, TRUE, 0);
show_reduced = gtk_check_button_new_with_mnemonic (_("_Show reduced images"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (show_reduced),
toggle = gtk_check_button_new_with_mnemonic (_("_Show reduced images"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (toggle),
pages->show_reduced);
gtk_box_pack_start (GTK_BOX (vbox), show_reduced, TRUE, TRUE, 0);
gtk_widget_set_margin_bottom (toggle, 6);
gtk_box_pack_start (GTK_BOX (vbox), toggle, TRUE, TRUE, 0);
gtk_widget_set_visible (toggle, TRUE);
g_signal_connect (show_reduced, "toggled",
g_signal_connect (toggle, "toggled",
G_CALLBACK (tiff_dialog_show_reduced),
pages);
@ -2580,6 +2573,7 @@ load_dialog (const gchar *help_id,
pages->selector = gimp_page_selector_new ();
gtk_widget_set_size_request (pages->selector, 300, 200);
gtk_box_pack_start (GTK_BOX (vbox), pages->selector, TRUE, TRUE, 0);
gtk_widget_set_visible (pages->selector, TRUE);
gimp_page_selector_set_n_pages (GIMP_PAGE_SELECTOR (pages->selector),
pages->n_filtered_pages);
@ -2589,20 +2583,11 @@ load_dialog (const gchar *help_id,
/* Load a set number of pages, based on whether "Show Reduced Images"
* is checked
*/
tiff_dialog_show_reduced (show_reduced, pages);
tiff_dialog_show_reduced (toggle, pages);
g_signal_connect_swapped (pages->selector, "activate",
G_CALLBACK (gtk_window_activate_default),
dialog);
/* Option to shrink the loaded image to its bounding box
or keep as much empty space as possible.
Note that there seems to be no way to keep the empty
space on the right and bottom. */
crop_option = gtk_check_button_new_with_mnemonic (_("_Keep empty space around imported layers"));
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (crop_option),
pages->keep_empty_space);
gtk_box_pack_start (GTK_BOX (vbox), crop_option, TRUE, TRUE, 0);
}
if (extra_message)
@ -2614,7 +2599,7 @@ load_dialog (const gchar *help_id,
"hint", extra_message,
NULL);
gtk_box_pack_start (GTK_BOX (vbox), warning, TRUE, TRUE, 0);
gtk_widget_show (warning);
gtk_widget_set_visible (warning, TRUE);
extra_radio = gimp_int_radio_group_new (TRUE, _("Process extra channel as:"),
(GCallback) gimp_radio_button_update,
@ -2624,19 +2609,29 @@ load_dialog (const gchar *help_id,
_("Channe_l"), GIMP_TIFF_LOAD_CHANNEL, NULL,
NULL);
gtk_box_pack_start (GTK_BOX (vbox), extra_radio, TRUE, TRUE, 0);
gtk_widget_show (extra_radio);
gtk_widget_set_visible (extra_radio, TRUE);
}
toggle = gimp_procedure_dialog_get_widget (GIMP_PROCEDURE_DIALOG (dialog),
"keep-empty-space", G_TYPE_NONE);
gtk_widget_set_margin_top (toggle, 6);
gtk_widget_set_margin_bottom (toggle, 6);
gtk_box_reorder_child (GTK_BOX (vbox), toggle, -1);
/* Setup done; display the dialog */
gtk_widget_show_all (dialog);
gtk_widget_set_visible (dialog, TRUE);
/* run the dialog */
run = (gimp_dialog_run (GIMP_DIALOG (dialog)) == GTK_RESPONSE_OK);
run = gimp_procedure_dialog_run (GIMP_PROCEDURE_DIALOG (dialog));
if (run)
{
if (pages->n_pages > 1)
{
g_object_get (config,
"keep-empty-space", &pages->keep_empty_space,
NULL);
pages->target =
gimp_page_selector_get_target (GIMP_PAGE_SELECTOR (pages->selector));
@ -2644,9 +2639,6 @@ load_dialog (const gchar *help_id,
gimp_page_selector_get_selected_pages (GIMP_PAGE_SELECTOR (pages->selector),
&pages->n_pages);
pages->keep_empty_space =
gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (crop_option));
/* select all if none selected */
if (pages->n_pages == 0)
{

View File

@ -46,7 +46,8 @@ typedef struct
} TiffSelectedPages;
GimpPDBStatusType load_image (GFile *file,
GimpPDBStatusType load_image (GimpProcedure *procedure,
GFile *file,
GimpRunMode run_mode,
GimpImage **image,
gboolean *resolution_loaded,

View File

@ -158,9 +158,9 @@ tiff_create_procedure (GimpPlugIn *plug_in,
gimp_procedure_set_menu_label (procedure, _("TIFF or BigTIFF image"));
gimp_procedure_set_documentation (procedure,
"Loads files of the TIFF and BigTIFF file formats",
"Loads files of the Tag Image File Format (TIFF) and "
"its 64-bit offsets variant (BigTIFF)",
_("Loads files of the TIFF and BigTIFF file formats"),
_("Loads files of the Tag Image File Format (TIFF) and "
"its 64-bit offsets variant (BigTIFF)"),
name);
gimp_procedure_set_attribution (procedure,
"Spencer Kimball, Peter Mattis & Nick Lamb",
@ -204,10 +204,10 @@ tiff_create_procedure (GimpPlugIn *plug_in,
gimp_procedure_set_menu_label (procedure, _("TIFF or BigTIFF image"));
gimp_procedure_set_documentation (procedure,
"Exports files in the TIFF or BigTIFF file formats",
"Exports files in the Tag Image File Format (TIFF) or "
"its 64-bit offsets variant (BigTIFF) able to support "
"much bigger file sizes",
_("Exports files in the TIFF or BigTIFF file formats"),
_("Exports files in the Tag Image File Format (TIFF) or "
"its 64-bit offsets variant (BigTIFF) able to support "
"much bigger file sizes"),
name);
gimp_procedure_set_attribution (procedure,
"Spencer Kimball & Peter Mattis",
@ -309,7 +309,8 @@ tiff_load (GimpProcedure *procedure,
if (run_mode == GIMP_RUN_INTERACTIVE)
gimp_ui_init (PLUG_IN_BINARY);
status = load_image (file, run_mode, &image,
status = load_image (procedure,
file, run_mode, &image,
&resolution_loaded,
&profile_loaded,
&ps_metadata_loaded,
@ -473,7 +474,7 @@ tiff_export_rec (GimpProcedure *procedure,
tiff_reset_file_size_error ();
g_clear_error (error);
return tiff_export_rec (procedure, run_mode, orig_image,
return tiff_export_rec (procedure, run_mode, orig_image,
file, config, metadata, TRUE, error);
}