From d472f6348dbe3b70c5cdae1e806dd8d870003964 Mon Sep 17 00:00:00 2001 From: Cassowary Date: Sat, 2 Dec 2023 11:03:24 -0800 Subject: [PATCH] Update upstream --- app/actions/edit-actions.c | 18 +- app/actions/layers-actions.c | 2 +- app/actions/select-actions.c | 24 +- app/actions/select-commands.c | 71 +- app/actions/select-commands.h | 5 +- app/config/pikacoreconfig.c | 14 + app/config/pikacoreconfig.h | 1 + app/config/pikarc-blurbs.h | 3 + app/core/core-enums.h | 5 +- app/core/pika-user-install.c | 3 + app/core/pikabrush.c | 71 +- app/core/pikachannel.c | 2 +- app/core/pikadrawable-private.h | 2 + app/core/pikadrawable.c | 27 +- app/core/pikadrawable.h | 3 + app/core/pikapalette-load.c | 24 +- app/dialogs/about-dialog.c | 75 +- app/dialogs/about-dialog.h | 3 +- app/dialogs/dialogs-constructors.c | 2 +- app/dialogs/preferences-dialog.c | 3 + app/display/pikadisplay-handlers.c | 25 + app/gegl/pika-gegl-utils.c | 100 + app/gegl/pika-gegl-utils.h | 9 + app/paint/paint-enums.h | 7 + app/paint/pikabrushcore.c | 26 +- app/paint/pikaink-blob.c | 15 + app/paint/pikaink-blob.h | 3 + app/paint/pikaink.c | 52 +- app/paint/pikaink.h | 7 +- app/paint/pikamybrushcore.c | 51 +- app/paint/pikamybrushsurface.c | 53 +- app/paint/pikamybrushsurface.h | 13 + app/paint/pikapaintbrush.c | 6 +- app/paint/pikapaintcore.c | 493 +- app/paint/pikapaintcore.h | 15 + app/paint/pikapaintoptions.c | 92 +- app/paint/pikapaintoptions.h | 5 + app/paint/pikasmudge.c | 1 + app/paint/pikasourcecore.c | 1 + app/pdb/image-cmds.c | 2 +- app/pdb/vectors-cmds.c | 18 +- app/pika-update.c | 2 +- app/tools/pika-tool-options-manager.c | 11 + app/tools/pikaairbrushtool.c | 2 + app/tools/pikaclonetool.c | 1 + app/tools/pikaconvolvetool.c | 4 +- app/tools/pikahealtool.c | 4 +- app/tools/pikainkoptions-gui.c | 23 + app/tools/pikainktool.c | 4 +- app/tools/pikamybrushoptions-gui.c | 26 + app/tools/pikamybrushtool.c | 4 +- app/tools/pikapaintbrushtool.c | 4 +- app/tools/pikapaintoptions-gui.c | 51 + app/tools/pikapainttool-paint.c | 24 + app/tools/pikapenciltool.c | 2 + app/tools/pikasmudgetool.c | 2 + app/vectors/pikavectors-export.c | 36 +- app/widgets/pikaaction.c | 49 +- app/widgets/pikacontainertreeview.c | 67 +- app/widgets/pikaimageeditor.c | 15 + app/widgets/pikalayertreeview.c | 2 + .../technology.heckin.PIKA-nightly.json | 31 +- .../windows/gitlab-ci/installer-pika-msys2.sh | 5 +- build/windows/gitlab-ci/package-pika-msys2.sh | 3 + build/windows/installer/associations.list | 1 + build/windows/installer/pika3264.iss | 2 +- .../technology.heckin.PIKA.appdata.xml.in.in | 26 + libpika/pika_pdb_headers.h | 2 +- libpika/pikavectors_pdb.c | 14 +- libpikaconfig/pikaconfig-params.c | 1 + libpikawidgets/pikadialog.c | 6 +- menus/image-menu.ui.in.in | 20 +- menus/selection-menu.ui | 5 +- pdb/groups/vectors.pdb | 54 +- plug-ins/common/file-gif-load.c | 36 +- plug-ins/common/file-gif-save.c | 29 + plug-ins/common/file-heif.c | 245 +- plug-ins/common/file-iff.c | 50 +- plug-ins/common/file-jpegxl.c | 326 +- plug-ins/common/file-pdf-save.c | 21 +- plug-ins/common/file-png.c | 97 + plug-ins/common/file-pnm.c | 2 +- plug-ins/common/van-gogh-lic.c | 2 +- plug-ins/file-bmp/bmp-load.c | 1 + plug-ins/file-dds/dds.c | 203 +- plug-ins/file-dds/dds.h | 102 +- plug-ins/file-dds/ddsread.c | 1721 ++++--- plug-ins/file-dds/ddsread.h | 12 +- plug-ins/file-dds/ddswrite.c | 533 +- plug-ins/file-dds/dxt.c | 212 +- plug-ins/file-dds/meson.build | 1 - plug-ins/file-dds/mipmap.c | 806 +-- plug-ins/file-dds/mipmap.h | 99 +- plug-ins/file-dds/misc.c | 419 +- plug-ins/file-dds/misc.h | 27 +- plug-ins/imagemap/imap_edit_area_info.c | 33 + plug-ins/metadata/metadata-editor.c | 30 +- plug-ins/metadata/metadata-viewer.c | 30 +- .../script-fu/libscriptfu/scheme-marshal.c | 8 +- .../libscriptfu/script-fu-interface.c | 6 +- po-libpika/ca.po | 2 +- po-libpika/da.po | 4 +- po-libpika/es.po | 350 +- po-libpika/sv.po | 136 +- po-plug-ins/es.po | 2747 ++++++----- po-plug-ins/ka.po | 1106 ++--- po-plug-ins/sl.po | 1180 +++-- po-plug-ins/uk.po | 1161 ++--- po-plug-ins/zh_CN.po | 2094 ++++---- po-script-fu/da.po | 4 +- po/be.po | 4303 +++++++++-------- po/ca.po | 3126 ++++++------ po/es.po | 1474 +++--- po/ka.po | 1636 ++++--- po/pt_BR.po | 307 +- po/sl.po | 1634 ++++--- po/tr.po | 320 +- po/uk.po | 1655 ++++--- po/zh_CN.po | 1640 ++++--- themes/Darker/pika-dark.css | 3 + themes/Darker/pika.css | 3 + themes/Default/common-dark.css | 4 + themes/Default/common-light.css | 5 + themes/Default/common.css | 84 +- themes/Default/pika-dark.css | 3 + themes/Default/pika.css | 3 + themes/Gray/pika.css | 1 + upstream-documentation/NEWS | 59 +- upstream-documentation/README.upstream | 26 +- 129 files changed, 17814 insertions(+), 14162 deletions(-) diff --git a/app/actions/edit-actions.c b/app/actions/edit-actions.c index 43fa20b..954e22e 100644 --- a/app/actions/edit-actions.c +++ b/app/actions/edit-actions.c @@ -184,19 +184,31 @@ static const PikaEnumActionEntry edit_paste_actions[] = PIKA_HELP_EDIT_PASTE_IN_PLACE }, { "edit-paste-into", PIKA_ICON_EDIT_PASTE_INTO, - NC_("edit-action", "Paste _Into Selection"), NULL, { NULL }, + NC_("edit-action", "Paste as Floating Data _Into Selection"), NULL, { NULL }, NC_("edit-action", "Paste the content of the clipboard into the current selection"), PIKA_PASTE_TYPE_FLOATING_INTO, FALSE, PIKA_HELP_EDIT_PASTE_INTO }, { "edit-paste-into-in-place", PIKA_ICON_EDIT_PASTE_INTO, - NC_("edit-action", "Paste Int_o Selection In Place"), NULL, { NULL }, + NC_("edit-action", "Paste as Floating Data Int_o Selection In Place"), NULL, { NULL }, NC_("edit-action", "Paste the content of the clipboard into the current selection " "at its original position"), PIKA_PASTE_TYPE_FLOATING_INTO_IN_PLACE, FALSE, - PIKA_HELP_EDIT_PASTE_INTO_IN_PLACE } + PIKA_HELP_EDIT_PASTE_INTO_IN_PLACE }, + + { "edit-paste-float", PIKA_ICON_EDIT_PASTE, + NC_("edit-action", "Paste as _Floating Data"), NULL, { NULL }, + NC_("edit-action", "Paste the content of the clipboard as Floating Data"), + PIKA_PASTE_TYPE_FLOATING, FALSE, + PIKA_HELP_EDIT_PASTE }, + + { "edit-paste-float-in-place", PIKA_ICON_EDIT_PASTE, + NC_("edit-action", "Paste as Floa_ting Data In Place"), NULL, { NULL }, + NC_("edit-action", "Paste the content of the clipboard as Floating Data at its original position"), + PIKA_PASTE_TYPE_FLOATING_IN_PLACE, FALSE, + PIKA_HELP_EDIT_PASTE } }; static const PikaEnumActionEntry edit_fill_actions[] = diff --git a/app/actions/layers-actions.c b/app/actions/layers-actions.c index 1cc7d27..0b9638e 100644 --- a/app/actions/layers-actions.c +++ b/app/actions/layers-actions.c @@ -972,7 +972,7 @@ layers_actions_update (PikaActionGroup *group, SET_SENSITIVE ("layers-new", image); SET_SENSITIVE ("layers-new-last-values", image); SET_SENSITIVE ("layers-new-from-visible", image); - SET_SENSITIVE ("layers-new-group", image && !indexed); + SET_SENSITIVE ("layers-new-group", image && !indexed && !fs); SET_SENSITIVE ("layers-duplicate", n_selected_layers > 0 && !fs && !ac); SET_SENSITIVE ("layers-delete", n_selected_layers > 0 && !ac); diff --git a/app/actions/select-actions.c b/app/actions/select-actions.c index 72b2da4..809e566 100644 --- a/app/actions/select-actions.c +++ b/app/actions/select-actions.c @@ -62,10 +62,16 @@ static const PikaActionEntry select_actions[] = select_invert_cmd_callback, PIKA_HELP_SELECTION_INVERT }, - { "select-float", PIKA_ICON_LAYER_FLOATING_SELECTION, - NC_("select-action", "_Float"), NULL, { "L", NULL }, - NC_("select-action", "Create a floating selection"), - select_float_cmd_callback, + { "select-cut-float", PIKA_ICON_LAYER_FLOATING_SELECTION, + NC_("select-action", "Cu_t and Float"), NULL, { "L", NULL }, + NC_("select-action", "Cut the selection directly into a floating selection"), + select_cut_float_cmd_callback, + PIKA_HELP_SELECTION_FLOAT }, + + { "select-copy-float", PIKA_ICON_LAYER_FLOATING_SELECTION, + NC_("select-action", "_Copy and Float"), NULL, { NULL }, + NC_("select-action", "Copy the selection directly into a floating selection"), + select_copy_float_cmd_callback, PIKA_HELP_SELECTION_FLOAT }, { "select-feather", NULL, @@ -186,9 +192,13 @@ select_actions_update (PikaActionGroup *group, SET_SENSITIVE ("select-all", image && ! sel_all); SET_SENSITIVE ("select-none", image && sel); SET_SENSITIVE ("select-invert", image); - SET_SENSITIVE ("select-float", g_list_length (drawables) == 1 && sel && - ! pika_item_is_content_locked (drawables->data, NULL) && - ! pika_viewable_get_children (drawables->data)); + + SET_SENSITIVE ("select-cut-float", g_list_length (drawables) == 1 && sel && + ! pika_item_is_content_locked (drawables->data, NULL) && + ! pika_viewable_get_children (drawables->data)); + SET_SENSITIVE ("select-copy-float", g_list_length (drawables) == 1 && sel && + ! pika_item_is_content_locked (drawables->data, NULL) && + ! pika_viewable_get_children (drawables->data)); SET_SENSITIVE ("select-feather", image && sel); SET_SENSITIVE ("select-sharpen", image && sel); diff --git a/app/actions/select-commands.c b/app/actions/select-commands.c index c6a736f..4be28b0 100644 --- a/app/actions/select-commands.c +++ b/app/actions/select-commands.c @@ -71,6 +71,10 @@ static void select_shrink_callback (GtkWidget *widget, gdouble size, PikaUnit unit, gpointer data); +static void select_float (PikaAction *action, + GVariant *value, + gboolean cut, + gpointer data); /* public functions */ @@ -112,33 +116,19 @@ select_invert_cmd_callback (PikaAction *action, } void -select_float_cmd_callback (PikaAction *action, - GVariant *value, - gpointer data) +select_cut_float_cmd_callback (PikaAction *action, + GVariant *value, + gpointer data) { - PikaImage *image; - GtkWidget *widget; - GList *drawables; - GError *error = NULL; - return_if_no_image (image, data); - return_if_no_widget (widget, data); + select_float (action, value, TRUE, data); +} - drawables = pika_image_get_selected_drawables (image); - if (pika_selection_float (PIKA_SELECTION (pika_image_get_mask (image)), - drawables, - action_data_get_context (data), - TRUE, 0, 0, &error)) - { - pika_image_flush (image); - } - else - { - pika_message_literal (image->pika, - G_OBJECT (widget), PIKA_MESSAGE_WARNING, - error->message); - g_clear_error (&error); - } - g_list_free (drawables); +void +select_copy_float_cmd_callback (PikaAction *action, + GVariant *value, + gpointer data) +{ + select_float (action, value, FALSE, data); } void @@ -696,3 +686,34 @@ select_shrink_callback (GtkWidget *widget, TRUE); pika_image_flush (image); } + +static void +select_float (PikaAction *action, + GVariant *value, + gboolean cut, + gpointer data) +{ + PikaImage *image; + GtkWidget *widget; + GList *drawables; + GError *error = NULL; + return_if_no_image (image, data); + return_if_no_widget (widget, data); + + drawables = pika_image_get_selected_drawables (image); + if (pika_selection_float (PIKA_SELECTION (pika_image_get_mask (image)), + drawables, + action_data_get_context (data), + cut, 0, 0, &error)) + { + pika_image_flush (image); + } + else + { + pika_message_literal (image->pika, + G_OBJECT (widget), PIKA_MESSAGE_WARNING, + error->message); + g_clear_error (&error); + } + g_list_free (drawables); +} diff --git a/app/actions/select-commands.h b/app/actions/select-commands.h index 9331bc7..5b253b0 100644 --- a/app/actions/select-commands.h +++ b/app/actions/select-commands.h @@ -32,7 +32,10 @@ void select_none_cmd_callback (PikaAction *action, void select_invert_cmd_callback (PikaAction *action, GVariant *value, gpointer data); -void select_float_cmd_callback (PikaAction *action, +void select_cut_float_cmd_callback (PikaAction *action, + GVariant *value, + gpointer data); +void select_copy_float_cmd_callback (PikaAction *action, GVariant *value, gpointer data); void select_feather_cmd_callback (PikaAction *action, diff --git a/app/config/pikacoreconfig.c b/app/config/pikacoreconfig.c index be778b5..f70232d 100644 --- a/app/config/pikacoreconfig.c +++ b/app/config/pikacoreconfig.c @@ -98,6 +98,7 @@ enum PROP_GLOBAL_PALETTE, PROP_GLOBAL_GRADIENT, PROP_GLOBAL_FONT, + PROP_GLOBAL_EXPAND, PROP_DEFAULT_IMAGE, PROP_DEFAULT_GRID, PROP_UNDO_LEVELS, @@ -540,6 +541,13 @@ pika_core_config_class_init (PikaCoreConfigClass *klass) TRUE, PIKA_PARAM_STATIC_STRINGS); + PIKA_CONFIG_PROP_BOOLEAN (object_class, PROP_GLOBAL_EXPAND, + "global-expand", + "Global expand", + GLOBAL_EXPAND_BLURB, + TRUE, + PIKA_PARAM_STATIC_STRINGS); + PIKA_CONFIG_PROP_OBJECT (object_class, PROP_DEFAULT_IMAGE, "default-image", "Default image", @@ -1061,6 +1069,9 @@ pika_core_config_set_property (GObject *object, case PROP_GLOBAL_FONT: core_config->global_font = g_value_get_boolean (value); break; + case PROP_GLOBAL_EXPAND: + core_config->global_expand = g_value_get_boolean (value); + break; case PROP_DEFAULT_IMAGE: if (g_value_get_object (value)) pika_config_sync (g_value_get_object (value) , @@ -1337,6 +1348,9 @@ pika_core_config_get_property (GObject *object, case PROP_GLOBAL_FONT: g_value_set_boolean (value, core_config->global_font); break; + case PROP_GLOBAL_EXPAND: + g_value_set_boolean (value, core_config->global_expand); + break; case PROP_DEFAULT_IMAGE: g_value_set_object (value, core_config->default_image); break; diff --git a/app/config/pikacoreconfig.h b/app/config/pikacoreconfig.h index d1a6251..e4a6d01 100644 --- a/app/config/pikacoreconfig.h +++ b/app/config/pikacoreconfig.h @@ -82,6 +82,7 @@ struct _PikaCoreConfig gboolean global_palette; gboolean global_gradient; gboolean global_font; + gboolean global_expand; PikaTemplate *default_image; PikaGrid *default_grid; gint levels_of_undo; diff --git a/app/config/pikarc-blurbs.h b/app/config/pikarc-blurbs.h index 340686f..df442a3 100644 --- a/app/config/pikarc-blurbs.h +++ b/app/config/pikarc-blurbs.h @@ -181,6 +181,9 @@ _("When enabled, the selected pattern will be used for all tools.") #define GLOBAL_PALETTE_BLURB \ "When enabled, the selected palette will be used for all tools." +#define GLOBAL_EXPAND_BLURB \ +"When enabled, the selected auto expand layer settings will be used for all tools." + #define GRADIENT_PATH_BLURB \ "Sets the gradient search path." diff --git a/app/core/core-enums.h b/app/core/core-enums.h index 376aac9..ceab85d 100644 --- a/app/core/core-enums.h +++ b/app/core/core-enums.h @@ -715,6 +715,7 @@ typedef enum /*< pdb-skip, skip >*/ PIKA_CONTEXT_PROP_BUFFER = 18, PIKA_CONTEXT_PROP_IMAGEFILE = 19, PIKA_CONTEXT_PROP_TEMPLATE = 20, + PIKA_CONTEXT_PROP_EXPAND = 21, PIKA_CONTEXT_PROP_LAST = PIKA_CONTEXT_PROP_TEMPLATE } PikaContextPropType; @@ -741,6 +742,7 @@ typedef enum /*< pdb-skip, skip >*/ PIKA_CONTEXT_PROP_MASK_BUFFER = 1 << 18, PIKA_CONTEXT_PROP_MASK_IMAGEFILE = 1 << 19, PIKA_CONTEXT_PROP_MASK_TEMPLATE = 1 << 20, + PIKA_CONTEXT_PROP_MASK_EXPAND = 1 << 21, /* aliases */ PIKA_CONTEXT_PROP_MASK_PAINT = (PIKA_CONTEXT_PROP_MASK_FOREGROUND | @@ -750,7 +752,8 @@ typedef enum /*< pdb-skip, skip >*/ PIKA_CONTEXT_PROP_MASK_BRUSH | PIKA_CONTEXT_PROP_MASK_DYNAMICS | PIKA_CONTEXT_PROP_MASK_PATTERN | - PIKA_CONTEXT_PROP_MASK_GRADIENT), + PIKA_CONTEXT_PROP_MASK_GRADIENT | + PIKA_CONTEXT_PROP_MASK_EXPAND), PIKA_CONTEXT_PROP_MASK_ALL = (PIKA_CONTEXT_PROP_MASK_IMAGE | PIKA_CONTEXT_PROP_MASK_DISPLAY | diff --git a/app/core/pika-user-install.c b/app/core/pika-user-install.c index b0c1656..46d0e50 100644 --- a/app/core/pika-user-install.c +++ b/app/core/pika-user-install.c @@ -557,6 +557,9 @@ user_update_menurc_over20 (const GMatchInfo *matched_value, else if (g_strcmp0 (action_match, "view-rotate-reset") == 0 && install->old_major == 2) new_action_name = g_strdup ("view-reset"); + /* select-float became select-cut-float in 3.0 (select-copy-float added). */ + else if (g_strcmp0 (action_match, "select-float") == 0) + new_action_name = g_strdup ("select-cut-float"); if (new_action_name == NULL) new_action_name = g_strdup (action_match); diff --git a/app/core/pikabrush.c b/app/core/pikabrush.c index f7f3c4d..040444e 100644 --- a/app/core/pikabrush.c +++ b/app/core/pikabrush.c @@ -286,7 +286,8 @@ pika_brush_get_new_preview (PikaViewable *viewable, guchar *mask; guchar *buf; gint x, y; - gboolean scaled = FALSE; + gboolean free_mask = FALSE; + gdouble scale = 1.0; mask_width = pika_temp_buf_get_width (mask_buf); mask_height = pika_temp_buf_get_height (mask_buf); @@ -295,45 +296,47 @@ pika_brush_get_new_preview (PikaViewable *viewable, { gdouble ratio_x = (gdouble) width / (gdouble) mask_width; gdouble ratio_y = (gdouble) height / (gdouble) mask_height; - gdouble scale = MIN (ratio_x, ratio_y); - if (scale != 1.0) + scale = MIN (ratio_x, ratio_y); + } + + if (PIKA_IS_BRUSH_GENERATED (brush) || scale != 1.0) + { + pika_brush_begin_use (brush); + + if (PIKA_IS_BRUSH_GENERATED (brush)) { - pika_brush_begin_use (brush); + PikaBrushGenerated *gen_brush = PIKA_BRUSH_GENERATED (brush); - if (PIKA_IS_BRUSH_GENERATED (brush)) - { - PikaBrushGenerated *gen_brush = PIKA_BRUSH_GENERATED (brush); + mask_buf = pika_brush_transform_mask (brush, scale, + (pika_brush_generated_get_aspect_ratio (gen_brush) - 1.0) * 20.0 / 19.0, + pika_brush_generated_get_angle (gen_brush) / -360.0, + FALSE, + pika_brush_generated_get_hardness (gen_brush)); + } + else + { + mask_buf = pika_brush_transform_mask (brush, scale, 0.0, 0.0, FALSE, 1.0); + } - mask_buf = pika_brush_transform_mask (brush, scale, - (pika_brush_generated_get_aspect_ratio (gen_brush) - 1.0) * 20.0 / 19.0, - pika_brush_generated_get_angle (gen_brush) / 360.0, - FALSE, - pika_brush_generated_get_hardness (gen_brush)); - } - else - mask_buf = pika_brush_transform_mask (brush, scale, + if (! mask_buf) + { + mask_buf = pika_temp_buf_new (1, 1, babl_format ("Y u8")); + pika_temp_buf_data_clear ((PikaTempBuf *) mask_buf); + } + else + { + pika_temp_buf_ref ((PikaTempBuf *) mask_buf); + } + + if (pixmap_buf) + pixmap_buf = pika_brush_transform_pixmap (brush, scale, 0.0, 0.0, FALSE, 1.0); - if (! mask_buf) - { - mask_buf = pika_temp_buf_new (1, 1, babl_format ("Y u8")); - pika_temp_buf_data_clear ((PikaTempBuf *) mask_buf); - } - else - { - pika_temp_buf_ref ((PikaTempBuf *) mask_buf); - } + mask_width = pika_temp_buf_get_width (mask_buf); + mask_height = pika_temp_buf_get_height (mask_buf); - if (pixmap_buf) - pixmap_buf = pika_brush_transform_pixmap (brush, scale, - 0.0, 0.0, FALSE, 1.0); - - mask_width = pika_temp_buf_get_width (mask_buf); - mask_height = pika_temp_buf_get_height (mask_buf); - - scaled = TRUE; - } + free_mask = TRUE; } return_buf = pika_temp_buf_new (mask_width, mask_height, @@ -381,7 +384,7 @@ pika_brush_get_new_preview (PikaViewable *viewable, pika_temp_buf_unlock (mask_buf, mask_data); - if (scaled) + if (free_mask) { pika_temp_buf_unref ((PikaTempBuf *) mask_buf); diff --git a/app/core/pikachannel.c b/app/core/pikachannel.c index 196a09f..ecec3b2 100644 --- a/app/core/pikachannel.c +++ b/app/core/pikachannel.c @@ -747,7 +747,7 @@ pika_channel_resize (PikaItem *item, gint offset_x, gint offset_y) { - PIKA_ITEM_CLASS (parent_class)->resize (item, context, PIKA_FILL_TRANSPARENT, + PIKA_ITEM_CLASS (parent_class)->resize (item, context, fill_type, new_width, new_height, offset_x, offset_y); diff --git a/app/core/pikadrawable-private.h b/app/core/pikadrawable-private.h index a0c9eb0..cc91933 100644 --- a/app/core/pikadrawable-private.h +++ b/app/core/pikadrawable-private.h @@ -45,6 +45,8 @@ struct _PikaDrawablePrivate GeglBuffer *paint_buffer; cairo_region_t *paint_copy_region; cairo_region_t *paint_update_region; + + gboolean push_resize_undo; }; #endif /* __PIKA_DRAWABLE_PRIVATE_H__ */ diff --git a/app/core/pikadrawable.c b/app/core/pikadrawable.c index 79a4767..4f23c97 100644 --- a/app/core/pikadrawable.c +++ b/app/core/pikadrawable.c @@ -632,7 +632,10 @@ pika_drawable_resize (PikaItem *item, copy_y - new_offset_y, 0, 0)); } - pika_drawable_set_buffer_full (drawable, pika_item_is_attached (item), NULL, + pika_drawable_set_buffer_full (drawable, + pika_item_is_attached (item) && + drawable->private->push_resize_undo, + NULL, new_buffer, GEGL_RECTANGLE (new_offset_x, new_offset_y, 0, 0), @@ -910,6 +913,10 @@ pika_drawable_real_set_buffer (PikaDrawable *drawable, } g_set_object (&drawable->private->buffer, buffer); + + if (pika_drawable_is_painting (drawable)) + g_set_object (&drawable->private->paint_buffer, buffer); + g_clear_object (&drawable->private->format_profile); if (drawable->private->buffer_source_node) @@ -1076,6 +1083,8 @@ pika_drawable_new (GType type, pika_drawable_set_buffer (drawable, FALSE, NULL, buffer); g_object_unref (buffer); + pika_drawable_enable_resize_undo (drawable); + return drawable; } @@ -1676,6 +1685,22 @@ pika_drawable_push_undo (PikaDrawable *drawable, x, y, width, height); } +void +pika_drawable_disable_resize_undo (PikaDrawable *drawable) +{ + g_return_if_fail (PIKA_IS_DRAWABLE (drawable)); + + drawable->private->push_resize_undo = FALSE; +} + +void +pika_drawable_enable_resize_undo (PikaDrawable *drawable) +{ + g_return_if_fail (PIKA_IS_DRAWABLE (drawable)); + + drawable->private->push_resize_undo = TRUE; +} + const Babl * pika_drawable_get_space (PikaDrawable *drawable) { diff --git a/app/core/pikadrawable.h b/app/core/pikadrawable.h index d533a22..71e14d9 100644 --- a/app/core/pikadrawable.h +++ b/app/core/pikadrawable.h @@ -209,6 +209,9 @@ void pika_drawable_push_undo (PikaDrawable *drawable, gint width, gint height); +void pika_drawable_disable_resize_undo (PikaDrawable *drawable); +void pika_drawable_enable_resize_undo (PikaDrawable *drawable); + const Babl * pika_drawable_get_space (PikaDrawable *drawable); const Babl * pika_drawable_get_format (PikaDrawable *drawable); const Babl * pika_drawable_get_format_with_alpha(PikaDrawable *drawable); diff --git a/app/core/pikapalette-load.c b/app/core/pikapalette-load.c index 836a902..14189f2 100644 --- a/app/core/pikapalette-load.c +++ b/app/core/pikapalette-load.c @@ -1083,9 +1083,6 @@ pika_palette_load_ase (PikaContext *context, } g_free (palette_name); - /* Header blocks are considered a "color" so we offset the count here */ - num_cols -= 1; - for (i = 0; i < num_cols; i++) { gchar color_space[4]; @@ -1108,6 +1105,23 @@ pika_palette_load_ase (PikaContext *context, } skip_first = FALSE; + /* Skip group marker padding */ + group = GINT16_FROM_BE (group); + if (group < 0) + { + gchar marker[4]; + + if (! g_input_stream_read_all (input, &marker, sizeof (marker), + &bytes_read, NULL, error)) + { + g_printerr ("Invalid ASE group marker: %s.", + pika_file_get_utf8_name (file)); + break; + } + num_cols--; + continue; + } + color_name = pika_palette_load_ase_block_name (input, file_size, error); if (! color_name) break; @@ -1148,7 +1162,7 @@ pika_palette_load_ase (PikaContext *context, for (gint j = 0; j < components; j++) { - gint tmp; + gint32 tmp; if (! g_input_stream_read_all (input, &tmp, sizeof (tmp), &bytes_read, NULL, error)) @@ -1162,7 +1176,7 @@ pika_palette_load_ase (PikaContext *context, /* Convert 4 bytes to a 32bit float value */ tmp = GINT32_FROM_BE (tmp); - pixels[j] = *(gfloat *) &tmp; + memcpy (&pixels[j], &tmp, 4); } if (! valid_color) diff --git a/app/dialogs/about-dialog.c b/app/dialogs/about-dialog.c index e2623ab..68b4af0 100644 --- a/app/dialogs/about-dialog.c +++ b/app/dialogs/about-dialog.c @@ -2,7 +2,7 @@ * a rebranding of The GNU Image Manipulation Program (created with heckimp) * A derived work which may be trivial. However, any changes may be (C)2023 by Aldercone Studio * - * Original copyright, applying to most contents (license remains unchanged): + * Original copyright, applying to most contents (license remains unchanged): * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software: you can redistribute it and/or modify @@ -34,6 +34,8 @@ #include "config/pikacoreconfig.h" +#include "widgets/pikawidgets-utils.h" + #include "about.h" #include "git-version.h" @@ -45,22 +47,34 @@ #include "pika-intl.h" +/* The first authors are the creators and maintainers, don't shuffle + * them + */ +#define START_INDEX (G_N_ELEMENTS (creators) - 1 /*NULL*/ + \ + G_N_ELEMENTS (maintainers) - 1 /*NULL*/) + + typedef struct { - GtkWidget *dialog; + GtkWidget *dialog; + + Pika *pika; GtkWidget *update_frame; PikaCoreConfig *config; - GtkWidget *anim_area; - PangoLayout *layout; + GtkWidget *anim_area; + PangoLayout *layout; - guint timer; + gint n_authors; + gint shuffle[G_N_ELEMENTS (authors) - 1]; /* NULL terminated */ - gint index; - gint animstep; - gint state; - gboolean visible; + guint timer; + + gint index; + gint animstep; + gint state; + gboolean visible; } PikaAboutDialog; @@ -93,7 +107,8 @@ static void about_dialog_download_clicked const gchar *link); GtkWidget * -about_dialog_create (PikaCoreConfig *config) +about_dialog_create (Pika *pika, + PikaCoreConfig *config) { static PikaAboutDialog dialog; @@ -106,6 +121,8 @@ about_dialog_create (PikaCoreConfig *config) gchar *copyright; gchar *version; + dialog.pika = pika; + dialog.n_authors = G_N_ELEMENTS (authors) - 1; dialog.config = config; pixbuf = about_dialog_load_logo (); @@ -134,6 +151,9 @@ about_dialog_create (PikaCoreConfig *config) "logo", pixbuf, "website", "https://heckin.technology/AlderconeStudio/PIKApp/", "website-label", _("Visit the PIKA website"), + "authors", authors, + "artists", artists, + "documenters", documenters, /* Translators: insert your names here, separated by newline */ "translator-credits", _("translator-credits"), @@ -196,6 +216,10 @@ about_dialog_map (GtkWidget *widget, dialog->timer = g_timeout_add (800, about_dialog_timer, dialog); } + +#ifdef G_OS_WIN32 + pika_window_set_title_bar_theme (dialog->pika, widget, FALSE); +#endif } static void @@ -466,6 +490,27 @@ about_dialog_add_update (PikaAboutDialog *dialog, static void about_dialog_reshuffle (PikaAboutDialog *dialog) { + GRand *gr = g_rand_new (); + gint i; + + for (i = 0; i < dialog->n_authors; i++) + dialog->shuffle[i] = i; + + for (i = START_INDEX; i < dialog->n_authors; i++) + { + gint j = g_rand_int_range (gr, START_INDEX, dialog->n_authors); + + if (i != j) + { + gint t; + + t = dialog->shuffle[j]; + dialog->shuffle[j] = dialog->shuffle[i]; + dialog->shuffle[i] = t; + } + } + + g_rand_free (gr); } static gboolean @@ -642,11 +687,17 @@ about_dialog_timer (gpointer data) return FALSE; case 1: - text = insert_spacers (_("PIKA is brought to you by Aldercone Studio")); + text = insert_spacers (_("PIKA is brought to you by")); + dialog->state += 1; break; case 2: - return FALSE; + if (! (dialog->index < dialog->n_authors)) + dialog->index = 0; + + text = insert_spacers (authors[dialog->shuffle[dialog->index]]); + dialog->index += 1; + break; default: g_return_val_if_reached (TRUE); diff --git a/app/dialogs/about-dialog.h b/app/dialogs/about-dialog.h index 604f612..309d7c9 100644 --- a/app/dialogs/about-dialog.h +++ b/app/dialogs/about-dialog.h @@ -23,7 +23,8 @@ #define __ABOUT_DIALOG_H__ -GtkWidget * about_dialog_create (PikaCoreConfig *config); +GtkWidget * about_dialog_create (Pika *pika, + PikaCoreConfig *config); #endif /* __ABOUT_DIALOG_H__ */ diff --git a/app/dialogs/dialogs-constructors.c b/app/dialogs/dialogs-constructors.c index 881fc17..d7eadbc 100644 --- a/app/dialogs/dialogs-constructors.c +++ b/app/dialogs/dialogs-constructors.c @@ -221,7 +221,7 @@ dialogs_about_get (PikaDialogFactory *factory, PikaUIManager *ui_manager, gint view_size) { - return about_dialog_create (context->pika); + return about_dialog_create (context->pika, context->pika->edit_config); } GtkWidget * diff --git a/app/dialogs/preferences-dialog.c b/app/dialogs/preferences-dialog.c index 6fd5da0..8e511c2 100644 --- a/app/dialogs/preferences-dialog.c +++ b/app/dialogs/preferences-dialog.c @@ -1856,6 +1856,9 @@ prefs_dialog_new (Pika *pika, prefs_check_button_add_with_icon (object, "global-gradient", _("_Gradient"), PIKA_ICON_GRADIENT, GTK_BOX (vbox2), size_group); + prefs_check_button_add_with_icon (object, "global-expand", + _("E_xpand Layers"), PIKA_ICON_TOOL_SCALE, + GTK_BOX (vbox2), size_group); /* Move Tool */ vbox2 = prefs_frame_new (_("Move Tool"), diff --git a/app/display/pikadisplay-handlers.c b/app/display/pikadisplay-handlers.c index e1f69c7..5487be6 100644 --- a/app/display/pikadisplay-handlers.c +++ b/app/display/pikadisplay-handlers.c @@ -46,6 +46,11 @@ static void pika_display_bounds_changed_handler (PikaImage *image, gint old_x, gint old_y, PikaDisplay *display); +static void pika_display_flush_handler (PikaImage *image, + gboolean invalidate_preview, + PikaDisplay *display); +static gboolean + pika_display_flush_handler_idle (gpointer user_data); /* public functions */ @@ -122,3 +127,23 @@ pika_display_bounds_changed_handler (PikaImage *image, { pika_display_update_bounding_box (display); } + +static void +pika_display_flush_handler (PikaImage *image, + gboolean invalidate_preview, + PikaDisplay *display) +{ + g_idle_add_full (G_PRIORITY_LOW, + (GSourceFunc) pika_display_flush_handler_idle, + g_object_ref (display), g_object_unref); +} + +static gboolean +pika_display_flush_handler_idle (gpointer user_data) +{ + PikaDisplay *display = user_data; + + pika_display_flush (display); + + return G_SOURCE_REMOVE; +} diff --git a/app/gegl/pika-gegl-utils.c b/app/gegl/pika-gegl-utils.c index 9d9c74b..8c81999 100644 --- a/app/gegl/pika-gegl-utils.c +++ b/app/gegl/pika-gegl-utils.c @@ -26,13 +26,19 @@ #include +#include +#include #include #include +#include "libpikacolor/pikacolor.h" + #include "pika-gegl-types.h" +#include "core/pikapattern.h" #include "core/pikaprogress.h" +#include "pika-babl.h" #include "pika-gegl-loops.h" #include "pika-gegl-utils.h" @@ -337,6 +343,100 @@ pika_gegl_buffer_dup (GeglBuffer *buffer) return new_buffer; } +GeglBuffer * +pika_gegl_buffer_resize (GeglBuffer *buffer, + gint new_width, + gint new_height, + gint offset_x, + gint offset_y, + PikaRGB *color, + PikaPattern *pattern, + gint pattern_offset_x, + gint pattern_offset_y) +{ + GeglBuffer *new_buffer; + gboolean intersect; + GeglRectangle copy_rect; + const GeglRectangle *extent; + const Babl *format; + + g_return_val_if_fail (GEGL_IS_BUFFER (buffer), NULL); + + extent = gegl_buffer_get_extent (buffer); + format = gegl_buffer_get_format (buffer); + new_buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, new_width, new_height), + format); + + intersect = gegl_rectangle_intersect (©_rect, + GEGL_RECTANGLE (0, 0, extent->width, + extent->height), + GEGL_RECTANGLE (offset_x, offset_y, + new_width, new_height)); + + if (! intersect || + copy_rect.width != new_width || + copy_rect.height != new_height) + { + /* Clear the new buffer if needed and color/pattern is given */ + if (pattern) + { + GeglBuffer *src_buffer; + GeglBuffer *dest_buffer; + PikaColorProfile *src_profile; + PikaColorProfile *dest_profile; + + src_buffer = pika_pattern_create_buffer (pattern); + + src_profile = pika_babl_format_get_color_profile ( + gegl_buffer_get_format (src_buffer)); + dest_profile = pika_babl_format_get_color_profile ( + gegl_buffer_get_format (new_buffer)); + + if (pika_color_transform_can_gegl_copy (src_profile, dest_profile)) + { + dest_buffer = g_object_ref (src_buffer); + } + else + { + dest_buffer = gegl_buffer_new (gegl_buffer_get_extent (src_buffer), + gegl_buffer_get_format (new_buffer)); + + pika_gegl_convert_color_profile (src_buffer, NULL, src_profile, + dest_buffer, NULL, dest_profile, + PIKA_COLOR_RENDERING_INTENT_PERCEPTUAL, + TRUE, NULL); + } + + g_object_unref (src_profile); + g_object_unref (dest_profile); + + gegl_buffer_set_pattern (new_buffer, NULL, dest_buffer, + pattern_offset_x, pattern_offset_y); + + g_object_unref (src_buffer); + g_object_unref (dest_buffer); + } + else if (color) + { + GeglColor *gegl_color; + + gegl_color = pika_gegl_color_new (color, gegl_buffer_get_format (buffer)); + gegl_buffer_set_color (new_buffer, NULL, gegl_color); + g_object_unref (gegl_color); + } + } + + if (intersect && copy_rect.width && copy_rect.height) + { + /* Copy the pixels in the intersection */ + pika_gegl_buffer_copy (buffer, ©_rect, GEGL_ABYSS_NONE, new_buffer, + GEGL_RECTANGLE (copy_rect.x - offset_x, + copy_rect.y - offset_y, 0, 0)); + } + + return new_buffer; +} + gboolean pika_gegl_buffer_set_extent (GeglBuffer *buffer, const GeglRectangle *extent) diff --git a/app/gegl/pika-gegl-utils.h b/app/gegl/pika-gegl-utils.h index a6f962f..92ae17e 100644 --- a/app/gegl/pika-gegl-utils.h +++ b/app/gegl/pika-gegl-utils.h @@ -59,6 +59,15 @@ gboolean pika_gegl_param_spec_has_key (GParamSpec *pspe const gchar *value); GeglBuffer * pika_gegl_buffer_dup (GeglBuffer *buffer); +GeglBuffer * pika_gegl_buffer_resize (GeglBuffer *buffer, + gint new_width, + gint new_height, + gint offset_x, + gint offset_y, + PikaRGB *color, + PikaPattern *pattern, + gint pattern_offset_x, + gint pattern_offset_y); gboolean pika_gegl_buffer_set_extent (GeglBuffer *buffer, const GeglRectangle *extent); diff --git a/app/paint/paint-enums.h b/app/paint/paint-enums.h index 2b9ebb8..c70eb33 100644 --- a/app/paint/paint-enums.h +++ b/app/paint/paint-enums.h @@ -85,5 +85,12 @@ typedef enum /*< skip, pdb-skip >*/ PIKA_PAINT_STATE_FINISH /* Cleanup and/or reset PaintFunc operation */ } PikaPaintState; +/* State of lock blinking */ +typedef enum /*< skip, pdb-skip >*/ +{ + PIKA_PAINT_LOCK_NOT_BLINKED, + PIKA_PAINT_LOCK_BLINK_PENDING, + PIKA_PAINT_LOCK_BLINKED, +} PikaPaintLockBlinkState; #endif /* __PAINT_ENUMS_H__ */ diff --git a/app/paint/pikabrushcore.c b/app/paint/pikabrushcore.c index c334b9d..68f7778 100644 --- a/app/paint/pikabrushcore.c +++ b/app/paint/pikabrushcore.c @@ -819,6 +819,8 @@ pika_brush_core_get_paint_buffer (PikaPaintCore *paint_core, gint x1, y1, x2, y2; gint drawable_width, drawable_height; gint brush_width, brush_height; + gint offset_change_x, offset_change_y; + PikaCoords new_coords; pika_brush_transform_size (core->brush, core->scale, core->aspect_ratio, @@ -835,11 +837,31 @@ pika_brush_core_get_paint_buffer (PikaPaintCore *paint_core, x = (gint) floor (coords->x) - (brush_width / 2); y = (gint) floor (coords->y) - (brush_height / 2); + x1 = x - 1; + y1 = y - 1; + x2 = x + brush_width + 1; + y2 = y + brush_height + 1; + + pika_paint_core_expand_drawable (paint_core, drawable, paint_options, + x1, x2, y1, y2, + &offset_change_x, &offset_change_y); + + if (offset_change_x || offset_change_y) + { + x += offset_change_x; + y += offset_change_y; + + new_coords = *coords; + new_coords.x = coords->x + offset_change_x; + new_coords.y = coords->y + offset_change_y; + pika_symmetry_set_origin (paint_core->sym, drawable, &new_coords); + } + drawable_width = pika_item_get_width (PIKA_ITEM (drawable)); drawable_height = pika_item_get_height (PIKA_ITEM (drawable)); - x1 = CLAMP (x - 1, 0, drawable_width); - y1 = CLAMP (y - 1, 0, drawable_height); + x1 = CLAMP (x - 1, 0, drawable_width); + y1 = CLAMP (y - 1, 0, drawable_height); x2 = CLAMP (x + brush_width + 1, 0, drawable_width); y2 = CLAMP (y + brush_height + 1, 0, drawable_height); diff --git a/app/paint/pikaink-blob.c b/app/paint/pikaink-blob.c index 2ac8970..f700b46 100644 --- a/app/paint/pikaink-blob.c +++ b/app/paint/pikaink-blob.c @@ -470,6 +470,21 @@ pika_blob_duplicate (PikaBlob *b) return g_memdup2 (b, sizeof (PikaBlob) + sizeof (PikaBlobSpan) * (b->height - 1)); } +void +pika_blob_move (PikaBlob *b, + gint x, + gint y) +{ + gint i = 0; + + b->y += y; + for (i = 0; i < b->height; i++) + { + b->data[i].left += x; + b->data[i].right += x; + } +} + #if 0 void pika_blob_dump (PikaBlob *b) diff --git a/app/paint/pikaink-blob.h b/app/paint/pikaink-blob.h index efd55bb..ad60f5f 100644 --- a/app/paint/pikaink-blob.h +++ b/app/paint/pikaink-blob.h @@ -86,6 +86,9 @@ void pika_blob_bounds (PikaBlob *b, PikaBlob * pika_blob_convex_union (PikaBlob *b1, PikaBlob *b2); PikaBlob * pika_blob_duplicate (PikaBlob *b); +void pika_blob_move (PikaBlob *b, + gint x, + gint y); #endif /* __PIKA_INK_BLOB_H__ */ diff --git a/app/paint/pikaink.c b/app/paint/pikaink.c index ad38816..2055634 100644 --- a/app/paint/pikaink.c +++ b/app/paint/pikaink.c @@ -242,17 +242,49 @@ pika_ink_get_paint_buffer (PikaPaintCore *paint_core, gint *paint_width, gint *paint_height) { - PikaInk *ink = PIKA_INK (paint_core); - gint x, y; - gint width, height; - gint dwidth, dheight; - gint x1, y1, x2, y2; + PikaInk *ink = PIKA_INK (paint_core); + gint x, y; + gint width, height; + gint dwidth, dheight; + gint x1, y1, x2, y2; + gint offset_change_x, offset_change_y; + PikaCoords new_coords; + GList *iter; pika_blob_bounds (ink->cur_blob, &x, &y, &width, &height); + x1 = x / SUBSAMPLE - 1; + y1 = y / SUBSAMPLE - 1; + x2 = (x + width) / SUBSAMPLE + 2; + y2 = (y + height) / SUBSAMPLE + 2; + + pika_paint_core_expand_drawable (paint_core, drawable, paint_options, + x1, x2, y1, y2, + &offset_change_x, &offset_change_y); + dwidth = pika_item_get_width (PIKA_ITEM (drawable)); dheight = pika_item_get_height (PIKA_ITEM (drawable)); + if (offset_change_x || offset_change_y) + { + x += SUBSAMPLE * offset_change_x; + y += SUBSAMPLE * offset_change_y; + + new_coords = *coords; + new_coords.x = coords->x + offset_change_x; + new_coords.y = coords->y + offset_change_y; + pika_symmetry_set_origin (paint_core->sym, drawable, &new_coords); + + for (iter = ink->blobs_to_render; iter; iter = g_list_next (iter)) + pika_blob_move (iter->data, + SUBSAMPLE * offset_change_x, + SUBSAMPLE * offset_change_y); + for (iter = ink->last_blobs; iter; iter = g_list_next (iter)) + pika_blob_move (iter->data, + SUBSAMPLE * offset_change_x, + SUBSAMPLE * offset_change_y); + } + x1 = CLAMP (x / SUBSAMPLE - 1, 0, dwidth); y1 = CLAMP (y / SUBSAMPLE - 1, 0, dheight); x2 = CLAMP ((x + width) / SUBSAMPLE + 2, 0, dwidth); @@ -319,7 +351,6 @@ pika_ink_motion (PikaPaintCore *paint_core, PikaInk *ink = PIKA_INK (paint_core); PikaInkOptions *options = PIKA_INK_OPTIONS (paint_options); PikaContext *context = PIKA_CONTEXT (paint_options); - GList *blob_unions = NULL; GList *blobs_to_render = NULL; GeglBuffer *paint_buffer; gint paint_buffer_x; @@ -338,6 +369,7 @@ pika_ink_motion (PikaPaintCore *paint_core, coords.x -= off_x; coords.y -= off_y; pika_symmetry_set_origin (sym, drawable, &coords); + paint_core->sym = sym; n_strokes = pika_symmetry_get_size (sym); @@ -377,7 +409,8 @@ pika_ink_motion (PikaPaintCore *paint_core, last_blob); ink->start_blobs = g_list_prepend (ink->start_blobs, pika_blob_duplicate (last_blob)); - blobs_to_render = g_list_prepend (blobs_to_render, last_blob); + blobs_to_render = g_list_prepend (blobs_to_render, + pika_blob_duplicate (last_blob)); } ink->start_blobs = g_list_reverse (ink->start_blobs); ink->last_blobs = g_list_reverse (ink->last_blobs); @@ -411,7 +444,6 @@ pika_ink_motion (PikaPaintCore *paint_core, g_list_nth (ink->last_blobs, i)->data = blob; blobs_to_render = g_list_prepend (blobs_to_render, blob_union); - blob_unions = g_list_prepend (blob_unions, blob_union); } blobs_to_render = g_list_reverse (blobs_to_render); } @@ -422,6 +454,7 @@ pika_ink_motion (PikaPaintCore *paint_core, pika_pickable_srgb_to_image_color (PIKA_PICKABLE (drawable), &foreground, &foreground); color = pika_gegl_color_new (&foreground, pika_drawable_get_space (drawable)); + ink->blobs_to_render = blobs_to_render; for (i = 0; i < n_strokes; i++) { @@ -467,8 +500,7 @@ pika_ink_motion (PikaPaintCore *paint_core, g_object_unref (color); - g_list_free_full (blob_unions, g_free); - g_list_free (blobs_to_render); + g_list_free_full (blobs_to_render, g_free); } static PikaBlob * diff --git a/app/paint/pikaink.h b/app/paint/pikaink.h index 1cbff90..63ec39a 100644 --- a/app/paint/pikaink.h +++ b/app/paint/pikaink.h @@ -41,10 +41,11 @@ struct _PikaInk { PikaPaintCore parent_instance; - GList *start_blobs; /* starting blobs per stroke (for undo) */ + GList *start_blobs; /* starting blobs per stroke (for undo) */ - PikaBlob *cur_blob; /* current blob */ - GList *last_blobs; /* blobs for last stroke positions */ + PikaBlob *cur_blob; /* current blob */ + GList *last_blobs; /* blobs for last stroke positions */ + GList *blobs_to_render; }; struct _PikaInkClass diff --git a/app/paint/pikamybrushcore.c b/app/paint/pikamybrushcore.c index 5340981..a163d42 100644 --- a/app/paint/pikamybrushcore.c +++ b/app/paint/pikamybrushcore.c @@ -259,7 +259,7 @@ pika_mybrush_core_motion (PikaPaintCore *paint_core, { PikaMybrushCore *mybrush = PIKA_MYBRUSH_CORE (paint_core); MyPaintRectangle rect; - PikaCoords coords; + PikaCoords origin; GList *iter; gdouble dt = 0.0; gint off_x, off_y; @@ -269,10 +269,10 @@ pika_mybrush_core_motion (PikaPaintCore *paint_core, pika_item_get_offset (PIKA_ITEM (drawable), &off_x, &off_y); n_strokes = pika_symmetry_get_size (sym); - coords = *(pika_symmetry_get_origin (sym)); - coords.x -= off_x; - coords.y -= off_y; - pika_symmetry_set_origin (sym, drawable, &coords); + origin = *(pika_symmetry_get_origin (sym)); + origin.x -= off_x; + origin.y -= off_y; + pika_symmetry_set_origin (sym, drawable, &origin); /* The number of strokes may change during a motion, depending on * the type of symmetry. When that happens, reset the brushes. @@ -291,9 +291,8 @@ pika_mybrush_core_motion (PikaPaintCore *paint_core, iter; iter = g_list_next (iter), i++) { - MyPaintBrush *brush = iter->data; - - coords = *(pika_symmetry_get_coords (sym, i)); + MyPaintBrush *brush = iter->data; + PikaCoords coords = *(pika_symmetry_get_coords (sym, i)); mypaint_brush_stroke_to (brush, (MyPaintSurface *) mybrush->private->surface, @@ -326,6 +325,42 @@ pika_mybrush_core_motion (PikaPaintCore *paint_core, MyPaintBrush *brush = iter->data; PikaCoords coords = *(pika_symmetry_get_coords (sym, i)); gdouble pressure = coords.pressure; + gboolean expanded; + gfloat radius = 100; + gint x1, x2, y1, y2; + gint offset_change_x, offset_change_y; + gint off_x_surf, off_y_surf; + gint off_x, off_y; + + x1 = coords.x - radius; + y1 = coords.y - radius; + x2 = coords.x + radius; + y2 = coords.y + radius; + + expanded = pika_paint_core_expand_drawable (paint_core, drawable, paint_options, + x1, x2, y1, y2, + &offset_change_x, &offset_change_y); + + pika_item_get_offset (PIKA_ITEM (drawable), &off_x, &off_y); + if (expanded) + pika_mypaint_surface_set_buffer (mybrush->private->surface, pika_drawable_get_buffer (drawable), + off_x, off_y); + + pika_mypaint_surface_get_offset (mybrush->private->surface, &off_x_surf, &off_y_surf); + coords.x -= off_x_surf; + coords.y -= off_y_surf; + + if (offset_change_x || offset_change_y) + { + pika_mypaint_surface_set_offset (mybrush->private->surface, + off_x_surf + offset_change_x, + off_y_surf + offset_change_y); + + origin = *(pika_symmetry_get_origin (sym)); + origin.x += offset_change_x; + origin.y += offset_change_y; + pika_symmetry_set_origin (sym, drawable, &origin); + } mypaint_brush_stroke_to (brush, (MyPaintSurface *) mybrush->private->surface, diff --git a/app/paint/pikamybrushsurface.c b/app/paint/pikamybrushsurface.c index ed32495..fbb9a58 100644 --- a/app/paint/pikamybrushsurface.c +++ b/app/paint/pikamybrushsurface.c @@ -38,13 +38,15 @@ struct _PikaMybrushSurface { - MyPaintSurface surface; - GeglBuffer *buffer; - GeglBuffer *paint_mask; - gint paint_mask_x; - gint paint_mask_y; - GeglRectangle dirty; - PikaComponentMask component_mask; + MyPaintSurface surface; + GeglBuffer *buffer; + GeglBuffer *paint_mask; + gint paint_mask_x; + gint paint_mask_y; + gint off_x; + gint off_y; + GeglRectangle dirty; + PikaComponentMask component_mask; PikaMybrushOptions *options; }; @@ -382,6 +384,8 @@ pika_mypaint_surface_draw_dab (MyPaintSurface *base_surface, colorize = opaque * colorize; /* FIXME: This should use the real matrix values to trim aspect_ratio dabs */ + x += surface->off_x; + y += surface->off_y; dabRect = calculate_dab_roi (x, y, radius); gegl_rectangle_intersect (&dabRect, &dabRect, gegl_buffer_get_extent (surface->buffer)); @@ -561,5 +565,40 @@ pika_mypaint_surface_new (GeglBuffer *buffer, surface->paint_mask_y = paint_mask_y; surface->dirty = *GEGL_RECTANGLE (0, 0, 0, 0); + surface->off_x = 0; + surface->off_y = 0; + return surface; } + +void +pika_mypaint_surface_set_buffer (PikaMybrushSurface *surface, + GeglBuffer *buffer, + gint paint_mask_x, + gint paint_mask_y) +{ + g_object_unref (surface->buffer); + + surface->buffer = g_object_ref (buffer); + + surface->paint_mask_x = paint_mask_x; + surface->paint_mask_y = paint_mask_y; +} + +void +pika_mypaint_surface_set_offset (PikaMybrushSurface *surface, + gint off_x, + gint off_y) +{ + surface->off_x = off_x; + surface->off_y = off_y; +} + +void +pika_mypaint_surface_get_offset (PikaMybrushSurface *surface, + gint *off_x, + gint *off_y) +{ + *off_x = surface->off_x; + *off_y = surface->off_y; +} diff --git a/app/paint/pikamybrushsurface.h b/app/paint/pikamybrushsurface.h index 63f9b87..6b143c8 100644 --- a/app/paint/pikamybrushsurface.h +++ b/app/paint/pikamybrushsurface.h @@ -33,5 +33,18 @@ pika_mypaint_surface_new (GeglBuffer *buffer, gint paint_mask_y, PikaMybrushOptions *options); +void +pika_mypaint_surface_set_buffer (PikaMybrushSurface *surface, + GeglBuffer *buffer, + gint paint_mask_x, + gint paint_mask_y); +void +pika_mypaint_surface_set_offset (PikaMybrushSurface *surface, + gint off_x, + gint off_y); +void +pika_mypaint_surface_get_offset (PikaMybrushSurface *surface, + gint *off_x, + gint *off_y); #endif /* __PIKA_MYBRUSH_SURFACE_H__ */ diff --git a/app/paint/pikapaintbrush.c b/app/paint/pikapaintbrush.c index 270aa13..a96f285 100644 --- a/app/paint/pikapaintbrush.c +++ b/app/paint/pikapaintbrush.c @@ -193,7 +193,8 @@ pika_paintbrush_real_get_paint_params (PikaPaintbrush *paintbrush, *paint_mode = pika_context_get_paint_mode (context); - if (pika_paint_options_get_gradient_color (paint_options, image, + if (pika_paint_options_are_dynamics_enabled (paint_options) && + pika_paint_options_get_gradient_color (paint_options, image, grad_point, paint_core->pixel_dist, paint_color)) @@ -252,6 +253,7 @@ _pika_paintbrush_motion (PikaPaintCore *paint_core, coords.x -= off_x; coords.y -= off_y; pika_symmetry_set_origin (sym, drawable, &coords); + paint_core->sym = sym; /* Some settings are based on the original stroke. */ opacity *= pika_dynamics_get_linear_value (dynamics, @@ -313,6 +315,8 @@ _pika_paintbrush_motion (PikaPaintCore *paint_core, &paint_buffer_y, &paint_width, &paint_height); + coords = *(pika_symmetry_get_coords (sym, i)); + if (! paint_buffer) continue; diff --git a/app/paint/pikapaintcore.c b/app/paint/pikapaintcore.c index 844c20c..f4d5642 100644 --- a/app/paint/pikapaintcore.c +++ b/app/paint/pikapaintcore.c @@ -24,10 +24,12 @@ #include +#include #include #include #include "libpikabase/pikabase.h" +#include "libpikacolor/pikacolor.h" #include "libpikamath/pikamath.h" #include "paint-types.h" @@ -47,6 +49,9 @@ #include "core/pikaimage-guides.h" #include "core/pikaimage-symmetry.h" #include "core/pikaimage-undo.h" +#include "core/pikaimage-undo-push.h" +#include "core/pikalayer.h" +#include "core/pikalayermask.h" #include "core/pikapickable.h" #include "core/pikaprojection.h" #include "core/pikasymmetry.h" @@ -158,7 +163,10 @@ static void pika_paint_core_init (PikaPaintCore *core) { core->ID = global_core_ID++; - core->undo_buffers = g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, g_object_unref); + core->undo_buffers = g_hash_table_new_full (g_direct_hash, g_direct_equal, + NULL, g_object_unref); + core->original_bounds = g_hash_table_new_full (g_direct_hash, g_direct_equal, + NULL, g_free); } static void @@ -170,6 +178,7 @@ pika_paint_core_finalize (GObject *object) g_clear_pointer (&core->undo_desc, g_free); g_hash_table_unref (core->undo_buffers); + g_hash_table_unref (core->original_bounds); if (core->applicators) g_hash_table_unref (core->applicators); @@ -357,10 +366,11 @@ pika_paint_core_start (PikaPaintCore *core, const PikaCoords *coords, GError **error) { - PikaImage *image; - PikaChannel *mask; - gint max_width = 0; - gint max_height = 0; + PikaImage *image; + PikaChannel *mask; + gint max_width = 0; + gint max_height = 0; + GeglRectangle *rect; g_return_val_if_fail (PIKA_IS_PAINT_CORE (core), FALSE); g_return_val_if_fail (g_list_length (drawables) > 0, FALSE); @@ -418,8 +428,16 @@ pika_paint_core_start (PikaPaintCore *core, for (GList *iter = drawables; iter; iter = iter->next) { /* Allocate the undo structures */ + rect = g_new (GeglRectangle, 1); + rect->width = pika_item_get_width (PIKA_ITEM (iter->data)); + rect->height = pika_item_get_height (PIKA_ITEM (iter->data)); + pika_item_get_offset (PIKA_ITEM (iter->data), &rect->x, &rect->y); + + g_hash_table_insert (core->original_bounds, iter->data, + rect); g_hash_table_insert (core->undo_buffers, iter->data, pika_gegl_buffer_dup (pika_drawable_get_buffer (iter->data))); + max_width = MAX (max_width, pika_item_get_width (iter->data)); max_height = MAX (max_height, pika_item_get_height (iter->data)); } @@ -484,6 +502,9 @@ pika_paint_core_start (PikaPaintCore *core, } } + /* initialize the lock_blink_state */ + core->lock_blink_state = PIKA_PAINT_LOCK_NOT_BLINKED; + /* Freeze the drawable preview so that it isn't constantly updated. */ for (GList *iter = drawables; iter; iter = iter->next) pika_viewable_preview_freeze (PIKA_VIEWABLE (iter->data)); @@ -532,7 +553,9 @@ pika_paint_core_finish (PikaPaintCore *core, { GeglBuffer *undo_buffer; GeglBuffer *buffer; + GeglBuffer *drawable_buffer; GeglRectangle rect; + GeglRectangle old_rect; if (! g_hash_table_steal_extended (core->undo_buffers, iter->data, NULL, (gpointer*) &undo_buffer)) @@ -542,16 +565,6 @@ pika_paint_core_finish (PikaPaintCore *core, continue; } - pika_rectangle_intersect (core->x1, core->y1, - core->x2 - core->x1, core->y2 - core->y1, - 0, 0, - pika_item_get_width (PIKA_ITEM (iter->data)), - pika_item_get_height (PIKA_ITEM (iter->data)), - &rect.x, &rect.y, &rect.width, &rect.height); - - gegl_rectangle_align_to_buffer (&rect, &rect, undo_buffer, - GEGL_RECTANGLE_ALIGNMENT_SUPERSET); - if (! undo_group_started) { pika_image_undo_group_start (image, PIKA_UNDO_GROUP_PAINT, @@ -559,19 +572,115 @@ pika_paint_core_finish (PikaPaintCore *core, undo_group_started = TRUE; } - PIKA_PAINT_CORE_GET_CLASS (core)->push_undo (core, image, NULL); + /* get new and old bounds of drawable */ + old_rect = *(GeglRectangle*) g_hash_table_lookup (core->original_bounds, iter->data); - buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, rect.width, rect.height), - pika_drawable_get_format (iter->data)); + pika_item_get_offset (PIKA_ITEM (iter->data), &rect.x, &rect.y); + rect.width = pika_item_get_width (PIKA_ITEM (iter->data)); + rect.height = pika_item_get_height (PIKA_ITEM (iter->data)); - pika_gegl_buffer_copy (undo_buffer, - &rect, - GEGL_ABYSS_NONE, - buffer, - GEGL_RECTANGLE (0, 0, 0, 0)); + /* Making copy of entire buffer consumes more memory, so do that only when buffer has resized */ + if (rect.x == old_rect.x && + rect.y == old_rect.y && + rect.width == old_rect.width && + rect.height == old_rect.height) + { + pika_rectangle_intersect (core->x1, core->y1, core->x2 - core->x1, + core->y2 - core->y1, 0, 0, + pika_item_get_width (PIKA_ITEM (iter->data)), + pika_item_get_height (PIKA_ITEM (iter->data)), + &rect.x, &rect.y, &rect.width, &rect.height); - pika_drawable_push_undo (iter->data, NULL, - buffer, rect.x, rect.y, rect.width, rect.height); + gegl_rectangle_align_to_buffer (&rect, &rect, undo_buffer, + GEGL_RECTANGLE_ALIGNMENT_SUPERSET); + + PIKA_PAINT_CORE_GET_CLASS (core)->push_undo (core, image, NULL); + + buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, rect.width, rect.height), + pika_drawable_get_format (iter->data)); + + pika_gegl_buffer_copy (undo_buffer, + &rect, + GEGL_ABYSS_NONE, + buffer, + GEGL_RECTANGLE (0, 0, 0, 0)); + + pika_drawable_push_undo (iter->data, NULL, + buffer, rect.x, rect.y, rect.width, rect.height); + } + else + { + /* drawable is expanded only if drawable is layer or layer mask*/ + g_return_if_fail (PIKA_IS_LAYER (iter->data) || PIKA_IS_LAYER_MASK (iter->data)); + + /* create a copy of original buffer from undo data */ + buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, + old_rect.width, + old_rect.height), + pika_drawable_get_format (iter->data)); + + pika_gegl_buffer_copy (undo_buffer, + GEGL_RECTANGLE (old_rect.x - rect.x, + old_rect.y - rect.y, + old_rect.width, + old_rect.height), + GEGL_ABYSS_NONE, + buffer, + GEGL_RECTANGLE (0, 0, 0, 0)); + + /* make a backup copy of drawable to restore */ + drawable_buffer = g_object_ref (pika_drawable_get_buffer (PIKA_DRAWABLE (iter->data))); + + if (PIKA_IS_LAYER_MASK (drawables->data) || PIKA_LAYER (drawables->data)->mask) + { + GeglBuffer *other_new; + GeglBuffer *other_old; + PikaDrawable *other_drawable; + + if (PIKA_IS_LAYER_MASK (drawables->data)) + other_drawable = PIKA_DRAWABLE ((PIKA_LAYER_MASK (drawables->data))->layer); + else + other_drawable = PIKA_DRAWABLE (PIKA_LAYER (drawables->data)->mask); + + /* create a copy of original buffer by taking the required area */ + other_old = gegl_buffer_new (GEGL_RECTANGLE (0, 0, + old_rect.width, + old_rect.height), + pika_drawable_get_format (other_drawable)); + + pika_gegl_buffer_copy (pika_drawable_get_buffer (other_drawable), + GEGL_RECTANGLE (old_rect.x - rect.x, + old_rect.y - rect.y, + old_rect.width, + old_rect.height), + GEGL_ABYSS_NONE, + other_old, + GEGL_RECTANGLE (0, 0, 0, 0)); + + /* make a backup copy of drawable to restore */ + other_new = g_object_ref (pika_drawable_get_buffer (other_drawable)); + + pika_drawable_set_buffer_full (other_drawable, FALSE, NULL, + other_old, &old_rect, + FALSE); + pika_drawable_set_buffer_full (other_drawable, TRUE, NULL, + other_new, &rect, + FALSE); + + g_object_unref (other_new); + g_object_unref (other_old); + } + /* Restore drawable to state before painting started */ + pika_drawable_set_buffer_full (iter->data, FALSE, NULL, + buffer, &old_rect, + FALSE); + /* Change the drawable again but push undo this time */ + pika_drawable_set_buffer_full (iter->data, TRUE, NULL, + drawable_buffer, &rect, + FALSE); + + g_object_unref (drawable_buffer); + } g_object_unref (buffer); g_object_unref (undo_buffer); @@ -614,7 +723,8 @@ pika_paint_core_cancel (PikaPaintCore *core, &x, &y, &width, &height)) { GeglBuffer *undo_buffer; - GeglRectangle rect; + GeglRectangle new_rect; + GeglRectangle old_rect; if (! g_hash_table_steal_extended (core->undo_buffers, iter->data, NULL, (gpointer*) &undo_buffer)) @@ -624,21 +734,108 @@ pika_paint_core_cancel (PikaPaintCore *core, continue; } - gegl_rectangle_align_to_buffer (&rect, - GEGL_RECTANGLE (x, y, width, height), - pika_drawable_get_buffer (iter->data), - GEGL_RECTANGLE_ALIGNMENT_SUPERSET); + old_rect = *(GeglRectangle*) g_hash_table_lookup (core->original_bounds, iter->data); + + pika_item_get_offset (PIKA_ITEM (iter->data), &new_rect.x, &new_rect.y); + new_rect.width = pika_item_get_width (PIKA_ITEM (iter->data)); + new_rect.height = pika_item_get_height (PIKA_ITEM (iter->data)); + + if (new_rect.x == old_rect.x && + new_rect.y == old_rect.y && + new_rect.width == old_rect.width && + new_rect.height == old_rect.height) + { + GeglRectangle rect; + + gegl_rectangle_align_to_buffer (&rect, + GEGL_RECTANGLE (x, y, width, height), + pika_drawable_get_buffer (iter->data), + GEGL_RECTANGLE_ALIGNMENT_SUPERSET); + + pika_gegl_buffer_copy (undo_buffer, + &rect, + GEGL_ABYSS_NONE, + pika_drawable_get_buffer (iter->data), + &rect); + + pika_drawable_update (iter->data, x, y, width, height); + } + else + { + GeglBuffer *buffer; + GeglRectangle bbox; + + /* drawable is expanded only if drawable is layer or layer mask, + * so drawable cannot be anything else */ + g_return_if_fail (PIKA_IS_LAYER (iter->data) || PIKA_IS_LAYER_MASK (iter->data)); + + /* When canceling painting with drawable expansion, ensure that + * the drawable display outside the reverted size is not shown. We + * cannot use pika_drawable_update() because it won't work while + * painting. Directly emit the "update" signal. + * */ + bbox = pika_drawable_get_bounding_box (iter->data); + g_signal_emit_by_name (iter->data, "update", bbox.x, bbox.y, bbox.width, bbox.height); + + /* create a copy of original buffer from undo data */ + buffer = gegl_buffer_new (GEGL_RECTANGLE (0, 0, + old_rect.width, + old_rect.height), + pika_drawable_get_format (iter->data)); + + pika_gegl_buffer_copy (undo_buffer, + GEGL_RECTANGLE (old_rect.x - new_rect.x, + old_rect.y - new_rect.y, + old_rect.width, + old_rect.height), + GEGL_ABYSS_NONE, + buffer, + GEGL_RECTANGLE (0, 0, 0, 0)); + + if (PIKA_IS_LAYER_MASK (drawables->data) || PIKA_LAYER (drawables->data)->mask) + { + GeglBuffer *other_old; + PikaDrawable *other_drawable; + + if (PIKA_IS_LAYER_MASK (drawables->data)) + other_drawable = PIKA_DRAWABLE ((PIKA_LAYER_MASK (drawables->data))->layer); + else + other_drawable = PIKA_DRAWABLE (PIKA_LAYER (drawables->data)->mask); + + /* create a copy of original buffer by taking the required area */ + other_old = gegl_buffer_new (GEGL_RECTANGLE (0, 0, + old_rect.width, + old_rect.height), + pika_drawable_get_format (other_drawable)); + + pika_gegl_buffer_copy (pika_drawable_get_buffer (other_drawable), + GEGL_RECTANGLE (old_rect.x - new_rect.x, + old_rect.y - new_rect.y, + old_rect.width, + old_rect.height), + GEGL_ABYSS_NONE, + other_old, + GEGL_RECTANGLE (0, 0, 0, 0)); + + pika_drawable_set_buffer_full (other_drawable, FALSE, NULL, + other_old, &old_rect, + FALSE); + + g_object_unref (other_old); + } + /* Restore drawable to state before painting started */ + pika_drawable_set_buffer_full (iter->data, FALSE, NULL, + buffer, &old_rect, + FALSE); + + pika_drawable_update (iter->data, 0, 0, -1, -1); + + g_object_unref (buffer); + } - pika_gegl_buffer_copy (undo_buffer, - &rect, - GEGL_ABYSS_NONE, - pika_drawable_get_buffer (iter->data), - &rect); g_object_unref (undo_buffer); } - pika_drawable_update (iter->data, x, y, width, height); - pika_viewable_preview_thaw (PIKA_VIEWABLE (iter->data)); } @@ -651,6 +848,7 @@ pika_paint_core_cleanup (PikaPaintCore *core) g_return_if_fail (PIKA_IS_PAINT_CORE (core)); g_hash_table_remove_all (core->undo_buffers); + g_hash_table_remove_all (core->original_bounds); g_clear_object (&core->saved_proj_buffer); g_clear_object (&core->canvas_buffer); @@ -692,6 +890,227 @@ pika_paint_core_get_show_all (PikaPaintCore *core) return core->show_all; } + +gboolean +pika_paint_core_expand_drawable (PikaPaintCore *core, + PikaDrawable *drawable, + PikaPaintOptions *options, + gint x1, + gint x2, + gint y1, + gint y2, + gint *new_off_x, + gint *new_off_y) +{ + gint drawable_width, drawable_height; + gint drawable_offset_x, drawable_offset_y; + gint image_width, image_height; + gint new_width, new_height; + gint expand_amount; + gboolean show_all; + gboolean outside_image; + PikaImage *image = pika_item_get_image (PIKA_ITEM (drawable)); + PikaLayer *layer; + + drawable_width = pika_item_get_width (PIKA_ITEM (drawable)); + drawable_height = pika_item_get_height (PIKA_ITEM (drawable)); + pika_item_get_offset (PIKA_ITEM (drawable), &drawable_offset_x, &drawable_offset_y); + + new_width = drawable_width; + new_height = drawable_height; + *new_off_x = 0; + *new_off_y = 0; + + image_width = pika_image_get_width (image); + image_height = pika_image_get_height (image); + + expand_amount = options->expand_amount; + show_all = pika_paint_core_get_show_all (core); + outside_image = x2 < -drawable_offset_x || x1 > image_width - drawable_offset_x || + y2 < -drawable_offset_y || y1 > image_height - drawable_offset_y; + + /* Don't expand if drawable is anything other + * than layer or layer mask */ + if (PIKA_IS_LAYER_MASK (drawable)) + layer = (PIKA_LAYER_MASK (drawable))->layer; + else if (PIKA_IS_LAYER (drawable)) + layer = PIKA_LAYER (drawable); + else + return FALSE; + + if (!pika_paint_core_get_show_all (core) && outside_image) + return FALSE; + + if (!options->expand_use) + return FALSE; + + if (x1 < 0) + { + if (show_all) + { + new_width += expand_amount - x1; + *new_off_x += expand_amount - x1; + } + else if (drawable_offset_x > 0) + { + new_width += expand_amount - x1; + *new_off_x += expand_amount - x1; + if (*new_off_x > drawable_offset_x) + { + new_width -= *new_off_x - drawable_offset_x; + *new_off_x = drawable_offset_x; + } + } + } + if (y1 < 0) + { + if (show_all) + { + new_height += expand_amount - y1; + *new_off_y += expand_amount - y1; + } + else if (drawable_offset_y > 0) + { + new_height += expand_amount - y1; + *new_off_y += expand_amount - y1; + if (*new_off_y > drawable_offset_y) + { + new_height -= *new_off_y - drawable_offset_y; + *new_off_y = drawable_offset_y; + } + } + } + if (x2 > drawable_width) + { + if (show_all) + { + new_width += x2 - drawable_width + expand_amount; + } + else if (drawable_width + drawable_offset_x < image_width) + { + new_width += x2 - drawable_width + expand_amount; + if (new_width + drawable_offset_x - *new_off_x > image_width) + new_width = image_width + *new_off_x - drawable_offset_x; + } + } + if (y2 > drawable_height) + { + if (show_all) + { + new_height += y2 - drawable_height + expand_amount; + } + else if (drawable_height + drawable_offset_y < image_height) + { + new_height += y2 - drawable_height + expand_amount; + if (new_height + drawable_offset_y - *new_off_y > image_height) + new_height = image_height + *new_off_y - drawable_offset_y; + } + } + + if (new_width != drawable_width || *new_off_x || + new_height != drawable_height || *new_off_y) + { + PikaRGB color; + PikaPattern *pattern; + PikaContext *context = PIKA_CONTEXT (options); + PikaFillType fill_type = options->expand_fill_type; + gboolean context_has_image; + PikaFillType mask_fill_type; + GeglBuffer *undo_buffer; + GeglBuffer *new_buffer; + + if (pika_item_get_lock_position (PIKA_ITEM (layer))) + { + if (core->lock_blink_state == PIKA_PAINT_LOCK_NOT_BLINKED) + core->lock_blink_state = PIKA_PAINT_LOCK_BLINK_PENDING; + + /* Since we are not expanding, set new offset to zero */ + *new_off_x = 0; + *new_off_y = 0; + + return FALSE; + } + + mask_fill_type = options->expand_mask_fill_type == PIKA_ADD_MASK_BLACK ? + PIKA_FILL_TRANSPARENT : + PIKA_FILL_WHITE; + + /* The image field of context is null but + * is required for Filling with Middle Gray */ + context_has_image = context->image != NULL; + if (!context_has_image) + context->image = image; + + /* ensure that every expansion is pushed to undo stack */ + if (core->x2 == core->x1) + core->x2++; + if (core->y2 == core->y1) + core->y2++; + + g_object_freeze_notify (G_OBJECT (layer)); + + pika_drawable_disable_resize_undo (PIKA_DRAWABLE (layer)); + PIKA_LAYER_GET_CLASS (layer)->resize (layer, context, fill_type, + new_width, new_height, + *new_off_x, *new_off_y); + pika_drawable_enable_resize_undo (PIKA_DRAWABLE (layer)); + + if (layer->mask) + { + g_object_freeze_notify (G_OBJECT (layer->mask)); + + pika_drawable_disable_resize_undo (PIKA_DRAWABLE (layer->mask)); + PIKA_ITEM_GET_CLASS (layer->mask)->resize (PIKA_ITEM (layer->mask), context, + mask_fill_type, new_width, new_height, + *new_off_x, *new_off_y); + pika_drawable_enable_resize_undo (PIKA_DRAWABLE (layer->mask)); + + g_object_thaw_notify (G_OBJECT (layer->mask)); + } + + g_object_thaw_notify (G_OBJECT (layer)); + + pika_image_flush (image); + + if (PIKA_IS_LAYER_MASK (drawable)) + { + fill_type = mask_fill_type; + } + else if (fill_type == PIKA_FILL_TRANSPARENT && + ! pika_drawable_has_alpha (drawable)) + { + fill_type = PIKA_FILL_BACKGROUND; + } + + new_buffer = pika_gegl_buffer_resize (core->canvas_buffer, new_width, new_height, + -(*new_off_x), -(*new_off_y), NULL, NULL, 0, 0); + g_object_unref (core->canvas_buffer); + core->canvas_buffer = new_buffer; + + pika_get_fill_params (context, fill_type, &color, &pattern, NULL); + pika_pickable_srgb_to_image_color (PIKA_PICKABLE (drawable), + &color, &color); + if (! pika_drawable_has_alpha (drawable)) + pika_rgb_set_alpha (&color, 1.0); + + undo_buffer = g_hash_table_lookup (core->undo_buffers, drawable); + g_object_ref (undo_buffer); + + new_buffer = pika_gegl_buffer_resize (undo_buffer, new_width, new_height, + -(*new_off_x), -(*new_off_y), &color, + pattern, 0, 0); + g_hash_table_insert (core->undo_buffers, drawable, new_buffer); + g_object_unref (undo_buffer); + + /* Restore context to its original state */ + if (!context_has_image) + context->image = NULL; + + return TRUE; + } + return FALSE; +} + void pika_paint_core_set_current_coords (PikaPaintCore *core, const PikaCoords *coords) diff --git a/app/paint/pikapaintcore.h b/app/paint/pikapaintcore.h index 0aa0c23..2604032 100644 --- a/app/paint/pikapaintcore.h +++ b/app/paint/pikapaintcore.h @@ -69,12 +69,17 @@ struct _PikaPaintCore GeglBuffer *paint_buffer; /* the buffer to paint pixels to */ gint paint_buffer_x; gint paint_buffer_y; + GHashTable *original_bounds; /* the original bounds of drawables */ GeglBuffer *mask_buffer; /* the target drawable's mask */ GHashTable *applicators; GArray *stroke_buffer; + + PikaSymmetry *sym; + PikaPaintLockBlinkState + lock_blink_state; }; struct _PikaPaintCoreClass @@ -156,6 +161,16 @@ void pika_paint_core_set_show_all (PikaPaintCore *core, gboolean show_all); gboolean pika_paint_core_get_show_all (PikaPaintCore *core); +gboolean pika_paint_core_expand_drawable (PikaPaintCore *paint_core, + PikaDrawable *drawable, + PikaPaintOptions *paint_options, + gint x1, + gint x2, + gint y1, + gint y2, + gint *x, + gint *y); + void pika_paint_core_set_current_coords (PikaPaintCore *core, const PikaCoords *coords); void pika_paint_core_get_current_coords (PikaPaintCore *core, diff --git a/app/paint/pikapaintoptions.c b/app/paint/pikapaintoptions.c index f60d9ef..7308571 100644 --- a/app/paint/pikapaintoptions.c +++ b/app/paint/pikapaintoptions.c @@ -83,6 +83,11 @@ #define DEFAULT_SMOOTHING_QUALITY 20 #define DEFAULT_SMOOTHING_FACTOR 50 +#define DEFAULT_EXPAND_USE FALSE +#define DEFAULT_EXPAND_AMOUNT 100.0 +#define DEFAULT_EXPAND_FILL_TYPE PIKA_FILL_TRANSPARENT +#define DEFAULT_EXPAND_MASK_FILL_TYPE PIKA_ADD_MASK_WHITE + enum { PROP_0, @@ -134,7 +139,12 @@ enum PROP_USE_SMOOTHING, PROP_SMOOTHING_QUALITY, - PROP_SMOOTHING_FACTOR + PROP_SMOOTHING_FACTOR, + + PROP_EXPAND_USE, + PROP_EXPAND_AMOUNT, + PROP_EXPAND_FILL_TYPE, + PROP_EXPAND_MASK_FILL_TYPE }; @@ -308,6 +318,36 @@ pika_paint_options_class_init (PikaPaintOptionsClass *klass) DEFAULT_USE_JITTER, PIKA_PARAM_STATIC_STRINGS); + PIKA_CONFIG_PROP_BOOLEAN (object_class, PROP_EXPAND_USE, + "expand-use", + _("Expand Layers"), + _("Expand active layer as you paint"), + DEFAULT_EXPAND_USE, + PIKA_PARAM_STATIC_STRINGS); + + PIKA_CONFIG_PROP_DOUBLE (object_class, PROP_EXPAND_AMOUNT, + "expand-amount", + _("Amount"), + _("Amount of expansion"), + 1.0, 1000.0, DEFAULT_EXPAND_AMOUNT, + PIKA_PARAM_STATIC_STRINGS); + + PIKA_CONFIG_PROP_ENUM (object_class, PROP_EXPAND_FILL_TYPE, + "expand-fill-type", + _("Fill With"), + _("Fill layer with"), + PIKA_TYPE_FILL_TYPE, + DEFAULT_EXPAND_FILL_TYPE, + PIKA_PARAM_STATIC_STRINGS); + + PIKA_CONFIG_PROP_ENUM (object_class, PROP_EXPAND_MASK_FILL_TYPE, + "expand-mask-fill-type", + _("Fill Mask With"), + _("Fill layer mask with"), + PIKA_TYPE_ADD_MASK_TYPE, + DEFAULT_EXPAND_MASK_FILL_TYPE, + PIKA_PARAM_STATIC_STRINGS); + PIKA_CONFIG_PROP_BOOLEAN (object_class, PROP_DYNAMICS_ENABLED, "dynamics-enabled", _("Enable dynamics"), @@ -642,6 +682,19 @@ pika_paint_options_set_property (GObject *object, smoothing_options->smoothing_factor = g_value_get_double (value); break; + case PROP_EXPAND_USE: + options->expand_use = g_value_get_boolean (value); + break; + case PROP_EXPAND_AMOUNT: + options->expand_amount = g_value_get_double (value); + break; + case PROP_EXPAND_FILL_TYPE: + options->expand_fill_type = g_value_get_enum (value); + break; + case PROP_EXPAND_MASK_FILL_TYPE: + options->expand_mask_fill_type = g_value_get_enum (value); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -788,6 +841,19 @@ pika_paint_options_get_property (GObject *object, g_value_set_double (value, smoothing_options->smoothing_factor); break; + case PROP_EXPAND_USE: + g_value_set_boolean (value, options->expand_use); + break; + case PROP_EXPAND_AMOUNT: + g_value_set_double (value, options->expand_amount); + break; + case PROP_EXPAND_FILL_TYPE: + g_value_set_enum (value, options->expand_fill_type); + break; + case PROP_EXPAND_MASK_FILL_TYPE: + g_value_set_enum (value, options->expand_mask_fill_type); + break; + default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); break; @@ -1221,9 +1287,18 @@ static const gchar *gradient_props[] = "gradient-repeat" }; +static const gchar *expand_props[] = +{ + "expand-use", + "expand-amount", + "expand-fill-type", + "expand-mask-fill-type", +}; + static const gint max_n_props = (G_N_ELEMENTS (brush_props) + G_N_ELEMENTS (dynamics_props) + - G_N_ELEMENTS (gradient_props)); + G_N_ELEMENTS (gradient_props) + + G_N_ELEMENTS (expand_props)); gboolean pika_paint_options_is_prop (const gchar *prop_name, @@ -1254,6 +1329,13 @@ pika_paint_options_is_prop (const gchar *prop_name, return TRUE; } + if (prop_mask & PIKA_CONTEXT_PROP_MASK_EXPAND) + { + for (i = 0; i < G_N_ELEMENTS (expand_props); i++) + if (! strcmp (prop_name, expand_props[i])) + return TRUE; + } + return FALSE; } @@ -1288,6 +1370,12 @@ pika_paint_options_copy_props (PikaPaintOptions *src, names[n_props++] = gradient_props[i]; } + if (prop_mask & PIKA_CONTEXT_PROP_MASK_EXPAND) + { + for (i = 0; i < G_N_ELEMENTS (expand_props); i++) + names[n_props++] = expand_props[i]; + } + if (n_props > 0) { g_object_getv (G_OBJECT (src), n_props, names, values); diff --git a/app/paint/pikapaintoptions.h b/app/paint/pikapaintoptions.h index ccd1768..88c4fa5 100644 --- a/app/paint/pikapaintoptions.h +++ b/app/paint/pikapaintoptions.h @@ -109,6 +109,11 @@ struct _PikaPaintOptions gboolean hard; + gboolean expand_use; + gdouble expand_amount; + PikaFillType expand_fill_type; + PikaAddMaskType expand_mask_fill_type; + PikaJitterOptions *jitter_options; gboolean dynamics_enabled; diff --git a/app/paint/pikasmudge.c b/app/paint/pikasmudge.c index 3c5b6a5..ec3fc42 100644 --- a/app/paint/pikasmudge.c +++ b/app/paint/pikasmudge.c @@ -406,6 +406,7 @@ pika_smudge_motion (PikaPaintCore *paint_core, coords.x -= off_x; coords.y -= off_y; pika_symmetry_set_origin (sym, drawable, &coords); + paint_core->sym = sym; opacity = pika_dynamics_get_linear_value (dynamics, PIKA_DYNAMICS_OUTPUT_OPACITY, diff --git a/app/paint/pikasourcecore.c b/app/paint/pikasourcecore.c index 548fdad..469b73f 100644 --- a/app/paint/pikasourcecore.c +++ b/app/paint/pikasourcecore.c @@ -347,6 +347,7 @@ pika_source_core_motion (PikaSourceCore *source_core, coords.x -= off_x; coords.y -= off_y; pika_symmetry_set_origin (sym, drawable, &coords); + paint_core->sym = sym; /* Some settings are based on the original stroke. */ opacity = pika_dynamics_get_linear_value (dynamics, diff --git a/app/pdb/image-cmds.c b/app/pdb/image-cmds.c index 593bdf3..930702d 100644 --- a/app/pdb/image-cmds.c +++ b/app/pdb/image-cmds.c @@ -5101,7 +5101,7 @@ register_image_procs (PikaPDB *pdb) "pika-image-get-imported-file"); pika_procedure_set_static_help (procedure, "Returns the imported file for the specified image.", - "This procedure returns the file associated with the specified image if the image was imported from a non-native Pika format. If the image was not imported, or has since been saved in the native Gimp format, this procedure returns %NULL.", + "This procedure returns the file associated with the specified image if the image was imported from a non-native Pika format. If the image was not imported, or has since been saved in the native Pika format, this procedure returns %NULL.", NULL); pika_procedure_set_static_attribution (procedure, "Eric Grivel ", diff --git a/app/pdb/vectors-cmds.c b/app/pdb/vectors-cmds.c index ed0359a..3598900 100644 --- a/app/pdb/vectors-cmds.c +++ b/app/pdb/vectors-cmds.c @@ -1297,7 +1297,10 @@ vectors_export_to_file_invoker (PikaProcedure *procedure, if (success) { - GList *vectors_list = g_list_prepend (NULL, vectors); + GList *vectors_list = NULL; + + if (vectors != NULL) + vectors_list = g_list_prepend (vectors_list, vectors); success = pika_vectors_export_file (image, vectors_list, file, error); @@ -1327,7 +1330,10 @@ vectors_export_to_string_invoker (PikaProcedure *procedure, if (success) { - GList *vectors_list = g_list_prepend (NULL, vectors); + GList *vectors_list = NULL; + + if (vectors != NULL) + vectors_list = g_list_prepend (vectors_list, vectors); string = pika_vectors_export_string (image, vectors_list); g_list_free (vectors_list); @@ -2440,7 +2446,7 @@ register_vectors_procs (PikaPDB *pdb) "pika-vectors-export-to-file"); pika_procedure_set_static_help (procedure, "save a path as an SVG file.", - "This procedure creates an SVG file to save a Vectors object, that is, a path. The resulting file can be edited using a vector graphics application, or later reloaded into PIKA. If you pass 0 as the 'vectors' argument, then all paths in the image will be exported.", + "This procedure creates an SVG file to save a Vectors object, that is, a path. The resulting file can be edited using a vector graphics application, or later reloaded into PIKA. Pass %NULL as the 'vectors' argument to export all paths in the image.", NULL); pika_procedure_set_static_attribution (procedure, "Bill Skaggs ", @@ -2461,7 +2467,7 @@ register_vectors_procs (PikaPDB *pdb) pika_procedure_add_argument (procedure, pika_param_spec_vectors ("vectors", "vectors", - "The vectors object to be saved, or 0 for all in the image", + "The vectors object to export, or %NULL for all in the image", FALSE, PIKA_PARAM_READWRITE | PIKA_PARAM_NO_VALIDATE)); pika_pdb_register_procedure (pdb, procedure); @@ -2475,7 +2481,7 @@ register_vectors_procs (PikaPDB *pdb) "pika-vectors-export-to-string"); pika_procedure_set_static_help (procedure, "Save a path as an SVG string.", - "This procedure works like 'pika-vectors-export-to-file' but creates a string rather than a file. The contents are a NUL-terminated string that holds a complete XML document. If you pass 0 as the 'vectors' argument, then all paths in the image will be exported.", + "This procedure works like 'pika-vectors-export-to-file' but creates a string rather than a file. The string is NULL-terminated and holds a complete XML document. Pass %NULL as the 'vectors' argument to export all paths in the image.", NULL); pika_procedure_set_static_attribution (procedure, "Bill Skaggs ", @@ -2490,7 +2496,7 @@ register_vectors_procs (PikaPDB *pdb) pika_procedure_add_argument (procedure, pika_param_spec_vectors ("vectors", "vectors", - "The vectors object to save, or 0 for all in the image", + "The vectors object to export, or %NULL for all in the image", FALSE, PIKA_PARAM_READWRITE | PIKA_PARAM_NO_VALIDATE)); pika_procedure_add_return_value (procedure, diff --git a/app/pika-update.c b/app/pika-update.c index d0166ac..1ef7767 100644 --- a/app/pika-update.c +++ b/app/pika-update.c @@ -450,7 +450,7 @@ pika_update_about_dialog (PikaCoreConfig *config, if (config->last_known_release != NULL) { #ifndef PIKA_CONSOLE_COMPILATION - gtk_widget_show (about_dialog_create (pika)); + gtk_widget_show (about_dialog_create (pika, config)); #else g_printerr (_("A new version of PIKA (%s) was released.\n" "It is recommended to update."), diff --git a/app/tools/pika-tool-options-manager.c b/app/tools/pika-tool-options-manager.c index 13bb99a..c5689ab 100644 --- a/app/tools/pika-tool-options-manager.c +++ b/app/tools/pika-tool-options-manager.c @@ -170,6 +170,9 @@ pika_tool_options_manager_init (Pika *pika) g_signal_connect (pika->config, "notify::global-font", G_CALLBACK (tool_options_manager_global_notify), manager); + g_signal_connect (pika->config, "notify::global-expand", + G_CALLBACK (tool_options_manager_global_notify), + manager); g_signal_connect (user_context, "tool-changed", G_CALLBACK (tool_options_manager_tool_changed), @@ -254,6 +257,8 @@ tool_options_manager_get_global_props (PikaCoreConfig *config) global_props |= PIKA_CONTEXT_PROP_MASK_GRADIENT; if (config->global_font) global_props |= PIKA_CONTEXT_PROP_MASK_FONT; + if (config->global_expand) + global_props |= PIKA_CONTEXT_PROP_MASK_EXPAND; return global_props; } @@ -358,6 +363,12 @@ tool_options_manager_paint_options_notify (PikaPaintOptions *src, prop_mask |= PIKA_CONTEXT_PROP_MASK_GRADIENT; } + if ((active || config->global_expand) && + tool_info->context_props & PIKA_CONTEXT_PROP_MASK_EXPAND) + { + prop_mask |= PIKA_CONTEXT_PROP_MASK_EXPAND; + } + if (pika_paint_options_is_prop (pspec->name, prop_mask)) { GValue value = G_VALUE_INIT; diff --git a/app/tools/pikaairbrushtool.c b/app/tools/pikaairbrushtool.c index 73ced67..0619b1a 100644 --- a/app/tools/pikaairbrushtool.c +++ b/app/tools/pikaairbrushtool.c @@ -66,6 +66,8 @@ pika_airbrush_tool_register (PikaToolRegisterCallback callback, PIKA_TYPE_AIRBRUSH_OPTIONS, pika_airbrush_options_gui, PIKA_PAINT_OPTIONS_CONTEXT_MASK | + PIKA_CONTEXT_PROP_MASK_EXPAND | + PIKA_CONTEXT_PROP_MASK_PATTERN | PIKA_CONTEXT_PROP_MASK_GRADIENT, "pika-airbrush-tool", _("Airbrush"), diff --git a/app/tools/pikaclonetool.c b/app/tools/pikaclonetool.c index 8c9e48f..9ab520e 100644 --- a/app/tools/pikaclonetool.c +++ b/app/tools/pikaclonetool.c @@ -61,6 +61,7 @@ pika_clone_tool_register (PikaToolRegisterCallback callback, PIKA_TYPE_CLONE_OPTIONS, pika_clone_options_gui, PIKA_PAINT_OPTIONS_CONTEXT_MASK | + PIKA_CONTEXT_PROP_MASK_EXPAND | PIKA_CONTEXT_PROP_MASK_PATTERN, "pika-clone-tool", _("Clone"), diff --git a/app/tools/pikaconvolvetool.c b/app/tools/pikaconvolvetool.c index 07568cd..5d0de6d 100644 --- a/app/tools/pikaconvolvetool.c +++ b/app/tools/pikaconvolvetool.c @@ -73,7 +73,9 @@ pika_convolve_tool_register (PikaToolRegisterCallback callback, (* callback) (PIKA_TYPE_CONVOLVE_TOOL, PIKA_TYPE_CONVOLVE_OPTIONS, pika_convolve_options_gui, - PIKA_PAINT_OPTIONS_CONTEXT_MASK, + PIKA_PAINT_OPTIONS_CONTEXT_MASK | + PIKA_CONTEXT_PROP_MASK_PATTERN | + PIKA_CONTEXT_PROP_MASK_EXPAND, "pika-convolve-tool", _("Blur / Sharpen"), _("Blur / Sharpen Tool: Selective blurring or unblurring using a brush"), diff --git a/app/tools/pikahealtool.c b/app/tools/pikahealtool.c index 1eb6dee..d1ca854 100644 --- a/app/tools/pikahealtool.c +++ b/app/tools/pikahealtool.c @@ -52,7 +52,9 @@ pika_heal_tool_register (PikaToolRegisterCallback callback, (* callback) (PIKA_TYPE_HEAL_TOOL, PIKA_TYPE_SOURCE_OPTIONS, pika_heal_options_gui, - PIKA_PAINT_OPTIONS_CONTEXT_MASK, + PIKA_PAINT_OPTIONS_CONTEXT_MASK | + PIKA_CONTEXT_PROP_MASK_PATTERN | + PIKA_CONTEXT_PROP_MASK_EXPAND, "pika-heal-tool", _("Healing"), _("Healing Tool: Heal image irregularities"), diff --git a/app/tools/pikainkoptions-gui.c b/app/tools/pikainkoptions-gui.c index 0ba6c6c..b850160 100644 --- a/app/tools/pikainkoptions-gui.c +++ b/app/tools/pikainkoptions-gui.c @@ -50,6 +50,7 @@ pika_ink_options_gui (PikaToolOptions *tool_options) GtkWidget *frame; GtkWidget *vbox2; GtkWidget *scale; + GtkWidget *combo_box; GtkWidget *blob_box; GtkWidget *hbox; GtkWidget *editor; @@ -133,6 +134,28 @@ pika_ink_options_gui (PikaToolOptions *tool_options) gtk_container_add (GTK_CONTAINER (frame), editor); gtk_widget_show (editor); + /* Expand layer options */ + vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); + + scale = pika_prop_spin_scale_new (config, "expand-amount", + 1, 10, 2); + pika_spin_scale_set_constrain_drag (PIKA_SPIN_SCALE (scale), TRUE); + pika_spin_scale_set_scale_limits (PIKA_SPIN_SCALE (scale), 1.0, 1000.0); + pika_spin_scale_set_gamma (PIKA_SPIN_SCALE (scale), 1.0); + gtk_box_pack_start (GTK_BOX (vbox2), scale, FALSE, FALSE, 0); + + combo_box = pika_prop_enum_combo_box_new (config, "expand-fill-type", 0, 0); + gtk_box_pack_start (GTK_BOX (vbox2), combo_box, FALSE, FALSE, 0); + + frame = pika_prop_enum_radio_frame_new (config, "expand-mask-fill-type", + "Fill Layer Mask With", 0, 1); + gtk_box_pack_start (GTK_BOX (vbox2), frame, FALSE, FALSE, 0); + + frame = pika_prop_expanding_frame_new (config, "expand-use", NULL, + vbox2, NULL); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + pika_config_connect (config, G_OBJECT (editor), "blob-type"); pika_config_connect (config, G_OBJECT (editor), "blob-aspect"); pika_config_connect (config, G_OBJECT (editor), "blob-angle"); diff --git a/app/tools/pikainktool.c b/app/tools/pikainktool.c index 1ac820c..1b4609c 100644 --- a/app/tools/pikainktool.c +++ b/app/tools/pikainktool.c @@ -68,7 +68,9 @@ pika_ink_tool_register (PikaToolRegisterCallback callback, PIKA_CONTEXT_PROP_MASK_FOREGROUND | PIKA_CONTEXT_PROP_MASK_BACKGROUND | PIKA_CONTEXT_PROP_MASK_OPACITY | - PIKA_CONTEXT_PROP_MASK_PAINT_MODE, + PIKA_CONTEXT_PROP_MASK_PAINT_MODE | + PIKA_CONTEXT_PROP_MASK_PATTERN | + PIKA_CONTEXT_PROP_MASK_EXPAND, "pika-ink-tool", _("Ink"), _("Ink Tool: Calligraphy-style painting"), diff --git a/app/tools/pikamybrushoptions-gui.c b/app/tools/pikamybrushoptions-gui.c index 1ab93b7..1b5984a 100644 --- a/app/tools/pikamybrushoptions-gui.c +++ b/app/tools/pikamybrushoptions-gui.c @@ -50,8 +50,11 @@ pika_mybrush_options_gui (PikaToolOptions *tool_options) { GObject *config = G_OBJECT (tool_options); GtkWidget *vbox = pika_paint_options_gui (tool_options); + GtkWidget *vbox2; GtkWidget *button; GtkWidget *scale; + GtkWidget *combo_box; + GtkWidget *frame; /* the brush */ button = pika_prop_mybrush_box_new (NULL, PIKA_CONTEXT (tool_options), @@ -82,5 +85,28 @@ pika_mybrush_options_gui (PikaToolOptions *tool_options) 0.1, 1.0, 2); gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0); + /* Expand layer options */ + vbox2 = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); + + scale = pika_prop_spin_scale_new (config, "expand-amount", + 1, 10, 2); + pika_spin_scale_set_constrain_drag (PIKA_SPIN_SCALE (scale), TRUE); + pika_spin_scale_set_scale_limits (PIKA_SPIN_SCALE (scale), 1.0, 1000.0); + pika_spin_scale_set_gamma (PIKA_SPIN_SCALE (scale), 1.0); + gtk_box_pack_start (GTK_BOX (vbox2), scale, FALSE, FALSE, 0); + + combo_box = pika_prop_enum_combo_box_new (config, "expand-fill-type", 0, 0); + gtk_box_pack_start (GTK_BOX (vbox2), combo_box, FALSE, FALSE, 0); + + frame = pika_prop_enum_radio_frame_new (config, "expand-mask-fill-type", + "Fill Layer Mask With", 0, 1); + gtk_box_pack_start (GTK_BOX (vbox2), frame, FALSE, FALSE, 0); + + frame = pika_prop_expanding_frame_new (config, "expand-use", NULL, + vbox2, NULL); + + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + return vbox; } diff --git a/app/tools/pikamybrushtool.c b/app/tools/pikamybrushtool.c index b2aa16b..5073073 100644 --- a/app/tools/pikamybrushtool.c +++ b/app/tools/pikamybrushtool.c @@ -72,7 +72,9 @@ pika_mybrush_tool_register (PikaToolRegisterCallback callback, PIKA_CONTEXT_PROP_MASK_BACKGROUND | PIKA_CONTEXT_PROP_MASK_OPACITY | PIKA_CONTEXT_PROP_MASK_PAINT_MODE | - PIKA_CONTEXT_PROP_MASK_MYBRUSH, + PIKA_CONTEXT_PROP_MASK_MYBRUSH | + PIKA_CONTEXT_PROP_MASK_PATTERN | + PIKA_CONTEXT_PROP_MASK_EXPAND, "pika-mypaint-brush-tool", _("MyPaint Brush"), _("MyPaint Brush Tool: Use MyPaint brushes in PIKA"), diff --git a/app/tools/pikapaintbrushtool.c b/app/tools/pikapaintbrushtool.c index 1715af0..e987a58 100644 --- a/app/tools/pikapaintbrushtool.c +++ b/app/tools/pikapaintbrushtool.c @@ -56,7 +56,9 @@ pika_paintbrush_tool_register (PikaToolRegisterCallback callback, PIKA_TYPE_PAINT_OPTIONS, pika_paint_options_gui, PIKA_PAINT_OPTIONS_CONTEXT_MASK | - PIKA_CONTEXT_PROP_MASK_GRADIENT, + PIKA_CONTEXT_PROP_MASK_EXPAND | + PIKA_CONTEXT_PROP_MASK_GRADIENT | + PIKA_CONTEXT_PROP_MASK_PATTERN, "pika-paintbrush-tool", _("Paintbrush"), _("Paintbrush Tool: Paint smooth strokes using a brush"), diff --git a/app/tools/pikapaintoptions-gui.c b/app/tools/pikapaintoptions-gui.c index 865d968..47f6d60 100644 --- a/app/tools/pikapaintoptions-gui.c +++ b/app/tools/pikapaintoptions-gui.c @@ -77,6 +77,8 @@ static GtkWidget * jitter_options_gui (PikaPaintOptions *paint_options, GType tool_type); static GtkWidget * smoothing_options_gui (PikaPaintOptions *paint_options, GType tool_type); +static GtkWidget * expand_options_gui (PikaPaintOptions *paint_options, + GType tool_type); static GtkWidget * pika_paint_options_gui_scale_with_buttons (GObject *config, @@ -274,6 +276,22 @@ pika_paint_options_gui (PikaToolOptions *tool_options) gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); } + /* the "expand layers" options */ + if (tool_type == PIKA_TYPE_PAINTBRUSH_TOOL || + tool_type == PIKA_TYPE_PENCIL_TOOL || + tool_type == PIKA_TYPE_AIRBRUSH_TOOL || + tool_type == PIKA_TYPE_CLONE_TOOL || + tool_type == PIKA_TYPE_HEAL_TOOL || + tool_type == PIKA_TYPE_CONVOLVE_TOOL || + tool_type == PIKA_TYPE_SMUDGE_TOOL) + { + GtkWidget *frame; + + frame = expand_options_gui (options, tool_type); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + gtk_widget_show (frame); + } + return vbox; } @@ -489,6 +507,39 @@ pika_paint_options_gui_reset_force (GtkWidget *button, NULL); } +static GtkWidget * +expand_options_gui (PikaPaintOptions *paint_options, + GType tool_type) +{ + GObject *config = G_OBJECT (paint_options); + GtkWidget *frame; + GtkWidget *scale; + GtkWidget *combo_box; + GtkWidget *vbox; + + vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2); + + scale = pika_prop_spin_scale_new (config, "expand-amount", + 1, 10, 2); + pika_spin_scale_set_constrain_drag (PIKA_SPIN_SCALE (scale), TRUE); + + pika_spin_scale_set_scale_limits (PIKA_SPIN_SCALE (scale), 1.0, 1000.0); + pika_spin_scale_set_gamma (PIKA_SPIN_SCALE (scale), 1.0); + gtk_box_pack_start (GTK_BOX (vbox), scale, FALSE, FALSE, 0); + + combo_box = pika_prop_enum_combo_box_new (config, "expand-fill-type", 0, 0); + gtk_box_pack_start (GTK_BOX (vbox), combo_box, FALSE, FALSE, 0); + + frame = pika_prop_enum_radio_frame_new (config, "expand-mask-fill-type", + "Fill Layer Mask With", 0, 1); + gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0); + + frame = pika_prop_expanding_frame_new (config, "expand-use", NULL, + vbox, NULL); + + return frame; +} + static GtkWidget * pika_paint_options_gui_scale_with_buttons (GObject *config, gchar *prop_name, diff --git a/app/tools/pikapainttool-paint.c b/app/tools/pikapainttool-paint.c index da6b41e..8b0de4d 100644 --- a/app/tools/pikapainttool-paint.c +++ b/app/tools/pikapainttool-paint.c @@ -30,6 +30,8 @@ #include "core/pikadrawable.h" #include "core/pikaimage.h" +#include "core/pikalayer.h" +#include "core/pikalayermask.h" #include "core/pikaprojection.h" #include "paint/pikapaintcore.h" @@ -41,6 +43,7 @@ #include "pikapainttool.h" #include "pikapainttool-paint.h" +#include "pikatools-utils.h" #define DISPLAY_UPDATE_INTERVAL 10000 /* microseconds */ @@ -218,6 +221,27 @@ pika_paint_tool_paint_interpolate (PikaPaintTool *paint_tool, pika_paint_core_interpolate (core, data->drawables, paint_options, &data->coords, data->time); + /* Blink the lock box if required */ + if (core->lock_blink_state == PIKA_PAINT_LOCK_BLINK_PENDING) + { + GList *iter; + PikaLayer *layer; + + /* Blink the lock only once per stroke */ + core->lock_blink_state = PIKA_PAINT_LOCK_BLINKED; + + for (iter = data->drawables; iter; iter = g_list_next (iter)) + { + layer = PIKA_IS_LAYER_MASK (iter->data) ? + PIKA_LAYER_MASK (iter->data)->layer : + PIKA_LAYER (iter->data); + + if (pika_item_get_lock_position (PIKA_ITEM (layer))) + pika_tools_blink_lock_box (PIKA_CONTEXT (paint_options)->pika, + PIKA_ITEM (layer)); + } + } + g_list_free (data->drawables); g_slice_free (InterpolateData, data); } diff --git a/app/tools/pikapenciltool.c b/app/tools/pikapenciltool.c index da91ef0..4b7a5e7 100644 --- a/app/tools/pikapenciltool.c +++ b/app/tools/pikapenciltool.c @@ -50,6 +50,8 @@ pika_pencil_tool_register (PikaToolRegisterCallback callback, PIKA_TYPE_PENCIL_OPTIONS, pika_paint_options_gui, PIKA_PAINT_OPTIONS_CONTEXT_MASK | + PIKA_CONTEXT_PROP_MASK_EXPAND | + PIKA_CONTEXT_PROP_MASK_PATTERN | PIKA_CONTEXT_PROP_MASK_GRADIENT, "pika-pencil-tool", _("Pencil"), diff --git a/app/tools/pikasmudgetool.c b/app/tools/pikasmudgetool.c index 0516334..a88dfd9 100644 --- a/app/tools/pikasmudgetool.c +++ b/app/tools/pikasmudgetool.c @@ -54,6 +54,8 @@ pika_smudge_tool_register (PikaToolRegisterCallback callback, PIKA_TYPE_SMUDGE_OPTIONS, pika_smudge_options_gui, PIKA_PAINT_OPTIONS_CONTEXT_MASK | + PIKA_CONTEXT_PROP_MASK_EXPAND | + PIKA_CONTEXT_PROP_MASK_PATTERN | PIKA_CONTEXT_PROP_MASK_GRADIENT, "pika-smudge-tool", _("Smudge"), diff --git a/app/vectors/pikavectors-export.c b/app/vectors/pikavectors-export.c index 50313c8..ca661d5 100644 --- a/app/vectors/pikavectors-export.c +++ b/app/vectors/pikavectors-export.c @@ -51,19 +51,26 @@ static gchar * pika_vectors_export_path_data (PikaVectors *vectors); /** * pika_vectors_export_file: - * @image: the #PikaImage from which to export vectors - * @vectors: a #GList of #PikaVectors objects or %NULL to export all vectors in @image + * @image: the #PikaImage from which to export + * @path_list: a #GList of #PikaVectors objects or %NULL to export all paths in @image * @file: the file to write * @error: return location for errors * - * Exports one or more vectors to a SVG file. + * Exports one or more vectors aka path to an SVG file aka XML doc. + * + * When @path_list is %NULL aka empty list, exports all paths in image. + * + * When @path_list is empty and image has no paths, + * this still writes a non-empty file containing an XML doc. + * + * Will overwrite any existing file. * * Returns: %TRUE on success, - * %FALSE if there was an error writing the file + * %FALSE when there was an error writing the file **/ gboolean pika_vectors_export_file (PikaImage *image, - GList *vectors, + GList *path_list, GFile *file, GError **error) { @@ -81,7 +88,7 @@ pika_vectors_export_file (PikaImage *image, if (! output) return FALSE; - string = pika_vectors_export (image, vectors); + string = pika_vectors_export (image, path_list); if (! g_output_stream_write_all (output, string->str, string->len, NULL, NULL, &my_error)) @@ -111,20 +118,25 @@ pika_vectors_export_file (PikaImage *image, /** * pika_vectors_export_string: - * @image: the #PikaImage from which to export vectors - * @vectors: a #PikaVectors object or %NULL to export all vectors in @image + * @image: the #PikaImage from which to export + * @path_list: a #GList of #PikaVectors objects, or %NULL to export all paths in @image * - * Exports one or more vectors to a SVG string. + * Exports one or more vectors aka path to a SVG string. * - * Returns: a %NUL-terminated string that holds a complete XML document + * When @path_list is %NULL aka empty list, exports all paths in image. + * + * When @path_list is empty and image has no paths, + * this still returns a string for an empty XML doc. + * + * Returns: a NULL-terminated string that holds a complete XML document **/ gchar * pika_vectors_export_string (PikaImage *image, - GList *vectors) + GList *path_list) { g_return_val_if_fail (PIKA_IS_IMAGE (image), NULL); - return g_string_free (pika_vectors_export (image, vectors), FALSE); + return g_string_free (pika_vectors_export (image, path_list), FALSE); } static GString * diff --git a/app/widgets/pikaaction.c b/app/widgets/pikaaction.c index d17b13e..65a710a 100644 --- a/app/widgets/pikaaction.c +++ b/app/widgets/pikaaction.c @@ -104,6 +104,8 @@ static void pika_action_proxy_button_activate (GtkButton *button, static void pika_action_update_proxy_sensitive (PikaAction *action, GtkWidget *proxy); +static void pika_action_update_proxy_visible (PikaAction *action, + GtkWidget *proxy); static void pika_action_update_proxy_tooltip (PikaAction *action, GtkWidget *proxy); @@ -446,9 +448,20 @@ void pika_action_set_visible (PikaAction *action, gboolean visible) { - g_object_set (action, - "visible", visible, - NULL); + PikaActionPrivate *priv = GET_PRIVATE (action); + + /* Only notify when the state actually changed. This is important for + * handlers such as visibility of menu items in PikaMenuModel which + * will assume that the action visibility changed. Otherwise we might + * remove items by mistake. + */ + if (priv->visible != visible) + { + priv->visible = visible; + + pika_action_update_proxy_visible (action, NULL); + g_object_notify (G_OBJECT (action), "visible"); + } } gboolean @@ -929,16 +942,8 @@ pika_action_set_property (GObject *object, NULL); break; case PIKA_ACTION_PROP_VISIBLE: - if (priv->visible != g_value_get_boolean (value)) - { - priv->visible = g_value_get_boolean (value); - /* Only notify when the state actually changed. This is important for - * handlers such as visibility of menu items in PikaMenuModel which - * will assume that the action visibility changed. Otherwise we might - * remove items by mistake. - */ - g_object_notify (object, "visible"); - } + pika_action_set_visible (PIKA_ACTION (object), + g_value_get_boolean (value)); break; case PIKA_ACTION_PROP_LABEL: @@ -1391,6 +1396,24 @@ pika_action_update_proxy_sensitive (PikaAction *action, } } +static void +pika_action_update_proxy_visible (PikaAction *action, + GtkWidget *proxy) +{ + PikaActionPrivate *priv = GET_PRIVATE (action); + gboolean visible = pika_action_is_visible (action); + + if (proxy) + { + gtk_widget_set_visible (proxy, visible); + } + else + { + for (GList *list = priv->proxies; list; list = list->next) + gtk_widget_set_visible (list->data, visible); + } +} + static void pika_action_update_proxy_tooltip (PikaAction *action, GtkWidget *proxy) diff --git a/app/widgets/pikacontainertreeview.c b/app/widgets/pikacontainertreeview.c index 05dfb79..8dfe90b 100644 --- a/app/widgets/pikacontainertreeview.c +++ b/app/widgets/pikacontainertreeview.c @@ -102,10 +102,6 @@ static void pika_container_tree_view_set_view_size (PikaContainerVi static void pika_container_tree_view_real_edit_name (PikaContainerTreeView *tree_view); -static void pika_container_tree_view_selection_label_notify (GtkLabel *label, - GParamSpec *pspec, - PikaItemTreeView *view); - static gboolean pika_container_tree_view_edit_focus_out (GtkWidget *widget, GdkEvent *event, gpointer user_data); @@ -296,12 +292,6 @@ pika_container_tree_view_constructed (GObject *object) gtk_label_set_selectable (GTK_LABEL (tree_view->priv->multi_selection_label), TRUE); gtk_tree_view_column_set_widget (tree_view->main_column, tree_view->priv->multi_selection_label); - g_signal_connect (tree_view->priv->multi_selection_label, "notify::label", - G_CALLBACK (pika_container_tree_view_selection_label_notify), - tree_view); - g_signal_connect (tree_view->priv->multi_selection_label, "notify::selection-bound", - G_CALLBACK (pika_container_tree_view_selection_label_notify), - tree_view); gtk_widget_show (tree_view->priv->multi_selection_label); gtk_tree_view_insert_column (tree_view->view, tree_view->main_column, 0); @@ -1204,20 +1194,6 @@ pika_container_tree_view_real_edit_name (PikaContainerTreeView *tree_view) /* callbacks */ -static void -pika_container_tree_view_selection_label_notify (GtkLabel *label, - GParamSpec *pspec, - PikaItemTreeView *view) -{ - /* This is a weird trick to make the label follow the color scheme of - * selected items in whatever theme is selected. It seems we cannot - * link to the color of another widget whose theme we don't control. - * Faking selection is the only way I found, though it is quite ugly - * semantically. - */ - gtk_label_select_region (label, 0, -1); -} - static gboolean pika_container_tree_view_edit_focus_out (GtkWidget *widget, GdkEvent *event, @@ -1354,10 +1330,12 @@ pika_container_tree_view_button (GtkWidget *widget, GdkEventButton *bevent, PikaContainerTreeView *tree_view) { - PikaContainerView *container_view = PIKA_CONTAINER_VIEW (tree_view); - GtkTreeViewColumn *column; - GtkTreePath *path; - gboolean handled = TRUE; + PikaContainerView *container_view = PIKA_CONTAINER_VIEW (tree_view); + GtkTreeViewColumn *column; + GtkTreePath *path; + gboolean handled = TRUE; + GtkCellRenderer *toggled_cell = NULL; + PikaCellRendererViewable *clicked_cell = NULL; tree_view->priv->dnd_renderer = NULL; @@ -1366,8 +1344,6 @@ pika_container_tree_view_button (GtkWidget *widget, &path, &column, NULL, NULL)) { PikaViewRenderer *renderer; - GtkCellRenderer *toggled_cell = NULL; - PikaCellRendererViewable *clicked_cell = NULL; GtkCellRenderer *edit_cell = NULL; GdkRectangle column_area; GtkTreeIter iter; @@ -1389,15 +1365,21 @@ pika_container_tree_view_button (GtkWidget *widget, multisel_mode = FALSE; } - /* We need to grab focus after a button click, in order to make keyboard - * navigation possible. For multi-selection though, actual selection will - * happen in pika_container_tree_view_selection_changed() but the widget - * must already be focused or the handler won't run. - * Whereas for single selection, grab must happen after we changed the - * selection (which will happen in this function) otherwise we end up - * first scrolling to the current selection. So we have a separate - * gtk_widget_grab_focus() at the end of the function. - * See also commit 3e101922 and MR !1128. + /* We need to grab focus at button click, in order to make keyboard + * navigation possible; yet the timing matters: + * 1. For multi-selection, actual selection will happen in + * pika_container_tree_view_selection_changed() but the widget + * must already be focused or the handler won't run. So we grab first. + * 2. For toggled and clicked cells, we must also grab first (see code + * below), and absolutely not in the end, because some toggle cells may + * trigger a popup (and the grab on the source widget would close the + * popup). + * 3. Finally for single selection, grab must happen after we changed + * the selection (which will happen in this function) otherwise we + * end up first scrolling to the current selection. + * This is why we have a few separate calls to gtk_widget_grab_focus() + * in this function. + * See also commit 3e101922, MR !1128 and #10281. */ if (multisel_mode && bevent->type == GDK_BUTTON_PRESS && ! gtk_widget_has_focus (widget)) gtk_widget_grab_focus (widget); @@ -1524,6 +1506,10 @@ pika_container_tree_view_button (GtkWidget *widget, column, &column_area, bevent->x, bevent->y); + if ((toggled_cell || clicked_cell) && + bevent->type == GDK_BUTTON_PRESS && ! gtk_widget_has_focus (widget)) + gtk_widget_grab_focus (widget); + if (! toggled_cell && ! clicked_cell) { edit_cell = @@ -1720,7 +1706,8 @@ pika_container_tree_view_button (GtkWidget *widget, handled = TRUE; } - if (handled && bevent->type == GDK_BUTTON_PRESS && ! gtk_widget_has_focus (widget)) + if (handled && bevent->type == GDK_BUTTON_PRESS && ! gtk_widget_has_focus (widget) && + ! toggled_cell && ! clicked_cell) gtk_widget_grab_focus (widget); return handled; diff --git a/app/widgets/pikaimageeditor.c b/app/widgets/pikaimageeditor.c index e6aafee..57d8216 100644 --- a/app/widgets/pikaimageeditor.c +++ b/app/widgets/pikaimageeditor.c @@ -46,6 +46,9 @@ static void pika_image_editor_real_set_image (PikaImageEditor *editor, static void pika_image_editor_image_flush (PikaImage *image, gboolean invalidate_preview, PikaImageEditor *editor); +static gboolean + pika_image_editor_image_flush_idle + (gpointer user_data); G_DEFINE_TYPE_WITH_CODE (PikaImageEditor, pika_image_editor, PIKA_TYPE_EDITOR, @@ -177,7 +180,19 @@ pika_image_editor_image_flush (PikaImage *image, gboolean invalidate_preview, PikaImageEditor *editor) { + g_idle_add_full (G_PRIORITY_LOW, + (GSourceFunc) pika_image_editor_image_flush_idle, + g_object_ref (editor), g_object_unref); +} + +static gboolean +pika_image_editor_image_flush_idle (gpointer user_data) +{ + PikaImageEditor *editor = user_data; + if (pika_editor_get_ui_manager (PIKA_EDITOR (editor))) pika_ui_manager_update (pika_editor_get_ui_manager (PIKA_EDITOR (editor)), pika_editor_get_popup_data (PIKA_EDITOR (editor))); + + return G_SOURCE_REMOVE; } diff --git a/app/widgets/pikalayertreeview.c b/app/widgets/pikalayertreeview.c index 0c5e7db..5eb6a25 100644 --- a/app/widgets/pikalayertreeview.c +++ b/app/widgets/pikalayertreeview.c @@ -1224,6 +1224,8 @@ pika_layer_tree_view_floating_selection_changed (PikaImage *image, g_list_free (all_layers); } + gtk_widget_set_sensitive (layer_view->priv->link_button, ! floating_sel); + pika_layer_tree_view_update_highlight (layer_view); } diff --git a/build/flatpak/technology.heckin.PIKA-nightly.json b/build/flatpak/technology.heckin.PIKA-nightly.json index e144770..e631c42 100644 --- a/build/flatpak/technology.heckin.PIKA-nightly.json +++ b/build/flatpak/technology.heckin.PIKA-nightly.json @@ -86,13 +86,13 @@ "sources": [ { "type": "archive", - "url": "https://github.com/Exiv2/exiv2/releases/download/v0.28.0/exiv2-0.28.0-Source.tar.gz", - "sha256": "89af3b5ef7277753ef7a7b5374ae017c6b9e304db3b688f1948e73e103491f3d", + "url": "https://github.com/Exiv2/exiv2/archive/refs/tags/v0.28.1.tar.gz", + "sha256": "3078651f995cb6313b1041f07f4dd1bf0e9e4d394d6e2adc6e92ad0b621291fa", "x-checker-data": { "type": "anitya", "project-id": 769, "stable-only": true, - "url-template": "https://github.com/Exiv2/exiv2/releases/download/v$version/exiv2-$version-Source.tar.gz" + "url-template": "https://github.com/Exiv2/exiv2/archive/refs/tags/v$version.tar.gz" } } ] @@ -119,7 +119,7 @@ ] }, { - "name" : "openexr", + "name": "openexr", "config-opts": [ "-DBUILD_SHARED_LIBS=ON", "-DOPENEXR_INSTALL_EXAMPLES=OFF", @@ -201,7 +201,8 @@ "-DOpenJPEG_DIR=/usr/lib64/openjpeg-2.3", "-DENABLE_BOOST=OFF", "-DWITH_NSS3:BOOL=OFF", - "-DENABLE_QT5:BOOL=OFF" + "-DENABLE_QT5:BOOL=OFF", + "-DENABLE_QT6:BOOL=OFF" ], "cleanup": [ "/bin", @@ -212,8 +213,8 @@ "sources": [ { "type": "archive", - "url": "https://poppler.freedesktop.org/poppler-23.08.0.tar.xz", - "sha256": "4a4bf7fc903b9f1a2ab7d04b7c5d8220db9bc6261cc73fdb9a826dc272f49aa8", + "url": "https://poppler.freedesktop.org/poppler-23.11.0.tar.xz", + "sha256": "f99cca6799cb9cb6c92fc1e0eb78547b611cb733750ab7cb047cb0e6c246539c", "x-checker-data": { "type": "anitya", "project-id": 3686, @@ -314,8 +315,8 @@ "sources": [ { "type": "archive", - "url": "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10012/ghostscript-10.01.2.tar.gz", - "sha512": "11887850d440b8bbd8b83b8b58df8c743cf94be8fdbcfbda1a5fce55ce7c6a963d94b41a4ebcf1ba48f64f8af01e76dec789e2711212b1f7a32f98c42d75e0ff", + "url": "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10021/ghostscript-10.02.1.tar.gz", + "sha512": "24eeff047a24085413283ee42539a2feea4d3de81077664861399055a9d30349a0ef0950746bb0b0ee2237b4b9ee215340204ab0e33347b53dc2acee85fcfc19", "x-checker-data": { "//": "Bypass broken url-template with anitya checker - See https://github.com/flathub/flatpak-external-data-checker/issues/360", "type": "json", @@ -365,8 +366,8 @@ { "type": "git", "url": "https://github.com/json-c/json-c.git", - "tag": "json-c-0.16-20220414", - "commit": "2f2ddc1f2dbca56c874e8f9c31b5b963202d80e7", + "tag": "json-c-0.17-20230812", + "commit": "b4c371fa0cbc4dcbaccc359ce9e957a22988fb34", "x-checker-data": { "type": "git", "tag-pattern": "^json-c-([\\d.]+)-[\\d]+$" @@ -469,8 +470,8 @@ "sources": [ { "type": "archive", - "url": "https://github.com/xianyi/OpenBLAS/archive/v0.3.23.tar.gz", - "sha256": "5d9491d07168a5d00116cdc068a40022c3455bf9293c7cb86a65b1054d7e5114", + "url": "https://github.com/xianyi/OpenBLAS/archive/v0.3.24.tar.gz", + "sha256": "ceadc5065da97bd92404cac7254da66cc6eb192679cf1002098688978d4d5132", "x-checker-data": { "type": "anitya", "project-id": 2540, @@ -616,8 +617,8 @@ "sources": [ { "type": "archive", - "url": "https://github.com/strukturag/libheif/releases/download/v1.16.2/libheif-1.16.2.tar.gz", - "sha256": "7f97e4205c0bd9f9b8560536c8bd2e841d1c9a6d610401eb3eb87ed9cdfe78ea", + "url": "https://github.com/strukturag/libheif/releases/download/v1.17.3/libheif-1.17.3.tar.gz", + "sha256": "8d5b6292e7931324f81f871f250ecbb9f874aa3c66b4f6f35ceb0bf3163b53ea", "x-checker-data": { "type": "anitya", "project-id": 64439, diff --git a/build/windows/gitlab-ci/installer-pika-msys2.sh b/build/windows/gitlab-ci/installer-pika-msys2.sh index 730c9a9..613649f 100644 --- a/build/windows/gitlab-ci/installer-pika-msys2.sh +++ b/build/windows/gitlab-ci/installer-pika-msys2.sh @@ -57,7 +57,6 @@ download_lang Galician.isl download_lang Georgian.isl download_lang Greek.isl download_lang Indonesian.isl -download_lang Korean.isl download_lang Latvian.isl download_lang Lithuanian.isl download_lang Malaysian.isl @@ -67,9 +66,9 @@ download_lang Swedish.isl download_lang Vietnamese.isl cd - -# Hungarian is not in a release yet, but was moved from Unofficial +# Any language not in a release yet, but moved from Unofficial, should be added here cd "${ISCCDIR}/Languages/" -download_lang_official Hungarian.isl +download_lang_official Korean.isl cd - # Copy generated language files into the source directory. diff --git a/build/windows/gitlab-ci/package-pika-msys2.sh b/build/windows/gitlab-ci/package-pika-msys2.sh index 6853089..a6b9ed0 100644 --- a/build/windows/gitlab-ci/package-pika-msys2.sh +++ b/build/windows/gitlab-ci/package-pika-msys2.sh @@ -157,6 +157,9 @@ cp -fr ${MSYS_PREFIX}/share/xml/iso-codes/iso_639.xml ${PIKA_DISTRIB}/share/xml/ # Adwaita can be used as the base icon set. cp -fr ${MSYS_PREFIX}/share/icons/Adwaita ${PIKA_DISTRIB}/share/icons/ +# Gdbus is needed to avoid warnings in CMD. +cp -fr ${MSYS_PREFIX}/bin/gdbus.exe ${PIKA_DISTRIB}/bin + # XXX Why are these for exactly? cp -fr ${MSYS_PREFIX}/bin/gspawn*.exe ${PIKA_DISTRIB}/bin/ diff --git a/build/windows/installer/associations.list b/build/windows/installer/associations.list index 19fbbe7..c4fffde 100644 --- a/build/windows/installer/associations.list +++ b/build/windows/installer/associations.list @@ -13,6 +13,7 @@ exr gif heif heic +hej2 icns jp2 j2k diff --git a/build/windows/installer/pika3264.iss b/build/windows/installer/pika3264.iss index b0bcc9b..44196fc 100644 --- a/build/windows/installer/pika3264.iss +++ b/build/windows/installer/pika3264.iss @@ -216,7 +216,7 @@ Name: "it"; MessagesFile: "compiler:Languages\Italian.isl,lang\it.setup.isl" Name: "ja"; MessagesFile: "compiler:Languages\Japanese.isl,lang\ja.setup.isl" Name: "ka"; MessagesFile: "compiler:Languages\Unofficial\Georgian.isl,lang\ka.setup.isl" Name: "kab"; MessagesFile: "compiler:Default.isl,lang\kab.isl,lang\kab.setup.isl" -Name: "ko"; MessagesFile: "compiler:Languages\Unofficial\Korean.isl,lang\ko.setup.isl" +Name: "ko"; MessagesFile: "compiler:Languages\Korean.isl,lang\ko.setup.isl" Name: "lt"; MessagesFile: "compiler:Languages\Unofficial\Lithuanian.isl,lang\lt.setup.isl" Name: "lv"; MessagesFile: "compiler:Languages\Unofficial\Latvian.isl,lang\lv.setup.isl" Name: "mr"; MessagesFile: "compiler:Languages\Unofficial\Marathi.islu,lang\mr.setup.isl" diff --git a/desktop/technology.heckin.PIKA.appdata.xml.in.in b/desktop/technology.heckin.PIKA.appdata.xml.in.in index 8779f9b..c225a55 100644 --- a/desktop/technology.heckin.PIKA.appdata.xml.in.in +++ b/desktop/technology.heckin.PIKA.appdata.xml.in.in @@ -407,6 +407,32 @@ + + +

+ This new version of PIKA comes with many fixes, including + vulnerability corrections. It is highly recommended to update. It + also provides a few interesting changes, such as: +

+
    +
  • + Adobe ACB and ASE palette support +
  • +
  • + New gradient: FG to Transparent (Hardedge) +
  • +
  • + Some text tool algorithm enhancement when replacing formatted text +
  • +
  • + Better theming of item locks (when hovering them or setting them active) +
  • +
  • + Improvements in handling a few specific metadata +
  • +
+
+

diff --git a/libpika/pika_pdb_headers.h b/libpika/pika_pdb_headers.h index 5876aea..08df6d5 100644 --- a/libpika/pika_pdb_headers.h +++ b/libpika/pika_pdb_headers.h @@ -47,6 +47,7 @@ #include #include #include +#include #include #include #include @@ -71,7 +72,6 @@ #include #include #include -#include #include #include #include diff --git a/libpika/pikavectors_pdb.c b/libpika/pikavectors_pdb.c index 5ebbb7e..ee399be 100644 --- a/libpika/pikavectors_pdb.c +++ b/libpika/pikavectors_pdb.c @@ -1191,14 +1191,14 @@ pika_vectors_import_from_string (PikaImage *image, * pika_vectors_export_to_file: * @image: The image. * @file: The SVG file to create. - * @vectors: The vectors object to be saved, or 0 for all in the image. + * @vectors: The vectors object to export, or %NULL for all in the image. * * save a path as an SVG file. * * This procedure creates an SVG file to save a Vectors object, that * is, a path. The resulting file can be edited using a vector graphics - * application, or later reloaded into PIKA. If you pass 0 as the - * 'vectors' argument, then all paths in the image will be exported. + * application, or later reloaded into PIKA. Pass %NULL as the + * 'vectors' argument to export all paths in the image. * * Returns: TRUE on success. * @@ -1234,14 +1234,14 @@ pika_vectors_export_to_file (PikaImage *image, /** * pika_vectors_export_to_string: * @image: The image. - * @vectors: The vectors object to save, or 0 for all in the image. + * @vectors: The vectors object to export, or %NULL for all in the image. * * Save a path as an SVG string. * * This procedure works like pika_vectors_export_to_file() but creates - * a string rather than a file. The contents are a NUL-terminated - * string that holds a complete XML document. If you pass 0 as the - * 'vectors' argument, then all paths in the image will be exported. + * a string rather than a file. The string is NULL-terminated and holds + * a complete XML document. Pass %NULL as the 'vectors' argument to + * export all paths in the image. * * Returns: (transfer full): * A string whose contents are a complete SVG document. diff --git a/libpikaconfig/pikaconfig-params.c b/libpikaconfig/pikaconfig-params.c index c167d84..56e34b4 100644 --- a/libpikaconfig/pikaconfig-params.c +++ b/libpikaconfig/pikaconfig-params.c @@ -351,6 +351,7 @@ pika_config_param_spec_duplicate (GParamSpec *pspec) * with type names instead. */ g_strcmp0 (type_name, "PikaImage") == 0 || + g_strcmp0 (type_name, "PikaDisplay") == 0 || g_strcmp0 (type_name, "PikaDrawable") == 0 || g_strcmp0 (type_name, "PikaLayer") == 0 || g_strcmp0 (type_name, "PikaTextLayer") == 0 || diff --git a/libpikawidgets/pikadialog.c b/libpikawidgets/pikadialog.c index 0735ea5..3e60352 100644 --- a/libpikawidgets/pikadialog.c +++ b/libpikawidgets/pikadialog.c @@ -96,7 +96,9 @@ static void pika_dialog_close (GtkDialog *dialog); static void pika_dialog_response (GtkDialog *dialog, gint response_id); +#ifdef G_OS_WIN32 static void pika_dialog_set_title_bar_theme (GtkWidget *dialog); +#endif G_DEFINE_TYPE_WITH_PRIVATE (PikaDialog, pika_dialog, GTK_TYPE_DIALOG) @@ -770,10 +772,10 @@ pika_dialogs_show_help_button (gboolean show) show_help_button = show ? TRUE : FALSE; } +#ifdef G_OS_WIN32 void pika_dialog_set_title_bar_theme (GtkWidget *dialog) { -#ifdef G_OS_WIN32 HWND hwnd; gboolean use_dark_mode = FALSE; GdkWindow *window = NULL; @@ -810,5 +812,5 @@ pika_dialog_set_title_bar_theme (GtkWidget *dialog) gdk_window_hide (window); gdk_window_show (window); } -#endif } +#endif diff --git a/menus/image-menu.ui.in.in b/menus/image-menu.ui.in.in index 3b19557..9fb11e1 100644 --- a/menus/image-menu.ui.in.in +++ b/menus/image-menu.ui.in.in @@ -90,10 +90,16 @@ app.edit-paste-in-place Paste _as - app.edit-paste-merged - app.edit-paste-merged-in-place - app.edit-paste-into - app.edit-paste-into-in-place +

+ app.edit-paste-merged + app.edit-paste-merged-in-place +
+
+ app.edit-paste-float + app.edit-paste-float-in-place + app.edit-paste-into + app.edit-paste-into-in-place +
app.edit-paste-as-new-imagelong @@ -143,7 +149,11 @@ app.select-all app.select-none app.select-invert - app.select-float + + _Float + app.select-cut-float + app.select-copy-float + app.tools-by-color-select-short app.vectors-selection-from-vectors app.dialogs-selection-editor diff --git a/menus/selection-menu.ui b/menus/selection-menu.ui index 8aef482..84c2a2c 100644 --- a/menus/selection-menu.ui +++ b/menus/selection-menu.ui @@ -10,7 +10,10 @@ app.select-none app.select-invert app.vectors-selection-from-vectors - app.select-float +
+ app.select-cut-float + app.select-copy-float +
app.select-feather app.select-sharpen diff --git a/pdb/groups/vectors.pdb b/pdb/groups/vectors.pdb index 83cbf19..bfadde5 100644 --- a/pdb/groups/vectors.pdb +++ b/pdb/groups/vectors.pdb @@ -192,7 +192,7 @@ sub vectors_stroke_get_length { code => <<"CODE" { PikaStroke *stroke = pika_pdb_get_vectors_stroke (vectors, stroke_id, 0, error); - + if (stroke) length = pika_stroke_get_length (stroke, precision); else @@ -207,7 +207,7 @@ sub vectors_stroke_get_point_at_dist { $help = <<'HELP'; This will return the x,y position of a point at a given distance along the -stroke. The distance will be obtained by first digitizing the +stroke. The distance will be obtained by first digitizing the curve internally and then walking along the curve. For a closed stroke the start of the path is the first point on the path that was created. This might not be obvious. If the stroke is not long enough, a "valid" flag will be FALSE. @@ -241,7 +241,7 @@ HELP code => <<"CODE" { PikaStroke *stroke = pika_pdb_get_vectors_stroke (vectors, stroke_id, 0, error); - + if (stroke) { PikaCoords coord; @@ -279,7 +279,7 @@ HELP { PikaStroke *stroke = pika_pdb_get_vectors_stroke (vectors, stroke_id, PIKA_PDB_ITEM_CONTENT, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -317,7 +317,7 @@ HELP { PikaStroke *stroke = pika_pdb_get_vectors_stroke (vectors, stroke_id, PIKA_PDB_ITEM_CONTENT, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -405,7 +405,7 @@ HELP PIKA_PDB_ITEM_CONTENT | PIKA_PDB_ITEM_POSITION, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -451,7 +451,7 @@ HELP PIKA_PDB_ITEM_CONTENT | PIKA_PDB_ITEM_POSITION, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -498,7 +498,7 @@ HELP PIKA_PDB_ITEM_CONTENT | PIKA_PDB_ITEM_POSITION, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -544,7 +544,7 @@ HELP PIKA_PDB_ITEM_CONTENT | PIKA_PDB_ITEM_POSITION, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -595,7 +595,7 @@ HELP PIKA_PDB_ITEM_CONTENT | PIKA_PDB_ITEM_POSITION, error); - + if (stroke) { if (pika_item_is_attached (PIKA_ITEM (vectors))) @@ -647,7 +647,7 @@ HELP code => <<"CODE" { PikaStroke *stroke = pika_pdb_get_vectors_stroke (vectors, stroke_id, 0, error); - + if (PIKA_IS_BEZIER_STROKE (stroke)) { GArray *points_array; @@ -713,7 +713,7 @@ HELP code => <<"CODE" { PikaStroke *stroke = pika_pdb_get_vectors_stroke (vectors, stroke_id, 0, error); - + if (stroke) { GArray *coords_array; @@ -1162,7 +1162,7 @@ HELP { GList *list; gint i; - + vectors = g_new (PikaVectors *, num_vectors); for (i = 0, list = vectors_list; @@ -1231,9 +1231,9 @@ HELP { GList *list; gint i; - + vectors = g_new (PikaVectors *, num_vectors); - + for (i = 0, list = vectors_list; i < num_vectors; i++, list = g_list_next (list)) @@ -1255,8 +1255,8 @@ sub vectors_export_to_file { $help = <<'HELP'; This procedure creates an SVG file to save a Vectors object, that is, a path. The resulting file can be edited using a vector graphics -application, or later reloaded into PIKA. If you pass 0 as the 'vectors' -argument, then all paths in the image will be exported. +application, or later reloaded into PIKA. Pass %NULL as the 'vectors' +argument to export all paths in the image. HELP &bill_pdb_misc('2007', '2.6'); @@ -1267,14 +1267,17 @@ HELP { name => 'file', type => 'file', desc => 'The SVG file to create.' }, { name => 'vectors', type => 'vectors', no_validate => 1, - desc => 'The vectors object to be saved, or 0 for all in the image' } + desc => 'The vectors object to export, or %NULL for all in the image' } ); %invoke = ( headers => [ qw("vectors/pikavectors-export.h") ], code => <<'CODE' { - GList *vectors_list = g_list_prepend (NULL, vectors); + GList *vectors_list = NULL; + + if (vectors != NULL) + vectors_list = g_list_prepend (vectors_list, vectors); success = pika_vectors_export_file (image, vectors_list, file, error); @@ -1289,9 +1292,9 @@ sub vectors_export_to_string { $help = <<'HELP'; This procedure works like pika_vectors_export_to_file() but creates a string -rather than a file. The contents are a NUL-terminated string that holds a -complete XML document. If you pass 0 as the 'vectors' argument, then all -paths in the image will be exported. +rather than a file. The string is NULL-terminated and holds a +complete XML document. Pass %NULL as the 'vectors' argument to export +all paths in the image. HELP &bill_pdb_misc('2007', '2.6'); @@ -1300,7 +1303,7 @@ HELP { name => 'image', type => 'image', desc => 'The image' }, { name => 'vectors', type => 'vectors', no_validate => 1, - desc => 'The vectors object to save, or 0 for all in the image' } + desc => 'The vectors object to export, or %NULL for all in the image' } ); @outargs = ( @@ -1312,7 +1315,10 @@ HELP headers => [ qw("vectors/pikavectors-export.h") ], code => <<'CODE' { - GList *vectors_list = g_list_prepend (NULL, vectors); + GList *vectors_list = NULL; + + if (vectors != NULL) + vectors_list = g_list_prepend (vectors_list, vectors); string = pika_vectors_export_string (image, vectors_list); g_list_free (vectors_list); diff --git a/plug-ins/common/file-gif-load.c b/plug-ins/common/file-gif-load.c index 53f294e..e574bf9 100644 --- a/plug-ins/common/file-gif-load.c +++ b/plug-ins/common/file-gif-load.c @@ -352,7 +352,8 @@ static struct gint delayTime; gint inputFlag; gint disposal; -} Gif89 = { -1, -1, -1, 0 }; + gint num_loops; +} Gif89 = { -1, -1, -1, 0, -1 }; static void read_error (const gchar *error_type, PikaImage *image, @@ -399,9 +400,10 @@ load_image (GFile *file, gint grayScale; gboolean useGlobalColormap; gint bitPixel; - gint imageCount = 0; - PikaImage *image = NULL; + gint imageCount = 0; + PikaImage *image = NULL; gboolean status; + gboolean saved_parasite = FALSE; pika_progress_init_printf (_("Opening '%s'"), pika_file_get_utf8_name (file)); @@ -590,6 +592,25 @@ load_image (GFile *file, /* If we are loading a thumbnail, we stop after the first frame. */ if (thumbnail) break; + + /* If there is more than one frame, we add a parasite so that + * we know to export as an animation on overwrite */ + if (Gif89.num_loops > -1 && ! saved_parasite) + { + PikaParasite *parasite; + gchar *str; + + str = g_strdup_printf ("%d", Gif89.num_loops); + parasite = pika_parasite_new ("gif/animated", + PIKA_PARASITE_PERSISTENT, + strlen (str) + 1, + (gpointer) str); + g_free (str); + + pika_image_attach_parasite (image, parasite); + pika_parasite_free (parasite); + saved_parasite = TRUE; + } } fclose (fd); @@ -690,6 +711,15 @@ DoExtension (FILE *fd, #ifdef GIFDEBUG str = "Application Extension"; #endif + /* Animation block */ + if (GetDataBlock (fd, (guchar *) buf)) + { + if (strncmp ((const gchar *) buf, "NETSCAPE2.0", 8) == 0) + { + if (GetDataBlock (fd, (guchar *) buf)) + Gif89.num_loops = (buf[0] << 8) | buf[1]; + } + } break; case 0xfe: /* Comment Extension */ #ifdef GIFDEBUG diff --git a/plug-ins/common/file-gif-save.c b/plug-ins/common/file-gif-save.c index 617185f..4e1848f 100644 --- a/plug-ins/common/file-gif-save.c +++ b/plug-ins/common/file-gif-save.c @@ -268,6 +268,7 @@ gif_save (PikaProcedure *procedure, PikaExportReturn export = PIKA_EXPORT_CANCEL; PikaImage *orig_image; PikaImage *sanitized_image = NULL; + PikaParasite *parasite = NULL; GError *error = NULL; gegl_init (NULL, NULL); @@ -288,6 +289,34 @@ gif_save (PikaProcedure *procedure, */ sanitized_image = image; + /* If imported as an animation, set the animation configurations + * when overwriting the file */ + parasite = pika_image_get_parasite (image, "gif/animated"); + if (parasite) + { + gint num_loops; + gchar *parasite_data; + guint32 parasite_size; + + parasite_data = (gchar *) pika_parasite_get_data (parasite, ¶site_size); + parasite_data = g_strndup (parasite_data, parasite_size); + + if (sscanf (parasite_data, "%i", &num_loops) == 1) + { + gboolean loop = (num_loops == 0); + + g_object_set (config, + "as-animation", TRUE, + "loop", loop, + "number-of-repeats", num_loops, + NULL); + } + + pika_image_detach_parasite (image, "gif/animated"); + g_free (parasite); + g_free (parasite_data); + } + if (run_mode == PIKA_RUN_INTERACTIVE) { if (! save_dialog (image, procedure, G_OBJECT (config))) diff --git a/plug-ins/common/file-heif.c b/plug-ins/common/file-heif.c index f2ee75b..075b22f 100644 --- a/plug-ins/common/file-heif.c +++ b/plug-ins/common/file-heif.c @@ -31,6 +31,7 @@ #define LOAD_PROC "file-heif-load" #define LOAD_PROC_AV1 "file-heif-av1-load" +#define LOAD_PROC_HEJ2 "file-heif-hej2-load" #define SAVE_PROC "file-heif-save" #define SAVE_PROC_AV1 "file-heif-av1-save" #define PLUG_IN_BINARY "file-heif" @@ -103,6 +104,8 @@ static PikaValueArray * heif_av1_save (PikaProcedure *pro #endif static PikaImage * load_image (GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, gboolean interactive, PikaPDBStatusType *status, GError **error); @@ -172,6 +175,13 @@ heif_init_procedures (PikaPlugIn *plug_in) } #endif +#if LIBHEIF_HAVE_VERSION(1,17,0) + if (heif_have_decoder_for_format (heif_compression_JPEG2000)) + { + list = g_list_append (list, g_strdup (LOAD_PROC_HEJ2)); + } +#endif + #if LIBHEIF_HAVE_VERSION(1,13,0) heif_deinit (); #endif @@ -412,6 +422,33 @@ heif_create_procedure (PikaPlugIn *plug_in, pika_export_xmp (), G_PARAM_READWRITE); } +#endif +#if LIBHEIF_HAVE_VERSION(1,17,0) + else if (! strcmp (name, LOAD_PROC_HEJ2)) + { + procedure = pika_load_procedure_new (plug_in, name, PIKA_PDB_PROC_TYPE_PLUGIN, + heif_load, NULL, NULL); + + pika_procedure_set_menu_label (procedure, _("JPEG 2000 encapsulated in HEIF")); + + pika_procedure_set_documentation (procedure, + _("Loads HEJ2 images"), + _("Load JPEG 2000 image encapsulated in HEIF (HEJ2)"), + name); + pika_procedure_set_attribution (procedure, + "Daniel Novomesky ", + "Daniel Novomesky ", + "2023"); + + pika_file_procedure_set_handles_remote (PIKA_FILE_PROCEDURE (procedure), TRUE); + pika_file_procedure_set_mime_types (PIKA_FILE_PROCEDURE (procedure), + "image/hej2k"); + pika_file_procedure_set_extensions (PIKA_FILE_PROCEDURE (procedure), + "hej2"); + + pika_file_procedure_set_magics (PIKA_FILE_PROCEDURE (procedure), + "4,string,ftypj2ki"); + } #endif return procedure; } @@ -442,7 +479,7 @@ heif_load (PikaProcedure *procedure, heif_init (NULL); #endif - image = load_image (file, interactive, &status, &error); + image = load_image (file, metadata, flags, interactive, &status, &error); #if LIBHEIF_HAVE_VERSION(1,13,0) heif_deinit (); @@ -836,10 +873,12 @@ nclx_to_pika_profile (const struct heif_color_profile_nclx *nclx) #endif PikaImage * -load_image (GFile *file, - gboolean interactive, - PikaPDBStatusType *status, - GError **error) +load_image (GFile *file, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + gboolean interactive, + PikaPDBStatusType *status, + GError **error) { GInputStream *input; goffset file_size; @@ -1267,117 +1306,111 @@ load_image (GFile *file, g_object_unref (buffer); - { - size_t exif_data_size = 0; - uint8_t *exif_data = NULL; - size_t xmp_data_size = 0; - uint8_t *xmp_data = NULL; - gint n_metadata; - heif_item_id metadata_id; + if (metadata) + { + size_t exif_data_size = 0; + uint8_t *exif_data = NULL; + size_t xmp_data_size = 0; + uint8_t *xmp_data = NULL; + gint n_metadata; + heif_item_id metadata_id; - n_metadata = - heif_image_handle_get_list_of_metadata_block_IDs (handle, - "Exif", - &metadata_id, 1); - if (n_metadata > 0) - { - exif_data_size = heif_image_handle_get_metadata_size (handle, - metadata_id); - exif_data = g_alloca (exif_data_size); + n_metadata = heif_image_handle_get_list_of_metadata_block_IDs (handle, "Exif", + &metadata_id, 1); + if (n_metadata > 0) + { + exif_data_size = heif_image_handle_get_metadata_size (handle, metadata_id); - err = heif_image_handle_get_metadata (handle, metadata_id, exif_data); - if (err.code != 0) - { - exif_data = NULL; - exif_data_size = 0; - } - } + exif_data = g_alloca (exif_data_size); - n_metadata = - heif_image_handle_get_list_of_metadata_block_IDs (handle, - "mime", - &metadata_id, 1); - if (n_metadata > 0) - { - if (g_strcmp0 ( - heif_image_handle_get_metadata_content_type (handle, metadata_id), - "application/rdf+xml") == 0) - { - xmp_data_size = heif_image_handle_get_metadata_size (handle, - metadata_id); - xmp_data = g_alloca (xmp_data_size); + err = heif_image_handle_get_metadata (handle, metadata_id, exif_data); + if (err.code != 0) + { + exif_data = NULL; + exif_data_size = 0; + } + } - err = heif_image_handle_get_metadata (handle, metadata_id, xmp_data); - if (err.code != 0) - { - xmp_data = NULL; - xmp_data_size = 0; - } - } - } + n_metadata = heif_image_handle_get_list_of_metadata_block_IDs (handle, "mime", + &metadata_id, 1); + if (n_metadata > 0) + { + if (g_strcmp0 (heif_image_handle_get_metadata_content_type (handle, metadata_id), "application/rdf+xml") + == 0) + { + xmp_data_size = heif_image_handle_get_metadata_size (handle, metadata_id); - if (exif_data || xmp_data) - { - PikaMetadata *metadata = pika_metadata_new (); - PikaMetadataLoadFlags flags = PIKA_METADATA_LOAD_COMMENT | PIKA_METADATA_LOAD_RESOLUTION; + xmp_data = g_alloca (xmp_data_size); - if (exif_data) - { - const guint8 tiffHeaderBE[4] = { 'M', 'M', 0, 42 }; - const guint8 tiffHeaderLE[4] = { 'I', 'I', 42, 0 }; - GExiv2Metadata *exif_metadata = GEXIV2_METADATA (metadata); - const guint8 *tiffheader = exif_data; - glong new_exif_size = exif_data_size; + err = heif_image_handle_get_metadata (handle, metadata_id, xmp_data); + if (err.code != 0) + { + xmp_data = NULL; + xmp_data_size = 0; + } + } + } - while (new_exif_size >= 4) /*Searching for TIFF Header*/ - { - if (tiffheader[0] == tiffHeaderBE[0] && tiffheader[1] == tiffHeaderBE[1] && - tiffheader[2] == tiffHeaderBE[2] && tiffheader[3] == tiffHeaderBE[3]) - { - break; - } - if (tiffheader[0] == tiffHeaderLE[0] && tiffheader[1] == tiffHeaderLE[1] && - tiffheader[2] == tiffHeaderLE[2] && tiffheader[3] == tiffHeaderLE[3]) - { - break; - } - new_exif_size--; - tiffheader++; - } + if (exif_data || xmp_data) + { + gexiv2_metadata_clear (GEXIV2_METADATA (metadata)); - if (new_exif_size > 4) /* TIFF header + some data found*/ - { - if (! gexiv2_metadata_open_buf (exif_metadata, tiffheader, new_exif_size, error)) - { - g_printerr ("%s: Failed to set EXIF metadata: %s\n", G_STRFUNC, (*error)->message); - g_clear_error (error); - } - } - else - { - g_printerr ("%s: EXIF metadata not set\n", G_STRFUNC); - } - } + if (exif_data) + { + const guint8 tiffHeaderBE[4] = { 'M', 'M', 0, 42 }; + const guint8 tiffHeaderLE[4] = { 'I', 'I', 42, 0 }; + GExiv2Metadata *exif_metadata = GEXIV2_METADATA (metadata); + const guint8 *tiffheader = exif_data; + glong new_exif_size = exif_data_size; - if (xmp_data) - { - if (!pika_metadata_set_from_xmp (metadata, xmp_data, xmp_data_size, error)) - { - g_printerr ("%s: Failed to set XMP metadata: %s\n", G_STRFUNC, (*error)->message); - g_clear_error (error); - } - } + while (new_exif_size >= 4) /*Searching for TIFF Header*/ + { + if (tiffheader[0] == tiffHeaderBE[0] && tiffheader[1] == tiffHeaderBE[1] && + tiffheader[2] == tiffHeaderBE[2] && tiffheader[3] == tiffHeaderBE[3]) + { + break; + } + if (tiffheader[0] == tiffHeaderLE[0] && tiffheader[1] == tiffHeaderLE[1] && + tiffheader[2] == tiffHeaderLE[2] && tiffheader[3] == tiffHeaderLE[3]) + { + break; + } + new_exif_size--; + tiffheader++; + } - gexiv2_metadata_try_set_orientation (GEXIV2_METADATA (metadata), - GEXIV2_ORIENTATION_NORMAL, NULL); - gexiv2_metadata_try_set_metadata_pixel_width (GEXIV2_METADATA (metadata), - width, NULL); - gexiv2_metadata_try_set_metadata_pixel_height (GEXIV2_METADATA (metadata), - height, NULL); - pika_image_metadata_load_finish (image, "image/heif", - metadata, flags); - } - } + if (new_exif_size > 4) /* TIFF header + some data found*/ + { + if (! gexiv2_metadata_open_buf (exif_metadata, tiffheader, new_exif_size, error)) + { + g_printerr ("%s: Failed to set EXIF metadata: %s\n", G_STRFUNC, (*error)->message); + g_clear_error (error); + } + } + else + { + g_printerr ("%s: EXIF metadata not set\n", G_STRFUNC); + } + } + + if (xmp_data) + { + if (! pika_metadata_set_from_xmp (metadata, xmp_data, xmp_data_size, error)) + { + g_printerr ("%s: Failed to set XMP metadata: %s\n", G_STRFUNC, (*error)->message); + g_clear_error (error); + } + } + } + + gexiv2_metadata_try_set_orientation (GEXIV2_METADATA (metadata), + GEXIV2_ORIENTATION_NORMAL, NULL); + gexiv2_metadata_try_set_metadata_pixel_width (GEXIV2_METADATA (metadata), width, NULL); + gexiv2_metadata_try_set_metadata_pixel_height (GEXIV2_METADATA (metadata), + height, NULL); + + *flags = PIKA_METADATA_LOAD_COMMENT | PIKA_METADATA_LOAD_RESOLUTION; + } if (profile) g_object_unref (profile); diff --git a/plug-ins/common/file-iff.c b/plug-ins/common/file-iff.c index d31fb7f..e7f1ea8 100644 --- a/plug-ins/common/file-iff.c +++ b/plug-ins/common/file-iff.c @@ -230,10 +230,10 @@ load_image (GFile *file, { ILBM_Image *true_image = iff_image[i]; /* Struct representing bitmap header properties */ - ILBM_BitMapHeader *bitMapHeader = true_image->bitMapHeader; + ILBM_BitMapHeader *bitMapHeader; /* Struct containing the color palette */ - ILBM_ColorMap *colorMap = true_image->colorMap; - ILBM_Viewport *camg = true_image->viewport; + ILBM_ColorMap *colorMap; + ILBM_Viewport *camg; IFF_UByte *bitplanes; PikaImageType image_type; guchar pika_cmap[768]; /* Max index is (2^nplanes) - 1 */ @@ -244,29 +244,38 @@ load_image (GFile *file, gint row_length; gint pixel_size = 1; gint y_height = 0; + gint aspect_x = 0; + gint aspect_y = 0; gboolean ehb_mode = FALSE; gboolean ham_mode = FALSE; - if (! true_image || ! bitMapHeader) + if (! true_image) { g_message (_("Invalid or missing ILBM image")); return image; } - if (! true_image->body) - { - g_message (_("ILBM contains no image data - likely a palette file")); - return NULL; - } + + colorMap = true_image->colorMap; + camg = true_image->viewport; /* Convert ACBM files to ILBM format */ if (ILBM_imageIsACBM (true_image)) ILBM_convertACBMToILBM (true_image); + bitMapHeader = true_image->bitMapHeader; + if (! bitMapHeader || ! true_image->body) + { + g_message (_("ILBM contains no image data - likely a palette file")); + return NULL; + } + width = bitMapHeader->w; height = bitMapHeader->h; nPlanes = bitMapHeader->nPlanes; row_length = (width + 15) / 16; pixel_size = nPlanes / 8; + aspect_x = bitMapHeader->xAspect; + aspect_y = bitMapHeader->yAspect; /* Check for ILBM variants in CMAG chunk */ if (camg) @@ -329,8 +338,9 @@ load_image (GFile *file, ILBM_unpackByteRun (true_image); - image = pika_image_new (width, height, - pixel_size == 1 ? PIKA_INDEXED : PIKA_RGB); + if (! image) + image = pika_image_new (width, height, + pixel_size == 1 ? PIKA_INDEXED : PIKA_RGB); layer = pika_layer_new (image, _("Background"), width, height, image_type, 100, @@ -341,6 +351,24 @@ load_image (GFile *file, bitplanes = true_image->body->chunkData; + /* Setting resolution for non-square pixel aspect ratios */ + if (aspect_x != aspect_y && aspect_x > 0 && aspect_y > 0) + { + gdouble image_xres; + gdouble image_yres; + gfloat ratio = (gfloat) aspect_x / aspect_y; + + g_message (_("Non-square pixels. Image might look squashed if " + "Dot for Dot mode is enabled.")); + + pika_image_get_resolution (image, &image_xres, &image_yres); + if (ratio < 1) + image_xres = image_yres * (1 / ratio); + else + image_yres = image_xres * ratio; + pika_image_set_resolution (image, image_xres, image_yres); + } + /* Loading rows */ for (gint j = 0; j < height; j++) { diff --git a/plug-ins/common/file-jpegxl.c b/plug-ins/common/file-jpegxl.c index 8985da4..28342a4 100644 --- a/plug-ins/common/file-jpegxl.c +++ b/plug-ins/common/file-jpegxl.c @@ -396,9 +396,11 @@ create_cmyk_layer (PikaImage *image, } static PikaImage * -load_image (GFile *file, - PikaRunMode runmode, - GError **error) +load_image (GFile *file, + PikaRunMode runmode, + PikaMetadata *metadata, + PikaMetadataLoadFlags *flags, + GError **error) { FILE *inputFile = g_fopen (g_file_peek_path (file), "rb"); @@ -430,6 +432,7 @@ load_image (GFile *file, const Babl *type; PikaPrecision precision_linear; PikaPrecision precision_non_linear; + uint32_t i; if (!inputFile) { @@ -637,7 +640,7 @@ load_image (GFile *file, } /* Check for extra channels */ - for (gint32 i = 0; i < basicinfo.num_extra_channels; i++) + for (i = 0; i < basicinfo.num_extra_channels; i++) { JxlExtraChannelInfo extra; @@ -936,205 +939,208 @@ load_image (GFile *file, g_object_unref (profile); } - if (basicinfo.have_container) + if (metadata) { - JxlDecoderReleaseInput (decoder); - JxlDecoderRewind (decoder); + if (basicinfo.have_container) + { + JxlDecoderReleaseInput (decoder); + JxlDecoderRewind (decoder); - if (JxlDecoderSetInput (decoder, memory, inputFileSize) != JXL_DEC_SUCCESS) - { - g_printerr ("%s: JxlDecoderSetInput failed after JxlDecoderRewind\n", G_STRFUNC); - } - else - { - JxlDecoderCloseInput (decoder); - if (JxlDecoderSubscribeEvents (decoder, JXL_DEC_BOX) != JXL_DEC_SUCCESS) + if (JxlDecoderSetInput (decoder, memory, inputFileSize) != JXL_DEC_SUCCESS) { - g_printerr ("%s: JxlDecoderSubscribeEvents for JXL_DEC_BOX failed\n", G_STRFUNC); + g_printerr ("%s: JxlDecoderSetInput failed after JxlDecoderRewind\n", G_STRFUNC); } else { - gboolean search_exif = TRUE; - gboolean search_xmp = TRUE; - gboolean success_exif = FALSE; - gboolean success_xmp = FALSE; - JxlBoxType box_type = { 0, 0, 0, 0 }; - GByteArray *exif_box = NULL; - GByteArray *xml_box = NULL; - size_t exif_remains = 0; - size_t xml_remains = 0; - - while (search_exif || search_xmp) + JxlDecoderCloseInput (decoder); + if (JxlDecoderSubscribeEvents (decoder, JXL_DEC_BOX) != JXL_DEC_SUCCESS) { - status = JxlDecoderProcessInput (decoder); - switch (status) + g_printerr ("%s: JxlDecoderSubscribeEvents for JXL_DEC_BOX failed\n", G_STRFUNC); + } + else + { + gboolean search_exif = TRUE; + gboolean search_xmp = TRUE; + gboolean success_exif = FALSE; + gboolean success_xmp = FALSE; + JxlBoxType box_type = { 0, 0, 0, 0 }; + GByteArray *exif_box = NULL; + GByteArray *xml_box = NULL; + size_t exif_remains = 0; + size_t xml_remains = 0; + + while (search_exif || search_xmp) { - case JXL_DEC_SUCCESS: - if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif) - { - exif_remains = JxlDecoderReleaseBoxBuffer (decoder); - g_byte_array_set_size (exif_box, exif_box->len - exif_remains); - success_exif = TRUE; - } - else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp) - { - xml_remains = JxlDecoderReleaseBoxBuffer (decoder); - g_byte_array_set_size (xml_box, xml_box->len - xml_remains); - success_xmp = TRUE; - } - - search_exif = FALSE; - search_xmp = FALSE; - break; - case JXL_DEC_ERROR: - search_exif = FALSE; - search_xmp = FALSE; - g_printerr ("%s: Metadata decoding error\n", G_STRFUNC); - break; - case JXL_DEC_NEED_MORE_INPUT: - search_exif = FALSE; - search_xmp = FALSE; - g_printerr ("%s: JXL metadata are probably incomplete\n", G_STRFUNC); - break; - case JXL_DEC_BOX: - JxlDecoderSetDecompressBoxes (decoder, JXL_TRUE); - - if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif && exif_box) - { - exif_remains = JxlDecoderReleaseBoxBuffer (decoder); - g_byte_array_set_size (exif_box, exif_box->len - exif_remains); - - search_exif = FALSE; - success_exif = TRUE; - } - else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp && xml_box) - { - xml_remains = JxlDecoderReleaseBoxBuffer (decoder); - g_byte_array_set_size (xml_box, xml_box->len - xml_remains); - - search_xmp = FALSE; - success_xmp = TRUE; - } - - if (JxlDecoderGetBoxType (decoder, box_type, JXL_TRUE) == JXL_DEC_SUCCESS) + status = JxlDecoderProcessInput (decoder); + switch (status) { + case JXL_DEC_SUCCESS: if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif) { - exif_box = g_byte_array_sized_new (4096); - g_byte_array_set_size (exif_box, 4096); - - JxlDecoderSetBoxBuffer (decoder, exif_box->data, exif_box->len); + exif_remains = JxlDecoderReleaseBoxBuffer (decoder); + g_byte_array_set_size (exif_box, exif_box->len - exif_remains); + success_exif = TRUE; } else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp) { - xml_box = g_byte_array_sized_new (4096); - g_byte_array_set_size (xml_box, 4096); - - JxlDecoderSetBoxBuffer (decoder, xml_box->data, xml_box->len); + xml_remains = JxlDecoderReleaseBoxBuffer (decoder); + g_byte_array_set_size (xml_box, xml_box->len - xml_remains); + success_xmp = TRUE; } - } - else - { + search_exif = FALSE; search_xmp = FALSE; - g_printerr ("%s: Error in JxlDecoderGetBoxType\n", G_STRFUNC); - } - break; - case JXL_DEC_BOX_NEED_MORE_OUTPUT: - if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif) - { - exif_remains = JxlDecoderReleaseBoxBuffer (decoder); - g_byte_array_set_size (exif_box, exif_box->len + 4096); - JxlDecoderSetBoxBuffer (decoder, exif_box->data + exif_box->len - (4096 + exif_remains), 4096 + exif_remains); - } - else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp) - { - xml_remains = JxlDecoderReleaseBoxBuffer (decoder); - g_byte_array_set_size (xml_box, xml_box->len + 4096); - JxlDecoderSetBoxBuffer (decoder, xml_box->data + xml_box->len - (4096 + xml_remains), 4096 + xml_remains); - } - else - { + break; + case JXL_DEC_ERROR: search_exif = FALSE; search_xmp = FALSE; + g_printerr ("%s: Metadata decoding error\n", G_STRFUNC); + break; + case JXL_DEC_NEED_MORE_INPUT: + search_exif = FALSE; + search_xmp = FALSE; + g_printerr ("%s: JXL metadata are probably incomplete\n", G_STRFUNC); + break; + case JXL_DEC_BOX: + JxlDecoderSetDecompressBoxes (decoder, JXL_TRUE); + + if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif && exif_box) + { + exif_remains = JxlDecoderReleaseBoxBuffer (decoder); + g_byte_array_set_size (exif_box, exif_box->len - exif_remains); + + search_exif = FALSE; + success_exif = TRUE; + } + else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp && xml_box) + { + xml_remains = JxlDecoderReleaseBoxBuffer (decoder); + g_byte_array_set_size (xml_box, xml_box->len - xml_remains); + + search_xmp = FALSE; + success_xmp = TRUE; + } + + if (JxlDecoderGetBoxType (decoder, box_type, JXL_TRUE) == JXL_DEC_SUCCESS) + { + if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif) + { + exif_box = g_byte_array_sized_new (4096); + g_byte_array_set_size (exif_box, 4096); + + JxlDecoderSetBoxBuffer (decoder, exif_box->data, exif_box->len); + } + else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp) + { + xml_box = g_byte_array_sized_new (4096); + g_byte_array_set_size (xml_box, 4096); + + JxlDecoderSetBoxBuffer (decoder, xml_box->data, xml_box->len); + } + } + else + { + search_exif = FALSE; + search_xmp = FALSE; + g_printerr ("%s: Error in JxlDecoderGetBoxType\n", G_STRFUNC); + } + break; + case JXL_DEC_BOX_NEED_MORE_OUTPUT: + if (box_type[0] == 'E' && box_type[1] == 'x' && box_type[2] == 'i' && box_type[3] == 'f' && search_exif) + { + exif_remains = JxlDecoderReleaseBoxBuffer (decoder); + g_byte_array_set_size (exif_box, exif_box->len + 4096); + JxlDecoderSetBoxBuffer (decoder, exif_box->data + exif_box->len - (4096 + exif_remains), 4096 + exif_remains); + } + else if (box_type[0] == 'x' && box_type[1] == 'm' && box_type[2] == 'l' && box_type[3] == ' ' && search_xmp) + { + xml_remains = JxlDecoderReleaseBoxBuffer (decoder); + g_byte_array_set_size (xml_box, xml_box->len + 4096); + JxlDecoderSetBoxBuffer (decoder, xml_box->data + xml_box->len - (4096 + xml_remains), 4096 + xml_remains); + } + else + { + search_exif = FALSE; + search_xmp = FALSE; + } + break; + default: + break; } - break; - default: - break; } - } - if (success_exif || success_xmp) - { - PikaMetadata *metadata = pika_metadata_new (); - - if (success_exif && exif_box) + if (success_exif || success_xmp) { - const guint8 tiffHeaderBE[4] = { 'M', 'M', 0, 42 }; - const guint8 tiffHeaderLE[4] = { 'I', 'I', 42, 0 }; - const guint8 *tiffheader = exif_box->data; - glong new_exif_size = exif_box->len; + gexiv2_metadata_clear (GEXIV2_METADATA (metadata)); - while (new_exif_size >= 4) /*Searching for TIFF Header*/ + if (success_exif && exif_box) { - if (tiffheader[0] == tiffHeaderBE[0] && tiffheader[1] == tiffHeaderBE[1] && - tiffheader[2] == tiffHeaderBE[2] && tiffheader[3] == tiffHeaderBE[3]) + const guint8 tiffHeaderBE[4] = { 'M', 'M', 0, 42 }; + const guint8 tiffHeaderLE[4] = { 'I', 'I', 42, 0 }; + const guint8 *tiffheader = exif_box->data; + glong new_exif_size = exif_box->len; + + while (new_exif_size >= 4) /*Searching for TIFF Header*/ { - break; + if (tiffheader[0] == tiffHeaderBE[0] && tiffheader[1] == tiffHeaderBE[1] && + tiffheader[2] == tiffHeaderBE[2] && tiffheader[3] == tiffHeaderBE[3]) + { + break; + } + if (tiffheader[0] == tiffHeaderLE[0] && tiffheader[1] == tiffHeaderLE[1] && + tiffheader[2] == tiffHeaderLE[2] && tiffheader[3] == tiffHeaderLE[3]) + { + break; + } + new_exif_size--; + tiffheader++; } - if (tiffheader[0] == tiffHeaderLE[0] && tiffheader[1] == tiffHeaderLE[1] && - tiffheader[2] == tiffHeaderLE[2] && tiffheader[3] == tiffHeaderLE[3]) + + if (new_exif_size > 4) /* TIFF header + some data found*/ { - break; + if (! gexiv2_metadata_open_buf (GEXIV2_METADATA (metadata), tiffheader, new_exif_size, error)) + { + g_printerr ("%s: Failed to set EXIF metadata: %s\n", G_STRFUNC, (*error)->message); + g_clear_error (error); + } + } + else + { + g_printerr ("%s: EXIF metadata not set\n", G_STRFUNC); } - new_exif_size--; - tiffheader++; } - if (new_exif_size > 4) /* TIFF header + some data found*/ + if (success_xmp && xml_box) { - if (! gexiv2_metadata_open_buf (GEXIV2_METADATA (metadata), tiffheader, new_exif_size, error)) + if (! pika_metadata_set_from_xmp (metadata, xml_box->data, xml_box->len, error)) { - g_printerr ("%s: Failed to set EXIF metadata: %s\n", G_STRFUNC, (*error)->message); + g_printerr ("%s: Failed to set XMP metadata: %s\n", G_STRFUNC, (*error)->message); g_clear_error (error); } } - else - { - g_printerr ("%s: EXIF metadata not set\n", G_STRFUNC); - } } - if (success_xmp && xml_box) + if (exif_box) { - if (! pika_metadata_set_from_xmp (metadata, xml_box->data, xml_box->len, error)) - { - g_printerr ("%s: Failed to set XMP metadata: %s\n", G_STRFUNC, (*error)->message); - g_clear_error (error); - } + g_byte_array_free (exif_box, TRUE); } - gexiv2_metadata_try_set_orientation (GEXIV2_METADATA (metadata), - GEXIV2_ORIENTATION_NORMAL, NULL); - gexiv2_metadata_try_set_metadata_pixel_width (GEXIV2_METADATA (metadata), - basicinfo.xsize, NULL); - gexiv2_metadata_try_set_metadata_pixel_height (GEXIV2_METADATA (metadata), - basicinfo.ysize, NULL); - pika_image_metadata_load_finish (image, "image/jxl", metadata, - PIKA_METADATA_LOAD_COMMENT | PIKA_METADATA_LOAD_RESOLUTION); - } - - if (exif_box) - { - g_byte_array_free (exif_box, TRUE); - } - - if (xml_box) - { - g_byte_array_free (xml_box, TRUE); + if (xml_box) + { + g_byte_array_free (xml_box, TRUE); + } } } } + + gexiv2_metadata_try_set_orientation (GEXIV2_METADATA (metadata), + GEXIV2_ORIENTATION_NORMAL, NULL); + gexiv2_metadata_try_set_metadata_pixel_width (GEXIV2_METADATA (metadata), + basicinfo.xsize, NULL); + gexiv2_metadata_try_set_metadata_pixel_height (GEXIV2_METADATA (metadata), + basicinfo.ysize, NULL); + + *flags = PIKA_METADATA_LOAD_COMMENT | PIKA_METADATA_LOAD_RESOLUTION; } JxlThreadParallelRunnerDestroy (runner); @@ -1158,7 +1164,7 @@ jpegxl_load (PikaProcedure *procedure, gegl_init (NULL, NULL); - image = load_image (file, run_mode, &error); + image = load_image (file, run_mode, metadata, flags, &error); if (! image) return pika_procedure_new_return_values (procedure, diff --git a/plug-ins/common/file-pdf-save.c b/plug-ins/common/file-pdf-save.c index b9b2c7a..6f510aa 100644 --- a/plug-ins/common/file-pdf-save.c +++ b/plug-ins/common/file-pdf-save.c @@ -886,12 +886,13 @@ gui_single (PikaProcedure *procedure, PikaProcedureConfig *config, PikaImage *image) { - GtkWidget *window; - GtkWidget *widget; - GList *missing_fonts; - GList *dialog_props = NULL; - gboolean run; - gint32 n_layers; + GtkWidget *window; + GtkWidget *widget; + PikaLayer **layers; + GList *missing_fonts; + GList *dialog_props = NULL; + gboolean run; + gint32 n_layers; pika_ui_init (PLUG_IN_BINARY); @@ -910,7 +911,13 @@ gui_single (PikaProcedure *procedure, widget = pika_procedure_dialog_fill_frame (PIKA_PROCEDURE_DIALOG (window), "pages-frame", "layers-as-pages", FALSE, "pages-box"); - g_free (pika_image_get_layers (multi_page.images[0], &n_layers)); + /* Enable "layers-as-pages" if more than one layer, or there's a single + * layer group has more than one layer */ + layers = pika_image_get_layers (multi_page.images[0], &n_layers); + if (n_layers == 1 && pika_item_is_group (PIKA_ITEM (layers[0]))) + g_free (pika_item_get_children (PIKA_ITEM (layers[0]), &n_layers)); + g_free (layers); + gtk_widget_set_sensitive (widget, n_layers > 1); /* Warning for missing fonts (non-embeddable with rasterization diff --git a/plug-ins/common/file-png.c b/plug-ins/common/file-png.c index cecef70..25c6713 100644 --- a/plug-ins/common/file-png.c +++ b/plug-ins/common/file-png.c @@ -65,6 +65,7 @@ typedef enum _PngExportformat PNG_FORMAT_GRAYA16 } PngExportFormat; +static GSList *safe_to_copy_chunks; typedef struct _Png Png; typedef struct _PngClass PngClass; @@ -139,6 +140,9 @@ static gboolean ia_has_transparent_pixels (GeglBuffer *buffer); static gint find_unused_ia_color (GeglBuffer *buffer, gint *colors); +static gint read_unknown_chunk (png_structp png_ptr, + png_unknown_chunkp chunk); + G_DEFINE_TYPE (Png, png, PIKA_TYPE_PLUG_IN) @@ -602,6 +606,7 @@ load_image (GFile *file, const Babl *file_format; /* BABL format for layer */ png_structp pp; /* PNG read pointer */ png_infop info; /* PNG info pointers */ + png_voidp user_chunkp; /* PNG unknown chunk pointer */ guchar **pixels; /* Pixel rows */ guchar *pixel; /* Pixel data */ guchar alpha[256]; /* Index -> Alpha */ @@ -609,6 +614,8 @@ load_image (GFile *file, gint num_texts; struct read_error_data error_data; + safe_to_copy_chunks = NULL; + pp = png_create_read_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL); if (! pp) { @@ -667,6 +674,11 @@ load_image (GFile *file, png_init_io (pp, fp); png_set_compression_buffer_size (pp, 512); + /* Set up callback to save "safe to copy" chunks */ + png_set_keep_unknown_chunks (pp, PNG_HANDLE_CHUNK_IF_SAFE, NULL, 0); + user_chunkp = png_get_user_chunk_ptr (pp); + png_set_read_user_chunk_fn (pp, user_chunkp, read_unknown_chunk); + /* * Get the image info */ @@ -1184,6 +1196,23 @@ load_image (GFile *file, g_object_unref (buffer); } + /* If any safe-to-copy chunks were saved, + * store them in the image as parasite */ + if (safe_to_copy_chunks) + { + GSList *iter; + + for (iter = safe_to_copy_chunks; iter; iter = iter->next) + { + PikaParasite *parasite = iter->data; + + pika_image_attach_parasite ((PikaImage *) image, parasite); + pika_parasite_free (parasite); + } + + g_slist_free (safe_to_copy_chunks); + } + return (PikaImage *) image; } @@ -1292,6 +1321,7 @@ save_image (GFile *file, gint num; /* Number of rows to load */ FILE *fp; /* File pointer */ PikaColorProfile *profile = NULL; /* Color profile */ + gchar **parasites; /* Safe-to-copy chunks */ gboolean out_linear; /* Save linear RGB */ GeglBuffer *buffer; /* GEGL buffer for layer */ const Babl *file_format = NULL; /* BABL format of file */ @@ -1914,6 +1944,51 @@ save_image (GFile *file, if (G_BYTE_ORDER == G_LITTLE_ENDIAN) png_set_swap (pp); + /* Write any safe-to-copy chunks saved from import */ + parasites = pika_image_get_parasite_list (image); + + if (parasites) + { + gint count; + + count = g_strv_length (parasites); + for (gint i = 0; i < count; i++) + { + if (strncmp (parasites[i], "png", 3) == 0) + { + PikaParasite *parasite; + + parasite = pika_image_get_parasite (image, parasites[i]); + + if (parasite) + { + gchar buf[1024]; + gchar *chunk_name; + + g_strlcpy (buf, parasites[i], sizeof (buf)); + chunk_name = strchr (buf, '/'); + chunk_name++; + + if (chunk_name) + { + png_byte name[4]; + const guint8 *data; + guint32 len; + + for (gint j = 0; j < 4; j++) + name[j] = chunk_name[j]; + + data = (const guint8 *) pika_parasite_get_data (parasite, &len); + + png_write_chunk (pp, name, data, len); + } + pika_parasite_free (parasite); + } + } + } + } + g_strfreev (parasites); + /* * Turn on interlace handling... */ @@ -2263,6 +2338,28 @@ respin_cmap (png_structp pp, return get_bit_depth_for_palette (colors); } +static gint +read_unknown_chunk (png_structp png_ptr, + png_unknown_chunkp chunk) +{ + /* Chunks with a lowercase letter in the 4th byte + * are safe to copy */ + if (g_ascii_islower (chunk->name[3])) + { + PikaParasite *parasite; + gchar pname[255]; + + g_snprintf (pname, sizeof (pname), "png/%s", chunk->name); + + if ((parasite = pika_parasite_new (pname, + PIKA_PARASITE_PERSISTENT, + chunk->size, chunk->data))) + safe_to_copy_chunks = g_slist_prepend (safe_to_copy_chunks, parasite); + } + + return 0; +} + static gboolean save_dialog (PikaImage *image, PikaProcedure *procedure, diff --git a/plug-ins/common/file-pnm.c b/plug-ins/common/file-pnm.c index 4f7ff4b..9be4faf 100644 --- a/plug-ins/common/file-pnm.c +++ b/plug-ins/common/file-pnm.c @@ -944,7 +944,7 @@ process_pam_header (PNMScanner *scan, { /* skip unknown headers but recognize xv's thumbnail format */ CHECK_FOR_ERROR (g_ascii_isdigit (*buf), pnminfo->jmpbuf, - _("PAM: Unsupported inofficial PNM variant.")); + _("PAM: Unsupported unofficial PNM variant.")); } } CHECK_FOR_ERROR (pnmscanner_eof (scan), pnminfo->jmpbuf, diff --git a/plug-ins/common/van-gogh-lic.c b/plug-ins/common/van-gogh-lic.c index d61a35d..47d4300 100644 --- a/plug-ins/common/van-gogh-lic.c +++ b/plug-ins/common/van-gogh-lic.c @@ -77,7 +77,7 @@ struct _LicClass #define LIC_TYPE (lic_get_type ()) -#define LIC (obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIC_TYPE, Lic)) +#define LIC(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), LIC_TYPE, Lic)) GType lic_get_type (void) G_GNUC_CONST; diff --git a/plug-ins/file-bmp/bmp-load.c b/plug-ins/file-bmp/bmp-load.c index 9f119fd..5e2ed9a 100644 --- a/plug-ins/file-bmp/bmp-load.c +++ b/plug-ins/file-bmp/bmp-load.c @@ -381,6 +381,7 @@ load_image (GFile *file, _("Unsupported compression (%u) in BMP file from '%s'"), bitmap_head.biCompr, pika_file_get_utf8_name (file)); + goto out; } #ifdef DEBUG diff --git a/plug-ins/file-dds/dds.c b/plug-ins/file-dds/dds.c index 2f4be26..295f82a 100644 --- a/plug-ins/file-dds/dds.c +++ b/plug-ins/file-dds/dds.c @@ -42,10 +42,6 @@ #define LOAD_PROC "file-dds-load" #define SAVE_PROC "file-dds-save" -#define DECODE_YCOCG_PROC "color-decode-ycocg" -#define DECODE_YCOCG_SCALED_PROC "color-decode-ycocg-scaled" -#define DECODE_ALPHA_EXP_PROC "color-decode-alpha-exp" - typedef struct _Dds Dds; typedef struct _DdsClass DdsClass; @@ -86,15 +82,6 @@ static PikaValueArray * dds_save (PikaProcedure *procedure, PikaMetadata *metadata, PikaProcedureConfig *config, gpointer run_data); -#if 0 -static PikaValueArray * dds_decode (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - PikaProcedureConfig *config, - gpointer run_data); -#endif G_DEFINE_TYPE (Dds, dds, PIKA_TYPE_PLUG_IN) @@ -125,11 +112,6 @@ dds_query_procedures (PikaPlugIn *plug_in) list = g_list_append (list, g_strdup (LOAD_PROC)); list = g_list_append (list, g_strdup (SAVE_PROC)); -#if 0 - list = g_list_append (list, g_strdup (DECODE_YCOCG_PROC)); - list = g_list_append (list, g_strdup (DECODE_YCOCG_SCALED_PROC)); - list = g_list_append (list, g_strdup (DECODE_ALPHA_EXP_PROC)); -#endif return list; } @@ -170,10 +152,10 @@ dds_create_procedure (PikaPlugIn *plug_in, TRUE, G_PARAM_READWRITE); - PIKA_PROC_ARG_BOOLEAN (procedure, "decode-images", - _("Automatically decode YCoCg/AE_xp images when detected"), - _("Decode YCoCg/AExp images when detected"), - TRUE, + PIKA_PROC_ARG_BOOLEAN (procedure, "flip-image", + _("Flip image _vertically"), + _("Flip the image vertically on import"), + FALSE, G_PARAM_READWRITE); } else if (! strcmp (name, SAVE_PROC)) @@ -249,13 +231,17 @@ dds_create_procedure (PikaPlugIn *plug_in, "default", G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "save-type", - "Save type", - "How to save the image (0 = selected layer, " - "1 = cube map, 2 = volume map, 3 = texture array, " - "4 = all visible layers)", - 0, 4, DDS_SAVE_SELECTED_LAYER, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "save-type", + _("Sav_e type"), + _("How to save the image"), + pika_choice_new_with_values ("layer", DDS_SAVE_SELECTED_LAYER, _("Selected layer"), NULL, + "canvas", DDS_SAVE_VISIBLE_LAYERS, _("All visible layers"), NULL, + "cube", DDS_SAVE_CUBEMAP, _("As cube map"), NULL, + "volume", DDS_SAVE_VOLUMEMAP, _("As volume map"), NULL, + "array", DDS_SAVE_ARRAY, _("As texture array"), NULL, + NULL), + "layer", + G_PARAM_READWRITE); PIKA_PROC_ARG_BOOLEAN (procedure, "flip-image", _("Flip image _vertically on export"), @@ -276,26 +262,29 @@ dds_create_procedure (PikaPlugIn *plug_in, 0, 255, 0, G_PARAM_READWRITE); - PIKA_PROC_ARG_INT (procedure, "mipmaps", - "Mipmaps", - "How to handle mipmaps (0 = No mipmaps, " - "1 = Generate mipmaps, " - "2 = Use existing mipmaps (layers)", - 0, 2, DDS_MIPMAP_NONE, - G_PARAM_READWRITE); + PIKA_PROC_ARG_CHOICE (procedure, "mipmaps", + _("_Mipmaps"), + _("How to handle mipmaps"), + pika_choice_new_with_values ("none", DDS_MIPMAP_NONE, _("No mipmaps"), NULL, + "generate", DDS_MIPMAP_GENERATE, _("Generate mipmaps"), NULL, + "existing", DDS_MIPMAP_EXISTING, _("Use existing mipmaps"), NULL, + NULL), + "none", + G_PARAM_READWRITE); PIKA_PROC_ARG_CHOICE (procedure, "mipmap-filter", _("F_ilter"), _("Filtering to use when generating mipmaps"), - pika_choice_new_with_values ("default", DDS_MIPMAP_FILTER_DEFAULT, _("Default"), NULL, - "nearest", DDS_MIPMAP_FILTER_NEAREST, _("Nearest"), NULL, - "box", DDS_MIPMAP_FILTER_BOX, _("Box"), NULL, - "triangle", DDS_MIPMAP_FILTER_TRIANGLE, _("Triangle"), NULL, - "quadratic", DDS_MIPMAP_FILTER_QUADRATIC, _("Quadratic"), NULL, - "bspline", DDS_MIPMAP_FILTER_BSPLINE, _("B-Spline"), NULL, - "mitchell", DDS_MIPMAP_FILTER_MITCHELL, _("Mitchell"), NULL, - "lanczos", DDS_MIPMAP_FILTER_LANCZOS, _("Lanczos"), NULL, - "kaiser", DDS_MIPMAP_FILTER_KAISER, _("Kaiser"), NULL, + pika_choice_new_with_values ("default", DDS_MIPMAP_FILTER_DEFAULT, _("Default"), NULL, + "nearest", DDS_MIPMAP_FILTER_NEAREST, _("Nearest"), NULL, + "box", DDS_MIPMAP_FILTER_BOX, _("Box"), NULL, + "triangle", DDS_MIPMAP_FILTER_TRIANGLE, _("Triangle"), NULL, + "quadratic", DDS_MIPMAP_FILTER_QUADRATIC, _("Quadratic"), NULL, + "bspline", DDS_MIPMAP_FILTER_BSPLINE, _("B-Spline"), NULL, + "mitchell", DDS_MIPMAP_FILTER_MITCHELL, _("Mitchell"), NULL, + "catrom", DDS_MIPMAP_FILTER_CATROM, _("Catmull-Rom"), NULL, + "lanczos", DDS_MIPMAP_FILTER_LANCZOS, _("Lanczos"), NULL, + "kaiser", DDS_MIPMAP_FILTER_KAISER, _("Kaiser"), NULL, NULL), "default", G_PARAM_READWRITE); @@ -343,78 +332,6 @@ dds_create_procedure (PikaPlugIn *plug_in, 0.0, 1.0, 0.5, G_PARAM_READWRITE); } -#if 0 - else if (! strcmp (name, DECODE_YCOCG_PROC)) - { - procedure = pika_image_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - dds_decode, NULL, NULL); - - pika_procedure_set_image_types (procedure, "RGBA"); - pika_procedure_set_sensitivity_mask (procedure, - PIKA_PROCEDURE_SENSITIVE_DRAWABLE); - - pika_procedure_set_menu_label (procedure, _("Decode YCoCg")); - /* pika_procedure_add_menu_path (procedure, "/Filters/Colors"); */ - - pika_procedure_set_documentation (procedure, - _("Converts YCoCg encoded pixels to RGB"), - _("Converts YCoCg encoded pixels to RGB"), - name); - pika_procedure_set_attribution (procedure, - "Shawn Kirst", - "Shawn Kirst", - "2008"); - } - else if (! strcmp (name, DECODE_YCOCG_SCALED_PROC)) - { - procedure = pika_image_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - dds_decode, NULL, NULL); - - pika_procedure_set_image_types (procedure, "RGBA"); - pika_procedure_set_sensitivity_mask (procedure, - PIKA_PROCEDURE_SENSITIVE_DRAWABLE); - - pika_procedure_set_menu_label (procedure, _("Decode YCoCg (scaled)")); - /* pika_procedure_add_menu_path (procedure, "/Filters/Colors"); */ - - pika_procedure_set_documentation (procedure, - _("Converts YCoCg (scaled) encoded " - "pixels to RGB"), - _("Converts YCoCg (scaled) encoded " - "pixels to RGB"), - name); - pika_procedure_set_attribution (procedure, - "Shawn Kirst", - "Shawn Kirst", - "2008"); - } - else if (! strcmp (name, DECODE_ALPHA_EXP_PROC)) - { - procedure = pika_image_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - dds_decode, NULL, NULL); - - pika_procedure_set_image_types (procedure, "RGBA"); - pika_procedure_set_sensitivity_mask (procedure, - PIKA_PROCEDURE_SENSITIVE_DRAWABLE); - - pika_procedure_set_menu_label (procedure, _("Decode Alpha exponent")); - /* pika_procedure_add_menu_path (procedure, "/Filters/Colors"); */ - - pika_procedure_set_documentation (procedure, - _("Converts alpha exponent encoded " - "pixels to RGB", - _("Converts alpha exponent encoded " - "pixels to RGB"), - name); - pika_procedure_set_attribution (procedure, - "Shawn Kirst", - "Shawn Kirst", - "2008"); - } -#endif return procedure; } @@ -436,7 +353,7 @@ dds_load (PikaProcedure *procedure, gegl_init (NULL, NULL); status = read_dds (file, &image, run_mode == PIKA_RUN_INTERACTIVE, - procedure, G_OBJECT (config), &error); + procedure, config, &error); if (status != PIKA_PDB_SUCCESS) return pika_procedure_new_return_values (procedure, status, error); @@ -520,53 +437,3 @@ dds_save (PikaProcedure *procedure, return pika_procedure_new_return_values (procedure, status, error); } - -#if 0 -static PikaValueArray * -dds_decode (PikaProcedure *procedure, - PikaRunMode run_mode, - PikaImage *image, - gint n_drawables, - PikaDrawable **drawables, - PikaProcedureConfig *config, - gpointer run_data) -{ - const gchar *name = pika_procedure_get_name (procedure); - PikaDrawable *drawable, - - if (n_drawables != 1) - { - GError *error = NULL; - - g_set_error (&error, PIKA_PLUG_IN_ERROR, 0, - _("Procedure '%s' only works with one drawable."), - name); - - return pika_procedure_new_return_values (procedure, - PIKA_PDB_EXECUTION_ERROR, - error); - } - else - { - drawable = drawables[0]; - } - - if (! strcmp (name, DECODE_YCOCG_PROC)) - { - decode_ycocg_image (drawable, TRUE); - } - else if (! strcmp (name, DECODE_YCOCG_SCALED_PROC)) - { - decode_ycocg_scaled_image (drawable, TRUE); - } - else if (! strcmp (name, DECODE_ALPHA_EXP_PROC)) - { - decode_alpha_exp_image (drawable, TRUE); - } - - if (run_mode != PIKA_RUN_NONINTERACTIVE) - pika_displays_flush (); - - return pika_procedure_new_return_values (procedure, PIKA_PDB_SUCCESS, NULL); -} -#endif diff --git a/plug-ins/file-dds/dds.h b/plug-ins/file-dds/dds.h index ce6b0be..78e285b 100644 --- a/plug-ins/file-dds/dds.h +++ b/plug-ins/file-dds/dds.h @@ -21,6 +21,7 @@ #ifndef __DDS_H__ #define __DDS_H__ + #define DDS_PLUGIN_VERSION_MAJOR 3 #define DDS_PLUGIN_VERSION_MINOR 9 #define DDS_PLUGIN_VERSION_REVISION 92 @@ -101,6 +102,7 @@ typedef enum DDS_MIPMAP_FILTER_QUADRATIC, DDS_MIPMAP_FILTER_BSPLINE, DDS_MIPMAP_FILTER_MITCHELL, + DDS_MIPMAP_FILTER_CATROM, DDS_MIPMAP_FILTER_LANCZOS, DDS_MIPMAP_FILTER_KAISER, DDS_MIPMAP_FILTER_MAX @@ -115,6 +117,7 @@ typedef enum DDS_MIPMAP_WRAP_MAX } DDS_MIPMAP_WRAP; + #define DDS_HEADERSIZE 128 #define DDS_HEADERSIZE_DX10 20 @@ -122,18 +125,43 @@ typedef enum #define DDSD_HEIGHT 0x00000002 #define DDSD_WIDTH 0x00000004 #define DDSD_PITCH 0x00000008 +#define DDSD_BACKBUFFERCOUNT 0x00000020 +#define DDSD_ZBUFFERBITDEPTH 0x00000040 +#define DDSD_ALPHABITDEPTH 0x00000080 +#define DDSD_LPSURFACE 0x00000800 #define DDSD_PIXELFORMAT 0x00001000 +#define DDSD_CKDESTOVERLAY 0x00002000 +#define DDSD_CKDESTBLT 0x00004000 +#define DDSD_CKSRCOVERLAY 0x00008000 +#define DDSD_CKSRCBLT 0x00010000 #define DDSD_MIPMAPCOUNT 0x00020000 +#define DDSD_REFRESHRATE 0x00040000 #define DDSD_LINEARSIZE 0x00080000 +#define DDSD_TEXTURESTAGE 0x00100000 +#define DDSD_FVF 0x00200000 +#define DDSD_SRCVBHANDLE 0x00400000 #define DDSD_DEPTH 0x00800000 #define DDPF_ALPHAPIXELS 0x00000001 #define DDPF_ALPHA 0x00000002 #define DDPF_FOURCC 0x00000004 +#define DDPF_PALETTEINDEXED4 0x00000008 +#define DDPF_PALETTEINDEXEDTO8 0x00000010 #define DDPF_PALETTEINDEXED8 0x00000020 #define DDPF_RGB 0x00000040 +#define DDPF_COMPRESSED 0x00000080 +#define DDPF_RGBTOYUV 0x00000100 +#define DDPF_YUV 0x00000200 +#define DDPF_ZBUFFER 0x00000400 +#define DDPF_PALETTEINDEXED1 0x00000800 +#define DDPF_PALETTEINDEXED2 0x00001000 +#define DDPF_ZPIXELS 0x00002000 +#define DDPF_STENCILBUFFER 0x00004000 +#define DDPF_ALPHAPREMULT 0x00008000 #define DDPF_LUMINANCE 0x00020000 -#define DDPF_NORMAL 0x80000000 // nvidia specific +#define DDPF_BUMPLUMINANCE 0x00040000 +#define DDPF_BUMPDUDV 0x00080000 +#define DDPF_NORMAL 0x80000000 /* NVidia specific */ #define DDSCAPS_COMPLEX 0x00000008 #define DDSCAPS_TEXTURE 0x00001000 @@ -159,6 +187,7 @@ typedef enum #define D3D10_RESOURCE_DIMENSION_TEXTURE2D 3 #define D3D10_RESOURCE_DIMENSION_TEXTURE3D 4 + typedef struct { unsigned int size; @@ -192,8 +221,8 @@ typedef struct { struct { - unsigned int magic1; // FOURCC "PIKA" - unsigned int magic2; // FOURCC "-DDS" + unsigned int magic1; /* FOURCC "PIKA" */ + unsigned int magic2; /* FOURCC "-DDS" */ unsigned int version; unsigned int extra_fourcc; } pika_dds_special; @@ -204,6 +233,7 @@ typedef struct unsigned int reserved2; } dds_header_t; + typedef enum { DXGI_FORMAT_UNKNOWN = 0, @@ -334,4 +364,70 @@ typedef struct unsigned int reserved; } dds_header_dx10_t; +/* Format values that can be found in the FOURCC field */ +typedef enum _D3DFORMAT { + D3DFMT_R8G8B8 = 20, + D3DFMT_A8R8G8B8 = 21, + D3DFMT_X8R8G8B8 = 22, + D3DFMT_R5G6B5 = 23, + D3DFMT_X1R5G5B5 = 24, + D3DFMT_A1R5G5B5 = 25, + D3DFMT_A4R4G4B4 = 26, + D3DFMT_R3G3B2 = 27, + D3DFMT_A8 = 28, + D3DFMT_A8R3G3B2 = 29, + D3DFMT_X4R4G4B4 = 30, + D3DFMT_A2B10G10R10 = 31, + D3DFMT_A8B8G8R8 = 32, + D3DFMT_X8B8G8R8 = 33, + D3DFMT_G16R16 = 34, + D3DFMT_A2R10G10B10 = 35, + D3DFMT_A16B16G16R16 = 36, + + D3DFMT_A8P8 = 40, + D3DFMT_P8 = 41, + + D3DFMT_L8 = 50, + D3DFMT_A8L8 = 51, + D3DFMT_A4L4 = 52, + + D3DFMT_V8U8 = 60, + D3DFMT_L6V5U5 = 61, + D3DFMT_X8L8V8U8 = 62, + D3DFMT_Q8W8V8U8 = 63, + D3DFMT_V16U16 = 64, + D3DFMT_A2W10V10U10 = 67, + + D3DFMT_D16_LOCKABLE = 70, + D3DFMT_D32 = 71, + D3DFMT_D15S1 = 73, + D3DFMT_D24S8 = 75, + D3DFMT_D24X8 = 77, + D3DFMT_D24X4S4 = 79, + D3DFMT_D16 = 80, + D3DFMT_L16 = 81, + D3DFMT_D32F_LOCKABLE = 82, + D3DFMT_D24FS8 = 83, + D3DFMT_D32_LOCKABLE = 84, + D3DFMT_S8_LOCKABLE = 85, + + D3DFMT_VERTEXDATA = 100, + D3DFMT_INDEX16 = 101, + D3DFMT_INDEX32 = 102, + + D3DFMT_Q16W16V16U16 = 110, + D3DFMT_R16F = 111, + D3DFMT_G16R16F = 112, + D3DFMT_A16B16G16R16F = 113, + D3DFMT_R32F = 114, + D3DFMT_G32R32F = 115, + D3DFMT_A32B32G32R32F = 116, + D3DFMT_CxV8U8 = 117, + + D3DFMT_A1 = 118, + D3DFMT_A2B10G10R10_XR_BIAS = 119, + D3DFMT_BINARYBUFFER = 199, +} D3DFORMAT; + + #endif /* __DDS_H__ */ diff --git a/plug-ins/file-dds/ddsread.c b/plug-ins/file-dds/ddsread.c index 60277a2..84d431a 100644 --- a/plug-ins/file-dds/ddsread.c +++ b/plug-ins/file-dds/ddsread.c @@ -43,97 +43,101 @@ #include -#include "ddsread.h" #include "dds.h" +#include "ddsread.h" #include "dxt.h" #include "endian_rw.h" -#include "misc.h" #include "imath.h" +#include "misc.h" typedef struct { - guchar rshift, gshift, bshift, ashift; - guchar rbits, gbits, bbits, abits; - guint rmask, gmask, bmask, amask; - guint bpp, pika_bpp; - guint pika_bps; /* bytes per sample */ - gint tile_height; - guchar *palette; + guchar rshift, gshift, bshift, ashift; + guchar rbits, gbits, bbits, abits; + guint rmask, gmask, bmask, amask; + guint bpp, pika_bpp; + guint pika_bps; /* bytes per sample */ + guint dxgi_format; /* adjusted dxgi format */ + gboolean is_signed; /* TRUE if data uses signed int */ + gint tile_height; + guchar *palette; } dds_load_info_t; -static gboolean read_header (dds_header_t *hdr, - FILE *fp); -static gboolean read_header_dx10 (dds_header_dx10_t *hdr, - FILE *fp); -static gboolean validate_header (dds_header_t *hdr, - GError **error); -static gboolean setup_dxgi_format (dds_header_t *hdr, - dds_header_dx10_t *dx10hdr, - GError **error); -static gboolean load_layer (FILE *fp, - dds_header_t *hdr, - dds_load_info_t *d, - PikaImage *image, - guint level, - gchar *prefix, - guint *l, - guchar *pixels, - guchar *buf, - gboolean decode_images, - GError **error); -static gboolean load_mipmaps (FILE *fp, - dds_header_t *hdr, - dds_load_info_t *d, - PikaImage *image, - gchar *prefix, - guint *l, - guchar *pixels, - guchar *buf, - gboolean read_mipmaps, - gboolean decode_images, - GError **error); -static gboolean load_face (FILE *fp, - dds_header_t *hdr, - dds_load_info_t *d, - PikaImage *image, - char *prefix, - guint *l, - guchar *pixels, - guchar *buf, - gboolean read_mipmaps, - gboolean decode_images, - GError **error); -static guchar color_bits (guint mask); -static guchar color_shift (guint mask); -static gboolean load_dialog (PikaProcedure *procedure, - GObject *config); +static gboolean read_header (dds_header_t *hdr, + FILE *fp); +static gboolean read_header_dx10 (dds_header_dx10_t *hdr, + FILE *fp); +static gboolean validate_header (dds_header_t *hdr, + GError **error); +static gboolean setup_dxgi_format (dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + GError **error); +static gboolean load_layer (FILE *fp, + const dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + PikaImage *image, + guint level, + gchar *prefix, + guint *layer_index, + guchar *pixels, + guchar *buf, + GError **error); +static gboolean load_mipmaps (FILE *fp, + const dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + PikaImage *image, + gchar *prefix, + guint *layer_index, + guchar *pixels, + guchar *buf, + gboolean read_mipmaps, + GError **error); +static gboolean load_face (FILE *fp, + const dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + PikaImage *image, + gchar *prefix, + guint *layer_index, + guchar *pixels, + guchar *buf, + gboolean read_mipmaps, + GError **error); +static guchar color_bits (guint mask); +static guchar color_shift (guint mask); +static gboolean load_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config); +/* Read DDS file */ PikaPDBStatusType -read_dds (GFile *file, - PikaImage **ret_image, - gboolean interactive, - PikaProcedure *procedure, - GObject *config, - GError **error) +read_dds (GFile *file, + PikaImage **ret_image, + gboolean interactive, + PikaProcedure *procedure, + PikaProcedureConfig *config, + GError **error) { - PikaImage *image = NULL; - guchar *buf; - guint l = 0; - guchar *pixels; + PikaImage *image = NULL; + guint layer_index = 0; + guchar *buf, *pixels; FILE *fp; gsize file_size; dds_header_t hdr; dds_header_dx10_t dx10hdr; - dds_load_info_t d; + dds_load_info_t load_info; GList *layers; PikaImageBaseType type; PikaPrecision precision; gboolean read_mipmaps; - gboolean decode_images; gint i, j; + guint computed_pitch_or_linsize; + gboolean flip_import; if (interactive) { @@ -144,8 +148,8 @@ read_dds (GFile *file, } g_object_get (config, - "load-mipmaps", &read_mipmaps, - "decode-images", &decode_images, + "load-mipmaps", &read_mipmaps, + "flip-image", &flip_import, NULL); fp = g_fopen (g_file_peek_path (file), "rb"); @@ -158,60 +162,167 @@ read_dds (GFile *file, return PIKA_PDB_EXECUTION_ERROR; } + /* Get total file size to compare against header info later */ fseek (fp, 0L, SEEK_END); file_size = ftell (fp); - fseek (fp, 0, SEEK_SET); + fseek (fp, 0L, SEEK_SET); - pika_progress_init_printf ("Loading %s:", pika_file_get_utf8_name (file)); + pika_progress_init_printf (_("Loading: %s"), pika_file_get_utf8_name (file)); - /* read header */ + /* Read standard header */ + memset (&hdr, 0, sizeof (dds_header_t)); read_header (&hdr, fp); + /* Read DX10 header if present */ memset (&dx10hdr, 0, sizeof (dds_header_dx10_t)); - - /* read DX10 header if necessary */ + load_info.dxgi_format = DXGI_FORMAT_UNKNOWN; + load_info.is_signed = FALSE; if (GETL32 (hdr.pixelfmt.fourcc) == FOURCC ('D','X','1','0')) { read_header_dx10 (&dx10hdr, fp); - if (! setup_dxgi_format (&hdr, &dx10hdr, error)) + if (! setup_dxgi_format (&hdr, &dx10hdr, &load_info, error)) { fclose (fp); return PIKA_PDB_EXECUTION_ERROR; } } + /* Check that header is actually valid */ if (! validate_header (&hdr, error)) { fclose (fp); return PIKA_PDB_EXECUTION_ERROR; } - /* a lot of DDS images out there don't have this for some reason -_- */ - if (hdr.pitch_or_linsize == 0) + /* Normalize known non-compliant FourCC codes. */ + if ((hdr.pixelfmt.flags & DDPF_FOURCC) && (hdr.pixelfmt.fourcc[1] == 0)) { - if (hdr.pixelfmt.flags & DDPF_FOURCC) /* assume linear size */ + guint fourcc = GETL32 (hdr.pixelfmt.fourcc); + + /* Unset the FourCC flag as D3D formats will be handled as uncompressed */ + hdr.pixelfmt.flags &= ~DDPF_FOURCC; + + switch (fourcc) { - hdr.pitch_or_linsize = ((hdr.width + 3) >> 2) * ((hdr.height + 3) >> 2); + case D3DFMT_Q16W16V16U16: /* = DXGI_FORMAT_R16G16B16A16_SNORM */ + case D3DFMT_A16B16G16R16: /* = DXGI_FORMAT_R16G16B16A16_UINT */ + hdr.pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr.pixelfmt.bpp = 64; + load_info.dxgi_format = DXGI_FORMAT_R16G16B16A16_UINT; + if (fourcc == D3DFMT_Q16W16V16U16) + load_info.is_signed = TRUE; + break; + case D3DFMT_A16B16G16R16F: /* = DXGI_FORMAT_R16G16B16A16_FLOAT */ + hdr.pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr.pixelfmt.bpp = 64; + load_info.dxgi_format = DXGI_FORMAT_R16G16B16A16_FLOAT; + break; + case D3DFMT_A32B32G32R32F: /* = DXGI_FORMAT_R32G32B32A32_FLOAT */ + hdr.pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr.pixelfmt.bpp = 128; + load_info.dxgi_format = DXGI_FORMAT_R32G32B32A32_FLOAT; + break; + case D3DFMT_D16_LOCKABLE: + case D3DFMT_D16: + case D3DFMT_L16: + case D3DFMT_INDEX16: + hdr.pixelfmt.flags |= DDPF_RGB; + hdr.pixelfmt.bpp = 16; + hdr.pixelfmt.rmask = 0x0000ffff; + hdr.pixelfmt.gmask = hdr.pixelfmt.bmask = hdr.pixelfmt.amask = 0; + load_info.dxgi_format = DXGI_FORMAT_R16_UNORM; + break; + case D3DFMT_G16R16: + hdr.pixelfmt.flags |= DDPF_RGB; + hdr.pixelfmt.bpp = 32; + hdr.pixelfmt.rmask = 0x0000ffff; + hdr.pixelfmt.gmask = 0xffff0000; + hdr.pixelfmt.bmask = hdr.pixelfmt.amask = 0; + load_info.dxgi_format = DXGI_FORMAT_R16G16_UNORM; + break; + case D3DFMT_G16R16F: + hdr.pixelfmt.flags |= DDPF_RGB; + hdr.pixelfmt.bpp = 32; + hdr.pixelfmt.rmask = 0x0000ffff; + hdr.pixelfmt.gmask = 0xffff0000; + hdr.pixelfmt.bmask = hdr.pixelfmt.amask = 0; + load_info.dxgi_format = DXGI_FORMAT_R16G16_FLOAT; + break; + case D3DFMT_R8G8B8: + hdr.pixelfmt.flags |= DDPF_RGB; + hdr.pixelfmt.bpp = 16; + hdr.pixelfmt.rmask = 0x000000ff; + hdr.pixelfmt.gmask = 0x0000ff00; + hdr.pixelfmt.bmask = hdr.pixelfmt.amask = 0; + load_info.dxgi_format = DXGI_FORMAT_R16_UNORM; + break; + default: + fclose (fp); + g_set_error (error, PIKA_PLUG_IN_ERROR, 0, + _("Unsupported uncompressed FourCC type %u"), + fourcc); + return PIKA_PDB_EXECUTION_ERROR; + } + } + + /* A lot of DDS images out there don't set pitch_or_linsize, or set it to a + value we didn't expect. So we will always compute it ourselves. */ + if (hdr.pixelfmt.flags & DDPF_FOURCC) + { + /* Assume linear size */ + computed_pitch_or_linsize = ((hdr.width + 3) >> 2) * ((hdr.height + 3) >> 2); + if (GETL32 (hdr.pixelfmt.fourcc) == FOURCC ('D','X','1','0')) + { + /* Determine scale from DXGI format */ + switch (dx10hdr.dxgiFormat) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + computed_pitch_or_linsize *= 8; + break; + default: + computed_pitch_or_linsize *= 16; + break; + } + } + else + { + /* Determine scale from FourCC format */ switch (GETL32 (hdr.pixelfmt.fourcc)) { case FOURCC ('D','X','T','1'): case FOURCC ('A','T','I','1'): case FOURCC ('B','C','4','U'): case FOURCC ('B','C','4','S'): - hdr.pitch_or_linsize *= 8; + computed_pitch_or_linsize *= 8; break; default: - hdr.pitch_or_linsize *= 16; + computed_pitch_or_linsize *= 16; break; } } - else /* assume pitch */ - { - hdr.pitch_or_linsize = hdr.height * hdr.width * (hdr.pixelfmt.bpp >> 3); - } + } + else + { + /* Assume pitch */ + computed_pitch_or_linsize = hdr.height * hdr.width * (hdr.pixelfmt.bpp >> 3); } + if (computed_pitch_or_linsize != hdr.pitch_or_linsize) + { + g_printerr ("Unexpected 'pitch_or_linsize' (%u) set to %u\n", + hdr.pitch_or_linsize, computed_pitch_or_linsize); + hdr.pitch_or_linsize = computed_pitch_or_linsize; + } + + /* Not sure why this is here, but it seems extremely dubious, as to my + * knowledge DDPF_ALPHAPIXELS should only be relevant to uncompressed files. + */ if (hdr.pixelfmt.flags & DDPF_FOURCC) { /* fourcc is dXt* or rXgb */ @@ -219,86 +330,152 @@ read_dds (GFile *file, hdr.pixelfmt.flags |= DDPF_ALPHAPIXELS; } - d.rshift = color_shift (hdr.pixelfmt.rmask); - d.gshift = color_shift (hdr.pixelfmt.gmask); - d.bshift = color_shift (hdr.pixelfmt.bmask); - d.ashift = color_shift (hdr.pixelfmt.amask); - d.rbits = color_bits (hdr.pixelfmt.rmask); - d.gbits = color_bits (hdr.pixelfmt.gmask); - d.bbits = color_bits (hdr.pixelfmt.bmask); - d.abits = color_bits (hdr.pixelfmt.amask); - if (d.rbits <= 8) - d.rmask = (hdr.pixelfmt.rmask >> d.rshift) << (8 - d.rbits); - else - d.rmask = (hdr.pixelfmt.rmask >> d.rshift) << (16 - d.rbits); - if (d.gbits <= 8) - d.gmask = (hdr.pixelfmt.gmask >> d.gshift) << (8 - d.gbits); - else - d.gmask = (hdr.pixelfmt.gmask >> d.gshift) << (16 - d.gbits); - if (d.bbits <= 8) - d.bmask = (hdr.pixelfmt.bmask >> d.bshift) << (8 - d.bbits); - else - d.bmask = (hdr.pixelfmt.bmask >> d.bshift) << (16 - d.bbits); - if (d.abits <= 8) - d.amask = (hdr.pixelfmt.amask >> d.ashift) << (8 - d.abits); - else - d.amask = (hdr.pixelfmt.amask >> d.ashift) << (16 - d.abits); + load_info.rshift = color_shift (hdr.pixelfmt.rmask); + load_info.gshift = color_shift (hdr.pixelfmt.gmask); + load_info.bshift = color_shift (hdr.pixelfmt.bmask); + load_info.ashift = color_shift (hdr.pixelfmt.amask); + load_info.rbits = color_bits (hdr.pixelfmt.rmask); + load_info.gbits = color_bits (hdr.pixelfmt.gmask); + load_info.bbits = color_bits (hdr.pixelfmt.bmask); + load_info.abits = color_bits (hdr.pixelfmt.amask); - d.pika_bps = 1; /* Most formats will be converted to 1 byte per sample */ - if (hdr.pixelfmt.flags & DDPF_FOURCC) + if (load_info.rbits <= 8 && + load_info.gbits <= 8 && + load_info.bbits <= 8 && + load_info.abits <= 8) { - switch (GETL32 (hdr.pixelfmt.fourcc)) + /* 8 bits per sample */ + load_info.rmask = (hdr.pixelfmt.rmask >> load_info.rshift) << (8 - load_info.rbits); + load_info.gmask = (hdr.pixelfmt.gmask >> load_info.gshift) << (8 - load_info.gbits); + load_info.bmask = (hdr.pixelfmt.bmask >> load_info.bshift) << (8 - load_info.bbits); + load_info.amask = (hdr.pixelfmt.amask >> load_info.ashift) << (8 - load_info.abits); + } + else if (load_info.rbits <= 16 && + load_info.gbits <= 16 && + load_info.bbits <= 16 && + load_info.abits <= 16) + { + /* 16 bits per sample */ + load_info.rmask = (hdr.pixelfmt.rmask >> load_info.rshift) << (16 - load_info.rbits); + load_info.gmask = (hdr.pixelfmt.gmask >> load_info.gshift) << (16 - load_info.gbits); + load_info.bmask = (hdr.pixelfmt.bmask >> load_info.bshift) << (16 - load_info.bbits); + load_info.amask = (hdr.pixelfmt.amask >> load_info.ashift) << (16 - load_info.abits); + } + else + { + /* 32 bits per sample in case we need this in the future */ + load_info.rmask = (hdr.pixelfmt.rmask >> load_info.rshift) << (32 - load_info.rbits); + load_info.gmask = (hdr.pixelfmt.gmask >> load_info.gshift) << (32 - load_info.gbits); + load_info.bmask = (hdr.pixelfmt.bmask >> load_info.bshift) << (32 - load_info.bbits); + load_info.amask = (hdr.pixelfmt.amask >> load_info.ashift) << (32 - load_info.abits); + } + + /* Determine bits-per-pixel needed */ + load_info.pika_bps = 1; /* Most formats will be converted to 1 byte per sample */ + if ((hdr.pixelfmt.flags & DDPF_FOURCC) && (hdr.pixelfmt.fourcc[1] != 0)) + { + if (GETL32 (hdr.pixelfmt.fourcc) == FOURCC ('D','X','1','0')) { - case FOURCC ('A','T','I','1'): - case FOURCC ('B','C','4','U'): - case FOURCC ('B','C','4','S'): - d.bpp = d.pika_bpp = 1; - type = PIKA_GRAY; - break; - case FOURCC ('A','T','I','2'): - case FOURCC ('B','C','5','U'): - case FOURCC ('B','C','5','S'): - d.bpp = d.pika_bpp = 3; - type = PIKA_RGB; - break; - default: - d.bpp = d.pika_bpp = 4; - type = PIKA_RGB; - break; + /* bpp from DX10 format */ + switch (dx10hdr.dxgiFormat) + { + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + load_info.bpp = load_info.pika_bpp = 1; + type = PIKA_GRAY; + break; + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + load_info.bpp = load_info.pika_bpp = 3; + type = PIKA_RGB; + break; + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + load_info.bpp = load_info.pika_bpp = 6; + load_info.pika_bps = 2; + type = PIKA_RGB; + break; + default: + load_info.bpp = load_info.pika_bpp = 4; + type = PIKA_RGB; + break; + } + } + else + { + /* bpp from FourCC */ + switch (GETL32 (hdr.pixelfmt.fourcc)) + { + case FOURCC ('A','T','I','1'): + case FOURCC ('B','C','4','U'): + case FOURCC ('B','C','4','S'): + load_info.bpp = load_info.pika_bpp = 1; + type = PIKA_GRAY; + break; + case FOURCC ('A','T','I','2'): + case FOURCC ('B','C','5','U'): + case FOURCC ('B','C','5','S'): + load_info.bpp = load_info.pika_bpp = 3; + type = PIKA_RGB; + break; + default: + load_info.bpp = load_info.pika_bpp = 4; + type = PIKA_RGB; + break; + } } } else { - d.bpp = hdr.pixelfmt.bpp >> 3; + load_info.bpp = hdr.pixelfmt.bpp >> 3; - if (d.bpp == 2) + if (hdr.pixelfmt.flags & DDPF_BUMPDUDV) + load_info.is_signed = TRUE; + + if (load_info.bpp == 2) { - if (hdr.pixelfmt.amask == 0xf000) /* RGBA4 */ + if (hdr.pixelfmt.amask == 0xf000) /* RGBA4 */ { - d.pika_bpp = 4; + load_info.pika_bpp = 4; type = PIKA_RGB; } - else if (hdr.pixelfmt.amask == 0xff00) /* L8A8 */ + else if (hdr.pixelfmt.amask == 0xff00) /* L8A8 */ { - d.pika_bpp = 2; - type = PIKA_GRAY; - } - else if (hdr.pixelfmt.bmask == 0x1f) /* R5G6B5 or RGB5A1 */ - { - if (hdr.pixelfmt.amask == 0x8000) /* RGB5A1 */ - d.pika_bpp = 4; + if (hdr.pixelfmt.flags & DDPF_LUMINANCE) + { + load_info.pika_bpp = 2; + type = PIKA_GRAY; + } else - d.pika_bpp = 3; + { + load_info.pika_bpp = 4; + type = PIKA_RGB; + } + } + else if (hdr.pixelfmt.rmask == 0xff) /* R8G8 */ + { + load_info.pika_bpp = 3; + type = PIKA_RGB; + } + else if (hdr.pixelfmt.bmask == 0x1f) /* R5G6B5 or RGB5A1 */ + { + if (hdr.pixelfmt.amask == 0x8000) /* RGB5A1 */ + load_info.pika_bpp = 4; + else + load_info.pika_bpp = 3; type = PIKA_RGB; } - else if (hdr.pixelfmt.rmask == 0xffff || /* L16 */ + else if (hdr.pixelfmt.rmask == 0xffff || hdr.pixelfmt.gmask == 0xffff || hdr.pixelfmt.bmask == 0xffff || - hdr.pixelfmt.amask == 0xffff) + hdr.pixelfmt.amask == 0xffff) /* L16 */ { - d.pika_bpp = 2; - d.pika_bps = 2; + load_info.pika_bpp = 2; + load_info.pika_bps = 2; type = PIKA_GRAY; } else @@ -317,54 +494,83 @@ read_dds (GFile *file, if (hdr.pixelfmt.flags & DDPF_PALETTEINDEXED8) { type = PIKA_INDEXED; - d.pika_bpp = 1; + load_info.pika_bpp = 1; } - else if (hdr.pixelfmt.rmask == 0xe0) /* R3G3B2 */ + else if (hdr.pixelfmt.rmask == 0xe0) /* R3G3B2 */ { type = PIKA_RGB; - d.pika_bpp = 3; + load_info.pika_bpp = 3; } - else if (d.bpp == 4) + else if (load_info.bpp == 4) { type = PIKA_RGB; - if (d.rbits > 8 || d.gbits > 8 || d.bbits > 8 || d.abits > 8) + if (load_info.dxgi_format == DXGI_FORMAT_R16G16_UINT || + load_info.dxgi_format == DXGI_FORMAT_R16G16_FLOAT) { - d.pika_bps = 2; - d.pika_bpp = 8; + /* Output 16-bit RGB */ + load_info.pika_bps = 2; + load_info.pika_bpp = 6; + } + else if (load_info.rbits > 8 || + load_info.gbits > 8 || + load_info.bbits > 8 || + load_info.abits > 8) + { + load_info.pika_bps = 2; + load_info.pika_bpp = 8; } else { - d.pika_bpp = d.bpp; + load_info.pika_bpp = load_info.bpp; } } + else if (load_info.bpp == 8 || + load_info.bpp == 16) + { + type = PIKA_RGB; + load_info.pika_bpp = load_info.bpp; + load_info.pika_bps = load_info.pika_bpp / 4; + } else { - /* test alpha only image */ - if (d.bpp == 1 && (hdr.pixelfmt.flags & DDPF_ALPHA)) + /* Test alpha-only image */ + if (load_info.bpp == 1 && (hdr.pixelfmt.flags & DDPF_ALPHA)) { - d.pika_bpp = 2; + load_info.pika_bpp = 2; type = PIKA_GRAY; } else { - d.pika_bpp = d.bpp; - type = (d.bpp == 1) ? PIKA_GRAY : PIKA_RGB; + load_info.pika_bpp = load_info.bpp; + type = (load_info.bpp == 1) ? PIKA_GRAY : PIKA_RGB; } } } } - if (d.pika_bps == 2) - { - precision = PIKA_PRECISION_U16_NON_LINEAR; - } - else + /* Set up canvas precision */ + if (load_info.pika_bps == 1) { precision = PIKA_PRECISION_U8_NON_LINEAR; } + else if (load_info.pika_bps == 2) + { + if (load_info.dxgi_format == DXGI_FORMAT_R16G16B16A16_FLOAT || + load_info.dxgi_format == DXGI_FORMAT_R16G16_FLOAT) + precision = PIKA_PRECISION_HALF_LINEAR; + else + precision = PIKA_PRECISION_U16_NON_LINEAR; + } + else if (load_info.pika_bps == 4) + { + if (load_info.dxgi_format == DXGI_FORMAT_R32G32B32A32_FLOAT) + precision = PIKA_PRECISION_FLOAT_LINEAR; + else + precision = PIKA_PRECISION_U32_NON_LINEAR; + } - /* verify header information is accurate */ - if (d.bpp < 1 || + /* Verify header information is accurate to avoid allocating more memory than is actually needed */ + if (load_info.bpp < 1 || (hdr.pitch_or_linsize > (file_size - sizeof (hdr)))) { fclose (fp); @@ -373,6 +579,7 @@ read_dds (GFile *file, return PIKA_PDB_EXECUTION_ERROR; } + /* Generate PIKA image with set precision */ image = pika_image_new_with_precision (hdr.width, hdr.height, type, precision); if (! image) @@ -383,10 +590,11 @@ read_dds (GFile *file, return PIKA_PDB_EXECUTION_ERROR; } + /* Read palette for indexed DDS */ if (hdr.pixelfmt.flags & DDPF_PALETTEINDEXED8) { - d.palette = g_malloc (256 * 4); - if (fread (d.palette, 1, 1024, fp) != 1024) + load_info.palette = g_malloc (256 * 4); + if (fread (load_info.palette, 1, 1024, fp) != 1024) { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("Error reading palette.")); @@ -396,43 +604,43 @@ read_dds (GFile *file, } for (i = j = 0; i < 768; i += 3, j += 4) { - d.palette[i + 0] = d.palette[j + 0]; - d.palette[i + 1] = d.palette[j + 1]; - d.palette[i + 2] = d.palette[j + 2]; + load_info.palette[i + 0] = load_info.palette[j + 0]; + load_info.palette[i + 1] = load_info.palette[j + 1]; + load_info.palette[i + 2] = load_info.palette[j + 2]; } - pika_image_set_colormap (image, d.palette, 256); + pika_image_set_colormap (image, load_info.palette, 256); } - d.tile_height = pika_tile_height (); + load_info.tile_height = pika_tile_height (); - pixels = g_new (guchar, d.tile_height * hdr.width * d.pika_bpp); + pixels = g_new (guchar, load_info.tile_height * hdr.width * load_info.pika_bpp); buf = g_malloc (hdr.pitch_or_linsize); if (! (hdr.caps.caps2 & DDSCAPS2_CUBEMAP) && - ! (hdr.caps.caps2 & DDSCAPS2_VOLUME) && - dx10hdr.arraySize == 0) + ! (hdr.caps.caps2 & DDSCAPS2_VOLUME) && + dx10hdr.arraySize <= 1) /* Standard image texture with mipmaps */ { - if (! load_layer (fp, &hdr, &d, image, 0, "", &l, pixels, buf, - decode_images, error)) + if (! load_layer (fp, &hdr, &dx10hdr, &load_info, image, 0, "", &layer_index, + pixels, buf, error)) { fclose (fp); pika_image_delete (image); return PIKA_PDB_EXECUTION_ERROR; } - if (! load_mipmaps (fp, &hdr, &d, image, "", &l, pixels, buf, - read_mipmaps, decode_images, error)) + if (! load_mipmaps (fp, &hdr, &dx10hdr, &load_info, image, "", &layer_index, + pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); return PIKA_PDB_EXECUTION_ERROR; } } - else if (hdr.caps.caps2 & DDSCAPS2_CUBEMAP) + else if (hdr.caps.caps2 & DDSCAPS2_CUBEMAP) /* Cubemap texture */ { if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) && - ! load_face (fp, &hdr, &d, image, "(positive x)", &l, pixels, buf, - read_mipmaps, decode_images, error)) + ! load_face (fp, &hdr, &dx10hdr, &load_info, image, "(positive x)", + &layer_index, pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -440,8 +648,8 @@ read_dds (GFile *file, } if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) && - ! load_face (fp, &hdr, &d, image, "(negative x)", &l, pixels, buf, - read_mipmaps, decode_images, error)) + ! load_face (fp, &hdr, &dx10hdr, &load_info, image, "(negative x)", + &layer_index, pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -449,8 +657,8 @@ read_dds (GFile *file, } if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) && - ! load_face (fp, &hdr, &d, image, "(positive y)", &l, pixels, buf, - read_mipmaps, decode_images, error)) + ! load_face (fp, &hdr, &dx10hdr, &load_info, image, "(positive y)", + &layer_index, pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -458,8 +666,8 @@ read_dds (GFile *file, } if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) && - ! load_face (fp, &hdr, &d, image, "(negative y)", &l, pixels, buf, - read_mipmaps, decode_images, error)) + ! load_face (fp, &hdr, &dx10hdr, &load_info, image, "(negative y)", + &layer_index, pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -467,8 +675,8 @@ read_dds (GFile *file, } if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) && - ! load_face (fp, &hdr, &d, image, "(positive z)", &l, pixels, buf, - read_mipmaps, decode_images, error)) + ! load_face (fp, &hdr, &dx10hdr, &load_info, image, "(positive z)", + &layer_index, pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -476,8 +684,8 @@ read_dds (GFile *file, } if ((hdr.caps.caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ) && - ! load_face (fp, &hdr, &d, image, "(negative z)", &l, pixels, buf, - read_mipmaps, decode_images, error)) + ! load_face (fp, &hdr, &dx10hdr, &load_info, image, "(negative z)", + &layer_index, pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -485,7 +693,7 @@ read_dds (GFile *file, } } else if ((hdr.caps.caps2 & DDSCAPS2_VOLUME) && - (hdr.flags & DDSD_DEPTH)) + (hdr.flags & DDSD_DEPTH)) /* Volume texture */ { guint i, level; gchar *plane; @@ -493,14 +701,16 @@ read_dds (GFile *file, for (i = 0; i < hdr.depth; ++i) { plane = g_strdup_printf ("(z = %d)", i); - if (! load_layer (fp, &hdr, &d, image, 0, plane, &l, pixels, buf, - decode_images, error)) + + if (! load_layer (fp, &hdr, &dx10hdr, &load_info, image, 0, plane, + &layer_index, pixels, buf, error)) { g_free (plane); fclose (fp); pika_image_delete (image); return PIKA_PDB_EXECUTION_ERROR; } + g_free (plane); } @@ -519,9 +729,8 @@ read_dds (GFile *file, { plane = g_strdup_printf ("(z = %d)", i); - if (! load_layer (fp, &hdr, &d, image, level, plane, &l, - pixels, buf, - decode_images, error)) + if (! load_layer (fp, &hdr, &dx10hdr, &load_info, image, level, plane, + &layer_index, pixels, buf, error)) { g_free (plane); fclose (fp); @@ -534,7 +743,7 @@ read_dds (GFile *file, } } } - else if (dx10hdr.arraySize > 0) + else if (dx10hdr.arraySize > 1) /* Array texture */ { guint i; gchar *elem; @@ -543,16 +752,16 @@ read_dds (GFile *file, { elem = g_strdup_printf ("(array element %d)", i); - if (! load_layer (fp, &hdr, &d, image, 0, elem, &l, pixels, buf, - decode_images, error)) + if (! load_layer (fp, &hdr, &dx10hdr, &load_info, image, 0, elem, &layer_index, + pixels, buf, error)) { fclose (fp); pika_image_delete (image); return PIKA_PDB_EXECUTION_ERROR; } - if (! load_mipmaps (fp, &hdr, &d, image, elem, &l, pixels, buf, - read_mipmaps, decode_images, error)) + if (! load_mipmaps (fp, &hdr, &dx10hdr, &load_info, image, elem, &layer_index, + pixels, buf, read_mipmaps, error)) { fclose (fp); pika_image_delete (image); @@ -566,7 +775,7 @@ read_dds (GFile *file, pika_progress_update (1.0); if (hdr.pixelfmt.flags & DDPF_PALETTEINDEXED8) - g_free (d.palette); + g_free (load_info.palette); g_free (buf); g_free (pixels); @@ -589,31 +798,33 @@ read_dds (GFile *file, pika_image_take_selected_layers (image, layers); + if (flip_import) + pika_image_flip (image, PIKA_ORIENTATION_VERTICAL); + *ret_image = image; return PIKA_PDB_SUCCESS; } +/* Read data from header */ static gboolean read_header (dds_header_t *hdr, FILE *fp) { guchar buf[DDS_HEADERSIZE]; - memset (hdr, 0, sizeof (dds_header_t)); - if (fread (buf, 1, DDS_HEADERSIZE, fp) != DDS_HEADERSIZE) return FALSE; - hdr->magic = GETL32(buf); + hdr->magic = GETL32 (buf); - hdr->size = GETL32 (buf + 4); - hdr->flags = GETL32 (buf + 8); - hdr->height = GETL32 (buf + 12); - hdr->width = GETL32 (buf + 16); - hdr->pitch_or_linsize = GETL32 (buf + 20); - hdr->depth = GETL32 (buf + 24); - hdr->num_mipmaps = GETL32 (buf + 28); + hdr->size = GETL32 (buf + 4); + hdr->flags = GETL32 (buf + 8); + hdr->height = GETL32 (buf + 12); + hdr->width = GETL32 (buf + 16); + hdr->pitch_or_linsize = GETL32 (buf + 20); + hdr->depth = GETL32 (buf + 24); + hdr->num_mipmaps = GETL32 (buf + 28); hdr->pixelfmt.size = GETL32 (buf + 76); hdr->pixelfmt.flags = GETL32 (buf + 80); @@ -627,8 +838,8 @@ read_header (dds_header_t *hdr, hdr->pixelfmt.bmask = GETL32 (buf + 100); hdr->pixelfmt.amask = GETL32 (buf + 104); - hdr->caps.caps1 = GETL32 (buf + 108); - hdr->caps.caps2 = GETL32 (buf + 112); + hdr->caps.caps1 = GETL32 (buf + 108); + hdr->caps.caps2 = GETL32 (buf + 112); /* PIKA-DDS special info */ if (GETL32 (buf + 32) == FOURCC ('G','I','M','P') && @@ -643,32 +854,33 @@ read_header (dds_header_t *hdr, return TRUE; } +/* Read data from DX10 header */ static gboolean -read_header_dx10 (dds_header_dx10_t *hdr, +read_header_dx10 (dds_header_dx10_t *dx10hdr, FILE *fp) { gchar buf[DDS_HEADERSIZE_DX10]; - memset (hdr, 0, sizeof (dds_header_dx10_t)); - if (fread (buf, 1, DDS_HEADERSIZE_DX10, fp) != DDS_HEADERSIZE_DX10) return FALSE; - hdr->dxgiFormat = GETL32 (buf); - hdr->resourceDimension = GETL32 (buf + 4); - hdr->miscFlag = GETL32 (buf + 8); - hdr->arraySize = GETL32 (buf + 12); - hdr->reserved = GETL32 (buf + 16); + dx10hdr->dxgiFormat = GETL32 (buf); + dx10hdr->resourceDimension = GETL32 (buf + 4); + dx10hdr->miscFlag = GETL32 (buf + 8); + dx10hdr->arraySize = GETL32 (buf + 12); + dx10hdr->reserved = GETL32 (buf + 16); return TRUE; } +/* Check data from header to determine if the DDS file is valid */ static gboolean validate_header (dds_header_t *hdr, GError **error) { guint fourcc; + /* Check ~ m a g i c ~ */ if (hdr->magic != FOURCC ('D','D','S',' ')) { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_INVAL, @@ -676,7 +888,8 @@ validate_header (dds_header_t *hdr, return FALSE; } - if (hdr->pixelfmt.flags & DDPF_FOURCC) + /* Check pitch and linear size */ + if ((hdr->pixelfmt.flags & DDPF_FOURCC) && (hdr->pixelfmt.fourcc[1] != 0)) { /* These format errors are recoverable as we recognize other codes * allowing us to decode the image without data loss. @@ -716,8 +929,9 @@ validate_header (dds_header_t *hdr, return 0; } */ - fourcc = GETL32(hdr->pixelfmt.fourcc); + fourcc = GETL32 (hdr->pixelfmt.fourcc); + /* Check all supported FOURCC codes */ if ((hdr->pixelfmt.flags & DDPF_FOURCC) && fourcc != FOURCC ('D','X','T','1') && fourcc != FOURCC ('D','X','T','2') && @@ -731,24 +945,34 @@ validate_header (dds_header_t *hdr, fourcc != FOURCC ('A','T','I','2') && fourcc != FOURCC ('B','C','5','U') && fourcc != FOURCC ('B','C','5','S') && + fourcc != D3DFMT_A16B16G16R16 && + fourcc != D3DFMT_Q16W16V16U16 && + fourcc != D3DFMT_A16B16G16R16F && + fourcc != D3DFMT_G16R16F && + fourcc != D3DFMT_A32B32G32R32F && fourcc != FOURCC ('D','X','1','0')) { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - "Unsupported format (FOURCC: %c%c%c%c, hex: %08x).", + "Unsupported format (FourCC: %c%c%c%c, hex: %08x).", hdr->pixelfmt.fourcc[0], - hdr->pixelfmt.fourcc[1], - hdr->pixelfmt.fourcc[2], - hdr->pixelfmt.fourcc[3], - GETL32(hdr->pixelfmt.fourcc)); + hdr->pixelfmt.fourcc[1] != 0 ? hdr->pixelfmt.fourcc[1] : ' ', + hdr->pixelfmt.fourcc[2] != 0 ? hdr->pixelfmt.fourcc[2] : ' ', + hdr->pixelfmt.fourcc[3] != 0 ? hdr->pixelfmt.fourcc[3] : ' ', + GETL32 (hdr->pixelfmt.fourcc)); return FALSE; } + /* Check bits-per-pixel */ if (hdr->pixelfmt.flags & DDPF_RGB) { if ((hdr->pixelfmt.bpp != 8) && (hdr->pixelfmt.bpp != 16) && (hdr->pixelfmt.bpp != 24) && - (hdr->pixelfmt.bpp != 32)) + (hdr->pixelfmt.bpp != 32) && + (hdr->pixelfmt.bpp != 48) && + (hdr->pixelfmt.bpp != 64) && + (hdr->pixelfmt.bpp != 96) && + (hdr->pixelfmt.bpp != 128)) { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("Invalid bpp value for RGB data: %d"), @@ -774,8 +998,9 @@ validate_header (dds_header_t *hdr, hdr->pixelfmt.flags |= DDPF_RGB; } - if (! (hdr->pixelfmt.flags & DDPF_RGB) && - ! (hdr->pixelfmt.flags & DDPF_ALPHA) && + /* Check format flags */ + if (! (hdr->pixelfmt.flags & DDPF_RGB) && + ! (hdr->pixelfmt.flags & DDPF_ALPHA) && ! (hdr->pixelfmt.flags & DDPF_FOURCC) && ! (hdr->pixelfmt.flags & DDPF_LUMINANCE)) { @@ -823,14 +1048,14 @@ validate_header (dds_header_t *hdr, return TRUE; } -/* - * This function will set the necessary flags and attributes in the standard - * dds header using the information found in the DX10 header. +/* Set necessary flags and attributes in the standard header using information found in the DX10 header. + * TODO: This is a leftover from the way DX10 support was originally bolted on, should work towards removing this entirely. */ static gboolean -setup_dxgi_format (dds_header_t *hdr, - dds_header_dx10_t *dx10hdr, - GError **error) +setup_dxgi_format (dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + GError **error) { if ((dx10hdr->resourceDimension == D3D10_RESOURCE_DIMENSION_TEXTURE2D) && (dx10hdr->miscFlag & D3D10_RESOURCE_MISC_TEXTURECUBE)) @@ -848,150 +1073,212 @@ setup_dxgi_format (dds_header_t *hdr, (dx10hdr->resourceDimension != D3D10_RESOURCE_DIMENSION_TEXTURE3D)) return FALSE; - /* check for a compressed DXGI format */ - if ((dx10hdr->dxgiFormat >= DXGI_FORMAT_BC1_TYPELESS) && - (dx10hdr->dxgiFormat <= DXGI_FORMAT_BC5_SNORM)) + /* Unset FourCC flag by default */ + hdr->pixelfmt.flags &= ~DDPF_FOURCC; + + switch (dx10hdr->dxgiFormat) { - /* set flag and replace FOURCC */ + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + /* Re-set FourCC flag for compressed formats */ hdr->pixelfmt.flags |= DDPF_FOURCC; + break; - switch (dx10hdr->dxgiFormat) - { - case DXGI_FORMAT_BC1_TYPELESS: - case DXGI_FORMAT_BC1_UNORM: - case DXGI_FORMAT_BC1_UNORM_SRGB: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('D','X','T','1')); - break; - case DXGI_FORMAT_BC2_TYPELESS: - case DXGI_FORMAT_BC2_UNORM: - case DXGI_FORMAT_BC2_UNORM_SRGB: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('D','X','T','3')); - break; - case DXGI_FORMAT_BC3_TYPELESS: - case DXGI_FORMAT_BC3_UNORM: - case DXGI_FORMAT_BC3_UNORM_SRGB: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('D','X','T','5')); - break; - case DXGI_FORMAT_BC4_TYPELESS: - case DXGI_FORMAT_BC4_UNORM: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('A','T','I','1')); - break; - case DXGI_FORMAT_BC4_SNORM: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('B','C','4','S')); - break; - case DXGI_FORMAT_BC5_TYPELESS: - case DXGI_FORMAT_BC5_UNORM: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('A','T','I','2')); - break; - case DXGI_FORMAT_BC5_SNORM: - PUTL32(hdr->pixelfmt.fourcc, FOURCC ('B','C','5','S')); - break; - default: - break; - } - } - else - { - /* unset the FOURCC flag */ - hdr->pixelfmt.flags &= ~DDPF_FOURCC; + case DXGI_FORMAT_B8G8R8A8_TYPELESS: + case DXGI_FORMAT_B8G8R8A8_UNORM: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + hdr->pixelfmt.bpp = 32; + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.rmask = 0x00ff0000; + hdr->pixelfmt.gmask = 0x0000ff00; + hdr->pixelfmt.bmask = 0x000000ff; + hdr->pixelfmt.amask = 0xff000000; + break; + case DXGI_FORMAT_B8G8R8X8_TYPELESS: + case DXGI_FORMAT_B8G8R8X8_UNORM: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + hdr->pixelfmt.bpp = 32; + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.rmask = 0x00ff0000; + hdr->pixelfmt.gmask = 0x0000ff00; + hdr->pixelfmt.bmask = 0x000000ff; + hdr->pixelfmt.amask = 0x00000000; + break; + case DXGI_FORMAT_R8G8B8A8_TYPELESS: + case DXGI_FORMAT_R8G8B8A8_UNORM: + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_R8G8B8A8_UINT: + case DXGI_FORMAT_R8G8B8A8_SNORM: + case DXGI_FORMAT_R8G8B8A8_SINT: + hdr->pixelfmt.bpp = 32; + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.rmask = 0x000000ff; + hdr->pixelfmt.gmask = 0x0000ff00; + hdr->pixelfmt.bmask = 0x00ff0000; + hdr->pixelfmt.amask = 0xff000000; + break; + case DXGI_FORMAT_B5G6R5_UNORM: + hdr->pixelfmt.bpp = 16; + hdr->pixelfmt.rmask = 0x0000f800; + hdr->pixelfmt.gmask = 0x000007e0; + hdr->pixelfmt.bmask = 0x0000001f; + hdr->pixelfmt.amask = 0x00000000; + break; + case DXGI_FORMAT_B5G5R5A1_UNORM: + hdr->pixelfmt.bpp = 16; + hdr->pixelfmt.rmask = 0x00007c00; + hdr->pixelfmt.gmask = 0x000003e0; + hdr->pixelfmt.bmask = 0x0000001f; + hdr->pixelfmt.amask = 0x00008000; + break; + case DXGI_FORMAT_R10G10B10A2_TYPELESS: + case DXGI_FORMAT_R10G10B10A2_UNORM: + case DXGI_FORMAT_R10G10B10A2_UINT: + hdr->pixelfmt.bpp = 32; + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.rmask = 0x000003ff; + hdr->pixelfmt.gmask = 0x000ffc00; + hdr->pixelfmt.bmask = 0x3ff00000; + hdr->pixelfmt.amask = 0xc0000000; + break; + case DXGI_FORMAT_A8_UNORM: + hdr->pixelfmt.bpp = 8; + hdr->pixelfmt.flags |= DDPF_ALPHA | DDPF_ALPHAPIXELS; + hdr->pixelfmt.rmask = hdr->pixelfmt.gmask = hdr->pixelfmt.bmask = 0; + hdr->pixelfmt.amask = 0x000000ff; + break; + case DXGI_FORMAT_R8_TYPELESS: + case DXGI_FORMAT_R8_UNORM: + case DXGI_FORMAT_R8_UINT: + case DXGI_FORMAT_R8_SNORM: + case DXGI_FORMAT_R8_SINT: + hdr->pixelfmt.bpp = 8; + hdr->pixelfmt.rmask = 0x000000ff; + hdr->pixelfmt.gmask = hdr->pixelfmt.bmask = hdr->pixelfmt.amask = 0; + break; + case DXGI_FORMAT_B4G4R4A4_UNORM: + hdr->pixelfmt.bpp = 16; + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.rmask = 0x00000f00; + hdr->pixelfmt.gmask = 0x000000f0; + hdr->pixelfmt.bmask = 0x0000000f; + hdr->pixelfmt.amask = 0x0000f000; + break; + case DXGI_FORMAT_R8G8_TYPELESS: + case DXGI_FORMAT_R8G8_UNORM: + case DXGI_FORMAT_R8G8_UINT: + case DXGI_FORMAT_R8G8_SNORM: + case DXGI_FORMAT_R8G8_SINT: + hdr->pixelfmt.flags |= DDPF_RGB; + hdr->pixelfmt.bpp = 16; + hdr->pixelfmt.rmask = 0x000000ff; + hdr->pixelfmt.gmask = 0x0000ff00; + hdr->pixelfmt.bmask = hdr->pixelfmt.amask = 0; + load_info->dxgi_format = DXGI_FORMAT_R8G8_UINT; + if (dx10hdr->dxgiFormat >= DXGI_FORMAT_R8G8_SNORM) + load_info->is_signed = TRUE; + break; + case DXGI_FORMAT_R16_TYPELESS: + case DXGI_FORMAT_D16_UNORM: + case DXGI_FORMAT_R16_UNORM: + case DXGI_FORMAT_R16_UINT: + case DXGI_FORMAT_R16_SNORM: + case DXGI_FORMAT_R16_SINT: + hdr->pixelfmt.flags |= DDPF_RGB; + hdr->pixelfmt.bpp = 16; + hdr->pixelfmt.rmask = 0x0000ffff; + hdr->pixelfmt.gmask = hdr->pixelfmt.bmask = hdr->pixelfmt.amask = 0; + load_info->dxgi_format = DXGI_FORMAT_R16_UNORM; + if (dx10hdr->dxgiFormat >= DXGI_FORMAT_R16_SNORM) + load_info->is_signed = TRUE; + break; + case DXGI_FORMAT_R16G16_TYPELESS: + case DXGI_FORMAT_R16G16_UNORM: + case DXGI_FORMAT_R16G16_UINT: + case DXGI_FORMAT_R16G16_SNORM: + case DXGI_FORMAT_R16G16_SINT: + hdr->pixelfmt.flags |= DDPF_RGB; + hdr->pixelfmt.bpp = 32; + hdr->pixelfmt.rmask = 0x0000ffff; + hdr->pixelfmt.gmask = 0xffff0000; + hdr->pixelfmt.bmask = hdr->pixelfmt.amask = 0; + load_info->dxgi_format = DXGI_FORMAT_R16G16_UINT; + if (dx10hdr->dxgiFormat >= DXGI_FORMAT_R16G16_SNORM) + load_info->is_signed = TRUE; + break; + case DXGI_FORMAT_R16G16_FLOAT: + hdr->pixelfmt.flags |= DDPF_RGB; + hdr->pixelfmt.bpp = 32; + hdr->pixelfmt.rmask = 0x0000ffff; + hdr->pixelfmt.gmask = 0xffff0000; + hdr->pixelfmt.bmask = hdr->pixelfmt.amask = 0; + load_info->dxgi_format = DXGI_FORMAT_R16G16_FLOAT; + break; + case DXGI_FORMAT_R16G16B16A16_TYPELESS: + case DXGI_FORMAT_R16G16B16A16_UNORM: + case DXGI_FORMAT_R16G16B16A16_UINT: + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.bpp = 64; + load_info->dxgi_format = DXGI_FORMAT_R16G16B16A16_UINT; + break; + case DXGI_FORMAT_R16G16B16A16_SNORM: + case DXGI_FORMAT_R16G16B16A16_SINT: + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.bpp = 64; + load_info->is_signed = TRUE; + load_info->dxgi_format = DXGI_FORMAT_R16G16B16A16_UINT; + break; + case DXGI_FORMAT_R16G16B16A16_FLOAT: + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.bpp = 64; + load_info->dxgi_format = DXGI_FORMAT_R16G16B16A16_FLOAT; + break; - switch (dx10hdr->dxgiFormat) - { - case DXGI_FORMAT_B8G8R8A8_TYPELESS: - case DXGI_FORMAT_B8G8R8A8_UNORM: - case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: - hdr->pixelfmt.bpp = 32; - hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS; - hdr->pixelfmt.rmask = 0x00ff0000; - hdr->pixelfmt.gmask = 0x0000ff00; - hdr->pixelfmt.bmask = 0x000000ff; - hdr->pixelfmt.amask = 0xff000000; - break; - case DXGI_FORMAT_B8G8R8X8_TYPELESS: - case DXGI_FORMAT_B8G8R8X8_UNORM: - case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: - hdr->pixelfmt.bpp = 32; - hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS; - hdr->pixelfmt.rmask = 0x00ff0000; - hdr->pixelfmt.gmask = 0x0000ff00; - hdr->pixelfmt.bmask = 0x000000ff; - hdr->pixelfmt.amask = 0x00000000; - break; - case DXGI_FORMAT_R8G8B8A8_TYPELESS: - case DXGI_FORMAT_R8G8B8A8_UNORM: - case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: - case DXGI_FORMAT_R8G8B8A8_UINT: - case DXGI_FORMAT_R8G8B8A8_SNORM: - case DXGI_FORMAT_R8G8B8A8_SINT: - hdr->pixelfmt.bpp = 32; - hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS; - hdr->pixelfmt.rmask = 0x000000ff; - hdr->pixelfmt.gmask = 0x0000ff00; - hdr->pixelfmt.bmask = 0x00ff0000; - hdr->pixelfmt.amask = 0xff000000; - break; - case DXGI_FORMAT_B5G6R5_UNORM: - hdr->pixelfmt.bpp = 16; - hdr->pixelfmt.rmask = 0x0000f800; - hdr->pixelfmt.gmask = 0x000007e0; - hdr->pixelfmt.bmask = 0x0000001f; - hdr->pixelfmt.amask = 0x00000000; - break; - case DXGI_FORMAT_B5G5R5A1_UNORM: - hdr->pixelfmt.bpp = 16; - hdr->pixelfmt.rmask = 0x00007c00; - hdr->pixelfmt.gmask = 0x000003e0; - hdr->pixelfmt.bmask = 0x0000001f; - hdr->pixelfmt.amask = 0x00008000; - break; - case DXGI_FORMAT_R10G10B10A2_TYPELESS: - case DXGI_FORMAT_R10G10B10A2_UNORM: - case DXGI_FORMAT_R10G10B10A2_UINT: - hdr->pixelfmt.bpp = 32; - hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS; - hdr->pixelfmt.rmask = 0x000003ff; - hdr->pixelfmt.gmask = 0x000ffc00; - hdr->pixelfmt.bmask = 0x3ff00000; - hdr->pixelfmt.amask = 0xc0000000; - break; - case DXGI_FORMAT_A8_UNORM: - hdr->pixelfmt.bpp = 8; - hdr->pixelfmt.flags |= DDPF_ALPHA | DDPF_ALPHAPIXELS; - hdr->pixelfmt.rmask = hdr->pixelfmt.gmask = hdr->pixelfmt.bmask = 0; - hdr->pixelfmt.amask = 0x000000ff; - break; - case DXGI_FORMAT_R8_TYPELESS: - case DXGI_FORMAT_R8_UNORM: - case DXGI_FORMAT_R8_UINT: - case DXGI_FORMAT_R8_SNORM: - case DXGI_FORMAT_R8_SINT: - hdr->pixelfmt.bpp = 8; - hdr->pixelfmt.rmask = 0x000000ff; - hdr->pixelfmt.gmask = hdr->pixelfmt.bmask = hdr->pixelfmt.amask = 0; - break; - case DXGI_FORMAT_B4G4R4A4_UNORM: - hdr->pixelfmt.bpp = 16; - hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS; - hdr->pixelfmt.rmask = 0x00000f00; - hdr->pixelfmt.gmask = 0x000000f0; - hdr->pixelfmt.bmask = 0x0000000f; - hdr->pixelfmt.amask = 0x0000f000; - break; - case DXGI_FORMAT_UNKNOWN: - g_message ("Unknown DXGI format. Expect problems..."); - break; - default: /* unsupported DXGI format */ - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("Unsupported DXGI format (%d)"), - dx10hdr->dxgiFormat); - return FALSE; - } + case DXGI_FORMAT_R32G32B32A32_TYPELESS: + case DXGI_FORMAT_R32G32B32A32_UINT: + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.bpp = 128; + load_info->dxgi_format = DXGI_FORMAT_R32G32B32A32_UINT; + break; + case DXGI_FORMAT_R32G32B32A32_SINT: + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.bpp = 128; + load_info->is_signed = TRUE; + load_info->dxgi_format = DXGI_FORMAT_R32G32B32A32_UINT; + break; + case DXGI_FORMAT_R32G32B32A32_FLOAT: + hdr->pixelfmt.flags |= DDPF_ALPHAPIXELS | DDPF_RGB; + hdr->pixelfmt.bpp = 128; + load_info->dxgi_format = DXGI_FORMAT_R32G32B32A32_FLOAT; + break; + + case DXGI_FORMAT_UNKNOWN: + g_message ("Unknown DXGI format. Expect problems..."); + break; + + default: /* Unsupported DXGI format */ + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Unsupported DXGI format (%d)"), + dx10hdr->dxgiFormat); + return FALSE; } return TRUE; } - static const Babl * premultiplied_variant (const Babl* format) { @@ -1004,17 +1291,17 @@ premultiplied_variant (const Babl* format) } static gboolean -load_layer (FILE *fp, - dds_header_t *hdr, - dds_load_info_t *d, - PikaImage *image, - guint level, - char *prefix, - guint *l, - guchar *pixels, - guchar *buf, - gboolean decode_images, - GError **error) +load_layer (FILE *fp, + const dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + PikaImage *image, + guint level, + gchar *prefix, + guint *layer_index, + guchar *pixels, + guchar *buf, + GError **error) { GeglBuffer *buffer; const Babl *bablfmt = NULL; @@ -1035,10 +1322,10 @@ load_layer (FILE *fp, file_size = ftell (fp); fseek (fp, current_position, SEEK_SET); - if (width < 1) width = 1; + if (width < 1) width = 1; if (height < 1) height = 1; - switch (d->bpp) + switch (load_info->bpp) { case 1: if (hdr->pixelfmt.flags & DDPF_PALETTEINDEXED8) @@ -1067,41 +1354,82 @@ load_layer (FILE *fp, { type = PIKA_INDEXEDA_IMAGE; } - else if (hdr->pixelfmt.amask == 0xf000) /* RGBA4 */ + else if (hdr->pixelfmt.amask == 0xf000) /* RGBA4 */ { type = PIKA_RGBA_IMAGE; bablfmt = babl_format ("R'G'B'A u8"); } - else if (hdr->pixelfmt.amask == 0xff00) /* L8A8 */ + else if (hdr->pixelfmt.amask == 0xff00) /* L8A8 */ { - type = PIKA_GRAYA_IMAGE; - bablfmt = babl_format ("Y'A u8"); + if (hdr->pixelfmt.flags & DDPF_LUMINANCE) + { + type = PIKA_GRAYA_IMAGE; + bablfmt = babl_format ("Y'A u8"); + } + else + { + type = PIKA_RGB_IMAGE; + bablfmt = babl_format ("R'G'B'A u8"); + } } - else if (hdr->pixelfmt.bmask == 0x1f) /* R5G6B5 or RGB5A1 */ + else if (hdr->pixelfmt.rmask == 0xff) /* R8G8 */ + { + type = PIKA_RGB_IMAGE; + bablfmt = babl_format ("R'G'B' u8"); + } + else if (hdr->pixelfmt.bmask == 0x1f) /* R5G6B5 or RGB5A1 */ { type = (hdr->pixelfmt.amask == 0x8000) ? PIKA_RGBA_IMAGE : PIKA_RGB_IMAGE; bablfmt = (hdr->pixelfmt.amask == 0x8000) ? babl_format ("R'G'B'A u8") : babl_format ("R'G'B' u8"); } - else if (hdr->pixelfmt.rmask == 0xffff || /* L16 */ + else if (hdr->pixelfmt.rmask == 0xffff || hdr->pixelfmt.gmask == 0xffff || hdr->pixelfmt.bmask == 0xffff || - hdr->pixelfmt.amask == 0xffff) + hdr->pixelfmt.amask == 0xffff) /* L16 */ { type = PIKA_GRAY_IMAGE; bablfmt = babl_format ("Y' u16"); } break; - case 3: type = PIKA_RGB_IMAGE; bablfmt = babl_format ("R'G'B' u8"); break; + case 3: + type = PIKA_RGB_IMAGE; + bablfmt = babl_format ("R'G'B' u8"); + break; case 4: case 8: { type = PIKA_RGBA_IMAGE; - if (d->pika_bps == 1) - bablfmt = babl_format ("R'G'B'A u8"); - else if (d->pika_bps == 2) - bablfmt = babl_format ("R'G'B'A u16"); + if (load_info->pika_bps == 1) + { + bablfmt = babl_format ("R'G'B'A u8"); + } + else if (load_info->pika_bps == 2) + { + if (load_info->dxgi_format == DXGI_FORMAT_R16G16B16A16_FLOAT) + bablfmt = babl_format ("R'G'B'A half"); + else if (load_info->dxgi_format == DXGI_FORMAT_R16G16_FLOAT) + bablfmt = babl_format ("R'G'B' half"); + else + bablfmt = babl_format ("R'G'B'A u16"); + } } break; + case 16: + { + type = PIKA_RGBA_IMAGE; + if (load_info->dxgi_format == DXGI_FORMAT_R32G32B32A32_FLOAT) + bablfmt = babl_format ("R'G'B'A float"); + else + { + bablfmt = babl_format ("R'G'B'A u32"); + } + } + break; + default: + g_set_error (error, PIKA_PLUG_IN_ERROR, 0, + _("Unsupported value for bytes per pixel: %d"), load_info->bpp); + return FALSE; + break; } layer_name = (level) ? g_strdup_printf ("mipmap %d %s", level, prefix) : @@ -1111,12 +1439,13 @@ load_layer (FILE *fp, pika_image_get_default_new_layer_mode (image)); g_free (layer_name); - pika_image_insert_layer (image, layer, NULL, *l); + pika_image_insert_layer (image, layer, NULL, *layer_index); if (type == PIKA_INDEXED_IMAGE || type == PIKA_INDEXEDA_IMAGE) bablfmt = pika_drawable_get_format (PIKA_DRAWABLE (layer)); - if ((*l)++) pika_item_set_visible (PIKA_ITEM (layer), FALSE); + if ((*layer_index)++) + pika_item_set_visible (PIKA_ITEM (layer), FALSE); buffer = pika_drawable_get_buffer (PIKA_DRAWABLE (layer)); @@ -1127,20 +1456,59 @@ load_layer (FILE *fp, guint w = (width + 3) >> 2; guint h = (height + 3) >> 2; - switch (GETL32(hdr->pixelfmt.fourcc)) + if (GETL32 (hdr->pixelfmt.fourcc) == FOURCC ('D','X','1','0')) { - case FOURCC ('D','X','T','1'): format = DDS_COMPRESS_BC1; break; - case FOURCC ('D','X','T','2'): bablfmt = premultiplied_variant (bablfmt); - case FOURCC ('D','X','T','3'): format = DDS_COMPRESS_BC2; break; - case FOURCC ('D','X','T','4'): bablfmt = premultiplied_variant (bablfmt); - case FOURCC ('D','X','T','5'): format = DDS_COMPRESS_BC3; break; - case FOURCC ('R','X','G','B'): format = DDS_COMPRESS_BC3; break; - case FOURCC ('A','T','I','1'): - case FOURCC ('B','C','4','U'): - case FOURCC ('B','C','4','S'): format = DDS_COMPRESS_BC4; break; - case FOURCC ('A','T','I','2'): - case FOURCC ('B','C','5','U'): - case FOURCC ('B','C','5','S'): format = DDS_COMPRESS_BC5; break; + /* Determine compression type from DXGI format */ + switch (dx10hdr->dxgiFormat) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + format = DDS_COMPRESS_BC1; + break; + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + format = DDS_COMPRESS_BC2; + break; + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + format = DDS_COMPRESS_BC3; + break; + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + format = DDS_COMPRESS_BC4; + break; + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + format = DDS_COMPRESS_BC5; + break; + default: + format = DDS_FORMAT_MAX; + break; + } + } + else + { + /* Determine compression type from FourCC */ + switch (GETL32 (hdr->pixelfmt.fourcc)) + { + case FOURCC ('D','X','T','1'): format = DDS_COMPRESS_BC1; break; + case FOURCC ('D','X','T','2'): bablfmt = premultiplied_variant (bablfmt); + case FOURCC ('D','X','T','3'): format = DDS_COMPRESS_BC2; break; + case FOURCC ('D','X','T','4'): bablfmt = premultiplied_variant (bablfmt); + case FOURCC ('D','X','T','5'): format = DDS_COMPRESS_BC3; break; + case FOURCC ('R','X','G','B'): format = DDS_COMPRESS_BC3; break; + case FOURCC ('A','T','I','1'): + case FOURCC ('B','C','4','U'): + case FOURCC ('B','C','4','S'): format = DDS_COMPRESS_BC4; break; + case FOURCC ('A','T','I','2'): + case FOURCC ('B','C','5','U'): + case FOURCC ('B','C','5','S'): format = DDS_COMPRESS_BC5; break; + } } size = w * h; @@ -1159,7 +1527,7 @@ load_layer (FILE *fp, } if ((hdr->flags & DDSD_LINEARSIZE) && - !fread (buf, size, 1, fp)) + ! fread (buf, size, 1, fp)) { g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, _("Unexpected EOF.\n")); @@ -1167,175 +1535,370 @@ load_layer (FILE *fp, } if ((hdr->pixelfmt.flags & DDPF_RGB) || - (hdr->pixelfmt.flags & DDPF_ALPHA)) + (hdr->pixelfmt.flags & DDPF_ALPHA)) /* Read uncompressed pixel data */ { + guint rshiftbits, gshiftbits, bshiftbits, ashiftbits; + guint rowstride = width * load_info->bpp; guint ired = 0; guint iblue = 2; + /* Prior plug-in versions (3.9.91 and earlier) wrote the R and G channels reversed for RGB10A2. */ if (hdr->reserved.pika_dds_special.magic1 == FOURCC ('G','I','M','P') && hdr->reserved.pika_dds_special.version <= 199003 && hdr->reserved.pika_dds_special.version > 0 && - d->bpp >= 3 && hdr->pixelfmt.amask == 0xc0000000) + load_info->bpp >= 3 && hdr->pixelfmt.amask == 0xc0000000) { - /* PIKA dds plug-in versions before or equal to 199003 (3.9.91) wrote - * the red and green channels reversed for RGB10A2. We will fix that here. - */ g_printerr ("Switching incorrect red and green channels in RGB10A2 dds " "written by an older version of PIKA's dds plug-in.\n"); ired = 2; iblue = 0; } + if (load_info->pika_bps == 1) + { + rshiftbits = (8 - load_info->rbits); + gshiftbits = (8 - load_info->gbits); + bshiftbits = (8 - load_info->bbits); + ashiftbits = (8 - load_info->abits); + } + else if (load_info->pika_bps == 2) + { + rshiftbits = (16 - load_info->rbits); + gshiftbits = (16 - load_info->gbits); + bshiftbits = (16 - load_info->bbits); + ashiftbits = (16 - load_info->abits); + } + else + { + /* Assuming 4 bytes per sample */ + rshiftbits = (32 - load_info->rbits); + gshiftbits = (32 - load_info->gbits); + bshiftbits = (32 - load_info->bbits); + ashiftbits = (32 - load_info->abits); + } + + if ((hdr->flags & DDSD_PITCH) && (rowstride > hdr->pitch_or_linsize)) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Requested data exceeds size of file.\n")); + return FALSE; + } + z = 0; for (y = 0, n = 0; y < height; ++y, ++n) { - if (n >= d->tile_height) + if (n >= load_info->tile_height) { gegl_buffer_set (buffer, GEGL_RECTANGLE (0, y - n, layerw, n), 0, bablfmt, pixels, GEGL_AUTO_ROWSTRIDE); n = 0; - pika_progress_update ((double) y / (double) hdr->height); + pika_progress_update ((gdouble) y / (gdouble) hdr->height); } - current_position = ftell (fp); - if ((hdr->flags & DDSD_PITCH) && - ((width * d->bpp) > (file_size - current_position) || - (width * d->bpp) > hdr->pitch_or_linsize)) + if (hdr->flags & DDSD_PITCH) { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("Requested data exceeds size of file.\n")); - return FALSE; + current_position = ftell (fp); + if (rowstride > (file_size - current_position)) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Requested data exceeds size of file.\n")); + return FALSE; + } + if (! fread (buf, rowstride, 1, fp)) + { + g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, + _("Unexpected EOF.\n")); + return FALSE; + } } - if ((hdr->flags & DDSD_PITCH) && - ! fread (buf, width * d->bpp, 1, fp)) - { - g_set_error (error, G_FILE_ERROR, G_FILE_ERROR_FAILED, - _("Unexpected EOF.\n")); - return FALSE; - } - - if (!(hdr->flags & DDSD_LINEARSIZE)) z = 0; + if (! (hdr->flags & DDSD_LINEARSIZE)) + z = 0; for (x = 0; x < layerw; ++x) { guint pixel = buf[z]; - guint pos = (n * layerw + x) * d->pika_bpp; + guint pos = (n * layerw + x) * load_info->pika_bpp; - if (d->bpp > 1) pixel += ((guint) buf[z + 1] << 8); - if (d->bpp > 2) pixel += ((guint) buf[z + 2] << 16); - if (d->bpp > 3) pixel += ((guint) buf[z + 3] << 24); + if (load_info->bpp > 1) pixel += ((guint) buf[z + 1] << 8); + if (load_info->bpp > 2) pixel += ((guint) buf[z + 2] << 16); + if (load_info->bpp > 3) pixel += ((guint) buf[z + 3] << 24); - if (d->bpp >= 3) + if (load_info->bpp >= 3) { - if (hdr->pixelfmt.amask == 0xc0000000) /* handle RGB10A2 */ + if (hdr->pixelfmt.amask == 0xc0000000) /* RGB10A2 */ { - pixels[pos + ired] = (pixel >> d->rshift) >> 2; - pixels[pos + 1] = (pixel >> d->gshift) >> 2; - pixels[pos + iblue] = (pixel >> d->bshift) >> 2; + guint16 *pixels16 = (guint16 *) &pixels[pos]; + + pixels16[ired] = (guint16) (pixel >> load_info->rshift << rshiftbits); + pixels16[1] = (guint16) (pixel >> load_info->gshift << gshiftbits); + pixels16[iblue] = (guint16) (pixel >> load_info->bshift << bshiftbits); if (hdr->pixelfmt.flags & DDPF_ALPHAPIXELS) - pixels[pos + 3] = (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask; + { + pixels16[3] = (guint16) ( + (pixel >> load_info->ashift << ashiftbits & load_info->amask) + * 65535 / load_info->amask); + } } - else if (d->rmask > 0 && d->gmask > 0 && d->bmask > 0) + else if (load_info->rmask > 0 && load_info->gmask > 0 && load_info->bmask > 0) { pixels[pos] = - (pixel >> d->rshift << (8 - d->rbits) & d->rmask) * 255 / d->rmask; + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + pixels[pos + 1] = - (pixel >> d->gshift << (8 - d->gbits) & d->gmask) * 255 / d->gmask; + (pixel >> load_info->gshift << gshiftbits & load_info->gmask) + * 255 / load_info->gmask; + pixels[pos + 2] = - (pixel >> d->bshift << (8 - d->bbits) & d->bmask) * 255 / d->bmask; - if (hdr->pixelfmt.flags & DDPF_ALPHAPIXELS && d->bpp == 4) + (pixel >> load_info->bshift << bshiftbits & load_info->bmask) + * 255 / load_info->bmask; + + if (hdr->pixelfmt.flags & DDPF_ALPHAPIXELS && load_info->bpp == 4) { - if (d->amask > 0) + if (load_info->amask > 0) pixels[pos + 3] = - (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask; + (pixel >> load_info->ashift << ashiftbits & load_info->amask) + * 255 / load_info->amask; else pixels[pos + 3] = 255; } } - else if (d->bpp == 4) + else if (load_info->bpp == 4) { - if (d->pika_bps == 2) + if (load_info->pika_bps == 2) { guint16 *pixels16 = (guint16 *) &pixels[pos]; + pixels16[0] = 0; + pixels16[1] = 0; + pixels16[2] = 0; + pixels16[3] = 0xffff; - if (d->rbits == 16) /* red */ + if (load_info->rbits == 16) /* Red */ + pixels16[0] = (guint16) + (pixel >> load_info->rshift & load_info->rmask); + + if (load_info->gbits == 16) /* Green */ + pixels16[1] = (guint16) + (pixel >> load_info->gshift & load_info->gmask); + + if (load_info->bbits == 16) /* Blue */ + pixels16[2] = (guint16) + (pixel >> load_info->bshift & load_info->bmask); + + if (load_info->abits == 16) /* Alpha */ + pixels16[3] = (guint16) + (pixel >> load_info->ashift & load_info->amask); + + if (load_info->is_signed) { - pixels16[0] = (guint16) (pixel >> d->rshift & d->rmask); - } - else - { - pixels16[0] = 0; - } - if (d->gbits == 16) /* green */ - { - pixels16[1] = (guint16) (pixel >> d->gshift & d->gmask); - } - else - { - pixels16[1] = 0; - } - if (d->bbits == 16) /* blue */ - { - pixels16[2] = (guint16) (pixel >> d->bshift & d->bmask); - } - else - { - pixels16[2] = 0; - } - if (d->abits == 16) /* alpha */ - { - pixels16[3] = (guint16) (pixel >> d->ashift & d->amask); - } - else - { - pixels16[3] = 0xffff; + gint16 *signed16 = (gint16 *) &pixels16[0]; + + if (load_info->rbits == 16) + pixels16[0] = (gint16) ((gint32) signed16[0] + 32768); + + if (load_info->gbits == 16) + pixels16[1] = (gint16) ((gint32) signed16[1] + 32768); + + if (load_info->bbits == 16) + pixels16[2] = (gint16) ((gint32) signed16[2] + 32768); + + if (load_info->abits == 16) + pixels16[3] = (gint16) ((gint32) signed16[3] + 32768); } } } + else if (load_info->bpp == 8 && load_info->pika_bps == 2) + { + if (load_info->dxgi_format == DXGI_FORMAT_R16G16B16A16_UINT) + { + guint16 *pixels16 = (guint16 *) &pixels[pos]; + guchar *srcbuf = &buf[z]; + + pixels16[0] = (guint16) srcbuf[0] + ((guint16) srcbuf[1] << 8); + pixels16[1] = (guint16) srcbuf[2] + ((guint16) srcbuf[3] << 8); + pixels16[2] = (guint16) srcbuf[4] + ((guint16) srcbuf[5] << 8); + pixels16[3] = (guint16) srcbuf[6] + ((guint16) srcbuf[7] << 8); + + if (load_info->is_signed) + { + gint16 *signed16 = (gint16 *) &pixels16[0]; + + pixels16[0] = (gint16) ((gint32) signed16[0] + 32768); + pixels16[1] = (gint16) ((gint32) signed16[1] + 32768); + pixels16[2] = (gint16) ((gint32) signed16[2] + 32768); + pixels16[3] = (gint16) ((gint32) signed16[3] + 32768); + } + } + else if (load_info->dxgi_format == DXGI_FORMAT_R16G16B16A16_FLOAT) + { + guint16 *pixels16 = (guint16 *) &pixels[pos]; + guint16 *srcbuf = (guint16 *) &buf[z]; + + pixels16[0] = srcbuf[0]; + pixels16[1] = srcbuf[1]; + pixels16[2] = srcbuf[2]; + pixels16[3] = srcbuf[3]; + } + } + else if (load_info->bpp == 16 && load_info->pika_bps == 4) + { + if (load_info->dxgi_format == DXGI_FORMAT_R32G32B32A32_UINT) + { + guint32 *pixels32 = (guint32 *) &pixels[pos]; + guchar *srcbuf = &buf[z]; + + pixels32[0] = (guint32) srcbuf[0] + ((guint32) srcbuf[1] << 8) + + ((guint32) srcbuf[2] << 16) + ((guint32) srcbuf[3] << 24); + pixels32[1] = (guint32) srcbuf[4] + ((guint32) srcbuf[5] << 8) + + ((guint32) srcbuf[6] << 16) + ((guint32) srcbuf[7] << 24); + pixels32[2] = (guint32) srcbuf[8] + ((guint32) srcbuf[9] << 8) + + ((guint32) srcbuf[10] << 16) + ((guint32) srcbuf[11] << 24); + pixels32[3] = (guint32) srcbuf[12] + ((guint32) srcbuf[13] << 8) + + ((guint32) srcbuf[14] << 16) + ((guint32) srcbuf[15] << 24); + + if (load_info->is_signed) + { + gint32 *signed32 = (gint32 *) &pixels32[0]; + + pixels32[0] = (gint32) ((gint64) signed32[0] + 2147483648); + pixels32[1] = (gint32) ((gint64) signed32[1] + 2147483648); + pixels32[2] = (gint32) ((gint64) signed32[2] + 2147483648); + pixels32[3] = (gint32) ((gint64) signed32[3] + 2147483648); + } + } + else if (load_info->dxgi_format == DXGI_FORMAT_R32G32B32A32_FLOAT) + { + gfloat *pixelsf = (gfloat *) &pixels[pos]; + gfloat *srcbuf = (gfloat *) &buf[z]; + + pixelsf[0] = srcbuf[0]; + pixelsf[1] = srcbuf[1]; + pixelsf[2] = srcbuf[2]; + pixelsf[3] = srcbuf[3]; + } + } + else + { + g_warning ("Unhandled format! This shouldn't happen!"); + break; + } } - else if (d->bpp == 2) + else if (load_info->bpp == 2) { - if (hdr->pixelfmt.amask == 0xf000) /* RGBA4 */ + if (load_info->dxgi_format == DXGI_FORMAT_R16G16_FLOAT) + { + guint16 *pixels16 = (guint16 *) &pixels[pos]; + guint16 *srcbuf = (guint16 *) &buf[z]; + + pixels16[0] = srcbuf[0]; + pixels16[1] = srcbuf[1]; + pixels16[2] = 0; + } + else if (hdr->pixelfmt.amask == 0xf000) /* RGBA4 */ { pixels[pos] = - (pixel >> d->rshift << (8 - d->rbits) & d->rmask) * 255 / d->rmask; + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + pixels[pos + 1] = - (pixel >> d->gshift << (8 - d->gbits) & d->gmask) * 255 / d->gmask; + (pixel >> load_info->gshift << gshiftbits & load_info->gmask) + * 255 / load_info->gmask; + pixels[pos + 2] = - (pixel >> d->bshift << (8 - d->bbits) & d->bmask) * 255 / d->bmask; + (pixel >> load_info->bshift << bshiftbits & load_info->bmask) + * 255 / load_info->bmask; + pixels[pos + 3] = - (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask; + (pixel >> load_info->ashift << ashiftbits & load_info->amask) + * 255 / load_info->amask; } - else if (hdr->pixelfmt.amask == 0xff00) /* L8A8 */ + else if (hdr->pixelfmt.amask == 0xff00) /* L8A8 */ + { + if (hdr->pixelfmt.flags & DDPF_LUMINANCE) + { + pixels[pos] = + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + + pixels[pos + 1] = + (pixel >> load_info->ashift << ashiftbits & load_info->amask) + * 255 / load_info->amask; + } + else /* R8A8 */ + { + pixels[pos] = + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + + pixels[pos + 3] = + (pixel >> load_info->ashift << ashiftbits & load_info->amask) + * 255 / load_info->amask; + + pixels[pos + 1] = 0; + pixels[pos + 2] = 0; + + if (load_info->is_signed) + { + pixels[pos] = (guint8) ((gint16) pixels[pos] + 128); + pixels[pos+3] = (guint8) ((gint16) pixels[pos+3] + 128); + } + } + } + else if (hdr->pixelfmt.rmask == 0xff) /* R8G8 */ { pixels[pos] = - (pixel >> d->rshift << (8 - d->rbits) & d->rmask) * 255 / d->rmask; + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + pixels[pos + 1] = - (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask; + (pixel >> load_info->gshift << gshiftbits & load_info->gmask) + * 255 / load_info->gmask; + + pixels[pos + 2] = 0; + + if (load_info->is_signed) + { + pixels[pos] = (guint8) ((gint16) pixels[pos] + 128); + pixels[pos+1] = (guint8) ((gint16) pixels[pos+1] + 128); + } } - else if (hdr->pixelfmt.bmask == 0x1f) /* R5G6B5 or RGB5A1 */ + else if (hdr->pixelfmt.bmask == 0x1f) /* R5G6B5 or RGB5A1 */ { pixels[pos] = - (pixel >> d->rshift << (8 - d->rbits) & d->rmask) * 255 / d->rmask; + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + pixels[pos + 1] = - (pixel >> d->gshift << (8 - d->gbits) & d->gmask) * 255 / d->gmask; + (pixel >> load_info->gshift << gshiftbits & load_info->gmask) + * 255 / load_info->gmask; + pixels[pos + 2] = - (pixel >> d->bshift << (8 - d->bbits) & d->bmask) * 255 / d->bmask; + (pixel >> load_info->bshift << bshiftbits & load_info->bmask) + * 255 / load_info->bmask; + if (hdr->pixelfmt.amask == 0x8000) { pixels[pos + 3] = - (pixel >> d->ashift << (8 - d->abits) & d->amask) * 255 / d->amask; + (pixel >> load_info->ashift << ashiftbits & load_info->amask) + * 255 / load_info->amask; } } - else if (hdr->pixelfmt.rmask == 0xffff || /* L16 */ + else if (hdr->pixelfmt.rmask == 0xffff || hdr->pixelfmt.gmask == 0xffff || hdr->pixelfmt.bmask == 0xffff || - hdr->pixelfmt.amask == 0xffff) + hdr->pixelfmt.amask == 0xffff) /* L16 */ { guint16 *pixels16 = (guint16 *) &pixels[pos]; *pixels16 = (guint16) (pixel & 0xffff); + + if (load_info->is_signed) + { + gint16 *signed16 = (gint16 *) &pixels16[0]; + + pixels16[0] = (gint16) ((gint32) signed16[0] + 32768); + } } } else @@ -1344,88 +1907,97 @@ load_layer (FILE *fp, { pixels[pos] = pixel & 0xff; } - else if (hdr->pixelfmt.rmask == 0xe0) /* R3G3B2 */ + else if (hdr->pixelfmt.rmask == 0xe0) /* R3G3B2 */ { pixels[pos] = - (pixel >> d->rshift << (8 - d->rbits) & d->rmask) * 255 / d->rmask; + (pixel >> load_info->rshift << rshiftbits & load_info->rmask) + * 255 / load_info->rmask; + pixels[pos + 1] = - (pixel >> d->gshift << (8 - d->gbits) & d->gmask) * 255 / d->gmask; + (pixel >> load_info->gshift << gshiftbits & load_info->gmask) + * 255 / load_info->gmask; + pixels[pos + 2] = - (pixel >> d->bshift << (8 - d->bbits) & d->bmask) * 255 / d->bmask; + (pixel >> load_info->bshift << bshiftbits & load_info->bmask) + * 255 / load_info->bmask; } else if (hdr->pixelfmt.flags & DDPF_ALPHA) { pixels[pos + 0] = 255; pixels[pos + 1] = pixel & 0xff; } - else /* LUMINANCE */ + else /* LUMINANCE */ { pixels[pos] = pixel & 0xff; } } - z += d->bpp; + z += load_info->bpp; } } gegl_buffer_set (buffer, GEGL_RECTANGLE (0, y - n, layerw, n), 0, bablfmt, pixels, GEGL_AUTO_ROWSTRIDE); } - else if (hdr->pixelfmt.flags & DDPF_FOURCC) + else if (hdr->pixelfmt.flags & DDPF_FOURCC) /* Read compressed pixel data */ { guchar *dst; - dst = g_malloc (width * height * d->pika_bpp); - memset (dst, 0, width * height * d->pika_bpp); + dst = g_malloc (width * height * load_info->pika_bpp); + memset (dst, 0, width * height * load_info->pika_bpp); - if (d->pika_bpp == 4) + if (load_info->pika_bpp == 4) { for (y = 0; y < height; ++y) - for (x = 0; x < width; ++x) - dst[y * (width * 4) + (x * 4) + 3] = 255; + { + for (x = 0; x < width; ++x) + { + dst[y * (width * 4) + (x * 4) + 3] = 255; + } + } } - dxt_decompress (dst, buf, format, size, width, height, d->pika_bpp, + dxt_decompress (dst, buf, format, size, width, height, load_info->pika_bpp, hdr->pixelfmt.flags & DDPF_NORMAL); + /* Prior plug-in versions (before 3.9.90) wrote the R and G channels reversed for BC5. */ if (format == DDS_COMPRESS_BC5 && hdr->reserved.pika_dds_special.magic1 == FOURCC ('G','I','M','P') && hdr->reserved.pika_dds_special.version > 0 && hdr->reserved.pika_dds_special.version <= 199002) { - /* PIKA dds plug-in versions before 199002 == 3.9.90 wrote - * the red and green channels reversed. We will fix that here. - */ - g_printerr ("Switching incorrect red and green channels in BC5 dds " + g_printerr ("Switching incorrect red and green channels in BC5 DDS " "written by an older version of PIKA's dds plug-in.\n"); for (y = 0; y < height; ++y) - for (x = 0; x < width; ++x) - { - guchar tmpG; - guint pix_width = width * d->pika_bpp; - guint x_width = x * d->pika_bpp; + { + for (x = 0; x < width; ++x) + { + guchar tmpG; + guint pix_width = width * load_info->pika_bpp; + guint x_width = x * load_info->pika_bpp; - tmpG = dst[y * pix_width + x_width]; - dst[y * pix_width + x_width] = dst[y * pix_width + x_width + 1]; - dst[y * pix_width + x_width + 1] = tmpG; - } + tmpG = dst[y * pix_width + x_width]; + dst[y * pix_width + x_width] = dst[y * pix_width + x_width + 1]; + dst[y * pix_width + x_width + 1] = tmpG; + } + } } z = 0; for (y = 0, n = 0; y < height; ++y, ++n) { - if (n >= d->tile_height) + if (n >= load_info->tile_height) { gegl_buffer_set (buffer, GEGL_RECTANGLE (0, y - n, layerw, n), 0, bablfmt, pixels, GEGL_AUTO_ROWSTRIDE); n = 0; - pika_progress_update ((double)y / (double)hdr->height); + pika_progress_update ((gdouble) y / (gdouble) hdr->height); } - memcpy (pixels + n * layerw * d->pika_bpp, - dst + y * layerw * d->pika_bpp, - width * d->pika_bpp); + memcpy (pixels + n * layerw * load_info->pika_bpp, + dst + y * layerw * load_info->pika_bpp, + width * load_info->pika_bpp); } gegl_buffer_set (buffer, GEGL_RECTANGLE (0, y - n, layerw, n), 0, @@ -1438,21 +2010,20 @@ load_layer (FILE *fp, g_object_unref (buffer); - /* pika dds specific. decode encoded images */ - if (decode_images && - hdr->reserved.pika_dds_special.magic1 == FOURCC ('G','I','M','P') && + /* Decode files with PIKA-specific encodings */ + if (hdr->reserved.pika_dds_special.magic1 == FOURCC ('G','I','M','P') && hdr->reserved.pika_dds_special.magic2 == FOURCC ('-','D','D','S')) { switch (hdr->reserved.pika_dds_special.extra_fourcc) { case FOURCC ('A','E','X','P'): - decode_alpha_exp_image (PIKA_DRAWABLE (layer), FALSE); + decode_alpha_exponent (PIKA_DRAWABLE (layer)); break; case FOURCC ('Y','C','G','1'): - decode_ycocg_image (PIKA_DRAWABLE (layer), FALSE); + decode_ycocg (PIKA_DRAWABLE (layer)); break; case FOURCC ('Y','C','G','2'): - decode_ycocg_scaled_image (PIKA_DRAWABLE (layer), FALSE); + decode_ycocg_scaled (PIKA_DRAWABLE (layer)); break; default: break; @@ -1463,28 +2034,28 @@ load_layer (FILE *fp, } static gboolean -load_mipmaps (FILE *fp, - dds_header_t *hdr, - dds_load_info_t *d, - PikaImage *image, - char *prefix, - unsigned int *l, - guchar *pixels, - guchar *buf, - gboolean read_mipmaps, - gboolean decode_images, - GError **error) +load_mipmaps (FILE *fp, + const dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + PikaImage *image, + gchar *prefix, + guint *layer_index, + guchar *pixels, + guchar *buf, + gboolean read_mipmaps, + GError **error) { guint level; - if ((hdr->flags & DDSD_MIPMAPCOUNT) && + if ((hdr->flags & DDSD_MIPMAPCOUNT) && (hdr->caps.caps1 & DDSCAPS_MIPMAP) && read_mipmaps) { for (level = 1; level < hdr->num_mipmaps; ++level) { - if (! load_layer (fp, hdr, d, image, level, prefix, l, pixels, buf, - decode_images, error)) + if (! load_layer (fp, hdr, dx10hdr, load_info, image, level, prefix, layer_index, + pixels, buf, error)) return FALSE; } } @@ -1493,24 +2064,24 @@ load_mipmaps (FILE *fp, } static gboolean -load_face (FILE *fp, - dds_header_t *hdr, - dds_load_info_t *d, - PikaImage *image, - gchar *prefix, - guint *l, - guchar *pixels, - guchar *buf, - gboolean read_mipmaps, - gboolean decode_images, - GError **error) +load_face (FILE *fp, + const dds_header_t *hdr, + const dds_header_dx10_t *dx10hdr, + dds_load_info_t *load_info, + PikaImage *image, + gchar *prefix, + guint *layer_index, + guchar *pixels, + guchar *buf, + gboolean read_mipmaps, + GError **error) { - if (! load_layer (fp, hdr, d, image, 0, prefix, l, pixels, buf, - decode_images, error)) + if (! load_layer (fp, hdr, dx10hdr, load_info, image, 0, prefix, + layer_index, pixels, buf, error)) return FALSE; - return load_mipmaps (fp, hdr, d, image, prefix, l, pixels, buf, - read_mipmaps, decode_images, error); + return load_mipmaps (fp, hdr, dx10hdr, load_info, image, prefix, layer_index, + pixels, buf, read_mipmaps, error); } static guchar @@ -1535,28 +2106,28 @@ color_shift (guint mask) if (! mask) return 0; - while (!((mask >> i) & 1)) + while (! ((mask >> i) & 1)) ++i; return i; } static gboolean -load_dialog (PikaProcedure *procedure, - GObject *config) +load_dialog (PikaProcedure *procedure, + PikaProcedureConfig *config) { GtkWidget *dialog; GtkWidget *vbox; gboolean run; dialog = pika_procedure_dialog_new (procedure, - PIKA_PROCEDURE_CONFIG (config), + config, _("Open DDS")); vbox = pika_procedure_dialog_fill_box (PIKA_PROCEDURE_DIALOG (dialog), "dds-read-box", "load-mipmaps", - "decode-images", + "flip-image", NULL); gtk_box_set_spacing (GTK_BOX (vbox), 8); gtk_container_set_border_width (GTK_CONTAINER (vbox), 8); diff --git a/plug-ins/file-dds/ddsread.h b/plug-ins/file-dds/ddsread.h index be48454..1977604 100644 --- a/plug-ins/file-dds/ddsread.h +++ b/plug-ins/file-dds/ddsread.h @@ -22,12 +22,12 @@ #define __DDSREAD_H__ -extern PikaPDBStatusType read_dds (GFile *file, - PikaImage **image, - gboolean interactive, - PikaProcedure *procedure, - GObject *config, - GError **error); +extern PikaPDBStatusType read_dds (GFile *file, + PikaImage **image, + gboolean interactive, + PikaProcedure *procedure, + PikaProcedureConfig *config, + GError **error); #endif /* __DDSREAD_H__ */ diff --git a/plug-ins/file-dds/ddswrite.c b/plug-ins/file-dds/ddswrite.c index 4f197d0..ab7001d 100644 --- a/plug-ins/file-dds/ddswrite.c +++ b/plug-ins/file-dds/ddswrite.c @@ -35,13 +35,13 @@ #include -#include "ddswrite.h" #include "dds.h" +#include "ddswrite.h" #include "dxt.h" -#include "mipmap.h" #include "endian_rw.h" #include "imath.h" -#include "color.h" +#include "mipmap.h" +#include "misc.h" static gboolean write_image (FILE *fp, @@ -54,7 +54,7 @@ static gboolean save_dialog (PikaImage *image, PikaProcedureConfig *config); -static const char *cubemap_face_names[4][6] = +static const gchar *cubemap_face_names[4][6] = { { "positive x", "negative x", @@ -85,34 +85,32 @@ static gboolean is_volume = FALSE; static gboolean is_array = FALSE; static gboolean is_mipmap_chain_valid = FALSE; -static GtkWidget *transparent_check; - static struct { gint format; DXGI_FORMAT dxgi_format; gint bpp; - gint alpha; + gboolean alpha; guint rmask; guint gmask; guint bmask; guint amask; } format_info[] = { - { DDS_FORMAT_RGB8, DXGI_FORMAT_UNKNOWN, 3, 0, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000}, - { DDS_FORMAT_RGBA8, DXGI_FORMAT_B8G8R8A8_UNORM, 4, 1, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000}, - { DDS_FORMAT_BGR8, DXGI_FORMAT_UNKNOWN, 3, 0, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000}, - { DDS_FORMAT_ABGR8, DXGI_FORMAT_R8G8B8A8_UNORM, 4, 1, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000}, - { DDS_FORMAT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM, 2, 0, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000}, - { DDS_FORMAT_RGBA4, DXGI_FORMAT_B4G4R4A4_UNORM, 2, 1, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000}, - { DDS_FORMAT_RGB5A1, DXGI_FORMAT_B5G5R5A1_UNORM, 2, 1, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000}, - { DDS_FORMAT_RGB10A2, DXGI_FORMAT_R10G10B10A2_UNORM, 4, 1, 0x000003ff, 0x000ffc00, 0x3ff00000, 0xc0000000}, - { DDS_FORMAT_R3G3B2, DXGI_FORMAT_UNKNOWN, 1, 0, 0x000000e0, 0x0000001c, 0x00000003, 0x00000000}, - { DDS_FORMAT_A8, DXGI_FORMAT_A8_UNORM, 1, 0, 0x00000000, 0x00000000, 0x00000000, 0x000000ff}, - { DDS_FORMAT_L8, DXGI_FORMAT_R8_UNORM, 1, 0, 0x000000ff, 0x000000ff, 0x000000ff, 0x00000000}, - { DDS_FORMAT_L8A8, DXGI_FORMAT_UNKNOWN, 2, 1, 0x000000ff, 0x000000ff, 0x000000ff, 0x0000ff00}, - { DDS_FORMAT_AEXP, DXGI_FORMAT_B8G8R8A8_UNORM, 4, 1, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000}, - { DDS_FORMAT_YCOCG, DXGI_FORMAT_B8G8R8A8_UNORM, 4, 1, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000} + { DDS_FORMAT_RGB8, DXGI_FORMAT_UNKNOWN, 3, FALSE, 0x00ff0000, 0x0000ff00, 0x000000ff, 0x00000000}, + { DDS_FORMAT_RGBA8, DXGI_FORMAT_B8G8R8A8_UNORM, 4, TRUE, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000}, + { DDS_FORMAT_BGR8, DXGI_FORMAT_UNKNOWN, 3, FALSE, 0x000000ff, 0x0000ff00, 0x00ff0000, 0x00000000}, + { DDS_FORMAT_ABGR8, DXGI_FORMAT_R8G8B8A8_UNORM, 4, TRUE, 0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000}, + { DDS_FORMAT_R5G6B5, DXGI_FORMAT_B5G6R5_UNORM, 2, FALSE, 0x0000f800, 0x000007e0, 0x0000001f, 0x00000000}, + { DDS_FORMAT_RGBA4, DXGI_FORMAT_B4G4R4A4_UNORM, 2, TRUE, 0x00000f00, 0x000000f0, 0x0000000f, 0x0000f000}, + { DDS_FORMAT_RGB5A1, DXGI_FORMAT_B5G5R5A1_UNORM, 2, TRUE, 0x00007c00, 0x000003e0, 0x0000001f, 0x00008000}, + { DDS_FORMAT_RGB10A2, DXGI_FORMAT_R10G10B10A2_UNORM, 4, TRUE, 0x000003ff, 0x000ffc00, 0x3ff00000, 0xc0000000}, + { DDS_FORMAT_R3G3B2, DXGI_FORMAT_UNKNOWN, 1, FALSE, 0x000000e0, 0x0000001c, 0x00000003, 0x00000000}, + { DDS_FORMAT_A8, DXGI_FORMAT_A8_UNORM, 1, FALSE, 0x00000000, 0x00000000, 0x00000000, 0x000000ff}, + { DDS_FORMAT_L8, DXGI_FORMAT_R8_UNORM, 1, FALSE, 0x000000ff, 0x000000ff, 0x000000ff, 0x00000000}, + { DDS_FORMAT_L8A8, DXGI_FORMAT_UNKNOWN, 2, TRUE, 0x000000ff, 0x000000ff, 0x000000ff, 0x0000ff00}, + { DDS_FORMAT_AEXP, DXGI_FORMAT_B8G8R8A8_UNORM, 4, TRUE, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000}, + { DDS_FORMAT_YCOCG, DXGI_FORMAT_B8G8R8A8_UNORM, 4, TRUE, 0x00ff0000, 0x0000ff00, 0x000000ff, 0xff000000} }; @@ -144,7 +142,7 @@ check_mipmaps (gint savetype) else if (savetype == DDS_SAVE_ARRAY) { min_surfaces = 2; - max_surfaces = INT_MAX; + max_surfaces = G_MAXINT; } layers = pika_image_list_layers (global_image); @@ -221,18 +219,18 @@ check_cubemap (PikaImage *image) if (num_layers < 6) return FALSE; - /* check for a valid cubemap with mipmap layers */ + /* Check for a valid cubemap with mipmap layers */ if (num_layers > 6) { - /* check that mipmap layers are in order for a cubemap */ + /* Check that mipmap layers are in order for a cubemap */ if (! check_mipmaps (DDS_SAVE_CUBEMAP)) return FALSE; - /* invalidate cubemap faces */ + /* Invalidate cubemap faces */ for (i = 0; i < 6; ++i) cubemap_faces[i] = NULL; - /* find the mipmap level 0 layers */ + /* Find the mipmap level 0 layers */ w = pika_image_get_width (image); h = pika_image_get_height (image); @@ -246,7 +244,7 @@ check_cubemap (PikaImage *image) (pika_drawable_get_height (drawable) != h)) continue; - layer_name = (char *) pika_item_get_name (PIKA_ITEM (drawable)); + layer_name = (gchar *) pika_item_get_name (PIKA_ITEM (drawable)); for (j = 0; j < 6; ++j) { for (k = 0; k < 4; ++k) @@ -263,7 +261,7 @@ check_cubemap (PikaImage *image) } } - /* check for 6 valid faces */ + /* Check for 6 valid faces */ for (i = 0; i < 6; ++i) { if (cubemap_faces[i] == NULL) @@ -273,7 +271,7 @@ check_cubemap (PikaImage *image) } } - /* make sure they are all the same type */ + /* Make sure all faces are of the same type */ if (cubemap) { type = pika_drawable_type (PIKA_DRAWABLE (cubemap_faces[0])); @@ -287,7 +285,7 @@ check_cubemap (PikaImage *image) if (num_layers == 6) { - /* invalidate cubemap faces */ + /* Invalidate cubemap faces */ for (i = 0; i < 6; ++i) cubemap_faces[i] = NULL; @@ -315,7 +313,7 @@ check_cubemap (PikaImage *image) } } - /* check for 6 valid faces */ + /* Check for 6 valid faces */ for (i = 0; i < 6; ++i) { if (cubemap_faces[i] == NULL) @@ -325,7 +323,7 @@ check_cubemap (PikaImage *image) } } - /* make sure they are all the same size */ + /* Make sure all faces are of the same size */ if (cubemap) { w = pika_drawable_get_width (PIKA_DRAWABLE (cubemap_faces[0])); @@ -339,7 +337,7 @@ check_cubemap (PikaImage *image) } } - /* make sure they are all the same type */ + /* Make sure all faces are of the same type */ if (cubemap) { type = pika_drawable_type (PIKA_DRAWABLE (cubemap_faces[0])); @@ -372,7 +370,7 @@ check_volume (PikaImage *image) { volume = TRUE; - /* make sure all layers are the same size */ + /* Make sure all layers are of the same size */ w = pika_drawable_get_width (layers->data); h = pika_drawable_get_height (layers->data); @@ -387,7 +385,7 @@ check_volume (PikaImage *image) if (volume) { - /* make sure all layers are the same type */ + /* Make sure all layers are of the same type */ type = pika_drawable_type (layers->data); for (i = 1, list = layers->next; @@ -425,7 +423,7 @@ check_array (PikaImage *image) array = TRUE; - /* make sure all layers are the same size */ + /* Make sure all layers are of the same size */ w = pika_drawable_get_width (layers->data); h = pika_drawable_get_height (layers->data); @@ -440,7 +438,7 @@ check_array (PikaImage *image) if (array) { - /* make sure all layers are the same type */ + /* Make sure all layers are of the same type */ type = pika_drawable_type (layers->data); for (i = 1, list = g_list_next (layers); @@ -474,7 +472,7 @@ get_array_size (PikaImage *image) layers = pika_image_list_layers (image); num_layers = g_list_length (layers); - w = pika_image_get_width (image); + w = pika_image_get_width (image); h = pika_image_get_height (image); for (i = 0, list = layers; @@ -508,20 +506,17 @@ write_dds (GFile *file, gint mipmaps; gint savetype; - compression = pika_procedure_config_get_choice_id (config, - "compression-format"); - g_object_get (config, - "save-type", &savetype, - "mipmaps", &mipmaps, - NULL); + savetype = pika_procedure_config_get_choice_id (config, "save-type"); + compression = pika_procedure_config_get_choice_id (config, "compression-format"); + mipmaps = pika_procedure_config_get_choice_id (config, "mipmaps"); global_image = image; is_mipmap_chain_valid = check_mipmaps (savetype); is_cubemap = check_cubemap (image); - is_volume = check_volume (image); - is_array = check_array (image); + is_volume = check_volume (image); + is_array = check_array (image); if (interactive) { @@ -534,33 +529,32 @@ write_dds (GFile *file, } else { - if (savetype == DDS_SAVE_CUBEMAP && ! is_cubemap) + if ((savetype == DDS_SAVE_CUBEMAP) && (! is_cubemap)) { g_message ("DDS: Cannot save image as cube map"); return PIKA_PDB_EXECUTION_ERROR; } - if (savetype == DDS_SAVE_VOLUMEMAP && ! is_volume) + if ((savetype == DDS_SAVE_VOLUMEMAP) && (! is_volume)) { g_message ("DDS: Cannot save image as volume map"); return PIKA_PDB_EXECUTION_ERROR; } - if (savetype == DDS_SAVE_VOLUMEMAP && - compression != DDS_COMPRESS_NONE) + if ((savetype == DDS_SAVE_VOLUMEMAP) && (compression != DDS_COMPRESS_NONE)) { g_message ("DDS: Cannot save volume map with compression"); return PIKA_PDB_EXECUTION_ERROR; } - if (mipmaps == DDS_MIPMAP_EXISTING && - ! is_mipmap_chain_valid) + if ((mipmaps == DDS_MIPMAP_EXISTING) && (! is_mipmap_chain_valid)) { g_message ("DDS: Cannot save with existing mipmaps as the mipmap chain is incomplete"); return PIKA_PDB_EXECUTION_ERROR; } } + /* Open up the file to write */ fp = g_fopen (g_file_peek_path (file), "wb"); if (! fp) @@ -569,7 +563,7 @@ write_dds (GFile *file, return PIKA_PDB_EXECUTION_ERROR; } - pika_progress_init_printf ("Saving %s:", pika_file_get_utf8_name (file)); + pika_progress_init_printf (_("Saving: %s"), pika_file_get_utf8_name (file)); /* If destructive changes are going to happen to the image, * make sure we send a duplicate of it to write_image() @@ -596,12 +590,12 @@ write_dds (GFile *file, } static void -swap_rb (unsigned char *pixels, - unsigned int n, - int bpp) +swap_rb (guchar *pixels, + guint n, + gint bpp) { - unsigned int i; - unsigned char t; + guint i; + guchar t; for (i = 0; i < n; ++i) { @@ -612,57 +606,18 @@ swap_rb (unsigned char *pixels, } static void -alpha_exp (unsigned char *dst, - int r, - int g, - int b, - int a) +convert_pixels (guchar *dst, + guchar *src, + gint format, + gint w, + gint h, + gint d, + gint bpp, + guchar *palette, + gint mipmaps) { - float ar, ag, ab, aa; - - ar = (float)r / 255.0f; - ag = (float)g / 255.0f; - ab = (float)b / 255.0f; - - aa = MAX (ar, MAX (ag, ab)); - - if (aa < 1e-04f) - { - dst[0] = b; - dst[1] = g; - dst[2] = r; - dst[3] = 255; - return; - } - - ar /= aa; - ag /= aa; - ab /= aa; - - r = (int)floorf (255.0f * ar + 0.5f); - g = (int)floorf (255.0f * ag + 0.5f); - b = (int)floorf (255.0f * ab + 0.5f); - a = (int)floorf (255.0f * aa + 0.5f); - - dst[0] = MAX (0, MIN (255, b)); - dst[1] = MAX (0, MIN (255, g)); - dst[2] = MAX (0, MIN (255, r)); - dst[3] = MAX (0, MIN (255, a)); -} - -static void -convert_pixels (unsigned char *dst, - unsigned char *src, - int format, - int w, - int h, - int d, - int bpp, - unsigned char *palette, - int mipmaps) -{ - unsigned int i, num_pixels; - unsigned char r, g, b, a; + guint i, num_pixels; + guchar r, g, b, a; if (d > 0) num_pixels = get_volume_mipmapped_size (w, h, d, 1, 0, mipmaps, DDS_COMPRESS_NONE); @@ -732,36 +687,56 @@ convert_pixels (unsigned char *dst, dst[4 * i + 3] = a; break; case DDS_FORMAT_R5G6B5: - PUTL16(&dst[2 * i], pack_r5g6b5(r, g, b)); + PUTL16 (&dst[2 * i], + (mul8bit (r, 31) << 11) | + (mul8bit (g, 63) << 5) | + (mul8bit (b, 31) )); break; case DDS_FORMAT_RGBA4: - PUTL16(&dst[2 * i], pack_rgba4(r, g, b, a)); + PUTL16 (&dst[2 * i], + (mul8bit (a, 15) << 12) | + (mul8bit (r, 15) << 8) | + (mul8bit (g, 15) << 4) | + (mul8bit (b, 15) )); break; case DDS_FORMAT_RGB5A1: - PUTL16(&dst[2 * i], pack_rgb5a1(r, g, b, a)); + PUTL16 (&dst[2 * i], + (((a >> 7) & 0x01) << 15) | + (mul8bit (r, 31) << 10) | + (mul8bit (g, 31) << 5) | + (mul8bit (b, 31) )); break; case DDS_FORMAT_RGB10A2: - PUTL32(&dst[4 * i], pack_rgb10a2(r, g, b, a)); + PUTL32 (&dst[4 * i], + ((guint) ((a >> 6) & 0x003) << 30) | + ((guint) ((b << 2) & 0x3ff) << 20) | + ((guint) ((g << 2) & 0x3ff) << 10) | + ((guint) ((r << 2) & 0x3ff) )); break; case DDS_FORMAT_R3G3B2: - dst[i] = pack_r3g3b2(r, g, b); + dst[i] = + (mul8bit (r, 7) << 5) | + (mul8bit (g, 7) << 2) | + (mul8bit (b, 3) ); break; case DDS_FORMAT_A8: dst[i] = a; break; case DDS_FORMAT_L8: - dst[i] = rgb_to_luminance (r, g, b); + dst[i] = + ((r * 54 + g * 182 + b * 20) + 128) >> 8; break; case DDS_FORMAT_L8A8: - dst[2 * i + 0] = rgb_to_luminance (r, g, b); + dst[2 * i + 0] = + ((r * 54 + g * 182 + b * 20) + 128) >> 8; dst[2 * i + 1] = a; break; case DDS_FORMAT_YCOCG: dst[4 * i] = a; - RGB_to_YCoCg (&dst[4 * i], r, g, b); + encode_ycocg (&dst[4 * i], r, g, b); break; case DDS_FORMAT_AEXP: - alpha_exp (&dst[4 * i], r, g, b, a); + encode_alpha_exponent (&dst[4 * i], r, g, b, a); break; default: break; @@ -770,12 +745,12 @@ convert_pixels (unsigned char *dst, } static void -get_mipmap_chain (unsigned char *dst, - int w, - int h, - int bpp, - PikaImage *image, - PikaDrawable *drawable) +get_mipmap_chain (guchar *dst, + gint w, + gint h, + gint bpp, + PikaImage *image, + PikaDrawable *drawable) { GList *layers; GList *list; @@ -830,7 +805,7 @@ get_mipmap_chain (unsigned char *dst, dst + offset, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); g_object_unref (buffer); - /* we need BGRX or BGRA */ + /* BGRX or BGRA needed */ if (bpp >= 3) swap_rb (dst + offset, mipw * miph, bpp); @@ -845,11 +820,11 @@ write_layer (FILE *fp, PikaImage *image, PikaDrawable *drawable, PikaProcedureConfig *config, - int w, - int h, - int bpp, - int fmtbpp, - int num_mipmaps) + gint w, + gint h, + gint bpp, + gint fmtbpp, + gint num_mipmaps) { GeglBuffer *buffer; const Babl *format; @@ -864,21 +839,20 @@ write_layer (FILE *fp, gint x, y; gint size; gint fmtsize; - gint offset; + gint offset = 0; gint colors; gint compression; gint mipmaps; gint pixel_format; gboolean perceptual_metric; - gint flags = 0; + gint flags = 0; g_object_get (config, "perceptual-metric", &perceptual_metric, - "mipmaps", &mipmaps, NULL); - compression = pika_procedure_config_get_choice_id (config, - "compression-format"); + compression = pika_procedure_config_get_choice_id (config, "compression-format"); pixel_format = pika_procedure_config_get_choice_id (config, "format"); + mipmaps = pika_procedure_config_get_choice_id (config, "mipmaps"); basetype = pika_image_get_base_type (image); type = pika_drawable_type (drawable); @@ -916,8 +890,7 @@ write_layer (FILE *fp, } } - /* we want and assume BGRA ordered pixels for bpp >= 3 from here and - onwards */ + /* We want and assume BGRA ordered pixels for bpp >= 3 from here on */ if (bpp >= 3) swap_rb (src, w * h, bpp); @@ -1001,8 +974,7 @@ write_layer (FILE *fp, { if (num_mipmaps > 1) { - /* pre-convert indexed images to RGB for better quality mipmaps - if a pixel format conversion is requested */ + /* Pre-convert indexed images to RGB if not exporting as indexed */ if (pixel_format > DDS_FORMAT_DEFAULT && basetype == PIKA_INDEXED) { fmtsize = get_mipmapped_size (w, h, 3, 0, num_mipmaps, DDS_COMPRESS_NONE); @@ -1069,8 +1041,6 @@ write_layer (FILE *fp, bpp = fmtbpp; } - offset = 0; - for (i = 0; i < num_mipmaps; ++i) { size = get_mipmapped_size (w, h, bpp, i, 1, DDS_COMPRESS_NONE); @@ -1179,12 +1149,12 @@ write_volume_mipmaps (FILE *fp, PikaImage *image, PikaProcedureConfig *config, GList *layers, - int w, - int h, - int d, - int bpp, - int fmtbpp, - int num_mipmaps) + gint w, + gint h, + gint d, + gint bpp, + gint fmtbpp, + gint num_mipmaps) { GList *list; gint i; @@ -1260,13 +1230,11 @@ write_volume_mipmaps (FILE *fp, bpp = 1; } - /* we want and assume BGRA ordered pixels for bpp >= 3 from here and - onwards */ + /* We want and assume BGRA ordered pixels for bpp >= 3 from here on */ if (bpp >= 3) swap_rb (src, w * h * d, bpp); - /* pre-convert indexed images to RGB for better mipmaps if a - pixel format conversion is requested */ + /* Pre-convert indexed images to RGB if not exporting as indexed */ if (pixel_format > DDS_FORMAT_DEFAULT && type == PIKA_INDEXED) { size = get_volume_mipmapped_size (w, h, d, 3, 0, num_mipmaps, @@ -1323,40 +1291,35 @@ write_image (FILE *fp, PikaImageType drawable_type; PikaImageBaseType basetype; gint i, w, h; - gint bpp = 0; - gint fmtbpp = 0; - gint has_alpha = 0; + gint bpp = 0; + gint fmtbpp = 0; + gboolean has_alpha = FALSE; + gboolean is_dx10 = FALSE; + guint fourcc = 0; + gint array_size = 1; gint num_mipmaps; guchar hdr[DDS_HEADERSIZE]; guchar hdr10[DDS_HEADERSIZE_DX10]; guint flags = 0, pflags = 0, caps = 0, caps2 = 0, size = 0; guint rmask = 0, gmask = 0, bmask = 0, amask = 0; - guint fourcc = 0; DXGI_FORMAT dxgi_format = DXGI_FORMAT_UNKNOWN; gint32 num_layers; - GList *layers; - GList *list; + GList *layers, *list; guchar *cmap; gint colors; - guchar zero[4] = {0, 0, 0, 0}; - gint is_dx10 = 0; - gint array_size = 1; - gint compression; - gint mipmaps; - gint savetype; - gint pixel_format; + gint compression, mipmaps; + gint savetype, pixel_format; gint transindex; gboolean flip_export; g_object_get (config, "transparent-index", &transindex, "flip-image", &flip_export, - "mipmaps", &mipmaps, - "save-type", &savetype, NULL); - compression = pika_procedure_config_get_choice_id (config, - "compression-format"); + savetype = pika_procedure_config_get_choice_id (config, "save-type"); + compression = pika_procedure_config_get_choice_id (config, "compression-format"); pixel_format = pika_procedure_config_get_choice_id (config, "format"); + mipmaps = pika_procedure_config_get_choice_id (config, "mipmaps"); if (flip_export) pika_image_flip (image, PIKA_ORIENTATION_VERTICAL); @@ -1369,12 +1332,12 @@ write_image (FILE *fp, if (savetype == DDS_SAVE_SELECTED_LAYER) { - w = pika_drawable_get_width (drawable); + w = pika_drawable_get_width (drawable); h = pika_drawable_get_height (drawable); } else { - w = pika_image_get_width (image); + w = pika_image_get_width (image); h = pika_image_get_height (image); } @@ -1389,10 +1352,10 @@ write_image (FILE *fp, case PIKA_GRAYA_IMAGE: bpp = 2; break; case PIKA_INDEXED_IMAGE: bpp = 1; break; case PIKA_INDEXEDA_IMAGE: bpp = 2; break; - default: - break; + default: break; } + /* Get uncompressed format data */ if (pixel_format > DDS_FORMAT_DEFAULT) { for (i = 0; ; ++i) @@ -1415,13 +1378,13 @@ write_image (FILE *fp, if (basetype == PIKA_INDEXED) { fmtbpp = 1; - has_alpha = 0; + has_alpha = FALSE; rmask = bmask = gmask = amask = 0; } else { fmtbpp = 1; - has_alpha = 0; + has_alpha = FALSE; rmask = 0x000000ff; gmask = bmask = amask = 0; dxgi_format = DXGI_FORMAT_R8_UNORM; @@ -1432,13 +1395,13 @@ write_image (FILE *fp, if (basetype == PIKA_INDEXED) { fmtbpp = 1; - has_alpha = 0; + has_alpha = FALSE; rmask = gmask = bmask = amask = 0; } else { fmtbpp = 2; - has_alpha = 1; + has_alpha = TRUE; rmask = 0x000000ff; gmask = 0x000000ff; bmask = 0x000000ff; @@ -1456,7 +1419,7 @@ write_image (FILE *fp, else { fmtbpp = 4; - has_alpha = 1; + has_alpha = TRUE; rmask = 0x00ff0000; gmask = 0x0000ff00; bmask = 0x000000ff; @@ -1464,30 +1427,28 @@ write_image (FILE *fp, dxgi_format = DXGI_FORMAT_B8G8R8A8_UNORM; } + /* Write header */ memset (hdr, 0, DDS_HEADERSIZE); - PUTL32(hdr, FOURCC ('D','D','S',' ')); - PUTL32(hdr + 4, 124); - PUTL32(hdr + 12, h); - PUTL32(hdr + 16, w); - PUTL32(hdr + 76, 32); + PUTL32 (hdr, FOURCC ('D','D','S',' ')); + PUTL32 (hdr + 4, 124); /* Header size */ + PUTL32 (hdr + 12, h); + PUTL32 (hdr + 16, w); + PUTL32 (hdr + 76, 32); /* Pixel Format size */ if (compression == DDS_COMPRESS_NONE) { - PUTL32(hdr + 88, fmtbpp << 3); - PUTL32(hdr + 92, rmask); - PUTL32(hdr + 96, gmask); - PUTL32(hdr + 100, bmask); - PUTL32(hdr + 104, amask); + PUTL32 (hdr + 88, fmtbpp << 3); + PUTL32 (hdr + 92, rmask); + PUTL32 (hdr + 96, gmask); + PUTL32 (hdr + 100, bmask); + PUTL32 (hdr + 104, amask); } - /* - put some information in the reserved area to identify the origin - of the image - */ - PUTL32(hdr + 32, FOURCC ('G','I','M','P')); - PUTL32(hdr + 36, FOURCC ('-','D','D','S')); - PUTL32(hdr + 40, DDS_PLUGIN_VERSION); + /* Put some custom info in the reserved area to identify the origin of the image */ + PUTL32 (hdr + 32, FOURCC ('G','I','M','P')); + PUTL32 (hdr + 36, FOURCC ('-','D','D','S')); + PUTL32 (hdr + 40, DDS_PLUGIN_VERSION); flags = DDSD_CAPS | DDSD_PIXELFORMAT | DDSD_WIDTH | DDSD_HEIGHT; @@ -1495,7 +1456,7 @@ write_image (FILE *fp, if (mipmaps) { flags |= DDSD_MIPMAPCOUNT; - caps |= (DDSCAPS_COMPLEX | DDSCAPS_MIPMAP); + caps |= (DDSCAPS_COMPLEX | DDSCAPS_MIPMAP); num_mipmaps = get_num_mipmaps (w, h); } else @@ -1505,22 +1466,22 @@ write_image (FILE *fp, if ((savetype == DDS_SAVE_CUBEMAP) && is_cubemap) { - caps |= DDSCAPS_COMPLEX; + caps |= DDSCAPS_COMPLEX; caps2 |= (DDSCAPS2_CUBEMAP | DDSCAPS2_CUBEMAP_ALL_FACES); } else if ((savetype == DDS_SAVE_VOLUMEMAP) && is_volume) { - PUTL32(hdr + 24, num_layers); /* depth */ + PUTL32 (hdr + 24, num_layers); /* Depth */ flags |= DDSD_DEPTH; - caps |= DDSCAPS_COMPLEX; + caps |= DDSCAPS_COMPLEX; caps2 |= DDSCAPS2_VOLUME; } - PUTL32(hdr + 28, num_mipmaps); - PUTL32(hdr + 108, caps); - PUTL32(hdr + 112, caps2); + PUTL32 (hdr + 28, num_mipmaps); + PUTL32 (hdr + 108, caps); + PUTL32 (hdr + 112, caps2); - if (compression == DDS_COMPRESS_NONE) + if (compression == DDS_COMPRESS_NONE) /* Write uncompressed data */ { flags |= DDSD_PITCH; @@ -1560,13 +1521,11 @@ write_image (FILE *fp, pflags |= DDPF_ALPHAPIXELS; PUTL32 (hdr + 8, flags); - PUTL32 (hdr + 20, w * fmtbpp); /* pitch */ + PUTL32 (hdr + 20, w * fmtbpp); /* Pitch */ PUTL32 (hdr + 80, pflags); - /* - * write extra fourcc info - this is special to PIKA DDS. When the image - * is read by the plugin, we can detect the added information to decode - * the pixels + /* Write extra FourCC info specific to PIKA DDS. When the image + * is read again we use this information to decode the pixels. */ if (pixel_format == DDS_FORMAT_AEXP) { @@ -1577,7 +1536,7 @@ write_image (FILE *fp, PUTL32 (hdr + 44, FOURCC ('Y','C','G','1')); } } - else + else /* Write compressed data */ { flags |= DDSD_LINEARSIZE; pflags = DDPF_FOURCC; @@ -1611,13 +1570,13 @@ write_image (FILE *fp, case DDS_COMPRESS_BC4: fourcc = FOURCC ('A','T','I','1'); dxgi_format = DXGI_FORMAT_BC4_UNORM; - //is_dx10 = 1; + /*is_dx10 = TRUE;*/ break; case DDS_COMPRESS_BC5: fourcc = FOURCC ('A','T','I','2'); dxgi_format = DXGI_FORMAT_BC5_UNORM; - //is_dx10 = 1; + /*is_dx10 = TRUE;*/ break; } @@ -1631,6 +1590,7 @@ write_image (FILE *fp, PUTL32 (hdr + 80, pflags); PUTL32 (hdr + 84, fourcc); + /* Linear size */ size = ((w + 3) >> 2) * ((h + 3) >> 2); if ((compression == DDS_COMPRESS_BC1) || (compression == DDS_COMPRESS_BC4)) @@ -1638,7 +1598,7 @@ write_image (FILE *fp, else size *= 16; - PUTL32 (hdr + 20, size); /* linear size */ + PUTL32 (hdr + 20, size); /* * write extra fourcc info - this is special to PIKA DDS. When the image @@ -1659,14 +1619,15 @@ write_image (FILE *fp, } } - /* texture arrays require a DX10 header */ + /* Texture arrays always require a DX10 header */ if (savetype == DDS_SAVE_ARRAY) - is_dx10 = 1; + is_dx10 = TRUE; + /* Upgrade to DX10 header when desired */ if (is_dx10) { array_size = ((savetype == DDS_SAVE_SELECTED_LAYER || - savetype == DDS_SAVE_VISIBLE_LAYERS) ? + savetype == DDS_SAVE_VISIBLE_LAYERS) ? 1 : get_array_size (image)); PUTL32 (hdr10 + 0, dxgi_format); @@ -1675,7 +1636,7 @@ write_image (FILE *fp, PUTL32 (hdr10 + 12, array_size); PUTL32 (hdr10 + 16, 0); - /* update main header accordingly */ + /* Update main header accordingly */ PUTL32 (hdr + 80, pflags | DDPF_FOURCC); PUTL32 (hdr + 84, FOURCC ('D','X','1','0')); } @@ -1685,11 +1646,12 @@ write_image (FILE *fp, if (is_dx10) fwrite (hdr10, DDS_HEADERSIZE_DX10, 1, fp); - /* write palette for indexed images */ + /* Write palette for indexed images */ if ((basetype == PIKA_INDEXED) && (pixel_format == DDS_FORMAT_DEFAULT) && (compression == DDS_COMPRESS_NONE)) { + const guchar zero[4] = {0, 0, 0, 0}; cmap = pika_image_get_colormap (image, NULL, &colors); for (i = 0; i < colors; ++i) @@ -1701,11 +1663,12 @@ write_image (FILE *fp, fputc (255, fp); } + /* Pad unused palette space with zeroes */ for (; i < 256; ++i) fwrite (zero, 1, 4, fp); } - if (savetype == DDS_SAVE_CUBEMAP) + if (savetype == DDS_SAVE_CUBEMAP) /* Write cubemap layers */ { for (i = 0; i < 6; ++i) { @@ -1715,7 +1678,7 @@ write_image (FILE *fp, pika_progress_update ((float)(i + 1) / 6.0); } } - else if (savetype == DDS_SAVE_VOLUMEMAP) + else if (savetype == DDS_SAVE_VOLUMEMAP) /* Write volume slices */ { for (i = 0, list = layers; i < num_layers; @@ -1730,7 +1693,7 @@ write_image (FILE *fp, write_volume_mipmaps (fp, image, config, layers, w, h, num_layers, bpp, fmtbpp, num_mipmaps); } - else if (savetype == DDS_SAVE_ARRAY) + else if (savetype == DDS_SAVE_ARRAY) /* Write array entries */ { for (i = 0, list = layers; i < num_layers; @@ -1760,47 +1723,6 @@ write_image (FILE *fp, return TRUE; } -static gboolean -combo_sensitivity_func (gint value, - gpointer data) -{ - GtkTreeModel *model; - GtkTreeIter iter; - - model = gtk_combo_box_get_model (GTK_COMBO_BOX (data)); - - if (pika_int_store_lookup_by_value (model, value, &iter)) - { - gpointer insensitive; - - gtk_tree_model_get (model, &iter, - PIKA_INT_STORE_USER_DATA, &insensitive, - -1); - - return ! GPOINTER_TO_INT (insensitive); - } - - return TRUE; -} - -static void -combo_set_item_sensitive (GtkWidget *widget, - gint value, - gboolean sensitive) -{ - GtkTreeModel *model; - GtkTreeIter iter; - - model = gtk_combo_box_get_model (GTK_COMBO_BOX (widget)); - - if (pika_int_store_lookup_by_value (model, value, &iter)) - { - gtk_list_store_set (GTK_LIST_STORE (model), &iter, - PIKA_INT_STORE_USER_DATA, - ! GINT_TO_POINTER (sensitive), - -1); - } -} static void config_notify (PikaProcedureConfig *config, @@ -1826,13 +1748,10 @@ config_notify (PikaProcedureConfig *config, } else if (! strcmp (pspec->name, "save-type")) { - gint savetype; - GtkWidget *widget; - GtkWidget *combo; + gint savetype; + PikaParamSpecChoice *pspec; - g_object_get (config, - "save-type", &savetype, - NULL); + savetype = pika_procedure_config_get_choice_id (config, "save-type"); switch (savetype) { @@ -1855,11 +1774,9 @@ config_notify (PikaProcedureConfig *config, break; } - widget = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), - "mipmaps", G_TYPE_NONE); - combo = pika_label_int_widget_get_widget (PIKA_LABEL_INT_WIDGET (widget)); - combo_set_item_sensitive (combo, DDS_MIPMAP_EXISTING, - check_mipmaps (savetype)); + pspec = PIKA_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), + "mipmaps")); + pika_choice_set_sensitive (pspec->choice, "existing", check_mipmaps (savetype)); } else if (! strcmp (pspec->name, "mipmaps")) { @@ -1872,15 +1789,15 @@ config_notify (PikaProcedureConfig *config, "gamma-correct", &gamma_correct, "srgb", &srgb, "preserve-alpha-coverage", &preserve_alpha_coverage, - "mipmaps", &mipmaps, NULL); + mipmaps = pika_procedure_config_get_choice_id (config, "mipmaps"); - pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "mipmap-filter", mipmaps == DDS_MIPMAP_GENERATE, NULL, NULL, FALSE); - pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), + pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "mipmap-wrap", mipmaps == DDS_MIPMAP_GENERATE, NULL, NULL, FALSE); @@ -1915,13 +1832,18 @@ config_notify (PikaProcedureConfig *config, } else if (! strcmp (pspec->name, "transparent-color")) { - gboolean transparent_color; + GtkWidget *transparent_check; + gboolean transparent_color; g_object_get (config, "transparent-color", &transparent_color, NULL); - if (transparent_check && + transparent_check = pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), + "transparent-color", + G_TYPE_NONE); + + if ((transparent_check != NULL) && gtk_widget_get_sensitive (transparent_check)) pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "transparent-index", @@ -1977,24 +1899,23 @@ config_notify (PikaProcedureConfig *config, } } + static gboolean save_dialog (PikaImage *image, PikaDrawable *drawable, PikaProcedure *procedure, PikaProcedureConfig *config) { - GtkWidget *dialog; - GtkWidget *widget; - GtkWidget *combo; - GtkListStore *store; - PikaImageBaseType base_type; - gboolean run; + GtkWidget *dialog; + PikaParamSpecChoice *cspec; + PikaImageBaseType base_type; + gboolean run; base_type = pika_image_get_base_type (image); if (is_cubemap || is_volume || is_array) g_object_set (config, - "save-type", DDS_SAVE_SELECTED_LAYER, + "save-type", "layer", NULL); dialog = pika_save_procedure_dialog_new (PIKA_SAVE_PROCEDURE (procedure), @@ -2003,10 +1924,9 @@ save_dialog (PikaImage *image, gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); - transparent_check = - pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), - "transparent-color", - G_TYPE_NONE); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), + "transparent-color", + G_TYPE_NONE); pika_procedure_dialog_set_sensitive (PIKA_PROCEDURE_DIALOG (dialog), "transparent-color", base_type == PIKA_INDEXED, @@ -2034,35 +1954,20 @@ save_dialog (PikaImage *image, "mipmap-options-label", FALSE, "mipmap-options-box"); - store = pika_int_store_new (_("Selected layer"), DDS_SAVE_SELECTED_LAYER, - _("All visible layers"), DDS_SAVE_VISIBLE_LAYERS, - _("As cube map"), DDS_SAVE_CUBEMAP, - _("As volume map"), DDS_SAVE_VOLUMEMAP, - _("As texture array"), DDS_SAVE_ARRAY, - NULL); - widget = pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), - "save-type", - PIKA_INT_STORE (store)); - combo = pika_label_int_widget_get_widget (PIKA_LABEL_INT_WIDGET (widget)); - pika_int_combo_box_set_sensitivity (PIKA_INT_COMBO_BOX (combo), - combo_sensitivity_func, combo, NULL); - combo_set_item_sensitive (combo, DDS_SAVE_CUBEMAP, is_cubemap); - combo_set_item_sensitive (combo, DDS_SAVE_VOLUMEMAP, is_volume); - combo_set_item_sensitive (combo, DDS_SAVE_ARRAY, is_array); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), + "save-type", G_TYPE_NONE); + cspec = PIKA_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), + "save-type")); + pika_choice_set_sensitive (cspec->choice, "cube", is_cubemap); + pika_choice_set_sensitive (cspec->choice, "volume", is_volume); + pika_choice_set_sensitive (cspec->choice, "array", is_array); - store = pika_int_store_new (_("No mipmaps"), DDS_MIPMAP_NONE, - _("Generate mipmaps"), DDS_MIPMAP_GENERATE, - _("Use existing mipmaps"), DDS_MIPMAP_EXISTING, - NULL); - widget = pika_procedure_dialog_get_int_combo (PIKA_PROCEDURE_DIALOG (dialog), - "mipmaps", - PIKA_INT_STORE (store)); - combo = pika_label_int_widget_get_widget (PIKA_LABEL_INT_WIDGET (widget)); - pika_int_combo_box_set_sensitivity (PIKA_INT_COMBO_BOX (combo), - combo_sensitivity_func, combo, NULL); - combo_set_item_sensitive (combo, DDS_MIPMAP_EXISTING, - ! (is_volume || is_cubemap) && - is_mipmap_chain_valid); + pika_procedure_dialog_get_widget (PIKA_PROCEDURE_DIALOG (dialog), + "mipmaps", G_TYPE_NONE); + cspec = PIKA_PARAM_SPEC_CHOICE (g_object_class_find_property (G_OBJECT_GET_CLASS (config), + "mipmaps")); + pika_choice_set_sensitive (cspec->choice, "existing", + ! (is_volume || is_cubemap) && is_mipmap_chain_valid); pika_procedure_dialog_fill (PIKA_PROCEDURE_DIALOG (dialog), "compression-format", "perceptual-metric", diff --git a/plug-ins/file-dds/dxt.c b/plug-ins/file-dds/dxt.c index 5d42d35..0e997f3 100644 --- a/plug-ins/file-dds/dxt.c +++ b/plug-ins/file-dds/dxt.c @@ -34,11 +34,14 @@ #include #include +#include + #include "dds.h" #include "dxt.h" #include "endian_rw.h" -#include "mipmap.h" #include "imath.h" +#include "mipmap.h" +#include "misc.h" #include "vec.h" #include "dxt_tables.h" @@ -757,181 +760,6 @@ encode_color_block (unsigned char *dst, PUTL32(dst + 4, indices); } -static void -get_min_max_YCoCg (const unsigned char *block, - unsigned char *mincolor, - unsigned char *maxcolor) -{ - int i; - - mincolor[2] = mincolor[1] = 255; - maxcolor[2] = maxcolor[1] = 0; - - for (i = 0; i < 16; ++i) - { - if (block[4 * i + 2] < mincolor[2]) mincolor[2] = block[4 * i + 2]; - if (block[4 * i + 1] < mincolor[1]) mincolor[1] = block[4 * i + 1]; - if (block[4 * i + 2] > maxcolor[2]) maxcolor[2] = block[4 * i + 2]; - if (block[4 * i + 1] > maxcolor[1]) maxcolor[1] = block[4 * i + 1]; - } -} - -static void -scale_YCoCg (unsigned char *block, - unsigned char *mincolor, - unsigned char *maxcolor) -{ - const int s0 = 128 / 2 - 1; - const int s1 = 128 / 4 - 1; - int m0, m1, m2, m3; - int mask0, mask1, scale; - int i; - - m0 = abs(mincolor[2] - 128); - m1 = abs(mincolor[1] - 128); - m2 = abs(maxcolor[2] - 128); - m3 = abs(maxcolor[1] - 128); - - if (m1 > m0) m0 = m1; - if (m3 > m2) m2 = m3; - if (m2 > m0) m0 = m2; - - mask0 = -(m0 <= s0); - mask1 = -(m0 <= s1); - scale = 1 + (1 & mask0) + (2 & mask1); - - mincolor[2] = (mincolor[2] - 128) * scale + 128; - mincolor[1] = (mincolor[1] - 128) * scale + 128; - mincolor[0] = (scale - 1) << 3; - - maxcolor[2] = (maxcolor[2] - 128) * scale + 128; - maxcolor[1] = (maxcolor[1] - 128) * scale + 128; - maxcolor[0] = (scale - 1) << 3; - - for (i = 0; i < 16; ++i) - { - block[i * 4 + 2] = (block[i * 4 + 2] - 128) * scale + 128; - block[i * 4 + 1] = (block[i * 4 + 1] - 128) * scale + 128; - } -} - -#define INSET_SHIFT 4 - -static void -inset_bbox_YCoCg (unsigned char *mincolor, - unsigned char *maxcolor) -{ - int inset[4], mini[4], maxi[4]; - - inset[2] = (maxcolor[2] - mincolor[2]) - ((1 << (INSET_SHIFT - 1)) - 1); - inset[1] = (maxcolor[1] - mincolor[1]) - ((1 << (INSET_SHIFT - 1)) - 1); - - mini[2] = ((mincolor[2] << INSET_SHIFT) + inset[2]) >> INSET_SHIFT; - mini[1] = ((mincolor[1] << INSET_SHIFT) + inset[1]) >> INSET_SHIFT; - - maxi[2] = ((maxcolor[2] << INSET_SHIFT) - inset[2]) >> INSET_SHIFT; - maxi[1] = ((maxcolor[1] << INSET_SHIFT) - inset[1]) >> INSET_SHIFT; - - mini[2] = (mini[2] >= 0) ? mini[2] : 0; - mini[1] = (mini[1] >= 0) ? mini[1] : 0; - - maxi[2] = (maxi[2] <= 255) ? maxi[2] : 255; - maxi[1] = (maxi[1] <= 255) ? maxi[1] : 255; - - mincolor[2] = (mini[2] & 0xf8) | (mini[2] >> 5); - mincolor[1] = (mini[1] & 0xfc) | (mini[1] >> 6); - - maxcolor[2] = (maxi[2] & 0xf8) | (maxi[2] >> 5); - maxcolor[1] = (maxi[1] & 0xfc) | (maxi[1] >> 6); -} - -static void -select_diagonal_YCoCg (const unsigned char *block, - unsigned char *mincolor, - unsigned char *maxcolor) -{ - unsigned char mid0, mid1, side, mask, b0, b1, c0, c1; - int i; - - mid0 = ((int)mincolor[2] + maxcolor[2] + 1) >> 1; - mid1 = ((int)mincolor[1] + maxcolor[1] + 1) >> 1; - - side = 0; - for (i = 0; i < 16; ++i) - { - b0 = block[i * 4 + 2] >= mid0; - b1 = block[i * 4 + 1] >= mid1; - side += (b0 ^ b1); - } - - mask = -(side > 8); - mask &= -(mincolor[2] != maxcolor[2]); - - c0 = mincolor[1]; - c1 = maxcolor[1]; - - c0 ^= c1; - c1 ^= c0 & mask; - c0 ^= c1; - - mincolor[1] = c0; - maxcolor[1] = c1; -} - -static void -encode_YCoCg_block (unsigned char *dst, - unsigned char *block) -{ - unsigned char colors[4][3], *maxcolor, *mincolor; - unsigned int mask; - int c0, c1, d0, d1, d2, d3; - int b0, b1, b2, b3, b4; - int x0, x1, x2; - int i, idx; - - maxcolor = &colors[0][0]; - mincolor = &colors[1][0]; - - get_min_max_YCoCg(block, mincolor, maxcolor); - scale_YCoCg(block, mincolor, maxcolor); - inset_bbox_YCoCg(mincolor, maxcolor); - select_diagonal_YCoCg(block, mincolor, maxcolor); - - lerp_rgb13(&colors[2][0], maxcolor, mincolor); - lerp_rgb13(&colors[3][0], mincolor, maxcolor); - - mask = 0; - - for (i = 0; i < 16; ++i) - { - c0 = block[4 * i + 2]; - c1 = block[4 * i + 1]; - - d0 = abs(colors[0][2] - c0) + abs(colors[0][1] - c1); - d1 = abs(colors[1][2] - c0) + abs(colors[1][1] - c1); - d2 = abs(colors[2][2] - c0) + abs(colors[2][1] - c1); - d3 = abs(colors[3][2] - c0) + abs(colors[3][1] - c1); - - b0 = d0 > d3; - b1 = d1 > d2; - b2 = d0 > d2; - b3 = d1 > d3; - b4 = d2 > d3; - - x0 = b1 & b2; - x1 = b0 & b3; - x2 = b0 & b4; - - idx = (x2 | ((x0 | x1) << 1)); - - mask |= idx << (2 * i); - } - - PUTL16(dst + 0, pack_rgb565(maxcolor)); - PUTL16(dst + 2, pack_rgb565(mincolor)); - PUTL32(dst + 4, mask); -} - /* write DXT3 alpha block */ static void encode_alpha_block_BC2 (unsigned char *dst, @@ -1288,33 +1116,35 @@ dxt_compress (unsigned char *dst, } static void -decode_color_block (unsigned char *block, - unsigned char *src, - int format) +decode_color_block (guchar *block, + guchar *src, + gint format) { - int i, x, y; - unsigned char *d = block; - unsigned int indices, idx; - unsigned char colors[4][3]; - unsigned short c0, c1; + guchar *d = block; + guint indices, idx; + guchar colors[4][3]; + gushort c0, c1; + gint i, x, y; - c0 = GETL16(&src[0]); - c1 = GETL16(&src[2]); + c0 = GETL16 (&src[0]); + c1 = GETL16 (&src[2]); - unpack_rgb565(colors[0], c0); - unpack_rgb565(colors[1], c1); + unpack_rgb565 (colors[0], c0); + unpack_rgb565 (colors[1], c1); if ((c0 > c1) || (format == DDS_COMPRESS_BC3)) { - lerp_rgb13(colors[2], colors[0], colors[1]); - lerp_rgb13(colors[3], colors[1], colors[0]); + /* Four-color mode */ + lerp_rgb13 (colors[2], colors[0], colors[1]); + lerp_rgb13 (colors[3], colors[1], colors[0]); } else { + /* Three-color mode */ for (i = 0; i < 3; ++i) { colors[2][i] = (colors[0][i] + colors[1][i] + 1) >> 1; - colors[3][i] = 255; + colors[3][i] = 0; /* Three-color mode index 11 is always black */ } } diff --git a/plug-ins/file-dds/meson.build b/plug-ins/file-dds/meson.build index 4d6e641..f7f40f5 100644 --- a/plug-ins/file-dds/meson.build +++ b/plug-ins/file-dds/meson.build @@ -2,7 +2,6 @@ plugin_name = 'file-dds' plugin_sources = [ 'dds.c', - 'color.c', 'ddsread.c', 'ddswrite.c', 'dxt.c', diff --git a/plug-ins/file-dds/mipmap.c b/plug-ins/file-dds/mipmap.c index 82cc701..7b85183 100644 --- a/plug-ins/file-dds/mipmap.c +++ b/plug-ins/file-dds/mipmap.c @@ -27,6 +27,8 @@ #include +#include + #ifdef _OPENMP #include #endif @@ -34,24 +36,27 @@ #include "dds.h" #include "mipmap.h" #include "imath.h" -#include "color.h" -typedef float (*filterfunc_t)(float); -typedef int (*wrapfunc_t)(int, int); -typedef void (*mipmapfunc_t)(unsigned char *, int, int, unsigned char *, int, int, int, filterfunc_t, float, wrapfunc_t, int, float); -typedef void (*volmipmapfunc_t)(unsigned char *, int, int, int, unsigned char *, int, int, int, int, filterfunc_t, float, wrapfunc_t, int, float); -/****************************************************************************** - * size functions * - ******************************************************************************/ +typedef gfloat (*filterfunc_t) (gfloat); +typedef gint (*wrapfunc_t) (gint, gint); +typedef void (*mipmapfunc_t) (guchar*, gint, gint, guchar*, gint, gint, gint, + filterfunc_t, gfloat, wrapfunc_t, gint, gfloat); +typedef void (*volmipmapfunc_t) (guchar*, gint, gint, gint, guchar*, gint, gint, gint, + gint, filterfunc_t, gfloat, wrapfunc_t, gint, gfloat); -int -get_num_mipmaps (int width, - int height) + +/** + * Size Functions + */ + +gint +get_num_mipmaps (gint width, + gint height) { - int w = width << 1; - int h = height << 1; - int n = 0; + gint w = width << 1; + gint h = height << 1; + gint n = 0; while (w != 1 || h != 1) { @@ -63,21 +68,21 @@ get_num_mipmaps (int width, return n; } -unsigned int -get_mipmapped_size (int width, - int height, - int bpp, - int level, - int num, - int format) +guint +get_mipmapped_size (gint width, + gint height, + gint bpp, + gint level, + gint num, + gint format) { - int w, h, n = 0; - unsigned int size = 0; + gint w, h, n = 0; + guint size = 0; - w = width >> level; + w = width >> level; h = height >> level; - w = MAX(1, w); - h = MAX(1, h); + w = MAX (1, w); + h = MAX (1, h); w <<= 1; h <<= 1; @@ -107,24 +112,24 @@ get_mipmapped_size (int width, return size; } -unsigned int -get_volume_mipmapped_size (int width, - int height, - int depth, - int bpp, - int level, - int num, - int format) +guint +get_volume_mipmapped_size (gint width, + gint height, + gint depth, + gint bpp, + gint level, + gint num, + gint format) { - int w, h, d, n = 0; - unsigned int size = 0; + gint w, h, d, n = 0; + guint size = 0; w = width >> level; h = height >> level; d = depth >> level; - w = MAX(1, w); - h = MAX(1, h); - d = MAX(1, d); + w = MAX (1, w); + h = MAX (1, h); + d = MAX (1, d); w <<= 1; h <<= 1; d <<= 1; @@ -156,11 +161,11 @@ get_volume_mipmapped_size (int width, return size; } -int -get_next_mipmap_dimensions (int *next_w, - int *next_h, - int curr_w, - int curr_h) +gint +get_next_mipmap_dimensions (gint *next_w, + gint *next_h, + gint curr_w, + gint curr_h) { if (curr_w == 1 || curr_h == 1) return 0; @@ -171,85 +176,126 @@ get_next_mipmap_dimensions (int *next_w, return 1; } -/****************************************************************************** - * wrap modes * - ******************************************************************************/ -static int -wrap_mirror (int x, - int max) +/** + * Wrap Modes + */ + +static gint +wrap_mirror (gint x, + gint max) { - if (max == 1) x = 0; - x = abs(x); + if (max == 1) + x = 0; + + x = abs (x); while (x >= max) - x = abs(max + max - x - 2); + x = abs (max + max - x - 2); return x; } -static int -wrap_repeat (int x, - int max) +static gint +wrap_repeat (gint x, + gint max) { - if (x >= 0) - return x % max; - - return (x + 1) % max + max - 1; + gfloat t; + t = (gfloat) x / (gfloat) max; + return (gint) ((t - floorf (t)) * (gfloat) max); } -static int -wrap_clamp (int x, - int max) +static gint +wrap_clamp (gint x, + gint max) { - return MAX(0, MIN(max - 1, x)); + return MAX (0, MIN (max - 1, x)); } -/****************************************************************************** - * gamma-correction * - ******************************************************************************/ -static int -linear_to_gamma (int gc, - int v, - float gamma) +/** + * Gamma-correction + */ + +static gfloat +linear_to_sRGB (gfloat c) +{ + gfloat v = (gfloat) c; + + if (v < 0.0f) + v = 0.0f; + else if (v > 1.0f) + v = 1.0f; + else if (v <= 0.0031308f) + v = 12.92f * v; + else + v = 1.055f * powf (v, 0.41666f) - 0.055f; + + return v; +} + +static gfloat +linear_to_gamma (gint gc, + gfloat v, + gfloat gamma) { if (gc == 1) { - v = (int)(powf((float)v / 255.0f, gamma) * 255); - if (v > 255) v = 255; + v = powf (v, 1.0f / gamma); + if (v > 1.0f) + v = 1.0f; } else if (gc == 2) { - v = linear_to_sRGB(v); + v = linear_to_sRGB (v); } return v; } -static int -gamma_to_linear (int gc, - int v, - float gamma) + +static gfloat +sRGB_to_linear (gfloat c) +{ + gfloat v = (gfloat) c; + + if (v < 0.0f) + v = 0.0f; + else if (v > 1.0f) + v = 1.0f; + else if (v <= 0.04045f) + v /= 12.92f; + else + v = powf ((v + 0.055f) / 1.055f, 2.4f); + + return v; +} + +static gfloat +gamma_to_linear (gint gc, + gfloat v, + gfloat gamma) { if (gc == 1) { - v = (int)(powf((float)v / 255.0f, 1.0f / gamma) * 255); - if(v > 255) v = 255; + v = powf (v, gamma); + if (v > 1.0f) + v = 1.0f; } else if (gc == 2) { - v = sRGB_to_linear(v); + v = sRGB_to_linear (v); } return v; } -/****************************************************************************** - * filters * - ******************************************************************************/ -static float -box_filter (float t) +/** + * Filters + */ + +static gfloat +box_filter (gfloat t) { if ((t >= -0.5f) && (t < 0.5f)) return 1.0f; @@ -257,8 +303,8 @@ box_filter (float t) return 0.0f; } -static float -triangle_filter (float t) +static gfloat +triangle_filter (gfloat t) { if (t < 0.0f) t = -t; if (t < 1.0f) return 1.0f - t; @@ -266,8 +312,8 @@ triangle_filter (float t) return 0.0f; } -static float -quadratic_filter (float t) +static gfloat +quadratic_filter (gfloat t) { if (t < 0.0f) t = -t; if (t < 0.5f) return 0.75f - t * t; @@ -280,35 +326,13 @@ quadratic_filter (float t) return 0.0f; } -static float -bspline_filter (float t) +static gfloat +mitchell (gfloat t, + const gfloat B) { - float tt; - - if (t < 0.0f) - t = -t; - - if (t < 1.0f) - { - tt = t * t; - return ((0.5f * tt * t) - tt + (2.0f / 3.0f)); - } - else if (t < 2.0f) - { - t = 2.0f - t; - return (1.0f / 6.0f) * (t * t * t); - } - - return 0.0f; -} - -static float -mitchell (float t, - const float B, - const float C) -{ - float tt; + gfloat C, tt; + C = 0.5f * (1.0f - B); tt = t * t; if (t < 0.0f) t = -t; @@ -334,43 +358,55 @@ mitchell (float t, return 0.0f; } -static float -mitchell_filter (float t) +static gfloat +bspline_filter (gfloat t) { - return mitchell(t, 1.0f / 3.0f, 1.0f / 3.0f); + return mitchell (t, 1.0f); } -static float -sinc (float x) +static gfloat +mitchell_filter (gfloat t) +{ + return mitchell (t, 1.0f / 3.0f); +} + +static gfloat +catrom_filter (gfloat t) +{ + return mitchell (t, 0.0f); +} + +static gfloat +sinc (gfloat x) { x = (x * M_PI); - if (fabsf(x) < 1e-04f) + if (fabsf (x) < 1e-04f) return 1.0f + x * x * (-1.0f / 6.0f + x * x * 1.0f / 120.0f); - return sinf(x) / x; + return sinf (x) / x; } -static float -lanczos_filter (float t) +static gfloat +lanczos_filter (gfloat t) { if (t < 0.0f) t = -t; - if (t < 3.0f) return sinc(t) * sinc(t / 3.0f); + if (t < 3.0f) return sinc (t) * sinc (t / 3.0f); return 0.0f; } -static float -bessel0 (float x) +static gfloat +bessel0 (gfloat x) { - const float EPSILON = 1e-6f; - float xh, sum, pow, ds; - int k; + const gfloat EPSILON = 1e-6f; + gfloat xh, sum, pow, ds; + gint k; - xh = 0.5f * x; + xh = 0.5f * x; sum = 1.0f; pow = 1.0f; - k = 0; - ds = 1.0f; + k = 0; + ds = 1.0f; while (ds > sum * EPSILON) { @@ -383,45 +419,46 @@ bessel0 (float x) return sum; } -static float -kaiser_filter (float t) +static gfloat +kaiser_filter (gfloat t) { if (t < 0.0f) t = -t; if (t < 3.0f) { - const float alpha = 4.0f; - const float rb04 = 0.0884805322f; // 1.0f / bessel0(4.0f); - const float ratio = t / 3.0f; + const gfloat alpha = 4.0f; + const gfloat rb04 = 0.0884805322f; // 1.0f / bessel0(4.0f); + const gfloat ratio = t / 3.0f; if ((1.0f - ratio * ratio) >= 0) - return sinc(t) * bessel0(alpha * sqrtf(1.0f - ratio * ratio)) * rb04; + return sinc (t) * bessel0 (alpha * sqrtf (1.0f - ratio * ratio)) * rb04; } return 0.0f; } -/****************************************************************************** - * 2D image scaling * - ******************************************************************************/ + +/** + * 2D Scaling + */ static void -scale_image_nearest (unsigned char *dst, - int dw, - int dh, - unsigned char *src, - int sw, - int sh, - int bpp, - filterfunc_t filter, - float support, - wrapfunc_t wrap, - int gc, - float gamma) +scale_image_nearest (guchar *dst, + gint dw, + gint dh, + guchar *src, + gint sw, + gint sh, + gint bpp, + filterfunc_t filter, + gfloat support, + wrapfunc_t wrap, + gint gc, + gfloat gamma) { - int n, x, y; - int ix, iy; - int srowbytes = sw * bpp; - int drowbytes = dw * bpp; + gint n, x, y; + gint ix, iy; + gint srowbytes = sw * bpp; + gint drowbytes = dw * bpp; for (y = 0; y < dh; ++y) { @@ -439,34 +476,31 @@ scale_image_nearest (unsigned char *dst, } static void -scale_image (unsigned char *dst, - int dw, - int dh, - unsigned char *src, - int sw, - int sh, - int bpp, - filterfunc_t filter, - float support, - wrapfunc_t wrap, - int gc, - float gamma) +scale_image (guchar *dst, + gint dw, + gint dh, + guchar *src, + gint sw, + gint sh, + gint bpp, + filterfunc_t filter, + gfloat support, + wrapfunc_t wrap, + gint gc, + gfloat gamma) { - const float blur = 1.0f; - const float xfactor = (float)dw / (float)sw; - const float yfactor = (float)dh / (float)sh; + const gfloat xfactor = (gfloat) dw / (gfloat) sw; + const gfloat yfactor = (gfloat) dh / (gfloat) sh; - int x, y, start, stop, nmax, n, i; - int sstride = sw * bpp; - float center, contrib, density, s, r, t; - - unsigned char *d, *row, *col; - - float xscale = MIN(xfactor, 1.0f) / blur; - float yscale = MIN(yfactor, 1.0f) / blur; - float xsupport = support / xscale; - float ysupport = support / yscale; - unsigned char *tmp; + gint x, y, start, stop, nmax, n, i; + gfloat center, contrib, density, s, r, t; + gint sstride = sw * bpp; + gfloat xscale = MIN (xfactor, 1.0f); + gfloat yscale = MIN (yfactor, 1.0f); + gfloat xsupport = support / xscale; + gfloat ysupport = support / yscale; + guchar *d, *row, *col; + guchar *tmp; if (xsupport <= 0.5f) { @@ -481,9 +515,9 @@ scale_image (unsigned char *dst, } #ifdef _OPENMP - tmp = g_malloc(sw * bpp * omp_get_max_threads()); + tmp = g_malloc (sw * bpp * omp_get_max_threads ()); #else - tmp = g_malloc(sw * bpp); + tmp = g_malloc (sw * bpp); #endif #ifdef _OPENMP @@ -495,14 +529,14 @@ scale_image (unsigned char *dst, /* resample in Y direction to temp buffer */ d = tmp; #ifdef _OPENMP - d += (sw * bpp * omp_get_thread_num()); + d += (sw * bpp * omp_get_thread_num ()); #endif - center = ((float)y + 0.5f) / yfactor; - start = (int)(center - ysupport + 0.5f); - stop = (int)(center + ysupport + 0.5f); + center = ((gfloat) y + 0.5f) / yfactor; + start = (gint) roundf ((center - ysupport) + 0.5f); + stop = (gint) roundf ((center + ysupport) + 0.5f); nmax = stop - start; - s = (float)start - center + 0.5f; + s = (gfloat) start - center + 0.5f; for (x = 0; x < sw; ++x) { @@ -518,21 +552,21 @@ scale_image (unsigned char *dst, contrib = filter((s + n) * yscale); density += contrib; if (i == 3) - t = col[(wrap(start + n, sh) * sstride) + i]; + t = (gfloat) col[(wrap (start + n, sh) * sstride) + i] / 255.0f; else - t = linear_to_gamma(gc, col[(wrap(start + n, sh) * sstride) + i], gamma); + t = gamma_to_linear (gc, (gfloat) col[(wrap (start + n, sh) * sstride) + i] / 255.0f, gamma); r += t * contrib; } if (density != 0.0f && density != 1.0f) r /= density; - r = MIN(255, MAX(0, r)); + r = MIN (1.0f, MAX (0.0f, r)); if (i != 3) - r = gamma_to_linear(gc, r, gamma); + r = linear_to_gamma (gc, r, gamma); - d[(x * bpp) + i] = (unsigned char)r; + d[(x * bpp) + i] = (guchar) floorf (r * 255.0f + 0.5f); } } @@ -542,11 +576,11 @@ scale_image (unsigned char *dst, for (x = 0; x < dw; ++x) { - center = ((float)x + 0.5f) / xfactor; - start = (int)(center - xsupport + 0.5f); - stop = (int)(center + xsupport + 0.5f); + center = ((gfloat) x + 0.5f) / xfactor; + start = (gint) roundf ((center - xsupport) + 0.5f); + stop = (gint) roundf ((center + xsupport) + 0.5f); nmax = stop - start; - s = (float)start - center + 0.5f; + s = (gfloat) start - center + 0.5f; for (i = 0; i < bpp; ++i) { @@ -558,21 +592,21 @@ scale_image (unsigned char *dst, contrib = filter((s + n) * xscale); density += contrib; if (i == 3) - t = row[(wrap(start + n, sw) * bpp) + i]; + t = (gfloat) row[(wrap (start + n, sw) * bpp) + i] / 255.0f; else - t = linear_to_gamma(gc, row[(wrap(start + n, sw) * bpp) + i], gamma); + t = gamma_to_linear (gc, (gfloat) row[(wrap (start + n, sw) * bpp) + i] / 255.0f, gamma); r += t * contrib; } if (density != 0.0f && density != 1.0f) r /= density; - r = MIN(255, MAX(0, r)); + r = MIN (1.0f, MAX (0.0f, r)); if (i != 3) - r = gamma_to_linear(gc, r, gamma); + r = linear_to_gamma (gc, r, gamma); - d[(y * (dw * bpp)) + (x * bpp) + i] = (unsigned char)r; + d[(y * (dw * bpp)) + (x * bpp) + i] = (guchar) floorf (r * 255.0f + 0.5f); } } } @@ -580,28 +614,29 @@ scale_image (unsigned char *dst, g_free (tmp); } -/****************************************************************************** - * 3D image scaling * - ******************************************************************************/ + +/** + * 3D Scaling + */ static void -scale_volume_image_nearest (unsigned char *dst, - int dw, - int dh, - int dd, - unsigned char *src, - int sw, - int sh, - int sd, - int bpp, - filterfunc_t filter, - float support, - wrapfunc_t wrap, - int gc, - float gamma) +scale_volume_image_nearest (guchar *dst, + gint dw, + gint dh, + gint dd, + guchar *src, + gint sw, + gint sh, + gint sd, + gint bpp, + filterfunc_t filter, + gfloat support, + wrapfunc_t wrap, + gint gc, + gfloat gamma) { - int n, x, y, z; - int ix, iy, iz; + gint n, x, y, z; + gint ix, iy, iz; for (z = 0; z < dd; ++z) { @@ -623,45 +658,42 @@ scale_volume_image_nearest (unsigned char *dst, } static void -scale_volume_image (unsigned char *dst, - int dw, - int dh, - int dd, - unsigned char *src, - int sw, - int sh, - int sd, - int bpp, - filterfunc_t filter, - float support, - wrapfunc_t wrap, - int gc, - float gamma) +scale_volume_image (guchar *dst, + gint dw, + gint dh, + gint dd, + guchar *src, + gint sw, + gint sh, + gint sd, + gint bpp, + filterfunc_t filter, + gfloat support, + wrapfunc_t wrap, + gint gc, + gfloat gamma) { - const float blur = 1.0f; - const float xfactor = (float)dw / (float)sw; - const float yfactor = (float)dh / (float)sh; - const float zfactor = (float)dd / (float)sd; + const gfloat xfactor = (gfloat) dw / (gfloat) sw; + const gfloat yfactor = (gfloat) dh / (gfloat) sh; + const gfloat zfactor = (gfloat) dd / (gfloat) sd; - int x, y, z, start, stop, nmax, n, i; - int sstride = sw * bpp; - int zstride = sh * sw * bpp; - float center, contrib, density, s, r, t; - - unsigned char *d, *row, *col, *slice; - - float xscale = MIN(xfactor, 1.0f) / blur; - float yscale = MIN(yfactor, 1.0f) / blur; - float zscale = MIN(zfactor, 1.0f) / blur; - float xsupport = support / xscale; - float ysupport = support / yscale; - float zsupport = support / zscale; - unsigned char *tmp1, *tmp2; + gint x, y, z, start, stop, nmax, n, i; + gfloat center, contrib, density, s, r, t; + gint sstride = sw * bpp; + gint zstride = sh * sw * bpp; + gfloat xscale = MIN (xfactor, 1.0f); + gfloat yscale = MIN (yfactor, 1.0f); + gfloat zscale = MIN (zfactor, 1.0f); + gfloat xsupport = support / xscale; + gfloat ysupport = support / yscale; + gfloat zsupport = support / zscale; + guchar *d, *row, *col, *slice; + guchar *tmp1, *tmp2; /* down to a 2D image, use the faster 2D image resampler */ if (dd == 1 && sd == 1) { - scale_image(dst, dw, dh, src, sw, sh, bpp, filter, support, wrap, gc, gamma); + scale_image (dst, dw, dh, src, sw, sh, bpp, filter, support, wrap, gc, gamma); return; } @@ -683,19 +715,19 @@ scale_volume_image (unsigned char *dst, zscale = 1.0f; } - tmp1 = g_malloc(sh * sw * bpp); - tmp2 = g_malloc(dh * sw * bpp); + tmp1 = g_malloc (sh * sw * bpp); + tmp2 = g_malloc (dh * sw * bpp); for (z = 0; z < dd; ++z) { /* resample in Z direction */ d = tmp1; - center = ((float)z + 0.5f) / zfactor; - start = (int)(center - zsupport + 0.5f); - stop = (int)(center + zsupport + 0.5f); + center = ((gfloat) z + 0.5f) / zfactor; + start = (gint) roundf ((center - zsupport) + 0.5f); + stop = (gint) roundf ((center + zsupport) + 0.5f); nmax = stop - start; - s = (float)start - center + 0.5f; + s = (gfloat) start - center + 0.5f; #ifdef _OPENMP #pragma omp parallel for schedule(dynamic) \ @@ -717,21 +749,21 @@ scale_volume_image (unsigned char *dst, contrib = filter((s + n) * zscale); density += contrib; if (i == 3) - t = slice[(wrap(start + n, sd) * zstride) + i]; + t = (gfloat) slice[(wrap (start + n, sd) * zstride) + i] / 255.0f; else - t = linear_to_gamma(gc, slice[(wrap(start + n, sd) * zstride) + i], gamma); + t = gamma_to_linear (gc, (gfloat) slice[(wrap (start + n, sd) * zstride) + i] / 255.0f, gamma); r += t * contrib; } if (density != 0.0f && density != 1.0f) r /= density; - r = MIN(255, MAX(0, r)); + r = MIN (1.0f, MAX (0.0f, r)); if (i != 3) - r = gamma_to_linear(gc, r, gamma); + r = linear_to_gamma (gc, r, gamma); - d[((y * sw) + x) * bpp + i] = (unsigned char)r; + d[((y * sw) + x) * bpp + i] = (guchar) floorf (r * 255.0f + 0.5f); } } } @@ -744,11 +776,11 @@ scale_volume_image (unsigned char *dst, #endif for (y = 0; y < dh; ++y) { - center = ((float)y + 0.5f) / yfactor; - start = (int)(center - ysupport + 0.5f); - stop = (int)(center + ysupport + 0.5f); + center = ((gfloat) y + 0.5f) / yfactor; + start = (gint) roundf ((center - ysupport) + 0.5f); + stop = (gint) roundf ((center + ysupport) + 0.5f); nmax = stop - start; - s = (float)start - center + 0.5f; + s = (gfloat) start - center + 0.5f; for (x = 0; x < sw; ++x) { @@ -764,21 +796,21 @@ scale_volume_image (unsigned char *dst, contrib = filter((s + n) * yscale); density += contrib; if (i == 3) - t = col[(wrap(start + n, sh) * sstride) + i]; + t = (gfloat) col[(wrap (start + n, sh) * sstride) + i] / 255.0f; else - t = linear_to_gamma(gc, col[(wrap(start + n, sh) * sstride) + i], gamma); + t = gamma_to_linear (gc, (gfloat) col[(wrap (start + n, sh) * sstride) + i] / 255.0f, gamma); r += t * contrib; } if (density != 0.0f && density != 1.0f) r /= density; - r = MIN(255, MAX(0, r)); + r = MIN (1.0f, MAX (0.0f, r)); if (i != 3) - r = gamma_to_linear(gc, r, gamma); + r = linear_to_gamma (gc, r, gamma); - d[((y * sw) + x) * bpp + i] = (unsigned char)r; + d[((y * sw) + x) * bpp + i] = (guchar) floorf (r * 255.0f + 0.5f); } } } @@ -795,11 +827,11 @@ scale_volume_image (unsigned char *dst, for (x = 0; x < dw; ++x) { - center = ((float)x + 0.5f) / xfactor; - start = (int)(center - xsupport + 0.5f); - stop = (int)(center + xsupport + 0.5f); + center = ((gfloat) x + 0.5f) / xfactor; + start = (gint) roundf ((center - xsupport) + 0.5f); + stop = (gint) roundf ((center + xsupport) + 0.5f); nmax = stop - start; - s = (float)start - center + 0.5f; + s = (gfloat) start - center + 0.5f; for (i = 0; i < bpp; ++i) { @@ -811,21 +843,21 @@ scale_volume_image (unsigned char *dst, contrib = filter((s + n) * xscale); density += contrib; if (i == 3) - t = row[(wrap(start + n, sw) * bpp) + i]; + t = (gfloat) row[(wrap (start + n, sw) * bpp) + i] / 255.0f; else - t = linear_to_gamma(gc, row[(wrap(start + n, sw) * bpp) + i], gamma); + t = gamma_to_linear (gc, (gfloat) row[(wrap (start + n, sw) * bpp) + i] / 255.0f, gamma); r += t * contrib; } if (density != 0.0f && density != 1.0f) r /= density; - r = MIN(255, MAX(0, r)); + r = MIN (1.0f, MAX (0.0f, r)); if (i != 3) - r = gamma_to_linear(gc, r, gamma); + r = linear_to_gamma (gc, r, gamma); - d[((z * dh * dw) + (y * dw) + x) * bpp + i] = (unsigned char)r; + d[((z * dh * dw) + (y * dw) + x) * bpp + i] = (guchar) floorf (r * 255.0f + 0.5f); } } } @@ -835,15 +867,16 @@ scale_volume_image (unsigned char *dst, g_free (tmp2); } -/****************************************************************************** - * filter lookup table * - ******************************************************************************/ + +/** + * Filter Lookup-table + */ static struct { - int filter; + gint filter; filterfunc_t func; - float support; + gfloat support; } filters[] = { { DDS_MIPMAP_FILTER_BOX, box_filter, 0.5f }, @@ -851,40 +884,42 @@ static struct { DDS_MIPMAP_FILTER_QUADRATIC, quadratic_filter, 1.5f }, { DDS_MIPMAP_FILTER_BSPLINE, bspline_filter, 2.0f }, { DDS_MIPMAP_FILTER_MITCHELL, mitchell_filter, 2.0f }, + { DDS_MIPMAP_FILTER_CATROM, catrom_filter, 2.0f }, { DDS_MIPMAP_FILTER_LANCZOS, lanczos_filter, 3.0f }, { DDS_MIPMAP_FILTER_KAISER, kaiser_filter, 3.0f }, { DDS_MIPMAP_FILTER_MAX, NULL, 0.0f } }; -/* - * Alpha test coverage - portion of visible texels after alpha test: - * if (texel_alpha < alpha_test_threshold) - * discard; + +/** + * Alpha-test Coverage - portion of visible texels after alpha test: + * if (texel_alpha < alpha_test_threshold) discard; */ -static float -calc_alpha_test_coverage (unsigned char *src, - unsigned int width, - unsigned int height, - int bpp, - float alpha_test_threshold, - float alpha_scale) + +static gfloat +calc_alpha_test_coverage (guchar *src, + guint width, + guint height, + gint bpp, + gfloat alpha_test_threshold, + gfloat alpha_scale) { - unsigned int x, y; - int rowbytes = width * bpp; - int coverage = 0; - const int alpha_channel_idx = 3; + const gint alpha_channel_idx = 3; + gint rowbytes = width * bpp; + gint coverage = 0; + guint x, y; if (bpp <= alpha_channel_idx) { /* No alpha channel */ - return 1.f; + return 1.0f; } for (y = 0; y < height; ++y) { for (x = 0; x < width; ++x) { - const float alpha = src[y * rowbytes + (x * bpp) + alpha_channel_idx]; + const gfloat alpha = src[y * rowbytes + (x * bpp) + alpha_channel_idx]; if ((alpha * alpha_scale) >= (alpha_test_threshold * 255)) { ++coverage; @@ -892,24 +927,24 @@ calc_alpha_test_coverage (unsigned char *src, } } - return (float)coverage / (width * height); + return (gfloat) coverage / (width * height); } static void -scale_alpha_to_coverage (unsigned char *img, - unsigned int width, - unsigned int height, - int bpp, - float desired_coverage, - float alpha_test_threshold) +scale_alpha_to_coverage (guchar *img, + guint width, + guint height, + gint bpp, + gfloat desired_coverage, + gfloat alpha_test_threshold) { - int i; - unsigned int x, y; - const int rowbytes = width * bpp; - const int alpha_channel_idx = 3; - float min_alpha_scale = 0.0f; - float max_alpha_scale = 4.0f; - float alpha_scale = 1.0f; + const gint rowbytes = width * bpp; + const gint alpha_channel_idx = 3; + gfloat min_alpha_scale = 0.0f; + gfloat max_alpha_scale = 4.0f; + gfloat alpha_scale = 1.0f; + guint x, y; + gint i; if (bpp <= alpha_channel_idx) { @@ -920,7 +955,7 @@ scale_alpha_to_coverage (unsigned char *img, /* Binary search */ for (i = 0; i < 10; i++) { - float cur_coverage = calc_alpha_test_coverage(img, width, height, bpp, alpha_test_threshold, alpha_scale); + gfloat cur_coverage = calc_alpha_test_coverage (img, width, height, bpp, alpha_test_threshold, alpha_scale); if (cur_coverage < desired_coverage) { @@ -943,45 +978,46 @@ scale_alpha_to_coverage (unsigned char *img, { for (x = 0; x < width; ++x) { - float new_alpha = img[y * rowbytes + (x * bpp) + alpha_channel_idx] * alpha_scale; + gfloat new_alpha = img[y * rowbytes + (x * bpp) + alpha_channel_idx] * alpha_scale; if (new_alpha > 255.0f) { new_alpha = 255.0f; } - img[y * rowbytes + (x * bpp) + alpha_channel_idx] = (unsigned char)new_alpha; + img[y * rowbytes + (x * bpp) + alpha_channel_idx] = (guchar) new_alpha; } } } -/****************************************************************************** - * mipmap generation * - ******************************************************************************/ -int -generate_mipmaps (unsigned char *dst, - unsigned char *src, - unsigned int width, - unsigned int height, - int bpp, - int indexed, - int mipmaps, - int filter, - int wrap, - int gc, - float gamma, - int preserve_alpha_coverage, - float alpha_test_threshold) +/** + * Mipmap Generation + */ + +gint +generate_mipmaps (guchar *dst, + guchar *src, + guint width, + guint height, + gint bpp, + gint indexed, + gint mipmaps, + gint filter, + gint wrap, + gint gc, + gfloat gamma, + gint preserve_alpha_coverage, + gfloat alpha_test_threshold) { - int i; - unsigned int sw, sh, dw, dh; - unsigned char *s, *d; + const gint has_alpha = (bpp >= 3); mipmapfunc_t mipmap_func = NULL; filterfunc_t filter_func = NULL; - wrapfunc_t wrap_func = NULL; - float support = 0.0f; - const int has_alpha = (bpp >= 3); - float alpha_test_coverage = 1; + wrapfunc_t wrap_func = NULL; + gfloat coverage = 1.0f; + gfloat support = 0.0f; + guint sw, sh, dw, dh; + guchar *s, *d; + gint i; if (indexed || filter == DDS_MIPMAP_FILTER_NEAREST) { @@ -989,7 +1025,7 @@ generate_mipmaps (unsigned char *dst, } else { - if ((filter <= DDS_MIPMAP_FILTER_DEFAULT) || + if ((filter < DDS_MIPMAP_FILTER_NEAREST) || (filter >= DDS_MIPMAP_FILTER_MAX)) filter = DDS_MIPMAP_FILTER_BOX; @@ -1016,9 +1052,9 @@ generate_mipmaps (unsigned char *dst, if (has_alpha && preserve_alpha_coverage) { - alpha_test_coverage = calc_alpha_test_coverage(src, width, height, bpp, - alpha_test_threshold, - 1.0f); + coverage = calc_alpha_test_coverage (src, width, height, bpp, + alpha_test_threshold, + 1.0f); } memcpy (dst, src, width * height * bpp); @@ -1026,19 +1062,19 @@ generate_mipmaps (unsigned char *dst, s = dst; d = dst + (width * height * bpp); - sw = width; - sh = height; + dw = sw = width; + dh = sh = height; for (i = 1; i < mipmaps; ++i) { - dw = MAX(1, sw >> 1); - dh = MAX(1, sh >> 1); + dw = MAX (1, dw >> 1); + dh = MAX (1, dh >> 1); - mipmap_func(d, dw, dh, s, sw, sh, bpp, filter_func, support, wrap_func, gc, gamma); + mipmap_func (d, dw, dh, s, sw, sh, bpp, filter_func, support, wrap_func, gc, gamma); if (has_alpha && preserve_alpha_coverage) { - scale_alpha_to_coverage(d, dw, dh, bpp, alpha_test_coverage, alpha_test_threshold); + scale_alpha_to_coverage (d, dw, dh, bpp, coverage, alpha_test_threshold); } s = d; @@ -1050,28 +1086,28 @@ generate_mipmaps (unsigned char *dst, return 1; } -int -generate_volume_mipmaps (unsigned char *dst, - unsigned char *src, - unsigned int width, - unsigned int height, - unsigned int depth, - int bpp, - int indexed, - int mipmaps, - int filter, - int wrap, - int gc, - float gamma) +gint +generate_volume_mipmaps (guchar *dst, + guchar *src, + guint width, + guint height, + guint depth, + gint bpp, + gint indexed, + gint mipmaps, + gint filter, + gint wrap, + gint gc, + gfloat gamma) { - int i; - unsigned int sw, sh, sd; - unsigned int dw, dh, dd; - unsigned char *s, *d; volmipmapfunc_t mipmap_func = NULL; - filterfunc_t filter_func = NULL; - wrapfunc_t wrap_func = NULL; - float support = 0.0f; + filterfunc_t filter_func = NULL; + wrapfunc_t wrap_func = NULL; + gfloat support = 0.0f; + guint sw, sh, sd; + guint dw, dh, dd; + guchar *s, *d; + gint i; if (indexed || filter == DDS_MIPMAP_FILTER_NEAREST) { @@ -1079,7 +1115,7 @@ generate_volume_mipmaps (unsigned char *dst, } else { - if ((filter <= DDS_MIPMAP_FILTER_DEFAULT) || + if ((filter < DDS_MIPMAP_FILTER_NEAREST) || (filter >= DDS_MIPMAP_FILTER_MAX)) filter = DDS_MIPMAP_FILTER_BOX; @@ -1115,9 +1151,9 @@ generate_volume_mipmaps (unsigned char *dst, for (i = 1; i < mipmaps; ++i) { - dw = MAX(1, sw >> 1); - dh = MAX(1, sh >> 1); - dd = MAX(1, sd >> 1); + dw = MAX (1, sw >> 1); + dh = MAX (1, sh >> 1); + dd = MAX (1, sd >> 1); mipmap_func (d, dw, dh, dd, s, sw, sh, sd, bpp, filter_func, support, wrap_func, gc, gamma); diff --git a/plug-ins/file-dds/mipmap.h b/plug-ins/file-dds/mipmap.h index efd027a..880d15d 100644 --- a/plug-ins/file-dds/mipmap.h +++ b/plug-ins/file-dds/mipmap.h @@ -21,55 +21,56 @@ #ifndef __MIPMAP_H__ #define __MIPMAP_H__ -int get_num_mipmaps (int width, - int height); -unsigned int get_mipmapped_size (int width, - int height, - int bpp, - int level, - int num, - int format); -unsigned int get_volume_mipmapped_size (int width, - int height, - int depth, - int bpp, - int level, - int num, - int format); -int get_next_mipmap_dimensions (int *next_w, - int *next_h, - int curr_w, - int curr_h); -float cubic_interpolate (float a, - float b, - float c, - float d, - float x); -int generate_mipmaps (unsigned char *dst, - unsigned char *src, - unsigned int width, - unsigned int height, - int bpp, - int indexed, - int mipmaps, - int filter, - int wrap, - int gamma_correct, - float gamma, - int preserve_alpha_test_coverage, - float alpha_test_threshold); -int generate_volume_mipmaps (unsigned char *dst, - unsigned char *src, - unsigned int width, - unsigned int height, - unsigned int depth, - int bpp, - int indexed, - int mipmaps, - int filter, - int wrap, - int gamma_correct, - float gamma); +gint get_num_mipmaps (gint width, + gint height); + +guint get_mipmapped_size (gint width, + gint height, + gint bpp, + gint level, + gint num, + gint format); + +guint get_volume_mipmapped_size (gint width, + gint height, + gint depth, + gint bpp, + gint level, + gint num, + gint format); + +gint get_next_mipmap_dimensions (gint *next_w, + gint *next_h, + gint curr_w, + gint curr_h); + +gint generate_mipmaps (guchar *dst, + guchar *src, + guint width, + guint height, + gint bpp, + gint indexed, + gint mipmaps, + gint filter, + gint wrap, + gint gamma_correct, + gfloat gamma, + gint preserve_alpha_test_coverage, + gfloat alpha_test_threshold); + +gint generate_volume_mipmaps (guchar *dst, + guchar *src, + guint width, + guint height, + guint depth, + gint bpp, + gint indexed, + gint mipmaps, + gint filter, + gint wrap, + gint gamma_correct, + gfloat gamma); + #endif /* __MIPMAP_H__ */ diff --git a/plug-ins/file-dds/misc.c b/plug-ins/file-dds/misc.c index 9d43fa7..c2c9b29 100644 --- a/plug-ins/file-dds/misc.c +++ b/plug-ins/file-dds/misc.c @@ -4,56 +4,53 @@ * Copyright (C) 2004-2012 Shawn Kirst , * with parts (C) 2003 Arne Reuter where specified. * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this program; see the file COPYING. If not, write to - * the Free Software Foundation, 51 Franklin Street, Fifth Floor - * Boston, MA 02110-1301, USA. + * along with this program. If not, see . */ #include + +#include "endian_rw.h" +#include "imath.h" #include "misc.h" -static inline float -saturate (float a) -{ - if(a < 0) a = 0; - if(a > 1) a = 1; +/* + * Decoding Functions + */ + +static inline gfloat +saturate (gfloat a) +{ + if (a < 0) a = 0; + if (a > 1) a = 1; return a; } void -decode_ycocg_image (PikaDrawable *drawable, - gboolean shadow) +decode_ycocg (PikaDrawable *drawable) { - GeglBuffer *buffer, *sbuffer; - const Babl *format; - unsigned char *data; - unsigned int i, w, h, num_pixels; - - const float offset = 0.5f * 256.0f / 255.0f; - float Y, Co, Cg, R, G, B; + GeglBuffer *buffer; + const Babl *format; + guchar *data; + guint num_pixels; + guint i, w, h; + const gfloat offset = 0.5f * 256.0f / 255.0f; + gfloat Y, Co, Cg; + gfloat R, G, B; buffer = pika_drawable_get_buffer (drawable); - if (shadow) - { - sbuffer = pika_drawable_get_shadow_buffer (drawable); - gegl_buffer_copy (buffer, NULL, GEGL_ABYSS_NONE, sbuffer, NULL); - g_object_unref (buffer); - buffer = sbuffer; - } - format = babl_format ("R'G'B'A u8"); w = gegl_buffer_get_width (buffer); @@ -62,46 +59,43 @@ decode_ycocg_image (PikaDrawable *drawable, data = g_malloc (num_pixels * 4); - gegl_buffer_get (buffer, GEGL_RECTANGLE(0, 0, w, h), 1.0, format, data, + gegl_buffer_get (buffer, GEGL_RECTANGLE (0, 0, w, h), 1.0, format, data, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); pika_progress_init ("Decoding YCoCg pixels..."); for (i = 0; i < num_pixels; ++i) { - Y = (float)data[4 * i + 3] / 255.0f; - Co = (float)data[4 * i + 0] / 255.0f; - Cg = (float)data[4 * i + 1] / 255.0f; + Y = (gfloat) data[4 * i + 3] / 255.0f; + Co = (gfloat) data[4 * i + 0] / 255.0f; + Cg = (gfloat) data[4 * i + 1] / 255.0f; /* convert YCoCg to RGB */ Co -= offset; Cg -= offset; - R = saturate(Y + Co - Cg); - G = saturate(Y + Cg); - B = saturate(Y - Co - Cg); + R = saturate (Y + Co - Cg); + G = saturate (Y + Cg); + B = saturate (Y - Co - Cg); /* copy new alpha from blue */ data[4 * i + 3] = data[4 * i + 2]; - data[4 * i + 0] = (unsigned char)(R * 255.0f); - data[4 * i + 1] = (unsigned char)(G * 255.0f); - data[4 * i + 2] = (unsigned char)(B * 255.0f); + data[4 * i + 0] = (guchar) (R * 255.0f); + data[4 * i + 1] = (guchar) (G * 255.0f); + data[4 * i + 2] = (guchar) (B * 255.0f); if ((i & 0x7fff) == 0) - pika_progress_update ((float)i / (float)num_pixels); + pika_progress_update ((gdouble) i / (gdouble) num_pixels); } - gegl_buffer_set (buffer, GEGL_RECTANGLE(0, 0, w, h), 0, format, data, + gegl_buffer_set (buffer, GEGL_RECTANGLE (0, 0, w, h), 0, format, data, GEGL_AUTO_ROWSTRIDE); pika_progress_update (1.0); gegl_buffer_flush (buffer); - if (shadow) - pika_drawable_merge_shadow (drawable, TRUE); - pika_drawable_update (drawable, 0, 0, w, h); g_free (data); @@ -110,27 +104,19 @@ decode_ycocg_image (PikaDrawable *drawable, } void -decode_ycocg_scaled_image (PikaDrawable *drawable, - gboolean shadow) +decode_ycocg_scaled (PikaDrawable *drawable) { - GeglBuffer *buffer, *sbuffer; - const Babl *format; - unsigned char *data; - unsigned int i, w, h, num_pixels; - - const float offset = 0.5f * 256.0f / 255.0f; - float Y, Co, Cg, R, G, B, s; + GeglBuffer *buffer; + const Babl *format; + guchar *data; + guint num_pixels; + guint i, w, h; + const gfloat offset = 0.5f * 256.0f / 255.0f; + gfloat Y, Co, Cg; + gfloat R, G, B, s; buffer = pika_drawable_get_buffer (drawable); - if (shadow) - { - sbuffer = pika_drawable_get_shadow_buffer (drawable); - gegl_buffer_copy (buffer, NULL, GEGL_ABYSS_NONE, sbuffer, NULL); - g_object_unref (buffer); - buffer = sbuffer; - } - format = babl_format ("R'G'B'A u8"); w = gegl_buffer_get_width (buffer); @@ -139,17 +125,17 @@ decode_ycocg_scaled_image (PikaDrawable *drawable, data = g_malloc (num_pixels * 4); - gegl_buffer_get (buffer, GEGL_RECTANGLE(0, 0, w, h), 1.0, format, data, + gegl_buffer_get (buffer, GEGL_RECTANGLE (0, 0, w, h), 1.0, format, data, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); pika_progress_init ("Decoding YCoCg (scaled) pixels..."); for (i = 0; i < num_pixels; ++i) { - Y = (float)data[4 * i + 3] / 255.0f; - Co = (float)data[4 * i + 0] / 255.0f; - Cg = (float)data[4 * i + 1] / 255.0f; - s = (float)data[4 * i + 2] / 255.0f; + Y = (gfloat) data[4 * i + 3] / 255.0f; + Co = (gfloat) data[4 * i + 0] / 255.0f; + Cg = (gfloat) data[4 * i + 1] / 255.0f; + s = (gfloat) data[4 * i + 2] / 255.0f; /* convert YCoCg to RGB */ s = 1.0f / ((255.0f / 8.0f) * s + 1.0f); @@ -157,31 +143,28 @@ decode_ycocg_scaled_image (PikaDrawable *drawable, Co = (Co - offset) * s; Cg = (Cg - offset) * s; - R = saturate(Y + Co - Cg); - G = saturate(Y + Cg); - B = saturate(Y - Co - Cg); + R = saturate (Y + Co - Cg); + G = saturate (Y + Cg); + B = saturate (Y - Co - Cg); - data[4 * i + 0] = (unsigned char)(R * 255.0f); - data[4 * i + 1] = (unsigned char)(G * 255.0f); - data[4 * i + 2] = (unsigned char)(B * 255.0f); + data[4 * i + 0] = (guchar) (R * 255.0f); + data[4 * i + 1] = (guchar) (G * 255.0f); + data[4 * i + 2] = (guchar) (B * 255.0f); /* set alpha to 1 */ data[4 * i + 3] = 255; if ((i & 0x7fff) == 0) - pika_progress_update ((float)i / (float)num_pixels); + pika_progress_update ((gdouble) i / (gdouble) num_pixels); } - gegl_buffer_set (buffer, GEGL_RECTANGLE(0, 0, w, h), 0, format, data, + gegl_buffer_set (buffer, GEGL_RECTANGLE (0, 0, w, h), 0, format, data, GEGL_AUTO_ROWSTRIDE); pika_progress_update (1.0); gegl_buffer_flush (buffer); - if (shadow) - pika_drawable_merge_shadow (drawable, TRUE); - pika_drawable_update (drawable, 0, 0, w, h); g_free (data); @@ -190,25 +173,17 @@ decode_ycocg_scaled_image (PikaDrawable *drawable, } void -decode_alpha_exp_image (PikaDrawable *drawable, - gboolean shadow) +decode_alpha_exponent (PikaDrawable *drawable) { - GeglBuffer *buffer, *sbuffer; + GeglBuffer *buffer; const Babl *format; - unsigned char *data; - unsigned int i, w, h, num_pixels; - int R, G, B, A; + guchar *data; + guint num_pixels; + guint i, w, h; + gint R, G, B, A; buffer = pika_drawable_get_buffer (drawable); - if (shadow) - { - sbuffer = pika_drawable_get_shadow_buffer (drawable); - gegl_buffer_copy (buffer, NULL, GEGL_ABYSS_NONE, sbuffer, NULL); - g_object_unref (buffer); - buffer = sbuffer; - } - format = babl_format ("R'G'B'A u8"); w = gegl_buffer_get_width (buffer); @@ -217,7 +192,7 @@ decode_alpha_exp_image (PikaDrawable *drawable, data = g_malloc (num_pixels * 4); - gegl_buffer_get (buffer, GEGL_RECTANGLE(0, 0, w, h), 1.0, format, data, + gegl_buffer_get (buffer, GEGL_RECTANGLE (0, 0, w, h), 1.0, format, data, GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE); pika_progress_init ("Decoding Alpha-exponent pixels..."); @@ -240,22 +215,268 @@ decode_alpha_exp_image (PikaDrawable *drawable, data[4 * i + 3] = A; if ((i & 0x7fff) == 0) - pika_progress_update ((float)i / (float)num_pixels); + pika_progress_update ((gdouble) i / (gdouble) num_pixels); } - gegl_buffer_set (buffer, GEGL_RECTANGLE(0, 0, w, h), 0, format, data, + gegl_buffer_set (buffer, GEGL_RECTANGLE (0, 0, w, h), 0, format, data, GEGL_AUTO_ROWSTRIDE); pika_progress_update (1.0); gegl_buffer_flush (buffer); - if (shadow) - pika_drawable_merge_shadow (drawable, TRUE); - pika_drawable_update (drawable, 0, 0, w, h); g_free (data); g_object_unref (buffer); } + + +/* + * Encoding Functions + */ + +void +encode_ycocg (guchar *dst, + gint r, + gint g, + gint b) +{ + gint y = ((r + (g << 1) + b) + 2) >> 2; + gint co = ((((r << 1) - (b << 1)) + 2) >> 2) + 128; + gint cg = (((-r + (g << 1) - b) + 2) >> 2) + 128; + + dst[0] = 255; + dst[1] = (cg > 255 ? 255 : (cg < 0 ? 0 : cg)); + dst[2] = (co > 255 ? 255 : (co < 0 ? 0 : co)); + dst[3] = (y > 255 ? 255 : (y < 0 ? 0 : y)); +} + +void +encode_alpha_exponent (guchar *dst, + gint r, + gint g, + gint b, + gint a) +{ + gfloat ar, ag, ab, aa; + + ar = (gfloat) r / 255.0f; + ag = (gfloat) g / 255.0f; + ab = (gfloat) b / 255.0f; + + aa = MAX (ar, MAX (ag, ab)); + + if (aa < 1e-04f) + { + dst[0] = b; + dst[1] = g; + dst[2] = r; + dst[3] = 255; + return; + } + + ar /= aa; + ag /= aa; + ab /= aa; + + r = (gint) floorf (255.0f * ar + 0.5f); + g = (gint) floorf (255.0f * ag + 0.5f); + b = (gint) floorf (255.0f * ab + 0.5f); + a = (gint) floorf (255.0f * aa + 0.5f); + + dst[0] = MAX (0, MIN (255, b)); + dst[1] = MAX (0, MIN (255, g)); + dst[2] = MAX (0, MIN (255, r)); + dst[3] = MAX (0, MIN (255, a)); +} + + +/* + * Compression Functions + */ + +static void +get_min_max_YCoCg (const guchar *block, + guchar *mincolor, + guchar *maxcolor) +{ + gint i; + + mincolor[2] = mincolor[1] = 255; + maxcolor[2] = maxcolor[1] = 0; + + for (i = 0; i < 16; ++i) + { + if (block[4 * i + 2] < mincolor[2]) mincolor[2] = block[4 * i + 2]; + if (block[4 * i + 1] < mincolor[1]) mincolor[1] = block[4 * i + 1]; + if (block[4 * i + 2] > maxcolor[2]) maxcolor[2] = block[4 * i + 2]; + if (block[4 * i + 1] > maxcolor[1]) maxcolor[1] = block[4 * i + 1]; + } +} + +static void +scale_YCoCg (guchar *block, + guchar *mincolor, + guchar *maxcolor) +{ + const gint s0 = 128 / 2 - 1; + const gint s1 = 128 / 4 - 1; + gint m0, m1, m2, m3; + gint mask0, mask1, scale; + gint i; + + m0 = abs (mincolor[2] - 128); + m1 = abs (mincolor[1] - 128); + m2 = abs (maxcolor[2] - 128); + m3 = abs (maxcolor[1] - 128); + + if (m1 > m0) m0 = m1; + if (m3 > m2) m2 = m3; + if (m2 > m0) m0 = m2; + + mask0 = -(m0 <= s0); + mask1 = -(m0 <= s1); + scale = 1 + (1 & mask0) + (2 & mask1); + + mincolor[2] = (mincolor[2] - 128) * scale + 128; + mincolor[1] = (mincolor[1] - 128) * scale + 128; + mincolor[0] = (scale - 1) << 3; + + maxcolor[2] = (maxcolor[2] - 128) * scale + 128; + maxcolor[1] = (maxcolor[1] - 128) * scale + 128; + maxcolor[0] = (scale - 1) << 3; + + for (i = 0; i < 16; ++i) + { + block[i * 4 + 2] = (block[i * 4 + 2] - 128) * scale + 128; + block[i * 4 + 1] = (block[i * 4 + 1] - 128) * scale + 128; + } +} + +#define INSET_SHIFT 4 + +static void +inset_bbox_YCoCg (guchar *mincolor, + guchar *maxcolor) +{ + gint inset[4], mini[4], maxi[4]; + + inset[2] = (maxcolor[2] - mincolor[2]) - ((1 << (INSET_SHIFT - 1)) - 1); + inset[1] = (maxcolor[1] - mincolor[1]) - ((1 << (INSET_SHIFT - 1)) - 1); + + mini[2] = ((mincolor[2] << INSET_SHIFT) + inset[2]) >> INSET_SHIFT; + mini[1] = ((mincolor[1] << INSET_SHIFT) + inset[1]) >> INSET_SHIFT; + + maxi[2] = ((maxcolor[2] << INSET_SHIFT) - inset[2]) >> INSET_SHIFT; + maxi[1] = ((maxcolor[1] << INSET_SHIFT) - inset[1]) >> INSET_SHIFT; + + mini[2] = (mini[2] >= 0) ? mini[2] : 0; + mini[1] = (mini[1] >= 0) ? mini[1] : 0; + + maxi[2] = (maxi[2] <= 255) ? maxi[2] : 255; + maxi[1] = (maxi[1] <= 255) ? maxi[1] : 255; + + mincolor[2] = (mini[2] & 0xf8) | (mini[2] >> 5); + mincolor[1] = (mini[1] & 0xfc) | (mini[1] >> 6); + + maxcolor[2] = (maxi[2] & 0xf8) | (maxi[2] >> 5); + maxcolor[1] = (maxi[1] & 0xfc) | (maxi[1] >> 6); +} + +static void +select_diagonal_YCoCg (const guchar *block, + guchar *mincolor, + guchar *maxcolor) +{ + guchar mid0, mid1, side, mask, b0, b1, c0, c1; + gint i; + + mid0 = ((gint) mincolor[2] + maxcolor[2] + 1) >> 1; + mid1 = ((gint) mincolor[1] + maxcolor[1] + 1) >> 1; + + side = 0; + for (i = 0; i < 16; ++i) + { + b0 = block[i * 4 + 2] >= mid0; + b1 = block[i * 4 + 1] >= mid1; + side += (b0 ^ b1); + } + + mask = -(side > 8); + mask &= -(mincolor[2] != maxcolor[2]); + + c0 = mincolor[1]; + c1 = maxcolor[1]; + + c0 ^= c1; + c1 ^= c0 & mask; + c0 ^= c1; + + mincolor[1] = c0; + maxcolor[1] = c1; +} + +void +encode_YCoCg_block (guchar *dst, + guchar *block) +{ + guchar colors[4][3], *maxcolor, *mincolor; + guint mask; + gint c0, c1, d0, d1, d2, d3; + gint b0, b1, b2, b3, b4; + gint x0, x1, x2; + gint i, idx; + + maxcolor = &colors[0][0]; + mincolor = &colors[1][0]; + + get_min_max_YCoCg (block, mincolor, maxcolor); + scale_YCoCg (block, mincolor, maxcolor); + inset_bbox_YCoCg (mincolor, maxcolor); + select_diagonal_YCoCg (block, mincolor, maxcolor); + + colors[2][0] = (2 * maxcolor[0] + mincolor[0]) / 3; + colors[2][1] = (2 * maxcolor[1] + mincolor[1]) / 3; + colors[2][2] = (2 * maxcolor[2] + mincolor[2]) / 3; + + colors[3][0] = (2 * mincolor[0] + maxcolor[0]) / 3; + colors[3][1] = (2 * mincolor[1] + maxcolor[1]) / 3; + colors[3][2] = (2 * mincolor[2] + maxcolor[2]) / 3; + + mask = 0; + + for (i = 0; i < 16; ++i) + { + c0 = block[4 * i + 2]; + c1 = block[4 * i + 1]; + + d0 = abs (colors[0][2] - c0) + abs (colors[0][1] - c1); + d1 = abs (colors[1][2] - c0) + abs (colors[1][1] - c1); + d2 = abs (colors[2][2] - c0) + abs (colors[2][1] - c1); + d3 = abs (colors[3][2] - c0) + abs (colors[3][1] - c1); + + b0 = d0 > d3; + b1 = d1 > d2; + b2 = d0 > d2; + b3 = d1 > d3; + b4 = d2 > d3; + + x0 = b1 & b2; + x1 = b0 & b3; + x2 = b0 & b4; + + idx = (x2 | ((x0 | x1) << 1)); + + mask |= idx << (2 * i); + } + + PUTL16 (dst + 0, (mul8bit (maxcolor[2], 31) << 11) | + (mul8bit (maxcolor[1], 63) << 5) | + (mul8bit (maxcolor[0], 31) )); + PUTL16 (dst + 2, (mul8bit (mincolor[2], 31) << 11) | + (mul8bit (mincolor[1], 63) << 5) | + (mul8bit (mincolor[0], 31) )); + PUTL32 (dst + 4, mask); +} diff --git a/plug-ins/file-dds/misc.h b/plug-ins/file-dds/misc.h index dafb773..45652db 100644 --- a/plug-ins/file-dds/misc.h +++ b/plug-ins/file-dds/misc.h @@ -21,11 +21,26 @@ #ifndef __MISC_H__ #define __MISC_H__ -void decode_ycocg_image (PikaDrawable *drawable, - gboolean shadow); -void decode_ycocg_scaled_image (PikaDrawable *drawable, - gboolean shadow); -void decode_alpha_exp_image (PikaDrawable *drawable, - gboolean shadow); + +void decode_ycocg (PikaDrawable *drawable); + +void decode_ycocg_scaled (PikaDrawable *drawable); + +void decode_alpha_exponent (PikaDrawable *drawable); + +void encode_ycocg (guchar *dst, + gint r, + gint g, + gint b); + +void encode_alpha_exponent (guchar *dst, + gint r, + gint g, + gint b, + gint a); + +void encode_YCoCg_block (guchar *dst, + guchar *block); + #endif /* __MISC_H__ */ diff --git a/plug-ins/imagemap/imap_edit_area_info.c b/plug-ins/imagemap/imap_edit_area_info.c index 3708f20..50a7d1a 100644 --- a/plug-ins/imagemap/imap_edit_area_info.c +++ b/plug-ins/imagemap/imap_edit_area_info.c @@ -40,6 +40,23 @@ static gboolean callback_lock; +static void select_web_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_ftp_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_gopher_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_other_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_file_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_wais_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_telnet_cb (GtkWidget *widget, + AreaInfoDialog_t *param); +static void select_email_cb (GtkWidget *widget, + AreaInfoDialog_t *param); + static gchar* relative_filter(const char *name, gpointer data) @@ -77,7 +94,23 @@ url_changed (GtkWidget *widget, button = param->other; callback_lock = TRUE; + g_signal_handlers_block_by_func (param->web_site, G_CALLBACK (select_web_cb), data); + g_signal_handlers_block_by_func (param->ftp_site, G_CALLBACK (select_ftp_cb), data); + g_signal_handlers_block_by_func (param->gopher, G_CALLBACK (select_gopher_cb), data); + g_signal_handlers_block_by_func (param->other, G_CALLBACK (select_other_cb), data); + g_signal_handlers_block_by_func (param->file, G_CALLBACK (select_file_cb), data); + g_signal_handlers_block_by_func (param->wais, G_CALLBACK (select_wais_cb), data); + g_signal_handlers_block_by_func (param->telnet, G_CALLBACK (select_telnet_cb), data); + g_signal_handlers_block_by_func (param->email, G_CALLBACK (select_email_cb), data); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); + g_signal_handlers_unblock_by_func (param->web_site, G_CALLBACK (select_web_cb), data); + g_signal_handlers_unblock_by_func (param->ftp_site, G_CALLBACK (select_ftp_cb), data); + g_signal_handlers_unblock_by_func (param->gopher, G_CALLBACK (select_gopher_cb), data); + g_signal_handlers_unblock_by_func (param->other, G_CALLBACK (select_other_cb), data); + g_signal_handlers_unblock_by_func (param->file, G_CALLBACK (select_file_cb), data); + g_signal_handlers_unblock_by_func (param->wais, G_CALLBACK (select_wais_cb), data); + g_signal_handlers_unblock_by_func (param->telnet, G_CALLBACK (select_telnet_cb), data); + g_signal_handlers_unblock_by_func (param->email, G_CALLBACK (select_email_cb), data); } static void diff --git a/plug-ins/metadata/metadata-editor.c b/plug-ins/metadata/metadata-editor.c index 416d510..47e12ff 100644 --- a/plug-ins/metadata/metadata-editor.c +++ b/plug-ins/metadata/metadata-editor.c @@ -76,6 +76,10 @@ static PikaProcedure * metadata_create_procedure (PikaPlugIn *plug_in const gchar *name); static PikaValueArray * metadata_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, PikaProcedureConfig *config, gpointer run_data); @@ -747,9 +751,9 @@ metadata_create_procedure (PikaPlugIn *plug_in, if (! strcmp (name, PLUG_IN_PROC)) { - procedure = pika_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - metadata_run, NULL, NULL); + procedure = pika_image_procedure_new (plug_in, name, + PIKA_PDB_PROC_TYPE_PLUGIN, + metadata_run, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -768,19 +772,6 @@ metadata_create_procedure (PikaPlugIn *plug_in, "Ben Touchette", "Ben Touchette", "2017"); - - PIKA_PROC_ARG_ENUM (procedure, "run-mode", - "Run mode", - "The run mode", - PIKA_TYPE_RUN_MODE, - PIKA_RUN_INTERACTIVE, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_IMAGE (procedure, "image", - "Image", - "The input image", - FALSE, - G_PARAM_READWRITE); } return procedure; @@ -788,17 +779,18 @@ metadata_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * metadata_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, PikaProcedureConfig *config, gpointer run_data) { - PikaImage *image; PikaMetadata *metadata; GError *error = NULL; pika_ui_init (PLUG_IN_BINARY); - g_object_get (config, "image", &image, NULL); - metadata = pika_image_get_metadata (image); /* Always show metadata dialog so we can add appropriate iptc data diff --git a/plug-ins/metadata/metadata-viewer.c b/plug-ins/metadata/metadata-viewer.c index 448c601..5a5950a 100644 --- a/plug-ins/metadata/metadata-viewer.c +++ b/plug-ins/metadata/metadata-viewer.c @@ -97,6 +97,10 @@ static PikaProcedure * metadata_create_procedure (PikaPlugIn *plug_in const gchar *name); static PikaValueArray * metadata_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, PikaProcedureConfig *config, gpointer run_data); @@ -172,9 +176,9 @@ metadata_create_procedure (PikaPlugIn *plug_in, if (! strcmp (name, PLUG_IN_PROC)) { - procedure = pika_procedure_new (plug_in, name, - PIKA_PDB_PROC_TYPE_PLUGIN, - metadata_run, NULL, NULL); + procedure = pika_image_procedure_new (plug_in, name, + PIKA_PDB_PROC_TYPE_PLUGIN, + metadata_run, NULL, NULL); pika_procedure_set_image_types (procedure, "*"); @@ -194,19 +198,6 @@ metadata_create_procedure (PikaPlugIn *plug_in, "Hartmut Kuhse, Michael Natterer, " "Ben Touchette", "2013, 2017"); - - PIKA_PROC_ARG_ENUM (procedure, "run-mode", - "Run mode", - "The run mode", - PIKA_TYPE_RUN_MODE, - PIKA_RUN_INTERACTIVE, - G_PARAM_READWRITE); - - PIKA_PROC_ARG_IMAGE (procedure, "image", - "Image", - "The input image", - FALSE, - G_PARAM_READWRITE); } return procedure; @@ -214,17 +205,18 @@ metadata_create_procedure (PikaPlugIn *plug_in, static PikaValueArray * metadata_run (PikaProcedure *procedure, + PikaRunMode run_mode, + PikaImage *image, + gint n_drawables, + PikaDrawable **drawables, PikaProcedureConfig *config, gpointer run_data) { - PikaImage *image; PikaMetadata *metadata; GError *error = NULL; pika_ui_init (PLUG_IN_BINARY); - g_object_get (config, "image", &image, NULL); - metadata = pika_image_get_metadata (image); /* Always show metadata dialog so we can add appropriate iptc data diff --git a/plug-ins/script-fu/libscriptfu/scheme-marshal.c b/plug-ins/script-fu/libscriptfu/scheme-marshal.c index 121643d..5219932 100644 --- a/plug-ins/script-fu/libscriptfu/scheme-marshal.c +++ b/plug-ins/script-fu/libscriptfu/scheme-marshal.c @@ -77,6 +77,7 @@ marshal_vector_to_drawable_array (scheme *sc, PikaDrawable **drawable_array; gint id; pointer error; + GType actual_type = PIKA_TYPE_DRAWABLE; guint num_elements = sc->vptr->vector_length (vector); g_debug ("vector has %d elements", num_elements); @@ -104,10 +105,15 @@ marshal_vector_to_drawable_array (scheme *sc, g_free (drawable_array); return error; } + + /* Parameters are validated based on the actual type inside the object + array. So we set that type here instead of a generic drawable. */ + if (j == 0) + actual_type = G_OBJECT_TYPE (drawable_array[j]); } /* Shallow copy. */ - pika_value_set_object_array (value, PIKA_TYPE_DRAWABLE, (GObject**)drawable_array, num_elements); + pika_value_set_object_array (value, actual_type, (GObject**)drawable_array, num_elements); g_free (drawable_array); diff --git a/plug-ins/script-fu/libscriptfu/script-fu-interface.c b/plug-ins/script-fu/libscriptfu/script-fu-interface.c index 91df43b..0476029 100644 --- a/plug-ins/script-fu/libscriptfu/script-fu-interface.c +++ b/plug-ins/script-fu/libscriptfu/script-fu-interface.c @@ -615,7 +615,7 @@ script_fu_resource_widget (const gchar *title, { GtkWidget *result_widget = NULL; - g_debug ("%s type: %ld", G_STRFUNC, resource_type); + g_debug ("%s type: %" G_GSIZE_FORMAT, G_STRFUNC, resource_type); /* Passing NULL resource sets initial choice to resource from context. * Passing empty string for outer widget label, since we provide our own. @@ -824,6 +824,10 @@ script_fu_update_models (SFScript *script) FALSE); } break; + + default: + /* Silence warnings about unhandled enumeration values */ + break; } } } diff --git a/po-libpika/ca.po b/po-libpika/ca.po index ed85753..baa8c36 100644 --- a/po-libpika/ca.po +++ b/po-libpika/ca.po @@ -587,7 +587,7 @@ msgstr "Desa el c_omentari" #: libpika/pikasaveprocedure.c:499 msgid "Save a comment as metadata" -msgstr "_Desa un comentari com a metadades" +msgstr "Desa un comentari com a metadades" #: libpika/pikasaveprocedure.c:503 msgid "Comment" diff --git a/po-libpika/da.po b/po-libpika/da.po index 808c90f..a743105 100644 --- a/po-libpika/da.po +++ b/po-libpika/da.po @@ -18,7 +18,7 @@ msgstr "" "Project-Id-Version: PIKA libpika\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" "POT-Creation-Date: 2023-10-19 10:04+0000\n" -"PO-Revision-Date: 2023-10-20 09:49+0200\n" +"PO-Revision-Date: 2023-10-31 14:13+0100\n" "Last-Translator: Alan Mortensen \n" "Language-Team: Danish \n" "Language: da\n" @@ -539,7 +539,7 @@ msgstr "Vælg kanal: %s" #: libpika/pikapropwidgets.c:195 #, c-format msgid "Choose drawable: %s" -msgstr "Vælg tegneobjekt: %s" +msgstr "Vælg tegneflade: %s" #: libpika/pikasaveprocedure.c:467 msgid "Save _Exif" diff --git a/po-libpika/es.po b/po-libpika/es.po index aba87fb..9666a82 100644 --- a/po-libpika/es.po +++ b/po-libpika/es.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: pika-libpika.master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-04-24 11:00+0000\n" -"PO-Revision-Date: 2023-04-24 16:26+0200\n" +"POT-Creation-Date: 2023-11-23 08:08+0000\n" +"PO-Revision-Date: 2023-11-24 11:24+0100\n" "Last-Translator: Rodrigo Lledó Milanca \n" "Language-Team: Spanish - Spain \n" "Language: es_ES\n" @@ -27,12 +27,16 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.2.2\n" +"X-Generator: Poedit 3.4.1\n" -#: libpika/pikabrushselectbutton.c:325 libpika/pikapatternselectbutton.c:335 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "E_xaminar…" +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Examinar…" + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -174,7 +178,7 @@ msgid "Confirm Save" msgstr "Confirmar guardar" #: libpika/pikaexport.c:546 libpika/pikaexport.c:628 libpika/pikaexport.c:1199 -#: libpika/pikaproceduredialog.c:305 libpikawidgets/pikacolorbutton.c:571 +#: libpika/pikaproceduredialog.c:324 libpikawidgets/pikacolorbutton.c:557 #: libpikawidgets/pikacolorprofilechooserdialog.c:173 #: libpikawidgets/pikacolorprofilechooserdialog.c:183 #: libpikawidgets/pikafileentry.c:466 libpikawidgets/pikaquerybox.c:274 @@ -196,7 +200,7 @@ msgid "_Ignore" msgstr "_Ignorar" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Exportar" @@ -235,133 +239,146 @@ msgstr "" #. TRANSLATORS: the %s parameter is an image format name (ex: PNG). #. TRANSLATORS: %s will be a format name, e.g. "PNG" or "JPEG". -#: libpika/pikaexport.c:1193 libpika/pikasaveproceduredialog.c:397 +#: libpika/pikaexport.c:1193 libpika/pikasaveproceduredialog.c:398 #, c-format msgid "Export Image as %s" msgstr "Exportar imagen como %s" -#: libpika/pikaimagemetadata.c:306 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Fondo" -#: libpika/pikaimagemetadata-save.c:654 modules/controller-midi.c:426 +#: libpika/pikaimagemetadata-save.c:760 modules/controller-midi.c:426 msgid "PIKA" msgstr "PIKA" +#: libpika/pikaloadprocedure.c:267 +msgid "" +"This file loading plug-in returned SUCCESS as a status without an image. " +"This is a bug in the plug-in code. Contact the plug-in developer." +msgstr "" +"Este complemento de carga de archivos devolvió ÉXITO como estado sin una " +"imagen. Esto es un error en el código del complemento. Póngase en contacto " +"con el desarrollador del complemento." + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Valores permitidos:" + #. procedure executed successfully -#: libpika/pikapdb.c:552 +#: libpika/pikapdb.c:336 msgid "success" msgstr "éxito" #. procedure execution failed -#: libpika/pikapdb.c:556 +#: libpika/pikapdb.c:340 msgid "execution error" msgstr "error de ejecución" #. procedure called incorrectly -#: libpika/pikapdb.c:560 +#: libpika/pikapdb.c:344 msgid "calling error" msgstr "error en la llamada" #. procedure execution cancelled -#: libpika/pikapdb.c:564 +#: libpika/pikapdb.c:348 msgid "cancelled" msgstr "cancelado" -#: libpika/pikaprocbrowserdialog.c:162 +#: libpika/pikaprocbrowserdialog.c:164 msgid "by name" msgstr "por nombre" -#: libpika/pikaprocbrowserdialog.c:163 +#: libpika/pikaprocbrowserdialog.c:165 msgid "by description" msgstr "por descripción" -#: libpika/pikaprocbrowserdialog.c:164 +#: libpika/pikaprocbrowserdialog.c:166 msgid "by help" msgstr "por ayuda" -#: libpika/pikaprocbrowserdialog.c:165 +#: libpika/pikaprocbrowserdialog.c:167 msgid "by authors" msgstr "por autores" -#: libpika/pikaprocbrowserdialog.c:166 +#: libpika/pikaprocbrowserdialog.c:168 msgid "by copyright" msgstr "por copyright" -#: libpika/pikaprocbrowserdialog.c:167 +#: libpika/pikaprocbrowserdialog.c:169 msgid "by date" msgstr "por fecha" -#: libpika/pikaprocbrowserdialog.c:168 +#: libpika/pikaprocbrowserdialog.c:170 msgid "by type" msgstr "por tipo" #. count label -#: libpika/pikaprocbrowserdialog.c:369 libpika/pikaprocbrowserdialog.c:527 +#: libpika/pikaprocbrowserdialog.c:371 libpika/pikaprocbrowserdialog.c:529 #: libpikawidgets/pikabrowser.c:168 msgid "No matches" msgstr "Sin coincidencias" -#: libpika/pikaprocbrowserdialog.c:372 +#: libpika/pikaprocbrowserdialog.c:374 msgid "Search term invalid or incomplete" msgstr "Término de búsqueda incompleto o no válido" -#: libpika/pikaprocbrowserdialog.c:381 +#: libpika/pikaprocbrowserdialog.c:383 msgid "Searching" msgstr "Buscando" -#: libpika/pikaprocbrowserdialog.c:393 +#: libpika/pikaprocbrowserdialog.c:395 msgid "Searching by name" msgstr "Buscando por nombre" -#: libpika/pikaprocbrowserdialog.c:414 +#: libpika/pikaprocbrowserdialog.c:416 msgid "Searching by description" msgstr "Buscando por descripción" -#: libpika/pikaprocbrowserdialog.c:422 +#: libpika/pikaprocbrowserdialog.c:424 msgid "Searching by help" msgstr "Buscando por ayuda" -#: libpika/pikaprocbrowserdialog.c:430 +#: libpika/pikaprocbrowserdialog.c:432 msgid "Searching by authors" msgstr "Buscando por autores" -#: libpika/pikaprocbrowserdialog.c:438 +#: libpika/pikaprocbrowserdialog.c:440 msgid "Searching by copyright" msgstr "Buscando por copyright" -#: libpika/pikaprocbrowserdialog.c:446 +#: libpika/pikaprocbrowserdialog.c:448 msgid "Searching by date" msgstr "Buscando por fecha" -#: libpika/pikaprocbrowserdialog.c:454 +#: libpika/pikaprocbrowserdialog.c:456 msgid "Searching by type" msgstr "Buscando por tipo" -#: libpika/pikaprocbrowserdialog.c:467 +#: libpika/pikaprocbrowserdialog.c:469 #, c-format msgid "%d procedure" msgid_plural "%d procedures" msgstr[0] "%d procedimiento" msgstr[1] "%d procedimientos" -#: libpika/pikaprocbrowserdialog.c:476 +#: libpika/pikaprocbrowserdialog.c:478 msgid "No matches for your query" msgstr "No hay coincidencias para su consulta" -#: libpika/pikaprocbrowserdialog.c:480 +#: libpika/pikaprocbrowserdialog.c:482 #, c-format msgid "%d procedure matches your query" msgid_plural "%d procedures match your query" msgstr[0] "%d procedimiento coincide con su consulta" msgstr[1] "%d procedimientos coinciden con su consulta" -#: libpika/pikaprocedure.c:1917 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "Procedure '%s' returned no return values" msgstr "El procedimiento «%s» no ha devuelto ningún valor de retorno" -#: libpika/pikaprocedure.c:2008 +#: libpika/pikaprocedure.c:2177 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -370,7 +387,7 @@ msgstr "" "El procedimiento «%s» ha devuelto un valor con tipo erróneo para el valor " "devuelto «%s» (#%d). Se esperaba %s pero se obtuvo %s." -#: libpika/pikaprocedure.c:2020 +#: libpika/pikaprocedure.c:2189 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument '%s' (#" @@ -379,7 +396,7 @@ msgstr "" "Se ha llamado al procedimiento «%s» con un valor con un tipo erróneo para el " "argumento «%s» (#%d). Se esperaba %s pero se obtuvo %s." -#: libpika/pikaprocedure.c:2055 +#: libpika/pikaprocedure.c:2224 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " @@ -388,7 +405,7 @@ msgstr "" "El procedimiento «%s» ha devuelto «%s» como valor de retorno «%s» (#%d, tipo " "%s). Este valor está fuera de los límites." -#: libpika/pikaprocedure.c:2069 +#: libpika/pikaprocedure.c:2238 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " @@ -397,14 +414,14 @@ msgstr "" "El procedimiento «%s» se ha llamado con un valor «%s» para el argumento " "«%s» (#%d, tipo %s). Este valor está fuera de los límites." -#: libpika/pikaprocedure.c:2113 +#: libpika/pikaprocedure.c:2282 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "" "El procedimiento «%s» devolvió una cadena UTF-8 no válida para el argumento " "«%s»." -#: libpika/pikaprocedure.c:2123 +#: libpika/pikaprocedure.c:2292 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " @@ -413,63 +430,63 @@ msgstr "" "Se ha llamado al procedimiento «%s» con una cadena UTF-8 no válida para el " "argumento «%s»." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Abrir" -#: libpika/pikaproceduredialog.c:279 libpikawidgets/pikacolorbutton.c:572 -#: libpikawidgets/pikafileentry.c:467 libpikawidgets/pikaquerybox.c:274 -#: libpikawidgets/pikaquerybox.c:337 libpikawidgets/pikaquerybox.c:403 -#: libpikawidgets/pikaquerybox.c:479 +#: libpika/pikaproceduredialog.c:298 libpika/pikaproceduredialog.c:571 +#: libpikawidgets/pikacolorbutton.c:558 libpikawidgets/pikafileentry.c:467 +#: libpikawidgets/pikaquerybox.c:274 libpikawidgets/pikaquerybox.c:337 +#: libpikawidgets/pikaquerybox.c:403 libpikawidgets/pikaquerybox.c:479 msgid "_OK" msgstr "_Aceptar" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:570 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Reiniciar" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "_Cargar preferencias guardadas" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "Carga las preferencias guardadas con el botón «Guardar preferencias»" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "_Guardar preferencias" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Almacenar las preferencias actuales para uso posterior" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Selector de pincel" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Selector de tipografía" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Selector de degradado" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "Selector de paleta" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "Selector de patrón" -#: libpika/pikaproceduredialog.c:2036 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Restablecer a valores _iniciales" -#: libpika/pikaproceduredialog.c:2045 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "Restablecer a predeterminados de _fábrica" @@ -509,6 +526,79 @@ msgstr "Fecha:" msgid "Copyright:" msgstr "Copyright:" +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Elija capa: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "Elija canal: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Elija dibujable: %s" + +#: libpika/pikasaveprocedure.c:467 +msgid "Save _Exif" +msgstr "Guardar _Exif" + +#: libpika/pikasaveprocedure.c:468 +msgid "Save Exif (Exchangeable image file format) metadata" +msgstr "Guardar metadatos Exif (formato de archivo de imagen intercambiable)" + +#: libpika/pikasaveprocedure.c:473 +msgid "Save _IPTC" +msgstr "Guardar _IPTC" + +#: libpika/pikasaveprocedure.c:474 +msgid "Save IPTC (International Press Telecommunications Council) metadata" +msgstr "" +"Guardar metadatos IPTC (Consejo Internacional de Telecomunicaciones de " +"Prensa)" + +#: libpika/pikasaveprocedure.c:479 +msgid "Save _XMP" +msgstr "Guardar _XMP" + +#: libpika/pikasaveprocedure.c:480 +msgid "Save XMP (Extensible Metadata Platform) metadata" +msgstr "Guardar metadatos XMP (Plataforma de Metadatos Extensible)" + +#: libpika/pikasaveprocedure.c:485 +msgid "Save color _profile" +msgstr "Guardar _perfil de color" + +#: libpika/pikasaveprocedure.c:486 +msgid "Save the ICC color profile as metadata" +msgstr "Guardar el perfil de color ICC como metadatos" + +#: libpika/pikasaveprocedure.c:491 +msgid "Save _thumbnail" +msgstr "Guardar minia_tura" + +#: libpika/pikasaveprocedure.c:492 +msgid "Save a smaller representation of the image as metadata" +msgstr "Guardar una representación más pequeña de la imagen como metadatos" + +#: libpika/pikasaveprocedure.c:498 +msgid "Save c_omment" +msgstr "Guardar c_omentario" + +#: libpika/pikasaveprocedure.c:499 +msgid "Save a comment as metadata" +msgstr "Guardar un comentario como metadatos" + +#: libpika/pikasaveprocedure.c:503 +msgid "Comment" +msgstr "Comentario" + +#: libpika/pikasaveprocedure.c:504 +msgid "Image comment" +msgstr "Comentario de la imagen" + #: libpika/pikasaveproceduredialog.c:166 msgid "Metadata" msgstr "Metadatos" @@ -1563,63 +1653,63 @@ msgctxt "transform-resize" msgid "Crop with aspect" msgstr "Recortar con aspecto" -#: libpikabase/pikametadata.c:1072 +#: libpikabase/pikametadata.c:1215 msgid "Can load metadata only from local files" msgstr "Sólo se pueden cargar metadatos de archivos locales" -#: libpikabase/pikametadata.c:1128 +#: libpikabase/pikametadata.c:1271 msgid "Can save metadata only to local files" msgstr "Sólo se pueden guardar metadatos de archivos locales" -#: libpikabase/pikametadata.c:1176 +#: libpikabase/pikametadata.c:1319 msgid "Invalid Exif data size." msgstr "Tamaño de los datos Exif no válido." -#: libpikabase/pikametadata.c:1205 +#: libpikabase/pikametadata.c:1348 msgid "Parsing Exif data failed." msgstr "Falló al analizar los datos Exif." -#: libpikabase/pikametadata.c:1255 +#: libpikabase/pikametadata.c:1398 msgid "Parsing IPTC data failed." msgstr "Falló al analizar los datos IPTC." -#: libpikabase/pikametadata.c:1303 +#: libpikabase/pikametadata.c:1446 msgid "Parsing XMP data failed." msgstr "Falló al analizar los datos XMP." -#: libpikabase/pikautils.c:219 libpikabase/pikautils.c:224 +#: libpikabase/pikautils.c:220 libpikabase/pikautils.c:225 msgid "(invalid UTF-8 string)" msgstr "(cadena UTF-8 no válida)" -#: libpikabase/pikautils.c:394 +#: libpikabase/pikautils.c:395 msgid "File path is NULL" msgstr "La ruta del archivo es NULL" -#: libpikabase/pikautils.c:402 +#: libpikabase/pikautils.c:403 msgid "Error converting UTF-8 filename to wide char" msgstr "Error al convertir el nombre de archivo UTF-8 a caracteres anchos" -#: libpikabase/pikautils.c:410 +#: libpikabase/pikautils.c:411 msgid "ILCreateFromPath() failed" msgstr "ILCreateFromPath() falló" -#: libpikabase/pikautils.c:449 +#: libpikabase/pikautils.c:450 #, c-format msgid "Cannot convert '%s' into a valid NSURL." msgstr "No se puede convertir «%s» en un NSURL válido." -#: libpikabase/pikautils.c:477 +#: libpikabase/pikautils.c:478 msgid "Connecting to org.freedesktop.FileManager1 failed: " msgstr "Falló al conectar a org.freedesktop.FileManager1: " -#: libpikabase/pikautils.c:501 +#: libpikabase/pikautils.c:502 msgid "Calling ShowItems failed: " msgstr "Falló al llamar a ShowItems: " #: libpikacolor/pikacolorprofile.c:258 #, c-format msgid "'%s' does not appear to be an ICC color profile" -msgstr "«%s» no es un perfil de color ICC" +msgstr "Parece que «%s» no es un perfil de color ICC" #: libpikacolor/pikacolorprofile.c:304 msgid "Data does not appear to be an ICC color profile" @@ -1898,28 +1988,28 @@ msgstr "El perfil de color «%s» no es para el espacio de color gris." msgid "Color profile '%s' is not for CMYK color space." msgstr "El perfil de color «%s» no es para el espacio de color CMYK." -#: libpikaconfig/pikaconfig-deserialize.c:116 +#: libpikaconfig/pikaconfig-deserialize.c:120 #, c-format msgid "value for token %s is not a valid UTF-8 string" msgstr "el valor del elemento %s no es una cadena UTF-8 válida" #. please don't translate 'yes' and 'no' -#: libpikaconfig/pikaconfig-deserialize.c:480 +#: libpikaconfig/pikaconfig-deserialize.c:492 #, c-format msgid "expected 'yes' or 'no' for boolean token %s, got '%s'" msgstr "se esperaba «yes» o «no» para la señal booleana %s, se obtuvo «%s»" -#: libpikaconfig/pikaconfig-deserialize.c:595 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "valor no válido «%s» para la señal %s" -#: libpikaconfig/pikaconfig-deserialize.c:610 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "valor no válido «%ld» para la señal %s" -#: libpikaconfig/pikaconfig-deserialize.c:679 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "mientras se analizaba la señal «%s»: %s" @@ -1974,26 +2064,26 @@ msgstr "se esperaba «yes» o «no» para la señal booleana, se obtuvo «%s»" msgid "Error while parsing '%s' in line %d: %s" msgstr "Ha ocurrido un error al analizar «%s» en la línea %d: %s" -#: libpikamodule/pikamodule.c:172 libpikamodule/pikamodule.c:190 -#: libpikamodule/pikamodule.c:451 libpikamodule/pikamodule.c:474 -#: libpikamodule/pikamodule.c:524 +#: libpikamodule/pikamodule.c:221 libpikamodule/pikamodule.c:239 +#: libpikamodule/pikamodule.c:500 libpikamodule/pikamodule.c:523 +#: libpikamodule/pikamodule.c:573 #, c-format msgid "Module '%s' load error: %s" msgstr "Error en la carga del módulo «%s»: %s" -#: libpikamodule/pikamoduledb.c:500 +#: libpikamodule/pikamoduledb.c:450 msgid "Module error" msgstr "Error del módulo" -#: libpikamodule/pikamoduledb.c:501 +#: libpikamodule/pikamoduledb.c:451 msgid "Loaded" msgstr "Cargado" -#: libpikamodule/pikamoduledb.c:502 +#: libpikamodule/pikamoduledb.c:452 msgid "Load failed" msgstr "La carga falló" -#: libpikamodule/pikamoduledb.c:503 +#: libpikamodule/pikamoduledb.c:453 msgid "Not loaded" msgstr "No cargado" @@ -2025,6 +2115,22 @@ msgstr "No se ha podido crear la miniatura para %s: %s" msgid "_Search:" msgstr "Bu_scar:" +#: libpikawidgets/pikacolorbutton.c:380 +msgid "_Foreground Color" +msgstr "Color de _frente" + +#: libpikawidgets/pikacolorbutton.c:381 +msgid "_Background Color" +msgstr "Color de f_ondo" + +#: libpikawidgets/pikacolorbutton.c:386 +msgid "Blac_k" +msgstr "Ne_gro" + +#: libpikawidgets/pikacolorbutton.c:387 +msgid "_White" +msgstr "_Blanco" + #: libpikawidgets/pikacolorhexentry.c:134 msgid "" "Hexadecimal color notation as used in HTML and CSS. This entry also accepts " @@ -2103,6 +2209,10 @@ msgstr "Anterior:" msgid "HTML _notation:" msgstr "_Notación HTML:" +#: libpikawidgets/pikadialog.c:198 +msgid "_Help" +msgstr "A_yuda" + #: libpikawidgets/pikafileentry.c:167 msgid "Show file location in the file manager" msgstr "Mostrar la ubicación del archivo en el gestor de archivos: %s" @@ -2159,6 +2269,22 @@ msgstr "Mebibyte" msgid "Gibibyte" msgstr "Gibibyte" +#: libpikawidgets/pikapageselector.c:185 +msgid "N Pages" +msgstr "N páginas" + +#: libpikawidgets/pikapageselector.c:186 +msgid "The number of pages to open" +msgstr "El número de páginas que abrir" + +#: libpikawidgets/pikapageselector.c:199 +msgid "Target" +msgstr "Destino" + +#: libpikawidgets/pikapageselector.c:200 +msgid "the target to open to" +msgstr "el destino al que abrir" + #. Count label #: libpikawidgets/pikapageselector.c:283 libpikawidgets/pikapageselector.c:1079 msgid "Nothing selected" @@ -2243,7 +2369,7 @@ msgstr "Color de damero personalizado 1" msgid "Custom Checks Color 2" msgstr "Color de damero personalizado 2" -#: libpikawidgets/pikapropwidgets.c:2475 +#: libpikawidgets/pikapropwidgets.c:2474 #, c-format msgid "This text input field is limited to %d character." msgid_plural "This text input field is limited to %d characters." @@ -2500,7 +2626,7 @@ msgstr "Selector de color tipo acuarela" msgid "Watercolor" msgstr "Acuarela" -#: modules/color-selector-water.c:198 +#: modules/color-selector-water.c:196 msgid "Pressure" msgstr "Presión" @@ -2866,75 +2992,78 @@ msgstr "Cambio de pretransformación en paradas" msgid "Aces RRT" msgstr "Aces RRT" -#: modules/display-filter-clip-warning.c:121 +#. Translators: "Clip Warning" is the name of a (color) display filter +#. * that highlights pixels outside of the color space range. +#. * Shown as a label description. +#: modules/display-filter-clip-warning.c:124 msgid "Clip warning color display filter" msgstr "Filtro de visualización de color de advertencia de recorte" -#: modules/display-filter-clip-warning.c:158 +#: modules/display-filter-clip-warning.c:161 msgid "Show shadows" msgstr "Mostrar sombras" -#: modules/display-filter-clip-warning.c:159 +#: modules/display-filter-clip-warning.c:162 msgid "Show warning for pixels with a negative component" msgstr "Mostrar advertencia para píxeles con un componente negativo" -#: modules/display-filter-clip-warning.c:165 +#: modules/display-filter-clip-warning.c:168 msgid "Shadows color" msgstr "Color de las sombras" -#: modules/display-filter-clip-warning.c:166 +#: modules/display-filter-clip-warning.c:169 msgid "Shadows warning color" msgstr "Color de advertencia de sombras" -#: modules/display-filter-clip-warning.c:178 +#: modules/display-filter-clip-warning.c:181 msgid "Show highlights" msgstr "Mostrar puntos de luz" -#: modules/display-filter-clip-warning.c:179 +#: modules/display-filter-clip-warning.c:182 msgid "Show warning for pixels with a component greater than one" msgstr "Mostrar advertencia para píxeles con un componente superior a 1" -#: modules/display-filter-clip-warning.c:185 +#: modules/display-filter-clip-warning.c:188 msgid "Highlights color" msgstr "Color de los puntos de luz" -#: modules/display-filter-clip-warning.c:186 +#: modules/display-filter-clip-warning.c:189 msgid "Highlights warning color" msgstr "Color de advertencia de puntos de luz" -#: modules/display-filter-clip-warning.c:198 +#: modules/display-filter-clip-warning.c:201 msgid "Show bogus" msgstr "Mostrar falsos" -#: modules/display-filter-clip-warning.c:199 +#: modules/display-filter-clip-warning.c:202 msgid "Show warning for pixels with an infinite or NaN component" msgstr "Mostrar advertencia para píxeles con un componente infinito o NaN" -#: modules/display-filter-clip-warning.c:205 +#: modules/display-filter-clip-warning.c:208 msgid "Bogus color" msgstr "Color falso" -#: modules/display-filter-clip-warning.c:206 +#: modules/display-filter-clip-warning.c:209 msgid "Bogus warning color" msgstr "Color de falsa advertencia" -#: modules/display-filter-clip-warning.c:218 +#: modules/display-filter-clip-warning.c:221 msgid "Include alpha component" msgstr "Incluir componente alfa" -#: modules/display-filter-clip-warning.c:219 +#: modules/display-filter-clip-warning.c:222 msgid "Include alpha component in the warning" msgstr "Incluir componente alfa en la advertencia" -#: modules/display-filter-clip-warning.c:225 +#: modules/display-filter-clip-warning.c:228 msgid "Include transparent pixels" msgstr "Incluir píxeles transparentes" -#: modules/display-filter-clip-warning.c:226 +#: modules/display-filter-clip-warning.c:229 msgid "Include fully transparent pixels in the warning" msgstr "Incluir los píxeles totalmente transparentes en la advertencia" -#: modules/display-filter-clip-warning.c:230 +#: modules/display-filter-clip-warning.c:233 msgid "Clip Warning" msgstr "Advertencia al recortar" @@ -2988,18 +3117,6 @@ msgstr "Ciclos de contraste" msgid "Contrast" msgstr "Contraste" -#~ msgid "_Foreground Color" -#~ msgstr "Color de _frente" - -#~ msgid "_Background Color" -#~ msgstr "Color de f_ondo" - -#~ msgid "Blac_k" -#~ msgstr "Ne_gro" - -#~ msgid "_White" -#~ msgstr "_Blanco" - #~ msgid "Brush Selection" #~ msgstr "Selección de pincel" @@ -3141,9 +3258,6 @@ msgstr "Contraste" #~ msgid "Filmic" #~ msgstr "Filmic" -#~ msgid "_Help" -#~ msgstr "A_yuda" - # Esto NO es anchura (serrador) #~ msgid "Anchor" #~ msgstr "Ancla" diff --git a/po-libpika/sv.po b/po-libpika/sv.po index 4b99323..c94857a 100644 --- a/po-libpika/sv.po +++ b/po-libpika/sv.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: libpika\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-08-26 19:07+0000\n" -"PO-Revision-Date: 2023-09-27 21:27+0200\n" +"POT-Creation-Date: 2023-10-02 00:02+0000\n" +"PO-Revision-Date: 2023-10-02 02:16+0200\n" "Last-Translator: Anders Jonsson \n" "Language-Team: Swedish \n" "Language: sv\n" @@ -22,10 +22,14 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 3.3.2\n" -#: libpika/pikabrushselectbutton.c:130 libpika/pikapatternselectbutton.c:142 +#: libpika/pikabrushchooser.c:134 libpika/pikapatternchooser.c:129 msgid "_Browse..." msgstr "_Bläddra…" +#: libpika/pikadrawablechooser.c:238 +msgid "Browse..." +msgstr "Bläddra…" + #: libpika/pikaexport.c:332 libpika/pikaexport.c:368 #, c-format msgid "%s plug-in can't handle layers" @@ -167,7 +171,7 @@ msgid "Confirm Save" msgstr "Bekräfta sparande" #: libpika/pikaexport.c:546 libpika/pikaexport.c:628 libpika/pikaexport.c:1199 -#: libpika/pikaproceduredialog.c:305 libpikawidgets/pikacolorbutton.c:557 +#: libpika/pikaproceduredialog.c:324 libpikawidgets/pikacolorbutton.c:557 #: libpikawidgets/pikacolorprofilechooserdialog.c:173 #: libpikawidgets/pikacolorprofilechooserdialog.c:183 #: libpikawidgets/pikafileentry.c:466 libpikawidgets/pikaquerybox.c:274 @@ -189,7 +193,7 @@ msgid "_Ignore" msgstr "_Ignorera" #: libpika/pikaexport.c:629 libpika/pikaexport.c:1200 -#: libpika/pikaproceduredialog.c:277 +#: libpika/pikaproceduredialog.c:296 libpika/pikaproceduredialog.c:569 msgid "_Export" msgstr "_Exportera" @@ -227,12 +231,12 @@ msgstr "" #. TRANSLATORS: the %s parameter is an image format name (ex: PNG). #. TRANSLATORS: %s will be a format name, e.g. "PNG" or "JPEG". -#: libpika/pikaexport.c:1193 libpika/pikasaveproceduredialog.c:397 +#: libpika/pikaexport.c:1193 libpika/pikasaveproceduredialog.c:396 #, c-format msgid "Export Image as %s" msgstr "Exportera bild som %s" -#: libpika/pikaimagemetadata.c:284 +#: libpika/pikaimagemetadata.c:283 msgid "Background" msgstr "Bakgrund" @@ -240,6 +244,19 @@ msgstr "Bakgrund" msgid "PIKA" msgstr "PIKA" +#: libpika/pikaloadprocedure.c:260 +msgid "" +"This file loading plug-in returned SUCCESS as a status without an image. " +"This is a bug in the plug-in code. Contact the plug-in developer." +msgstr "" +"Denna insticksmodul för filinläsning returnerade SUCCESS som status utan en " +"bild. Detta är ett fel i insticksmodulens kod. Kontakta utvecklaren av " +"insticksmodulen." + +#: libpika/pikaparamspecs-desc.c:54 +msgid "Allowed values:" +msgstr "Tillåtna värden:" + #. procedure executed successfully #: libpika/pikapdb.c:552 msgid "success" @@ -348,12 +365,12 @@ msgid_plural "%d procedures match your query" msgstr[0] "%d procedur matchar din sökning" msgstr[1] "%d procedurer matchar din sökning" -#: libpika/pikaprocedure.c:1924 +#: libpika/pikaprocedure.c:1959 #, c-format msgid "Procedure '%s' returned no return values" msgstr "Proceduren ”%s” returnerade inga svarsvärden" -#: libpika/pikaprocedure.c:2015 +#: libpika/pikaprocedure.c:2050 #, c-format msgid "" "Procedure '%s' returned a wrong value type for return value '%s' (#%d). " @@ -362,7 +379,7 @@ msgstr "" "Proceduren ”%s” returnerade en felaktig värdetyp för svarsvärdet ”%s” (nr. " "%d). Förväntade %s, fick %s." -#: libpika/pikaprocedure.c:2027 +#: libpika/pikaprocedure.c:2062 #, c-format msgid "" "Procedure '%s' has been called with a wrong value type for argument " @@ -371,7 +388,7 @@ msgstr "" "Proceduren ”%s” har anropats med en felaktig värdetyp för argumentet " "”%s” (nr. %d). Förväntade %s, fick %s." -#: libpika/pikaprocedure.c:2062 +#: libpika/pikaprocedure.c:2097 #, c-format msgid "" "Procedure '%s' returned '%s' as return value '%s' (#%d, type %s). This value " @@ -380,7 +397,7 @@ msgstr "" "Proceduren ”%s” returnerade ”%s” som svarsvärde ”%s” (nr. %d, typ %s). Det " "här värdet är utanför intervallet." -#: libpika/pikaprocedure.c:2076 +#: libpika/pikaprocedure.c:2111 #, c-format msgid "" "Procedure '%s' has been called with value '%s' for argument '%s' (#%d, type " @@ -389,13 +406,13 @@ msgstr "" "Proceduren ”%s” har anropats med värdet ”%s” för argumentet ”%s” (nr. %d, " "typ %s). Det här värdet är utanför intervallet." -#: libpika/pikaprocedure.c:2120 +#: libpika/pikaprocedure.c:2155 #, c-format msgid "Procedure '%s' returned an invalid UTF-8 string for argument '%s'." msgstr "" "Proceduren ”%s” returnerade en ogiltig UTF-8-sträng för argumentet ”%s”." -#: libpika/pikaprocedure.c:2130 +#: libpika/pikaprocedure.c:2165 #, c-format msgid "" "Procedure '%s' has been called with an invalid UTF-8 string for argument " @@ -403,63 +420,63 @@ msgid "" msgstr "" "Proceduren ”%s” har anropats med en ogiltig UTF-8-sträng för argumentet ”%s”." -#: libpika/pikaproceduredialog.c:275 +#: libpika/pikaproceduredialog.c:294 libpika/pikaproceduredialog.c:567 #: libpikawidgets/pikacolorprofilechooserdialog.c:184 msgid "_Open" msgstr "_Öppna" -#: libpika/pikaproceduredialog.c:279 libpikawidgets/pikacolorbutton.c:558 -#: libpikawidgets/pikafileentry.c:467 libpikawidgets/pikaquerybox.c:274 -#: libpikawidgets/pikaquerybox.c:337 libpikawidgets/pikaquerybox.c:403 -#: libpikawidgets/pikaquerybox.c:479 +#: libpika/pikaproceduredialog.c:298 libpika/pikaproceduredialog.c:571 +#: libpikawidgets/pikacolorbutton.c:558 libpikawidgets/pikafileentry.c:467 +#: libpikawidgets/pikaquerybox.c:274 libpikawidgets/pikaquerybox.c:337 +#: libpikawidgets/pikaquerybox.c:403 libpikawidgets/pikaquerybox.c:479 msgid "_OK" msgstr "_OK" -#: libpika/pikaproceduredialog.c:287 libpikawidgets/pikacolorbutton.c:556 +#: libpika/pikaproceduredialog.c:306 libpikawidgets/pikacolorbutton.c:556 msgid "_Reset" msgstr "_Återställ" -#: libpika/pikaproceduredialog.c:339 +#: libpika/pikaproceduredialog.c:359 msgid "_Load Saved Settings" msgstr "_Läs in sparade inställningar" -#: libpika/pikaproceduredialog.c:340 +#: libpika/pikaproceduredialog.c:360 msgid "Load settings saved with \"Save Settings\" button" msgstr "Läs in inställningar som sparats med knappen ”Spara inställningar”" -#: libpika/pikaproceduredialog.c:352 +#: libpika/pikaproceduredialog.c:372 msgid "_Save Settings" msgstr "_Spara inställningar" -#: libpika/pikaproceduredialog.c:353 +#: libpika/pikaproceduredialog.c:373 msgid "Store current settings for later reuse" msgstr "Lagra aktuella inställningar för att använda dem igen senare" -#: libpika/pikaproceduredialog.c:734 +#: libpika/pikaproceduredialog.c:784 msgid "Brush Chooser" msgstr "Penselväljare" -#: libpika/pikaproceduredialog.c:738 +#: libpika/pikaproceduredialog.c:788 msgid "Font Chooser" msgstr "Typsnittsväljare" -#: libpika/pikaproceduredialog.c:742 +#: libpika/pikaproceduredialog.c:792 msgid "Gradient Chooser" msgstr "Gradientväljare" -#: libpika/pikaproceduredialog.c:746 +#: libpika/pikaproceduredialog.c:796 msgid "Palette Chooser" msgstr "Palettväljare" -#: libpika/pikaproceduredialog.c:750 +#: libpika/pikaproceduredialog.c:800 msgid "Pattern Chooser" msgstr "Mönsterväljare" -#: libpika/pikaproceduredialog.c:2128 +#: libpika/pikaproceduredialog.c:2492 msgid "Reset to _Initial Values" msgstr "Återställ till _ursprungsvärden" -#: libpika/pikaproceduredialog.c:2137 +#: libpika/pikaproceduredialog.c:2501 msgid "Reset to _Factory Defaults" msgstr "Återställ till _fabriksinställningar" @@ -499,59 +516,74 @@ msgstr "Datum:" msgid "Copyright:" msgstr "Copyright:" -#: libpika/pikasaveprocedure.c:408 +#: libpika/pikapropwidgets.c:191 +#, c-format +msgid "Choose layer: %s" +msgstr "Välj lager: %s" + +#: libpika/pikapropwidgets.c:193 +#, c-format +msgid "Choose channel: %s" +msgstr "Välj kanal: %s" + +#: libpika/pikapropwidgets.c:195 +#, c-format +msgid "Choose drawable: %s" +msgstr "Välj rityta: %s" + +#: libpika/pikasaveprocedure.c:460 msgid "Save _Exif" msgstr "Spara _Exif" -#: libpika/pikasaveprocedure.c:409 +#: libpika/pikasaveprocedure.c:461 msgid "Save Exif (Exchangeable image file format) metadata" msgstr "Spara Exif-metadata (Exchangeable image file format)" -#: libpika/pikasaveprocedure.c:414 +#: libpika/pikasaveprocedure.c:466 msgid "Save _IPTC" msgstr "Spara _IPTC" -#: libpika/pikasaveprocedure.c:415 +#: libpika/pikasaveprocedure.c:467 msgid "Save IPTC (International Press Telecommunications Council) metadata" msgstr "Spara IPTC-metadata (International Press Telecommunications Council)" -#: libpika/pikasaveprocedure.c:420 +#: libpika/pikasaveprocedure.c:472 msgid "Save _XMP" msgstr "Spara _XMP" -#: libpika/pikasaveprocedure.c:421 +#: libpika/pikasaveprocedure.c:473 msgid "Save XMP (Extensible Metadata Platform) metadata" msgstr "Spara XMP-metadata (Extensible Metadata Platform)" -#: libpika/pikasaveprocedure.c:426 +#: libpika/pikasaveprocedure.c:478 msgid "Save color _profile" msgstr "Spara färg_profil" -#: libpika/pikasaveprocedure.c:427 +#: libpika/pikasaveprocedure.c:479 msgid "Save the ICC color profile as metadata" msgstr "Spara ICC-färgprofilen som metadata" -#: libpika/pikasaveprocedure.c:432 +#: libpika/pikasaveprocedure.c:484 msgid "Save _thumbnail" msgstr "Spara _miniatyrbild" -#: libpika/pikasaveprocedure.c:433 +#: libpika/pikasaveprocedure.c:485 msgid "Save a smaller representation of the image as metadata" msgstr "Spara en mindre representation av bilden som metadata" -#: libpika/pikasaveprocedure.c:439 +#: libpika/pikasaveprocedure.c:491 msgid "Save c_omment" msgstr "Spara k_ommentar" -#: libpika/pikasaveprocedure.c:440 +#: libpika/pikasaveprocedure.c:492 msgid "Save a comment as metadata" msgstr "Spara en kommentar som metadata" -#: libpika/pikasaveprocedure.c:444 +#: libpika/pikasaveprocedure.c:496 msgid "Comment" msgstr "Kommentar" -#: libpika/pikasaveprocedure.c:445 +#: libpika/pikasaveprocedure.c:497 msgid "Image comment" msgstr "Bildkommentar" @@ -1940,28 +1972,28 @@ msgstr "Färgprofil ”%s” passar inte med GRÅ-färgrymd." msgid "Color profile '%s' is not for CMYK color space." msgstr "Färgprofil ”%s” passar inte med CMYK-färgrymd." -#: libpikaconfig/pikaconfig-deserialize.c:117 +#: libpikaconfig/pikaconfig-deserialize.c:120 #, c-format msgid "value for token %s is not a valid UTF-8 string" msgstr "värde för elementet %s är inte en giltig UTF-8-sträng" #. please don't translate 'yes' and 'no' -#: libpikaconfig/pikaconfig-deserialize.c:485 +#: libpikaconfig/pikaconfig-deserialize.c:492 #, c-format msgid "expected 'yes' or 'no' for boolean token %s, got '%s'" msgstr "”yes” eller ”no” för booleskt element %s förväntades, fick ”%s”" -#: libpikaconfig/pikaconfig-deserialize.c:600 +#: libpikaconfig/pikaconfig-deserialize.c:607 #, c-format msgid "invalid value '%s' for token %s" msgstr "ogiltigt värde ”%s” för element %s" -#: libpikaconfig/pikaconfig-deserialize.c:615 +#: libpikaconfig/pikaconfig-deserialize.c:622 #, c-format msgid "invalid value '%ld' for token %s" msgstr "ogiltigt värde ”%ld” för element %s" -#: libpikaconfig/pikaconfig-deserialize.c:684 +#: libpikaconfig/pikaconfig-deserialize.c:691 #, c-format msgid "while parsing token '%s': %s" msgstr "vid tolkning av elementet ”%s”: %s" @@ -2160,7 +2192,7 @@ msgstr "Gammal:" msgid "HTML _notation:" msgstr "HTML-_notation:" -#: libpikawidgets/pikadialog.c:177 +#: libpikawidgets/pikadialog.c:181 msgid "_Help" msgstr "_Hjälp" @@ -2319,7 +2351,7 @@ msgstr "Anpassad schackrutefärg 1" msgid "Custom Checks Color 2" msgstr "Anpassad schackrutefärg 2" -#: libpikawidgets/pikapropwidgets.c:2475 +#: libpikawidgets/pikapropwidgets.c:2474 #, c-format msgid "This text input field is limited to %d character." msgid_plural "This text input field is limited to %d characters." diff --git a/po-plug-ins/es.po b/po-plug-ins/es.po index 298e014..2976227 100644 --- a/po-plug-ins/es.po +++ b/po-plug-ins/es.po @@ -18,8 +18,8 @@ msgid "" msgstr "" "Project-Id-Version: pika-plug-ins.master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-10-19 10:06+0000\n" -"PO-Revision-Date: 2023-10-19 19:50+0200\n" +"POT-Creation-Date: 2023-11-24 12:07+0000\n" +"PO-Revision-Date: 2023-11-27 00:09+0100\n" "Last-Translator: Rodrigo Lledó Milanca \n" "Language-Team: Español \n" "Language: es\n" @@ -27,7 +27,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4\n" +"X-Generator: Poedit 3.4.1\n" #: extensions/goat-exercises/goat-exercise-c.c:114 msgid "Exercise in _C minor" @@ -39,23 +39,23 @@ msgstr "Ejercitar una cabra en el lenguaje C" #: extensions/goat-exercises/goat-exercise-c.c:150 plug-ins/common/blinds.c:201 #: plug-ins/common/border-average.c:185 plug-ins/common/checkerboard.c:176 -#: plug-ins/common/cml-explorer.c:558 plug-ins/common/compose.c:584 +#: plug-ins/common/cml-explorer.c:565 plug-ins/common/compose.c:584 #: plug-ins/common/contrast-retinex.c:246 plug-ins/common/crop-zealous.c:151 -#: plug-ins/common/curve-bend.c:653 plug-ins/common/decompose.c:375 +#: plug-ins/common/curve-bend.c:642 plug-ins/common/decompose.c:375 #: plug-ins/common/depth-merge.c:293 plug-ins/common/despeckle.c:231 #: plug-ins/common/destripe.c:175 plug-ins/common/gradient-map.c:216 #: plug-ins/common/grid.c:272 plug-ins/common/hot.c:310 #: plug-ins/common/jigsaw.c:466 plug-ins/common/nl-filter.c:217 #: plug-ins/common/qbist.c:252 plug-ins/common/sample-colorize.c:427 #: plug-ins/common/smooth-palette.c:195 plug-ins/common/sparkle.c:300 -#: plug-ins/common/sphere-designer.c:3179 plug-ins/common/tile.c:218 -#: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:913 +#: plug-ins/common/sphere-designer.c:3185 plug-ins/common/tile.c:218 +#: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:243 #: plug-ins/common/warp.c:344 plug-ins/common/wavelet-decompose.c:181 -#: plug-ins/file-dds/dds.c:511 plug-ins/flame/flame.c:241 +#: plug-ins/file-dds/dds.c:556 plug-ins/flame/flame.c:299 #: plug-ins/fractal-explorer/fractal-explorer.c:427 plug-ins/gfig/gfig.c:215 -#: plug-ins/pikaressionist/pika.c:178 +#: plug-ins/pikaressionist/pika.c:184 #: plug-ins/gradient-flare/gradient-flare.c:925 -#: plug-ins/ifs-compose/ifs-compose.c:487 plug-ins/imagemap/imap_main.c:264 +#: plug-ins/ifs-compose/ifs-compose.c:492 plug-ins/imagemap/imap_main.c:264 #: plug-ins/lighting/lighting-main.c:756 #: plug-ins/map-object/map-object-main.c:532 plug-ins/pagecurl/pagecurl.c:299 #, c-format @@ -71,18 +71,17 @@ msgstr "Ejercitar una cabra (C)" #: extensions/goat-exercises/goat-exercise-lua.lua:71 #: extensions/goat-exercises/goat-exercise-py3.py:77 #: extensions/goat-exercises/goat-exercise-vala.vala:73 -#: plug-ins/common/busy-dialog.c:279 plug-ins/common/cml-explorer.c:1355 -#: plug-ins/common/cml-explorer.c:2121 plug-ins/common/cml-explorer.c:2254 -#: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1855 -#: plug-ins/common/curve-bend.c:1890 plug-ins/common/file-gif-save.c:1159 -#: plug-ins/common/file-heif.c:2345 plug-ins/common/file-pdf-load.c:686 -#: plug-ins/common/file-pdf-save.c:1101 plug-ins/common/grid.c:786 +#: plug-ins/common/busy-dialog.c:279 plug-ins/common/cml-explorer.c:1379 +#: plug-ins/common/cml-explorer.c:2146 plug-ins/common/cml-explorer.c:2356 +#: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1809 +#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1188 +#: plug-ins/common/file-heif.c:2378 plug-ins/common/file-pdf-load.c:686 +#: plug-ins/common/file-pdf-save.c:1053 plug-ins/common/grid.c:786 #: plug-ins/common/qbist.c:836 plug-ins/common/qbist.c:878 -#: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2287 -#: plug-ins/common/sphere-designer.c:2632 plug-ins/common/unit-editor.c:435 -#: plug-ins/common/van-gogh-lic.c:709 plug-ins/common/warp.c:472 -#: plug-ins/file-tiff/file-tiff-load.c:2555 plug-ins/flame/flame.c:540 -#: plug-ins/flame/flame.c:716 plug-ins/flame/flame.c:1033 +#: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2292 +#: plug-ins/common/sphere-designer.c:2637 plug-ins/common/unit-editor.c:435 +#: plug-ins/common/warp.c:472 plug-ins/file-tiff/file-tiff-load.c:2549 +#: plug-ins/flame/flame.c:622 plug-ins/flame/flame.c:827 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1540 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1578 #: plug-ins/fractal-explorer/fractal-explorer.c:887 @@ -93,9 +92,9 @@ msgstr "Ejercitar una cabra (C)" #: plug-ins/pikaressionist/presets.c:642 plug-ins/pikaressionist/sizemap.c:401 #: plug-ins/gradient-flare/gradient-flare.c:3331 #: plug-ins/gradient-flare/gradient-flare.c:3445 -#: plug-ins/ifs-compose/ifs-compose.c:908 -#: plug-ins/ifs-compose/ifs-compose.c:2554 -#: plug-ins/ifs-compose/ifs-compose.c:2591 plug-ins/imagemap/imap_browse.c:80 +#: plug-ins/ifs-compose/ifs-compose.c:914 +#: plug-ins/ifs-compose/ifs-compose.c:2560 +#: plug-ins/ifs-compose/ifs-compose.c:2597 plug-ins/imagemap/imap_browse.c:80 #: plug-ins/imagemap/imap_default_dialog.c:106 plug-ins/imagemap/imap_file.c:73 #: plug-ins/imagemap/imap_file.c:128 plug-ins/lighting/lighting-ui.c:738 #: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1185 @@ -155,18 +154,17 @@ msgstr "Ejercitar una cabra (JavaScript)" #: extensions/goat-exercises/goat-exercise-gjs.js:96 #: extensions/goat-exercises/goat-exercise-lua.lua:73 #: extensions/goat-exercises/goat-exercise-py3.py:79 -#: plug-ins/common/cml-explorer.c:1356 plug-ins/common/colormap-remap.c:695 -#: plug-ins/common/file-heif.c:2346 plug-ins/common/file-pdf-load.c:687 +#: plug-ins/common/cml-explorer.c:1380 plug-ins/common/colormap-remap.c:695 +#: plug-ins/common/file-heif.c:2379 plug-ins/common/file-pdf-load.c:687 #: plug-ins/common/grid.c:787 plug-ins/common/qbist.c:933 -#: plug-ins/common/sphere-designer.c:2633 plug-ins/common/unit-editor.c:266 -#: plug-ins/common/van-gogh-lic.c:710 plug-ins/common/warp.c:473 -#: plug-ins/file-exr/file-exr.c:422 plug-ins/file-psd/psd-load.c:3533 -#: plug-ins/flame/flame.c:717 plug-ins/flame/flame.c:1034 +#: plug-ins/common/sphere-designer.c:2638 plug-ins/common/unit-editor.c:266 +#: plug-ins/common/warp.c:473 plug-ins/file-exr/file-exr.c:422 +#: plug-ins/file-psd/psd-load.c:3549 plug-ins/flame/flame.c:828 #: plug-ins/fractal-explorer/fractal-explorer.c:1391 #: plug-ins/pikaressionist/orientmap.c:529 #: plug-ins/pikaressionist/presets.c:643 plug-ins/pikaressionist/sizemap.c:402 #: plug-ins/gradient-flare/gradient-flare.c:3446 -#: plug-ins/ifs-compose/ifs-compose.c:909 +#: plug-ins/ifs-compose/ifs-compose.c:915 #: plug-ins/imagemap/imap_default_dialog.c:109 msgid "_OK" msgstr "_Aceptar" @@ -341,7 +339,8 @@ msgstr "Alinear capas visibles" #. file save type #: plug-ins/common/align-layers.c:740 plug-ins/common/align-layers.c:758 #: plug-ins/common/file-ps.c:3729 plug-ins/common/file-ps.c:3737 -#: plug-ins/common/file-psp.c:839 plug-ins/file-tiff/file-tiff.c:223 +#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:223 +#: plug-ins/file-tiff/file-tiff.c:240 #: plug-ins/fractal-explorer/fractal-explorer.c:344 #: plug-ins/fractal-explorer/fractal-explorer.c:354 #: plug-ins/fractal-explorer/fractal-explorer.c:364 @@ -455,119 +454,125 @@ msgstr "_Reproducción…" msgid "Preview a PIKA layer-based animation" msgstr "Vista previa de una animación PIKA basada en capas" -#: plug-ins/common/animation-play.c:370 plug-ins/common/animation-play.c:736 -#: plug-ins/common/animation-play.c:1352 +#: plug-ins/common/animation-play.c:371 +#, fuzzy, c-format +#| msgid "Procedure '%s' only works with one drawable." +msgid "Procedure '%s' only works in interactive mode." +msgstr "El procedimiento «%s» sólo funciona con un dibujable." + +#: plug-ins/common/animation-play.c:389 plug-ins/common/animation-play.c:765 +#: plug-ins/common/animation-play.c:1381 msgid "Start playback" msgstr "Iniciar reproducción" # //R :-? -#: plug-ins/common/animation-play.c:371 plug-ins/common/animation-play.c:738 +#: plug-ins/common/animation-play.c:390 plug-ins/common/animation-play.c:767 msgid "Step back to previous frame" msgstr "Volver al fotograma anterior" # //R :-? -#: plug-ins/common/animation-play.c:372 plug-ins/common/animation-play.c:740 +#: plug-ins/common/animation-play.c:391 plug-ins/common/animation-play.c:769 msgid "Step to next frame" msgstr "Paso al siguiente fotograma" -#: plug-ins/common/animation-play.c:373 plug-ins/common/animation-play.c:742 +#: plug-ins/common/animation-play.c:392 plug-ins/common/animation-play.c:771 msgid "Rewind the animation" msgstr "Rebobinar animación" -#: plug-ins/common/animation-play.c:378 +#: plug-ins/common/animation-play.c:397 msgid "Increase the speed of the animation" msgstr "Aumentar la velocidad de la animación" -#: plug-ins/common/animation-play.c:379 +#: plug-ins/common/animation-play.c:398 msgid "Decrease the speed of the animation" msgstr "Reducir la velocidad de la animación" -#: plug-ins/common/animation-play.c:380 +#: plug-ins/common/animation-play.c:399 msgid "Reset the speed of the animation" msgstr "Reiniciar la velocidad de la animación" -#: plug-ins/common/animation-play.c:385 plug-ins/common/animation-play.c:745 +#: plug-ins/common/animation-play.c:404 plug-ins/common/animation-play.c:774 msgid "Detach the animation from the dialog window" msgstr "Desprender la animación de la ventana de diálogo" -#: plug-ins/common/animation-play.c:386 plug-ins/common/animation-play.c:747 +#: plug-ins/common/animation-play.c:405 plug-ins/common/animation-play.c:776 msgid "Reload the image" msgstr "Recargar la imagen" -#: plug-ins/common/animation-play.c:387 plug-ins/imagemap/imap-menu.ui:26 +#: plug-ins/common/animation-play.c:406 plug-ins/imagemap/imap-menu.ui:26 msgid "Quit" msgstr "Salir" #. list is given in "fps" - frames per second -#: plug-ins/common/animation-play.c:467 plug-ins/common/animation-play.c:525 -#: plug-ins/common/animation-play.c:803 +#: plug-ins/common/animation-play.c:496 plug-ins/common/animation-play.c:554 +#: plug-ins/common/animation-play.c:832 #, c-format msgid "%.1f %%" msgstr "%.1f %%" #. Image Name -#: plug-ins/common/animation-play.c:658 +#: plug-ins/common/animation-play.c:687 msgid "Animation Playback:" msgstr "Reproducir animación:" -#: plug-ins/common/animation-play.c:738 +#: plug-ins/common/animation-play.c:767 msgid "Step _back" msgstr "_Paso atrás" -#: plug-ins/common/animation-play.c:740 +#: plug-ins/common/animation-play.c:769 msgid "_Step" msgstr "_Paso" -#: plug-ins/common/animation-play.c:745 +#: plug-ins/common/animation-play.c:774 msgid "Detach" msgstr "Desprender" #. Zoom Options -#: plug-ins/common/animation-play.c:818 +#: plug-ins/common/animation-play.c:847 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:702 #: plug-ins/imagemap/imap-menu.ui:276 msgid "Zoom" msgstr "Ampliación" #. list is given in "fps" - frames per second -#: plug-ins/common/animation-play.c:828 +#: plug-ins/common/animation-play.c:857 #, c-format msgid "%d fps" msgstr "%d fps" -#: plug-ins/common/animation-play.c:839 +#: plug-ins/common/animation-play.c:868 msgid "Default framerate" msgstr "Frecuencia de cuadros predeterminada" -#: plug-ins/common/animation-play.c:859 +#: plug-ins/common/animation-play.c:888 msgid "Playback speed" msgstr "Velocidad de la reproducción" #. 2 styles of default frame disposals: cumulative layers and one #. * frame per layer. #. -#: plug-ins/common/animation-play.c:870 plug-ins/common/file-gif-save.c:1269 +#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1298 msgid "Cumulative layers (combine)" msgstr "Capas acumulativas (combinar)" -#: plug-ins/common/animation-play.c:875 plug-ins/common/file-gif-save.c:1271 +#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1300 msgid "One frame per layer (replace)" msgstr "Un cuadro por capa (reemplazar)" -#: plug-ins/common/animation-play.c:971 +#: plug-ins/common/animation-play.c:1000 msgid "Memory could not be allocated to the frame container." msgstr "No se pudo asignar memorial al contenedor del marco." -#: plug-ins/common/animation-play.c:1038 +#: plug-ins/common/animation-play.c:1067 msgid "Invalid image. Did you close it?" msgstr "Imagen no válida. ¿La ha cerrado?" -#: plug-ins/common/animation-play.c:1150 +#: plug-ins/common/animation-play.c:1179 #, c-format msgid "Frame %d of %d" msgstr "Fotograma %d de %d" -#: plug-ins/common/animation-play.c:1352 +#: plug-ins/common/animation-play.c:1381 msgid "Stop playback" msgstr "Detener reproducción" @@ -634,25 +639,25 @@ msgstr "Vertical" #: plug-ins/common/decompose.c:645 plug-ins/common/file-cel.c:495 #: plug-ins/common/file-cel.c:500 plug-ins/common/file-dicom.c:751 #: plug-ins/common/file-farbfeld.c:321 plug-ins/common/file-gegl.c:471 -#: plug-ins/common/file-gif-load.c:1117 plug-ins/common/file-iff.c:335 +#: plug-ins/common/file-gif-load.c:1147 plug-ins/common/file-iff.c:345 #: plug-ins/common/file-jp2-load.c:1303 plug-ins/common/file-pcx.c:728 #: plug-ins/common/file-pcx.c:736 plug-ins/common/file-pcx.c:744 -#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:935 +#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:947 #: plug-ins/common/file-pnm.c:868 plug-ins/common/file-qoi.c:320 #: plug-ins/common/file-raw-data.c:1828 plug-ins/common/file-sunras.c:1082 #: plug-ins/common/file-tga.c:1116 plug-ins/common/file-wbmp.c:274 #: plug-ins/common/file-xbm.c:911 plug-ins/common/film.c:844 #: plug-ins/common/smooth-palette.c:302 plug-ins/common/tile.c:399 -#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:281 +#: plug-ins/file-bmp/bmp-load.c:738 plug-ins/file-exr/file-exr.c:281 #: plug-ins/file-faxg3/faxg3.c:578 plug-ins/file-fits/fits.c:700 #: plug-ins/file-jpeg/jpeg-load.c:231 #: plug-ins/file-psd/psd-image-res-load.c:1082 -#: plug-ins/file-psd/psd-load.c:2733 plug-ins/file-sgi/sgi.c:474 -#: plug-ins/file-tiff/file-tiff-load.c:1534 +#: plug-ins/file-psd/psd-load.c:2749 plug-ins/file-sgi/sgi.c:474 +#: plug-ins/file-tiff/file-tiff-load.c:1528 #: plug-ins/file-webp/file-webp-load.c:159 plug-ins/gfig/gfig-dialog.c:1290 #: plug-ins/pikaressionist/general.c:139 #: plug-ins/map-object/map-object-apply.c:245 -#: plug-ins/screenshot/screenshot-win32.c:317 plug-ins/twain/twain.c:661 +#: plug-ins/screenshot/screenshot-win32.c:317 plug-ins/twain/twain.c:636 msgid "Background" msgstr "Fondo" @@ -948,18 +953,18 @@ msgstr "Aleatorizar desde semilla" msgid "Randoms from seed (shared)" msgstr "Aleatorizar desde semilla (compartido)" -#: plug-ins/common/cml-explorer.c:301 plug-ins/common/cml-explorer.c:309 -#: plug-ins/common/decompose.c:202 plug-ins/pikaressionist/orientation.c:172 -#: plug-ins/pikaressionist/size.c:179 +#: plug-ins/common/cml-explorer.c:299 plug-ins/common/cml-explorer.c:307 +#: plug-ins/common/decompose.c:202 plug-ins/common/van-gogh-lic.c:160 +#: plug-ins/pikaressionist/orientation.c:172 plug-ins/pikaressionist/size.c:179 msgid "Hue" msgstr "Tono" -#: plug-ins/common/cml-explorer.c:302 plug-ins/common/cml-explorer.c:310 -#: plug-ins/common/decompose.c:203 +#: plug-ins/common/cml-explorer.c:300 plug-ins/common/cml-explorer.c:308 +#: plug-ins/common/decompose.c:203 plug-ins/common/van-gogh-lic.c:161 msgid "Saturation" msgstr "Saturación" -#: plug-ins/common/cml-explorer.c:303 plug-ins/common/cml-explorer.c:311 +#: plug-ins/common/cml-explorer.c:301 plug-ins/common/cml-explorer.c:309 #: plug-ins/common/decompose.c:204 plug-ins/pikaressionist/orientation.c:148 #: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:317 #: plug-ins/metadata/metadata-viewer.c:355 @@ -967,20 +972,20 @@ msgstr "Saturación" msgid "Value" msgstr "Valor" -#: plug-ins/common/cml-explorer.c:308 +#: plug-ins/common/cml-explorer.c:306 msgid "(None)" msgstr "(Ninguna)" -#: plug-ins/common/cml-explorer.c:508 +#: plug-ins/common/cml-explorer.c:510 msgid "CML _Explorer..." msgstr "_Examinador CML…" # //R No tengo ni idea de qué es esto... -#: plug-ins/common/cml-explorer.c:513 +#: plug-ins/common/cml-explorer.c:515 msgid "Create abstract Coupled-Map Lattice patterns" msgstr "Crea patrones abstractos Coupled-Map-Lattice" -#: plug-ins/common/cml-explorer.c:515 +#: plug-ins/common/cml-explorer.c:517 msgid "" "Make an image of Coupled-Map Lattice (CML). CML is a kind of Cellular " "Automata on continuous (value) domain. In PIKA_RUN_NONINTERACTIVE, the name " @@ -992,119 +997,123 @@ msgstr "" "nombre de un archivo de parámetros se pasa como el 4to arg. Puede controlar " "CML_explorer a través del archivo de parámetros." -#: plug-ins/common/cml-explorer.c:534 +#: plug-ins/common/cml-explorer.c:536 #, fuzzy #| msgid "Parameter k:" -msgid "Parameter URI" +msgid "Parameter File" msgstr "Parámetro k:" -#: plug-ins/common/cml-explorer.c:535 +#: plug-ins/common/cml-explorer.c:537 +#, fuzzy +#| msgid "" +#| "The local file:// URI of parameter file. CML_explorer makes an image with " +#| "its settings." msgid "" -"The local file:// URI of parameter file. CML_explorer makes an image with " -"its settings." +"The parameter file from which CML_explorer makes an image. This argument is " +"only used in non-interactive runs." msgstr "" "El archivo local file:// URI del archivo de parámetros. CML_explorer hace " "una imagen con su configuración." -#: plug-ins/common/cml-explorer.c:884 +#: plug-ins/common/cml-explorer.c:908 msgid "CML Explorer: evoluting" msgstr "Examinador CML: evolucionando" # //R No tengo ni idea de qué es esto... -#: plug-ins/common/cml-explorer.c:1351 +#: plug-ins/common/cml-explorer.c:1375 msgid "Coupled-Map-Lattice Explorer" msgstr "Examinador Coupled-Map-Lattice" -#: plug-ins/common/cml-explorer.c:1395 +#: plug-ins/common/cml-explorer.c:1419 msgid "New Seed" msgstr "Semilla nueva" -#: plug-ins/common/cml-explorer.c:1406 +#: plug-ins/common/cml-explorer.c:1430 msgid "Fix Seed" msgstr "Fijar semilla" -#: plug-ins/common/cml-explorer.c:1417 +#: plug-ins/common/cml-explorer.c:1441 msgid "Random Seed" msgstr "Semilla aleatoria" #. The Load button -#: plug-ins/common/cml-explorer.c:1432 plug-ins/common/cml-explorer.c:2255 -#: plug-ins/common/curve-bend.c:1313 plug-ins/common/curve-bend.c:1856 +#: plug-ins/common/cml-explorer.c:1456 plug-ins/common/cml-explorer.c:2357 +#: plug-ins/common/curve-bend.c:1267 plug-ins/common/curve-bend.c:1810 #: plug-ins/common/file-cel.c:1009 plug-ins/common/qbist.c:837 -#: plug-ins/common/qbist.c:1020 plug-ins/common/sphere-designer.c:2290 -#: plug-ins/common/sphere-designer.c:2681 plug-ins/flame/flame.c:542 -#: plug-ins/flame/flame.c:1104 +#: plug-ins/common/qbist.c:1020 plug-ins/common/sphere-designer.c:2295 +#: plug-ins/common/sphere-designer.c:2686 plug-ins/flame/flame.c:624 +#: plug-ins/flame/flame.c:1233 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:817 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1541 -#: plug-ins/gfig/gfig-dialog.c:782 plug-ins/ifs-compose/ifs-compose.c:905 -#: plug-ins/ifs-compose/ifs-compose.c:2592 plug-ins/imagemap/imap_browse.c:81 +#: plug-ins/gfig/gfig-dialog.c:782 plug-ins/ifs-compose/ifs-compose.c:911 +#: plug-ins/ifs-compose/ifs-compose.c:2598 plug-ins/imagemap/imap_browse.c:81 #: plug-ins/imagemap/imap_file.c:74 plug-ins/lighting/lighting-ui.c:492 #: plug-ins/lighting/lighting-ui.c:883 msgid "_Open" msgstr "_Abrir" #. The Save button -#: plug-ins/common/cml-explorer.c:1440 plug-ins/common/cml-explorer.c:2122 -#: plug-ins/common/curve-bend.c:1325 plug-ins/common/curve-bend.c:1891 -#: plug-ins/common/file-pdf-save.c:1100 plug-ins/common/qbist.c:879 -#: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2290 -#: plug-ins/common/sphere-designer.c:2689 plug-ins/flame/flame.c:542 -#: plug-ins/flame/flame.c:1112 +#: plug-ins/common/cml-explorer.c:1464 plug-ins/common/cml-explorer.c:2147 +#: plug-ins/common/curve-bend.c:1279 plug-ins/common/curve-bend.c:1845 +#: plug-ins/common/file-pdf-save.c:1052 plug-ins/common/qbist.c:879 +#: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2295 +#: plug-ins/common/sphere-designer.c:2694 plug-ins/flame/flame.c:624 +#: plug-ins/flame/flame.c:1241 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:825 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1579 #: plug-ins/gfig/gfig-dialog.c:832 plug-ins/pikaressionist/brush.c:271 -#: plug-ins/ifs-compose/ifs-compose.c:906 -#: plug-ins/ifs-compose/ifs-compose.c:2555 plug-ins/imagemap/imap_file.c:129 +#: plug-ins/ifs-compose/ifs-compose.c:912 +#: plug-ins/ifs-compose/ifs-compose.c:2561 plug-ins/imagemap/imap_file.c:129 #: plug-ins/lighting/lighting-ui.c:486 plug-ins/lighting/lighting-ui.c:739 msgid "_Save" msgstr "_Guardar" -#: plug-ins/common/cml-explorer.c:1459 plug-ins/common/van-gogh-lic.c:736 +#: plug-ins/common/cml-explorer.c:1483 msgid "_Hue" msgstr "T_ono" -#: plug-ins/common/cml-explorer.c:1463 +#: plug-ins/common/cml-explorer.c:1487 msgid "Sat_uration" msgstr "Sat_uración" -#: plug-ins/common/cml-explorer.c:1467 +#: plug-ins/common/cml-explorer.c:1491 msgid "_Value" msgstr "_Valor" -#: plug-ins/common/cml-explorer.c:1471 +#: plug-ins/common/cml-explorer.c:1495 msgid "_Advanced" msgstr "_Avanzado" # //R :-? -#: plug-ins/common/cml-explorer.c:1486 +#: plug-ins/common/cml-explorer.c:1510 msgid "Channel Independent Parameters" msgstr "Parámetros independientes del canal" -#: plug-ins/common/cml-explorer.c:1508 +#: plug-ins/common/cml-explorer.c:1532 msgid "Initial value:" msgstr "Valor inicial:" -#: plug-ins/common/cml-explorer.c:1513 +#: plug-ins/common/cml-explorer.c:1537 msgid "Zoom scale:" msgstr "Escala de ampliación:" -#: plug-ins/common/cml-explorer.c:1520 +#: plug-ins/common/cml-explorer.c:1544 msgid "Start offset:" msgstr "Desplazamiento de inicio:" -#: plug-ins/common/cml-explorer.c:1528 +#: plug-ins/common/cml-explorer.c:1552 msgid "Seed of Random (only for \"From Seed\" Modes)" msgstr "Semilla aleatoria (sólo para modos «Desde semilla»)" -#: plug-ins/common/cml-explorer.c:1538 +#: plug-ins/common/cml-explorer.c:1562 msgid "Seed:" msgstr "Semilla:" -#: plug-ins/common/cml-explorer.c:1550 +#: plug-ins/common/cml-explorer.c:1574 msgid "Switch to \"From seed\" With the Last Seed" msgstr "Cambiar a «Desde semilla» con la última semilla" -#: plug-ins/common/cml-explorer.c:1562 +#: plug-ins/common/cml-explorer.c:1586 msgid "" "\"Fix seed\" button is an alias of me.\n" "The same seed produces the same image, if (1) the widths of images are same " @@ -1117,201 +1126,177 @@ msgstr "" "diferente de la vista previa), y (2) todas las tasas de mutación son iguales " "a cero." -#: plug-ins/common/cml-explorer.c:1570 +#: plug-ins/common/cml-explorer.c:1594 msgid "O_thers" msgstr "O_tros" -#: plug-ins/common/cml-explorer.c:1585 +#: plug-ins/common/cml-explorer.c:1609 msgid "Copy Settings" msgstr "Copiar ajustes" -#: plug-ins/common/cml-explorer.c:1604 +#: plug-ins/common/cml-explorer.c:1628 msgid "Source channel:" msgstr "Canal origen:" -#: plug-ins/common/cml-explorer.c:1619 plug-ins/common/cml-explorer.c:1666 +#: plug-ins/common/cml-explorer.c:1643 plug-ins/common/cml-explorer.c:1690 msgid "Destination channel:" msgstr "Canal destino:" -#: plug-ins/common/cml-explorer.c:1623 +#: plug-ins/common/cml-explorer.c:1647 msgid "Copy Parameters" msgstr "Copiar parámetros" -#: plug-ins/common/cml-explorer.c:1631 +#: plug-ins/common/cml-explorer.c:1655 msgid "Selective Load Settings" msgstr "Configuración de carga selectiva" -#: plug-ins/common/cml-explorer.c:1651 +#: plug-ins/common/cml-explorer.c:1675 msgid "Source channel in file:" msgstr "Canal origen en el archivo:" -#: plug-ins/common/cml-explorer.c:1672 +#: plug-ins/common/cml-explorer.c:1696 msgid "_Misc" msgstr "_Varios" -#: plug-ins/common/cml-explorer.c:1731 +#: plug-ins/common/cml-explorer.c:1755 msgid "Function type:" msgstr "Tipo de función:" -#: plug-ins/common/cml-explorer.c:1747 +#: plug-ins/common/cml-explorer.c:1771 msgid "Composition:" msgstr "Composición:" -#: plug-ins/common/cml-explorer.c:1761 +#: plug-ins/common/cml-explorer.c:1785 msgid "Misc arrange:" msgstr "Ordenes variados:" -#: plug-ins/common/cml-explorer.c:1765 +#: plug-ins/common/cml-explorer.c:1789 msgid "Use cyclic range" msgstr "Usar rango cíclico" -#: plug-ins/common/cml-explorer.c:1774 +#: plug-ins/common/cml-explorer.c:1798 msgid "Mod. rate:" msgstr "Tasa de modificación:" -#: plug-ins/common/cml-explorer.c:1781 +#: plug-ins/common/cml-explorer.c:1805 msgid "Env. sensitivity:" msgstr "Sensibilidad de entorno:" -#: plug-ins/common/cml-explorer.c:1788 +#: plug-ins/common/cml-explorer.c:1812 msgid "Diffusion dist.:" msgstr "Distancia de difusión:" -#: plug-ins/common/cml-explorer.c:1795 +#: plug-ins/common/cml-explorer.c:1819 msgid "# of subranges:" msgstr "nº de subrangos:" -#: plug-ins/common/cml-explorer.c:1802 +#: plug-ins/common/cml-explorer.c:1826 msgid "P(ower factor):" msgstr "P (factor de potencia):" -#: plug-ins/common/cml-explorer.c:1810 +#: plug-ins/common/cml-explorer.c:1834 msgid "Parameter k:" msgstr "Parámetro k:" -#: plug-ins/common/cml-explorer.c:1818 +#: plug-ins/common/cml-explorer.c:1842 msgid "Range low:" msgstr "Límite inferior:" # //R |-( -#: plug-ins/common/cml-explorer.c:1825 +#: plug-ins/common/cml-explorer.c:1849 msgid "Range high:" msgstr "Límite superior:" -#: plug-ins/common/cml-explorer.c:1836 +#: plug-ins/common/cml-explorer.c:1860 msgid "Plot a Graph of the Settings" msgstr "Dibujar gráfica de los ajustes" -#: plug-ins/common/cml-explorer.c:1878 +#: plug-ins/common/cml-explorer.c:1902 msgid "Ch. sensitivity:" msgstr "Sensibilidad de canal:" -#: plug-ins/common/cml-explorer.c:1886 +#: plug-ins/common/cml-explorer.c:1910 msgid "Mutation rate:" msgstr "Tasa de mutación:" -#: plug-ins/common/cml-explorer.c:1894 +#: plug-ins/common/cml-explorer.c:1918 msgid "Mutation dist.:" msgstr "Distancia de mutación:" -#: plug-ins/common/cml-explorer.c:1986 +#: plug-ins/common/cml-explorer.c:2010 msgid "Graph of the Current Settings" msgstr "Gráfica de los ajustes actuales" -#: plug-ins/common/cml-explorer.c:1990 plug-ins/common/plugin-browser.c:562 +#: plug-ins/common/cml-explorer.c:2014 plug-ins/common/plugin-browser.c:562 #: plug-ins/common/procedure-browser.c:169 plug-ins/gfig/gfig-dialog.c:355 #: plug-ins/gfig/gfig-dialog.c:1218 plug-ins/gfig/gfig-dialog.c:1363 -#: plug-ins/ifs-compose/ifs-compose.c:1208 +#: plug-ins/ifs-compose/ifs-compose.c:1214 #: plug-ins/metadata/metadata-viewer.c:272 msgid "_Close" msgstr "_Cerrar" -#: plug-ins/common/cml-explorer.c:2058 +#: plug-ins/common/cml-explorer.c:2082 msgid "Warning: the source and the destination are the same channel." msgstr "Aviso: el origen y del destino son el mismo canal." -#: plug-ins/common/cml-explorer.c:2117 +#: plug-ins/common/cml-explorer.c:2142 msgid "Save CML Explorer Parameters" msgstr "Guardar los parámetros del Examinador CML" -#: plug-ins/common/cml-explorer.c:2173 plug-ins/common/curve-bend.c:792 +#: plug-ins/common/cml-explorer.c:2212 plug-ins/common/curve-bend.c:781 #: plug-ins/common/file-dicom.c:1564 plug-ins/common/file-farbfeld.c:380 #: plug-ins/common/file-mng.c:871 plug-ins/common/file-mng.c:1218 -#: plug-ins/common/file-pcx.c:1216 plug-ins/common/file-pdf-save.c:708 -#: plug-ins/common/file-png.c:1488 plug-ins/common/file-raw-data.c:1337 +#: plug-ins/common/file-pcx.c:1216 plug-ins/common/file-pdf-save.c:659 +#: plug-ins/common/file-png.c:1518 plug-ins/common/file-raw-data.c:1337 #: plug-ins/common/file-raw-data.c:1366 plug-ins/common/file-sunras.c:637 #: plug-ins/common/file-tga.c:1237 plug-ins/common/file-xmc.c:1381 -#: plug-ins/common/sphere-designer.c:2201 plug-ins/file-bmp/bmp-save.c:341 +#: plug-ins/common/sphere-designer.c:2206 plug-ins/file-bmp/bmp-save.c:341 #: plug-ins/file-fli/fli-pika.c:808 plug-ins/file-icns/file-icns-save.c:427 #: plug-ins/file-ico/ico-save.c:1342 plug-ins/file-ico/ico-save.c:1559 #: plug-ins/file-jpeg/jpeg-save.c:317 plug-ins/file-psd/psd-save.c:2214 #: plug-ins/file-tiff/file-tiff-save.c:1084 -#: plug-ins/file-tiff/file-tiff-save.c:1173 plug-ins/flame/flame.c:509 +#: plug-ins/file-tiff/file-tiff-save.c:1173 plug-ins/flame/flame.c:590 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1441 -#: plug-ins/gfig/gfig.c:897 plug-ins/ifs-compose/ifs-compose.c:2414 +#: plug-ins/gfig/gfig.c:897 plug-ins/ifs-compose/ifs-compose.c:2420 #: plug-ins/lighting/lighting-ui.c:808 #, c-format msgid "Could not open '%s' for writing: %s" msgstr "No se pudo abrir «%s» para escritura: %s" -#: plug-ins/common/cml-explorer.c:2228 +#: plug-ins/common/cml-explorer.c:2225 plug-ins/common/cml-explorer.c:2304 +#: plug-ins/common/cml-explorer.c:2322 +#, c-format +msgid "Could not write to '%s': %s" +msgstr "No se pudo escribir en «%s»: %s" + +#: plug-ins/common/cml-explorer.c:2331 #, c-format msgid "Parameters were saved to '%s'" msgstr "Los parámetros fueron guardados en «%s»" -#: plug-ins/common/cml-explorer.c:2250 +#: plug-ins/common/cml-explorer.c:2352 msgid "Load CML Explorer Parameters" msgstr "Cargar los parámetros del Examinador CML" -#: plug-ins/common/cml-explorer.c:2346 plug-ins/common/curve-bend.c:845 -#: plug-ins/common/file-cel.c:350 plug-ins/common/file-cel.c:402 -#: plug-ins/common/file-dicom.c:383 plug-ins/common/file-farbfeld.c:298 -#: plug-ins/common/file-gif-load.c:414 plug-ins/common/file-iff.c:219 -#: plug-ins/common/file-mng.c:1402 plug-ins/common/file-pcx.c:509 -#: plug-ins/common/file-pcx.c:552 plug-ins/common/file-png.c:658 -#: plug-ins/common/file-ps.c:1109 plug-ins/common/file-ps.c:3619 -#: plug-ins/common/file-psp.c:2504 plug-ins/common/file-psp.c:2554 -#: plug-ins/common/file-qoi.c:299 plug-ins/common/file-raw-data.c:515 -#: plug-ins/common/file-raw-data.c:1665 plug-ins/common/file-sunras.c:457 -#: plug-ins/common/file-svg.c:380 plug-ins/common/file-svg.c:809 -#: plug-ins/common/file-tga.c:447 plug-ins/common/file-wbmp.c:188 -#: plug-ins/common/file-xbm.c:749 plug-ins/common/file-xmc.c:656 -#: plug-ins/common/file-xmc.c:895 plug-ins/common/file-xwd.c:492 -#: plug-ins/common/sphere-designer.c:2090 plug-ins/file-bmp/bmp-load.c:226 -#: plug-ins/file-dds/ddsread.c:156 plug-ins/file-faxg3/faxg3.c:260 -#: plug-ins/file-fits/fits.c:395 plug-ins/file-fli/fli-pika.c:450 -#: plug-ins/file-fli/fli-pika.c:501 plug-ins/file-icns/file-icns-load.c:516 -#: plug-ins/file-icns/file-icns-load.c:568 plug-ins/file-ico/ico-load.c:681 -#: plug-ins/file-ico/ico-load.c:819 plug-ins/file-ico/ico-load.c:1021 -#: plug-ins/file-jpeg/jpeg-load.c:99 plug-ins/file-jpeg/jpeg-load.c:615 -#: plug-ins/file-psd/psd-load.c:169 plug-ins/file-psd/psd-load.c:174 -#: plug-ins/file-psd/psd-save.c:2219 plug-ins/file-psd/psd-thumb-load.c:82 -#: plug-ins/file-psd/psd-thumb-load.c:87 plug-ins/flame/flame.c:478 -#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1764 -#: plug-ins/fractal-explorer/fractal-explorer.c:1159 plug-ins/gfig/gfig.c:527 -#: plug-ins/help/pikahelplocale.c:255 plug-ins/help/pikahelplocale.c:271 -#: plug-ins/lighting/lighting-ui.c:952 -#, c-format -msgid "Could not open '%s' for reading: %s" -msgstr "No se pudo abrir «%s» para lectura: %s" - -#: plug-ins/common/cml-explorer.c:2368 -msgid "Error: it's not CML parameter file." +#: plug-ins/common/cml-explorer.c:2486 +#, fuzzy, c-format +#| msgid "Error: it's not CML parameter file." +msgid "Error: \"%s\" is not a CML parameter file." msgstr "Error: no es un archivo de parámetros CML." -#: plug-ins/common/cml-explorer.c:2375 +#: plug-ins/common/cml-explorer.c:2493 #, c-format msgid "Warning: '%s' is an old format file." msgstr "Advertencia: «%s» es un archivo de formato antiguo." -#: plug-ins/common/cml-explorer.c:2379 +#: plug-ins/common/cml-explorer.c:2497 #, c-format msgid "Warning: '%s' is a parameter file for a newer version of CML Explorer." msgstr "" "Advertencia: «%s» es un archivo de parámetros para una versión más reciente " "del Examinador CML." -#: plug-ins/common/cml-explorer.c:2442 +#: plug-ins/common/cml-explorer.c:2568 msgid "Error: failed to load parameters" msgstr "Error: falló al cargar los parámetros" @@ -1415,9 +1400,9 @@ msgstr "Reordenar el mapa de colores" # //R ¿Esto existe? #. The Reset button -#: plug-ins/common/colormap-remap.c:693 plug-ins/common/curve-bend.c:1296 -#: plug-ins/common/sphere-designer.c:2631 plug-ins/common/tile-small.c:525 -#: plug-ins/pikaressionist/preview.c:182 plug-ins/ifs-compose/ifs-compose.c:907 +#: plug-ins/common/colormap-remap.c:693 plug-ins/common/curve-bend.c:1250 +#: plug-ins/common/sphere-designer.c:2636 plug-ins/common/tile-small.c:525 +#: plug-ins/pikaressionist/preview.c:182 plug-ins/ifs-compose/ifs-compose.c:913 msgid "_Reset" msgstr "_Restablecer" @@ -1535,7 +1520,7 @@ msgstr "_Redness cr709:" #: plug-ins/common/compose.c:244 plug-ins/common/compose.c:438 #: plug-ins/common/compose.c:501 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2511 +#: plug-ins/common/file-heif.c:2544 msgid "RGB" msgstr "RGB" @@ -1596,11 +1581,9 @@ msgstr "" "Crear una imagen usando múltiples imágenes grises como canales de color" #: plug-ins/common/compose.c:409 -#, fuzzy -#| msgid "Create an image using multiple gray images as color channels" msgid "This function creates a new image from multiple gray images" msgstr "" -"Crear una imagen usando múltiples imágenes grises como canales de color" +"Esta función crea una imagen nueva a partir de múltiples imágenes grises" #: plug-ins/common/compose.c:418 msgid "Image 2" @@ -1637,31 +1620,25 @@ msgid "Color _model" msgstr "_Modelo de color" #: plug-ins/common/compose.c:445 plug-ins/common/compose.c:508 -#| msgid "YCbCr_ITU_R470" msgid "YCbCr ITU R470" msgstr "YCbCr ITU R470" #: plug-ins/common/compose.c:446 plug-ins/common/compose.c:509 -#| msgid "YCbCr_ITU_R709" msgid "YCbCr ITU R709" msgstr "YCbCr ITU R709" #: plug-ins/common/compose.c:447 plug-ins/common/compose.c:510 -#| msgid "YCbCr_ITU_R470_256" msgid "YCbCr ITU R470 256" msgstr "YCbCr ITU R470 256" #: plug-ins/common/compose.c:448 plug-ins/common/compose.c:511 -#| msgid "YCbCr_ITU_R709_256" msgid "YCbCr ITU R709 256" msgstr "YCbCr ITU R709 256" #: plug-ins/common/compose.c:454 plug-ins/common/compose.c:517 #: plug-ins/common/smooth-palette.c:159 -#, fuzzy -#| msgid "PNG image" msgid "New image" -msgstr "Imagen PNG" +msgstr "Imagen nueva" #: plug-ins/common/compose.c:455 plug-ins/common/compose.c:518 #: plug-ins/common/smooth-palette.c:160 @@ -1886,15 +1863,15 @@ msgstr "Recorte Zealous" msgid "Nothing to crop." msgstr "Nada para recortar." -#: plug-ins/common/curve-bend.c:412 +#: plug-ins/common/curve-bend.c:396 msgid "_Curve Bend..." msgstr "Doblar según _curva…" -#: plug-ins/common/curve-bend.c:417 +#: plug-ins/common/curve-bend.c:401 msgid "Bend the image using two control curves" msgstr "Doblar la imagen usando dos curvas de control" -#: plug-ins/common/curve-bend.c:418 +#: plug-ins/common/curve-bend.c:402 msgid "" "This plug-in bends the active layer. If there is a current selection it is " "copied to floating selection and the curve_bend distortion is done on the " @@ -1908,246 +1885,288 @@ msgid "" "handled layer. This plug-in sets the offsets of the handled layer to keep " "its center at the same position." msgstr "" +"Este complemento curva la capa activa. Si hay una selección actual, se copia " +"a una selección flotante y la distorsión de curvatura se realiza en la " +"selección flotante. Si el parámetro «work_on_copy» es TRUE, la distorsión de " +"curvatura se realiza en una copia de la capa activa (o selección flotante). " +"Los bordes superior e inferior se doblan en forma de 2 curvas spline. Ambas " +"curvas (superior e inferior) se determinan mediante hasta 17 puntos o " +"mediante 256 valores de Y si «curve_type == 1» (modo a mano alzada). Si la " +"rotación no es 0, la capa se rota antes y se vuelve a rotar después de la " +"operación de doblado. Esto permite doblar en direcciones distintas a la " +"vertical. El doblado generalmente cambia el tamaño de la capa manipulada. " +"Este complemento establece los desplazamientos de la capa manipulada para " +"mantener su centro en la misma posición." -#: plug-ins/common/curve-bend.c:442 +#: plug-ins/common/curve-bend.c:426 msgid "Rotat_e" msgstr "R_otar" -#: plug-ins/common/curve-bend.c:443 +#: plug-ins/common/curve-bend.c:427 msgid "Direction {angle 0 to 360 degree } of the bend effect" msgstr "Dirección {ángulo de 0 a 360 grados} del efecto de curvatura" -#: plug-ins/common/curve-bend.c:449 +#: plug-ins/common/curve-bend.c:433 msgid "Smoo_thing" msgstr "Suavizad_o" -#: plug-ins/common/curve-bend.c:450 +#: plug-ins/common/curve-bend.c:434 msgid "Smoothing" msgstr "Suavizado" -#: plug-ins/common/curve-bend.c:455 plug-ins/common/qbist.c:997 +#: plug-ins/common/curve-bend.c:439 plug-ins/common/qbist.c:997 #: plug-ins/lighting/lighting-main.c:296 msgid "_Antialiasing" msgstr "_Antialias" -#: plug-ins/common/curve-bend.c:456 +#: plug-ins/common/curve-bend.c:440 msgid "Antialias" msgstr "Antialias" -#: plug-ins/common/curve-bend.c:461 +#: plug-ins/common/curve-bend.c:445 msgid "Work on cop_y" msgstr "Trabajar con una cop_ia" -#: plug-ins/common/curve-bend.c:462 +#: plug-ins/common/curve-bend.c:446 msgid "Copy the drawable and bend the copy" msgstr "Copia el dibujable y dobla la copia" -#: plug-ins/common/curve-bend.c:467 +#: plug-ins/common/curve-bend.c:451 msgid "Curve Type" msgstr "Tipo de curva" -#: plug-ins/common/curve-bend.c:468 +#: plug-ins/common/curve-bend.c:452 msgid "{ 0 == smooth (use 17 points), 1 == freehand (use 256 val_y) }" msgstr "{ 0 == suave (usa 17 puntos), 1 == mano alzada (usa 256 val_y) }" -#: plug-ins/common/curve-bend.c:474 +#: plug-ins/common/curve-bend.c:458 msgid "Curve for Border" msgstr "Curva para el borde" -#: plug-ins/common/curve-bend.c:475 +#: plug-ins/common/curve-bend.c:459 msgid "Choose the active border line to edit" msgstr "Elija la línea de borde activa que editar" -#: plug-ins/common/curve-bend.c:480 plug-ins/common/curve-bend.c:481 +#: plug-ins/common/curve-bend.c:464 plug-ins/common/curve-bend.c:465 msgid "Argc upper point X" msgstr "Argc punto superior X" -#: plug-ins/common/curve-bend.c:486 +#: plug-ins/common/curve-bend.c:470 #, fuzzy #| msgid "Upper right" msgid "Upper point X" msgstr "Superior derecha" -#: plug-ins/common/curve-bend.c:487 plug-ins/common/curve-bend.c:511 +#: plug-ins/common/curve-bend.c:471 plug-ins/common/curve-bend.c:495 msgid "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" msgstr "" "Matriz de 17 coordenadas de puntos de x { 0.0 <= x <= 1.0 o -1 para un punto " "no utilizado }" -#: plug-ins/common/curve-bend.c:492 plug-ins/common/curve-bend.c:493 +#: plug-ins/common/curve-bend.c:476 plug-ins/common/curve-bend.c:477 msgid "Argc upper point Y" msgstr "Argc punto superior Y" -#: plug-ins/common/curve-bend.c:498 +#: plug-ins/common/curve-bend.c:482 #, fuzzy #| msgid "Upper right" msgid "Upper point Y" msgstr "Superior derecha" -#: plug-ins/common/curve-bend.c:499 plug-ins/common/curve-bend.c:523 +#: plug-ins/common/curve-bend.c:483 plug-ins/common/curve-bend.c:507 msgid "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" msgstr "" "Matriz de 17 coordenadas de puntos de y { 0.0 <= y <= 1.0 o -1 para un punto " "no utilizado }" -#: plug-ins/common/curve-bend.c:504 plug-ins/common/curve-bend.c:505 +#: plug-ins/common/curve-bend.c:488 plug-ins/common/curve-bend.c:489 msgid "Argc lower point X" msgstr "Argc punto inferior X" -#: plug-ins/common/curve-bend.c:510 +#: plug-ins/common/curve-bend.c:494 #, fuzzy #| msgid "Lower right" msgid "Lower point X" msgstr "Inferior derecha" -#: plug-ins/common/curve-bend.c:516 plug-ins/common/curve-bend.c:517 +#: plug-ins/common/curve-bend.c:500 plug-ins/common/curve-bend.c:501 msgid "Argc lower point Y" msgstr "Argc punto inferior Y" -#: plug-ins/common/curve-bend.c:522 +#: plug-ins/common/curve-bend.c:506 #, fuzzy #| msgid "Lower right" msgid "Lower point Y" msgstr "Inferior derecha" -#: plug-ins/common/curve-bend.c:528 +#: plug-ins/common/curve-bend.c:512 #, fuzzy #| msgid "Upper left" msgid "Upper val Y" msgstr "Superior izquierda" -#: plug-ins/common/curve-bend.c:529 plug-ins/common/curve-bend.c:535 +#: plug-ins/common/curve-bend.c:513 plug-ins/common/curve-bend.c:519 msgid "Array of 256 y freehand coords { 0 <= y <= 255 }" msgstr "Matriz de 256 coordenadas a mano alzada de y { 0 <= y <= 255 }" -#: plug-ins/common/curve-bend.c:534 +#: plug-ins/common/curve-bend.c:518 #, fuzzy #| msgid "Lower left" msgid "Lower val Y" msgstr "Inferior izquierda" -#: plug-ins/common/curve-bend.c:540 -#, fuzzy -#| msgid "Selected layer" +#: plug-ins/common/curve-bend.c:524 msgid "Bent layer" -msgstr "Capa seleccionada" +msgstr "Capa curvada" -#: plug-ins/common/curve-bend.c:541 +#: plug-ins/common/curve-bend.c:525 msgid "The transformed layer" msgstr "La capa transformada" -#: plug-ins/common/curve-bend.c:672 +#: plug-ins/common/curve-bend.c:661 msgid "Can operate on layers only (but was called on channel or mask)." msgstr "" "Sólo puede funcionar en capas (pero fue llamada en un canal o una máscara)." -#: plug-ins/common/curve-bend.c:686 +#: plug-ins/common/curve-bend.c:675 msgid "Cannot operate on layers with masks." msgstr "No funciona con capas con máscaras." -#: plug-ins/common/curve-bend.c:701 +#: plug-ins/common/curve-bend.c:690 msgid "Cannot operate on empty selections." msgstr "No puede operar sobre selecciones vacías." -#: plug-ins/common/curve-bend.c:855 +#: plug-ins/common/curve-bend.c:834 plug-ins/common/file-cel.c:350 +#: plug-ins/common/file-cel.c:402 plug-ins/common/file-dicom.c:383 +#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:416 +#: plug-ins/common/file-iff.c:219 plug-ins/common/file-mng.c:1402 +#: plug-ins/common/file-pcx.c:509 plug-ins/common/file-pcx.c:552 +#: plug-ins/common/file-png.c:665 plug-ins/common/file-ps.c:1109 +#: plug-ins/common/file-ps.c:3619 plug-ins/common/file-psp.c:2631 +#: plug-ins/common/file-psp.c:2681 plug-ins/common/file-qoi.c:299 +#: plug-ins/common/file-raw-data.c:515 plug-ins/common/file-raw-data.c:1665 +#: plug-ins/common/file-sunras.c:457 plug-ins/common/file-svg.c:380 +#: plug-ins/common/file-svg.c:809 plug-ins/common/file-tga.c:447 +#: plug-ins/common/file-wbmp.c:188 plug-ins/common/file-xbm.c:749 +#: plug-ins/common/file-xmc.c:656 plug-ins/common/file-xmc.c:895 +#: plug-ins/common/file-xwd.c:492 plug-ins/common/sphere-designer.c:2095 +#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:164 +#: plug-ins/file-faxg3/faxg3.c:260 plug-ins/file-fits/fits.c:395 +#: plug-ins/file-fli/fli-pika.c:450 plug-ins/file-fli/fli-pika.c:501 +#: plug-ins/file-icns/file-icns-load.c:516 +#: plug-ins/file-icns/file-icns-load.c:568 plug-ins/file-ico/ico-load.c:681 +#: plug-ins/file-ico/ico-load.c:819 plug-ins/file-ico/ico-load.c:1021 +#: plug-ins/file-jpeg/jpeg-load.c:99 plug-ins/file-jpeg/jpeg-load.c:615 +#: plug-ins/file-psd/psd-load.c:169 plug-ins/file-psd/psd-load.c:174 +#: plug-ins/file-psd/psd-save.c:2219 plug-ins/file-psd/psd-thumb-load.c:82 +#: plug-ins/file-psd/psd-thumb-load.c:87 plug-ins/flame/flame.c:544 +#: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1764 +#: plug-ins/fractal-explorer/fractal-explorer.c:1159 plug-ins/gfig/gfig.c:527 +#: plug-ins/help/pikahelplocale.c:255 plug-ins/help/pikahelplocale.c:271 +#: plug-ins/lighting/lighting-ui.c:952 +#, c-format +msgid "Could not open '%s' for reading: %s" +msgstr "No se pudo abrir «%s» para lectura: %s" + +#: plug-ins/common/curve-bend.c:844 #, c-format msgid "Error while reading '%s': %s" msgstr "Ocurrió un error al leer «%s»: %s" -#: plug-ins/common/curve-bend.c:1113 plug-ins/common/curve-bend.c:2819 +#: plug-ins/common/curve-bend.c:1067 plug-ins/common/curve-bend.c:2702 msgid "Curve Bend" msgstr "Doblar según curva" -#: plug-ins/common/curve-bend.c:1129 plug-ins/gfig/gfig-dialog.c:1215 +#: plug-ins/common/curve-bend.c:1083 plug-ins/gfig/gfig-dialog.c:1215 msgid "Options" msgstr "Opciones" #. GUI-only widgets #. Preview area, top of column #. preview -#: plug-ins/common/curve-bend.c:1152 plug-ins/pikaressionist/orientmap.c:589 +#: plug-ins/common/curve-bend.c:1106 plug-ins/pikaressionist/orientmap.c:589 #: plug-ins/pikaressionist/sizemap.c:458 plug-ins/print/print-page-layout.c:180 msgid "Preview" msgstr "Vista previa" #. The preview button -#: plug-ins/common/curve-bend.c:1180 +#: plug-ins/common/curve-bend.c:1134 msgid "_Preview Once" msgstr "_Previsualizar una vez" #. The preview toggle -#: plug-ins/common/curve-bend.c:1189 +#: plug-ins/common/curve-bend.c:1143 msgid "Automatic pre_view" msgstr "_Vista previa automática" #. The curves graph #. Config-connected widgets first -#: plug-ins/common/curve-bend.c:1200 +#: plug-ins/common/curve-bend.c:1154 msgid "Smooth" msgstr "Suavizar" -#: plug-ins/common/curve-bend.c:1201 +#: plug-ins/common/curve-bend.c:1155 msgid "Free" msgstr "Libre" -#: plug-ins/common/curve-bend.c:1208 +#: plug-ins/common/curve-bend.c:1162 msgid "Upper" msgstr "Superior" -#: plug-ins/common/curve-bend.c:1209 +#: plug-ins/common/curve-bend.c:1163 msgctxt "adjective" msgid "Lower" msgstr "Inferior" -#: plug-ins/common/curve-bend.c:1227 +#: plug-ins/common/curve-bend.c:1181 msgid "Modify Curves" msgstr "Modificar las curvas" #. The Copy button -#: plug-ins/common/curve-bend.c:1259 +#: plug-ins/common/curve-bend.c:1213 #: plug-ins/gradient-flare/gradient-flare.c:3047 msgid "_Copy" msgstr "_Copiar" -#: plug-ins/common/curve-bend.c:1264 +#: plug-ins/common/curve-bend.c:1218 msgid "Copy the active curve to the other border" msgstr "Copiar la curva activa al otro borde" #. The CopyInv button -#: plug-ins/common/curve-bend.c:1271 +#: plug-ins/common/curve-bend.c:1225 msgid "_Mirror" msgstr "_Reflejar" -#: plug-ins/common/curve-bend.c:1276 +#: plug-ins/common/curve-bend.c:1230 msgid "Mirror the active curve to the other border" msgstr "Reflejar la curva activa al otro borde" #. The Swap button -#: plug-ins/common/curve-bend.c:1284 +#: plug-ins/common/curve-bend.c:1238 msgid "S_wap" msgstr "I_ntercambiar" -#: plug-ins/common/curve-bend.c:1289 +#: plug-ins/common/curve-bend.c:1243 msgid "Swap the two curves" msgstr "Intercambiar las dos curvas" -#: plug-ins/common/curve-bend.c:1301 +#: plug-ins/common/curve-bend.c:1255 msgid "Reset the active curve" msgstr "Reiniciar la curva activa" -#: plug-ins/common/curve-bend.c:1318 +#: plug-ins/common/curve-bend.c:1272 msgid "Load the curves from a file" msgstr "Cargar las curvas desde un archivo" -#: plug-ins/common/curve-bend.c:1330 +#: plug-ins/common/curve-bend.c:1284 msgid "Save the curves to a file" msgstr "Guardar las curvas en un archivo" -#: plug-ins/common/curve-bend.c:1851 +#: plug-ins/common/curve-bend.c:1805 msgid "Load Curve Points from File" msgstr "Cargar puntos de curva desde un archivo" -#: plug-ins/common/curve-bend.c:1886 +#: plug-ins/common/curve-bend.c:1840 msgid "Save Curve Points to File" msgstr "Guardar puntos de curva en un archivo" @@ -2287,7 +2306,7 @@ msgid "Yellow" msgstr "Amarillo" #: plug-ins/common/decompose.c:215 plug-ins/common/warp.c:599 -#: plug-ins/file-fits/fits.c:1027 plug-ins/flame/flame.c:1223 +#: plug-ins/file-fits/fits.c:1027 plug-ins/flame/flame.c:1282 #: plug-ins/gfig/gfig-dialog.c:1459 msgid "Black" msgstr "Negro" @@ -2350,20 +2369,16 @@ msgid "Source _1" msgstr "Fuente _1" #: plug-ins/common/depth-merge.c:229 -#, fuzzy -#| msgid "Depth map:" msgid "_Depth map 1" -msgstr "Mapa de profundidad:" +msgstr "Mapa de _profundidad 1" #: plug-ins/common/depth-merge.c:235 msgid "Source _2" msgstr "Fuente _2" #: plug-ins/common/depth-merge.c:241 -#, fuzzy -#| msgid "Depth map:" msgid "Depth _map 2" -msgstr "Mapa de profundidad:" +msgstr "_Mapa de profundidad 2" # //R :-? #: plug-ins/common/depth-merge.c:247 @@ -2381,16 +2396,12 @@ msgid "Depth relative offset" msgstr "Guardar el desplazamiento de _capa" #: plug-ins/common/depth-merge.c:259 -#, fuzzy -#| msgid "Sc_ale 1:" msgid "Sc_ale 1" -msgstr "_Escala 1:" +msgstr "_Escala 1" #: plug-ins/common/depth-merge.c:265 -#, fuzzy -#| msgid "Scal_e" msgid "Scal_e 2" -msgstr "Escal_a" +msgstr "Escal_a 2" #: plug-ins/common/depth-merge.c:313 #, fuzzy @@ -2534,7 +2545,7 @@ msgstr "" "Este complemento utiliza aalib para guardar imágenes en escala de grises " "como arte ascii en una variedad de formatos de texto" -#: plug-ins/common/file-aa.c:156 +#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:245 msgid "_Format" msgstr "_Formato" @@ -2551,8 +2562,6 @@ msgid "KISS CEL" msgstr "KISS CEL" #: plug-ins/common/file-cel.c:159 -#, fuzzy -#| msgid "_Palette File" msgid "_Palette file" msgstr "Archivo de _paleta" @@ -2600,11 +2609,11 @@ msgstr "EOF o error al leer la cabecera de la imagen" #. * Open the file for reading... #. #: plug-ins/common/file-cel.c:393 plug-ins/common/file-dicom.c:375 -#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:406 -#: plug-ins/common/file-heif.c:871 plug-ins/common/file-jp2-load.c:1077 +#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:408 +#: plug-ins/common/file-heif.c:910 plug-ins/common/file-jp2-load.c:1077 #: plug-ins/common/file-pcx.c:501 plug-ins/common/file-pcx.c:544 #: plug-ins/common/file-pdf-load.c:856 plug-ins/common/file-pix.c:393 -#: plug-ins/common/file-png.c:650 plug-ins/common/file-pnm.c:713 +#: plug-ins/common/file-png.c:657 plug-ins/common/file-pnm.c:713 #: plug-ins/common/file-ps.c:1099 plug-ins/common/file-raw-data.c:1657 #: plug-ins/common/file-sunras.c:449 plug-ins/common/file-tga.c:439 #: plug-ins/common/file-wbmp.c:180 plug-ins/common/file-wmf.c:784 @@ -2616,7 +2625,7 @@ msgstr "EOF o error al leer la cabecera de la imagen" #: plug-ins/file-ico/ico-load.c:811 plug-ins/file-jpeg/jpeg-load.c:90 #: plug-ins/file-psd/psd-load.c:182 plug-ins/file-raw/file-darktable.c:417 #: plug-ins/file-raw/file-rawtherapee.c:345 plug-ins/file-sgi/sgi.c:333 -#: plug-ins/file-tiff/file-tiff-load.c:290 +#: plug-ins/file-tiff/file-tiff-load.c:291 #, c-format msgid "Opening '%s'" msgstr "Abriendo «%s»" @@ -2679,9 +2688,9 @@ msgstr "«%s»: EOF o error al leer los datos de la paleta" #. * Open the file for writing... #. #: plug-ins/common/file-cel.c:845 plug-ins/common/file-farbfeld.c:372 -#: plug-ins/common/file-gif-save.c:912 plug-ins/common/file-html-table.c:359 -#: plug-ins/common/file-jpegxl.c:1376 plug-ins/common/file-pcx.c:1100 -#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1480 +#: plug-ins/common/file-gif-save.c:941 plug-ins/common/file-html-table.c:359 +#: plug-ins/common/file-jpegxl.c:1382 plug-ins/common/file-pcx.c:1100 +#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1510 #: plug-ins/common/file-pnm.c:1634 plug-ins/common/file-ps.c:1321 #: plug-ins/common/file-qoi.c:374 plug-ins/common/file-sunras.c:628 #: plug-ins/common/file-tga.c:1229 plug-ins/common/file-xbm.c:1050 @@ -2865,10 +2874,8 @@ msgid "Farbfeld" msgstr "Farbfeld" #: plug-ins/common/file-farbfeld.c:141 plug-ins/common/file-farbfeld.c:143 -#, fuzzy -#| msgid "Load file in the IFF file format" msgid "Load file in the Farbfeld file format" -msgstr "Carga un archivo en el formato de archivo IFF" +msgstr "Cargar el archivo en el formato de archivo Farbfeld" #: plug-ins/common/file-farbfeld.c:167 plug-ins/common/file-farbfeld.c:169 msgid "Export image in the Farbfeld file format" @@ -2946,133 +2953,133 @@ msgstr "No se pudo abrir «%s»" msgid "GIF image" msgstr "Imagen GIF" -#: plug-ins/common/file-gif-load.c:421 +#: plug-ins/common/file-gif-load.c:423 msgid "GIF magic code" msgstr "Código mágico de GIF" -#: plug-ins/common/file-gif-load.c:429 +#: plug-ins/common/file-gif-load.c:431 msgid "This is not a GIF file: incorrect magic code" msgstr "Este no es un archivo GIF: código mágico incorrecto" -#: plug-ins/common/file-gif-load.c:437 +#: plug-ins/common/file-gif-load.c:439 msgid "Incorrect GIF version: not '87a' or '89a'" msgstr "Versión de GIF incorrecta: no es «87a» o «89a»" -#: plug-ins/common/file-gif-load.c:444 +#: plug-ins/common/file-gif-load.c:446 msgid "screen descriptor" msgstr "descriptor de pantalla" -#: plug-ins/common/file-gif-load.c:462 +#: plug-ins/common/file-gif-load.c:464 msgid "global colormap" msgstr "Mapa de colores global" -#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 +#: plug-ins/common/file-gif-load.c:476 plug-ins/common/file-gif-load.c:1110 msgid "image data" msgstr "datos de imagen" -#: plug-ins/common/file-gif-load.c:491 +#: plug-ins/common/file-gif-load.c:493 msgid "extension data" msgstr "datos de extensión" -#: plug-ins/common/file-gif-load.c:511 +#: plug-ins/common/file-gif-load.c:513 msgid "frame info" msgstr "info de fotograma" -#: plug-ins/common/file-gif-load.c:524 +#: plug-ins/common/file-gif-load.c:526 msgid "local colormap" msgstr "Mapa de colores local" -#: plug-ins/common/file-gif-load.c:569 +#: plug-ins/common/file-gif-load.c:571 plug-ins/common/file-iff.c:361 #, fuzzy #| msgid "Non-square pixels. Image might look squashed." msgid "" "Non-square pixels. Image might look squashed if Dot for Dot mode is enabled." msgstr "Píxeles no cuadrados. La imagen se verá aplastada." -#: plug-ins/common/file-gif-load.c:606 plug-ins/common/file-gif-load.c:611 +#: plug-ins/common/file-gif-load.c:627 plug-ins/common/file-gif-load.c:632 #, c-format msgid "Error reading %s. %s" msgstr "Error al leer %s. %s" -#: plug-ins/common/file-gif-load.c:607 plug-ins/common/file-gif-load.c:612 -#: plug-ins/common/file-gif-load.c:763 plug-ins/common/file-gif-load.c:771 -#: plug-ins/common/file-gif-load.c:802 plug-ins/common/file-gif-load.c:856 -#: plug-ins/common/file-gif-load.c:946 plug-ins/common/file-gif-load.c:965 -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 -#: plug-ins/common/file-gif-load.c:1215 +#: plug-ins/common/file-gif-load.c:628 plug-ins/common/file-gif-load.c:633 +#: plug-ins/common/file-gif-load.c:793 plug-ins/common/file-gif-load.c:801 +#: plug-ins/common/file-gif-load.c:832 plug-ins/common/file-gif-load.c:886 +#: plug-ins/common/file-gif-load.c:976 plug-ins/common/file-gif-load.c:995 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 +#: plug-ins/common/file-gif-load.c:1245 msgid "Image may be corrupt!" msgstr "¡La imagen puede estar corrupta!" -#: plug-ins/common/file-gif-load.c:763 +#: plug-ins/common/file-gif-load.c:793 msgid "Error reading data size" msgstr "Error al leer el tamaño de los datos" -#: plug-ins/common/file-gif-load.c:771 +#: plug-ins/common/file-gif-load.c:801 msgid "Error reading data" msgstr "Error al leer los datos" -#: plug-ins/common/file-gif-load.c:802 +#: plug-ins/common/file-gif-load.c:832 msgid "Not enough compressed data" msgstr "No hay suficientes datos comprimidos" -#: plug-ins/common/file-gif-load.c:856 +#: plug-ins/common/file-gif-load.c:886 msgid "Value out of range for code size" msgstr "Valor fuera de rango para el tamaño del código" -#: plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:975 msgid "Invalid code, expecting end of data marker" msgstr "Código no válido, esperando el final del marcador de datos" -#: plug-ins/common/file-gif-load.c:965 +#: plug-ins/common/file-gif-load.c:995 msgid "Unexpected extra data" msgstr "Datos adicionales inesperados" -#: plug-ins/common/file-gif-load.c:984 +#: plug-ins/common/file-gif-load.c:1014 msgid "Invalid table entry" msgstr "Entrada de tabla no válida" -#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1014 plug-ins/common/file-gif-load.c:1020 msgid "Image is corrupt!" msgstr "La imagen está corrupta." -#: plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1020 msgid "Circular table entry" msgstr "Entrada de tabla circular" -#: plug-ins/common/file-gif-load.c:1065 +#: plug-ins/common/file-gif-load.c:1095 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 msgid "Invalid frame dimensions" msgstr "Dimensiones de fotograma no válidas" -#: plug-ins/common/file-gif-load.c:1086 +#: plug-ins/common/file-gif-load.c:1116 msgid "compressed image data" msgstr "datos de imagen comprimidos" -#: plug-ins/common/file-gif-load.c:1119 +#: plug-ins/common/file-gif-load.c:1149 #, c-format msgid "Background (%d%s)" msgstr "Fondo (%d%s)" -#: plug-ins/common/file-gif-load.c:1146 +#: plug-ins/common/file-gif-load.c:1176 #, c-format msgid "Opening '%s' (frame %d)" msgstr "Abriendo «%s» (fotograma %d)" -#: plug-ins/common/file-gif-load.c:1175 +#: plug-ins/common/file-gif-load.c:1205 #, c-format msgid "Frame %d" msgstr "Cuadro %d" -#: plug-ins/common/file-gif-load.c:1177 +#: plug-ins/common/file-gif-load.c:1207 #, c-format msgid "Frame %d (%d%s)" msgstr "Cuadro %d (%d%s)" -#: plug-ins/common/file-gif-load.c:1208 +#: plug-ins/common/file-gif-load.c:1238 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " @@ -3081,12 +3088,12 @@ msgstr "" "GIF: el tipo de mezcla no documentada de GIF %d no puede manejarse. La " "animación podría no reproducirse o volverse a guardar perfectamente." -#: plug-ins/common/file-gif-load.c:1214 +#: plug-ins/common/file-gif-load.c:1244 #, c-format msgid "Unknown composite type %d. %s" msgstr "Tipo de compuesto desconocido %d. %s" -#: plug-ins/common/file-gif-load.c:1257 +#: plug-ins/common/file-gif-load.c:1287 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" @@ -3094,7 +3101,7 @@ msgstr "" "No se pueden manejar fotogramas RGB que no sean alfa.\n" "Envíe un informe de error en https://gitlab.gnome.org/GNOME/pika/issues" -#: plug-ins/common/file-gif-load.c:1380 +#: plug-ins/common/file-gif-load.c:1410 msgid "Too much compressed data, ignoring extra..." msgstr "Demasiados datos comprimidos, ignorando extra…" @@ -3213,16 +3220,16 @@ msgstr "Comen_tario" msgid "Image comment" msgstr "Comentario de la imagen" -#: plug-ins/common/file-gif-save.c:348 +#: plug-ins/common/file-gif-save.c:377 msgid "GIF format does not support multiple layers." msgstr "El formato GIF no soporta múltiples capas." -#: plug-ins/common/file-gif-save.c:553 +#: plug-ins/common/file-gif-save.c:582 msgid "Couldn't simply reduce colors further. Exporting as opaque." msgstr "" "Simplemente no se ha podido reducir más los colores. Exportando como opaco." -#: plug-ins/common/file-gif-save.c:672 +#: plug-ins/common/file-gif-save.c:701 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are " @@ -3231,7 +3238,7 @@ msgstr "" "Imposible exportar «%s». El formato de archivo GIF no soporta imágenes que\n" "tengan más de %d píxeles de ancho o alto." -#: plug-ins/common/file-gif-save.c:798 +#: plug-ins/common/file-gif-save.c:827 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." @@ -3239,18 +3246,18 @@ msgstr "" "El formato GIF sólo soporta comentarios en codificación ASCII de 7 bits. No " "se guardará ningún comentario." -#: plug-ins/common/file-gif-save.c:885 +#: plug-ins/common/file-gif-save.c:914 msgid "" "Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "" "No se puede guardar imágenes en color RGB. Convertir a color indexado o\n" "escala en gris primero." -#: plug-ins/common/file-gif-save.c:1105 +#: plug-ins/common/file-gif-save.c:1134 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "Retardo insertado para evitar la maldita animación chupadora de CPU." -#: plug-ins/common/file-gif-save.c:1154 +#: plug-ins/common/file-gif-save.c:1183 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." @@ -3259,11 +3266,11 @@ msgstr "" "extiende\n" "más allá de los bordes reales de la imagen." -#: plug-ins/common/file-gif-save.c:1160 +#: plug-ins/common/file-gif-save.c:1189 msgid "Cr_op" msgstr "_Recortar" -#: plug-ins/common/file-gif-save.c:1171 +#: plug-ins/common/file-gif-save.c:1200 msgid "" "The GIF file format does not allow this. You may choose whether to crop all " "of the layers to the image borders, or cancel this export." @@ -3271,19 +3278,19 @@ msgstr "" "El formato de archivo GIF no permite esto. Puede elegir si quiere recortar\n" "todas las capas de los bordes de la imagen, o cancelar la exportación." -#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 +#: plug-ins/common/file-gif-save.c:1290 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "milisegundos" -#: plug-ins/common/file-gif-save.c:1267 +#: plug-ins/common/file-gif-save.c:1296 msgid "I don't care" msgstr "No me importa" -#: plug-ins/common/file-gif-save.c:1303 +#: plug-ins/common/file-gif-save.c:1332 msgid "Animated GIF" msgstr "GIF animado" -#: plug-ins/common/file-gif-save.c:1310 +#: plug-ins/common/file-gif-save.c:1339 msgid "" "You can only export as animation when the image has more than one layer.\n" "The image you are trying to export only has one layer." @@ -3304,16 +3311,12 @@ msgid "Spacing (_percent)" msgstr "Espaciado (_porcentaje)" #: plug-ins/common/file-gih.c:194 -#, fuzzy -#| msgid "Short description of the brush" msgid "Short description of the GIH brush pipe" -msgstr "Breve descripción del pincel" +msgstr "Breve descripción de la tubería de pincel GIH" #: plug-ins/common/file-gih.c:199 -#, fuzzy -#| msgid "Pixel _width:" msgid "Cell _width" -msgstr "A_nchura del píxel:" +msgstr "An_cho de celda" #: plug-ins/common/file-gih.c:200 msgid "Width of the brush cells in pixels" @@ -3332,20 +3335,16 @@ msgid "_Number of cells" msgstr "_Número de celdas" #: plug-ins/common/file-gih.c:212 -#, fuzzy -#| msgid "_Number of cells:" msgid "Number of cells to cut up" -msgstr "_Número de celdas:" +msgstr "Número de celdas que cortar" #: plug-ins/common/file-gih.c:217 msgid "_Rank" msgstr "_Rango" #: plug-ins/common/file-gih.c:218 -#, fuzzy -#| msgid "bad image dimensions" msgid "Ranks of the dimensions" -msgstr "dimensiones de la imagen no válidas" +msgstr "Rangos de las dimensiones" #: plug-ins/common/file-gih.c:229 msgid "Display as" @@ -3388,16 +3387,16 @@ msgstr "Cabecera de código fuente en C" msgid "Header plug-in does not support multiple layers." msgstr "El complemento Cabecera no soporta múltiples capas." -#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 +#: plug-ins/common/file-heif.c:204 plug-ins/common/file-heif.c:244 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:197 +#: plug-ins/common/file-heif.c:207 msgid "Loads HEIF images" msgstr "Carga imágenes HEIF" # ¿En vez de «suffices» quizo decir «suffixes»? -#: plug-ins/common/file-heif.c:198 +#: plug-ins/common/file-heif.c:208 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -3406,182 +3405,194 @@ msgstr "" "alta eficiencia). Las extensiones típicas de los archivos HEIF son .heif y ." "heic." -#: plug-ins/common/file-heif.c:239 +#: plug-ins/common/file-heif.c:249 msgid "Exports HEIF images" msgstr "Exporta imágenes HEIF" -#: plug-ins/common/file-heif.c:240 +#: plug-ins/common/file-heif.c:250 msgid "Save image in HEIF format (High Efficiency Image File Format)." msgstr "" "Guarda la imagen en formato HEIF (formato de archivo de imagen de alta " "eficiencia)." -#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/common/file-heif.c:266 plug-ins/common/file-heif.c:376 #: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "Ca_lidad" -#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 +#: plug-ins/common/file-heif.c:267 plug-ins/common/file-heif.c:377 msgid "Quality factor (0 = worst, 100 = best)" msgstr "Factor de calidad (0 = peor, 100 = mejor)" -#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: plug-ins/common/file-heif.c:272 plug-ins/common/file-heif.c:382 #: plug-ins/common/file-jpegxl.c:188 plug-ins/file-webp/file-webp.c:178 msgid "L_ossless" msgstr "_Sin pérdida" -#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-heif.c:273 plug-ins/common/file-heif.c:383 #: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "Usar compresión sin pérdidas" -#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 +#: plug-ins/common/file-heif.c:278 plug-ins/common/file-heif.c:388 msgid "Save color prof_ile" msgstr "Guardar perf_il de color" -#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 +#: plug-ins/common/file-heif.c:279 plug-ins/common/file-heif.c:389 msgid "Save the image's color profile" msgstr "Guardar el perfil de color de la imagen" -#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 #: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "Profundidad de _bit" -#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: plug-ins/common/file-heif.c:285 plug-ins/common/file-heif.c:395 #: plug-ins/common/file-jpegxl.c:201 msgid "Bit depth of exported image" msgstr "Profundidad de bits de la imagen exportada" -#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 -#: plug-ins/common/file-png.c:286 +#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 +#: plug-ins/common/file-png.c:290 msgid "_Pixel format" msgstr "Formato de _píxel" -#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 +#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 msgid "Format of color sub-sampling" msgstr "Formato de submuestreo de color" -#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 +#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 msgid "Enco_der speed" msgstr "Velocidad del co_dificador" -#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 +#: plug-ins/common/file-heif.c:298 plug-ins/common/file-heif.c:408 msgid "Tradeoff between speed and compression" msgstr "Equilibrio entre velocidad y compresión" -#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-heif.c:304 plug-ins/common/file-heif.c:414 #: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "Guardar Exi_f" -#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: plug-ins/common/file-heif.c:305 plug-ins/common/file-heif.c:415 #: plug-ins/common/file-jpegxl.c:226 msgid "Toggle saving Exif data" msgstr "Alternar el guardar los datos Exif" -#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-heif.c:310 plug-ins/common/file-heif.c:420 #: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "Guardar _XMP" -#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: plug-ins/common/file-heif.c:311 plug-ins/common/file-heif.c:421 #: plug-ins/common/file-jpegxl.c:232 msgid "Toggle saving XMP data" msgstr "Alternar el guardar los datos XMP" -#: plug-ins/common/file-heif.c:315 +#: plug-ins/common/file-heif.c:325 msgid "Loads AVIF images" msgstr "Carga imágenes AVIF" -#: plug-ins/common/file-heif.c:316 +#: plug-ins/common/file-heif.c:326 msgid "Load image stored in AV1 Image File Format (AVIF)" msgstr "Carga una imagen almacenada en formato de archivo de imagen AV1 (AVIF)" -#: plug-ins/common/file-heif.c:348 +#: plug-ins/common/file-heif.c:358 msgid "Exports AVIF images" msgstr "Exporta imágenes AVIF" -#: plug-ins/common/file-heif.c:349 +#: plug-ins/common/file-heif.c:359 msgid "Save image in AV1 Image File Format (AVIF)" msgstr "Guarda la imagen en formato de archivo de imagen AV1 (AVIF)" -#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 +#: plug-ins/common/file-heif.c:432 +msgid "JPEG 2000 encapsulated in HEIF" +msgstr "JPEG 2000 encapsulado en HEIF" + +#: plug-ins/common/file-heif.c:435 +msgid "Loads HEJ2 images" +msgstr "Carga imágenes HEJ2" + +#: plug-ins/common/file-heif.c:436 +msgid "Load JPEG 2000 image encapsulated in HEIF (HEJ2)" +msgstr "Cargar imagen JPEG 2000 encapsulada en HEIF (HEJ2)" + +#: plug-ins/common/file-heif.c:541 plug-ins/common/file-heif.c:631 msgid "HEIF format does not support multiple layers." msgstr "El formato HEIF no soporta múltiples capas." -#: plug-ins/common/file-heif.c:911 plug-ins/common/file-heif.c:944 -#: plug-ins/common/file-heif.c:985 plug-ins/common/file-heif.c:1051 +#: plug-ins/common/file-heif.c:950 plug-ins/common/file-heif.c:983 +#: plug-ins/common/file-heif.c:1024 plug-ins/common/file-heif.c:1090 #, c-format msgid "Loading HEIF image failed: %s" msgstr "Falló al cargar la imagen HEIF: %s" -#: plug-ins/common/file-heif.c:933 +#: plug-ins/common/file-heif.c:972 msgid "Loading HEIF image failed: Input file contains no readable images" msgstr "" "Falló al cargar la imagen HEIF: el archivo de entrada no contiene imágenes " "legibles" -#: plug-ins/common/file-heif.c:1177 +#: plug-ins/common/file-heif.c:1216 msgid "image content" msgstr "contenido de la imagen" -#: plug-ins/common/file-heif.c:1529 +#: plug-ins/common/file-heif.c:1562 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "Exportando «%s» usando el codificador %s" -#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 +#: plug-ins/common/file-heif.c:1612 plug-ins/common/file-heif.c:2019 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "Falló al codificar la imagen HEIF: %s" -#: plug-ins/common/file-heif.c:2107 +#: plug-ins/common/file-heif.c:2140 #, c-format msgid "Writing HEIF image failed: %s" msgstr "Falló al escribir la imagen HEIF: %s" -#: plug-ins/common/file-heif.c:2196 +#: plug-ins/common/file-heif.c:2229 msgid "primary" msgstr "primario" -#: plug-ins/common/file-heif.c:2341 +#: plug-ins/common/file-heif.c:2374 msgid "Load HEIF Image" msgstr "Cargar imagen HEIF" -#: plug-ins/common/file-heif.c:2355 +#: plug-ins/common/file-heif.c:2388 msgid "Select Image" msgstr "Seleccione imagen" -#: plug-ins/common/file-heif.c:2512 +#: plug-ins/common/file-heif.c:2545 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2513 +#: plug-ins/common/file-heif.c:2546 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 +#: plug-ins/common/file-heif.c:2554 plug-ins/common/file-jpegxl.c:2028 msgid "8 bit/channel" msgstr "8 bit/canal" -#: plug-ins/common/file-heif.c:2522 +#: plug-ins/common/file-heif.c:2555 msgid "10 bit/channel" msgstr "10 bit/canal" -#: plug-ins/common/file-heif.c:2523 +#: plug-ins/common/file-heif.c:2556 msgid "12 bit/channel" msgstr "12 bit/canal" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2562 msgid "Slow" msgstr "Lento" -#: plug-ins/common/file-heif.c:2530 +#: plug-ins/common/file-heif.c:2563 msgid "Balanced" msgstr "Balanceado" -#: plug-ins/common/file-heif.c:2531 +#: plug-ins/common/file-heif.c:2564 msgid "Fast" msgstr "Rápido" @@ -3744,11 +3755,11 @@ msgstr "Amiga IFF" msgid "Load file in the IFF file format" msgstr "Carga un archivo en el formato de archivo IFF" -#: plug-ins/common/file-iff.c:252 +#: plug-ins/common/file-iff.c:254 msgid "Invalid or missing ILBM image" msgstr "Imagen ILBM no válida o ausente" -#: plug-ins/common/file-iff.c:257 +#: plug-ins/common/file-iff.c:268 msgid "ILBM contains no image data - likely a palette file" msgstr "" "ILBM no contiene datos de imagen, probablemente sea un archivo de paleta" @@ -3912,7 +3923,7 @@ msgstr "Guardar el perfil ori_ginal" msgid "Store ICC profile to exported JXL file" msgstr "Almacenar el perfil ICC en el archivo JXL exportado" -#: plug-ins/common/file-jpegxl.c:219 plug-ins/file-tiff/file-tiff.c:241 +#: plug-ins/common/file-jpegxl.c:219 plug-ins/file-tiff/file-tiff.c:258 msgid "Export as CMY_K" msgstr "Exportar como CMY_K" @@ -3922,56 +3933,56 @@ msgstr "Exportar como CMY_K" msgid "Create a CMYK JPEG XL image using the soft-proofing color profile" msgstr "Exportar una imagen PSD CMYK utilizando el perfil de color de prueba" -#: plug-ins/common/file-jpegxl.c:2008 +#: plug-ins/common/file-jpegxl.c:2014 msgid "lightning (fastest)" msgstr "relámpago (el más rápido)" -#: plug-ins/common/file-jpegxl.c:2009 +#: plug-ins/common/file-jpegxl.c:2015 msgid "thunder" msgstr "trueno" -#: plug-ins/common/file-jpegxl.c:2010 +#: plug-ins/common/file-jpegxl.c:2016 msgid "falcon (faster)" msgstr "halcón (más rápido)" -#: plug-ins/common/file-jpegxl.c:2011 +#: plug-ins/common/file-jpegxl.c:2017 msgid "cheetah" msgstr "guepardo" -#: plug-ins/common/file-jpegxl.c:2012 +#: plug-ins/common/file-jpegxl.c:2018 msgid "hare" msgstr "liebre" -#: plug-ins/common/file-jpegxl.c:2013 +#: plug-ins/common/file-jpegxl.c:2019 msgid "wombat" msgstr "wombat" -#: plug-ins/common/file-jpegxl.c:2014 +#: plug-ins/common/file-jpegxl.c:2020 msgid "squirrel" msgstr "ardilla" -#: plug-ins/common/file-jpegxl.c:2015 +#: plug-ins/common/file-jpegxl.c:2021 msgid "kitten" msgstr "gatito" -#: plug-ins/common/file-jpegxl.c:2016 +#: plug-ins/common/file-jpegxl.c:2022 msgid "tortoise (slower)" msgstr "tortuga (más lento)" -#: plug-ins/common/file-jpegxl.c:2023 +#: plug-ins/common/file-jpegxl.c:2029 msgid "16 bit/channel" msgstr "16 bit/canal" -#: plug-ins/common/file-jpegxl.c:2031 +#: plug-ins/common/file-jpegxl.c:2037 msgid "CMYK profile required for export" msgstr "Se necesita el perfil CMYK para la exportación" -#: plug-ins/common/file-jpegxl.c:2039 plug-ins/file-jpeg/jpeg-save.c:900 +#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:900 #: plug-ins/file-psd/psd-save.c:2459 plug-ins/file-tiff/file-tiff-save.c:1315 msgid "Name of the color profile used for CMYK export." msgstr "Nombre del perfil de color utilizado para la exportación en CMYK." -#: plug-ins/common/file-jpegxl.c:2058 plug-ins/file-jpeg/jpeg-save.c:911 +#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:911 #: plug-ins/file-psd/psd-save.c:2470 plug-ins/file-tiff/file-tiff-save.c:1327 #, c-format msgid "Profile: %s" @@ -4066,7 +4077,7 @@ msgstr "" "(MNG ANIMADO) Tipo de disposición predeterminado (0 = combinar; 1 = " "reemplazar)" -#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:252 msgid "Save _background color" msgstr "Guardar el color de _fondo" @@ -4090,7 +4101,7 @@ msgstr "G_uardar la resolución" msgid "Write pHYs (image resolution) chunk" msgstr "Escribir fragmento de pHYs (resolución de imagen)" -#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:270 msgid "Save creation _time" msgstr "Guardar la _hora de creación" @@ -4101,7 +4112,7 @@ msgstr "Escribir fragmento tIME (hora de creación)" #. Inform the user that we couldn't losslessly save the #. * transparency & just use the full palette #. -#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2315 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "" "No se pudo guardar la transparencia sin pérdidas, guardando la opacidad en " @@ -4111,7 +4122,7 @@ msgstr "" msgid "MNG Options" msgstr "Opciones de MNG" -#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:233 msgid "PNG" msgstr "PNG" @@ -4249,13 +4260,13 @@ msgid "'%s' is not a PCX file" msgstr "«%s» no es un archivo PCX" #: plug-ins/common/file-pcx.c:693 plug-ins/common/file-wbmp.c:263 -#: plug-ins/file-bmp/bmp-load.c:726 plug-ins/file-psd/psd-load.c:548 +#: plug-ins/file-bmp/bmp-load.c:727 plug-ins/file-psd/psd-load.c:548 #, c-format msgid "Unsupported or invalid image width: %d" msgstr "Anchura de imagen no soportada o no válida: %d" #: plug-ins/common/file-pcx.c:699 plug-ins/common/file-wbmp.c:269 -#: plug-ins/file-bmp/bmp-load.c:732 plug-ins/file-psd/psd-load.c:540 +#: plug-ins/file-bmp/bmp-load.c:733 plug-ins/file-psd/psd-load.c:540 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "Altura de imagen no soportada o no válida: %d" @@ -4445,7 +4456,7 @@ msgid "PDF" msgstr "PDF" #: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 -#: plug-ins/common/file-pdf-save.c:1153 +#: plug-ins/common/file-pdf-save.c:1105 msgid "_Fill transparent areas with background color" msgstr "_Rellenar las zonas transparentes con el color de fondo" @@ -4460,7 +4471,7 @@ msgstr "" msgid "_Create multipage PDF..." msgstr "_Crear PDF de varias páginas…" -#: plug-ins/common/file-pdf-save.c:719 +#: plug-ins/common/file-pdf-save.c:670 #, c-format msgid "" "An error occurred while creating the PDF file:\n" @@ -4473,7 +4484,7 @@ msgstr "" "Asegúrese de que ha introducido un nombre de archivo válido y que la carpeta " "de destino no es de solo lectura." -#: plug-ins/common/file-pdf-save.c:994 +#: plug-ins/common/file-pdf-save.c:946 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -4485,57 +4496,57 @@ msgstr "" "tipografías que faltan antes de exportar, de otro modo su diseño podría no " "verse bien." -#: plug-ins/common/file-pdf-save.c:1092 +#: plug-ins/common/file-pdf-save.c:1044 msgid "Save to:" msgstr "Guardar en:" -#: plug-ins/common/file-pdf-save.c:1096 +#: plug-ins/common/file-pdf-save.c:1048 msgid "Browse..." msgstr "Explorar…" -#: plug-ins/common/file-pdf-save.c:1097 +#: plug-ins/common/file-pdf-save.c:1049 msgid "Multipage PDF export" msgstr "Exportación de PDF de varias páginas" -#: plug-ins/common/file-pdf-save.c:1133 +#: plug-ins/common/file-pdf-save.c:1085 msgid "Remove the selected pages" msgstr "Eliminar las páginas seleccionadas" # Pendiente hasa que sepa lo que significa. FVD # Puede ser una imagen pix de Alias WaveFront # Gracias ¿Quién lo dice? pon tus iniciales. FVD -#: plug-ins/common/file-pdf-save.c:1143 +#: plug-ins/common/file-pdf-save.c:1095 msgid "Add this image" msgstr "Añadir esta imagen" -#: plug-ins/common/file-pdf-save.c:1148 +#: plug-ins/common/file-pdf-save.c:1100 msgid "_Omit hidden layers and layers with zero opacity" msgstr "_Omitir las capas ocultas y las que tienen opacidad cero" -#: plug-ins/common/file-pdf-save.c:1158 +#: plug-ins/common/file-pdf-save.c:1110 msgid "Convert _bitmaps to vector graphics where possible" msgstr "Convertir los mapas de _bit a gráficos vectoriales cuando sea posible" -#: plug-ins/common/file-pdf-save.c:1163 +#: plug-ins/common/file-pdf-save.c:1115 msgid "_Apply layer masks before saving" msgstr "_Aplicar máscaras de capa antes de guardar" -#: plug-ins/common/file-pdf-save.c:1167 +#: plug-ins/common/file-pdf-save.c:1119 msgid "Keeping the masks will not change the output" msgstr "Mantener las máscaras no cambiará la salida" -#: plug-ins/common/file-pdf-save.c:1256 plug-ins/common/file-pdf-save.c:1329 -#: plug-ins/common/file-pdf-save.c:1427 plug-ins/common/file-ps.c:2098 -#: plug-ins/file-tiff/file-tiff-load.c:1536 +#: plug-ins/common/file-pdf-save.c:1208 plug-ins/common/file-pdf-save.c:1281 +#: plug-ins/common/file-pdf-save.c:1379 plug-ins/common/file-ps.c:2098 +#: plug-ins/file-tiff/file-tiff-load.c:1530 #, c-format msgid "Page %d" msgstr "Página %d" -#: plug-ins/common/file-pdf-save.c:1296 +#: plug-ins/common/file-pdf-save.c:1248 msgid "Error! In order to save the file, at least one image should be added!" msgstr "Error: para guardar el archivo, debe añadirse al menos una imagen." -#: plug-ins/common/file-pdf-save.c:1474 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1426 plug-ins/print/print-draw-page.c:125 msgid "Cannot handle the size (either width or height) of the image." msgstr "" "No se puede manejar el tamaño (ya sea la anchura o la altura) de la imagen." @@ -4565,63 +4576,63 @@ msgstr "" msgid "Invalid Esm Software PIX file" msgstr "Archivo PIX del software Esm no válido" -#: plug-ins/common/file-png.c:183 plug-ins/common/file-png.c:213 +#: plug-ins/common/file-png.c:187 plug-ins/common/file-png.c:217 msgid "PNG image" msgstr "Imagen PNG" -#: plug-ins/common/file-png.c:236 +#: plug-ins/common/file-png.c:240 msgid "_Interlacing (Adam7)" msgstr "Entrela_zado (Adam7)" -#: plug-ins/common/file-png.c:237 +#: plug-ins/common/file-png.c:241 msgid "Use Adam7 interlacing" msgstr "Usar entrelazado Adam7" -#: plug-ins/common/file-png.c:242 +#: plug-ins/common/file-png.c:246 msgid "Co_mpression level" msgstr "Nivel de co_mpresión" -#: plug-ins/common/file-png.c:243 +#: plug-ins/common/file-png.c:247 msgid "Deflate Compression factor (0..9)" msgstr "Factor de compresión de desinflar (0,9)" -#: plug-ins/common/file-png.c:249 +#: plug-ins/common/file-png.c:253 msgid "Write bKGD chunk (PNG metadata)" msgstr "Escribir fragmento de bKGD (metadatos PNG)" -#: plug-ins/common/file-png.c:254 +#: plug-ins/common/file-png.c:258 msgid "Save layer o_ffset" msgstr "Guardar el desplazamiento de _capa" -#: plug-ins/common/file-png.c:255 +#: plug-ins/common/file-png.c:259 msgid "Write oFFs chunk (PNG metadata)" msgstr "Escribir fragmento de oFFs (metadatos PNG)" -#: plug-ins/common/file-png.c:260 +#: plug-ins/common/file-png.c:264 msgid "Save resol_ution" msgstr "Guardar la resol_ución" -#: plug-ins/common/file-png.c:261 +#: plug-ins/common/file-png.c:265 msgid "Write pHYs chunk (PNG metadata)" msgstr "Escribir fragmento de pHYs (metadatos PNG)" -#: plug-ins/common/file-png.c:267 +#: plug-ins/common/file-png.c:271 msgid "Write tIME chunk (PNG metadata)" msgstr "Escribir fragmento de tIME (metadatos PNG)" -#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:234 +#: plug-ins/common/file-png.c:276 plug-ins/file-tiff/file-tiff.c:251 msgid "Save color _values from transparent pixels" msgstr "Guardar los _valores de los colores de los píxeles transparentes" -#: plug-ins/common/file-png.c:273 +#: plug-ins/common/file-png.c:277 msgid "Preserve color of completely transparent pixels" msgstr "Mantener el color de los píxeles que son completamente transparentes" -#: plug-ins/common/file-png.c:278 +#: plug-ins/common/file-png.c:282 msgid "_Optimize for smallest possible palette size" msgstr "_Optimizar para un tamaño de paleta lo más pequeño posible" -#: plug-ins/common/file-png.c:279 +#: plug-ins/common/file-png.c:283 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" @@ -4629,83 +4640,83 @@ msgstr "" "Cuando está marcada, guarda como 1, 2, 4 u 8 bits dependiendo del número de " "colores utilizados. Cuando no está marcada, siempre se guarda como 8 bits" -#: plug-ins/common/file-png.c:287 +#: plug-ins/common/file-png.c:291 msgid "PNG export format" msgstr "Formato de exportación PNG" -#: plug-ins/common/file-png.c:288 plug-ins/common/file-ps.c:3723 +#: plug-ins/common/file-png.c:292 plug-ins/common/file-ps.c:3723 #: plug-ins/file-fits/fits.c:1035 msgid "Automatic" msgstr "Automático" # bits por canal -#: plug-ins/common/file-png.c:289 +#: plug-ins/common/file-png.c:293 msgid "8 bpc RGB" msgstr "8 bpc RGB" -#: plug-ins/common/file-png.c:290 +#: plug-ins/common/file-png.c:294 msgid "8 bpc GRAY" msgstr "8 bpc GRAY" -#: plug-ins/common/file-png.c:291 +#: plug-ins/common/file-png.c:295 msgid "8 bpc RGBA" msgstr "8 bpc RGBA" -#: plug-ins/common/file-png.c:292 +#: plug-ins/common/file-png.c:296 msgid "8 bpc GRAYA" msgstr "8 bpc GRAYA" -#: plug-ins/common/file-png.c:293 +#: plug-ins/common/file-png.c:297 msgid "16 bpc RGB" msgstr "16 bpc RGB" -#: plug-ins/common/file-png.c:294 +#: plug-ins/common/file-png.c:298 msgid "16 bpc GRAY" msgstr "16 bpc GRAY" -#: plug-ins/common/file-png.c:295 +#: plug-ins/common/file-png.c:299 msgid "16 bpc RGBA" msgstr "16 bpc RGBA" -#: plug-ins/common/file-png.c:296 +#: plug-ins/common/file-png.c:300 msgid "16 bpc GRAYA" msgstr "16 bpc GRAYA" -#: plug-ins/common/file-png.c:411 +#: plug-ins/common/file-png.c:415 msgid "PNG format does not support multiple layers." msgstr "El formato PNG no soporta múltiples capas." -#: plug-ins/common/file-png.c:484 +#: plug-ins/common/file-png.c:488 #, c-format msgid "Error loading PNG file: %s\n" msgstr "Error al cargar el archivo PNG: %s\n" -#: plug-ins/common/file-png.c:615 +#: plug-ins/common/file-png.c:622 #, c-format msgid "Error creating PNG read struct while loading '%s'." msgstr "Error al crear la estructura de lectura PNG mientras carga «%s»." -#: plug-ins/common/file-png.c:624 +#: plug-ins/common/file-png.c:631 #, c-format msgid "Error while reading '%s'. Could not create PNG header info structure." msgstr "Error al leer «%s». No se pudo crear la estructura de información PNG." -#: plug-ins/common/file-png.c:632 +#: plug-ins/common/file-png.c:639 #, c-format msgid "Error while reading '%s'. File corrupted?" msgstr "Ocurrió un error al leer el archivo «%s». ¿Está corrupto el archivo?" -#: plug-ins/common/file-png.c:887 +#: plug-ins/common/file-png.c:899 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "Modelo de color desconocido en el archivo PNG «%s»." -#: plug-ins/common/file-png.c:900 plug-ins/file-exr/file-exr.c:260 +#: plug-ins/common/file-png.c:912 plug-ins/file-exr/file-exr.c:260 #, c-format msgid "Could not create new image for '%s': %s" msgstr "No se pudo crear una imagen nueva para «%s»: %s" -#: plug-ins/common/file-png.c:968 +#: plug-ins/common/file-png.c:980 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." @@ -4713,19 +4724,19 @@ msgstr "" "El archivo PNG especifica un desplazamiento que ha causado que la capa sea " "posicionada fuera de la imagen." -#: plug-ins/common/file-png.c:1202 +#: plug-ins/common/file-png.c:1231 msgid "Apply PNG Offset" msgstr "Aplicar desplazamiento de PNG" -#: plug-ins/common/file-png.c:1206 +#: plug-ins/common/file-png.c:1235 msgid "Ignore PNG offset" msgstr "Ignorar el desplazamiento de PNG" -#: plug-ins/common/file-png.c:1207 +#: plug-ins/common/file-png.c:1236 msgid "Apply PNG offset to layer" msgstr "Aplicar desplazamiento de PNG a la capa" -#: plug-ins/common/file-png.c:1232 +#: plug-ins/common/file-png.c:1261 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " @@ -4734,19 +4745,19 @@ msgstr "" "La imagen PNG que está importando especifica un desplazamiento de %d, %d. " "¿Quiere aplicar este desplazamiento a la capa?" -#: plug-ins/common/file-png.c:1445 +#: plug-ins/common/file-png.c:1475 #, c-format msgid "Error creating PNG write struct while exporting '%s'." msgstr "Error al crear la estructura de escritura PNG mientras exporta «%s»." -#: plug-ins/common/file-png.c:1454 +#: plug-ins/common/file-png.c:1484 #, c-format msgid "Error while exporting '%s'. Could not create PNG header info structure." msgstr "" "Error al exportar «%s». No se pudo crear la estructura de información del " "encabezado PNG." -#: plug-ins/common/file-png.c:1462 +#: plug-ins/common/file-png.c:1492 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "Error al exportar «%s». No se pudo exportar la imagen." @@ -4916,7 +4927,7 @@ msgstr "Valor máximo no válido." # "PAM" stands for "Portable Arbitrary Map", which is a newer and extended version of the PNM format. #: plug-ins/common/file-pnm.c:943 -msgid "PAM: Unsupported inofficial PNM variant." +msgid "PAM: Unsupported unofficial PNM variant." msgstr "PAM: variante de PNM no oficial y no soportada." #: plug-ins/common/file-pnm.c:947 @@ -5083,10 +5094,8 @@ msgid "FALSE: PostScript Level 1, TRUE: PostScript Level 2" msgstr "FALSO: PostScript Nivel 1, VERDADERO: PostScript Nivel 2" #: plug-ins/common/file-ps.c:551 -#, fuzzy -#| msgid "Encapsulated PostScript" msgid "Encapsula_ted PostScript" -msgstr "PostScript encapsulado" +msgstr "PostScript encapsula_do" #: plug-ins/common/file-ps.c:552 #, fuzzy @@ -5372,39 +5381,79 @@ msgstr "tamaño de bloque no válido" msgid "Error reading end of selection chunk" msgstr "Error al leer la parte sobre la información de la capa" -#: plug-ins/common/file-psp.c:2439 plug-ins/common/file-psp.c:2451 -#: plug-ins/common/file-psp.c:2462 +#: plug-ins/common/file-psp.c:2442 +#, fuzzy +#| msgid "Error reading block header" +msgid "Error reading extended block chunk header" +msgstr "Error al leer la cabecera del bloque" + +#: plug-ins/common/file-psp.c:2450 +#, fuzzy +#| msgid "Invalid keyword chunk header" +msgid "Invalid extended block chunk header" +msgstr "La parte del encabezado sobre la palabra clave no es válida" + +#: plug-ins/common/file-psp.c:2461 +#, fuzzy +#| msgid "invalid block size" +msgid "Invalid extended block chunk size" +msgstr "tamaño de bloque no válido" + +#: plug-ins/common/file-psp.c:2482 +#, fuzzy +#| msgid "Error reading creator keyword data" +msgid "Error reading extended chunk grid data" +msgstr "Error al leer el origen de las palabras clave" + +#: plug-ins/common/file-psp.c:2508 +#, fuzzy +#| msgid "Error reading tube data chunk" +msgid "Error reading extended chunk guide data" +msgstr "Error al leer la parte sobre datos del tubo" + +#: plug-ins/common/file-psp.c:2526 +msgid "Invalid guide orientation" +msgstr "Orientación de guía no válida" + +#: plug-ins/common/file-psp.c:2540 +#, fuzzy +#| msgid "Error reading layer information chunk" +msgid "Error reading extended block chunk" +msgstr "Error al leer la parte sobre la información de la capa" + +#: plug-ins/common/file-psp.c:2566 plug-ins/common/file-psp.c:2578 +#: plug-ins/common/file-psp.c:2589 #, fuzzy #| msgid "Error reading color block" msgid "Error reading colorprofile chunk" msgstr "Error al leer el bloque de color" -#: plug-ins/common/file-psp.c:2515 +#: plug-ins/common/file-psp.c:2642 msgid "Error reading file header." msgstr "Error al leer la cabecera del archivo." -#: plug-ins/common/file-psp.c:2522 +#: plug-ins/common/file-psp.c:2649 msgid "Incorrect file signature." msgstr "Firma del archivo incorrecta." -#: plug-ins/common/file-psp.c:2536 +#: plug-ins/common/file-psp.c:2663 #, c-format msgid "Unsupported PSP file format version %d.%d." msgstr "La versión %d.%d del formato de archivo PSP no está soportada." -#: plug-ins/common/file-psp.c:2556 +#: plug-ins/common/file-psp.c:2683 msgid "invalid block size" msgstr "tamaño de bloque no válido" -#: plug-ins/common/file-psp.c:2565 +#: plug-ins/common/file-psp.c:2692 msgid "Duplicate General Image Attributes block." msgstr "El bloque general de atributos de imagen está duplicado." -#: plug-ins/common/file-psp.c:2593 +#: plug-ins/common/file-psp.c:2720 msgid "Missing General Image Attributes block." msgstr "Falta el bloque general de atributos de imagen." -#: plug-ins/common/file-psp.c:2715 +#: plug-ins/common/file-psp.c:2845 msgid "Exporting not implemented yet." msgstr "Exportar no está todavía implementado." @@ -5475,10 +5524,8 @@ msgstr "" "(2) }" #: plug-ins/common/file-raw-data.c:381 -#, fuzzy -#| msgid "Big Endian" msgid "Endianness" -msgstr "Big Endian" +msgstr "Endianidad" #: plug-ins/common/file-raw-data.c:382 msgid "" @@ -5507,21 +5554,15 @@ msgid "Offset to beginning of data in the palette file" msgstr "Desplazamiento al comienzo de los datos en el archivo de paleta" #: plug-ins/common/file-raw-data.c:400 -#, fuzzy -#| msgid "Palette Map" msgid "Palette's la_yout" -msgstr "Mapa de paleta" +msgstr "Dis_posición de paleta" #: plug-ins/common/file-raw-data.c:401 plug-ins/common/file-raw-data.c:477 -#, fuzzy -#| msgid "" -#| "The layout for the palette's color channels{ RAW_PALETTE_RGB (0), " -#| "RAW_PALETTE_BGR (1) }" msgid "" "The layout for the palette's color channels { RAW_PALETTE_RGB (0), " "RAW_PALETTE_BGR (1) }" msgstr "" -"La disposición de los canales de color de la paleta{ RAW_PALETTE_RGB (0), " +"La disposición de los canales de color de la paleta { RAW_PALETTE_RGB (0), " "RAW_PALETTE_BGR (1) }" #: plug-ins/common/file-raw-data.c:406 @@ -5550,10 +5591,8 @@ msgstr "" "datos SRTM-3)" #: plug-ins/common/file-raw-data.c:476 -#, fuzzy -#| msgid "Palette Map" msgid "Palette's layout" -msgstr "Mapa de paleta" +msgstr "Disposición de paleta" #: plug-ins/common/file-raw-data.c:484 msgid "Raw Data" @@ -6602,12 +6641,13 @@ msgid "XWD-file %s is corrupt." msgstr "El archivo XWD-file %s corrompido." #: plug-ins/common/file-xwd.c:2083 -#, fuzzy, c-format -#| msgid "Bad colormap" +#, c-format msgid "" "'%s':\n" "Invalid color map" -msgstr "Mapa de colores malo" +msgstr "" +"«%s»:\n" +"Mapa de colores no válido" #: plug-ins/common/film.c:180 msgid "_Filmstrip..." @@ -6618,10 +6658,8 @@ msgid "Combine several images on a film strip" msgstr "Combinar varias imágenes en una cinta de película" #: plug-ins/common/film.c:245 -#, fuzzy -#| msgid "Image _height:" msgid "Image _height" -msgstr "Altura de _imagen:" +msgstr "Altura de imagen" #: plug-ins/common/film.c:246 #, fuzzy @@ -6640,10 +6678,8 @@ msgid "The spacing between 2 images, as fraction of the strip height" msgstr "Todos los valores son fracciones de la altura de la película" #: plug-ins/common/film.c:257 -#, fuzzy -#| msgid "_Hole offset:" msgid "Hole offse_t" -msgstr "Desp_lazamiento del agujero:" +msgstr "Desplazamien_to del agujero" #: plug-ins/common/film.c:258 #, fuzzy @@ -6655,10 +6691,8 @@ msgstr "" "La distancia al centro de la imagen determina la dirección de la pincelada" #: plug-ins/common/film.c:263 -#, fuzzy -#| msgid "Ho_le width:" msgid "Hole _width" -msgstr "Anchura de_l agujero:" +msgstr "Anchura de_l agujero" #: plug-ins/common/film.c:264 #, fuzzy @@ -6667,10 +6701,8 @@ msgid "The width of the holes, as fraction of the strip height" msgstr "Todos los valores son fracciones de la altura de la película" #: plug-ins/common/film.c:269 -#, fuzzy -#| msgid "Hol_e height:" msgid "Hole hei_ght" -msgstr "Altura de aguj_ero:" +msgstr "Altura de a_gujero" #: plug-ins/common/film.c:270 #, fuzzy @@ -6679,10 +6711,8 @@ msgid "The height of the holes, as fraction of the strip height" msgstr "Todos los valores son fracciones de la altura de la película" #: plug-ins/common/film.c:275 -#, fuzzy -#| msgid "Distance:" msgid "Hole _distance" -msgstr "Distancia:" +msgstr "_Distancia del agujero" #: plug-ins/common/film.c:276 #, fuzzy @@ -6691,10 +6721,8 @@ msgid "The distance between holes, as fraction of the strip height" msgstr "Todos los valores son fracciones de la altura de la película" #: plug-ins/common/film.c:281 -#, fuzzy -#| msgid "_Number height:" msgid "_Number height" -msgstr "Altura del _número:" +msgstr "Altura del _número" #: plug-ins/common/film.c:282 #, fuzzy @@ -6703,8 +6731,6 @@ msgid "The height of drawn numbers, as fraction of the strip height" msgstr "Todos los valores son fracciones de la altura de la película" #: plug-ins/common/film.c:289 -#, fuzzy -#| msgid "_Fit height to images" msgid "F_it height to images" msgstr "A_justar altura a las imágenes" @@ -6854,7 +6880,7 @@ msgstr "Dividir la imagen en sub-imágenes utilizando las guías" msgid "Guillotine" msgstr "Guillotina" -#: plug-ins/common/guillotine.c:266 plug-ins/help-browser/dialog.c:821 +#: plug-ins/common/guillotine.c:266 plug-ins/help-browser/dialog.c:830 msgid "Untitled" msgstr "Sin título" @@ -7343,10 +7369,8 @@ msgid "Lo_w" msgstr "In_ferior" #: plug-ins/common/sample-colorize.c:394 -#, fuzzy -#| msgid "Adjust the flare intensity" msgid "Lowest sample color intensity" -msgstr "Ajusta la intensidad de destellos" +msgstr "Intensidad de color de muestra más baja" #: plug-ins/common/sample-colorize.c:399 #, fuzzy @@ -7439,16 +7463,12 @@ msgid "Height" msgstr "Altura" #: plug-ins/common/smooth-palette.c:147 -#, fuzzy -#| msgid "_Search depth:" msgid "Search _depth" -msgstr "Profundidad de la bú_squeda:" +msgstr "Profun_didad de la búsqueda" #: plug-ins/common/smooth-palette.c:148 -#, fuzzy -#| msgid "_Search depth:" msgid "Search depth" -msgstr "Profundidad de la bú_squeda:" +msgstr "Profundidad de la búsqueda" #. "show image" checkbutton at bottom of style frame #: plug-ins/common/smooth-palette.c:153 plug-ins/common/smooth-palette.c:154 @@ -7657,7 +7677,7 @@ msgstr "Lagarto" msgid "Phong" msgstr "Phong" -#: plug-ins/common/sphere-designer.c:341 plug-ins/flame/flame.c:836 +#: plug-ins/common/sphere-designer.c:341 plug-ins/flame/flame.c:949 msgid "Noise" msgstr "Ruido" @@ -7665,7 +7685,7 @@ msgstr "Ruido" msgid "Wood" msgstr "Madera" -#: plug-ins/common/sphere-designer.c:343 plug-ins/flame/flame.c:820 +#: plug-ins/common/sphere-designer.c:343 plug-ins/flame/flame.c:933 #: plug-ins/gfig/gfig-dialog.c:399 plug-ins/gfig/gfig-menu.ui:79 msgid "Spiral" msgstr "Espiral" @@ -7682,51 +7702,51 @@ msgstr "_Diseñador de esferas…" msgid "Create an image of a textured sphere" msgstr "Crea una imagen de una esfera texturizada" -#: plug-ins/common/sphere-designer.c:1830 -#: plug-ins/common/sphere-designer.c:2775 +#: plug-ins/common/sphere-designer.c:1835 +#: plug-ins/common/sphere-designer.c:2780 msgid "Texture" msgstr "Textura" -#: plug-ins/common/sphere-designer.c:1832 +#: plug-ins/common/sphere-designer.c:1837 msgid "Bumpmap" msgstr "Mapa de relieve" -#: plug-ins/common/sphere-designer.c:1834 -#: plug-ins/common/sphere-designer.c:2777 +#: plug-ins/common/sphere-designer.c:1839 +#: plug-ins/common/sphere-designer.c:2782 msgid "Light" msgstr "Luz" -#: plug-ins/common/sphere-designer.c:2097 +#: plug-ins/common/sphere-designer.c:2102 #, c-format msgid "File '%s' is not a valid save file." msgstr "El archivo «%s» no es válido." -#: plug-ins/common/sphere-designer.c:2277 +#: plug-ins/common/sphere-designer.c:2282 msgid "Open File" msgstr "Abrir archivo" -#: plug-ins/common/sphere-designer.c:2277 +#: plug-ins/common/sphere-designer.c:2282 msgid "Save File" msgstr "Guardar archivo" -#: plug-ins/common/sphere-designer.c:2627 +#: plug-ins/common/sphere-designer.c:2632 msgid "Sphere Designer" msgstr "Diseñador de esferas" -#: plug-ins/common/sphere-designer.c:2728 +#: plug-ins/common/sphere-designer.c:2733 msgid "Layers" msgstr "Capas" -#: plug-ins/common/sphere-designer.c:2739 +#: plug-ins/common/sphere-designer.c:2744 #: plug-ins/gradient-flare/gradient-flare.c:3045 msgid "_New" msgstr "_Nueva" -#: plug-ins/common/sphere-designer.c:2745 +#: plug-ins/common/sphere-designer.c:2750 msgid "D_uplicate" msgstr "D_uplicar" -#: plug-ins/common/sphere-designer.c:2751 +#: plug-ins/common/sphere-designer.c:2756 #: plug-ins/fractal-explorer/fractal-explorer.c:887 #: plug-ins/fractal-explorer/fractal-explorer.c:1357 #: plug-ins/pikaressionist/presets.c:1067 @@ -7735,94 +7755,94 @@ msgstr "D_uplicar" msgid "_Delete" msgstr "_Eliminar" -#: plug-ins/common/sphere-designer.c:2761 +#: plug-ins/common/sphere-designer.c:2766 msgid "Properties" msgstr "Propiedades" -#: plug-ins/common/sphere-designer.c:2776 +#: plug-ins/common/sphere-designer.c:2781 msgid "Bump" msgstr "Relieve" -#: plug-ins/common/sphere-designer.c:2784 +#: plug-ins/common/sphere-designer.c:2789 msgid "Type:" msgstr "Tipo:" -#: plug-ins/common/sphere-designer.c:2803 +#: plug-ins/common/sphere-designer.c:2808 msgid "Texture:" msgstr "Textura:" -#: plug-ins/common/sphere-designer.c:2808 +#: plug-ins/common/sphere-designer.c:2813 msgid "Colors:" msgstr "Colores:" -#: plug-ins/common/sphere-designer.c:2811 -#: plug-ins/common/sphere-designer.c:2822 +#: plug-ins/common/sphere-designer.c:2816 +#: plug-ins/common/sphere-designer.c:2827 msgid "Color Selection Dialog" msgstr "Diálogo de selección de color" #. Scale -#: plug-ins/common/sphere-designer.c:2833 plug-ins/pikaressionist/paper.c:191 -#: plug-ins/ifs-compose/ifs-compose.c:663 +#: plug-ins/common/sphere-designer.c:2838 plug-ins/pikaressionist/paper.c:191 +#: plug-ins/ifs-compose/ifs-compose.c:669 msgid "Scale:" msgstr "Escala:" -#: plug-ins/common/sphere-designer.c:2841 +#: plug-ins/common/sphere-designer.c:2846 msgid "Turbulence:" msgstr "Turbulencia:" -#: plug-ins/common/sphere-designer.c:2849 +#: plug-ins/common/sphere-designer.c:2854 msgid "Amount:" msgstr "Cantidad:" -#: plug-ins/common/sphere-designer.c:2856 +#: plug-ins/common/sphere-designer.c:2861 msgid "Exp.:" msgstr "Exp.:" -#: plug-ins/common/sphere-designer.c:2863 +#: plug-ins/common/sphere-designer.c:2868 msgid "Transformations" msgstr "Transformaciones" -#: plug-ins/common/sphere-designer.c:2877 +#: plug-ins/common/sphere-designer.c:2882 msgid "Scale X:" msgstr "Escala X:" -#: plug-ins/common/sphere-designer.c:2885 +#: plug-ins/common/sphere-designer.c:2890 msgid "Scale Y:" msgstr "Escala Y:" -#: plug-ins/common/sphere-designer.c:2893 +#: plug-ins/common/sphere-designer.c:2898 msgid "Scale Z:" msgstr "Escala Z:" -#: plug-ins/common/sphere-designer.c:2904 +#: plug-ins/common/sphere-designer.c:2909 msgid "Rotate X:" msgstr "Rotación X:" -#: plug-ins/common/sphere-designer.c:2911 +#: plug-ins/common/sphere-designer.c:2916 msgid "Rotate Y:" msgstr "Rotación Y:" -#: plug-ins/common/sphere-designer.c:2918 +#: plug-ins/common/sphere-designer.c:2923 msgid "Rotate Z:" msgstr "Rotación Z:" -#: plug-ins/common/sphere-designer.c:2928 +#: plug-ins/common/sphere-designer.c:2933 msgid "Position X:" msgstr "Posición X:" -#: plug-ins/common/sphere-designer.c:2936 +#: plug-ins/common/sphere-designer.c:2941 msgid "Position Y:" msgstr "Posición Y:" -#: plug-ins/common/sphere-designer.c:2944 +#: plug-ins/common/sphere-designer.c:2949 msgid "Position Z:" msgstr "Posición Z:" -#: plug-ins/common/sphere-designer.c:3074 +#: plug-ins/common/sphere-designer.c:3079 msgid "Rendering sphere" msgstr "Renderizando esfera" -#: plug-ins/common/sphere-designer.c:3193 +#: plug-ins/common/sphere-designer.c:3199 msgid "Region selected for plug-in is empty" msgstr "La región seleccionada para el complemento está vacía" @@ -7859,10 +7879,8 @@ msgid "_n²" msgstr "_n²" #: plug-ins/common/tile-small.c:286 -#, fuzzy -#| msgid "Number of Tiles" msgid "Number of tiles to make" -msgstr "Número de piezas" +msgstr "Número de mosaicos que hacer" #: plug-ins/common/tile-small.c:332 msgid "Region selected for filter is empty." @@ -7874,7 +7892,7 @@ msgstr "Baldosas pequeñas" #. Area for buttons etc #. Flip -#: plug-ins/common/tile-small.c:492 plug-ins/ifs-compose/ifs-compose.c:719 +#: plug-ins/common/tile-small.c:492 plug-ins/ifs-compose/ifs-compose.c:725 msgid "Flip" msgstr "Voltear" @@ -8071,78 +8089,110 @@ msgstr "Entrada incompleta" msgid "Please fill in all text fields." msgstr "Rellene todos los campos de texto." -#: plug-ins/common/van-gogh-lic.c:632 plug-ins/common/van-gogh-lic.c:705 -msgid "Van Gogh (LIC)" -msgstr "Van Gogh (LIC)" - -#: plug-ins/common/van-gogh-lic.c:731 -msgid "Effect Channel" -msgstr "Canal de efecto" - -#: plug-ins/common/van-gogh-lic.c:737 -msgid "_Saturation" -msgstr "_Saturación" - -#: plug-ins/common/van-gogh-lic.c:738 -msgid "_Brightness" -msgstr "_Brillo" - -#: plug-ins/common/van-gogh-lic.c:744 -msgid "Effect Operator" -msgstr "Operador de efecto" - -#: plug-ins/common/van-gogh-lic.c:749 -msgid "_Derivative" -msgstr "_Derivada" - -#: plug-ins/common/van-gogh-lic.c:750 -msgid "_Gradient" -msgstr "_Degradado" - -#: plug-ins/common/van-gogh-lic.c:756 -msgid "Convolve" -msgstr "Convolución" - -#: plug-ins/common/van-gogh-lic.c:761 -msgid "_With white noise" -msgstr "Con r_uido blanco" - -#: plug-ins/common/van-gogh-lic.c:762 -msgid "W_ith source image" -msgstr "C_on imagen fuente" - -#: plug-ins/common/van-gogh-lic.c:781 -msgid "_Effect image:" -msgstr "Imagen de _efecto:" - -#: plug-ins/common/van-gogh-lic.c:791 -msgid "_Filter length:" -msgstr "Longitud del _filtro:" - -#: plug-ins/common/van-gogh-lic.c:799 -msgid "_Noise magnitude:" -msgstr "_Magnitud del ruido:" - -#: plug-ins/common/van-gogh-lic.c:807 -msgid "In_tegration steps:" -msgstr "Pasos de in_tegración:" - -#: plug-ins/common/van-gogh-lic.c:814 -msgid "_Minimum value:" -msgstr "Valor _mínimo:" - -#: plug-ins/common/van-gogh-lic.c:821 -msgid "M_aximum value:" -msgstr "Valor m_áximo:" - -#: plug-ins/common/van-gogh-lic.c:878 +#: plug-ins/common/van-gogh-lic.c:144 msgid "_Van Gogh (LIC)..." msgstr "_Van Gogh (LIC)…" -#: plug-ins/common/van-gogh-lic.c:882 +#: plug-ins/common/van-gogh-lic.c:148 msgid "Special effects that nobody understands" msgstr "Efectos especiales que nadie comprende" +#: plug-ins/common/van-gogh-lic.c:158 +msgid "E_ffect Channel" +msgstr "Canal de e_fecto" + +#: plug-ins/common/van-gogh-lic.c:159 +msgid "Effect Channel" +msgstr "Canal de efecto" + +#: plug-ins/common/van-gogh-lic.c:162 +msgid "Brightness" +msgstr "Brillo" + +#: plug-ins/common/van-gogh-lic.c:168 +msgid "Effect O_perator" +msgstr "O_perador de efecto" + +#: plug-ins/common/van-gogh-lic.c:169 +msgid "Effect Operator" +msgstr "Operador de efecto" + +#: plug-ins/common/van-gogh-lic.c:170 +msgid "Derivative" +msgstr "Derivada" + +#: plug-ins/common/van-gogh-lic.c:171 +msgid "Gradient" +msgstr "Degradado" + +#: plug-ins/common/van-gogh-lic.c:177 +msgid "Con_volve" +msgstr "Con_volución" + +#: plug-ins/common/van-gogh-lic.c:178 +msgid "Convolve" +msgstr "Convolución" + +#: plug-ins/common/van-gogh-lic.c:179 +msgid "With white noise" +msgstr "Con ruido blanco" + +#: plug-ins/common/van-gogh-lic.c:180 +msgid "With source image" +msgstr "Con imagen de origen" + +#: plug-ins/common/van-gogh-lic.c:186 +msgid "Effect i_mage" +msgstr "I_magen de efecto" + +#: plug-ins/common/van-gogh-lic.c:187 +msgid "Effect image" +msgstr "Imagen de efecto" + +#: plug-ins/common/van-gogh-lic.c:192 +msgid "Fil_ter length" +msgstr "Longitud del fil_tro" + +#: plug-ins/common/van-gogh-lic.c:193 +msgid "Filter length" +msgstr "Longitud del filtro" + +#: plug-ins/common/van-gogh-lic.c:198 +msgid "_Noise Magnitude" +msgstr "Magnitud del _ruido" + +#: plug-ins/common/van-gogh-lic.c:199 +msgid "Noise Magnitude" +msgstr "Magnitud del ruido" + +#: plug-ins/common/van-gogh-lic.c:204 +msgid "Inte_gration steps" +msgstr "Pasos de inte_gración" + +#: plug-ins/common/van-gogh-lic.c:205 +msgid "Integration steps" +msgstr "Pasos de integración" + +#: plug-ins/common/van-gogh-lic.c:210 +msgid "Minimum v_alue" +msgstr "V_alor mínimo" + +#: plug-ins/common/van-gogh-lic.c:211 +msgid "Minimum value" +msgstr "Valor mínimo" + +#: plug-ins/common/van-gogh-lic.c:216 +msgid "Ma_ximum value" +msgstr "Valor má_ximo" + +#: plug-ins/common/van-gogh-lic.c:217 +msgid "Maximum value" +msgstr "Valor máximo" + +#: plug-ins/common/van-gogh-lic.c:815 plug-ins/common/van-gogh-lic.c:876 +msgid "Van Gogh (LIC)" +msgstr "Van Gogh (LIC)" + #: plug-ins/common/warp.c:219 msgid "_Warp..." msgstr "_Deformar…" @@ -8163,7 +8213,7 @@ msgstr "Opciones básicas" msgid "Step size:" msgstr "Tamaño del paso:" -#: plug-ins/common/warp.c:525 plug-ins/ifs-compose/ifs-compose.c:1239 +#: plug-ins/common/warp.c:525 plug-ins/ifs-compose/ifs-compose.c:1245 msgid "Iterations:" msgstr "Iteraciones:" @@ -8233,7 +8283,7 @@ msgid "Vector mag:" msgstr "Magnitud del vector:" #. Angle -#: plug-ins/common/warp.c:790 plug-ins/ifs-compose/ifs-compose.c:677 +#: plug-ins/common/warp.c:790 plug-ins/ifs-compose/ifs-compose.c:683 msgid "Angle:" msgstr "Ángulo:" @@ -8371,10 +8421,8 @@ msgid "Create an image of a webpage" msgstr "Crea una imagen de una página web" #: plug-ins/common/web-page.c:139 -#, fuzzy -#| msgid "Enter location (URI):" msgid "Enter location (_URI)" -msgstr "Introducir dirección (URI):" +msgstr "Introducir dirección (_URI)" #: plug-ins/common/web-page.c:140 msgid "URL of the webpage to screenshot" @@ -8385,16 +8433,12 @@ msgid "_Width (pixels)" msgstr "_Anchura (píxeles)" #: plug-ins/common/web-page.c:146 -#, fuzzy -#| msgid "Adjust the spike length (in pixels)" msgid "The width of the screenshot (in pixels)" -msgstr "Ajusta la longitud de las puntas (en píxeles)" +msgstr "El ancho de la captura de pantalla (en píxeles)" #: plug-ins/common/web-page.c:151 -#, fuzzy -#| msgid "Font size:" msgid "_Font size" -msgstr "Tamaño de la tipografía:" +msgstr "Tamaño de la tipogra_fía" #: plug-ins/common/web-page.c:152 #, fuzzy @@ -8455,17 +8499,17 @@ msgstr "Mapa de colores malo" #: plug-ins/file-bmp/bmp-load.c:242 plug-ins/file-bmp/bmp-load.c:252 #: plug-ins/file-bmp/bmp-load.c:260 plug-ins/file-bmp/bmp-load.c:269 -#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:491 -#: plug-ins/file-bmp/bmp-load.c:516 plug-ins/file-bmp/bmp-load.c:527 -#: plug-ins/file-bmp/bmp-load.c:535 plug-ins/file-bmp/bmp-load.c:544 -#: plug-ins/file-bmp/bmp-load.c:556 +#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:492 +#: plug-ins/file-bmp/bmp-load.c:517 plug-ins/file-bmp/bmp-load.c:528 +#: plug-ins/file-bmp/bmp-load.c:536 plug-ins/file-bmp/bmp-load.c:545 +#: plug-ins/file-bmp/bmp-load.c:557 #, c-format msgid "'%s' is not a valid BMP file" msgstr "«%s» no es un archivo BMP válido" #: plug-ins/file-bmp/bmp-load.c:298 plug-ins/file-bmp/bmp-load.c:325 -#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:398 -#: plug-ins/file-bmp/bmp-load.c:429 plug-ins/file-bmp/bmp-load.c:471 +#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:399 +#: plug-ins/file-bmp/bmp-load.c:430 plug-ins/file-bmp/bmp-load.c:472 #, c-format msgid "Error reading BMP file header from '%s'" msgstr "Ocurrió un error al leer cabecera del archivo BMP de «%s»" @@ -8475,16 +8519,16 @@ msgstr "Ocurrió un error al leer cabecera del archivo BMP de «%s»" msgid "Unsupported compression (%u) in BMP file from '%s'" msgstr "Compresión no soportada (%u) en el archivo BMP de «%s»" -#: plug-ins/file-bmp/bmp-load.c:673 +#: plug-ins/file-bmp/bmp-load.c:674 msgid "Unrecognized or invalid BMP compression format." msgstr "Formato de compresión BMP no reconocido o inválido." -#: plug-ins/file-bmp/bmp-load.c:720 +#: plug-ins/file-bmp/bmp-load.c:721 msgid "Unsupported or invalid bitdepth." msgstr "Profundidad de bits no soportada o no válida." -#: plug-ins/file-bmp/bmp-load.c:885 plug-ins/file-bmp/bmp-load.c:928 -#: plug-ins/file-bmp/bmp-load.c:982 +#: plug-ins/file-bmp/bmp-load.c:886 plug-ins/file-bmp/bmp-load.c:929 +#: plug-ins/file-bmp/bmp-load.c:983 msgid "The bitmap ends unexpectedly." msgstr "El mapa de bits finaliza inesperadamente." @@ -8590,7 +8634,7 @@ msgstr "" msgid "BMP format does not support multiple layers." msgstr "El formato BMP no soporta múltiples capas." -#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:187 +#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:201 msgid "DDS image" msgstr "Imagen DDS" @@ -8607,177 +8651,426 @@ msgid "Load mipmaps if present" msgstr "Cargar mipmaps si los hubiera" #: plug-ins/file-dds/dds.c:174 +msgid "Flip image _vertically" +msgstr "Voltear la imagen _verticalmente" + +#: plug-ins/file-dds/dds.c:175 +msgid "Flip the image vertically on import" +msgstr "Voltear la imagen verticalmente al importar" + +#: plug-ins/file-dds/dds.c:180 +msgid "Always use _transparency for BC1/DXT1" +msgstr "Usar siempre _transparencia para BC1/DXT1" + +#: plug-ins/file-dds/dds.c:181 +msgid "" +"Interprets transparency for BC1/DXT1 images even when DDPF_ALPHAPIXELS is " +"not set; if disabled, sets it to opaque black" +msgstr "" +"Interpreta la transparencia de las imágenes BC1/DXT1 incluso cuando " +"DDPF_ALPHAPIXELS no está establecido; si está desactivado, lo establece en " +"negro opaco" + +#: plug-ins/file-dds/dds.c:188 msgid "Automatically decode YCoCg/AE_xp images when detected" msgstr "Decodificar automáticamente imágenes YCoCg/AExp al detectarlas" -#: plug-ins/file-dds/dds.c:175 +#: plug-ins/file-dds/dds.c:189 msgid "Decode YCoCg/AExp images when detected" msgstr "Decodificar imágenes YCoCg/AExp al detectarlas" -#: plug-ins/file-dds/dds.c:326 +#: plug-ins/file-dds/dds.c:203 +msgid "DDS" +msgstr "DDS" + +#: plug-ins/file-dds/dds.c:207 plug-ins/file-dds/dds.c:208 +msgid "Saves files in DDS image format" +msgstr "Carga archivos en el formato de imagen DDS" + +#: plug-ins/file-dds/dds.c:221 +msgid "Compressio_n" +msgstr "Compresió_n" + +#: plug-ins/file-dds/dds.c:222 +msgid "Compression format" +msgstr "Formato de compresión" + +#: plug-ins/file-dds/dds.c:224 +msgid "BC1 / DXT1" +msgstr "BC1 / DXT1" + +#: plug-ins/file-dds/dds.c:225 +msgid "BC2 / DXT3" +msgstr "BC2 / DXT3" + +#: plug-ins/file-dds/dds.c:226 +msgid "BC3 / DXT5" +msgstr "BC3 / DXT5" + +#: plug-ins/file-dds/dds.c:227 +msgid "BC3nm / DXT5nm" +msgstr "BC3nm / DXT5nm" + +#: plug-ins/file-dds/dds.c:228 +msgid "BC4 / ATI1 (3Dc+)" +msgstr "BC4 / ATI1 (3Dc+)" + +#: plug-ins/file-dds/dds.c:229 +msgid "BC5 / ATI2 (3Dc)" +msgstr "BC5 / ATI2 (3Dc)" + +#: plug-ins/file-dds/dds.c:230 +msgid "RXGB (DXT5)" +msgstr "RXGB (DXT5)" + +#: plug-ins/file-dds/dds.c:231 +msgid "Alpha Exponent (DXT5)" +msgstr "Exponente alfa (DXT5)" + +#: plug-ins/file-dds/dds.c:232 +msgid "YCoCg (DXT5)" +msgstr "YCoCg (DXT5)" + +#: plug-ins/file-dds/dds.c:233 +msgid "YCoCg scaled (DXT5)" +msgstr "YCoCg escalado (DXT5)" + +#: plug-ins/file-dds/dds.c:239 +msgid "Use percept_ual error metric" +msgstr "Usar métrica de error precept_iva" + +#: plug-ins/file-dds/dds.c:240 +msgid "Use a perceptual error metric during compression" +msgstr "Usar una métrica de error preceptiva durante la compresión" + +#: plug-ins/file-dds/dds.c:246 +msgid "Pixel format" +msgstr "Formato de píxel" + +#. Create the combobox containing the presets +#: plug-ins/file-dds/dds.c:247 plug-ins/file-dds/dds.c:304 +#: plug-ins/file-dds/dds.c:320 plug-ins/file-webp/file-webp-dialog.c:80 +#: plug-ins/gradient-flare/gradient-flare.c:2599 +msgid "Default" +msgstr "Predeterminada" + +#: plug-ins/file-dds/dds.c:248 +msgid "RGB8" +msgstr "RGB8" + +#: plug-ins/file-dds/dds.c:249 +msgid "RGBA8" +msgstr "RGBA8" + +#: plug-ins/file-dds/dds.c:250 +msgid "BGR8" +msgstr "BGR8" + +#: plug-ins/file-dds/dds.c:251 +msgid "ABGR8" +msgstr "ABGR8" + +#: plug-ins/file-dds/dds.c:252 +msgid "R5G6B5" +msgstr "R5G6B5" + +#: plug-ins/file-dds/dds.c:253 +msgid "RGBA4" +msgstr "RGBA4" + +#: plug-ins/file-dds/dds.c:254 +msgid "RGB5A1" +msgstr "RGB5A1" + +#: plug-ins/file-dds/dds.c:255 +msgid "RGB10A2" +msgstr "RGB10A2" + +#: plug-ins/file-dds/dds.c:256 +msgid "R3G3B2" +msgstr "R3G3B2" + +#: plug-ins/file-dds/dds.c:257 +msgid "A8" +msgstr "A8" + +#: plug-ins/file-dds/dds.c:258 +msgid "L8" +msgstr "L8" + +#: plug-ins/file-dds/dds.c:259 +msgid "L8A8" +msgstr "L8A8" + +#: plug-ins/file-dds/dds.c:260 +msgid "AEXP" +msgstr "AEXP" + +#: plug-ins/file-dds/dds.c:261 +msgid "YCOCG" +msgstr "YCOCG" + +#: plug-ins/file-dds/dds.c:275 +msgid "Flip image _vertically on export" +msgstr "Voltear la imagen _verticalmente al exportar" + +#: plug-ins/file-dds/dds.c:276 +msgid "Flip the image vertically on export" +msgstr "Voltear la imagen verticalmente al exportar" + +#: plug-ins/file-dds/dds.c:281 +#, fuzzy +#| msgid "Clear transparent" +msgid "Set _transparent color" +msgstr "Limpiar transparencia" + +#: plug-ins/file-dds/dds.c:282 +#, fuzzy +#| msgid "Background transparent" +msgid "Make an indexed color transparent" +msgstr "Fondo transparente" + +#: plug-ins/file-dds/dds.c:287 +msgid "Transparent inde_x" +msgstr "Índi_ce transparente" + +#: plug-ins/file-dds/dds.c:288 +msgid "Index of transparent color or -1 to disable (for indexed images only)." +msgstr "" +"Índice del color transparente o -1 para desactivar (solo para imágenes " +"indexadas)." + +#: plug-ins/file-dds/dds.c:302 +msgid "F_ilter" +msgstr "F_iltro" + +#: plug-ins/file-dds/dds.c:303 +msgid "Filtering to use when generating mipmaps" +msgstr "Filtrado que utilizar al generar mipmaps" + +#: plug-ins/file-dds/dds.c:305 +msgid "Nearest" +msgstr "Más cercano" + +#: plug-ins/file-dds/dds.c:306 plug-ins/map-object/map-object-main.c:139 +msgid "Box" +msgstr "Caja" + +#: plug-ins/file-dds/dds.c:307 +msgid "Triangle" +msgstr "Triángulo" + +#: plug-ins/file-dds/dds.c:308 +msgid "Quadratic" +msgstr "Cuadrático" + +#: plug-ins/file-dds/dds.c:309 +#, fuzzy +#| msgid "Baseline" +msgid "B-Spline" +msgstr "Línea base" + +#: plug-ins/file-dds/dds.c:310 +msgid "Mitchell" +msgstr "Mitchell" + +#: plug-ins/file-dds/dds.c:311 +msgid "Lanczos" +msgstr "Lanczos" + +#: plug-ins/file-dds/dds.c:312 +#, fuzzy +#| msgid "Raise" +msgid "Kaiser" +msgstr "Elevar" + +#: plug-ins/file-dds/dds.c:318 +msgid "_Wrap mode" +msgstr "Modo en_volver" + +#: plug-ins/file-dds/dds.c:319 +msgid "Wrap mode to use when generating mipmaps" +msgstr "Modo de ajuste que utilizar al generar mipmaps" + +#: plug-ins/file-dds/dds.c:321 +msgid "Mirror" +msgstr "Reflejar" + +#: plug-ins/file-dds/dds.c:322 +msgid "Repeat" +msgstr "Repetir" + +#: plug-ins/file-dds/dds.c:323 +msgid "Clamp" +msgstr "Abrazadera" + +#: plug-ins/file-dds/dds.c:329 +msgid "Appl_y gamma correction" +msgstr "Apl_icar corrección de gamma" + +#: plug-ins/file-dds/dds.c:330 +msgid "Use gamma correct mipmap filtering" +msgstr "Utilizar filtrado de mipmap con corrección de gamma" + +#: plug-ins/file-dds/dds.c:335 +msgid "Use sRG_B colorspace" +msgstr "Usar espacio de colores sRG_B" + +#: plug-ins/file-dds/dds.c:336 +#, fuzzy +#| msgid "Use s_RGB colorspace" +msgid "Use sRGB colorspace for gamma correction" +msgstr "Usar espacio de colores s_RGB" + +#: plug-ins/file-dds/dds.c:341 plug-ins/flame/flame.c:205 +msgid "_Gamma" +msgstr "_Gamma" + +#: plug-ins/file-dds/dds.c:342 +msgid "Gamma value to use for gamma correction (e.g. 2.2)" +msgstr "" +"Valor gamma que utilizar para la corrección de gamma (por ejemplo, 2.2)" + +#: plug-ins/file-dds/dds.c:347 +msgid "Preserve al_pha test coverage" +msgstr "Preservar la cobertura de la _prueba alfa" + +#: plug-ins/file-dds/dds.c:348 +msgid "Preserve alpha test coverage for alpha channel maps" +msgstr "Preservar la cobertura de la prueba alfa para los mapas de canal alfa" + +#: plug-ins/file-dds/dds.c:354 +msgid "Alp_ha test threshold" +msgstr "Umbral de prueba al_fa" + +#: plug-ins/file-dds/dds.c:355 +msgid "" +"Alpha test threshold value for which alpha test coverage should be preserved" +msgstr "" +"Valor umbral de la prueba alfa para el cual la cobertura de la prueba alfa " +"debe ser preservada" + +#: plug-ins/file-dds/dds.c:371 msgid "Decode YCoCg" msgstr "Decodificar YCoCg" -#: plug-ins/file-dds/dds.c:330 plug-ins/file-dds/dds.c:331 +#: plug-ins/file-dds/dds.c:375 plug-ins/file-dds/dds.c:376 msgid "Converts YCoCg encoded pixels to RGB" msgstr "Convierte píxeles codificados YCoCg a RGB" -#: plug-ins/file-dds/dds.c:348 +#: plug-ins/file-dds/dds.c:393 msgid "Decode YCoCg (scaled)" msgstr "Decodificar YCoCg (escalado)" -#: plug-ins/file-dds/dds.c:352 plug-ins/file-dds/dds.c:354 +#: plug-ins/file-dds/dds.c:397 plug-ins/file-dds/dds.c:399 msgid "Converts YCoCg (scaled) encoded pixels to RGB" msgstr "Convierte píxeles codificados YCoCg (escalados) a RGB" -#: plug-ins/file-dds/dds.c:372 +#: plug-ins/file-dds/dds.c:417 msgid "Decode Alpha exponent" msgstr "Decodificar exponente Alfa" -#: plug-ins/file-dds/dds.c:378 plug-ins/file-dds/dds.c:376 +#: plug-ins/file-dds/dds.c:423 plug-ins/file-dds/dds.c:421 msgid "Converts alpha exponent encoded pixels to RGB" msgstr "Convierte píxeles codificados con exponente alfa a RGB" -#: plug-ins/file-dds/ddsread.c:222 +#: plug-ins/file-dds/ddsread.c:273 +#, fuzzy, c-format +#| msgid "Unsupported compression mode: %d" +msgid "Unsupported uncompressed FOURCC type %u" +msgstr "Modo de compresión no soportado: %d" + +#: plug-ins/file-dds/ddsread.c:518 #, fuzzy #| msgid "Invalid keyword chunk header" msgid "Invalid or corrupted DDS header" msgstr "La parte del encabezado sobre la palabra clave no es válida" -#: plug-ins/file-dds/ddsread.c:382 +#: plug-ins/file-dds/ddsread.c:527 msgid "Could not allocate a new image." msgstr "No se puede reservar una imagen nueva." -#: plug-ins/file-dds/ddsread.c:393 +#: plug-ins/file-dds/ddsread.c:538 msgid "Error reading palette." msgstr "Error al leer la paleta." -#: plug-ins/file-dds/ddsread.c:676 +#: plug-ins/file-dds/ddsread.c:824 msgid "Invalid DDS format magic number." msgstr "Formato de número mágico DDS no válido." -#: plug-ins/file-dds/ddsread.c:755 +#: plug-ins/file-dds/ddsread.c:912 #, c-format msgid "Invalid bpp value for RGB data: %d" msgstr "Valor bpp para datos de RGB no válido: %d" -#: plug-ins/file-dds/ddsread.c:766 +#: plug-ins/file-dds/ddsread.c:923 #, c-format msgid "Invalid bpp value for luminance data: %d" msgstr "Valor bpp para datos de luminosidad no válido: %d" -#: plug-ins/file-dds/ddsread.c:817 +#: plug-ins/file-dds/ddsread.c:974 msgid "Invalid pixel format." msgstr "Formato de píxel no válido." -#: plug-ins/file-dds/ddsread.c:986 +#: plug-ins/file-dds/ddsread.c:1234 #, c-format msgid "Unsupported DXGI format (%d)" msgstr "Formato DXGI (%d) no soportado" -#: plug-ins/file-dds/ddsread.c:1151 plug-ins/file-dds/ddsread.c:1190 +#: plug-ins/file-dds/ddsread.c:1389 +#, fuzzy, c-format +#| msgid "Unsupported file format version: %d" +msgid "Unsupported value for bytes per pixel: %d" +msgstr "Versión del formato de archivo no soportada: %d" + +#: plug-ins/file-dds/ddsread.c:1444 plug-ins/file-dds/ddsread.c:1504 +#: plug-ins/file-dds/ddsread.c:1525 +msgid "Requested data exceeds size of file.\n" +msgstr "Los datos solicitados superan el tamaño del archivo.\n" + +#: plug-ins/file-dds/ddsread.c:1452 plug-ins/file-dds/ddsread.c:1531 msgid "Unexpected EOF.\n" msgstr "EOF no esperado.\n" -#: plug-ins/file-dds/ddsread.c:1530 +#: plug-ins/file-dds/ddsread.c:2019 msgid "Open DDS" msgstr "Abrir DDS" -#: plug-ins/file-dds/ddswrite.c:1984 -msgid "Export Image as DDS" -msgstr "Exportar imagen como DDS" - -#: plug-ins/file-dds/ddswrite.c:2015 -msgid "_Compression:" -msgstr "_Compresión:" - -#: plug-ins/file-dds/ddswrite.c:2020 -msgid "Use _perceptual error metric" -msgstr "Usar métrica de error _preceptiva" - -#: plug-ins/file-dds/ddswrite.c:2042 -msgid "_Format:" -msgstr "_Formato:" - -#: plug-ins/file-dds/ddswrite.c:2046 -msgid "Selected layer" -msgstr "Capa seleccionada" - -#: plug-ins/file-dds/ddswrite.c:2047 -msgid "All visible layers" -msgstr "Todas las capas visibles" - -#: plug-ins/file-dds/ddswrite.c:2048 -msgid "As cube map" -msgstr "Como mapa de cubo" - -#: plug-ins/file-dds/ddswrite.c:2049 -msgid "As volume map" -msgstr "Como mapa de volumen" - -#: plug-ins/file-dds/ddswrite.c:2050 -msgid "As texture array" -msgstr "Como matriz de texturas" - -#: plug-ins/file-dds/ddswrite.c:2055 -msgid "_Save:" -msgstr "_Guardar:" - -#: plug-ins/file-dds/ddswrite.c:2068 -msgid "Flip image _vertically on export" -msgstr "Voltear la imagen _verticalmente al exportar" - -#: plug-ins/file-dds/ddswrite.c:2071 -msgid "No mipmaps" -msgstr "Sin mapas MIP" - -#: plug-ins/file-dds/ddswrite.c:2072 -msgid "Generate mipmaps" -msgstr "Generar mapas MIP" - -#: plug-ins/file-dds/ddswrite.c:2073 -msgid "Use existing mipmaps" -msgstr "Usar los mapas MIP existentes" - -#: plug-ins/file-dds/ddswrite.c:2078 -msgid "_Mipmaps:" -msgstr "_Mipmaps:" - -#: plug-ins/file-dds/ddswrite.c:2096 -msgid "Transparent index:" -msgstr "Índice transparente:" - -#: plug-ins/file-dds/ddswrite.c:2104 +#: plug-ins/file-dds/ddswrite.c:2022 msgid "Mipmap Options" msgstr "Opciones del mipmap" -#: plug-ins/file-dds/ddswrite.c:2127 -msgid "F_ilter:" -msgstr "F_iltro:" +#: plug-ins/file-dds/ddswrite.c:2037 +msgid "Selected layer" +msgstr "Capa seleccionada" -#: plug-ins/file-dds/ddswrite.c:2139 -msgid "_Wrap mode:" -msgstr "Modo en_volver:" +#: plug-ins/file-dds/ddswrite.c:2038 +msgid "All visible layers" +msgstr "Todas las capas visibles" -#: plug-ins/file-dds/ddswrite.c:2144 -msgid "Appl_y gamma correction" -msgstr "Apl_icar corrección de gamma" +#: plug-ins/file-dds/ddswrite.c:2039 +msgid "As cube map" +msgstr "Como mapa de cubo" -#: plug-ins/file-dds/ddswrite.c:2148 -msgid "Use s_RGB colorspace" -msgstr "Usar espacio de colores s_RGB" +#: plug-ins/file-dds/ddswrite.c:2040 +msgid "As volume map" +msgstr "Como mapa de volumen" -#: plug-ins/file-dds/ddswrite.c:2154 plug-ins/flame/flame.c:1161 -msgid "_Gamma:" -msgstr "_Gamma:" +#: plug-ins/file-dds/ddswrite.c:2041 +msgid "As texture array" +msgstr "Como matriz de texturas" -#: plug-ins/file-dds/ddswrite.c:2159 -msgid "Preserve alpha _test coverage" -msgstr "Preservar la cober_tura de la prueba alfa" +#: plug-ins/file-dds/ddswrite.c:2053 +msgid "No mipmaps" +msgstr "Sin mapas MIP" -#: plug-ins/file-dds/ddswrite.c:2166 -msgid "_Alpha test threshold:" -msgstr "Umbral de prueba _alfa:" +#: plug-ins/file-dds/ddswrite.c:2054 +msgid "Generate mipmaps" +msgstr "Generar mapas MIP" + +#: plug-ins/file-dds/ddswrite.c:2055 +msgid "Use existing mipmaps" +msgstr "Usar los mapas MIP existentes" #: plug-ins/file-exr/file-exr.c:112 msgid "Loads files in the OpenEXR file format" @@ -9358,7 +9651,7 @@ msgstr "Coma flotante" msgid "JPEG image" msgstr "Imagen JPEG" -#: plug-ins/file-jpeg/jpeg.c:196 plug-ins/file-tiff/file-tiff.c:227 +#: plug-ins/file-jpeg/jpeg.c:196 plug-ins/file-tiff/file-tiff.c:244 msgid "JPEG" msgstr "JPEG" @@ -9568,28 +9861,28 @@ msgstr "Anchura de la máscara de capa no soportada o no válida: %d" msgid "Unsupported or invalid layer mask size: %dx%d" msgstr "Tamaño de la máscara de capa no soportado o no válido: %dx%d" -#: plug-ins/file-psd/psd-load.c:2066 plug-ins/file-psd/psd-load.c:2706 +#: plug-ins/file-psd/psd-load.c:2066 plug-ins/file-psd/psd-load.c:2722 #, c-format msgid "Unsupported compression mode: %d" msgstr "Modo de compresión no soportado: %d" -#: plug-ins/file-psd/psd-load.c:2899 +#: plug-ins/file-psd/psd-load.c:2915 msgid "Extra" msgstr "Extra" -#: plug-ins/file-psd/psd-load.c:3099 +#: plug-ins/file-psd/psd-load.c:3115 msgid "Unsupported or invalid channel size" msgstr "Tamaño del canal no soportado o no válido" -#: plug-ins/file-psd/psd-load.c:3168 +#: plug-ins/file-psd/psd-load.c:3184 msgid "Failed to decompress data" msgstr "Error al descomprimir los datos" -#: plug-ins/file-psd/psd-load.c:3549 +#: plug-ins/file-psd/psd-load.c:3565 msgid "Duotone Import" msgstr "Importación Bitonal" -#: plug-ins/file-psd/psd-load.c:3550 +#: plug-ins/file-psd/psd-load.c:3566 msgid "" "Image will be imported as Grayscale.\n" "Duotone color space data has been saved\n" @@ -9599,11 +9892,11 @@ msgstr "" "Se han guardado los datos del espacio de color Bitonal\n" "y se pueden reaplicar en la exportación." -#: plug-ins/file-psd/psd-load.c:3572 plug-ins/file-psd/psd-save.c:2665 +#: plug-ins/file-psd/psd-load.c:3588 plug-ins/file-psd/psd-save.c:2665 msgid "Compatibility Notice" msgstr "Aviso de compatibilidad" -#: plug-ins/file-psd/psd-load.c:3573 +#: plug-ins/file-psd/psd-load.c:3589 msgid "" "This PSD file contains features that\n" "are not yet fully supported in PIKA:" @@ -9934,19 +10227,27 @@ msgstr "Compresión RLE" msgid "Aggressive RLE (not supported by SGI)" msgstr "RLE agresivo (no soportado por SGI)" -#: plug-ins/file-tiff/file-tiff.c:162 plug-ins/file-tiff/file-tiff.c:191 +#: plug-ins/file-tiff/file-tiff.c:162 plug-ins/file-tiff/file-tiff.c:208 msgid "TIFF or BigTIFF image" msgstr "Imagen TIFF o BigTIFF" -#: plug-ins/file-tiff/file-tiff.c:207 +#. 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. +#: plug-ins/file-tiff/file-tiff.c:197 plug-ins/file-tiff/file-tiff-load.c:2600 +msgid "_Keep empty space around imported layers" +msgstr "_Mantener espacio vacío alrededor de capas importadas" + +#: plug-ins/file-tiff/file-tiff.c:224 msgid "TIFF" msgstr "TIFF" -#: plug-ins/file-tiff/file-tiff.c:214 +#: plug-ins/file-tiff/file-tiff.c:231 msgid "Export in _BigTIFF variant file format" msgstr "Exportar en la variante de formato de archivo _BigTIFF" -#: plug-ins/file-tiff/file-tiff.c:215 +#: plug-ins/file-tiff/file-tiff.c:232 msgid "" "The BigTIFF variant file format uses 64-bit offsets, hence supporting over " "4GiB files and bigger" @@ -9954,37 +10255,35 @@ msgstr "" "La variante del formato de archivo BigTIFF utiliza desplazamientos de 64 " "bits, por lo que admite archivos de más de 4 GiB y más grandes" -#: plug-ins/file-tiff/file-tiff.c:221 +#: plug-ins/file-tiff/file-tiff.c:238 msgid "Co_mpression" msgstr "_Compresión" -#: plug-ins/file-tiff/file-tiff.c:222 -#, fuzzy -#| msgid "Compression _type" +#: plug-ins/file-tiff/file-tiff.c:239 msgid "Compression type" -msgstr "_Tipo de compresión" +msgstr "Tipo de compresión" -#: plug-ins/file-tiff/file-tiff.c:224 +#: plug-ins/file-tiff/file-tiff.c:241 msgid "LZW" msgstr "LZW" -#: plug-ins/file-tiff/file-tiff.c:225 +#: plug-ins/file-tiff/file-tiff.c:242 msgid "Pack Bits" msgstr "Empaquetar bits" -#: plug-ins/file-tiff/file-tiff.c:226 +#: plug-ins/file-tiff/file-tiff.c:243 msgid "Deflate" msgstr "Desinflar" -#: plug-ins/file-tiff/file-tiff.c:228 +#: plug-ins/file-tiff/file-tiff.c:245 msgid "CCITT Group 3 fax" msgstr "Fax CCITT grupo 3" -#: plug-ins/file-tiff/file-tiff.c:229 +#: plug-ins/file-tiff/file-tiff.c:246 msgid "CCITT Group 4 fax" msgstr "Fax CCITT grupo 4" -#: plug-ins/file-tiff/file-tiff.c:235 +#: plug-ins/file-tiff/file-tiff.c:252 msgid "" "Keep the color data masked by an alpha channel intact (do not store " "premultiplied components)" @@ -9992,52 +10291,52 @@ msgstr "" "Mantener intactos los datos de color enmascarados por un canal alfa (no " "almacenar componentes premultiplicados)" -#: plug-ins/file-tiff/file-tiff.c:242 +#: plug-ins/file-tiff/file-tiff.c:259 #, fuzzy #| msgid "Export a CMYK PSD image using the soft-proofing color profile" msgid "Create a CMYK TIFF image using the soft-proofing color profile" msgstr "Exportar una imagen PSD CMYK utilizando el perfil de color de prueba" -#: plug-ins/file-tiff/file-tiff.c:247 +#: plug-ins/file-tiff/file-tiff.c:264 msgid "Save La_yers" msgstr "Guardar ca_pas" -#: plug-ins/file-tiff/file-tiff.c:248 +#: plug-ins/file-tiff/file-tiff.c:265 msgid "Save Layers" msgstr "Guardar capas" -#: plug-ins/file-tiff/file-tiff.c:253 +#: plug-ins/file-tiff/file-tiff.c:270 msgid "Crop L_ayers" msgstr "Recortar c_apas" -#: plug-ins/file-tiff/file-tiff.c:254 +#: plug-ins/file-tiff/file-tiff.c:271 msgid "Crop Layers" msgstr "Recortar capas" -#: plug-ins/file-tiff/file-tiff.c:259 +#: plug-ins/file-tiff/file-tiff.c:276 msgid "Save _GeoTIFF data" msgstr "Guardar los datos _GeoTIFF" -#: plug-ins/file-tiff/file-tiff.c:260 +#: plug-ins/file-tiff/file-tiff.c:277 msgid "Save GeoTIFF data" msgstr "Guardar los datos GeoTIFF" -#: plug-ins/file-tiff/file-tiff.c:446 +#: plug-ins/file-tiff/file-tiff.c:463 msgid "\"Save layers\" option not set while trying to export multiple layers." msgstr "" "La opción «Guardar capas» no está activada al intentar exportar múltiples " "capas." -#: plug-ins/file-tiff/file-tiff-load.c:298 +#: plug-ins/file-tiff/file-tiff-load.c:299 msgid "Not a TIFF image or image is corrupt." msgstr "No es una imagen TIFF o la imagen está corrupta." -#: plug-ins/file-tiff/file-tiff-load.c:329 +#: plug-ins/file-tiff/file-tiff-load.c:326 #, c-format msgid "TIFF '%s' does not contain any directories" msgstr "El TIFF «%s» no contiene ninguna carpeta" -#: plug-ins/file-tiff/file-tiff-load.c:336 +#: plug-ins/file-tiff/file-tiff-load.c:333 #, c-format msgid "" "TIFF '%s' directory count by header failed though there seems to be %d page. " @@ -10052,7 +10351,7 @@ msgstr[1] "" "La cuenta de la carpeta del TIFF «%s» del encabezado falló aunque parece " "haber %d páginas. Se intentará cargar el archivo suponiendo esto." -#: plug-ins/file-tiff/file-tiff-load.c:467 +#: plug-ins/file-tiff/file-tiff-load.c:464 msgid "Extra channels with unspecified data." msgstr "Canales adicionales con datos sin especificar." @@ -10063,17 +10362,17 @@ msgstr "Canales adicionales con datos sin especificar." #. * can be considered non-conformant. #. * Let's ask what to do with the channel. #. -#: plug-ins/file-tiff/file-tiff-load.c:479 +#: plug-ins/file-tiff/file-tiff-load.c:476 msgid "Non-conformant TIFF: extra channels without 'ExtraSamples' field." msgstr "TIFF no conforme: canales adicionales sin el campo «ExtraSamples»." -#: plug-ins/file-tiff/file-tiff-load.c:573 +#: plug-ins/file-tiff/file-tiff-load.c:567 #, c-format msgid "Couldn't read page %d of %d. Image might be corrupt.\n" msgstr "" "No se pudo leer la página %d de %d. Puede que la imagen esté corrupta.\n" -#: plug-ins/file-tiff/file-tiff-load.c:602 +#: plug-ins/file-tiff/file-tiff-load.c:596 #, c-format msgid "" "This image has a linear color profile but it was not set on the first layer. " @@ -10083,7 +10382,7 @@ msgstr "" "primera capa. Las capas debajo de la capa n.º %d se interpretarán como no " "lineal." -#: plug-ins/file-tiff/file-tiff-load.c:610 +#: plug-ins/file-tiff/file-tiff-load.c:604 msgid "" "This image has multiple color profiles. We will use the first one. If this " "leads to incorrect results you should consider loading each layer as a " @@ -10093,36 +10392,36 @@ msgstr "" "llevara a resultados incorrectos debería considerar cargar cada capa como " "una imagen separada." -#: plug-ins/file-tiff/file-tiff-load.c:622 +#: plug-ins/file-tiff/file-tiff-load.c:616 #, c-format msgid "Suspicious bit depth: %d for page %d. Image may be corrupt." msgstr "" "Profundidad de bits sospechosa: %d en la página %d. Puede que la imagen esté " "dañada." -#: plug-ins/file-tiff/file-tiff-load.c:696 +#: plug-ins/file-tiff/file-tiff-load.c:690 #, c-format msgid "Unsupported bit depth: %d for page %d." msgstr "Profundidad de bits no soportada: %d en la página %d." -#: plug-ins/file-tiff/file-tiff-load.c:711 +#: plug-ins/file-tiff/file-tiff-load.c:705 #, c-format msgid "Could not get image width from '%s'" msgstr "No se pudo obtener la anchura de la imagen de «%s»" -#: plug-ins/file-tiff/file-tiff-load.c:719 +#: plug-ins/file-tiff/file-tiff-load.c:713 #, c-format msgid "Could not get image length from '%s'" msgstr "No se pudo obtener la longitud de la imagen de «%s»" -#: plug-ins/file-tiff/file-tiff-load.c:727 +#: plug-ins/file-tiff/file-tiff-load.c:721 #, c-format msgid "Invalid image dimensions (%u x %u) for page %d. Image may be corrupt." msgstr "" "Dimensiones (%u x %u) de la imagen no válidas en la página %d. Puede que la " "imagen esté dañada." -#: plug-ins/file-tiff/file-tiff-load.c:748 +#: plug-ins/file-tiff/file-tiff-load.c:742 #, c-format msgid "" "Could not get photometric from '%s'. Image is CCITT compressed, assuming min-" @@ -10131,7 +10430,7 @@ msgstr "" "No se pudo obtener la fotometría de «%s». La imagen está comprimida en CCIT. " "Se supondrá que el mínimo es blanco" -#: plug-ins/file-tiff/file-tiff-load.c:755 +#: plug-ins/file-tiff/file-tiff-load.c:749 #, c-format msgid "Could not get photometric from '%s'. Assuming min-is-black" msgstr "" @@ -10140,7 +10439,7 @@ msgstr "" #. In non-interactive mode, we assume unassociated alpha if unspecified. #. * We don't output messages in interactive mode as the user #. * has already the ability to choose through a dialog. -#: plug-ins/file-tiff/file-tiff-load.c:787 +#: plug-ins/file-tiff/file-tiff-load.c:781 #, c-format msgid "" "Alpha channel type not defined for %s. Assuming alpha is not premultiplied" @@ -10148,7 +10447,7 @@ msgstr "" "El tipo de canal alfa no está definido para %s. Se supondrá que alfa no está " "premultiplicado" -#: plug-ins/file-tiff/file-tiff-load.c:812 +#: plug-ins/file-tiff/file-tiff-load.c:806 #, c-format msgid "" "Image '%s' does not conform to the TIFF specification: ExtraSamples field is " @@ -10159,44 +10458,44 @@ msgstr "" "ExtraSamples no está definido, sin embargo hay canales adicionales. Se " "supondrá que el primer canal adicional es alfa sin premultiplicar." -#: plug-ins/file-tiff/file-tiff-load.c:1101 +#: plug-ins/file-tiff/file-tiff-load.c:1095 #, c-format msgid "Invalid or unknown compression %u. Setting compression to none." msgstr "" "Compresión %u no válida o desconocida. Estableciendo la compresión a ninguna." -#: plug-ins/file-tiff/file-tiff-load.c:1159 +#: plug-ins/file-tiff/file-tiff-load.c:1153 #, c-format msgid "Could not create a new image: %s" msgstr "No se pudo crear una imagen nueva: %s" -#: plug-ins/file-tiff/file-tiff-load.c:1329 +#: plug-ins/file-tiff/file-tiff-load.c:1323 #, c-format msgid "Unknown resolution unit type %d, assuming dpi" msgstr "Tipo de unidad de resolución %d desconocido, se supondrá dpi" #. no res unit tag #. old AppleScan software produces these -#: plug-ins/file-tiff/file-tiff-load.c:1339 +#: plug-ins/file-tiff/file-tiff-load.c:1333 msgid "Warning: resolution specified without unit type, assuming dpi" msgstr "" "Advertencia: se especificó la resolución sin un tipo de unidad, se supondrá " "dpi" #. xres but no yres -#: plug-ins/file-tiff/file-tiff-load.c:1347 +#: plug-ins/file-tiff/file-tiff-load.c:1341 msgid "Warning: no y resolution info, assuming same as x" msgstr "" "Advertencia: no hay información sobre la resolución de «y», se supondrá la " "misma que «x»" -#: plug-ins/file-tiff/file-tiff-load.c:1364 +#: plug-ins/file-tiff/file-tiff-load.c:1358 msgid "Invalid image resolution info, using default" msgstr "" "Información sobre la resolución de la imagen no válida, utilizando el valor " "predeterminado" -#: plug-ins/file-tiff/file-tiff-load.c:1423 +#: plug-ins/file-tiff/file-tiff-load.c:1417 #, c-format msgid "Could not get colormaps from '%s'" msgstr "No se pudieron obtener los mapas de color de «%s»" @@ -10206,24 +10505,24 @@ msgstr "No se pudieron obtener los mapas de color de «%s»" #. * and can cause PIKA to become unresponsive and/or stuck. #. * See m2-d0f86ab189cbe900ec389ca6d7464713.tif from imagetestsuite #. -#: plug-ins/file-tiff/file-tiff-load.c:1511 +#: plug-ins/file-tiff/file-tiff-load.c:1505 #, c-format msgid "Suspicious number of extra channels: %d. Possibly corrupt image." msgstr "Número sospechoso de canales extra: %d. Imagen posiblemente corrupta." -#: plug-ins/file-tiff/file-tiff-load.c:1573 +#: plug-ins/file-tiff/file-tiff-load.c:1567 msgid "TIFF Channel" msgstr "Canal TIFF" -#: plug-ins/file-tiff/file-tiff-load.c:1726 +#: plug-ins/file-tiff/file-tiff-load.c:1720 #, c-format msgid "No data could be read from TIFF '%s'. The file is probably corrupted." msgstr "" "No se pudo leer ningún dato del TIFF «%s». Es probable que el archivo esté " "dañado." -#: plug-ins/file-tiff/file-tiff-load.c:1761 -#: plug-ins/file-tiff/file-tiff-load.c:1804 +#: plug-ins/file-tiff/file-tiff-load.c:1755 +#: plug-ins/file-tiff/file-tiff-load.c:1798 #, c-format msgid "" "Error trying to open temporary %s file '%s' for tiff metadata loading: %s" @@ -10231,62 +10530,54 @@ msgstr "" "Error al intentar abrir el archivo %s temporal «%s» para la carga de " "metadatos tiff: %s" -#: plug-ins/file-tiff/file-tiff-load.c:1880 +#: plug-ins/file-tiff/file-tiff-load.c:1874 #, c-format msgid "%s: Unsupported image format, no RGBA loader available" msgstr "" "%s: formato de imagen no admitido, no hay un cargador de RGBA disponible" -#: plug-ins/file-tiff/file-tiff-load.c:1995 -#: plug-ins/file-tiff/file-tiff-load.c:2192 +#: plug-ins/file-tiff/file-tiff-load.c:1989 +#: plug-ins/file-tiff/file-tiff-load.c:2186 #, c-format msgid "Reading tile failed. Image may be corrupt at line %d." msgstr "" "Falló al leer la tesela. Puede que la imagen esté corrupta en la línea %d." #. Error reading scanline, stop loading -#: plug-ins/file-tiff/file-tiff-load.c:2004 -#: plug-ins/file-tiff/file-tiff-load.c:2201 +#: plug-ins/file-tiff/file-tiff-load.c:1998 +#: plug-ins/file-tiff/file-tiff-load.c:2195 #, c-format msgid "Reading scanline failed. Image may be corrupt at line %d." msgstr "" "Falló al leer la línea de exploración. Puede que la imagen esté corrupta en " "la línea %d." -#: plug-ins/file-tiff/file-tiff-load.c:2551 +#: plug-ins/file-tiff/file-tiff-load.c:2545 msgid "Import from TIFF" msgstr "Importar desde TIFF" -#: plug-ins/file-tiff/file-tiff-load.c:2556 +#: plug-ins/file-tiff/file-tiff-load.c:2550 #: plug-ins/metadata/metadata-editor.c:5533 msgid "_Import" msgstr "_Importar" -#: plug-ins/file-tiff/file-tiff-load.c:2572 +#: plug-ins/file-tiff/file-tiff-load.c:2566 msgid "_Show reduced images" msgstr "_Mostrar imágenes reducidas" -#. 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. -#: plug-ins/file-tiff/file-tiff-load.c:2606 -msgid "_Keep empty space around imported layers" -msgstr "_Mantener espacio vacío alrededor de capas importadas" - -#: plug-ins/file-tiff/file-tiff-load.c:2623 +#: plug-ins/file-tiff/file-tiff-load.c:2617 msgid "Process extra channel as:" msgstr "Procesar canal adicional como:" -#: plug-ins/file-tiff/file-tiff-load.c:2626 +#: plug-ins/file-tiff/file-tiff-load.c:2620 msgid "_Non-premultiplied alpha" msgstr "Alfa _no premultiplicado" -#: plug-ins/file-tiff/file-tiff-load.c:2627 +#: plug-ins/file-tiff/file-tiff-load.c:2621 msgid "Pre_multiplied alpha" msgstr "Alfa pre_multiplicado" -#: plug-ins/file-tiff/file-tiff-load.c:2628 +#: plug-ins/file-tiff/file-tiff-load.c:2622 msgid "Channe_l" msgstr "Cana_l" @@ -10454,12 +10745,6 @@ msgstr "(sin fotogramas clave)" msgid "(all frames are keyframes)" msgstr "(todos los fotogramas son fotogramas clave)" -#. Create the combobox containing the presets -#: plug-ins/file-webp/file-webp-dialog.c:80 -#: plug-ins/gradient-flare/gradient-flare.c:2599 -msgid "Default" -msgstr "Predeterminada" - #: plug-ins/file-webp/file-webp-dialog.c:81 msgid "Picture" msgstr "Imagen" @@ -10567,233 +10852,218 @@ msgstr "No se pudo abrir «%s» para escritura: %s" msgid "WebP error: '%s'" msgstr "Error de WebP: «%s»" -#: plug-ins/flame/flame.c:175 +#: plug-ins/flame/flame.c:180 msgid "_Flame..." msgstr "_Llama…" # Jopé. :-) FVD -#: plug-ins/flame/flame.c:180 +#: plug-ins/flame/flame.c:185 msgid "Create cosmic recursive fractal flames" msgstr "Crear llamas cósmicas fractales recursivas" -#: plug-ins/flame/flame.c:284 +#: plug-ins/flame/flame.c:195 plug-ins/flame/flame.c:210 +#: plug-ins/flame/flame.c:220 +msgid "_Brightness" +msgstr "_Brillo" + +#: plug-ins/flame/flame.c:200 +msgid "Co_ntrast" +msgstr "Co_ntraste" + +#: plug-ins/flame/flame.c:215 +msgid "Spa_tial oversample" +msgstr "Sobremuestra es_pacial" + +#: plug-ins/flame/flame.c:225 +msgid "_Zoom" +msgstr "A_cercamiento" + +#: plug-ins/flame/flame.c:230 +msgid "_X" +msgstr "_X" + +#: plug-ins/flame/flame.c:235 +msgid "_Y" +msgstr "_Y" + +#: plug-ins/flame/flame.c:350 msgid "Drawing flame" msgstr "Dibujando llama" -#: plug-ins/flame/flame.c:468 +#: plug-ins/flame/flame.c:534 #, c-format msgid "'%s' is not a regular file" msgstr "%s: no es un archivo normal" -#: plug-ins/flame/flame.c:712 +#: plug-ins/flame/flame.c:823 msgid "Edit Flame" msgstr "Editar llama" -#: plug-ins/flame/flame.c:735 +#: plug-ins/flame/flame.c:846 msgid "Directions" msgstr "Direcciones" -#: plug-ins/flame/flame.c:772 +#: plug-ins/flame/flame.c:884 msgid "Controls" msgstr "Controles" -#: plug-ins/flame/flame.c:780 +#: plug-ins/flame/flame.c:892 msgid "_Speed:" msgstr "Velo_cidad:" -#: plug-ins/flame/flame.c:796 +#: plug-ins/flame/flame.c:909 msgid "_Randomize" msgstr "A_leatorizar" -#: plug-ins/flame/flame.c:808 +#: plug-ins/flame/flame.c:921 msgid "Same" msgstr "El mismo" -#: plug-ins/flame/flame.c:809 plug-ins/pikaressionist/orientation.c:156 +#: plug-ins/flame/flame.c:922 plug-ins/pikaressionist/orientation.c:156 #: plug-ins/pikaressionist/size.c:163 msgid "Random" msgstr "Aleatorio" -#: plug-ins/flame/flame.c:810 plug-ins/lighting/lighting-main.c:163 +#: plug-ins/flame/flame.c:923 plug-ins/lighting/lighting-main.c:163 msgid "Linear" msgstr "Lineal" -#: plug-ins/flame/flame.c:811 plug-ins/lighting/lighting-main.c:165 +#: plug-ins/flame/flame.c:924 plug-ins/lighting/lighting-main.c:165 msgid "Sinusoidal" msgstr "Sinuosidal" -#: plug-ins/flame/flame.c:812 plug-ins/lighting/lighting-main.c:166 +#: plug-ins/flame/flame.c:925 plug-ins/lighting/lighting-main.c:166 msgid "Spherical" msgstr "Esférico" -#: plug-ins/flame/flame.c:813 +#: plug-ins/flame/flame.c:926 msgid "Swirl" msgstr "Remolino" -#: plug-ins/flame/flame.c:814 +#: plug-ins/flame/flame.c:927 msgid "Horseshoe" msgstr "Herradura" -#: plug-ins/flame/flame.c:815 plug-ins/gfig/gfig-dialog.c:1441 +#: plug-ins/flame/flame.c:928 plug-ins/gfig/gfig-dialog.c:1441 msgid "Polar" msgstr "Polar" -#: plug-ins/flame/flame.c:816 +#: plug-ins/flame/flame.c:929 msgid "Bent" msgstr "Torcimiento" -#: plug-ins/flame/flame.c:817 +#: plug-ins/flame/flame.c:930 msgid "Handkerchief" msgstr "Pañuelo (handkerchief)" -#: plug-ins/flame/flame.c:818 +#: plug-ins/flame/flame.c:931 msgid "Heart" msgstr "Corazón" -#: plug-ins/flame/flame.c:819 +#: plug-ins/flame/flame.c:932 msgid "Disc" msgstr "Círculo" -#: plug-ins/flame/flame.c:821 +#: plug-ins/flame/flame.c:934 msgid "Hyperbolic" msgstr "Hiperbólico" -#: plug-ins/flame/flame.c:822 +#: plug-ins/flame/flame.c:935 msgid "Diamond" msgstr "Diamante" -#: plug-ins/flame/flame.c:823 +#: plug-ins/flame/flame.c:936 msgid "Ex" msgstr "Ex" -#: plug-ins/flame/flame.c:824 plug-ins/fractal-explorer/fractal-explorer.c:260 +#: plug-ins/flame/flame.c:937 plug-ins/fractal-explorer/fractal-explorer.c:260 msgid "Julia" msgstr "Julia" -#: plug-ins/flame/flame.c:825 +#: plug-ins/flame/flame.c:938 msgid "Waves" msgstr "Ondas de agua" -#: plug-ins/flame/flame.c:826 +#: plug-ins/flame/flame.c:939 msgid "Fisheye" msgstr "Ojo de pez" -#: plug-ins/flame/flame.c:827 +#: plug-ins/flame/flame.c:940 msgid "Popcorn" msgstr "Palomitas de maíz" -#: plug-ins/flame/flame.c:828 +#: plug-ins/flame/flame.c:941 msgid "Exponential" msgstr "Exponencial" -#: plug-ins/flame/flame.c:829 +#: plug-ins/flame/flame.c:942 msgid "Power" msgstr "Potencia" -#: plug-ins/flame/flame.c:830 plug-ins/fractal-explorer/fractal-explorer.c:343 +#: plug-ins/flame/flame.c:943 plug-ins/fractal-explorer/fractal-explorer.c:343 #: plug-ins/fractal-explorer/fractal-explorer.c:353 #: plug-ins/fractal-explorer/fractal-explorer.c:363 msgid "Cosine" msgstr "Coseno" -#: plug-ins/flame/flame.c:831 +#: plug-ins/flame/flame.c:944 msgid "Rings" msgstr "Anillos" -#: plug-ins/flame/flame.c:832 +#: plug-ins/flame/flame.c:945 msgid "Fan" msgstr "Ventilador" -#: plug-ins/flame/flame.c:833 +#: plug-ins/flame/flame.c:946 msgid "Eyefish" msgstr "Gran angular" -#: plug-ins/flame/flame.c:834 +#: plug-ins/flame/flame.c:947 msgid "Bubble" msgstr "Burbuja" -#: plug-ins/flame/flame.c:835 plug-ins/map-object/map-object-main.c:140 +#: plug-ins/flame/flame.c:948 plug-ins/map-object/map-object-main.c:140 msgid "Cylinder" msgstr "Cilindro" -#: plug-ins/flame/flame.c:837 +#: plug-ins/flame/flame.c:950 msgid "Blur" msgstr "Difuso" -#: plug-ins/flame/flame.c:838 +#: plug-ins/flame/flame.c:951 msgid "Gaussian" msgstr "Gaussiano" -#: plug-ins/flame/flame.c:851 +#: plug-ins/flame/flame.c:965 msgid "_Variation:" msgstr "_Variación:" -#: plug-ins/flame/flame.c:873 +#: plug-ins/flame/flame.c:987 msgid "Load Flame" msgstr "Cargar llama" -#: plug-ins/flame/flame.c:888 +#: plug-ins/flame/flame.c:1002 msgid "Save Flame" msgstr "Guardar llama" -#: plug-ins/flame/flame.c:1029 +#: plug-ins/flame/flame.c:1170 msgid "Flame" msgstr "Llama" -#: plug-ins/flame/flame.c:1096 plug-ins/pikaressionist/orientation.c:190 +#: plug-ins/flame/flame.c:1225 plug-ins/pikaressionist/orientation.c:190 #: plug-ins/pikaressionist/size.c:199 #: plug-ins/gradient-flare/gradient-flare.c:3046 msgid "_Edit" msgstr "_Editar" -#: plug-ins/flame/flame.c:1127 -msgid "_Rendering" -msgstr "_Renderizado" - -#: plug-ins/flame/flame.c:1137 -msgid "_Brightness:" -msgstr "_Brillo:" - -#: plug-ins/flame/flame.c:1149 -msgid "Co_ntrast:" -msgstr "Co_ntraste:" - -#: plug-ins/flame/flame.c:1176 -msgid "Sample _density:" -msgstr "_Densidad de la muestra:" - -#: plug-ins/flame/flame.c:1185 -msgid "Spa_tial oversample:" -msgstr "Sobremuestra es_pacial:" - -#: plug-ins/flame/flame.c:1194 -msgid "Spatial _filter radius:" -msgstr "Radio del _filtro espacial:" - -#: plug-ins/flame/flame.c:1212 +#: plug-ins/flame/flame.c:1271 msgid "Color_map:" msgstr "_Mapa de colores:" -#: plug-ins/flame/flame.c:1254 +#: plug-ins/flame/flame.c:1313 msgid "Custom gradient" msgstr "Degradado personalizado" -#: plug-ins/flame/flame.c:1280 -msgid "C_amera" -msgstr "Cámar_a" - -#: plug-ins/flame/flame.c:1284 -msgid "_Zoom:" -msgstr "Amplia_ción:" - -#: plug-ins/flame/flame.c:1296 plug-ins/gradient-flare/gradient-flare.c:2899 -msgid "_X:" -msgstr "_X:" - -#: plug-ins/flame/flame.c:1308 plug-ins/gradient-flare/gradient-flare.c:2903 -msgid "_Y:" -msgstr "_Y:" - #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:617 #: plug-ins/gfig/gfig-dialog.c:338 plug-ins/pikaressionist/utils.c:139 #: plug-ins/gradient-flare/gradient-flare.c:988 @@ -10930,16 +11200,12 @@ msgid "Render fractal art" msgstr "Renderizando fractal" #: plug-ins/fractal-explorer/fractal-explorer.c:257 -#, fuzzy -#| msgid "Fractal Type" msgid "Fr_actal Type" -msgstr "Tipo de fractal" +msgstr "Tipo de fr_actal" #: plug-ins/fractal-explorer/fractal-explorer.c:258 -#, fuzzy -#| msgid "Load Fractal Parameters" msgid "Type of Fractal Pattern" -msgstr "Cargar parámetros del fractal" +msgstr "Tipo de patrón fractal" #: plug-ins/fractal-explorer/fractal-explorer.c:259 msgid "Mandelbrot" @@ -11003,10 +11269,8 @@ msgstr "Delimitador de imagen fractal Y min" #: plug-ins/fractal-explorer/fractal-explorer.c:291 #: plug-ins/map-object/map-object-main.c:411 -#, fuzzy -#| msgid "_Bottom:" msgid "_Bottom" -msgstr "I_nferior:" +msgstr "I_nferior" #: plug-ins/fractal-explorer/fractal-explorer.c:292 msgid "Y max fractal image delimiter" @@ -11017,13 +11281,10 @@ msgid "Iteratio_ns" msgstr "Iteracio_nes" #: plug-ins/fractal-explorer/fractal-explorer.c:298 -#, fuzzy -#| msgid "Iterations:" msgid "Iteration value" -msgstr "Iteraciones:" +msgstr "Valor de iteración" #: plug-ins/fractal-explorer/fractal-explorer.c:303 -#| msgid "_X:" msgid "C_X" msgstr "C_X" @@ -11032,7 +11293,6 @@ msgid "cx value" msgstr "valor cx" #: plug-ins/fractal-explorer/fractal-explorer.c:309 -#| msgid "C_MYK" msgid "C_Y" msgstr "C_Y" @@ -11041,8 +11301,6 @@ msgid "cy value" msgstr "valor cy" #: plug-ins/fractal-explorer/fractal-explorer.c:315 -#, fuzzy -#| msgid "Color Mode" msgid "Color mode" msgstr "Modo de color" @@ -11085,10 +11343,8 @@ msgid "Blue stretch" msgstr "Umbral de _azul:" #: plug-ins/fractal-explorer/fractal-explorer.c:335 -#, fuzzy -#| msgid "Auto-stretching contrast" msgid "Blue stretching factor" -msgstr "Auto-estirando contraste" +msgstr "Factor de estiramiento azul" #: plug-ins/fractal-explorer/fractal-explorer.c:340 msgid "_Red" @@ -11131,10 +11387,8 @@ msgid "_Number of colors" msgstr "_Número de colores" #: plug-ins/fractal-explorer/fractal-explorer.c:389 -#, fuzzy -#| msgid "Number of Colors" msgid "Number of Colors for mapping" -msgstr "Número de colores" +msgstr "Número de colores que asignar" #: plug-ins/fractal-explorer/fractal-explorer.c:493 msgid "Rendering fractal" @@ -11318,7 +11572,7 @@ msgid "Copy an object" msgstr "Copiar un objeto" #: plug-ins/gfig/gfig-dialog.c:410 plug-ins/gfig/gfig-menu.ui:104 -#: plug-ins/ifs-compose/ifs-compose.c:954 plug-ins/ifs-compose/ifs-menus.ui:27 +#: plug-ins/ifs-compose/ifs-compose.c:960 plug-ins/ifs-compose/ifs-menus.ui:27 #: plug-ins/imagemap/imap_cmd_delete.c:56 plug-ins/imagemap/imap_menu.c:182 msgid "Delete" msgstr "Borrar" @@ -11642,7 +11896,7 @@ msgstr "Cerrar" msgid "Edit" msgstr "Editar" -#: plug-ins/gfig/gfig-menu.ui:23 plug-ins/ifs-compose/ifs-compose.c:956 +#: plug-ins/gfig/gfig-menu.ui:23 plug-ins/ifs-compose/ifs-compose.c:962 #: plug-ins/ifs-compose/ifs-menus.ui:31 plug-ins/imagemap/imap_main.c:1530 #: plug-ins/imagemap/imap-menu.ui:35 msgid "Undo" @@ -11864,7 +12118,7 @@ msgstr "Preajuste" msgid "Preset Name" msgstr "Nombre del preajuste" -#: plug-ins/pikaressionist/pika.c:451 +#: plug-ins/pikaressionist/pika.c:465 msgid "Painting" msgstr "Pintando" @@ -12352,50 +12606,36 @@ msgstr "Producir un efecto de destellos de óptica utilizando degradados" #: plug-ins/gradient-flare/gradient-flare.c:853 #: plug-ins/map-object/map-object-main.c:349 #: plug-ins/map-object/map-object-main.c:417 -#, fuzzy -#| msgid "Radius" msgid "Radi_us" -msgstr "Radio" +msgstr "Radi_o" #: plug-ins/gradient-flare/gradient-flare.c:859 msgid "Ro_tation" msgstr "Ro_tación" #: plug-ins/gradient-flare/gradient-flare.c:865 -#, fuzzy -#| msgid "_Hue rotation:" msgid "_Hue rotation" -msgstr "R_otación de tono:" +msgstr "R_otación de tono" #: plug-ins/gradient-flare/gradient-flare.c:871 -#, fuzzy -#| msgid "Vector _angle:" msgid "Vector _angle" -msgstr "Ángulo del _vector:" +msgstr "Ángulo del _vector" #: plug-ins/gradient-flare/gradient-flare.c:877 -#, fuzzy -#| msgid "Vector _length:" msgid "Vector len_gth" -msgstr "_Longitud del vector:" +msgstr "Lon_gitud del vector" #: plug-ins/gradient-flare/gradient-flare.c:884 -#, fuzzy -#| msgid "A_daptive supersampling" msgid "Ada_ptive supersampling" -msgstr "Supermuestreo a_daptativo" +msgstr "Supermuestreo ada_ptativo" #: plug-ins/gradient-flare/gradient-flare.c:890 -#, fuzzy -#| msgid "_Max depth:" msgid "_Max depth" -msgstr "Profundidad _máxima:" +msgstr "Profundidad _máxima" #: plug-ins/gradient-flare/gradient-flare.c:896 -#, fuzzy -#| msgid "_Threshold" msgid "Threshol_d" -msgstr "U_mbral" +msgstr "_Umbral" #: plug-ins/gradient-flare/gradient-flare.c:1009 #: plug-ins/gradient-flare/gradient-flare.c:2499 @@ -12446,6 +12686,14 @@ msgstr "Actualizar a_utomáticamente la previsualización" msgid "'Default' is created." msgstr "Se crea el «predeterminado»." +#: plug-ins/gradient-flare/gradient-flare.c:2899 +msgid "_X:" +msgstr "_X:" + +#: plug-ins/gradient-flare/gradient-flare.c:2903 +msgid "_Y:" +msgstr "_Y:" + #. #. * Scales #. @@ -12625,50 +12873,50 @@ msgid "_Second Flares" msgstr "Destellos _secundarios" #. the dialog window -#: plug-ins/help-browser/dialog.c:261 plug-ins/help-browser/dialog.c:822 +#: plug-ins/help-browser/dialog.c:263 plug-ins/help-browser/dialog.c:831 msgid "PIKA Help Browser" msgstr "Visor de ayuda de PIKA" -#: plug-ins/help-browser/dialog.c:275 plug-ins/help-browser/help-menu.ui:14 +#: plug-ins/help-browser/dialog.c:277 plug-ins/help-browser/help-menu.ui:14 msgid "_Reload" msgstr "_Recargar" -#: plug-ins/help-browser/dialog.c:275 +#: plug-ins/help-browser/dialog.c:277 msgid "Reload current page" msgstr "Recargar la página actual" -#: plug-ins/help-browser/dialog.c:276 plug-ins/help-browser/help-menu.ui:18 +#: plug-ins/help-browser/dialog.c:278 plug-ins/help-browser/help-menu.ui:18 msgid "_Stop" msgstr "_Parar" -#: plug-ins/help-browser/dialog.c:276 +#: plug-ins/help-browser/dialog.c:278 msgid "Stop loading this page" msgstr "Detener la carga de esta página" -#: plug-ins/help-browser/dialog.c:277 +#: plug-ins/help-browser/dialog.c:279 msgid "Go to the index page" msgstr "Ir a la página índice" -#: plug-ins/help-browser/dialog.c:283 +#: plug-ins/help-browser/dialog.c:285 msgid "Visit the PIKA documentation website" msgstr "Visitar la web de documentación de PIKA" -#: plug-ins/help-browser/dialog.c:1165 +#: plug-ins/help-browser/dialog.c:1177 msgid "Find:" msgstr "Buscar:" -#: plug-ins/help-browser/dialog.c:1181 +#: plug-ins/help-browser/dialog.c:1193 msgctxt "search" msgid "_Previous" msgstr "Buscar anterio_r" # //R ¿hexágonos? -#: plug-ins/help-browser/dialog.c:1190 +#: plug-ins/help-browser/dialog.c:1202 msgctxt "search" msgid "_Next" msgstr "Buscar siguie_nte" -#: plug-ins/help-browser/dialog.c:1199 +#: plug-ins/help-browser/dialog.c:1211 msgctxt "search" msgid "_Close" msgstr "_Cerrar" @@ -12690,10 +12938,8 @@ msgid "C_opy location" msgstr "C_opiar dirección" #: plug-ins/help-browser/help-menu.ui:32 -#, fuzzy -#| msgid "Show Next" msgid "S_how index" -msgstr "Mostrar siguiente" +msgstr "M_ostrar índice" #: plug-ins/help-browser/help-menu.ui:38 msgid "Find" @@ -12775,160 +13021,160 @@ msgid "Create an Iterated Function System (IFS) fractal" msgstr "Crear un fractal del sistema de función iterada (IFS)" #. X -#: plug-ins/ifs-compose/ifs-compose.c:635 +#: plug-ins/ifs-compose/ifs-compose.c:641 msgid "X:" msgstr "X:" #. Y -#: plug-ins/ifs-compose/ifs-compose.c:649 +#: plug-ins/ifs-compose/ifs-compose.c:655 msgid "Y:" msgstr "Y:" #. Asym -#: plug-ins/ifs-compose/ifs-compose.c:691 +#: plug-ins/ifs-compose/ifs-compose.c:697 msgid "Asymmetry:" msgstr "Asimetría:" #. Shear -#: plug-ins/ifs-compose/ifs-compose.c:705 +#: plug-ins/ifs-compose/ifs-compose.c:711 msgid "Shear:" msgstr "Recortado:" #. Simple color control section -#: plug-ins/ifs-compose/ifs-compose.c:750 +#: plug-ins/ifs-compose/ifs-compose.c:756 msgid "Simple" msgstr "Simple" -#: plug-ins/ifs-compose/ifs-compose.c:759 +#: plug-ins/ifs-compose/ifs-compose.c:765 msgid "IFS Fractal: Target" msgstr "Fractal IFS: Objetivo" -#: plug-ins/ifs-compose/ifs-compose.c:765 +#: plug-ins/ifs-compose/ifs-compose.c:771 msgid "Scale hue by:" msgstr "Escalar tono por:" -#: plug-ins/ifs-compose/ifs-compose.c:780 +#: plug-ins/ifs-compose/ifs-compose.c:786 msgid "Scale value by:" msgstr "Escalar valor por:" #. Full color control section -#: plug-ins/ifs-compose/ifs-compose.c:797 +#: plug-ins/ifs-compose/ifs-compose.c:803 msgid "Full" msgstr "Total" -#: plug-ins/ifs-compose/ifs-compose.c:805 +#: plug-ins/ifs-compose/ifs-compose.c:811 msgid "IFS Fractal: Red" msgstr "Fractal IFS: Rojo" -#: plug-ins/ifs-compose/ifs-compose.c:813 +#: plug-ins/ifs-compose/ifs-compose.c:819 msgid "IFS Fractal: Green" msgstr "Fractal IFS: Verde" -#: plug-ins/ifs-compose/ifs-compose.c:821 +#: plug-ins/ifs-compose/ifs-compose.c:827 msgid "IFS Fractal: Blue" msgstr "Fractal IFS: Azul" -#: plug-ins/ifs-compose/ifs-compose.c:829 +#: plug-ins/ifs-compose/ifs-compose.c:835 msgid "IFS Fractal: Black" msgstr "Fractal IFS: Negro" -#: plug-ins/ifs-compose/ifs-compose.c:901 +#: plug-ins/ifs-compose/ifs-compose.c:907 msgid "IFS Fractal" msgstr "Fractal IFS" -#: plug-ins/ifs-compose/ifs-compose.c:945 plug-ins/ifs-compose/ifs-menus.ui:6 +#: plug-ins/ifs-compose/ifs-compose.c:951 plug-ins/ifs-compose/ifs-menus.ui:6 #: plug-ins/imagemap/imap_cmd_move.c:85 #: plug-ins/imagemap/imap_cmd_object_move.c:56 msgid "Move" msgstr "Mover" -#: plug-ins/ifs-compose/ifs-compose.c:947 plug-ins/ifs-compose/ifs-menus.ui:11 +#: plug-ins/ifs-compose/ifs-compose.c:953 plug-ins/ifs-compose/ifs-menus.ui:11 msgid "Rotate" msgstr "Rotar" -#: plug-ins/ifs-compose/ifs-compose.c:949 plug-ins/ifs-compose/ifs-menus.ui:16 +#: plug-ins/ifs-compose/ifs-compose.c:955 plug-ins/ifs-compose/ifs-menus.ui:16 msgid "Stretch" msgstr "Estirar" -#: plug-ins/ifs-compose/ifs-compose.c:952 plug-ins/ifs-compose/ifs-menus.ui:23 +#: plug-ins/ifs-compose/ifs-compose.c:958 plug-ins/ifs-compose/ifs-menus.ui:23 msgid "New" msgstr "Nueva" -#: plug-ins/ifs-compose/ifs-compose.c:958 plug-ins/ifs-compose/ifs-menus.ui:35 +#: plug-ins/ifs-compose/ifs-compose.c:964 plug-ins/ifs-compose/ifs-menus.ui:35 #: plug-ins/imagemap/imap_main.c:1532 plug-ins/imagemap/imap-menu.ui:39 msgid "Redo" msgstr "Rehacer" -#: plug-ins/ifs-compose/ifs-compose.c:960 plug-ins/ifs-compose/ifs-menus.ui:39 +#: plug-ins/ifs-compose/ifs-compose.c:966 plug-ins/ifs-compose/ifs-menus.ui:39 #: plug-ins/imagemap/imap_cmd_select_all.c:50 plug-ins/imagemap/imap-menu.ui:61 msgid "Select All" msgstr "Seleccionar todo" -#: plug-ins/ifs-compose/ifs-compose.c:962 plug-ins/ifs-compose/ifs-menus.ui:43 +#: plug-ins/ifs-compose/ifs-compose.c:968 plug-ins/ifs-compose/ifs-menus.ui:43 msgid "Recompute Center" msgstr "Recalcular el centro" -#: plug-ins/ifs-compose/ifs-compose.c:965 plug-ins/ifs-compose/ifs-menus.ui:49 +#: plug-ins/ifs-compose/ifs-compose.c:971 plug-ins/ifs-compose/ifs-menus.ui:49 msgid "Render Options" msgstr "Opciones de renderizado" -#: plug-ins/ifs-compose/ifs-compose.c:1024 +#: plug-ins/ifs-compose/ifs-compose.c:1030 msgid "Spatial Transformation" msgstr "Transformación espacial" -#: plug-ins/ifs-compose/ifs-compose.c:1030 +#: plug-ins/ifs-compose/ifs-compose.c:1036 msgid "Color Transformation" msgstr "Transformación de color" -#: plug-ins/ifs-compose/ifs-compose.c:1040 +#: plug-ins/ifs-compose/ifs-compose.c:1046 msgid "Relative probability:" msgstr "Probabilidad relativa:" -#: plug-ins/ifs-compose/ifs-compose.c:1204 +#: plug-ins/ifs-compose/ifs-compose.c:1210 msgid "IFS Fractal Render Options" msgstr "Opciones de render de fractal IFS" -#: plug-ins/ifs-compose/ifs-compose.c:1226 +#: plug-ins/ifs-compose/ifs-compose.c:1232 msgid "Max. memory:" msgstr "Memoria máx.:" -#: plug-ins/ifs-compose/ifs-compose.c:1254 +#: plug-ins/ifs-compose/ifs-compose.c:1260 msgid "Subdivide:" msgstr "Subdividir:" -#: plug-ins/ifs-compose/ifs-compose.c:1268 +#: plug-ins/ifs-compose/ifs-compose.c:1274 msgid "Spot radius:" msgstr "Radio de puntos:" -#: plug-ins/ifs-compose/ifs-compose.c:1341 +#: plug-ins/ifs-compose/ifs-compose.c:1347 #, c-format msgid "Rendering IFS (%d/%d)" msgstr "Renderizando IFS (%d/%d)" -#: plug-ins/ifs-compose/ifs-compose.c:1493 +#: plug-ins/ifs-compose/ifs-compose.c:1499 #, c-format msgid "Transformation %s" msgstr "Transformación %s" -#: plug-ins/ifs-compose/ifs-compose.c:2419 +#: plug-ins/ifs-compose/ifs-compose.c:2425 msgid "Save failed" msgstr "El guardado ha fallado" -#: plug-ins/ifs-compose/ifs-compose.c:2502 -#: plug-ins/ifs-compose/ifs-compose.c:2515 +#: plug-ins/ifs-compose/ifs-compose.c:2508 +#: plug-ins/ifs-compose/ifs-compose.c:2521 msgid "Open failed" msgstr "Ha fallado la apertura" -#: plug-ins/ifs-compose/ifs-compose.c:2510 +#: plug-ins/ifs-compose/ifs-compose.c:2516 #, c-format msgid "File '%s' doesn't seem to be an IFS Fractal file." msgstr "El archivo «%s» no parece ser un archivo fractal IFS." -#: plug-ins/ifs-compose/ifs-compose.c:2550 +#: plug-ins/ifs-compose/ifs-compose.c:2556 msgid "Save as IFS Fractal file" msgstr "Guardar como un archivo de fractal IFS" -#: plug-ins/ifs-compose/ifs-compose.c:2587 +#: plug-ins/ifs-compose/ifs-compose.c:2593 msgid "Open IFS Fractal file" msgstr "Abrir archivo de fractal IFS" @@ -13153,96 +13399,96 @@ msgstr "Des-seleccionar" msgid "Unselect All" msgstr "Des-seleccionar todo" -#: plug-ins/imagemap/imap_edit_area_info.c:219 +#: plug-ins/imagemap/imap_edit_area_info.c:252 msgid "Link Type" msgstr "Tipo de enlace" -#: plug-ins/imagemap/imap_edit_area_info.c:228 +#: plug-ins/imagemap/imap_edit_area_info.c:261 msgid "_Web Site" msgstr "Sitio _Web" -#: plug-ins/imagemap/imap_edit_area_info.c:234 +#: plug-ins/imagemap/imap_edit_area_info.c:267 msgid "_FTP Site" msgstr "Sitio _FTP" -#: plug-ins/imagemap/imap_edit_area_info.c:240 +#: plug-ins/imagemap/imap_edit_area_info.c:273 msgid "_Gopher" msgstr "_Gopher" -#: plug-ins/imagemap/imap_edit_area_info.c:246 +#: plug-ins/imagemap/imap_edit_area_info.c:279 msgid "Ot_her" msgstr "Ot_ro" -#: plug-ins/imagemap/imap_edit_area_info.c:252 +#: plug-ins/imagemap/imap_edit_area_info.c:285 msgid "F_ile" msgstr "Arch_ivo" -#: plug-ins/imagemap/imap_edit_area_info.c:258 +#: plug-ins/imagemap/imap_edit_area_info.c:291 msgid "WAI_S" msgstr "WAI_S" -#: plug-ins/imagemap/imap_edit_area_info.c:264 +#: plug-ins/imagemap/imap_edit_area_info.c:297 msgid "Tel_net" msgstr "Tel_net" -#: plug-ins/imagemap/imap_edit_area_info.c:270 +#: plug-ins/imagemap/imap_edit_area_info.c:303 msgid "e-_mail" msgstr "c_orreo-e" -#: plug-ins/imagemap/imap_edit_area_info.c:276 +#: plug-ins/imagemap/imap_edit_area_info.c:309 msgid "_URL to activate when this area is clicked: (required)" msgstr "_URL a activar cuando se pulse sobre esta área: (requerido)" # //R ¿seleccione o seleccionar? -#: plug-ins/imagemap/imap_edit_area_info.c:278 +#: plug-ins/imagemap/imap_edit_area_info.c:311 msgid "Select HTML file" msgstr "Seleccione un archivo HTML" -#: plug-ins/imagemap/imap_edit_area_info.c:287 +#: plug-ins/imagemap/imap_edit_area_info.c:320 msgid "Relati_ve link" msgstr "Enlace relati_vo" -#: plug-ins/imagemap/imap_edit_area_info.c:293 +#: plug-ins/imagemap/imap_edit_area_info.c:326 msgid "_Target frame name/ID: (optional - used for FRAMES only)" msgstr "Nombre/ID del _marco destino: (opcional - sólo usado para MARCOS)" -#: plug-ins/imagemap/imap_edit_area_info.c:296 +#: plug-ins/imagemap/imap_edit_area_info.c:329 msgid "ALT te_xt: (optional)" msgstr "Te_xto alt.: (opcional)" -#: plug-ins/imagemap/imap_edit_area_info.c:299 +#: plug-ins/imagemap/imap_edit_area_info.c:332 #, fuzzy #| msgid "ALT te_xt: (optional)" msgid "Access _Key: (optional)" msgstr "Te_xto alt.: (opcional)" -#: plug-ins/imagemap/imap_edit_area_info.c:302 +#: plug-ins/imagemap/imap_edit_area_info.c:335 #, fuzzy #| msgid "ALT te_xt: (optional)" msgid "Ta_b Index: (optional)" msgstr "Te_xto alt.: (opcional)" -#: plug-ins/imagemap/imap_edit_area_info.c:305 +#: plug-ins/imagemap/imap_edit_area_info.c:338 msgid "_Link" msgstr "En_lace" -#: plug-ins/imagemap/imap_edit_area_info.c:339 +#: plug-ins/imagemap/imap_edit_area_info.c:372 msgid "Dimensions" msgstr "Dimensiones" -#: plug-ins/imagemap/imap_edit_area_info.c:343 +#: plug-ins/imagemap/imap_edit_area_info.c:376 msgid "Pre_view" msgstr "Vista pre_via" -#: plug-ins/imagemap/imap_edit_area_info.c:385 +#: plug-ins/imagemap/imap_edit_area_info.c:418 msgid "_JavaScript" msgstr "_JavaScript" -#: plug-ins/imagemap/imap_edit_area_info.c:490 +#: plug-ins/imagemap/imap_edit_area_info.c:523 msgid "Area Settings" msgstr "Configuración de área" -#: plug-ins/imagemap/imap_edit_area_info.c:536 +#: plug-ins/imagemap/imap_edit_area_info.c:569 #, c-format msgid "Area #%d Settings" msgstr "Configuración de Área nº %d" @@ -13647,10 +13893,8 @@ msgid "1:8" msgstr "1:8" #: plug-ins/imagemap/imap-menu.ui:163 -#, fuzzy -#| msgid "_Mapping" msgid "Mappings" -msgstr "_Mapa" +msgstr "Asignaciones" #: plug-ins/imagemap/imap-menu.ui:188 plug-ins/imagemap/imap-menu.ui:247 msgid "Edit Map Info..." @@ -13701,73 +13945,57 @@ msgid "Apply various lighting effects to an image" msgstr "Aplicar el varios efectos de luz a una imagen" #: plug-ins/lighting/lighting-main.c:136 -#, fuzzy -#| msgid "Bumpm_ap image:" msgid "B_ump map image" -msgstr "_Mapa del relieve:" +msgstr "_Mapa del relieve" #: plug-ins/lighting/lighting-main.c:137 msgid "Bumpmap drawable (set to NULL if disabled)" -msgstr "" +msgstr "Dibujable de mapa de relieve (establecer en NULL si está desactivado)" #: plug-ins/lighting/lighting-main.c:142 -#, fuzzy -#| msgid "En_vironment image:" msgid "Enviro_nment map image" -msgstr "Imagen de _entorno:" +msgstr "Imagen de e_ntorno" #: plug-ins/lighting/lighting-main.c:143 msgid "Environmentmap drawable (set to NULL if disabled)" -msgstr "" +msgstr "Dibujable de mapa de entorno (establecer en NULL si está desactivado)" #: plug-ins/lighting/lighting-main.c:149 -#, fuzzy -#| msgid "E_nable bump mapping" msgid "Enable bump mappi_ng" -msgstr "Activar el _mapeo de relieve [bump mapping]" +msgstr "Activar el _mapeo de relieve" #: plug-ins/lighting/lighting-main.c:150 -#, fuzzy -#| msgid "E_nable bump mapping" msgid "Enable bumpmapping" -msgstr "Activar el _mapeo de relieve [bump mapping]" +msgstr "Activar el mapeo de relieve" #: plug-ins/lighting/lighting-main.c:155 -#, fuzzy -#| msgid "E_nable environment mapping" msgid "Enable en_vironment mapping" msgstr "Activar mapeo de e_ntorno" #: plug-ins/lighting/lighting-main.c:156 plug-ins/lighting/lighting-main.c:291 -#, fuzzy -#| msgid "E_nable environment mapping" msgid "Enable envmapping" -msgstr "Activar mapeo de e_ntorno" +msgstr "Activar mapeo de entorno" #: plug-ins/lighting/lighting-main.c:161 msgid "Cur_ve" -msgstr "" +msgstr "Cur_va" #: plug-ins/lighting/lighting-main.c:162 #: plug-ins/map-object/map-object-main.c:136 msgid "Type of mapping" -msgstr "" +msgstr "Tipo de mapeado" #: plug-ins/lighting/lighting-main.c:164 msgid "Logarithmic" msgstr "Logarítmico" #: plug-ins/lighting/lighting-main.c:172 -#, fuzzy -#| msgid "Ma_ximum height:" msgid "Ma_ximum height" -msgstr "Altura má_xima:" +msgstr "Altura má_xima" #: plug-ins/lighting/lighting-main.c:173 -#, fuzzy -#| msgid "Maximum height for bumps" msgid "The maximum height of the bumpmap" -msgstr "Altura máxima del relieve" +msgstr "La altura máxima del mapa de relieve" #: plug-ins/lighting/lighting-main.c:178 msgid "Active" @@ -13775,7 +14003,7 @@ msgstr "Activo" #: plug-ins/lighting/lighting-main.c:179 msgid "Which light is active in the GUI" -msgstr "" +msgstr "Qué luz está activa en la IGU" #: plug-ins/lighting/lighting-main.c:180 msgid "Light 1" @@ -13802,14 +14030,12 @@ msgid "Light 6" msgstr "Luz 6" #: plug-ins/lighting/lighting-main.c:191 -#, fuzzy -#| msgid "I_solate" msgid "Isolate" -msgstr "A_islar" +msgstr "Aislar" #: plug-ins/lighting/lighting-main.c:192 msgid "Only show the active lighting in the preview" -msgstr "" +msgstr "Mostrar solo la iluminación activa en la vista previa" #: plug-ins/lighting/lighting-main.c:199 plug-ins/lighting/lighting-main.c:322 #: plug-ins/lighting/lighting-main.c:381 plug-ins/lighting/lighting-main.c:440 @@ -13834,19 +14060,15 @@ msgstr "Punto" #: plug-ins/lighting/lighting-main.c:203 plug-ins/lighting/lighting-main.c:326 #: plug-ins/lighting/lighting-main.c:385 plug-ins/lighting/lighting-main.c:444 #: plug-ins/lighting/lighting-main.c:503 plug-ins/lighting/lighting-main.c:562 -#, fuzzy -#| msgid "Spots" msgid "Spot" -msgstr "Lunares" +msgstr "Lunar" #: plug-ins/lighting/lighting-main.c:210 plug-ins/lighting/lighting-main.c:333 #: plug-ins/lighting/lighting-main.c:392 plug-ins/lighting/lighting-main.c:451 #: plug-ins/lighting/lighting-main.c:510 plug-ins/lighting/lighting-main.c:569 #: plug-ins/map-object/map-object-main.c:237 -#, fuzzy -#| msgid "Lightsource color:" msgid "Light source color" -msgstr "Color de fuente de luz:" +msgstr "Color de fuente de luz" #: plug-ins/lighting/lighting-main.c:215 plug-ins/lighting/lighting-main.c:338 #: plug-ins/lighting/lighting-main.c:397 plug-ins/lighting/lighting-main.c:456 @@ -13866,10 +14088,8 @@ msgstr "Intensidad de la luz" #: plug-ins/lighting/lighting-main.c:403 plug-ins/lighting/lighting-main.c:462 #: plug-ins/lighting/lighting-main.c:521 plug-ins/lighting/lighting-main.c:580 #: plug-ins/map-object/map-object-main.c:242 -#, fuzzy -#| msgid "Show position" msgid "Light position X" -msgstr "Mostrar posición" +msgstr "Posición X de la luz" #: plug-ins/lighting/lighting-main.c:222 plug-ins/lighting/lighting-main.c:228 #: plug-ins/lighting/lighting-main.c:234 plug-ins/lighting/lighting-main.c:345 @@ -13892,28 +14112,22 @@ msgstr "Posición X de la fuente de luz en el espacio XYZ" #: plug-ins/lighting/lighting-main.c:409 plug-ins/lighting/lighting-main.c:468 #: plug-ins/lighting/lighting-main.c:527 plug-ins/lighting/lighting-main.c:586 #: plug-ins/map-object/map-object-main.c:247 -#, fuzzy -#| msgid "Show position" msgid "Light position Y" -msgstr "Mostrar posición" +msgstr "Posición Y de la luz" #: plug-ins/lighting/lighting-main.c:233 plug-ins/lighting/lighting-main.c:356 #: plug-ins/lighting/lighting-main.c:415 plug-ins/lighting/lighting-main.c:474 #: plug-ins/lighting/lighting-main.c:533 plug-ins/lighting/lighting-main.c:592 #: plug-ins/map-object/map-object-main.c:252 -#, fuzzy -#| msgid "Show position" msgid "Light position Z" -msgstr "Mostrar posición" +msgstr "Posición Z de la luz" #: plug-ins/lighting/lighting-main.c:239 plug-ins/lighting/lighting-main.c:362 #: plug-ins/lighting/lighting-main.c:421 plug-ins/lighting/lighting-main.c:480 #: plug-ins/lighting/lighting-main.c:539 plug-ins/lighting/lighting-main.c:598 #: plug-ins/map-object/map-object-main.c:258 -#, fuzzy -#| msgid "Light _direction:" msgid "Light direction X" -msgstr "_Dirección de la luz:" +msgstr "Dirección X de la luz" #: plug-ins/lighting/lighting-main.c:240 plug-ins/lighting/lighting-main.c:246 #: plug-ins/lighting/lighting-main.c:252 plug-ins/lighting/lighting-main.c:363 @@ -13927,28 +14141,22 @@ msgstr "_Dirección de la luz:" #: plug-ins/map-object/map-object-main.c:259 #: plug-ins/map-object/map-object-main.c:264 #: plug-ins/map-object/map-object-main.c:269 -#, fuzzy -#| msgid "Light source X direction in XYZ space" msgid "Light source direction (x,y,z)" -msgstr "Dirección X de la fuente de luz en el espacio XYZ" +msgstr "Dirección de la fuente de luz (x,y,z)" #: plug-ins/lighting/lighting-main.c:245 plug-ins/lighting/lighting-main.c:368 #: plug-ins/lighting/lighting-main.c:427 plug-ins/lighting/lighting-main.c:486 #: plug-ins/lighting/lighting-main.c:545 plug-ins/lighting/lighting-main.c:604 #: plug-ins/map-object/map-object-main.c:263 -#, fuzzy -#| msgid "Light _direction:" msgid "Light direction Y" -msgstr "_Dirección de la luz:" +msgstr "Dirección Y de la luz" #: plug-ins/lighting/lighting-main.c:251 plug-ins/lighting/lighting-main.c:374 #: plug-ins/lighting/lighting-main.c:433 plug-ins/lighting/lighting-main.c:492 #: plug-ins/lighting/lighting-main.c:551 plug-ins/lighting/lighting-main.c:610 #: plug-ins/map-object/map-object-main.c:268 -#, fuzzy -#| msgid "Light _direction:" msgid "Light direction Z" -msgstr "_Dirección de la luz:" +msgstr "Dirección Z de la luz" #: plug-ins/lighting/lighting-main.c:257 #, fuzzy @@ -13958,7 +14166,7 @@ msgstr "Intensidad de la luz" #: plug-ins/lighting/lighting-main.c:258 msgid "Material ambient intensity (Glowing)" -msgstr "" +msgstr "Intensidad ambiental del material (Brillo)" #: plug-ins/lighting/lighting-main.c:264 #, fuzzy @@ -13968,7 +14176,7 @@ msgstr "Intensidad de la luz" #: plug-ins/lighting/lighting-main.c:265 msgid "Material diffuse intensity (Bright)" -msgstr "" +msgstr "Intensidad difusa del material (Brillante)" #: plug-ins/lighting/lighting-main.c:290 msgid "Metallic" @@ -13976,29 +14184,21 @@ msgstr "Metálico" #: plug-ins/lighting/lighting-main.c:297 #: plug-ins/map-object/map-object-main.c:307 -#, fuzzy -#| msgid "Antialiasing" msgid "Apply antialiasing" -msgstr "Antialias" +msgstr "Aplicar alisado" #: plug-ins/lighting/lighting-main.c:302 -#, fuzzy -#| msgid "Create new image" msgid "Create new ima_ge" -msgstr "Crear imagen nueva" +msgstr "Crear ima_gen nueva" #: plug-ins/lighting/lighting-main.c:303 #: plug-ins/map-object/map-object-main.c:331 -#, fuzzy -#| msgid "Create new image" msgid "Create a new image" -msgstr "Crear imagen nueva" +msgstr "Crear una imagen nueva" #: plug-ins/lighting/lighting-main.c:308 -#, fuzzy -#| msgid "Transparent background" msgid "Trans_parent background" -msgstr "Fondo transparente" +msgstr "Fondo trans_parente" #: plug-ins/lighting/lighting-main.c:309 #: plug-ins/map-object/map-object-main.c:343 @@ -14008,14 +14208,12 @@ msgid "Make background transparent" msgstr "Fondo transparente" #: plug-ins/lighting/lighting-main.c:314 -#, fuzzy -#| msgid "Distance:" msgid "_Distance" -msgstr "Distancia:" +msgstr "_Distancia" #: plug-ins/lighting/lighting-main.c:315 msgid "Distance of observer from surface" -msgstr "" +msgstr "Distancia del observador a la superficie" #: plug-ins/lighting/lighting-ui.c:247 plug-ins/map-object/map-object-ui.c:394 msgid "Recompute preview image" @@ -14068,10 +14266,8 @@ msgid "Direction" msgstr "Dirección" #: plug-ins/lighting/lighting-ui.c:478 -#, fuzzy -#| msgid "Lighting preset:" msgid "Lighting presets: " -msgstr "Preconfiguración de la luz:" +msgstr "Preajustes de iluminación: " #: plug-ins/lighting/lighting-ui.c:511 msgid "Material Properties" @@ -14125,10 +14321,6 @@ msgstr "Plano" msgid "Sphere" msgstr "Esfera" -#: plug-ins/map-object/map-object-main.c:139 -msgid "Box" -msgstr "Caja" - #: plug-ins/map-object/map-object-main.c:146 #: plug-ins/map-object/map-object-main.c:178 #: plug-ins/map-object/map-object-main.c:194 @@ -14139,7 +14331,7 @@ msgstr "X" #: plug-ins/map-object/map-object-main.c:152 #: plug-ins/map-object/map-object-main.c:157 msgid "Position of viewpoint (x,y,z)" -msgstr "" +msgstr "Posición del punto de vista (x, y, z)" #: plug-ins/map-object/map-object-main.c:151 #: plug-ins/map-object/map-object-main.c:199 @@ -14176,53 +14368,45 @@ msgstr "Posición Z" #: plug-ins/map-object/map-object-main.c:184 #: plug-ins/map-object/map-object-main.c:189 msgid "First axis of object (x,y,z)" -msgstr "" +msgstr "Primer eje del objeto (x, y, z)" #: plug-ins/map-object/map-object-main.c:183 msgid "y" -msgstr "" +msgstr "y" #: plug-ins/map-object/map-object-main.c:195 #: plug-ins/map-object/map-object-main.c:200 #: plug-ins/map-object/map-object-main.c:205 msgid "Second axis of object (x,y,z)" -msgstr "" +msgstr "Segundo eje del objeto (x, y, z)" #: plug-ins/map-object/map-object-main.c:210 msgid "Angle X" msgstr "Ángulo X" #: plug-ins/map-object/map-object-main.c:211 -#, fuzzy -#| msgid "Rotation angle about X axis" msgid "Rotation about X axis in degrees" -msgstr "Ángulo de rotación alrededor del eje X" +msgstr "Rotación alrededor del eje X en grados" #: plug-ins/map-object/map-object-main.c:215 msgid "Angle Y" msgstr "Ángulo Y" #: plug-ins/map-object/map-object-main.c:216 -#, fuzzy -#| msgid "Rotation angle about Y axis" msgid "Rotation about Y axis in degrees" -msgstr "Ángulo de rotación alrededor del eje Y" +msgstr "Rotación alrededor del eje Y en grados" #: plug-ins/map-object/map-object-main.c:220 msgid "Angle Z" msgstr "Ángulo Z" #: plug-ins/map-object/map-object-main.c:221 -#, fuzzy -#| msgid "Rotation angle about Z axis" msgid "Rotation about Z axis in degrees" -msgstr "Ángulo de rotación alrededor del eje Z" +msgstr "Rotación alrededor del eje Z en grados" #: plug-ins/map-object/map-object-main.c:226 -#, fuzzy -#| msgid "Lightsource type:" msgid "Light source type" -msgstr "Tipo de fuente de luz:" +msgstr "Tipo de fuente de luz" #: plug-ins/map-object/map-object-main.c:227 #, fuzzy @@ -14237,22 +14421,16 @@ msgid "Point Light" msgstr "Punto de luz" #: plug-ins/map-object/map-object-main.c:229 -#, fuzzy -#| msgid "Directional light" msgid "Directional Light" msgstr "Luz direccional" #: plug-ins/map-object/map-object-main.c:230 -#, fuzzy -#| msgid "No light" msgid "No Light" msgstr "Sin luz" #: plug-ins/map-object/map-object-main.c:236 -#, fuzzy -#| msgid "Lightsource color:" msgid "Light source _color" -msgstr "Color de fuente de luz:" +msgstr "_Color de fuente de luz" #: plug-ins/map-object/map-object-main.c:274 msgid "Ambie_nt" @@ -14280,7 +14458,7 @@ msgstr "Di_fusa" #: plug-ins/map-object/map-object-main.c:288 msgid "Material diffuse reflectivity" -msgstr "" +msgstr "Reflectividad difusa del material" #: plug-ins/map-object/map-object-main.c:293 msgid "Spec_ular" @@ -14288,23 +14466,19 @@ msgstr "Espec_ular" #: plug-ins/map-object/map-object-main.c:294 msgid "Material specular reflectivity" -msgstr "" +msgstr "Reflectividad especular del material" #: plug-ins/map-object/map-object-main.c:299 -#, fuzzy -#| msgid "Highlight:" msgid "Highligh_t" -msgstr "Reflejos:" +msgstr "Refle_jos" #: plug-ins/map-object/map-object-main.c:300 msgid "Material highlight (note, it's exponential)" -msgstr "" +msgstr "Destacado del material (tenga en cuenta que es exponencial)" #: plug-ins/map-object/map-object-main.c:306 -#, fuzzy -#| msgid "Antialiasing" msgid "Antialia_sing" -msgstr "Antialias" +msgstr "Ali_sado" #: plug-ins/map-object/map-object-main.c:311 msgid "_Depth" @@ -14315,8 +14489,6 @@ msgid "Antialiasing quality. Higher is better, but slower" msgstr "Calidad del suavizado. A mayor calidad, mejor, pero más lento" #: plug-ins/map-object/map-object-main.c:317 -#, fuzzy -#| msgid "_Threshold" msgid "Thr_eshold" msgstr "U_mbral" @@ -14326,20 +14498,16 @@ msgstr "" "Parar cuando las diferencias entre píxeles sean más pequeñas que este valor" #: plug-ins/map-object/map-object-main.c:324 -#, fuzzy -#| msgid "Tile source image" msgid "_Tile source image" -msgstr "Enlosado con imagen de origen" +msgstr "E_nlosado con imagen de origen" #: plug-ins/map-object/map-object-main.c:325 msgid "Tile source image" msgstr "Enlosado con imagen de origen" #: plug-ins/map-object/map-object-main.c:330 -#, fuzzy -#| msgid "Create new image" msgid "Create _new image" -msgstr "Crear imagen nueva" +msgstr "Crear imagen _nueva" #: plug-ins/map-object/map-object-main.c:336 msgid "Create ne_w layer" @@ -14350,10 +14518,8 @@ msgid "Create a new layer when applying filter" msgstr "Crea una capa nueva cuando se aplica el filtro" #: plug-ins/map-object/map-object-main.c:342 -#, fuzzy -#| msgid "Transparent background" msgid "Transparent bac_kground" -msgstr "Fondo transparente" +msgstr "Fondo _transparente" #: plug-ins/map-object/map-object-main.c:350 #, fuzzy @@ -14363,15 +14529,15 @@ msgstr "Radio de puntos:" #: plug-ins/map-object/map-object-main.c:356 msgid "Fro_nt" -msgstr "" +msgstr "Fro_ntal" #: plug-ins/map-object/map-object-main.c:357 msgid "Box front face (set this to NULL if not used)" -msgstr "" +msgstr "Cara frontal de caja (establezca en NULL si no se usa)" #: plug-ins/map-object/map-object-main.c:362 msgid "B_ack" -msgstr "" +msgstr "P_osterior" #: plug-ins/map-object/map-object-main.c:363 #, fuzzy @@ -14381,37 +14547,31 @@ msgstr "Retroceder una página" #: plug-ins/map-object/map-object-main.c:368 msgid "Box top face" -msgstr "" +msgstr "Cara superior de caja" #: plug-ins/map-object/map-object-main.c:372 msgid "Bo_ttom" msgstr "Fo_ndo" #: plug-ins/map-object/map-object-main.c:373 -#, fuzzy -#| msgid "Bottom edge" msgid "Box bottom face" -msgstr "Borde inferior" +msgstr "Cara inferior de la caja" #: plug-ins/map-object/map-object-main.c:377 msgid "Le_ft" -msgstr "" +msgstr "I_zquierda" #: plug-ins/map-object/map-object-main.c:378 msgid "Box left face" -msgstr "" +msgstr "Cara izquierda de caja" #: plug-ins/map-object/map-object-main.c:383 -#, fuzzy -#| msgid "To _right" msgid "Box right face" -msgstr "A la de_recha" +msgstr "Cara derecha de la caja" #: plug-ins/map-object/map-object-main.c:388 -#, fuzzy -#| msgid "Scale X:" msgid "Scale X" -msgstr "Escala X:" +msgstr "Escala X" #: plug-ins/map-object/map-object-main.c:389 #, fuzzy @@ -14420,10 +14580,8 @@ msgid "Box X size" msgstr "Tamaño _X:" #: plug-ins/map-object/map-object-main.c:393 -#, fuzzy -#| msgid "Scale Y:" msgid "Scale Y" -msgstr "Escala Y:" +msgstr "Escala Y" #: plug-ins/map-object/map-object-main.c:394 #, fuzzy @@ -14432,10 +14590,8 @@ msgid "Box Y size" msgstr "Tamaño _Y:" #: plug-ins/map-object/map-object-main.c:398 -#, fuzzy -#| msgid "Scale Z:" msgid "Scale Z" -msgstr "Escala Z:" +msgstr "Escala Z" #: plug-ins/map-object/map-object-main.c:399 #, fuzzy @@ -14444,28 +14600,24 @@ msgid "Box Z size" msgstr "Tamaño de la tipografía:" #: plug-ins/map-object/map-object-main.c:405 -#, fuzzy -#| msgid "_Top:" msgid "_Top" -msgstr "S_uperior:" +msgstr "S_uperior" #: plug-ins/map-object/map-object-main.c:406 msgid "Cylinder top face (set this to NULL if not used)" -msgstr "" +msgstr "Cara superior del cilindro (establezca en NULL si no se usa)" #: plug-ins/map-object/map-object-main.c:412 msgid "Cylinder bottom face (set this to NULL if not used)" -msgstr "" +msgstr "Cara inferior del cilindro (establezca en NULL si no se usa)" #: plug-ins/map-object/map-object-main.c:418 msgid "Cylinder radius" msgstr "Radio del cilindro" #: plug-ins/map-object/map-object-main.c:422 -#, fuzzy -#| msgid "Cylinder length" msgid "Cylin_der length" -msgstr "Longitud del cilindro" +msgstr "Longitud del cilin_dro" #: plug-ins/map-object/map-object-main.c:423 msgid "Cylinder length" @@ -14531,16 +14683,12 @@ msgid "Viewpoint Position" msgstr "Posición" #: plug-ins/map-object/map-object-ui.c:585 -#, fuzzy -#| msgid "First Gfig" msgid "First Axis" -msgstr "Primer Gfig" +msgstr "Primer eje" #: plug-ins/map-object/map-object-ui.c:605 -#, fuzzy -#| msgid "seconds" msgid "Second Axis" -msgstr "segundos" +msgstr "Segundo eje" #: plug-ins/map-object/map-object-ui.c:661 #: plug-ins/map-object/map-object-ui.c:675 @@ -15119,10 +15267,8 @@ msgid "Trained algorithmic media" msgstr "Medios algorítmicos entrenados" #: plug-ins/metadata/metadata-tags.c:200 -#, fuzzy -#| msgid "Prim's algorithm" msgid "Pure algorithmic media" -msgstr "Algoritmo de Prim" +msgstr "Medios algorítmicos puros" #: plug-ins/metadata/metadata-tags.c:201 msgid "Created by software" @@ -15363,14 +15509,12 @@ msgid "Current gradient (reversed)" msgstr "Degradado actual (invertido)" #: plug-ins/pagecurl/pagecurl.c:238 -#, fuzzy -#| msgid "Curl Location" msgid "Locatio_n" -msgstr "Localización del doblado" +msgstr "Ubicació_n" #: plug-ins/pagecurl/pagecurl.c:239 msgid "Corner which is curled" -msgstr "" +msgstr "La esquina que está curvada" #: plug-ins/pagecurl/pagecurl.c:240 msgid "Upper left" @@ -15390,7 +15534,7 @@ msgstr "Inferior derecha" #: plug-ins/pagecurl/pagecurl.c:257 msgid "Sh_ade" -msgstr "" +msgstr "S_ombra" #: plug-ins/pagecurl/pagecurl.c:258 #, fuzzy @@ -15507,7 +15651,7 @@ msgstr "Crear una imagen de un área de la pantalla" #: plug-ins/screenshot/screenshot.c:164 msgid "Shoot _area" -msgstr "" +msgstr "_Área de captura" #: plug-ins/screenshot/screenshot.c:224 msgid "Color _Profile" @@ -15521,7 +15665,7 @@ msgstr "La transacción DDE ha fallado." #: plug-ins/screenshot/screenshot.c:302 msgid "No screenshot backends available." -msgstr "" +msgstr "No hay backends de captura de pantalla disponibles." #: plug-ins/screenshot/screenshot.c:504 #: plug-ins/screenshot/screenshot-x11.c:443 @@ -15545,10 +15689,8 @@ msgid "Take a screenshot of the entire screen" msgstr "Tomar una capturar de la _pantalla completa" #: plug-ins/screenshot/screenshot.c:509 -#, fuzzy -#| msgid "Select a _region to grab" msgid "Select a region to grab" -msgstr "Seleccione una _región para obtener" +msgstr "Seleccione una región que obtener" #: plug-ins/screenshot/screenshot.c:595 msgid "Delay" @@ -15561,10 +15703,8 @@ msgid "Tag image with monitor profile" msgstr "Etiquetar la imagen con el perfil del _monitor" #: plug-ins/screenshot/screenshot.c:604 -#, fuzzy -#| msgid "Convert image to sR_GB" msgid "Convert image with sRGB" -msgstr "Convertir imagen a sR_GB" +msgstr "Convertir imagen con sRGB" #: plug-ins/screenshot/screenshot-win32.c:304 msgid "No data captured" @@ -15593,26 +15733,20 @@ msgstr "Selección a ruta" #: plug-ins/selection-to-path/selection-to-path.c:143 #: plug-ins/selection-to-path/selection-to-path.c:144 -#, fuzzy -#| msgid "Selection to Path" msgid "Converts a selection to a path" -msgstr "Selección a ruta" +msgstr "Convierte una selección a una ruta" #: plug-ins/selection-to-path/selection-to-path.c:152 -#, fuzzy -#| msgid "Align Threshold:" msgid "_Align Threshold" -msgstr "Alineación del límite:" +msgstr "_Alineación del límite" #: plug-ins/selection-to-path/selection-to-path.c:153 msgid "If two endpoints are closer than this, they are made to be equal." msgstr "Si dos puntos finales están cerca de este valor, tienden a igualarse." #: plug-ins/selection-to-path/selection-to-path.c:159 -#, fuzzy -#| msgid "Corner Always Threshold:" msgid "Corner Al_ways Threshold" -msgstr "Siempre la esquina límite:" +msgstr "Umbral de sie_mpre esquina" #: plug-ins/selection-to-path/selection-to-path.c:160 msgid "" @@ -15625,10 +15759,8 @@ msgstr "" "«entorno de la esquina» de un punto con un ángulo más pequeño." #: plug-ins/selection-to-path/selection-to-path.c:168 -#, fuzzy -#| msgid "Corner Surround:" msgid "Corner _Surround" -msgstr "Entorno de la esquina:" +msgstr "Entorno de la e_squina" #: plug-ins/selection-to-path/selection-to-path.c:169 msgid "" @@ -15638,10 +15770,8 @@ msgstr "" "esquina o no." #: plug-ins/selection-to-path/selection-to-path.c:175 -#, fuzzy -#| msgid "Corner Threshold:" msgid "Cor_ner Threshold" -msgstr "Borde de esquina:" +msgstr "Umbral de es_quina" #: plug-ins/selection-to-path/selection-to-path.c:176 msgid "" @@ -15652,10 +15782,8 @@ msgstr "" "que este, es una esquina." #: plug-ins/selection-to-path/selection-to-path.c:182 -#, fuzzy -#| msgid "Error Threshold:" msgid "Error Thres_hold" -msgstr "Umbral de error:" +msgstr "Um_bral de error" #: plug-ins/selection-to-path/selection-to-path.c:183 msgid "" @@ -15666,10 +15794,8 @@ msgstr "" "cualquier píxel está más lejos de la curva ajustada, intentar de nuevo." #: plug-ins/selection-to-path/selection-to-path.c:190 -#, fuzzy -#| msgid "Filter Alternative Surround:" msgid "_Filter Alternative Surround" -msgstr "Filtro alternativo envoltorio:" +msgstr "_Filtrar envolvente alternativo" #: plug-ins/selection-to-path/selection-to-path.c:191 msgid "A second number of adjacent points to consider when filtering." @@ -15690,10 +15816,8 @@ msgstr "" "filtro_envolvente_alternativo." #: plug-ins/selection-to-path/selection-to-path.c:206 -#, fuzzy -#| msgid "Filter Iteration Count:" msgid "Filter Iteration Co_unt" -msgstr "Filtrar el número de iteraciones:" +msgstr "Filtrar el nú_mero de iteraciones" #: plug-ins/selection-to-path/selection-to-path.c:207 msgid "" @@ -15708,10 +15832,8 @@ msgstr "" "alrededor de ese punto." #: plug-ins/selection-to-path/selection-to-path.c:216 -#, fuzzy -#| msgid "Filter Percent:" msgid "Filt_er Percent" -msgstr "Porcentaje de filtro:" +msgstr "Porcentaje de filtr_o" #: plug-ins/selection-to-path/selection-to-path.c:217 msgid "" @@ -15721,10 +15843,8 @@ msgstr "" "vecinos." #: plug-ins/selection-to-path/selection-to-path.c:223 -#, fuzzy -#| msgid "Filter Secondary Surround:" msgid "Filter Secondar_y Surround" -msgstr "Filtro secundario envolvente:" +msgstr "Filtrar envolvente secundar_io" #: plug-ins/selection-to-path/selection-to-path.c:224 msgid "" @@ -15735,20 +15855,16 @@ msgstr "" "«filtro_envolvente» definen una línea recta." #: plug-ins/selection-to-path/selection-to-path.c:230 -#, fuzzy -#| msgid "Filter Surround:" msgid "Filter Surroun_d" -msgstr "Filtro envolvente:" +msgstr "Filtrar envol_vente" #: plug-ins/selection-to-path/selection-to-path.c:231 msgid "Number of adjacent points to consider when filtering." msgstr "Número de puntos adyacentes que considerar cuando filtra." #: plug-ins/selection-to-path/selection-to-path.c:236 -#, fuzzy -#| msgid "Keep Knees" msgid "_Keep Knees" -msgstr "Guardar los ángulos" +msgstr "_Mantener los ángulos" #: plug-ins/selection-to-path/selection-to-path.c:237 msgid "Says whether or not to remove 'knee' points after finding the outline." @@ -15757,10 +15873,8 @@ msgstr "" "contorno." #: plug-ins/selection-to-path/selection-to-path.c:243 -#, fuzzy -#| msgid "Line Reversion Threshold:" msgid "_Line Reversion Threshold" -msgstr "Línea límite de reversión:" +msgstr "Umbral de reversión de _línea" #: plug-ins/selection-to-path/selection-to-path.c:244 msgid "" @@ -15775,10 +15889,8 @@ msgstr "" "cortas, más probablemente para reconvertirse." #: plug-ins/selection-to-path/selection-to-path.c:253 -#, fuzzy -#| msgid "Line Threshold:" msgid "L_ine Threshold" -msgstr "Línea límite:" +msgstr "L_ínea límite" #: plug-ins/selection-to-path/selection-to-path.c:254 msgid "" @@ -15789,10 +15901,8 @@ msgstr "" "determinada por sus puntos finales antes de que cambie a una línea recta." #: plug-ins/selection-to-path/selection-to-path.c:261 -#, fuzzy -#| msgid "Reparametrize Improvement:" msgid "Reparametri_ze Improvement" -msgstr "Cambio de parámetros de mejora:" +msgstr "Mejora de reparametri_zar" #: plug-ins/selection-to-path/selection-to-path.c:262 msgid "" @@ -15804,10 +15914,8 @@ msgstr "" "parámetros." #: plug-ins/selection-to-path/selection-to-path.c:269 -#, fuzzy -#| msgid "Reparametrize Threshold:" msgid "Repara_metrize Threshold" -msgstr "Cambio de parámetros del límite:" +msgstr "Umbral de repara_metrizar" #: plug-ins/selection-to-path/selection-to-path.c:270 msgid "" @@ -15824,10 +15932,8 @@ msgstr "" "mejor detectar los casos en los que no se encontró ninguna esquina." #: plug-ins/selection-to-path/selection-to-path.c:280 -#, fuzzy -#| msgid "Subdivide Search:" msgid "Subdi_vide Search" -msgstr "Subdividir búsqueda:" +msgstr "Búsqueda de subdi_vidir" #: plug-ins/selection-to-path/selection-to-path.c:281 msgid "" @@ -15838,10 +15944,8 @@ msgstr "" "subdividir." #: plug-ins/selection-to-path/selection-to-path.c:287 -#, fuzzy -#| msgid "Subdivide Surround:" msgid "Su_bdivide Surround" -msgstr "Subdivisión envolvente:" +msgstr "Envolvente de su_bdividir" #: plug-ins/selection-to-path/selection-to-path.c:288 msgid "" @@ -15852,10 +15956,8 @@ msgstr "" "lugar para subdividir." #: plug-ins/selection-to-path/selection-to-path.c:294 -#, fuzzy -#| msgid "Subdivide Threshold:" msgid "Subdivide Th_reshold" -msgstr "Límite de subdivisión:" +msgstr "Um_bral de subdivisión" #: plug-ins/selection-to-path/selection-to-path.c:295 msgid "" @@ -15866,10 +15968,8 @@ msgstr "" "mejor lugar para subdividir." #: plug-ins/selection-to-path/selection-to-path.c:302 -#, fuzzy -#| msgid "Tangent Surround:" msgid "_Tangent Surround" -msgstr "Marco de la tangente:" +msgstr "Envolvente de la _tangente" #: plug-ins/selection-to-path/selection-to-path.c:303 msgid "" @@ -15900,10 +16000,51 @@ msgid "_Scanner/Camera..." msgstr "_Escáner/Cámara…" #. Initialize our progress dialog -#: plug-ins/twain/twain.c:521 +#: plug-ins/twain/twain.c:496 msgid "Transferring data from scanner/camera" msgstr "Transfiriendo datos desde el escáner/cámara" +#, fuzzy +#~| msgid "Parameter k:" +#~ msgid "Parameter URI" +#~ msgstr "Parámetro k:" + +#~ msgid "_Saturation" +#~ msgstr "_Saturación" + +#~ msgid "Export Image as DDS" +#~ msgstr "Exportar imagen como DDS" + +#~ msgid "_Compression:" +#~ msgstr "_Compresión:" + +#~ msgid "_Format:" +#~ msgstr "_Formato:" + +#~ msgid "_Save:" +#~ msgstr "_Guardar:" + +#~ msgid "_Mipmaps:" +#~ msgstr "_Mipmaps:" + +#~ msgid "_Rendering" +#~ msgstr "_Renderizado" + +#~ msgid "_Brightness:" +#~ msgstr "_Brillo:" + +#~ msgid "Sample _density:" +#~ msgstr "_Densidad de la muestra:" + +#~ msgid "Spatial _filter radius:" +#~ msgstr "Radio del _filtro espacial:" + +#~ msgid "C_amera" +#~ msgstr "Cámar_a" + +#~ msgid "_Zoom:" +#~ msgstr "Amplia_ción:" + #~ msgid "O_ffset:" #~ msgstr "Des_plazamiento:" @@ -16603,9 +16744,6 @@ msgstr "Transfiriendo datos desde el escáner/cámara" #~ msgid "_Preferences" #~ msgstr "_Preferencias" -#~ msgid "_Zoom" -#~ msgstr "A_cercamiento" - #~ msgid "Re_center" #~ msgstr "Re_centrar" @@ -18581,9 +18719,6 @@ msgstr "Transfiriendo datos desde el escáner/cámara" #~ msgid "Octagons & squares" #~ msgstr "Octógonos y cuadrados" -#~ msgid "Triangles" -#~ msgstr "Triángulos" - #~ msgid "_Tiling primitives:" #~ msgstr "Primitivas de _enlosado:" @@ -19280,9 +19415,6 @@ msgstr "Transfiriendo datos desde el escáner/cámara" #~ msgid "Percentage of pixels to be filtered" #~ msgstr "Porcentaje de píxeles a filtrar" -#~ msgid "R_epeat:" -#~ msgstr "R_epetir:" - #~ msgid "Move pixels around randomly" #~ msgstr "Mover píxeles alrededor aleatoriamente" @@ -19395,9 +19527,6 @@ msgstr "Transfiriendo datos desde el escáner/cámara" #~ msgid "XJT" #~ msgstr "XJT" -#~ msgid "Clear transparent" -#~ msgstr "Limpiar transparencia" - #~ msgid "Could not create working folder '%s': %s" #~ msgstr "No se pudo crear la carpeta de trabajo: «%s»: %s" diff --git a/po-plug-ins/ka.po b/po-plug-ins/ka.po index bd5136c..43858c1 100644 --- a/po-plug-ins/ka.po +++ b/po-plug-ins/ka.po @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: pika-plugins\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-10-27 01:18+0000\n" -"PO-Revision-Date: 2023-10-27 06:36+0200\n" +"POT-Creation-Date: 2023-12-01 20:47+0000\n" +"PO-Revision-Date: 2023-12-01 23:43+0100\n" "Last-Translator: Ekaterine Papava \n" "Language-Team: Georgian <(nothing)>\n" "Language: ka\n" @@ -16,7 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4\n" +"X-Generator: Poedit 3.3.2\n" #: extensions/goat-exercises/goat-exercise-c.c:114 msgid "Exercise in _C minor" @@ -40,9 +40,8 @@ msgstr "ავარჯიშეთ თხა C-ში" #: plug-ins/common/sphere-designer.c:3185 plug-ins/common/tile.c:218 #: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:243 #: plug-ins/common/warp.c:344 plug-ins/common/wavelet-decompose.c:181 -#: plug-ins/file-dds/dds.c:542 plug-ins/flame/flame.c:299 -#: plug-ins/fractal-explorer/fractal-explorer.c:427 plug-ins/gfig/gfig.c:215 -#: plug-ins/pikaressionist/pika.c:184 +#: plug-ins/flame/flame.c:299 plug-ins/fractal-explorer/fractal-explorer.c:427 +#: plug-ins/gfig/gfig.c:215 plug-ins/pikaressionist/pika.c:184 #: plug-ins/gradient-flare/gradient-flare.c:925 #: plug-ins/ifs-compose/ifs-compose.c:492 plug-ins/imagemap/imap_main.c:264 #: plug-ins/lighting/lighting-main.c:756 @@ -63,9 +62,9 @@ msgstr "ავარჯიშეთ თხა (c)" #: plug-ins/common/busy-dialog.c:279 plug-ins/common/cml-explorer.c:1379 #: plug-ins/common/cml-explorer.c:2146 plug-ins/common/cml-explorer.c:2356 #: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1809 -#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1159 -#: plug-ins/common/file-heif.c:2345 plug-ins/common/file-pdf-load.c:686 -#: plug-ins/common/file-pdf-save.c:1046 plug-ins/common/grid.c:786 +#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1188 +#: plug-ins/common/file-heif.c:2378 plug-ins/common/file-pdf-load.c:686 +#: plug-ins/common/file-pdf-save.c:1053 plug-ins/common/grid.c:786 #: plug-ins/common/qbist.c:836 plug-ins/common/qbist.c:878 #: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2292 #: plug-ins/common/sphere-designer.c:2637 plug-ins/common/unit-editor.c:435 @@ -86,10 +85,10 @@ msgstr "ავარჯიშეთ თხა (c)" #: plug-ins/ifs-compose/ifs-compose.c:2597 plug-ins/imagemap/imap_browse.c:80 #: plug-ins/imagemap/imap_default_dialog.c:106 plug-ins/imagemap/imap_file.c:73 #: plug-ins/imagemap/imap_file.c:128 plug-ins/lighting/lighting-ui.c:738 -#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1185 -#: plug-ins/metadata/metadata-editor.c:1681 -#: plug-ins/metadata/metadata-editor.c:5532 -#: plug-ins/metadata/metadata-editor.c:5567 +#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1177 +#: plug-ins/metadata/metadata-editor.c:1673 +#: plug-ins/metadata/metadata-editor.c:5524 +#: plug-ins/metadata/metadata-editor.c:5559 msgid "_Cancel" msgstr "_შეწყვეტა" @@ -140,7 +139,7 @@ msgstr "" #: extensions/goat-exercises/goat-exercise-lua.lua:73 #: extensions/goat-exercises/goat-exercise-py3.py:79 #: plug-ins/common/cml-explorer.c:1380 plug-ins/common/colormap-remap.c:695 -#: plug-ins/common/file-heif.c:2346 plug-ins/common/file-pdf-load.c:687 +#: plug-ins/common/file-heif.c:2379 plug-ins/common/file-pdf-load.c:687 #: plug-ins/common/grid.c:787 plug-ins/common/qbist.c:933 #: plug-ins/common/sphere-designer.c:2638 plug-ins/common/unit-editor.c:266 #: plug-ins/common/warp.c:473 plug-ins/file-exr/file-exr.c:422 @@ -316,7 +315,7 @@ msgstr "ხილული ფენების სწორება" #. file save type #: plug-ins/common/align-layers.c:740 plug-ins/common/align-layers.c:758 #: plug-ins/common/file-ps.c:3729 plug-ins/common/file-ps.c:3737 -#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:209 +#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:191 #: plug-ins/file-tiff/file-tiff.c:240 #: plug-ins/fractal-explorer/fractal-explorer.c:344 #: plug-ins/fractal-explorer/fractal-explorer.c:354 @@ -524,11 +523,11 @@ msgstr "დაკვრის სიჩქარე" #. 2 styles of default frame disposals: cumulative layers and one #. * frame per layer. #. -#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1269 +#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1298 msgid "Cumulative layers (combine)" msgstr "" -#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1271 +#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1300 msgid "One frame per layer (replace)" msgstr "" @@ -612,16 +611,16 @@ msgstr "ვერტიკალური" #: plug-ins/common/decompose.c:645 plug-ins/common/file-cel.c:495 #: plug-ins/common/file-cel.c:500 plug-ins/common/file-dicom.c:751 #: plug-ins/common/file-farbfeld.c:321 plug-ins/common/file-gegl.c:471 -#: plug-ins/common/file-gif-load.c:1117 plug-ins/common/file-iff.c:335 +#: plug-ins/common/file-gif-load.c:1147 plug-ins/common/file-iff.c:345 #: plug-ins/common/file-jp2-load.c:1303 plug-ins/common/file-pcx.c:728 #: plug-ins/common/file-pcx.c:736 plug-ins/common/file-pcx.c:744 -#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:935 +#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:947 #: plug-ins/common/file-pnm.c:868 plug-ins/common/file-qoi.c:320 #: plug-ins/common/file-raw-data.c:1828 plug-ins/common/file-sunras.c:1082 #: plug-ins/common/file-tga.c:1116 plug-ins/common/file-wbmp.c:274 #: plug-ins/common/file-xbm.c:911 plug-ins/common/film.c:844 #: plug-ins/common/smooth-palette.c:302 plug-ins/common/tile.c:399 -#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:281 +#: plug-ins/file-bmp/bmp-load.c:738 plug-ins/file-exr/file-exr.c:281 #: plug-ins/file-faxg3/faxg3.c:578 plug-ins/file-fits/fits.c:700 #: plug-ins/file-jpeg/jpeg-load.c:231 #: plug-ins/file-psd/psd-image-res-load.c:1082 @@ -934,9 +933,9 @@ msgstr "გაჯერებულობა" #: plug-ins/common/cml-explorer.c:301 plug-ins/common/cml-explorer.c:309 #: plug-ins/common/decompose.c:204 plug-ins/pikaressionist/orientation.c:148 -#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:317 -#: plug-ins/metadata/metadata-viewer.c:355 -#: plug-ins/metadata/metadata-viewer.c:393 +#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:309 +#: plug-ins/metadata/metadata-viewer.c:347 +#: plug-ins/metadata/metadata-viewer.c:385 msgid "Value" msgstr "მნიშვნელობა" @@ -1009,7 +1008,7 @@ msgstr "_გახსნა" #. The Save button #: plug-ins/common/cml-explorer.c:1464 plug-ins/common/cml-explorer.c:2147 #: plug-ins/common/curve-bend.c:1279 plug-ins/common/curve-bend.c:1845 -#: plug-ins/common/file-pdf-save.c:1045 plug-ins/common/qbist.c:879 +#: plug-ins/common/file-pdf-save.c:1052 plug-ins/common/qbist.c:879 #: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2295 #: plug-ins/common/sphere-designer.c:2694 plug-ins/flame/flame.c:624 #: plug-ins/flame/flame.c:1241 @@ -1178,7 +1177,7 @@ msgstr "" #: plug-ins/common/procedure-browser.c:169 plug-ins/gfig/gfig-dialog.c:355 #: plug-ins/gfig/gfig-dialog.c:1218 plug-ins/gfig/gfig-dialog.c:1363 #: plug-ins/ifs-compose/ifs-compose.c:1214 -#: plug-ins/metadata/metadata-viewer.c:272 +#: plug-ins/metadata/metadata-viewer.c:264 msgid "_Close" msgstr "_დახურვა" @@ -1194,7 +1193,7 @@ msgstr "" #: plug-ins/common/file-dicom.c:1564 plug-ins/common/file-farbfeld.c:380 #: plug-ins/common/file-mng.c:871 plug-ins/common/file-mng.c:1218 #: plug-ins/common/file-pcx.c:1216 plug-ins/common/file-pdf-save.c:659 -#: plug-ins/common/file-png.c:1488 plug-ins/common/file-raw-data.c:1337 +#: plug-ins/common/file-png.c:1518 plug-ins/common/file-raw-data.c:1337 #: plug-ins/common/file-raw-data.c:1366 plug-ins/common/file-sunras.c:637 #: plug-ins/common/file-tga.c:1237 plug-ins/common/file-xmc.c:1381 #: plug-ins/common/sphere-designer.c:2206 plug-ins/file-bmp/bmp-save.c:341 @@ -1447,7 +1446,7 @@ msgstr "" #: plug-ins/common/compose.c:244 plug-ins/common/compose.c:438 #: plug-ins/common/compose.c:501 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2511 +#: plug-ins/common/file-heif.c:2544 msgid "RGB" msgstr "RGB" @@ -1909,10 +1908,10 @@ msgstr "" #: plug-ins/common/curve-bend.c:834 plug-ins/common/file-cel.c:350 #: plug-ins/common/file-cel.c:402 plug-ins/common/file-dicom.c:383 -#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:414 +#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:416 #: plug-ins/common/file-iff.c:219 plug-ins/common/file-mng.c:1402 #: plug-ins/common/file-pcx.c:509 plug-ins/common/file-pcx.c:552 -#: plug-ins/common/file-png.c:658 plug-ins/common/file-ps.c:1109 +#: plug-ins/common/file-png.c:665 plug-ins/common/file-ps.c:1109 #: plug-ins/common/file-ps.c:3619 plug-ins/common/file-psp.c:2631 #: plug-ins/common/file-psp.c:2681 plug-ins/common/file-qoi.c:299 #: plug-ins/common/file-raw-data.c:515 plug-ins/common/file-raw-data.c:1665 @@ -1921,7 +1920,7 @@ msgstr "" #: plug-ins/common/file-wbmp.c:188 plug-ins/common/file-xbm.c:749 #: plug-ins/common/file-xmc.c:656 plug-ins/common/file-xmc.c:895 #: plug-ins/common/file-xwd.c:492 plug-ins/common/sphere-designer.c:2095 -#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:156 +#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:160 #: plug-ins/file-faxg3/faxg3.c:260 plug-ins/file-fits/fits.c:395 #: plug-ins/file-fli/fli-pika.c:450 plug-ins/file-fli/fli-pika.c:501 #: plug-ins/file-icns/file-icns-load.c:516 @@ -2402,7 +2401,7 @@ msgid "" "of text formats" msgstr "" -#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:231 +#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:213 msgid "_Format" msgstr "_ფორმატირება" @@ -2464,11 +2463,11 @@ msgstr "" #. * Open the file for reading... #. #: plug-ins/common/file-cel.c:393 plug-ins/common/file-dicom.c:375 -#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:406 -#: plug-ins/common/file-heif.c:871 plug-ins/common/file-jp2-load.c:1077 +#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:408 +#: plug-ins/common/file-heif.c:910 plug-ins/common/file-jp2-load.c:1077 #: plug-ins/common/file-pcx.c:501 plug-ins/common/file-pcx.c:544 #: plug-ins/common/file-pdf-load.c:856 plug-ins/common/file-pix.c:393 -#: plug-ins/common/file-png.c:650 plug-ins/common/file-pnm.c:713 +#: plug-ins/common/file-png.c:657 plug-ins/common/file-pnm.c:713 #: plug-ins/common/file-ps.c:1099 plug-ins/common/file-raw-data.c:1657 #: plug-ins/common/file-sunras.c:449 plug-ins/common/file-tga.c:439 #: plug-ins/common/file-wbmp.c:180 plug-ins/common/file-wmf.c:784 @@ -2541,9 +2540,9 @@ msgstr "" #. * Open the file for writing... #. #: plug-ins/common/file-cel.c:845 plug-ins/common/file-farbfeld.c:372 -#: plug-ins/common/file-gif-save.c:912 plug-ins/common/file-html-table.c:359 -#: plug-ins/common/file-jpegxl.c:1376 plug-ins/common/file-pcx.c:1100 -#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1480 +#: plug-ins/common/file-gif-save.c:941 plug-ins/common/file-html-table.c:359 +#: plug-ins/common/file-jpegxl.c:1382 plug-ins/common/file-pcx.c:1100 +#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1510 #: plug-ins/common/file-pnm.c:1634 plug-ins/common/file-ps.c:1321 #: plug-ins/common/file-qoi.c:374 plug-ins/common/file-sunras.c:628 #: plug-ins/common/file-tga.c:1229 plug-ins/common/file-xbm.c:1050 @@ -2797,149 +2796,149 @@ msgstr "" msgid "GIF image" msgstr "GIF გამოსახულება" -#: plug-ins/common/file-gif-load.c:421 +#: plug-ins/common/file-gif-load.c:423 msgid "GIF magic code" msgstr "GIF-ის ჯადოსნური კოდი" -#: plug-ins/common/file-gif-load.c:429 +#: plug-ins/common/file-gif-load.c:431 msgid "This is not a GIF file: incorrect magic code" msgstr "" -#: plug-ins/common/file-gif-load.c:437 +#: plug-ins/common/file-gif-load.c:439 msgid "Incorrect GIF version: not '87a' or '89a'" msgstr "" -#: plug-ins/common/file-gif-load.c:444 +#: plug-ins/common/file-gif-load.c:446 msgid "screen descriptor" msgstr "ეკრანის დესკრიპტორი" -#: plug-ins/common/file-gif-load.c:462 +#: plug-ins/common/file-gif-load.c:464 msgid "global colormap" msgstr "გლობალური ფერების რუკა" -#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 +#: plug-ins/common/file-gif-load.c:476 plug-ins/common/file-gif-load.c:1110 msgid "image data" msgstr "გამოსახულების მონაცემები" -#: plug-ins/common/file-gif-load.c:491 +#: plug-ins/common/file-gif-load.c:493 msgid "extension data" msgstr "გაფართოების მონაცემები" -#: plug-ins/common/file-gif-load.c:511 +#: plug-ins/common/file-gif-load.c:513 msgid "frame info" msgstr "კადრის ინფორმაცია" -#: plug-ins/common/file-gif-load.c:524 +#: plug-ins/common/file-gif-load.c:526 msgid "local colormap" msgstr "ლოკალური ფერების რუკა" -#: plug-ins/common/file-gif-load.c:569 +#: plug-ins/common/file-gif-load.c:571 plug-ins/common/file-iff.c:361 msgid "" "Non-square pixels. Image might look squashed if Dot for Dot mode is enabled." msgstr "" -#: plug-ins/common/file-gif-load.c:606 plug-ins/common/file-gif-load.c:611 +#: plug-ins/common/file-gif-load.c:627 plug-ins/common/file-gif-load.c:632 #, c-format msgid "Error reading %s. %s" msgstr "შეცდომა '%s'-ის კითხვისას. %s" -#: plug-ins/common/file-gif-load.c:607 plug-ins/common/file-gif-load.c:612 -#: plug-ins/common/file-gif-load.c:763 plug-ins/common/file-gif-load.c:771 -#: plug-ins/common/file-gif-load.c:802 plug-ins/common/file-gif-load.c:856 -#: plug-ins/common/file-gif-load.c:946 plug-ins/common/file-gif-load.c:965 -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 -#: plug-ins/common/file-gif-load.c:1215 +#: plug-ins/common/file-gif-load.c:628 plug-ins/common/file-gif-load.c:633 +#: plug-ins/common/file-gif-load.c:793 plug-ins/common/file-gif-load.c:801 +#: plug-ins/common/file-gif-load.c:832 plug-ins/common/file-gif-load.c:886 +#: plug-ins/common/file-gif-load.c:976 plug-ins/common/file-gif-load.c:995 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 +#: plug-ins/common/file-gif-load.c:1245 msgid "Image may be corrupt!" msgstr "გამოსახულება შეიძლება დაზიანებულია!" -#: plug-ins/common/file-gif-load.c:763 +#: plug-ins/common/file-gif-load.c:793 msgid "Error reading data size" msgstr "მონაცემთა ზომის წაკითხვის შეცდომა" -#: plug-ins/common/file-gif-load.c:771 +#: plug-ins/common/file-gif-load.c:801 msgid "Error reading data" msgstr "მონაცემების წაკითხვის შეცდომა" -#: plug-ins/common/file-gif-load.c:802 +#: plug-ins/common/file-gif-load.c:832 msgid "Not enough compressed data" msgstr "არასაკმარისი შეკუმშული მონაცემები" -#: plug-ins/common/file-gif-load.c:856 +#: plug-ins/common/file-gif-load.c:886 msgid "Value out of range for code size" msgstr "" -#: plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:975 msgid "Invalid code, expecting end of data marker" msgstr "" -#: plug-ins/common/file-gif-load.c:965 +#: plug-ins/common/file-gif-load.c:995 msgid "Unexpected extra data" msgstr "მოულოდნელი დამატებითი მონაცემები" -#: plug-ins/common/file-gif-load.c:984 +#: plug-ins/common/file-gif-load.c:1014 msgid "Invalid table entry" msgstr "ცხრილის არასწორი ჩანაწერი" -#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1014 plug-ins/common/file-gif-load.c:1020 msgid "Image is corrupt!" msgstr "გამოსახულება დაზიანებულია!" -#: plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1020 msgid "Circular table entry" msgstr "" -#: plug-ins/common/file-gif-load.c:1065 +#: plug-ins/common/file-gif-load.c:1095 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 msgid "Invalid frame dimensions" msgstr "არასწორი კადრების ზომები" -#: plug-ins/common/file-gif-load.c:1086 +#: plug-ins/common/file-gif-load.c:1116 msgid "compressed image data" msgstr "შეკუმშული სურათის მონაცემები" -#: plug-ins/common/file-gif-load.c:1119 +#: plug-ins/common/file-gif-load.c:1149 #, c-format msgid "Background (%d%s)" msgstr "ფონი (%d%s)" -#: plug-ins/common/file-gif-load.c:1146 +#: plug-ins/common/file-gif-load.c:1176 #, c-format msgid "Opening '%s' (frame %d)" msgstr "'%s'-ის გახსნა (კადრი %d)" -#: plug-ins/common/file-gif-load.c:1175 +#: plug-ins/common/file-gif-load.c:1205 #, c-format msgid "Frame %d" msgstr "კადრი %d" -#: plug-ins/common/file-gif-load.c:1177 +#: plug-ins/common/file-gif-load.c:1207 #, c-format msgid "Frame %d (%d%s)" msgstr "კადრი %d (%d%s)" -#: plug-ins/common/file-gif-load.c:1208 +#: plug-ins/common/file-gif-load.c:1238 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " "play or re-save perfectly." msgstr "" -#: plug-ins/common/file-gif-load.c:1214 +#: plug-ins/common/file-gif-load.c:1244 #, c-format msgid "Unknown composite type %d. %s" msgstr "" -#: plug-ins/common/file-gif-load.c:1257 +#: plug-ins/common/file-gif-load.c:1287 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" msgstr "" -#: plug-ins/common/file-gif-load.c:1380 +#: plug-ins/common/file-gif-load.c:1410 msgid "Too much compressed data, ignoring extra..." msgstr "" @@ -3042,65 +3041,65 @@ msgstr "_კომენტარი" msgid "Image comment" msgstr "გამოსახულების კომენტარი" -#: plug-ins/common/file-gif-save.c:348 +#: plug-ins/common/file-gif-save.c:377 msgid "GIF format does not support multiple layers." msgstr "" -#: plug-ins/common/file-gif-save.c:553 +#: plug-ins/common/file-gif-save.c:582 msgid "Couldn't simply reduce colors further. Exporting as opaque." msgstr "" -#: plug-ins/common/file-gif-save.c:672 +#: plug-ins/common/file-gif-save.c:701 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are " "more than %d pixels wide or tall." msgstr "" -#: plug-ins/common/file-gif-save.c:798 +#: plug-ins/common/file-gif-save.c:827 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." msgstr "" -#: plug-ins/common/file-gif-save.c:885 +#: plug-ins/common/file-gif-save.c:914 msgid "" "Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "" -#: plug-ins/common/file-gif-save.c:1105 +#: plug-ins/common/file-gif-save.c:1134 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "" -#: plug-ins/common/file-gif-save.c:1154 +#: plug-ins/common/file-gif-save.c:1183 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." msgstr "" -#: plug-ins/common/file-gif-save.c:1160 +#: plug-ins/common/file-gif-save.c:1189 msgid "Cr_op" msgstr "" -#: plug-ins/common/file-gif-save.c:1171 +#: plug-ins/common/file-gif-save.c:1200 msgid "" "The GIF file format does not allow this. You may choose whether to crop all " "of the layers to the image borders, or cancel this export." msgstr "" -#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 +#: plug-ins/common/file-gif-save.c:1290 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "მილიწამი" -#: plug-ins/common/file-gif-save.c:1267 +#: plug-ins/common/file-gif-save.c:1296 msgid "I don't care" msgstr "არ მაინტერესებს" -#: plug-ins/common/file-gif-save.c:1303 +#: plug-ins/common/file-gif-save.c:1332 msgid "Animated GIF" msgstr "ანიმირებული GIF" -#: plug-ins/common/file-gif-save.c:1310 +#: plug-ins/common/file-gif-save.c:1339 msgid "" "You can only export as animation when the image has more than one layer.\n" "The image you are trying to export only has one layer." @@ -3195,15 +3194,15 @@ msgstr "" msgid "Header plug-in does not support multiple layers." msgstr "" -#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 +#: plug-ins/common/file-heif.c:204 plug-ins/common/file-heif.c:244 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:197 +#: plug-ins/common/file-heif.c:207 msgid "Loads HEIF images" msgstr "" -#: plug-ins/common/file-heif.c:198 +#: plug-ins/common/file-heif.c:208 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -3212,180 +3211,192 @@ msgstr "" "გამოსახულების ფაილის ფორმატი). ტიპიურ სუფიქსებს HEIF ფაილებისთვის " "წარმოადგენენ .heif და .heic." -#: plug-ins/common/file-heif.c:239 +#: plug-ins/common/file-heif.c:249 msgid "Exports HEIF images" msgstr "" -#: plug-ins/common/file-heif.c:240 +#: plug-ins/common/file-heif.c:250 msgid "Save image in HEIF format (High Efficiency Image File Format)." msgstr "" "გამოსახულების HEIF ფორმატში შენახვა (მაღალი ეფექტურობის გამოსახულების ფაილის " "ფორმატი)." -#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/common/file-heif.c:266 plug-ins/common/file-heif.c:376 #: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "_ხარისხი" -#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 +#: plug-ins/common/file-heif.c:267 plug-ins/common/file-heif.c:377 msgid "Quality factor (0 = worst, 100 = best)" msgstr "" -#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: plug-ins/common/file-heif.c:272 plug-ins/common/file-heif.c:382 #: plug-ins/common/file-jpegxl.c:188 plug-ins/file-webp/file-webp.c:178 msgid "L_ossless" msgstr "_კარგვის გარეშე" -#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-heif.c:273 plug-ins/common/file-heif.c:383 #: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "" -#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 +#: plug-ins/common/file-heif.c:278 plug-ins/common/file-heif.c:388 msgid "Save color prof_ile" msgstr "ფერის პროფილის _შენახვა" -#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 +#: plug-ins/common/file-heif.c:279 plug-ins/common/file-heif.c:389 msgid "Save the image's color profile" msgstr "" -#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 #: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "" -#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: plug-ins/common/file-heif.c:285 plug-ins/common/file-heif.c:395 #: plug-ins/common/file-jpegxl.c:201 msgid "Bit depth of exported image" msgstr "" -#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 -#: plug-ins/common/file-png.c:286 +#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 +#: plug-ins/common/file-png.c:290 msgid "_Pixel format" msgstr "_პიქსელის ფორმატი" -#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 +#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 msgid "Format of color sub-sampling" msgstr "" -#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 +#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 msgid "Enco_der speed" msgstr "" -#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 +#: plug-ins/common/file-heif.c:298 plug-ins/common/file-heif.c:408 msgid "Tradeoff between speed and compression" msgstr "" -#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-heif.c:304 plug-ins/common/file-heif.c:414 #: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "Exi_f-ის შენახვა" -#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: plug-ins/common/file-heif.c:305 plug-ins/common/file-heif.c:415 #: plug-ins/common/file-jpegxl.c:226 msgid "Toggle saving Exif data" msgstr "" -#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-heif.c:310 plug-ins/common/file-heif.c:420 #: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "_XMP-ის შენახვა" -#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: plug-ins/common/file-heif.c:311 plug-ins/common/file-heif.c:421 #: plug-ins/common/file-jpegxl.c:232 msgid "Toggle saving XMP data" msgstr "" -#: plug-ins/common/file-heif.c:315 +#: plug-ins/common/file-heif.c:325 msgid "Loads AVIF images" msgstr "ტვირთავს AVIF გამოსახულებებს" -#: plug-ins/common/file-heif.c:316 +#: plug-ins/common/file-heif.c:326 msgid "Load image stored in AV1 Image File Format (AVIF)" msgstr "" -#: plug-ins/common/file-heif.c:348 +#: plug-ins/common/file-heif.c:358 msgid "Exports AVIF images" msgstr "AVIF გამოსახულებების გატანა" -#: plug-ins/common/file-heif.c:349 +#: plug-ins/common/file-heif.c:359 msgid "Save image in AV1 Image File Format (AVIF)" msgstr "" -#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 +#: plug-ins/common/file-heif.c:432 +msgid "JPEG 2000 encapsulated in HEIF" +msgstr "" + +#: plug-ins/common/file-heif.c:435 +msgid "Loads HEJ2 images" +msgstr "ტვირთავს HEJ2 გამოსახულებებს" + +#: plug-ins/common/file-heif.c:436 +msgid "Load JPEG 2000 image encapsulated in HEIF (HEJ2)" +msgstr "" + +#: plug-ins/common/file-heif.c:541 plug-ins/common/file-heif.c:631 msgid "HEIF format does not support multiple layers." msgstr "" -#: plug-ins/common/file-heif.c:911 plug-ins/common/file-heif.c:944 -#: plug-ins/common/file-heif.c:985 plug-ins/common/file-heif.c:1051 +#: plug-ins/common/file-heif.c:950 plug-ins/common/file-heif.c:983 +#: plug-ins/common/file-heif.c:1024 plug-ins/common/file-heif.c:1090 #, c-format msgid "Loading HEIF image failed: %s" msgstr "" -#: plug-ins/common/file-heif.c:933 +#: plug-ins/common/file-heif.c:972 msgid "Loading HEIF image failed: Input file contains no readable images" msgstr "" -#: plug-ins/common/file-heif.c:1177 +#: plug-ins/common/file-heif.c:1216 msgid "image content" msgstr "გამოსახულების შემცველობა" -#: plug-ins/common/file-heif.c:1529 +#: plug-ins/common/file-heif.c:1562 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "" -#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 +#: plug-ins/common/file-heif.c:1612 plug-ins/common/file-heif.c:2019 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "" -#: plug-ins/common/file-heif.c:2107 +#: plug-ins/common/file-heif.c:2140 #, c-format msgid "Writing HEIF image failed: %s" msgstr "" -#: plug-ins/common/file-heif.c:2196 +#: plug-ins/common/file-heif.c:2229 msgid "primary" msgstr "ძირითადი" -#: plug-ins/common/file-heif.c:2341 +#: plug-ins/common/file-heif.c:2374 msgid "Load HEIF Image" msgstr "HEIF გამოსახულების ჩატვირთვა" -#: plug-ins/common/file-heif.c:2355 +#: plug-ins/common/file-heif.c:2388 msgid "Select Image" msgstr "სურათის ამორჩევა" -#: plug-ins/common/file-heif.c:2512 +#: plug-ins/common/file-heif.c:2545 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2513 +#: plug-ins/common/file-heif.c:2546 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 +#: plug-ins/common/file-heif.c:2554 plug-ins/common/file-jpegxl.c:2028 msgid "8 bit/channel" msgstr "8 ბიტი/არხი" -#: plug-ins/common/file-heif.c:2522 +#: plug-ins/common/file-heif.c:2555 msgid "10 bit/channel" msgstr "10 ბიტი/არხი" -#: plug-ins/common/file-heif.c:2523 +#: plug-ins/common/file-heif.c:2556 msgid "12 bit/channel" msgstr "12 ბიტი/არხი" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2562 msgid "Slow" msgstr "ნელი" -#: plug-ins/common/file-heif.c:2530 +#: plug-ins/common/file-heif.c:2563 msgid "Balanced" msgstr "დაბალანსებული" -#: plug-ins/common/file-heif.c:2531 +#: plug-ins/common/file-heif.c:2564 msgid "Fast" msgstr "სწრაფი" @@ -3532,11 +3543,11 @@ msgstr "" msgid "Load file in the IFF file format" msgstr "" -#: plug-ins/common/file-iff.c:252 +#: plug-ins/common/file-iff.c:254 msgid "Invalid or missing ILBM image" msgstr "" -#: plug-ins/common/file-iff.c:257 +#: plug-ins/common/file-iff.c:268 msgid "ILBM contains no image data - likely a palette file" msgstr "" @@ -3699,56 +3710,56 @@ msgstr "CMYK-ის სახით _გატანა" msgid "Create a CMYK JPEG XL image using the soft-proofing color profile" msgstr "" -#: plug-ins/common/file-jpegxl.c:2008 +#: plug-ins/common/file-jpegxl.c:2014 msgid "lightning (fastest)" msgstr "" -#: plug-ins/common/file-jpegxl.c:2009 +#: plug-ins/common/file-jpegxl.c:2015 msgid "thunder" msgstr "" -#: plug-ins/common/file-jpegxl.c:2010 +#: plug-ins/common/file-jpegxl.c:2016 msgid "falcon (faster)" msgstr "" -#: plug-ins/common/file-jpegxl.c:2011 +#: plug-ins/common/file-jpegxl.c:2017 msgid "cheetah" msgstr "" -#: plug-ins/common/file-jpegxl.c:2012 +#: plug-ins/common/file-jpegxl.c:2018 msgid "hare" msgstr "" -#: plug-ins/common/file-jpegxl.c:2013 +#: plug-ins/common/file-jpegxl.c:2019 msgid "wombat" msgstr "" -#: plug-ins/common/file-jpegxl.c:2014 +#: plug-ins/common/file-jpegxl.c:2020 msgid "squirrel" msgstr "ციყვი" -#: plug-ins/common/file-jpegxl.c:2015 +#: plug-ins/common/file-jpegxl.c:2021 msgid "kitten" msgstr "კნუტი" -#: plug-ins/common/file-jpegxl.c:2016 +#: plug-ins/common/file-jpegxl.c:2022 msgid "tortoise (slower)" msgstr "" -#: plug-ins/common/file-jpegxl.c:2023 +#: plug-ins/common/file-jpegxl.c:2029 msgid "16 bit/channel" msgstr "" -#: plug-ins/common/file-jpegxl.c:2031 +#: plug-ins/common/file-jpegxl.c:2037 msgid "CMYK profile required for export" msgstr "" -#: plug-ins/common/file-jpegxl.c:2039 plug-ins/file-jpeg/jpeg-save.c:900 +#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:900 #: plug-ins/file-psd/psd-save.c:2459 plug-ins/file-tiff/file-tiff-save.c:1315 msgid "Name of the color profile used for CMYK export." msgstr "" -#: plug-ins/common/file-jpegxl.c:2058 plug-ins/file-jpeg/jpeg-save.c:911 +#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:911 #: plug-ins/file-psd/psd-save.c:2470 plug-ins/file-tiff/file-tiff-save.c:1327 #, c-format msgid "Profile: %s" @@ -3835,7 +3846,7 @@ msgstr "_ნაგულისხმები კადრის წაშლა msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" msgstr "" -#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:252 msgid "Save _background color" msgstr "_ფონის ფერის შენახვა" @@ -3859,7 +3870,7 @@ msgstr "გარჩევადობის _შენახვა" msgid "Write pHYs (image resolution) chunk" msgstr "" -#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:270 msgid "Save creation _time" msgstr "შექმნის _დროის შენახვა" @@ -3870,7 +3881,7 @@ msgstr "" #. Inform the user that we couldn't losslessly save the #. * transparency & just use the full palette #. -#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2315 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "" @@ -3878,7 +3889,7 @@ msgstr "" msgid "MNG Options" msgstr "MNG პარამეტრები" -#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:233 msgid "PNG" msgstr "PNG" @@ -4011,13 +4022,13 @@ msgid "'%s' is not a PCX file" msgstr "'%s' PCX ფაილი არაა" #: plug-ins/common/file-pcx.c:693 plug-ins/common/file-wbmp.c:263 -#: plug-ins/file-bmp/bmp-load.c:726 plug-ins/file-psd/psd-load.c:548 +#: plug-ins/file-bmp/bmp-load.c:727 plug-ins/file-psd/psd-load.c:548 #, c-format msgid "Unsupported or invalid image width: %d" msgstr "" #: plug-ins/common/file-pcx.c:699 plug-ins/common/file-wbmp.c:269 -#: plug-ins/file-bmp/bmp-load.c:732 plug-ins/file-psd/psd-load.c:540 +#: plug-ins/file-bmp/bmp-load.c:733 plug-ins/file-psd/psd-load.c:540 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "" @@ -4201,7 +4212,7 @@ msgid "PDF" msgstr "PDF" #: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 -#: plug-ins/common/file-pdf-save.c:1098 +#: plug-ins/common/file-pdf-save.c:1105 msgid "_Fill transparent areas with background color" msgstr "გამჭვირვალე ადგილების ფონის ფერით _შევსება" @@ -4223,7 +4234,7 @@ msgid "" "read only!" msgstr "" -#: plug-ins/common/file-pdf-save.c:939 +#: plug-ins/common/file-pdf-save.c:946 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -4231,54 +4242,54 @@ msgid "" "missing fonts before exporting, otherwise your design may not look right." msgstr "" -#: plug-ins/common/file-pdf-save.c:1037 +#: plug-ins/common/file-pdf-save.c:1044 msgid "Save to:" msgstr "შენახვა მისამართზე:" -#: plug-ins/common/file-pdf-save.c:1041 +#: plug-ins/common/file-pdf-save.c:1048 msgid "Browse..." msgstr "მოძებნა..." -#: plug-ins/common/file-pdf-save.c:1042 +#: plug-ins/common/file-pdf-save.c:1049 msgid "Multipage PDF export" msgstr "მულტიგვერდიან PDF-ში გატანა" -#: plug-ins/common/file-pdf-save.c:1078 +#: plug-ins/common/file-pdf-save.c:1085 msgid "Remove the selected pages" msgstr "" -#: plug-ins/common/file-pdf-save.c:1088 +#: plug-ins/common/file-pdf-save.c:1095 msgid "Add this image" msgstr "ამ გამოსახულების დამატება" -#: plug-ins/common/file-pdf-save.c:1093 +#: plug-ins/common/file-pdf-save.c:1100 msgid "_Omit hidden layers and layers with zero opacity" msgstr "" -#: plug-ins/common/file-pdf-save.c:1103 +#: plug-ins/common/file-pdf-save.c:1110 msgid "Convert _bitmaps to vector graphics where possible" msgstr "" -#: plug-ins/common/file-pdf-save.c:1108 +#: plug-ins/common/file-pdf-save.c:1115 msgid "_Apply layer masks before saving" msgstr "" -#: plug-ins/common/file-pdf-save.c:1112 +#: plug-ins/common/file-pdf-save.c:1119 msgid "Keeping the masks will not change the output" msgstr "" -#: plug-ins/common/file-pdf-save.c:1201 plug-ins/common/file-pdf-save.c:1274 -#: plug-ins/common/file-pdf-save.c:1372 plug-ins/common/file-ps.c:2098 +#: plug-ins/common/file-pdf-save.c:1208 plug-ins/common/file-pdf-save.c:1281 +#: plug-ins/common/file-pdf-save.c:1379 plug-ins/common/file-ps.c:2098 #: plug-ins/file-tiff/file-tiff-load.c:1530 #, c-format msgid "Page %d" msgstr "%d გვერდი" -#: plug-ins/common/file-pdf-save.c:1241 +#: plug-ins/common/file-pdf-save.c:1248 msgid "Error! In order to save the file, at least one image should be added!" msgstr "" -#: plug-ins/common/file-pdf-save.c:1419 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1426 plug-ins/print/print-draw-page.c:125 msgid "Cannot handle the size (either width or height) of the image." msgstr "" @@ -4301,179 +4312,179 @@ msgstr "" msgid "Invalid Esm Software PIX file" msgstr "" -#: plug-ins/common/file-png.c:183 plug-ins/common/file-png.c:213 +#: plug-ins/common/file-png.c:187 plug-ins/common/file-png.c:217 msgid "PNG image" msgstr "PNG გამოსახულება" -#: plug-ins/common/file-png.c:236 +#: plug-ins/common/file-png.c:240 msgid "_Interlacing (Adam7)" msgstr "" -#: plug-ins/common/file-png.c:237 +#: plug-ins/common/file-png.c:241 msgid "Use Adam7 interlacing" msgstr "" -#: plug-ins/common/file-png.c:242 +#: plug-ins/common/file-png.c:246 msgid "Co_mpression level" msgstr "" -#: plug-ins/common/file-png.c:243 +#: plug-ins/common/file-png.c:247 msgid "Deflate Compression factor (0..9)" msgstr "" -#: plug-ins/common/file-png.c:249 +#: plug-ins/common/file-png.c:253 msgid "Write bKGD chunk (PNG metadata)" msgstr "" -#: plug-ins/common/file-png.c:254 +#: plug-ins/common/file-png.c:258 msgid "Save layer o_ffset" msgstr "" -#: plug-ins/common/file-png.c:255 +#: plug-ins/common/file-png.c:259 msgid "Write oFFs chunk (PNG metadata)" msgstr "" -#: plug-ins/common/file-png.c:260 +#: plug-ins/common/file-png.c:264 msgid "Save resol_ution" msgstr "" -#: plug-ins/common/file-png.c:261 +#: plug-ins/common/file-png.c:265 msgid "Write pHYs chunk (PNG metadata)" msgstr "" -#: plug-ins/common/file-png.c:267 +#: plug-ins/common/file-png.c:271 msgid "Write tIME chunk (PNG metadata)" msgstr "" -#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:251 +#: plug-ins/common/file-png.c:276 plug-ins/file-tiff/file-tiff.c:251 msgid "Save color _values from transparent pixels" msgstr "" -#: plug-ins/common/file-png.c:273 +#: plug-ins/common/file-png.c:277 msgid "Preserve color of completely transparent pixels" msgstr "" -#: plug-ins/common/file-png.c:278 +#: plug-ins/common/file-png.c:282 msgid "_Optimize for smallest possible palette size" msgstr "" -#: plug-ins/common/file-png.c:279 +#: plug-ins/common/file-png.c:283 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" msgstr "" -#: plug-ins/common/file-png.c:287 +#: plug-ins/common/file-png.c:291 msgid "PNG export format" msgstr "" -#: plug-ins/common/file-png.c:288 plug-ins/common/file-ps.c:3723 +#: plug-ins/common/file-png.c:292 plug-ins/common/file-ps.c:3723 #: plug-ins/file-fits/fits.c:1035 msgid "Automatic" msgstr "ავტომატური" -#: plug-ins/common/file-png.c:289 +#: plug-ins/common/file-png.c:293 msgid "8 bpc RGB" msgstr "8 bpc RGB" -#: plug-ins/common/file-png.c:290 +#: plug-ins/common/file-png.c:294 msgid "8 bpc GRAY" msgstr "8 bpc GRAY" -#: plug-ins/common/file-png.c:291 +#: plug-ins/common/file-png.c:295 msgid "8 bpc RGBA" msgstr "8 bpc RGBA" -#: plug-ins/common/file-png.c:292 +#: plug-ins/common/file-png.c:296 msgid "8 bpc GRAYA" msgstr "8 bpc GRAYA" -#: plug-ins/common/file-png.c:293 +#: plug-ins/common/file-png.c:297 msgid "16 bpc RGB" msgstr "16 bpc RGB" -#: plug-ins/common/file-png.c:294 +#: plug-ins/common/file-png.c:298 msgid "16 bpc GRAY" msgstr "16 bpc GRAY" -#: plug-ins/common/file-png.c:295 +#: plug-ins/common/file-png.c:299 msgid "16 bpc RGBA" msgstr "16 bpc RGBA" -#: plug-ins/common/file-png.c:296 +#: plug-ins/common/file-png.c:300 msgid "16 bpc GRAYA" msgstr "16 bpc GRAYA" -#: plug-ins/common/file-png.c:411 +#: plug-ins/common/file-png.c:415 msgid "PNG format does not support multiple layers." msgstr "PNG ფორმატს ერთზე მეტი ფენის მხარდაჭერა არ გააჩნია." -#: plug-ins/common/file-png.c:484 +#: plug-ins/common/file-png.c:488 #, c-format msgid "Error loading PNG file: %s\n" msgstr "PNG ფაილის ჩატვირთვის შეცდომა: %s\n" -#: plug-ins/common/file-png.c:615 +#: plug-ins/common/file-png.c:622 #, c-format msgid "Error creating PNG read struct while loading '%s'." msgstr "" -#: plug-ins/common/file-png.c:624 +#: plug-ins/common/file-png.c:631 #, c-format msgid "Error while reading '%s'. Could not create PNG header info structure." msgstr "" -#: plug-ins/common/file-png.c:632 +#: plug-ins/common/file-png.c:639 #, c-format msgid "Error while reading '%s'. File corrupted?" msgstr "" -#: plug-ins/common/file-png.c:887 +#: plug-ins/common/file-png.c:899 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "" -#: plug-ins/common/file-png.c:900 plug-ins/file-exr/file-exr.c:260 +#: plug-ins/common/file-png.c:912 plug-ins/file-exr/file-exr.c:260 #, c-format msgid "Could not create new image for '%s': %s" msgstr "" -#: plug-ins/common/file-png.c:968 +#: plug-ins/common/file-png.c:980 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." msgstr "" -#: plug-ins/common/file-png.c:1202 +#: plug-ins/common/file-png.c:1231 msgid "Apply PNG Offset" msgstr "" -#: plug-ins/common/file-png.c:1206 +#: plug-ins/common/file-png.c:1235 msgid "Ignore PNG offset" msgstr "" -#: plug-ins/common/file-png.c:1207 +#: plug-ins/common/file-png.c:1236 msgid "Apply PNG offset to layer" msgstr "" -#: plug-ins/common/file-png.c:1232 +#: plug-ins/common/file-png.c:1261 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " "to apply this offset to the layer?" msgstr "" -#: plug-ins/common/file-png.c:1445 +#: plug-ins/common/file-png.c:1475 #, c-format msgid "Error creating PNG write struct while exporting '%s'." msgstr "" -#: plug-ins/common/file-png.c:1454 +#: plug-ins/common/file-png.c:1484 #, c-format msgid "Error while exporting '%s'. Could not create PNG header info structure." msgstr "" -#: plug-ins/common/file-png.c:1462 +#: plug-ins/common/file-png.c:1492 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "" @@ -4638,7 +4649,7 @@ msgid "Unsupported maximum value." msgstr "" #: plug-ins/common/file-pnm.c:943 -msgid "PAM: Unsupported inofficial PNM variant." +msgid "PAM: Unsupported unofficial PNM variant." msgstr "" #: plug-ins/common/file-pnm.c:947 @@ -4772,7 +4783,7 @@ msgstr "" #: plug-ins/common/file-ps.c:526 msgid "Unit" -msgstr "" +msgstr "ერთეული" #: plug-ins/common/file-ps.c:527 msgid "Unit for width/height/offset. 0: inches, 1: millimeters" @@ -6716,10 +6727,10 @@ msgstr "დათხვევა არ არსებობს" msgid "Plug-in Browser" msgstr "" -#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:605 -#: plug-ins/metadata/metadata-editor.c:641 -#: plug-ins/metadata/metadata-editor.c:648 -#: plug-ins/metadata/metadata-editor.c:655 +#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:609 +#: plug-ins/metadata/metadata-editor.c:645 +#: plug-ins/metadata/metadata-editor.c:652 +#: plug-ins/metadata/metadata-editor.c:659 msgid "Name" msgstr "" @@ -7982,17 +7993,17 @@ msgstr "" #: plug-ins/file-bmp/bmp-load.c:242 plug-ins/file-bmp/bmp-load.c:252 #: plug-ins/file-bmp/bmp-load.c:260 plug-ins/file-bmp/bmp-load.c:269 -#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:491 -#: plug-ins/file-bmp/bmp-load.c:516 plug-ins/file-bmp/bmp-load.c:527 -#: plug-ins/file-bmp/bmp-load.c:535 plug-ins/file-bmp/bmp-load.c:544 -#: plug-ins/file-bmp/bmp-load.c:556 +#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:492 +#: plug-ins/file-bmp/bmp-load.c:517 plug-ins/file-bmp/bmp-load.c:528 +#: plug-ins/file-bmp/bmp-load.c:536 plug-ins/file-bmp/bmp-load.c:545 +#: plug-ins/file-bmp/bmp-load.c:557 #, c-format msgid "'%s' is not a valid BMP file" msgstr "" #: plug-ins/file-bmp/bmp-load.c:298 plug-ins/file-bmp/bmp-load.c:325 -#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:398 -#: plug-ins/file-bmp/bmp-load.c:429 plug-ins/file-bmp/bmp-load.c:471 +#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:399 +#: plug-ins/file-bmp/bmp-load.c:430 plug-ins/file-bmp/bmp-load.c:472 #, c-format msgid "Error reading BMP file header from '%s'" msgstr "" @@ -8002,16 +8013,16 @@ msgstr "" msgid "Unsupported compression (%u) in BMP file from '%s'" msgstr "" -#: plug-ins/file-bmp/bmp-load.c:673 +#: plug-ins/file-bmp/bmp-load.c:674 msgid "Unrecognized or invalid BMP compression format." msgstr "" -#: plug-ins/file-bmp/bmp-load.c:720 +#: plug-ins/file-bmp/bmp-load.c:721 msgid "Unsupported or invalid bitdepth." msgstr "" -#: plug-ins/file-bmp/bmp-load.c:885 plug-ins/file-bmp/bmp-load.c:928 -#: plug-ins/file-bmp/bmp-load.c:982 +#: plug-ins/file-bmp/bmp-load.c:886 plug-ins/file-bmp/bmp-load.c:929 +#: plug-ins/file-bmp/bmp-load.c:983 msgid "The bitmap ends unexpectedly." msgstr "" @@ -8107,394 +8118,411 @@ msgstr "" msgid "BMP format does not support multiple layers." msgstr "" -#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:187 +#: plug-ins/file-dds/dds.c:131 plug-ins/file-dds/dds.c:169 msgid "DDS image" msgstr "DDS გამოსახულება" -#: plug-ins/file-dds/dds.c:152 plug-ins/file-dds/dds.c:153 +#: plug-ins/file-dds/dds.c:134 plug-ins/file-dds/dds.c:135 msgid "Loads files in DDS image format" msgstr "" -#: plug-ins/file-dds/dds.c:168 +#: plug-ins/file-dds/dds.c:150 msgid "Load _mipmaps" msgstr "_mipmap-ების ჩატვირთვა" -#: plug-ins/file-dds/dds.c:169 +#: plug-ins/file-dds/dds.c:151 msgid "Load mipmaps if present" msgstr "" -#: plug-ins/file-dds/dds.c:174 -msgid "Automatically decode YCoCg/AE_xp images when detected" +#: plug-ins/file-dds/dds.c:156 +msgid "Flip image _vertically" msgstr "" -#: plug-ins/file-dds/dds.c:175 -msgid "Decode YCoCg/AExp images when detected" +#: plug-ins/file-dds/dds.c:157 +msgid "Flip the image vertically on import" msgstr "" -#: plug-ins/file-dds/dds.c:189 +#: plug-ins/file-dds/dds.c:171 msgid "DDS" msgstr "" -#: plug-ins/file-dds/dds.c:193 plug-ins/file-dds/dds.c:194 +#: plug-ins/file-dds/dds.c:175 plug-ins/file-dds/dds.c:176 msgid "Saves files in DDS image format" msgstr "" -#: plug-ins/file-dds/dds.c:207 +#: plug-ins/file-dds/dds.c:189 msgid "Compressio_n" msgstr "_შეკუმშვა" -#: plug-ins/file-dds/dds.c:208 +#: plug-ins/file-dds/dds.c:190 msgid "Compression format" msgstr "შეკუმშვის ფორმატი" -#: plug-ins/file-dds/dds.c:210 +#: plug-ins/file-dds/dds.c:192 msgid "BC1 / DXT1" msgstr "BC1 / DXT1" -#: plug-ins/file-dds/dds.c:211 +#: plug-ins/file-dds/dds.c:193 msgid "BC2 / DXT3" msgstr "BC2 / DXT3" -#: plug-ins/file-dds/dds.c:212 +#: plug-ins/file-dds/dds.c:194 msgid "BC3 / DXT5" msgstr "BC3 / DXT5" -#: plug-ins/file-dds/dds.c:213 +#: plug-ins/file-dds/dds.c:195 msgid "BC3nm / DXT5nm" msgstr "BC3nm / DXT5nm" -#: plug-ins/file-dds/dds.c:214 +#: plug-ins/file-dds/dds.c:196 msgid "BC4 / ATI1 (3Dc+)" msgstr "BC4 / ATI1 (3Dc+)" -#: plug-ins/file-dds/dds.c:215 +#: plug-ins/file-dds/dds.c:197 msgid "BC5 / ATI2 (3Dc)" msgstr "BC5 / ATI2 (3Dc)" -#: plug-ins/file-dds/dds.c:216 +#: plug-ins/file-dds/dds.c:198 msgid "RXGB (DXT5)" msgstr "RXGB (DXT5)" -#: plug-ins/file-dds/dds.c:217 +#: plug-ins/file-dds/dds.c:199 msgid "Alpha Exponent (DXT5)" msgstr "" -#: plug-ins/file-dds/dds.c:218 +#: plug-ins/file-dds/dds.c:200 msgid "YCoCg (DXT5)" msgstr "YCoCg (DXT5)" -#: plug-ins/file-dds/dds.c:219 +#: plug-ins/file-dds/dds.c:201 msgid "YCoCg scaled (DXT5)" msgstr "YCoCg scaled (DXT5)" -#: plug-ins/file-dds/dds.c:225 +#: plug-ins/file-dds/dds.c:207 msgid "Use percept_ual error metric" msgstr "" -#: plug-ins/file-dds/dds.c:226 +#: plug-ins/file-dds/dds.c:208 msgid "Use a perceptual error metric during compression" msgstr "" -#: plug-ins/file-dds/dds.c:232 +#: plug-ins/file-dds/dds.c:214 msgid "Pixel format" msgstr "პიქსელის ფორმატი" #. Create the combobox containing the presets -#: plug-ins/file-dds/dds.c:233 plug-ins/file-dds/dds.c:290 -#: plug-ins/file-dds/dds.c:306 plug-ins/file-webp/file-webp-dialog.c:80 +#: plug-ins/file-dds/dds.c:215 plug-ins/file-dds/dds.c:278 +#: plug-ins/file-dds/dds.c:295 plug-ins/file-webp/file-webp-dialog.c:80 #: plug-ins/gradient-flare/gradient-flare.c:2599 msgid "Default" msgstr "ნაგულისხმევი" -#: plug-ins/file-dds/dds.c:234 +#: plug-ins/file-dds/dds.c:216 msgid "RGB8" msgstr "RGB8" -#: plug-ins/file-dds/dds.c:235 -#| msgid "RGBA" +#: plug-ins/file-dds/dds.c:217 msgid "RGBA8" msgstr "RGBA8" -#: plug-ins/file-dds/dds.c:236 +#: plug-ins/file-dds/dds.c:218 msgid "BGR8" msgstr "BGR8" -#: plug-ins/file-dds/dds.c:237 +#: plug-ins/file-dds/dds.c:219 msgid "ABGR8" msgstr "ABGR8" -#: plug-ins/file-dds/dds.c:238 +#: plug-ins/file-dds/dds.c:220 msgid "R5G6B5" msgstr "R5G6B5" -#: plug-ins/file-dds/dds.c:239 -#| msgid "RGBA" +#: plug-ins/file-dds/dds.c:221 msgid "RGBA4" msgstr "RGBA4" -#: plug-ins/file-dds/dds.c:240 -#| msgid "RGB565" +#: plug-ins/file-dds/dds.c:222 msgid "RGB5A1" msgstr "RGB5A1" -#: plug-ins/file-dds/dds.c:241 +#: plug-ins/file-dds/dds.c:223 msgid "RGB10A2" msgstr "RGB10A2" -#: plug-ins/file-dds/dds.c:242 +#: plug-ins/file-dds/dds.c:224 msgid "R3G3B2" msgstr "R3G3B2" -#: plug-ins/file-dds/dds.c:243 -#| msgid "A" +#: plug-ins/file-dds/dds.c:225 msgid "A8" msgstr "A8" -#: plug-ins/file-dds/dds.c:244 -#| msgid "L" +#: plug-ins/file-dds/dds.c:226 msgid "L8" msgstr "L8" -#: plug-ins/file-dds/dds.c:245 +#: plug-ins/file-dds/dds.c:227 msgid "L8A8" msgstr "L8A8" -#: plug-ins/file-dds/dds.c:246 +#: plug-ins/file-dds/dds.c:228 msgid "AEXP" msgstr "AEXP" -#: plug-ins/file-dds/dds.c:247 +#: plug-ins/file-dds/dds.c:229 msgid "YCOCG" msgstr "YCOCG" -#: plug-ins/file-dds/dds.c:261 +#: plug-ins/file-dds/dds.c:235 +msgid "Sav_e type" +msgstr "" + +#: plug-ins/file-dds/dds.c:236 +msgid "How to save the image" +msgstr "როგორ შევინახო გამოსახულება" + +#: plug-ins/file-dds/dds.c:237 +msgid "Selected layer" +msgstr "მონიშნული ფენა" + +#: plug-ins/file-dds/dds.c:238 +msgid "All visible layers" +msgstr "ყველა ხილული ფენა" + +#: plug-ins/file-dds/dds.c:239 +msgid "As cube map" +msgstr "" + +#: plug-ins/file-dds/dds.c:240 +msgid "As volume map" +msgstr "" + +#: plug-ins/file-dds/dds.c:241 +msgid "As texture array" +msgstr "" + +#: plug-ins/file-dds/dds.c:247 msgid "Flip image _vertically on export" msgstr "" -#: plug-ins/file-dds/dds.c:262 +#: plug-ins/file-dds/dds.c:248 msgid "Flip the image vertically on export" msgstr "" -#: plug-ins/file-dds/dds.c:267 +#: plug-ins/file-dds/dds.c:253 msgid "Set _transparent color" msgstr "_გამჭვირვალე ფერის დაყენება" -#: plug-ins/file-dds/dds.c:268 +#: plug-ins/file-dds/dds.c:254 msgid "Make an indexed color transparent" msgstr "დაინდექსებული ფონის გამჭვირვალობა" -#: plug-ins/file-dds/dds.c:273 +#: plug-ins/file-dds/dds.c:259 msgid "Transparent inde_x" msgstr "გამჭვირვალე _ინდექსი" -#: plug-ins/file-dds/dds.c:274 +#: plug-ins/file-dds/dds.c:260 msgid "Index of transparent color or -1 to disable (for indexed images only)." msgstr "" -#: plug-ins/file-dds/dds.c:288 +#: plug-ins/file-dds/dds.c:266 +msgid "_Mipmaps" +msgstr "_Mipmap" + +#: plug-ins/file-dds/dds.c:267 +msgid "How to handle mipmaps" +msgstr "როგორ დავამუშაო mipmap-ები" + +#: plug-ins/file-dds/dds.c:268 +msgid "No mipmaps" +msgstr "" + +#: plug-ins/file-dds/dds.c:269 +msgid "Generate mipmaps" +msgstr "" + +#: plug-ins/file-dds/dds.c:270 +msgid "Use existing mipmaps" +msgstr "" + +#: plug-ins/file-dds/dds.c:276 msgid "F_ilter" msgstr "_ფილტრი" -#: plug-ins/file-dds/dds.c:289 +#: plug-ins/file-dds/dds.c:277 msgid "Filtering to use when generating mipmaps" msgstr "" -#: plug-ins/file-dds/dds.c:291 +#: plug-ins/file-dds/dds.c:279 msgid "Nearest" msgstr "უახლოესი" -#: plug-ins/file-dds/dds.c:292 plug-ins/map-object/map-object-main.c:139 +#: plug-ins/file-dds/dds.c:280 plug-ins/map-object/map-object-main.c:139 msgid "Box" msgstr "ყუთი" -#: plug-ins/file-dds/dds.c:293 +#: plug-ins/file-dds/dds.c:281 msgid "Triangle" msgstr "სამკუთხედი" -#: plug-ins/file-dds/dds.c:294 +#: plug-ins/file-dds/dds.c:282 msgid "Quadratic" msgstr "კვადრატული" -#: plug-ins/file-dds/dds.c:295 +#: plug-ins/file-dds/dds.c:283 msgid "B-Spline" msgstr "B-სპლაინი" -#: plug-ins/file-dds/dds.c:296 +#: plug-ins/file-dds/dds.c:284 msgid "Mitchell" msgstr "მიტჩელი" -#: plug-ins/file-dds/dds.c:297 +#: plug-ins/file-dds/dds.c:285 +msgid "Catmull-Rom" +msgstr "" + +#: plug-ins/file-dds/dds.c:286 msgid "Lanczos" msgstr "" -#: plug-ins/file-dds/dds.c:298 +#: plug-ins/file-dds/dds.c:287 msgid "Kaiser" msgstr "კაიზერი" -#: plug-ins/file-dds/dds.c:304 +#: plug-ins/file-dds/dds.c:293 msgid "_Wrap mode" msgstr "_გადატანის რეჟიმი" -#: plug-ins/file-dds/dds.c:305 +#: plug-ins/file-dds/dds.c:294 msgid "Wrap mode to use when generating mipmaps" msgstr "" -#: plug-ins/file-dds/dds.c:307 +#: plug-ins/file-dds/dds.c:296 msgid "Mirror" msgstr "სარკე" -#: plug-ins/file-dds/dds.c:308 +#: plug-ins/file-dds/dds.c:297 msgid "Repeat" msgstr "გამეორება" -#: plug-ins/file-dds/dds.c:309 +#: plug-ins/file-dds/dds.c:298 msgid "Clamp" msgstr "" -#: plug-ins/file-dds/dds.c:315 +#: plug-ins/file-dds/dds.c:304 msgid "Appl_y gamma correction" msgstr "" -#: plug-ins/file-dds/dds.c:316 +#: plug-ins/file-dds/dds.c:305 msgid "Use gamma correct mipmap filtering" msgstr "" -#: plug-ins/file-dds/dds.c:321 +#: plug-ins/file-dds/dds.c:310 msgid "Use sRG_B colorspace" msgstr "" -#: plug-ins/file-dds/dds.c:322 +#: plug-ins/file-dds/dds.c:311 msgid "Use sRGB colorspace for gamma correction" msgstr "" -#: plug-ins/file-dds/dds.c:327 plug-ins/flame/flame.c:205 +#: plug-ins/file-dds/dds.c:316 plug-ins/flame/flame.c:205 msgid "_Gamma" msgstr "_გამა" -#: plug-ins/file-dds/dds.c:328 +#: plug-ins/file-dds/dds.c:317 msgid "Gamma value to use for gamma correction (e.g. 2.2)" msgstr "" -#: plug-ins/file-dds/dds.c:333 +#: plug-ins/file-dds/dds.c:322 msgid "Preserve al_pha test coverage" msgstr "" -#: plug-ins/file-dds/dds.c:334 +#: plug-ins/file-dds/dds.c:323 msgid "Preserve alpha test coverage for alpha channel maps" msgstr "" -#: plug-ins/file-dds/dds.c:340 +#: plug-ins/file-dds/dds.c:329 msgid "Alp_ha test threshold" msgstr "_ალფას ზღვრის ტესტი" -#: plug-ins/file-dds/dds.c:341 +#: plug-ins/file-dds/dds.c:330 msgid "" "Alpha test threshold value for which alpha test coverage should be preserved" msgstr "" -#: plug-ins/file-dds/dds.c:357 -msgid "Decode YCoCg" +#: plug-ins/file-dds/ddsread.c:170 +#, c-format +msgid "Loading: %s" msgstr "" -#: plug-ins/file-dds/dds.c:361 plug-ins/file-dds/dds.c:362 -msgid "Converts YCoCg encoded pixels to RGB" +#: plug-ins/file-dds/ddsread.c:263 +#, c-format +msgid "Unsupported uncompressed FourCC type %u" msgstr "" -#: plug-ins/file-dds/dds.c:379 -msgid "Decode YCoCg (scaled)" -msgstr "" - -#: plug-ins/file-dds/dds.c:383 plug-ins/file-dds/dds.c:385 -msgid "Converts YCoCg (scaled) encoded pixels to RGB" -msgstr "" - -#: plug-ins/file-dds/dds.c:403 -msgid "Decode Alpha exponent" -msgstr "" - -#: plug-ins/file-dds/dds.c:409 plug-ins/file-dds/dds.c:407 -msgid "Converts alpha exponent encoded pixels to RGB" -msgstr "" - -#: plug-ins/file-dds/ddsread.c:373 +#: plug-ins/file-dds/ddsread.c:578 msgid "Invalid or corrupted DDS header" msgstr "არასწორი ან დაზიანებული DDS თავსართი" -#: plug-ins/file-dds/ddsread.c:382 +#: plug-ins/file-dds/ddsread.c:588 msgid "Could not allocate a new image." msgstr "ახალი გამოსახულების გამოყოფის შეცდომა." -#: plug-ins/file-dds/ddsread.c:393 +#: plug-ins/file-dds/ddsread.c:600 msgid "Error reading palette." msgstr "პალიტრის კითხვის შეცდომა." -#: plug-ins/file-dds/ddsread.c:676 +#: plug-ins/file-dds/ddsread.c:887 msgid "Invalid DDS format magic number." msgstr "" -#: plug-ins/file-dds/ddsread.c:755 +#: plug-ins/file-dds/ddsread.c:978 #, c-format msgid "Invalid bpp value for RGB data: %d" msgstr "" -#: plug-ins/file-dds/ddsread.c:766 +#: plug-ins/file-dds/ddsread.c:989 #, c-format msgid "Invalid bpp value for luminance data: %d" msgstr "" -#: plug-ins/file-dds/ddsread.c:817 +#: plug-ins/file-dds/ddsread.c:1041 msgid "Invalid pixel format." msgstr "არასწორი პიქსელის ფორმატი." -#: plug-ins/file-dds/ddsread.c:986 +#: plug-ins/file-dds/ddsread.c:1274 #, c-format msgid "Unsupported DXGI format (%d)" msgstr "" -#: plug-ins/file-dds/ddsread.c:1151 plug-ins/file-dds/ddsread.c:1190 +#: plug-ins/file-dds/ddsread.c:1430 +#, c-format +msgid "Unsupported value for bytes per pixel: %d" +msgstr "" + +#: plug-ins/file-dds/ddsread.c:1525 plug-ins/file-dds/ddsread.c:1583 +#: plug-ins/file-dds/ddsread.c:1604 +msgid "Requested data exceeds size of file.\n" +msgstr "" + +#: plug-ins/file-dds/ddsread.c:1533 plug-ins/file-dds/ddsread.c:1610 msgid "Unexpected EOF.\n" msgstr "მოულოდნელი EOF.\n" -#: plug-ins/file-dds/ddsread.c:1530 +#: plug-ins/file-dds/ddsread.c:2125 msgid "Open DDS" msgstr "DDS-ის გახსნა" -#: plug-ins/file-dds/ddswrite.c:2022 +#: plug-ins/file-dds/ddswrite.c:566 +#, c-format +#| msgid "Saving '%s'" +msgid "Saving: %s" +msgstr "შენახვა: %s" + +#: plug-ins/file-dds/ddswrite.c:1942 msgid "Mipmap Options" msgstr "" -#: plug-ins/file-dds/ddswrite.c:2037 -msgid "Selected layer" -msgstr "მონიშნული ფენა" - -#: plug-ins/file-dds/ddswrite.c:2038 -msgid "All visible layers" -msgstr "ყველა ხილული ფენა" - -#: plug-ins/file-dds/ddswrite.c:2039 -msgid "As cube map" -msgstr "" - -#: plug-ins/file-dds/ddswrite.c:2040 -msgid "As volume map" -msgstr "" - -#: plug-ins/file-dds/ddswrite.c:2041 -msgid "As texture array" -msgstr "" - -#: plug-ins/file-dds/ddswrite.c:2053 -msgid "No mipmaps" -msgstr "" - -#: plug-ins/file-dds/ddswrite.c:2054 -msgid "Generate mipmaps" -msgstr "" - -#: plug-ins/file-dds/ddswrite.c:2055 -msgid "Use existing mipmaps" -msgstr "" - #: plug-ins/file-exr/file-exr.c:112 msgid "Loads files in the OpenEXR file format" msgstr "" @@ -9850,7 +9878,7 @@ msgid "Import from TIFF" msgstr "" #: plug-ins/file-tiff/file-tiff-load.c:2550 -#: plug-ins/metadata/metadata-editor.c:5533 +#: plug-ins/metadata/metadata-editor.c:5525 msgid "_Import" msgstr "_შემოტანა" @@ -11133,7 +11161,7 @@ msgstr "" #: plug-ins/gfig/gfig-menu.ui:16 plug-ins/help-browser/help-menu.ui:58 #: plug-ins/imagemap/imap-menu.ui:22 msgid "Close" -msgstr "" +msgstr "დახურვა" #: plug-ins/gfig/gfig-menu.ui:21 plug-ins/imagemap/imap-menu.ui:32 msgid "Edit" @@ -11183,7 +11211,7 @@ msgstr "გამა:" msgid "Changes the gamma (brightness) of the selected brush" msgstr "" -#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1371 +#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1363 msgid "Select:" msgstr "" @@ -12597,91 +12625,91 @@ msgstr "მონიშვნის მოხსნა" msgid "Unselect All" msgstr "მონიშვნის ყველაფერზე მოხსნა" -#: plug-ins/imagemap/imap_edit_area_info.c:219 +#: plug-ins/imagemap/imap_edit_area_info.c:252 msgid "Link Type" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:228 +#: plug-ins/imagemap/imap_edit_area_info.c:261 msgid "_Web Site" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:234 +#: plug-ins/imagemap/imap_edit_area_info.c:267 msgid "_FTP Site" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:240 +#: plug-ins/imagemap/imap_edit_area_info.c:273 msgid "_Gopher" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:246 +#: plug-ins/imagemap/imap_edit_area_info.c:279 msgid "Ot_her" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:252 +#: plug-ins/imagemap/imap_edit_area_info.c:285 msgid "F_ile" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:258 +#: plug-ins/imagemap/imap_edit_area_info.c:291 msgid "WAI_S" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:264 +#: plug-ins/imagemap/imap_edit_area_info.c:297 msgid "Tel_net" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:270 +#: plug-ins/imagemap/imap_edit_area_info.c:303 msgid "e-_mail" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:276 +#: plug-ins/imagemap/imap_edit_area_info.c:309 msgid "_URL to activate when this area is clicked: (required)" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:278 +#: plug-ins/imagemap/imap_edit_area_info.c:311 msgid "Select HTML file" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:287 +#: plug-ins/imagemap/imap_edit_area_info.c:320 msgid "Relati_ve link" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:293 +#: plug-ins/imagemap/imap_edit_area_info.c:326 msgid "_Target frame name/ID: (optional - used for FRAMES only)" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:296 +#: plug-ins/imagemap/imap_edit_area_info.c:329 msgid "ALT te_xt: (optional)" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:299 +#: plug-ins/imagemap/imap_edit_area_info.c:332 msgid "Access _Key: (optional)" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:302 +#: plug-ins/imagemap/imap_edit_area_info.c:335 msgid "Ta_b Index: (optional)" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:305 +#: plug-ins/imagemap/imap_edit_area_info.c:338 msgid "_Link" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:339 +#: plug-ins/imagemap/imap_edit_area_info.c:372 msgid "Dimensions" msgstr "ზომები" -#: plug-ins/imagemap/imap_edit_area_info.c:343 +#: plug-ins/imagemap/imap_edit_area_info.c:376 msgid "Pre_view" msgstr "გადახედვა" -#: plug-ins/imagemap/imap_edit_area_info.c:385 +#: plug-ins/imagemap/imap_edit_area_info.c:418 msgid "_JavaScript" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:490 +#: plug-ins/imagemap/imap_edit_area_info.c:523 msgid "Area Settings" msgstr "" -#: plug-ins/imagemap/imap_edit_area_info.c:536 +#: plug-ins/imagemap/imap_edit_area_info.c:569 #, c-format msgid "Area #%d Settings" msgstr "" @@ -12872,7 +12900,7 @@ msgstr "" #: plug-ins/imagemap/imap_preferences.c:382 msgid "General" -msgstr "" +msgstr "მთავარი" #: plug-ins/imagemap/imap_preferences.c:386 msgid "Default Map Type" @@ -12982,7 +13010,7 @@ msgstr "ალტ. ტექსტი" #: plug-ins/imagemap/imap_selection.c:388 msgid "Target" -msgstr "" +msgstr "სამიზნე" #: plug-ins/imagemap/imap_settings.c:88 msgid "Settings for this Mapfile" @@ -12990,7 +13018,7 @@ msgstr "" #: plug-ins/imagemap/imap_settings.c:92 msgid "Filename:" -msgstr "" +msgstr "ფაილის სახელი:" #: plug-ins/imagemap/imap_settings.c:95 msgid "Image name:" @@ -13362,7 +13390,7 @@ msgstr "" #: plug-ins/lighting/lighting-main.c:290 msgid "Metallic" -msgstr "" +msgstr "ლითონური" #: plug-ins/lighting/lighting-main.c:297 #: plug-ins/map-object/map-object-main.c:307 @@ -13861,458 +13889,458 @@ msgstr "" msgid "Images for the Cap Faces" msgstr "" -#: plug-ins/metadata/metadata-editor.c:484 +#: plug-ins/metadata/metadata-editor.c:488 msgid "Document Title" msgstr "დოკუმენტის სათაური" -#: plug-ins/metadata/metadata-editor.c:485 +#: plug-ins/metadata/metadata-editor.c:489 msgid "Author" msgstr "ავტორი" -#: plug-ins/metadata/metadata-editor.c:486 +#: plug-ins/metadata/metadata-editor.c:490 msgid "Author Title" msgstr "ავტორის სათაური" #. Description tab -#: plug-ins/metadata/metadata-editor.c:487 -#: plug-ins/metadata/metadata-editor.c:1216 +#: plug-ins/metadata/metadata-editor.c:491 +#: plug-ins/metadata/metadata-editor.c:1208 msgid "Description" msgstr "აღწერა" -#: plug-ins/metadata/metadata-editor.c:488 +#: plug-ins/metadata/metadata-editor.c:492 msgid "Description Writer" msgstr "აღწერის ჩამწერი" -#: plug-ins/metadata/metadata-editor.c:489 +#: plug-ins/metadata/metadata-editor.c:493 msgid "Rating" msgstr "შეფასება" -#: plug-ins/metadata/metadata-editor.c:490 +#: plug-ins/metadata/metadata-editor.c:494 msgid "Keywords" msgstr "საკვანძო სიტყვები" -#: plug-ins/metadata/metadata-editor.c:492 +#: plug-ins/metadata/metadata-editor.c:496 msgid "Copyright Status" msgstr "საავტორო უფლებების სტატუსი" -#: plug-ins/metadata/metadata-editor.c:493 -#: plug-ins/metadata/metadata-editor.c:622 +#: plug-ins/metadata/metadata-editor.c:497 +#: plug-ins/metadata/metadata-editor.c:626 msgid "Copyright Notice" msgstr "მონაცემების საავტორო უფლებები" -#: plug-ins/metadata/metadata-editor.c:494 +#: plug-ins/metadata/metadata-editor.c:498 msgid "Copyright URL" msgstr "ლიცენზიის URL" -#: plug-ins/metadata/metadata-editor.c:500 +#: plug-ins/metadata/metadata-editor.c:504 msgid "Address" msgstr "მისამართი" -#: plug-ins/metadata/metadata-editor.c:501 -#: plug-ins/metadata/metadata-editor.c:516 -#: plug-ins/metadata/metadata-editor.c:537 -#: plug-ins/metadata/metadata-editor.c:595 +#: plug-ins/metadata/metadata-editor.c:505 +#: plug-ins/metadata/metadata-editor.c:520 +#: plug-ins/metadata/metadata-editor.c:541 +#: plug-ins/metadata/metadata-editor.c:599 msgid "City" msgstr "ქალაქი" -#: plug-ins/metadata/metadata-editor.c:502 -#: plug-ins/metadata/metadata-editor.c:517 -#: plug-ins/metadata/metadata-editor.c:538 +#: plug-ins/metadata/metadata-editor.c:506 +#: plug-ins/metadata/metadata-editor.c:521 +#: plug-ins/metadata/metadata-editor.c:542 msgid "State / Province" msgstr "რეგიონი/მხარე" -#: plug-ins/metadata/metadata-editor.c:503 +#: plug-ins/metadata/metadata-editor.c:507 msgid "Postal Code" msgstr "საფოსტო კოდი" -#: plug-ins/metadata/metadata-editor.c:504 -#: plug-ins/metadata/metadata-editor.c:518 -#: plug-ins/metadata/metadata-editor.c:539 -#: plug-ins/metadata/metadata-editor.c:597 +#: plug-ins/metadata/metadata-editor.c:508 +#: plug-ins/metadata/metadata-editor.c:522 +#: plug-ins/metadata/metadata-editor.c:543 +#: plug-ins/metadata/metadata-editor.c:601 msgid "Country" msgstr "ქვეყანა" -#: plug-ins/metadata/metadata-editor.c:506 +#: plug-ins/metadata/metadata-editor.c:510 msgid "Phone(s)" msgstr "ტელეფონი" -#: plug-ins/metadata/metadata-editor.c:507 +#: plug-ins/metadata/metadata-editor.c:511 msgid "E-mail(s)" msgstr "ელფოსტა" -#: plug-ins/metadata/metadata-editor.c:508 +#: plug-ins/metadata/metadata-editor.c:512 msgid "Website(s)" msgstr "ვებგვერდი" -#: plug-ins/metadata/metadata-editor.c:510 +#: plug-ins/metadata/metadata-editor.c:514 msgid "Creation Date" msgstr "შეცვლის თარიღის მიხედვით" -#: plug-ins/metadata/metadata-editor.c:512 +#: plug-ins/metadata/metadata-editor.c:516 msgid "Intellectual Genre" msgstr "ინტელექტუალური ჟანრი" -#: plug-ins/metadata/metadata-editor.c:513 +#: plug-ins/metadata/metadata-editor.c:517 msgid "IPTC Scene Code" msgstr "IPTC სცენის კოდი" -#: plug-ins/metadata/metadata-editor.c:515 -#: plug-ins/metadata/metadata-editor.c:536 -#: plug-ins/metadata/metadata-editor.c:594 +#: plug-ins/metadata/metadata-editor.c:519 +#: plug-ins/metadata/metadata-editor.c:540 +#: plug-ins/metadata/metadata-editor.c:598 msgid "Sublocation" msgstr "ქვემდებარეობა" -#: plug-ins/metadata/metadata-editor.c:519 -#: plug-ins/metadata/metadata-editor.c:540 +#: plug-ins/metadata/metadata-editor.c:523 +#: plug-ins/metadata/metadata-editor.c:544 msgid "Country ISO-Code" msgstr "ISO ქვეყნის კოდი" -#: plug-ins/metadata/metadata-editor.c:521 +#: plug-ins/metadata/metadata-editor.c:525 msgid "Urgency" msgstr "სასწრაფოობა" -#: plug-ins/metadata/metadata-editor.c:522 +#: plug-ins/metadata/metadata-editor.c:526 msgid "Headline" msgstr "სათაური" -#: plug-ins/metadata/metadata-editor.c:523 +#: plug-ins/metadata/metadata-editor.c:527 msgid "IPTC Subject Code" msgstr "" -#: plug-ins/metadata/metadata-editor.c:525 +#: plug-ins/metadata/metadata-editor.c:529 msgid "Job Identifier" msgstr "დავალების იდენტიფიკატორი" -#: plug-ins/metadata/metadata-editor.c:526 +#: plug-ins/metadata/metadata-editor.c:530 msgid "Instructions" msgstr "ინსტრუქციები" -#: plug-ins/metadata/metadata-editor.c:527 +#: plug-ins/metadata/metadata-editor.c:531 msgid "Credit Line" msgstr "საავტორო უფლებების ხზი" -#: plug-ins/metadata/metadata-editor.c:528 -#: plug-ins/metadata/metadata-editor.c:620 +#: plug-ins/metadata/metadata-editor.c:532 +#: plug-ins/metadata/metadata-editor.c:624 msgid "Source" msgstr "წყარო" -#: plug-ins/metadata/metadata-editor.c:529 +#: plug-ins/metadata/metadata-editor.c:533 msgid "Usage Terms" msgstr "გამოყენების პირობები" -#: plug-ins/metadata/metadata-editor.c:535 +#: plug-ins/metadata/metadata-editor.c:539 msgid "Person Shown" msgstr "" -#: plug-ins/metadata/metadata-editor.c:541 -#: plug-ins/metadata/metadata-editor.c:599 +#: plug-ins/metadata/metadata-editor.c:545 +#: plug-ins/metadata/metadata-editor.c:603 msgid "World Region" msgstr "" -#: plug-ins/metadata/metadata-editor.c:542 +#: plug-ins/metadata/metadata-editor.c:546 msgid "Location Shown" msgstr "მდებარეობა ნაჩვენებია" -#: plug-ins/metadata/metadata-editor.c:544 +#: plug-ins/metadata/metadata-editor.c:548 msgid "Featured Organization" msgstr "" -#: plug-ins/metadata/metadata-editor.c:546 +#: plug-ins/metadata/metadata-editor.c:550 msgid "Organization Code" msgstr "ორგანიზაციის კოდი" -#: plug-ins/metadata/metadata-editor.c:548 +#: plug-ins/metadata/metadata-editor.c:552 msgid "Event" msgstr "მოვლენა" -#: plug-ins/metadata/metadata-editor.c:549 +#: plug-ins/metadata/metadata-editor.c:553 msgid "Artwork or Object" msgstr "" -#: plug-ins/metadata/metadata-editor.c:552 +#: plug-ins/metadata/metadata-editor.c:556 msgid "Additional Model Info" msgstr "დამატებითი მოდელის ინფორმაცია" -#: plug-ins/metadata/metadata-editor.c:553 +#: plug-ins/metadata/metadata-editor.c:557 msgid "Model Age" msgstr "მოდელის ასაკი" -#: plug-ins/metadata/metadata-editor.c:554 +#: plug-ins/metadata/metadata-editor.c:558 msgid "Minor Model Age Disclosure" msgstr "" -#: plug-ins/metadata/metadata-editor.c:555 +#: plug-ins/metadata/metadata-editor.c:559 msgid "Model Release Status" msgstr "მოდელის რელიზის მდგომარეობა" -#: plug-ins/metadata/metadata-editor.c:556 -#: plug-ins/metadata/metadata-editor.c:628 +#: plug-ins/metadata/metadata-editor.c:560 +#: plug-ins/metadata/metadata-editor.c:632 msgid "Model Release Identifier" msgstr "მოდელის რელიზის იდენტიფიკატორი" -#: plug-ins/metadata/metadata-editor.c:559 +#: plug-ins/metadata/metadata-editor.c:563 msgid "Image Supplier Name" msgstr "გამოსახულების მომწოდებლის სახელი" -#: plug-ins/metadata/metadata-editor.c:560 +#: plug-ins/metadata/metadata-editor.c:564 msgid "Image Supplier ID" msgstr "გამოსახულების მომწოდებლის ID" -#: plug-ins/metadata/metadata-editor.c:561 +#: plug-ins/metadata/metadata-editor.c:565 msgid "Supplier's Image ID" msgstr "მომწოდებლის გამოსახულების ID" -#: plug-ins/metadata/metadata-editor.c:562 +#: plug-ins/metadata/metadata-editor.c:566 msgid "Registry Entry" msgstr "რეესტრის ჩანაწერი" -#: plug-ins/metadata/metadata-editor.c:564 +#: plug-ins/metadata/metadata-editor.c:568 msgid "Max. Available Width" msgstr "მაქს. ხელმისაწვდომი სიგანე" -#: plug-ins/metadata/metadata-editor.c:565 +#: plug-ins/metadata/metadata-editor.c:569 msgid "Max. Available Height" msgstr "მაქს. ხელმისაწვდომი სიმაღლე" -#: plug-ins/metadata/metadata-editor.c:566 +#: plug-ins/metadata/metadata-editor.c:570 msgid "Digital Source Type" msgstr "ციფრული წყაროს ტიპი" -#: plug-ins/metadata/metadata-editor.c:568 +#: plug-ins/metadata/metadata-editor.c:572 msgid "Image Creator" msgstr "" -#: plug-ins/metadata/metadata-editor.c:570 +#: plug-ins/metadata/metadata-editor.c:574 msgid "Copyright Owner" msgstr "" -#: plug-ins/metadata/metadata-editor.c:572 +#: plug-ins/metadata/metadata-editor.c:576 msgid "Licensor" msgstr "" -#: plug-ins/metadata/metadata-editor.c:574 +#: plug-ins/metadata/metadata-editor.c:578 msgid "Property Release Status" msgstr "" -#: plug-ins/metadata/metadata-editor.c:575 +#: plug-ins/metadata/metadata-editor.c:579 msgid "Property Release Identifier" msgstr "" -#: plug-ins/metadata/metadata-editor.c:596 +#: plug-ins/metadata/metadata-editor.c:600 msgid "Province / State" msgstr "" -#: plug-ins/metadata/metadata-editor.c:598 +#: plug-ins/metadata/metadata-editor.c:602 msgid "Country ISO Code" msgstr "" -#: plug-ins/metadata/metadata-editor.c:611 +#: plug-ins/metadata/metadata-editor.c:615 msgid "Code" msgstr "" -#: plug-ins/metadata/metadata-editor.c:617 +#: plug-ins/metadata/metadata-editor.c:621 msgid "Title" msgstr "" -#: plug-ins/metadata/metadata-editor.c:618 +#: plug-ins/metadata/metadata-editor.c:622 msgid "Date Created" msgstr "შექმნის თარიღი" -#: plug-ins/metadata/metadata-editor.c:619 +#: plug-ins/metadata/metadata-editor.c:623 msgid "Creator" msgstr "შემქმნელი" -#: plug-ins/metadata/metadata-editor.c:621 +#: plug-ins/metadata/metadata-editor.c:625 msgid "Source Inventory ID" msgstr "" -#: plug-ins/metadata/metadata-editor.c:634 +#: plug-ins/metadata/metadata-editor.c:638 msgid "Organization Identifier" msgstr "" -#: plug-ins/metadata/metadata-editor.c:635 +#: plug-ins/metadata/metadata-editor.c:639 msgid "Item Identifier" msgstr "" -#: plug-ins/metadata/metadata-editor.c:642 -#: plug-ins/metadata/metadata-editor.c:649 -#: plug-ins/metadata/metadata-editor.c:656 -#: plug-ins/metadata/metadata-editor.c:668 +#: plug-ins/metadata/metadata-editor.c:646 +#: plug-ins/metadata/metadata-editor.c:653 +#: plug-ins/metadata/metadata-editor.c:660 +#: plug-ins/metadata/metadata-editor.c:672 msgid "Identifier" msgstr "იდენტიფიკატორი" -#: plug-ins/metadata/metadata-editor.c:657 +#: plug-ins/metadata/metadata-editor.c:661 msgid "Phone Number 1" msgstr "" -#: plug-ins/metadata/metadata-editor.c:658 +#: plug-ins/metadata/metadata-editor.c:662 msgid "Phone Type 1" msgstr "" -#: plug-ins/metadata/metadata-editor.c:659 +#: plug-ins/metadata/metadata-editor.c:663 msgid "Phone Number 2" msgstr "" -#: plug-ins/metadata/metadata-editor.c:660 +#: plug-ins/metadata/metadata-editor.c:664 msgid "Phone Type 2" msgstr "" -#: plug-ins/metadata/metadata-editor.c:661 +#: plug-ins/metadata/metadata-editor.c:665 msgid "Email Address" msgstr "" -#: plug-ins/metadata/metadata-editor.c:662 +#: plug-ins/metadata/metadata-editor.c:666 msgid "Web Address" msgstr "" -#: plug-ins/metadata/metadata-editor.c:675 +#: plug-ins/metadata/metadata-editor.c:679 msgid "Category" msgstr "კატეგორია" -#: plug-ins/metadata/metadata-editor.c:676 +#: plug-ins/metadata/metadata-editor.c:680 msgid "Supplemental Category" msgstr "დამატებითი კატეგორია" -#: plug-ins/metadata/metadata-editor.c:682 +#: plug-ins/metadata/metadata-editor.c:686 msgid "Longitude" msgstr "გრძედი" -#: plug-ins/metadata/metadata-editor.c:683 +#: plug-ins/metadata/metadata-editor.c:687 msgid "Longitude Reference" msgstr "" -#: plug-ins/metadata/metadata-editor.c:684 +#: plug-ins/metadata/metadata-editor.c:688 msgid "Latitude" msgstr "განედი" -#: plug-ins/metadata/metadata-editor.c:685 +#: plug-ins/metadata/metadata-editor.c:689 msgid "Latitude Reference" msgstr "" -#: plug-ins/metadata/metadata-editor.c:686 +#: plug-ins/metadata/metadata-editor.c:690 msgid "Altitude" msgstr "სიმაღლე" -#: plug-ins/metadata/metadata-editor.c:688 +#: plug-ins/metadata/metadata-editor.c:692 msgid "Altitude Reference" msgstr "სიმაღლის საწყისი მნიშვნელობა" -#: plug-ins/metadata/metadata-editor.c:694 +#: plug-ins/metadata/metadata-editor.c:698 msgid "Patient" msgstr "" -#: plug-ins/metadata/metadata-editor.c:695 +#: plug-ins/metadata/metadata-editor.c:699 msgid "Patient ID" msgstr "" -#: plug-ins/metadata/metadata-editor.c:696 +#: plug-ins/metadata/metadata-editor.c:700 msgid "Date of Birth" msgstr "დაბადების თარიღი" -#: plug-ins/metadata/metadata-editor.c:698 +#: plug-ins/metadata/metadata-editor.c:702 msgid "Patient Sex" msgstr "" -#: plug-ins/metadata/metadata-editor.c:700 +#: plug-ins/metadata/metadata-editor.c:704 msgid "Study ID" msgstr "" -#: plug-ins/metadata/metadata-editor.c:701 +#: plug-ins/metadata/metadata-editor.c:705 msgid "Referring Physician" msgstr "" -#: plug-ins/metadata/metadata-editor.c:702 +#: plug-ins/metadata/metadata-editor.c:706 msgid "Study Date" msgstr "" -#: plug-ins/metadata/metadata-editor.c:704 +#: plug-ins/metadata/metadata-editor.c:708 msgid "Study Description" msgstr "" -#: plug-ins/metadata/metadata-editor.c:705 +#: plug-ins/metadata/metadata-editor.c:709 msgid "Series Number" msgstr "სერიის ნომერი" -#: plug-ins/metadata/metadata-editor.c:706 +#: plug-ins/metadata/metadata-editor.c:710 msgid "Modality" msgstr "" -#: plug-ins/metadata/metadata-editor.c:707 +#: plug-ins/metadata/metadata-editor.c:711 msgid "Series Date" msgstr "" -#: plug-ins/metadata/metadata-editor.c:709 +#: plug-ins/metadata/metadata-editor.c:713 msgid "Series Description" msgstr "" -#: plug-ins/metadata/metadata-editor.c:711 +#: plug-ins/metadata/metadata-editor.c:715 msgid "Equipment Institution" msgstr "" -#: plug-ins/metadata/metadata-editor.c:712 +#: plug-ins/metadata/metadata-editor.c:716 msgid "Equipment Manufacturer" msgstr "" -#: plug-ins/metadata/metadata-editor.c:752 +#: plug-ins/metadata/metadata-editor.c:756 msgid "_Edit Metadata" msgstr "" -#: plug-ins/metadata/metadata-editor.c:756 +#: plug-ins/metadata/metadata-editor.c:760 msgid "Edit metadata (IPTC, EXIF, XMP)" msgstr "" -#: plug-ins/metadata/metadata-editor.c:1178 +#: plug-ins/metadata/metadata-editor.c:1170 #, c-format msgid "Metadata Editor: %s" msgstr "" -#: plug-ins/metadata/metadata-editor.c:1186 +#: plug-ins/metadata/metadata-editor.c:1178 msgid "_Write Metadata" msgstr "" #. IPTC tab -#: plug-ins/metadata/metadata-editor.c:1222 -#: plug-ins/metadata/metadata-viewer.c:401 +#: plug-ins/metadata/metadata-editor.c:1214 +#: plug-ins/metadata/metadata-viewer.c:393 msgid "IPTC" msgstr "IPTC" #. IPTC Extension tab -#: plug-ins/metadata/metadata-editor.c:1228 +#: plug-ins/metadata/metadata-editor.c:1220 msgid "IPTC Extension" msgstr "" #. Categories tab -#: plug-ins/metadata/metadata-editor.c:1334 +#: plug-ins/metadata/metadata-editor.c:1326 msgid "Categories" msgstr "კატეგორიები" #. GPS tab -#: plug-ins/metadata/metadata-editor.c:1340 +#: plug-ins/metadata/metadata-editor.c:1332 msgid "GPS" msgstr "GPS" #. DICOM tab -#: plug-ins/metadata/metadata-editor.c:1351 +#: plug-ins/metadata/metadata-editor.c:1343 msgid "DICOM" msgstr "" -#: plug-ins/metadata/metadata-editor.c:1373 +#: plug-ins/metadata/metadata-editor.c:1365 msgid "Import metadata" msgstr "" -#: plug-ins/metadata/metadata-editor.c:1375 +#: plug-ins/metadata/metadata-editor.c:1367 msgid "Export metadata" msgstr "მეტამონაცემების გატანა" -#: plug-ins/metadata/metadata-editor.c:1678 +#: plug-ins/metadata/metadata-editor.c:1670 msgid "Choose Date" msgstr "აირჩიეთ თარიღი" -#: plug-ins/metadata/metadata-editor.c:1682 +#: plug-ins/metadata/metadata-editor.c:1674 msgid "Set Date" msgstr "" -#: plug-ins/metadata/metadata-editor.c:2416 +#: plug-ins/metadata/metadata-editor.c:2408 msgid "" "Enter or edit GPS value here.\n" "Valid values consist of 1, 2 or 3 numbers (degrees, minutes, seconds), see " @@ -14322,7 +14350,7 @@ msgid "" "Delete all text to remove the current value." msgstr "" -#: plug-ins/metadata/metadata-editor.c:2422 +#: plug-ins/metadata/metadata-editor.c:2414 msgid "" "Enter or edit GPS altitude value here.\n" "A valid value consists of one number:\n" @@ -14332,24 +14360,24 @@ msgid "" "Delete all text to remove the current value." msgstr "" -#: plug-ins/metadata/metadata-editor.c:2556 +#: plug-ins/metadata/metadata-editor.c:2548 msgid "Unrated" msgstr "" -#: plug-ins/metadata/metadata-editor.c:4666 +#: plug-ins/metadata/metadata-editor.c:4658 #, c-format msgid "Failed to set metadata tag %s: %s" msgstr "მეტამონაცემების ჭდის %s დაყენების შეცდომა: %s" -#: plug-ins/metadata/metadata-editor.c:5529 +#: plug-ins/metadata/metadata-editor.c:5521 msgid "Import Metadata File" msgstr "" -#: plug-ins/metadata/metadata-editor.c:5564 +#: plug-ins/metadata/metadata-editor.c:5556 msgid "Export Metadata File" msgstr "" -#: plug-ins/metadata/metadata-editor.c:5568 +#: plug-ins/metadata/metadata-editor.c:5560 msgid "_Export" msgstr "" @@ -14577,53 +14605,53 @@ msgstr "აღმოსავლეთი" msgid "West" msgstr "დასავლეთი" -#: plug-ins/metadata/metadata-viewer.c:177 +#: plug-ins/metadata/metadata-viewer.c:181 msgid "_View Metadata" msgstr "მეტამონაცემების _ნახვა" -#: plug-ins/metadata/metadata-viewer.c:181 +#: plug-ins/metadata/metadata-viewer.c:185 msgid "View metadata (Exif, IPTC, XMP)" msgstr "" -#: plug-ins/metadata/metadata-viewer.c:265 +#: plug-ins/metadata/metadata-viewer.c:257 #, c-format msgid "Metadata Viewer: %s" msgstr "" -#: plug-ins/metadata/metadata-viewer.c:308 +#: plug-ins/metadata/metadata-viewer.c:300 msgid "Exif Tag" msgstr "" -#: plug-ins/metadata/metadata-viewer.c:325 +#: plug-ins/metadata/metadata-viewer.c:317 msgid "Exif" msgstr "Exif" -#: plug-ins/metadata/metadata-viewer.c:346 +#: plug-ins/metadata/metadata-viewer.c:338 msgid "XMP Tag" msgstr "" -#: plug-ins/metadata/metadata-viewer.c:363 +#: plug-ins/metadata/metadata-viewer.c:355 msgid "XMP" msgstr "XMP" -#: plug-ins/metadata/metadata-viewer.c:384 +#: plug-ins/metadata/metadata-viewer.c:376 msgid "IPTC Tag" msgstr "IPTC ჭდე" -#: plug-ins/metadata/metadata-viewer.c:481 +#: plug-ins/metadata/metadata-viewer.c:473 #, c-format msgid "(%lu more character(s))" msgstr "" -#: plug-ins/metadata/metadata-viewer.c:728 +#: plug-ins/metadata/metadata-viewer.c:720 msgid " meter" msgstr " მეტრი" -#: plug-ins/metadata/metadata-viewer.c:729 +#: plug-ins/metadata/metadata-viewer.c:721 msgid " feet" msgstr " ფუტი" -#: plug-ins/metadata/metadata-viewer.c:897 +#: plug-ins/metadata/metadata-viewer.c:889 #, c-format msgid "(%llu more byte(s))" msgstr "(კიდევ %llu ბაიტი)" @@ -14737,7 +14765,7 @@ msgstr "_ცენტრი:" #: plug-ins/print/print-page-layout.c:496 msgctxt "center-mode" msgid "None" -msgstr "" +msgstr "არაფერი" #: plug-ins/print/print-page-layout.c:497 msgid "Horizontally" diff --git a/po-plug-ins/sl.po b/po-plug-ins/sl.po index 9769c9f..ae7b5fd 100644 --- a/po-plug-ins/sl.po +++ b/po-plug-ins/sl.po @@ -10,8 +10,8 @@ msgid "" msgstr "" "Project-Id-Version: pika-plug-ins master\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-10-27 20:11+0000\n" -"PO-Revision-Date: 2023-10-28 21:48+0200\n" +"POT-Creation-Date: 2023-12-01 20:47+0000\n" +"PO-Revision-Date: 2023-12-02 08:58+0100\n" "Last-Translator: Martin Srebotnjak \n" "Language-Team: Martin Srebotnjak \n" "Language: sl\n" @@ -46,9 +46,8 @@ msgstr "Povadi kozo v jeziku C" #: plug-ins/common/sphere-designer.c:3185 plug-ins/common/tile.c:218 #: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:243 #: plug-ins/common/warp.c:344 plug-ins/common/wavelet-decompose.c:181 -#: plug-ins/file-dds/dds.c:542 plug-ins/flame/flame.c:299 -#: plug-ins/fractal-explorer/fractal-explorer.c:427 plug-ins/gfig/gfig.c:215 -#: plug-ins/pikaressionist/pika.c:184 +#: plug-ins/flame/flame.c:299 plug-ins/fractal-explorer/fractal-explorer.c:427 +#: plug-ins/gfig/gfig.c:215 plug-ins/pikaressionist/pika.c:184 #: plug-ins/gradient-flare/gradient-flare.c:925 #: plug-ins/ifs-compose/ifs-compose.c:492 plug-ins/imagemap/imap_main.c:264 #: plug-ins/lighting/lighting-main.c:756 @@ -69,9 +68,9 @@ msgstr "Povadi kozo (C)" #: plug-ins/common/busy-dialog.c:279 plug-ins/common/cml-explorer.c:1379 #: plug-ins/common/cml-explorer.c:2146 plug-ins/common/cml-explorer.c:2356 #: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1809 -#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1159 -#: plug-ins/common/file-heif.c:2345 plug-ins/common/file-pdf-load.c:686 -#: plug-ins/common/file-pdf-save.c:1046 plug-ins/common/grid.c:786 +#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1188 +#: plug-ins/common/file-heif.c:2378 plug-ins/common/file-pdf-load.c:686 +#: plug-ins/common/file-pdf-save.c:1053 plug-ins/common/grid.c:786 #: plug-ins/common/qbist.c:836 plug-ins/common/qbist.c:878 #: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2292 #: plug-ins/common/sphere-designer.c:2637 plug-ins/common/unit-editor.c:435 @@ -92,10 +91,10 @@ msgstr "Povadi kozo (C)" #: plug-ins/ifs-compose/ifs-compose.c:2597 plug-ins/imagemap/imap_browse.c:80 #: plug-ins/imagemap/imap_default_dialog.c:106 plug-ins/imagemap/imap_file.c:73 #: plug-ins/imagemap/imap_file.c:128 plug-ins/lighting/lighting-ui.c:738 -#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1185 -#: plug-ins/metadata/metadata-editor.c:1681 -#: plug-ins/metadata/metadata-editor.c:5532 -#: plug-ins/metadata/metadata-editor.c:5567 +#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1177 +#: plug-ins/metadata/metadata-editor.c:1673 +#: plug-ins/metadata/metadata-editor.c:5524 +#: plug-ins/metadata/metadata-editor.c:5559 msgid "_Cancel" msgstr "Pre_kliči" @@ -149,7 +148,7 @@ msgstr "Povadi kozo (JavaScript)" #: extensions/goat-exercises/goat-exercise-lua.lua:73 #: extensions/goat-exercises/goat-exercise-py3.py:79 #: plug-ins/common/cml-explorer.c:1380 plug-ins/common/colormap-remap.c:695 -#: plug-ins/common/file-heif.c:2346 plug-ins/common/file-pdf-load.c:687 +#: plug-ins/common/file-heif.c:2379 plug-ins/common/file-pdf-load.c:687 #: plug-ins/common/grid.c:787 plug-ins/common/qbist.c:933 #: plug-ins/common/sphere-designer.c:2638 plug-ins/common/unit-editor.c:266 #: plug-ins/common/warp.c:473 plug-ins/file-exr/file-exr.c:422 @@ -332,7 +331,7 @@ msgstr "Poravnaj vidne plasti" #. file save type #: plug-ins/common/align-layers.c:740 plug-ins/common/align-layers.c:758 #: plug-ins/common/file-ps.c:3729 plug-ins/common/file-ps.c:3737 -#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:209 +#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:191 #: plug-ins/file-tiff/file-tiff.c:240 #: plug-ins/fractal-explorer/fractal-explorer.c:344 #: plug-ins/fractal-explorer/fractal-explorer.c:354 @@ -541,11 +540,11 @@ msgstr "Hitrost predvajanja" #. 2 styles of default frame disposals: cumulative layers and one #. * frame per layer. #. -#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1269 +#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1298 msgid "Cumulative layers (combine)" msgstr "kumulativne plasti (združuj)" -#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1271 +#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1300 msgid "One frame per layer (replace)" msgstr "ena sličica na plast (zamenjaj)" @@ -629,16 +628,16 @@ msgstr "Navpične" #: plug-ins/common/decompose.c:645 plug-ins/common/file-cel.c:495 #: plug-ins/common/file-cel.c:500 plug-ins/common/file-dicom.c:751 #: plug-ins/common/file-farbfeld.c:321 plug-ins/common/file-gegl.c:471 -#: plug-ins/common/file-gif-load.c:1117 plug-ins/common/file-iff.c:335 +#: plug-ins/common/file-gif-load.c:1147 plug-ins/common/file-iff.c:345 #: plug-ins/common/file-jp2-load.c:1303 plug-ins/common/file-pcx.c:728 #: plug-ins/common/file-pcx.c:736 plug-ins/common/file-pcx.c:744 -#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:935 +#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:947 #: plug-ins/common/file-pnm.c:868 plug-ins/common/file-qoi.c:320 #: plug-ins/common/file-raw-data.c:1828 plug-ins/common/file-sunras.c:1082 #: plug-ins/common/file-tga.c:1116 plug-ins/common/file-wbmp.c:274 #: plug-ins/common/file-xbm.c:911 plug-ins/common/film.c:844 #: plug-ins/common/smooth-palette.c:302 plug-ins/common/tile.c:399 -#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:281 +#: plug-ins/file-bmp/bmp-load.c:738 plug-ins/file-exr/file-exr.c:281 #: plug-ins/file-faxg3/faxg3.c:578 plug-ins/file-fits/fits.c:700 #: plug-ins/file-jpeg/jpeg-load.c:231 #: plug-ins/file-psd/psd-image-res-load.c:1082 @@ -951,9 +950,9 @@ msgstr "Nasičenost" #: plug-ins/common/cml-explorer.c:301 plug-ins/common/cml-explorer.c:309 #: plug-ins/common/decompose.c:204 plug-ins/pikaressionist/orientation.c:148 -#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:317 -#: plug-ins/metadata/metadata-viewer.c:355 -#: plug-ins/metadata/metadata-viewer.c:393 +#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:309 +#: plug-ins/metadata/metadata-viewer.c:347 +#: plug-ins/metadata/metadata-viewer.c:385 msgid "Value" msgstr "Vrednost" @@ -986,16 +985,12 @@ msgid "Parameter File" msgstr "Datoteka parametrov" #: plug-ins/common/cml-explorer.c:537 -#, fuzzy -#| msgid "" -#| "The local file:// URI of parameter file. CML_explorer makes an image with " -#| "its settings." msgid "" "The parameter file from which CML_explorer makes an image. This argument is " "only used in non-interactive runs." msgstr "" -"Krajevni URI file:// datoteke parametrov. CML_explorer ustvari sliko s " -"svojimi nastavitvami." +"Datoteka s parametri, iz katere CML_explorer ustvari sliko. Ta argument se " +"uporablja samo pri neinteraktivnem zagonu." #: plug-ins/common/cml-explorer.c:908 msgid "CML Explorer: evoluting" @@ -1036,7 +1031,7 @@ msgstr "_Odpri" #. The Save button #: plug-ins/common/cml-explorer.c:1464 plug-ins/common/cml-explorer.c:2147 #: plug-ins/common/curve-bend.c:1279 plug-ins/common/curve-bend.c:1845 -#: plug-ins/common/file-pdf-save.c:1045 plug-ins/common/qbist.c:879 +#: plug-ins/common/file-pdf-save.c:1052 plug-ins/common/qbist.c:879 #: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2295 #: plug-ins/common/sphere-designer.c:2694 plug-ins/flame/flame.c:624 #: plug-ins/flame/flame.c:1241 @@ -1209,7 +1204,7 @@ msgstr "Graf trenutnih nastavitev" #: plug-ins/common/procedure-browser.c:169 plug-ins/gfig/gfig-dialog.c:355 #: plug-ins/gfig/gfig-dialog.c:1218 plug-ins/gfig/gfig-dialog.c:1363 #: plug-ins/ifs-compose/ifs-compose.c:1214 -#: plug-ins/metadata/metadata-viewer.c:272 +#: plug-ins/metadata/metadata-viewer.c:264 msgid "_Close" msgstr "Z_apri" @@ -1225,7 +1220,7 @@ msgstr "Shrani parametre raziskovalca MZP" #: plug-ins/common/file-dicom.c:1564 plug-ins/common/file-farbfeld.c:380 #: plug-ins/common/file-mng.c:871 plug-ins/common/file-mng.c:1218 #: plug-ins/common/file-pcx.c:1216 plug-ins/common/file-pdf-save.c:659 -#: plug-ins/common/file-png.c:1488 plug-ins/common/file-raw-data.c:1337 +#: plug-ins/common/file-png.c:1518 plug-ins/common/file-raw-data.c:1337 #: plug-ins/common/file-raw-data.c:1366 plug-ins/common/file-sunras.c:637 #: plug-ins/common/file-tga.c:1237 plug-ins/common/file-xmc.c:1381 #: plug-ins/common/sphere-designer.c:2206 plug-ins/file-bmp/bmp-save.c:341 @@ -1488,7 +1483,7 @@ msgstr "_Pordelost cr709:" #: plug-ins/common/compose.c:244 plug-ins/common/compose.c:438 #: plug-ins/common/compose.c:501 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2511 +#: plug-ins/common/file-heif.c:2544 msgid "RGB" msgstr "RGB" @@ -1977,10 +1972,10 @@ msgstr "Ne deluje na praznih izborih." #: plug-ins/common/curve-bend.c:834 plug-ins/common/file-cel.c:350 #: plug-ins/common/file-cel.c:402 plug-ins/common/file-dicom.c:383 -#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:414 +#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:416 #: plug-ins/common/file-iff.c:219 plug-ins/common/file-mng.c:1402 #: plug-ins/common/file-pcx.c:509 plug-ins/common/file-pcx.c:552 -#: plug-ins/common/file-png.c:658 plug-ins/common/file-ps.c:1109 +#: plug-ins/common/file-png.c:665 plug-ins/common/file-ps.c:1109 #: plug-ins/common/file-ps.c:3619 plug-ins/common/file-psp.c:2631 #: plug-ins/common/file-psp.c:2681 plug-ins/common/file-qoi.c:299 #: plug-ins/common/file-raw-data.c:515 plug-ins/common/file-raw-data.c:1665 @@ -1989,7 +1984,7 @@ msgstr "Ne deluje na praznih izborih." #: plug-ins/common/file-wbmp.c:188 plug-ins/common/file-xbm.c:749 #: plug-ins/common/file-xmc.c:656 plug-ins/common/file-xmc.c:895 #: plug-ins/common/file-xwd.c:492 plug-ins/common/sphere-designer.c:2095 -#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:156 +#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:160 #: plug-ins/file-faxg3/faxg3.c:260 plug-ins/file-fits/fits.c:395 #: plug-ins/file-fli/fli-pika.c:450 plug-ins/file-fli/fli-pika.c:501 #: plug-ins/file-icns/file-icns-load.c:516 @@ -2478,7 +2473,7 @@ msgstr "" "Ta vstavek uporablja aalib za shranjevanje sivinske slike kot slike ascii v " "različnih oblikah besedila" -#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:231 +#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:213 msgid "_Format" msgstr "_Oblika" @@ -2540,11 +2535,11 @@ msgstr "EOF ali napaka pri branju zaglavja slike" #. * Open the file for reading... #. #: plug-ins/common/file-cel.c:393 plug-ins/common/file-dicom.c:375 -#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:406 -#: plug-ins/common/file-heif.c:871 plug-ins/common/file-jp2-load.c:1077 +#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:408 +#: plug-ins/common/file-heif.c:910 plug-ins/common/file-jp2-load.c:1077 #: plug-ins/common/file-pcx.c:501 plug-ins/common/file-pcx.c:544 #: plug-ins/common/file-pdf-load.c:856 plug-ins/common/file-pix.c:393 -#: plug-ins/common/file-png.c:650 plug-ins/common/file-pnm.c:713 +#: plug-ins/common/file-png.c:657 plug-ins/common/file-pnm.c:713 #: plug-ins/common/file-ps.c:1099 plug-ins/common/file-raw-data.c:1657 #: plug-ins/common/file-sunras.c:449 plug-ins/common/file-tga.c:439 #: plug-ins/common/file-wbmp.c:180 plug-ins/common/file-wmf.c:784 @@ -2619,9 +2614,9 @@ msgstr "»%s«: EOF ali napaka pri branju podatkov palete" #. * Open the file for writing... #. #: plug-ins/common/file-cel.c:845 plug-ins/common/file-farbfeld.c:372 -#: plug-ins/common/file-gif-save.c:912 plug-ins/common/file-html-table.c:359 -#: plug-ins/common/file-jpegxl.c:1376 plug-ins/common/file-pcx.c:1100 -#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1480 +#: plug-ins/common/file-gif-save.c:941 plug-ins/common/file-html-table.c:359 +#: plug-ins/common/file-jpegxl.c:1382 plug-ins/common/file-pcx.c:1100 +#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1510 #: plug-ins/common/file-pnm.c:1634 plug-ins/common/file-ps.c:1321 #: plug-ins/common/file-qoi.c:374 plug-ins/common/file-sunras.c:628 #: plug-ins/common/file-tga.c:1229 plug-ins/common/file-xbm.c:1050 @@ -2876,133 +2871,133 @@ msgstr "»%s« ni mogoče odpreti" msgid "GIF image" msgstr "Slika GIF" -#: plug-ins/common/file-gif-load.c:421 +#: plug-ins/common/file-gif-load.c:423 msgid "GIF magic code" msgstr "Čarobna koda GIF" -#: plug-ins/common/file-gif-load.c:429 +#: plug-ins/common/file-gif-load.c:431 msgid "This is not a GIF file: incorrect magic code" msgstr "To ni datoteka GIF: napačna čarobna koda" -#: plug-ins/common/file-gif-load.c:437 +#: plug-ins/common/file-gif-load.c:439 msgid "Incorrect GIF version: not '87a' or '89a'" msgstr "Napačna različica GIF: ni »87a« ali »89a«" -#: plug-ins/common/file-gif-load.c:444 +#: plug-ins/common/file-gif-load.c:446 msgid "screen descriptor" msgstr "opis zaslona" -#: plug-ins/common/file-gif-load.c:462 +#: plug-ins/common/file-gif-load.c:464 msgid "global colormap" msgstr "globalni katalog barv" -#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 +#: plug-ins/common/file-gif-load.c:476 plug-ins/common/file-gif-load.c:1110 msgid "image data" msgstr "podatki slike" -#: plug-ins/common/file-gif-load.c:491 +#: plug-ins/common/file-gif-load.c:493 msgid "extension data" msgstr "podatki o končnici" -#: plug-ins/common/file-gif-load.c:511 +#: plug-ins/common/file-gif-load.c:513 msgid "frame info" msgstr "podatki o sličici" -#: plug-ins/common/file-gif-load.c:524 +#: plug-ins/common/file-gif-load.c:526 msgid "local colormap" msgstr "krajevni katalog barv" -#: plug-ins/common/file-gif-load.c:569 +#: plug-ins/common/file-gif-load.c:571 plug-ins/common/file-iff.c:361 msgid "" "Non-square pixels. Image might look squashed if Dot for Dot mode is enabled." msgstr "" "Nekvadratne slikovne točke. Slika bo morda videti raztegnjena, če je " "omogočen način točka za točko." -#: plug-ins/common/file-gif-load.c:606 plug-ins/common/file-gif-load.c:611 +#: plug-ins/common/file-gif-load.c:627 plug-ins/common/file-gif-load.c:632 #, c-format msgid "Error reading %s. %s" msgstr "Napaka pri branju %s. %s" -#: plug-ins/common/file-gif-load.c:607 plug-ins/common/file-gif-load.c:612 -#: plug-ins/common/file-gif-load.c:763 plug-ins/common/file-gif-load.c:771 -#: plug-ins/common/file-gif-load.c:802 plug-ins/common/file-gif-load.c:856 -#: plug-ins/common/file-gif-load.c:946 plug-ins/common/file-gif-load.c:965 -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 -#: plug-ins/common/file-gif-load.c:1215 +#: plug-ins/common/file-gif-load.c:628 plug-ins/common/file-gif-load.c:633 +#: plug-ins/common/file-gif-load.c:793 plug-ins/common/file-gif-load.c:801 +#: plug-ins/common/file-gif-load.c:832 plug-ins/common/file-gif-load.c:886 +#: plug-ins/common/file-gif-load.c:976 plug-ins/common/file-gif-load.c:995 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 +#: plug-ins/common/file-gif-load.c:1245 msgid "Image may be corrupt!" msgstr "Slika je lahko poškodovana!" -#: plug-ins/common/file-gif-load.c:763 +#: plug-ins/common/file-gif-load.c:793 msgid "Error reading data size" msgstr "Napaka pri branju velikosti podatkov" -#: plug-ins/common/file-gif-load.c:771 +#: plug-ins/common/file-gif-load.c:801 msgid "Error reading data" msgstr "Napaka pri branju podatkov" -#: plug-ins/common/file-gif-load.c:802 +#: plug-ins/common/file-gif-load.c:832 msgid "Not enough compressed data" msgstr "Premalo stisnjenih podatkov" -#: plug-ins/common/file-gif-load.c:856 +#: plug-ins/common/file-gif-load.c:886 msgid "Value out of range for code size" msgstr "Vrednost zunaj obsega za velikost kode" -#: plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:975 msgid "Invalid code, expecting end of data marker" msgstr "Neveljavna koda, pričakovan konec označevalnika podatkov" -#: plug-ins/common/file-gif-load.c:965 +#: plug-ins/common/file-gif-load.c:995 msgid "Unexpected extra data" msgstr "Nepričakovani dodatni podatki" -#: plug-ins/common/file-gif-load.c:984 +#: plug-ins/common/file-gif-load.c:1014 msgid "Invalid table entry" msgstr "Neveljaven vnos tabele" -#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1014 plug-ins/common/file-gif-load.c:1020 msgid "Image is corrupt!" msgstr "Slika je okvarjena!" -#: plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1020 msgid "Circular table entry" msgstr "Vnos krožne tabele" -#: plug-ins/common/file-gif-load.c:1065 +#: plug-ins/common/file-gif-load.c:1095 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 msgid "Invalid frame dimensions" msgstr "Neveljavne mere sličice" -#: plug-ins/common/file-gif-load.c:1086 +#: plug-ins/common/file-gif-load.c:1116 msgid "compressed image data" msgstr "stisnjeni podatki slike" -#: plug-ins/common/file-gif-load.c:1119 +#: plug-ins/common/file-gif-load.c:1149 #, c-format msgid "Background (%d%s)" msgstr "Ozadje (%d%s)" -#: plug-ins/common/file-gif-load.c:1146 +#: plug-ins/common/file-gif-load.c:1176 #, c-format msgid "Opening '%s' (frame %d)" msgstr "Odpiranje »%s« (sličica %d)" -#: plug-ins/common/file-gif-load.c:1175 +#: plug-ins/common/file-gif-load.c:1205 #, c-format msgid "Frame %d" msgstr "Sličica %d" -#: plug-ins/common/file-gif-load.c:1177 +#: plug-ins/common/file-gif-load.c:1207 #, c-format msgid "Frame %d (%d%s)" msgstr "Sličica %d (%d%s)" -#: plug-ins/common/file-gif-load.c:1208 +#: plug-ins/common/file-gif-load.c:1238 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " @@ -3011,12 +3006,12 @@ msgstr "" "GIF: Nedokumentiran sestavek GIF vrste %d ni podprt. Animacija se morda ne " "bo predvajala ali shranila pravilno." -#: plug-ins/common/file-gif-load.c:1214 +#: plug-ins/common/file-gif-load.c:1244 #, c-format msgid "Unknown composite type %d. %s" msgstr "Neznana vrsta sestavka %d. %s" -#: plug-ins/common/file-gif-load.c:1257 +#: plug-ins/common/file-gif-load.c:1287 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" @@ -3025,7 +3020,7 @@ msgstr "" "Prosimo, vnesite poročilo o napakah na https://gitlab.gnome.org/GNOME/pika/" "issues" -#: plug-ins/common/file-gif-load.c:1380 +#: plug-ins/common/file-gif-load.c:1410 msgid "Too much compressed data, ignoring extra..." msgstr "Preveč stisnjenih podatkov, dodatni bodo prezrti …" @@ -3135,15 +3130,15 @@ msgstr "Komen_tar" msgid "Image comment" msgstr "Komentar slike" -#: plug-ins/common/file-gif-save.c:348 +#: plug-ins/common/file-gif-save.c:377 msgid "GIF format does not support multiple layers." msgstr "Zapis GIF ne podpira več plasti." -#: plug-ins/common/file-gif-save.c:553 +#: plug-ins/common/file-gif-save.c:582 msgid "Couldn't simply reduce colors further. Exporting as opaque." msgstr "Nadaljnja redukcija barv enostavno ni možna. Shranjeno kot prekrivno." -#: plug-ins/common/file-gif-save.c:672 +#: plug-ins/common/file-gif-save.c:701 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are " @@ -3152,7 +3147,7 @@ msgstr "" "Shranjevanje ‘%s’ ni uspelo. Vrsta datotek GIF ne podpira slik, ki so " "daljše ali širše od %d slikovnih točk." -#: plug-ins/common/file-gif-save.c:798 +#: plug-ins/common/file-gif-save.c:827 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." @@ -3160,19 +3155,19 @@ msgstr "" "Zapis GIF podpira komentarje le v 7-bitni kodni tabeli ASCII. Komentar ne bo " "shranjen." -#: plug-ins/common/file-gif-save.c:885 +#: plug-ins/common/file-gif-save.c:914 msgid "" "Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "" "Barvnih slik RGB ni mogoče izvoziti. Najprej pretvorite v indeksirano ali " "sivinsko sliko." -#: plug-ins/common/file-gif-save.c:1105 +#: plug-ins/common/file-gif-save.c:1134 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "" "Zaradi preprečitve preobremenitve CPE pri animaciji je vstavljena zakasnitev." -#: plug-ins/common/file-gif-save.c:1154 +#: plug-ins/common/file-gif-save.c:1183 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." @@ -3180,11 +3175,11 @@ msgstr "" "Slika, ki jo želite izvoziti kot GIF, vsebuje plasti, ki se raztezajo prek " "dejanskih meja slike." -#: plug-ins/common/file-gif-save.c:1160 +#: plug-ins/common/file-gif-save.c:1189 msgid "Cr_op" msgstr "_Obreži" -#: plug-ins/common/file-gif-save.c:1171 +#: plug-ins/common/file-gif-save.c:1200 msgid "" "The GIF file format does not allow this. You may choose whether to crop all " "of the layers to the image borders, or cancel this export." @@ -3192,19 +3187,19 @@ msgstr "" "Datotečni zapis GIF tega ne podpira. Izberite, ali želite vse plasti " "porezati na robove slike ali pa preklicati izvažanje." -#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 +#: plug-ins/common/file-gif-save.c:1290 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "milisekund" -#: plug-ins/common/file-gif-save.c:1267 +#: plug-ins/common/file-gif-save.c:1296 msgid "I don't care" msgstr "vseeno mi je" -#: plug-ins/common/file-gif-save.c:1303 +#: plug-ins/common/file-gif-save.c:1332 msgid "Animated GIF" msgstr "Animirani GIF" -#: plug-ins/common/file-gif-save.c:1310 +#: plug-ins/common/file-gif-save.c:1339 msgid "" "You can only export as animation when the image has more than one layer.\n" "The image you are trying to export only has one layer." @@ -3301,15 +3296,15 @@ msgstr "Glava izvorne kode programskega jezika C" msgid "Header plug-in does not support multiple layers." msgstr "Vstavek glave ne podpira več plasti." -#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 +#: plug-ins/common/file-heif.c:204 plug-ins/common/file-heif.c:244 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:197 +#: plug-ins/common/file-heif.c:207 msgid "Loads HEIF images" msgstr "Naloži slike HEIF" -#: plug-ins/common/file-heif.c:198 +#: plug-ins/common/file-heif.c:208 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -3317,179 +3312,191 @@ msgstr "" "Naloži sliko, shranjeno v zapisu HEIF (High Efficiency Image File Format). " "Običajne končnice za datoteke HEIF so .heif, .heic." -#: plug-ins/common/file-heif.c:239 +#: plug-ins/common/file-heif.c:249 msgid "Exports HEIF images" msgstr "Izvozi slike HEIF" -#: plug-ins/common/file-heif.c:240 +#: plug-ins/common/file-heif.c:250 msgid "Save image in HEIF format (High Efficiency Image File Format)." msgstr "Shrani sliko v zapisu HEIF (High Efficiency Image File Format)." -#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/common/file-heif.c:266 plug-ins/common/file-heif.c:376 #: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "_Kakovost" -#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 +#: plug-ins/common/file-heif.c:267 plug-ins/common/file-heif.c:377 msgid "Quality factor (0 = worst, 100 = best)" msgstr "Faktor kakovosti (0 = najslabše, 100 = najboljše)" -#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: plug-ins/common/file-heif.c:272 plug-ins/common/file-heif.c:382 #: plug-ins/common/file-jpegxl.c:188 plug-ins/file-webp/file-webp.c:178 msgid "L_ossless" msgstr "_Brez izgub" -#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-heif.c:273 plug-ins/common/file-heif.c:383 #: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "Uporabi stiskanje brez izgub" -#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 +#: plug-ins/common/file-heif.c:278 plug-ins/common/file-heif.c:388 msgid "Save color prof_ile" msgstr "Shrani barvni prof_il" -#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 +#: plug-ins/common/file-heif.c:279 plug-ins/common/file-heif.c:389 msgid "Save the image's color profile" msgstr "Shrani barvni profil slike" -#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 #: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "_Bitna globina" -#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: plug-ins/common/file-heif.c:285 plug-ins/common/file-heif.c:395 #: plug-ins/common/file-jpegxl.c:201 msgid "Bit depth of exported image" msgstr "Bitna globina izvožene slike" -#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 -#: plug-ins/common/file-png.c:286 +#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 +#: plug-ins/common/file-png.c:290 msgid "_Pixel format" msgstr "Oblika sli_kovnih točk" -#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 +#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 msgid "Format of color sub-sampling" msgstr "Oblika barvnega pod-vzorčenja" -#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 +#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 msgid "Enco_der speed" msgstr "Hitrost ho_dirnika" -#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 +#: plug-ins/common/file-heif.c:298 plug-ins/common/file-heif.c:408 msgid "Tradeoff between speed and compression" msgstr "Kompromis med hitrostjo in stiskanjem" -#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-heif.c:304 plug-ins/common/file-heif.c:414 #: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "Shrani podatke Exi_f" -#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: plug-ins/common/file-heif.c:305 plug-ins/common/file-heif.c:415 #: plug-ins/common/file-jpegxl.c:226 msgid "Toggle saving Exif data" msgstr "Preklopi shranjevanje podatkov Exif" -#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-heif.c:310 plug-ins/common/file-heif.c:420 #: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "Shrani podatke _XMP" -#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: plug-ins/common/file-heif.c:311 plug-ins/common/file-heif.c:421 #: plug-ins/common/file-jpegxl.c:232 msgid "Toggle saving XMP data" msgstr "Preklopi shranjevanje podatkov XMP" -#: plug-ins/common/file-heif.c:315 +#: plug-ins/common/file-heif.c:325 msgid "Loads AVIF images" msgstr "Naloži slike AVIF" -#: plug-ins/common/file-heif.c:316 +#: plug-ins/common/file-heif.c:326 msgid "Load image stored in AV1 Image File Format (AVIF)" msgstr "Naloži sliko v zapisu AVIF (AV1 Image File Format)." -#: plug-ins/common/file-heif.c:348 +#: plug-ins/common/file-heif.c:358 msgid "Exports AVIF images" msgstr "Izvozi slike AVIF" -#: plug-ins/common/file-heif.c:349 +#: plug-ins/common/file-heif.c:359 msgid "Save image in AV1 Image File Format (AVIF)" msgstr "Shrani sliko v zapisu AVIF (AV1 Image File Format)." -#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 +#: plug-ins/common/file-heif.c:432 +msgid "JPEG 2000 encapsulated in HEIF" +msgstr "JPEG 2000, ovit v HEIF" + +#: plug-ins/common/file-heif.c:435 +msgid "Loads HEJ2 images" +msgstr "Naloži slike HEJ2" + +#: plug-ins/common/file-heif.c:436 +msgid "Load JPEG 2000 image encapsulated in HEIF (HEJ2)" +msgstr "Naloži sliko JPEG2000, ovito v HEIF (HEJ2)" + +#: plug-ins/common/file-heif.c:541 plug-ins/common/file-heif.c:631 msgid "HEIF format does not support multiple layers." msgstr "Zapis HEIF ne podpira več plasti." -#: plug-ins/common/file-heif.c:911 plug-ins/common/file-heif.c:944 -#: plug-ins/common/file-heif.c:985 plug-ins/common/file-heif.c:1051 +#: plug-ins/common/file-heif.c:950 plug-ins/common/file-heif.c:983 +#: plug-ins/common/file-heif.c:1024 plug-ins/common/file-heif.c:1090 #, c-format msgid "Loading HEIF image failed: %s" msgstr "Nalaganje slike HEIF slike ni uspelo: %s" -#: plug-ins/common/file-heif.c:933 +#: plug-ins/common/file-heif.c:972 msgid "Loading HEIF image failed: Input file contains no readable images" msgstr "" "Nalaganje slike HEIF ni uspelo: vhodna datoteka ne vsebuje berljivih slik." -#: plug-ins/common/file-heif.c:1177 +#: plug-ins/common/file-heif.c:1216 msgid "image content" msgstr "Vsebina slike" -#: plug-ins/common/file-heif.c:1529 +#: plug-ins/common/file-heif.c:1562 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "Izvažanje »%s« z uporabo kodirnika %s ..." -#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 +#: plug-ins/common/file-heif.c:1612 plug-ins/common/file-heif.c:2019 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "Kodiranje slike HEIF je spodletelo: %s" -#: plug-ins/common/file-heif.c:2107 +#: plug-ins/common/file-heif.c:2140 #, c-format msgid "Writing HEIF image failed: %s" msgstr "Zapisovanje slike HEIF ni uspelo: %s" -#: plug-ins/common/file-heif.c:2196 +#: plug-ins/common/file-heif.c:2229 msgid "primary" msgstr "Primarno" -#: plug-ins/common/file-heif.c:2341 +#: plug-ins/common/file-heif.c:2374 msgid "Load HEIF Image" msgstr "Naloži sliko HEIF" -#: plug-ins/common/file-heif.c:2355 +#: plug-ins/common/file-heif.c:2388 msgid "Select Image" msgstr "Izberi sliko" -#: plug-ins/common/file-heif.c:2512 +#: plug-ins/common/file-heif.c:2545 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2513 +#: plug-ins/common/file-heif.c:2546 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 +#: plug-ins/common/file-heif.c:2554 plug-ins/common/file-jpegxl.c:2028 msgid "8 bit/channel" msgstr "8 bitov/kanal" -#: plug-ins/common/file-heif.c:2522 +#: plug-ins/common/file-heif.c:2555 msgid "10 bit/channel" msgstr "10 bitov/kanal" -#: plug-ins/common/file-heif.c:2523 +#: plug-ins/common/file-heif.c:2556 msgid "12 bit/channel" msgstr "12 bitov/kanal" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2562 msgid "Slow" msgstr "Počasi" -#: plug-ins/common/file-heif.c:2530 +#: plug-ins/common/file-heif.c:2563 msgid "Balanced" msgstr "Uravnoteženo" -#: plug-ins/common/file-heif.c:2531 +#: plug-ins/common/file-heif.c:2564 msgid "Fast" msgstr "Hitro" @@ -3648,11 +3655,11 @@ msgstr "Amiga IFF" msgid "Load file in the IFF file format" msgstr "Naloži datoteko v zapisu IFF" -#: plug-ins/common/file-iff.c:252 +#: plug-ins/common/file-iff.c:254 msgid "Invalid or missing ILBM image" msgstr "Neveljavna ali manjkajoča slika ILBM" -#: plug-ins/common/file-iff.c:257 +#: plug-ins/common/file-iff.c:268 msgid "ILBM contains no image data - likely a palette file" msgstr "" "ILBM ne vsebuje slikovnih podatkov - najverjetneje je to datoteka palete" @@ -3825,56 +3832,56 @@ msgid "Create a CMYK JPEG XL image using the soft-proofing color profile" msgstr "" "Izvozite sliko JPEG XL CMYK z uporabo barvnega profila preverjanja videza" -#: plug-ins/common/file-jpegxl.c:2008 +#: plug-ins/common/file-jpegxl.c:2014 msgid "lightning (fastest)" msgstr "strela (najhitrejše)" -#: plug-ins/common/file-jpegxl.c:2009 +#: plug-ins/common/file-jpegxl.c:2015 msgid "thunder" msgstr "grom" -#: plug-ins/common/file-jpegxl.c:2010 +#: plug-ins/common/file-jpegxl.c:2016 msgid "falcon (faster)" msgstr "sokol (hitreje)" -#: plug-ins/common/file-jpegxl.c:2011 +#: plug-ins/common/file-jpegxl.c:2017 msgid "cheetah" msgstr "gepard" -#: plug-ins/common/file-jpegxl.c:2012 +#: plug-ins/common/file-jpegxl.c:2018 msgid "hare" msgstr "zajec" -#: plug-ins/common/file-jpegxl.c:2013 +#: plug-ins/common/file-jpegxl.c:2019 msgid "wombat" msgstr "vombat" -#: plug-ins/common/file-jpegxl.c:2014 +#: plug-ins/common/file-jpegxl.c:2020 msgid "squirrel" msgstr "veverica" -#: plug-ins/common/file-jpegxl.c:2015 +#: plug-ins/common/file-jpegxl.c:2021 msgid "kitten" msgstr "mucka" -#: plug-ins/common/file-jpegxl.c:2016 +#: plug-ins/common/file-jpegxl.c:2022 msgid "tortoise (slower)" msgstr "želva (počasneje)" -#: plug-ins/common/file-jpegxl.c:2023 +#: plug-ins/common/file-jpegxl.c:2029 msgid "16 bit/channel" msgstr "16 bitov/kanal" -#: plug-ins/common/file-jpegxl.c:2031 +#: plug-ins/common/file-jpegxl.c:2037 msgid "CMYK profile required for export" msgstr "Profil CMYK, potreben za izvoz" -#: plug-ins/common/file-jpegxl.c:2039 plug-ins/file-jpeg/jpeg-save.c:900 +#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:900 #: plug-ins/file-psd/psd-save.c:2459 plug-ins/file-tiff/file-tiff-save.c:1315 msgid "Name of the color profile used for CMYK export." msgstr "Ime barvnega profila, uporabljenega za izvoz CMYK." -#: plug-ins/common/file-jpegxl.c:2058 plug-ins/file-jpeg/jpeg-save.c:911 +#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:911 #: plug-ins/file-psd/psd-save.c:2470 plug-ins/file-tiff/file-tiff-save.c:1327 #, c-format msgid "Profile: %s" @@ -3966,7 +3973,7 @@ msgstr "Privzeta _opustitev sličic" msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" msgstr "(animirani MNG) Privzeta vrsta odlaganja (0 = združi; 1 = zamenjaj)" -#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:252 msgid "Save _background color" msgstr "Shrani _barvo ozadja" @@ -3990,7 +3997,7 @@ msgstr "S_hrani ločljivost" msgid "Write pHYs (image resolution) chunk" msgstr "Zapiši košček pHYs (ločljivost slike)" -#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:270 msgid "Save creation _time" msgstr "Shrani _čas nastanka" @@ -4001,7 +4008,7 @@ msgstr "Zapiši košček tIME (čas nastanka)" #. Inform the user that we couldn't losslessly save the #. * transparency & just use the full palette #. -#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2315 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "" "Prosojnosti ni mogoče shraniti brez izgub, zato bo shranjena prekrivnost." @@ -4010,7 +4017,7 @@ msgstr "" msgid "MNG Options" msgstr "Možnosti MNG" -#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:233 msgid "PNG" msgstr "PNG" @@ -4147,13 +4154,13 @@ msgid "'%s' is not a PCX file" msgstr "»%s« ni datoteka PCX" #: plug-ins/common/file-pcx.c:693 plug-ins/common/file-wbmp.c:263 -#: plug-ins/file-bmp/bmp-load.c:726 plug-ins/file-psd/psd-load.c:548 +#: plug-ins/file-bmp/bmp-load.c:727 plug-ins/file-psd/psd-load.c:548 #, c-format msgid "Unsupported or invalid image width: %d" msgstr "Nepodprta ali neveljavna širina slike: %d" #: plug-ins/common/file-pcx.c:699 plug-ins/common/file-wbmp.c:269 -#: plug-ins/file-bmp/bmp-load.c:732 plug-ins/file-psd/psd-load.c:540 +#: plug-ins/file-bmp/bmp-load.c:733 plug-ins/file-psd/psd-load.c:540 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "Nepodprta ali neveljavna višina slike: %d" @@ -4339,7 +4346,7 @@ msgid "PDF" msgstr "PDF" #: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 -#: plug-ins/common/file-pdf-save.c:1098 +#: plug-ins/common/file-pdf-save.c:1105 msgid "_Fill transparent areas with background color" msgstr "_Zapolni prosojna področja z barvo ozadja" @@ -4365,7 +4372,7 @@ msgstr "" "Prepričajte se, da ste vnesli veljavno ime datoteke in da na izbranem mestu " "ni dovoljeno le branje!" -#: plug-ins/common/file-pdf-save.c:939 +#: plug-ins/common/file-pdf-save.c:946 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -4376,54 +4383,54 @@ msgstr "" "Priporočamo, da svoje plasti besedila pretvorite v sliko ali da namestite " "manjkajoče pisave pred izvozom, sicer vaše oblikovanje ne bo videti pravilno." -#: plug-ins/common/file-pdf-save.c:1037 +#: plug-ins/common/file-pdf-save.c:1044 msgid "Save to:" msgstr "Shrani v:" -#: plug-ins/common/file-pdf-save.c:1041 +#: plug-ins/common/file-pdf-save.c:1048 msgid "Browse..." msgstr "Prebrskaj ..." -#: plug-ins/common/file-pdf-save.c:1042 +#: plug-ins/common/file-pdf-save.c:1049 msgid "Multipage PDF export" msgstr "Izvoz večstranskega PDF" -#: plug-ins/common/file-pdf-save.c:1078 +#: plug-ins/common/file-pdf-save.c:1085 msgid "Remove the selected pages" msgstr "Izbrišite izbrane strani" -#: plug-ins/common/file-pdf-save.c:1088 +#: plug-ins/common/file-pdf-save.c:1095 msgid "Add this image" msgstr "Dodaj to sliko" -#: plug-ins/common/file-pdf-save.c:1093 +#: plug-ins/common/file-pdf-save.c:1100 msgid "_Omit hidden layers and layers with zero opacity" msgstr "Izp_usti skrite plasti in plasti z ničelno prekrivnostjo" -#: plug-ins/common/file-pdf-save.c:1103 +#: plug-ins/common/file-pdf-save.c:1110 msgid "Convert _bitmaps to vector graphics where possible" msgstr "Pretvori _bitne slike v vektorsko grafiko, kjer je to mogoče" -#: plug-ins/common/file-pdf-save.c:1108 +#: plug-ins/common/file-pdf-save.c:1115 msgid "_Apply layer masks before saving" msgstr "Pre_d shranjevanjem uveljavi maske plasti" -#: plug-ins/common/file-pdf-save.c:1112 +#: plug-ins/common/file-pdf-save.c:1119 msgid "Keeping the masks will not change the output" msgstr "Ohranjanje mask ne bo spremenilo izhoda" -#: plug-ins/common/file-pdf-save.c:1201 plug-ins/common/file-pdf-save.c:1274 -#: plug-ins/common/file-pdf-save.c:1372 plug-ins/common/file-ps.c:2098 +#: plug-ins/common/file-pdf-save.c:1208 plug-ins/common/file-pdf-save.c:1281 +#: plug-ins/common/file-pdf-save.c:1379 plug-ins/common/file-ps.c:2098 #: plug-ins/file-tiff/file-tiff-load.c:1530 #, c-format msgid "Page %d" msgstr "Stran %d" -#: plug-ins/common/file-pdf-save.c:1241 +#: plug-ins/common/file-pdf-save.c:1248 msgid "Error! In order to save the file, at least one image should be added!" msgstr "Napaka! Če želite shraniti datoteko, morate dodati vsaj eno sliko!" -#: plug-ins/common/file-pdf-save.c:1419 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1426 plug-ins/print/print-draw-page.c:125 msgid "Cannot handle the size (either width or height) of the image." msgstr "Velikosti slike ni mogoče obvladati (širina ali višina)." @@ -4448,63 +4455,63 @@ msgstr "" msgid "Invalid Esm Software PIX file" msgstr "Neveljavna datoteka Esm Software PIX" -#: plug-ins/common/file-png.c:183 plug-ins/common/file-png.c:213 +#: plug-ins/common/file-png.c:187 plug-ins/common/file-png.c:217 msgid "PNG image" msgstr "Slika PNG" -#: plug-ins/common/file-png.c:236 +#: plug-ins/common/file-png.c:240 msgid "_Interlacing (Adam7)" msgstr "Prep_letanje (Adam7)" -#: plug-ins/common/file-png.c:237 +#: plug-ins/common/file-png.c:241 msgid "Use Adam7 interlacing" msgstr "Uporabi prepletanje Adam7" -#: plug-ins/common/file-png.c:242 +#: plug-ins/common/file-png.c:246 msgid "Co_mpression level" msgstr "Raven stis_kanja" -#: plug-ins/common/file-png.c:243 +#: plug-ins/common/file-png.c:247 msgid "Deflate Compression factor (0..9)" msgstr "Faktor kompresije stiskanja (0..9)" -#: plug-ins/common/file-png.c:249 +#: plug-ins/common/file-png.c:253 msgid "Write bKGD chunk (PNG metadata)" msgstr "Zapiši kos bKGD (metapodatki PNG)" -#: plug-ins/common/file-png.c:254 +#: plug-ins/common/file-png.c:258 msgid "Save layer o_ffset" msgstr "Shrani _odmik plasti" -#: plug-ins/common/file-png.c:255 +#: plug-ins/common/file-png.c:259 msgid "Write oFFs chunk (PNG metadata)" msgstr "Zapiši kos oFFs (metapodatki PNG)" -#: plug-ins/common/file-png.c:260 +#: plug-ins/common/file-png.c:264 msgid "Save resol_ution" msgstr "Shrani lo_čljivost" -#: plug-ins/common/file-png.c:261 +#: plug-ins/common/file-png.c:265 msgid "Write pHYs chunk (PNG metadata)" msgstr "Zapiši kos pHYs (metapodatki PNG)" -#: plug-ins/common/file-png.c:267 +#: plug-ins/common/file-png.c:271 msgid "Write tIME chunk (PNG metadata)" msgstr "Zapiši kos tiME (metapodatki PNG)" -#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:251 +#: plug-ins/common/file-png.c:276 plug-ins/file-tiff/file-tiff.c:251 msgid "Save color _values from transparent pixels" msgstr "Shrani _vrednosti barv iz prosojnih slikovnih točk" -#: plug-ins/common/file-png.c:273 +#: plug-ins/common/file-png.c:277 msgid "Preserve color of completely transparent pixels" msgstr "Ohrani barvo popolnoma prosojnih slikovnih točk" -#: plug-ins/common/file-png.c:278 +#: plug-ins/common/file-png.c:282 msgid "_Optimize for smallest possible palette size" msgstr "_Optimiziraj za najmanjšo možno velikost palete" -#: plug-ins/common/file-png.c:279 +#: plug-ins/common/file-png.c:283 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" @@ -4512,83 +4519,83 @@ msgstr "" "Če je potrjeno, shrani kot 1-, 2-, 4- ali 8-bitno, odvisno od števila " "uporabljenih barv. Ko ni potrjeno, vedno shrani kot 8-bitno" -#: plug-ins/common/file-png.c:287 +#: plug-ins/common/file-png.c:291 msgid "PNG export format" msgstr "Oblika izvoza PNG" -#: plug-ins/common/file-png.c:288 plug-ins/common/file-ps.c:3723 +#: plug-ins/common/file-png.c:292 plug-ins/common/file-ps.c:3723 #: plug-ins/file-fits/fits.c:1035 msgid "Automatic" msgstr "Samodejno" -#: plug-ins/common/file-png.c:289 +#: plug-ins/common/file-png.c:293 msgid "8 bpc RGB" msgstr "RGB, 8 b/kanal" -#: plug-ins/common/file-png.c:290 +#: plug-ins/common/file-png.c:294 msgid "8 bpc GRAY" msgstr "GRAY (sivinsko), 8 b/kanal" -#: plug-ins/common/file-png.c:291 +#: plug-ins/common/file-png.c:295 msgid "8 bpc RGBA" msgstr "RGBA 8, b/kanal" -#: plug-ins/common/file-png.c:292 +#: plug-ins/common/file-png.c:296 msgid "8 bpc GRAYA" msgstr "GRAYA, 8 b/kanal" -#: plug-ins/common/file-png.c:293 +#: plug-ins/common/file-png.c:297 msgid "16 bpc RGB" msgstr "RGB, 16 b/kanal" -#: plug-ins/common/file-png.c:294 +#: plug-ins/common/file-png.c:298 msgid "16 bpc GRAY" msgstr "GRAY, 16 b/kanal" -#: plug-ins/common/file-png.c:295 +#: plug-ins/common/file-png.c:299 msgid "16 bpc RGBA" msgstr "RGBA, 16 b/kanal" -#: plug-ins/common/file-png.c:296 +#: plug-ins/common/file-png.c:300 msgid "16 bpc GRAYA" msgstr "GRAYA, 16 b/kanal" -#: plug-ins/common/file-png.c:411 +#: plug-ins/common/file-png.c:415 msgid "PNG format does not support multiple layers." msgstr "Zapis PNG ne podpira več plasti." -#: plug-ins/common/file-png.c:484 +#: plug-ins/common/file-png.c:488 #, c-format msgid "Error loading PNG file: %s\n" msgstr "Napaka pri nalaganju datoteke PNG: %s\n" -#: plug-ins/common/file-png.c:615 +#: plug-ins/common/file-png.c:622 #, c-format msgid "Error creating PNG read struct while loading '%s'." msgstr "Napaka pri ustvarjanju bralne strukture za PNG pri nalaganju »%s«." -#: plug-ins/common/file-png.c:624 +#: plug-ins/common/file-png.c:631 #, c-format msgid "Error while reading '%s'. Could not create PNG header info structure." msgstr "" "Napaka pri branju »%s«. Podatkovne strukture flave PNG ni mogoče ustvariti." -#: plug-ins/common/file-png.c:632 +#: plug-ins/common/file-png.c:639 #, c-format msgid "Error while reading '%s'. File corrupted?" msgstr "Napaka pri branju »%s«. Je datoteka poškodovana?" -#: plug-ins/common/file-png.c:887 +#: plug-ins/common/file-png.c:899 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "Neznan barvni model v datoteki PNG »%s«." -#: plug-ins/common/file-png.c:900 plug-ins/file-exr/file-exr.c:260 +#: plug-ins/common/file-png.c:912 plug-ins/file-exr/file-exr.c:260 #, c-format msgid "Could not create new image for '%s': %s" msgstr "Nove slike za »%s« ni mogoče ustvariti: %s" -#: plug-ins/common/file-png.c:968 +#: plug-ins/common/file-png.c:980 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." @@ -4596,19 +4603,19 @@ msgstr "" "Datoteka PNG navaja zamik, ki je povzročil, da je plast vzpostavljena zunaj " "slike." -#: plug-ins/common/file-png.c:1202 +#: plug-ins/common/file-png.c:1231 msgid "Apply PNG Offset" msgstr "Uveljavi odmik PNG" -#: plug-ins/common/file-png.c:1206 +#: plug-ins/common/file-png.c:1235 msgid "Ignore PNG offset" msgstr "Prezri odmik PNG" -#: plug-ins/common/file-png.c:1207 +#: plug-ins/common/file-png.c:1236 msgid "Apply PNG offset to layer" msgstr "Uveljavi odmik PNG na plasti" -#: plug-ins/common/file-png.c:1232 +#: plug-ins/common/file-png.c:1261 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " @@ -4617,19 +4624,19 @@ msgstr "" "Slika PNG, ki jo uvažate, določa odmik %d, %d. Želite uveljaviti ta odmik na " "plasti?" -#: plug-ins/common/file-png.c:1445 +#: plug-ins/common/file-png.c:1475 #, c-format msgid "Error creating PNG write struct while exporting '%s'." msgstr "Napaka pri ustvarjanju pisalne strukture za PNG pri izvažanju »%s«." -#: plug-ins/common/file-png.c:1454 +#: plug-ins/common/file-png.c:1484 #, c-format msgid "Error while exporting '%s'. Could not create PNG header info structure." msgstr "" "Napaka pri izvažanju »%s«. Podatkovne strukture flave PNG ni mogoče " "ustvariti." -#: plug-ins/common/file-png.c:1462 +#: plug-ins/common/file-png.c:1492 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "Napaka pri izvažanju »%s«. Slike ni mogoče izvoziti." @@ -4795,7 +4802,7 @@ msgid "Unsupported maximum value." msgstr "Nepodprta največja vrednost." #: plug-ins/common/file-pnm.c:943 -msgid "PAM: Unsupported inofficial PNM variant." +msgid "PAM: Unsupported unofficial PNM variant." msgstr "PAM: Nepodprta neuradna inačica PNM." #: plug-ins/common/file-pnm.c:947 @@ -5232,44 +5239,35 @@ msgid "Error reading end of selection chunk" msgstr "Napaka pri branju konca kosa izbora" #: plug-ins/common/file-psp.c:2442 -#, fuzzy -#| msgid "Error reading block header" msgid "Error reading extended block chunk header" -msgstr "Napaka pri branju glave bloka" +msgstr "Napaka pri branju glave kosa razširjenega bloka" #: plug-ins/common/file-psp.c:2450 -#, fuzzy -#| msgid "Invalid keyword chunk header" msgid "Invalid extended block chunk header" -msgstr "Neveljaven kos podatkov ključnih besed ustvarjalca" +msgstr "Neveljavna glava kosa razširjenega bloka" #: plug-ins/common/file-psp.c:2461 -#, fuzzy -#| msgid "Invalid selection chunk size" msgid "Invalid extended block chunk size" -msgstr "Neveljavna velikost kosa izbora" +msgstr "Neveljavna velikost kosa razširjenega bloka" #: plug-ins/common/file-psp.c:2482 #, fuzzy -#| msgid "Error reading creator keyword data" msgid "Error reading extended chunk grid data" -msgstr "Napaka pri branju podatkov ključnih besed ustvarjalca" +msgstr "Napaka pri branju podatkov mreže kosov razširjenega bloka?" #: plug-ins/common/file-psp.c:2508 #, fuzzy -#| msgid "Error reading tube data chunk" msgid "Error reading extended chunk guide data" -msgstr "Napaka pri branju kosa podatkov o cevi" +msgstr "" +"Napaka pri branju podatkov vodila razširjenega kosa/kosov razširjenega bloka?" #: plug-ins/common/file-psp.c:2526 msgid "Invalid guide orientation" msgstr "Neveljavna usmerjenost vodila" #: plug-ins/common/file-psp.c:2540 -#, fuzzy -#| msgid "Error reading end of selection chunk" msgid "Error reading extended block chunk" -msgstr "Napaka pri branju konca kosa izbora" +msgstr "Napaka pri branju kosa razširjenega bloka" #: plug-ins/common/file-psp.c:2566 plug-ins/common/file-psp.c:2578 #: plug-ins/common/file-psp.c:2589 @@ -7002,10 +7000,10 @@ msgstr "Ni zadetkov" msgid "Plug-in Browser" msgstr "Brskalnik vstavkov" -#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:605 -#: plug-ins/metadata/metadata-editor.c:641 -#: plug-ins/metadata/metadata-editor.c:648 -#: plug-ins/metadata/metadata-editor.c:655 +#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:609 +#: plug-ins/metadata/metadata-editor.c:645 +#: plug-ins/metadata/metadata-editor.c:652 +#: plug-ins/metadata/metadata-editor.c:659 msgid "Name" msgstr "Ime" @@ -7896,20 +7894,16 @@ msgid "Brightness" msgstr "Svetlost" #: plug-ins/common/van-gogh-lic.c:168 -#, fuzzy -#| msgid "Effect Operator" msgid "Effect O_perator" -msgstr "Operator učinka" +msgstr "Ope_rator učinka" #: plug-ins/common/van-gogh-lic.c:169 msgid "Effect Operator" msgstr "Operator učinka" #: plug-ins/common/van-gogh-lic.c:170 -#, fuzzy -#| msgid "_Derivative" msgid "Derivative" -msgstr "_Izpeljanka" +msgstr "Izpeljanka" #: plug-ins/common/van-gogh-lic.c:171 msgid "Gradient" @@ -7932,16 +7926,12 @@ msgid "With source image" msgstr "s slikovnim virom" #: plug-ins/common/van-gogh-lic.c:186 -#, fuzzy -#| msgid "_Effect image:" msgid "Effect i_mage" -msgstr "Učin_ek na sliki:" +msgstr "Učin_ek na sliki" #: plug-ins/common/van-gogh-lic.c:187 -#, fuzzy -#| msgid "_Effect image:" msgid "Effect image" -msgstr "Učin_ek na sliki:" +msgstr "Učinek na sliki" #: plug-ins/common/van-gogh-lic.c:192 msgid "Fil_ter length" @@ -7952,28 +7942,20 @@ msgid "Filter length" msgstr "Dolžina filtra" #: plug-ins/common/van-gogh-lic.c:198 -#, fuzzy -#| msgid "_Noise magnitude:" msgid "_Noise Magnitude" -msgstr "Obseg _šuma:" +msgstr "Obseg _šuma" #: plug-ins/common/van-gogh-lic.c:199 -#, fuzzy -#| msgid "_Noise magnitude:" msgid "Noise Magnitude" -msgstr "Obseg _šuma:" +msgstr "Obseg šuma" #: plug-ins/common/van-gogh-lic.c:204 -#, fuzzy -#| msgid "In_tegration steps:" msgid "Inte_gration steps" -msgstr "Korakov in_tegriranja:" +msgstr "Korakov integriranja" #: plug-ins/common/van-gogh-lic.c:205 -#, fuzzy -#| msgid "In_tegration steps:" msgid "Integration steps" -msgstr "Korakov in_tegriranja:" +msgstr "Korakov integriranja" #: plug-ins/common/van-gogh-lic.c:210 msgid "Minimum v_alue" @@ -8299,17 +8281,17 @@ msgstr "Poškodovan katalog barv" #: plug-ins/file-bmp/bmp-load.c:242 plug-ins/file-bmp/bmp-load.c:252 #: plug-ins/file-bmp/bmp-load.c:260 plug-ins/file-bmp/bmp-load.c:269 -#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:491 -#: plug-ins/file-bmp/bmp-load.c:516 plug-ins/file-bmp/bmp-load.c:527 -#: plug-ins/file-bmp/bmp-load.c:535 plug-ins/file-bmp/bmp-load.c:544 -#: plug-ins/file-bmp/bmp-load.c:556 +#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:492 +#: plug-ins/file-bmp/bmp-load.c:517 plug-ins/file-bmp/bmp-load.c:528 +#: plug-ins/file-bmp/bmp-load.c:536 plug-ins/file-bmp/bmp-load.c:545 +#: plug-ins/file-bmp/bmp-load.c:557 #, c-format msgid "'%s' is not a valid BMP file" msgstr "»%s« ni veljavna datoteka BMP." #: plug-ins/file-bmp/bmp-load.c:298 plug-ins/file-bmp/bmp-load.c:325 -#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:398 -#: plug-ins/file-bmp/bmp-load.c:429 plug-ins/file-bmp/bmp-load.c:471 +#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:399 +#: plug-ins/file-bmp/bmp-load.c:430 plug-ins/file-bmp/bmp-load.c:472 #, c-format msgid "Error reading BMP file header from '%s'" msgstr "Napaka pri branju glave slikovne datoteke BMP pri »%s«" @@ -8319,16 +8301,16 @@ msgstr "Napaka pri branju glave slikovne datoteke BMP pri »%s«" msgid "Unsupported compression (%u) in BMP file from '%s'" msgstr "Nepodprti način stiskanja (%u) v datoteki BMP iz »%s«" -#: plug-ins/file-bmp/bmp-load.c:673 +#: plug-ins/file-bmp/bmp-load.c:674 msgid "Unrecognized or invalid BMP compression format." msgstr "Neprepoznan ali neveljaven zapis stiskanja BMP." -#: plug-ins/file-bmp/bmp-load.c:720 +#: plug-ins/file-bmp/bmp-load.c:721 msgid "Unsupported or invalid bitdepth." msgstr "Nepodprta vrsta datoteke ali neveljavna bitna globina." -#: plug-ins/file-bmp/bmp-load.c:885 plug-ins/file-bmp/bmp-load.c:928 -#: plug-ins/file-bmp/bmp-load.c:982 +#: plug-ins/file-bmp/bmp-load.c:886 plug-ins/file-bmp/bmp-load.c:929 +#: plug-ins/file-bmp/bmp-load.c:983 msgid "The bitmap ends unexpectedly." msgstr "Bitna slika se nepričakovano zaključi." @@ -8431,410 +8413,422 @@ msgstr "" msgid "BMP format does not support multiple layers." msgstr "Zapis BMP ne podpira več plasti." -#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:187 +#: plug-ins/file-dds/dds.c:131 plug-ins/file-dds/dds.c:169 msgid "DDS image" msgstr "Slika DDS" -#: plug-ins/file-dds/dds.c:152 plug-ins/file-dds/dds.c:153 +#: plug-ins/file-dds/dds.c:134 plug-ins/file-dds/dds.c:135 msgid "Loads files in DDS image format" msgstr "Naloži datoteke v zapisu DDS" -#: plug-ins/file-dds/dds.c:168 +#: plug-ins/file-dds/dds.c:150 msgid "Load _mipmaps" msgstr "Naloži _mipmapse" -#: plug-ins/file-dds/dds.c:169 +#: plug-ins/file-dds/dds.c:151 msgid "Load mipmaps if present" msgstr "Naloži mipmapse, če so prisotni" -#: plug-ins/file-dds/dds.c:174 -msgid "Automatically decode YCoCg/AE_xp images when detected" -msgstr "Samodejno odkodiraj zaznane slike YCoCg/AE_xp" +#: plug-ins/file-dds/dds.c:156 +msgid "Flip image _vertically" +msgstr "Prezrcali sliko _navpično" -#: plug-ins/file-dds/dds.c:175 -msgid "Decode YCoCg/AExp images when detected" -msgstr "Odkodiraj zaznane slike YCoCg/AExp" +#: plug-ins/file-dds/dds.c:157 +msgid "Flip the image vertically on import" +msgstr "Prezrcali sliko navpično ob uvozu" -#: plug-ins/file-dds/dds.c:189 +#: plug-ins/file-dds/dds.c:171 msgid "DDS" msgstr "DDS" -#: plug-ins/file-dds/dds.c:193 plug-ins/file-dds/dds.c:194 +#: plug-ins/file-dds/dds.c:175 plug-ins/file-dds/dds.c:176 msgid "Saves files in DDS image format" msgstr "Shrani datoteke v zapisu DDS" -#: plug-ins/file-dds/dds.c:207 +#: plug-ins/file-dds/dds.c:189 msgid "Compressio_n" msgstr "_Stiskanje" -#: plug-ins/file-dds/dds.c:208 -#, fuzzy +#: plug-ins/file-dds/dds.c:190 msgid "Compression format" msgstr "Vrsta stiskanja" -#: plug-ins/file-dds/dds.c:210 +#: plug-ins/file-dds/dds.c:192 msgid "BC1 / DXT1" msgstr "BC1 / DXT1" -#: plug-ins/file-dds/dds.c:211 +#: plug-ins/file-dds/dds.c:193 msgid "BC2 / DXT3" msgstr "BC2 / DXT3" -#: plug-ins/file-dds/dds.c:212 +#: plug-ins/file-dds/dds.c:194 msgid "BC3 / DXT5" msgstr "BC3 / DXT5" -#: plug-ins/file-dds/dds.c:213 +#: plug-ins/file-dds/dds.c:195 msgid "BC3nm / DXT5nm" msgstr "BC3nm / DXT5nm" -#: plug-ins/file-dds/dds.c:214 +#: plug-ins/file-dds/dds.c:196 msgid "BC4 / ATI1 (3Dc+)" msgstr "BC4 / ATI1 (3Dc+)" -#: plug-ins/file-dds/dds.c:215 +#: plug-ins/file-dds/dds.c:197 msgid "BC5 / ATI2 (3Dc)" msgstr "BC5 / ATI2 (3Dc)" -#: plug-ins/file-dds/dds.c:216 +#: plug-ins/file-dds/dds.c:198 msgid "RXGB (DXT5)" msgstr "RXGB (DXT5)" -#: plug-ins/file-dds/dds.c:217 +#: plug-ins/file-dds/dds.c:199 msgid "Alpha Exponent (DXT5)" msgstr "Eksponent alfe (DXT5)" -#: plug-ins/file-dds/dds.c:218 +#: plug-ins/file-dds/dds.c:200 msgid "YCoCg (DXT5)" msgstr "YCoCg (DXT5)" -#: plug-ins/file-dds/dds.c:219 +#: plug-ins/file-dds/dds.c:201 #, fuzzy -#| msgid "Decode YCoCg (scaled)" msgid "YCoCg scaled (DXT5)" -msgstr "Dekodiraj YCoCg (prilagojeno)" +msgstr "YCoCg, umerjeno/skalirano (DXT5)" -#: plug-ins/file-dds/dds.c:225 +#: plug-ins/file-dds/dds.c:207 msgid "Use percept_ual error metric" msgstr "Uporabi _metriko zaznavne napake" -#: plug-ins/file-dds/dds.c:226 +#: plug-ins/file-dds/dds.c:208 msgid "Use a perceptual error metric during compression" msgstr "Uporabi metriko zaznavne napake med stiskanjem" -#: plug-ins/file-dds/dds.c:232 +#: plug-ins/file-dds/dds.c:214 msgid "Pixel format" msgstr "Oblika slikovnih točk" #. Create the combobox containing the presets -#: plug-ins/file-dds/dds.c:233 plug-ins/file-dds/dds.c:290 -#: plug-ins/file-dds/dds.c:306 plug-ins/file-webp/file-webp-dialog.c:80 +#: plug-ins/file-dds/dds.c:215 plug-ins/file-dds/dds.c:278 +#: plug-ins/file-dds/dds.c:295 plug-ins/file-webp/file-webp-dialog.c:80 #: plug-ins/gradient-flare/gradient-flare.c:2599 msgid "Default" msgstr "privzeta" -#: plug-ins/file-dds/dds.c:234 +#: plug-ins/file-dds/dds.c:216 msgid "RGB8" msgstr "RGB8" -#: plug-ins/file-dds/dds.c:235 +#: plug-ins/file-dds/dds.c:217 msgid "RGBA8" msgstr "RGBA8" -#: plug-ins/file-dds/dds.c:236 +#: plug-ins/file-dds/dds.c:218 msgid "BGR8" msgstr "BGR8" -#: plug-ins/file-dds/dds.c:237 +#: plug-ins/file-dds/dds.c:219 msgid "ABGR8" msgstr "ABGR8" -#: plug-ins/file-dds/dds.c:238 +#: plug-ins/file-dds/dds.c:220 msgid "R5G6B5" msgstr "R5G6B5" -#: plug-ins/file-dds/dds.c:239 +#: plug-ins/file-dds/dds.c:221 msgid "RGBA4" msgstr "RGBA4" -#: plug-ins/file-dds/dds.c:240 +#: plug-ins/file-dds/dds.c:222 msgid "RGB5A1" msgstr "RGB5A1" -#: plug-ins/file-dds/dds.c:241 +#: plug-ins/file-dds/dds.c:223 msgid "RGB10A2" msgstr "RGB10A2" -#: plug-ins/file-dds/dds.c:242 +#: plug-ins/file-dds/dds.c:224 msgid "R3G3B2" msgstr "R3G3B2" -#: plug-ins/file-dds/dds.c:243 +#: plug-ins/file-dds/dds.c:225 msgid "A8" msgstr "A8" -#: plug-ins/file-dds/dds.c:244 +#: plug-ins/file-dds/dds.c:226 msgid "L8" msgstr "L8" -#: plug-ins/file-dds/dds.c:245 +#: plug-ins/file-dds/dds.c:227 msgid "L8A8" msgstr "L8A8" -#: plug-ins/file-dds/dds.c:246 +#: plug-ins/file-dds/dds.c:228 msgid "AEXP" msgstr "AEXP" -#: plug-ins/file-dds/dds.c:247 +#: plug-ins/file-dds/dds.c:229 msgid "YCOCG" msgstr "YCOCG" -#: plug-ins/file-dds/dds.c:261 +#: plug-ins/file-dds/dds.c:235 +msgid "Sav_e type" +msgstr "Shrani v_rsto" + +#: plug-ins/file-dds/dds.c:236 +msgid "How to save the image" +msgstr "Kako shraniti sliko" + +#: plug-ins/file-dds/dds.c:237 +msgid "Selected layer" +msgstr "Izbrana plast" + +#: plug-ins/file-dds/dds.c:238 +msgid "All visible layers" +msgstr "Vse vidne plasti" + +#: plug-ins/file-dds/dds.c:239 +msgid "As cube map" +msgstr "Kot preslikavo kocke" + +#: plug-ins/file-dds/dds.c:240 +msgid "As volume map" +msgstr "Kot preslikavo prostornine" + +#: plug-ins/file-dds/dds.c:241 +msgid "As texture array" +msgstr "Kot polje tekstur" + +#: plug-ins/file-dds/dds.c:247 msgid "Flip image _vertically on export" msgstr "Prezrcali sliko _navpično ob izvozu" -#: plug-ins/file-dds/dds.c:262 +#: plug-ins/file-dds/dds.c:248 msgid "Flip the image vertically on export" msgstr "Prezrcali sliko navpično ob izvozu" -#: plug-ins/file-dds/dds.c:267 -#, fuzzy -#| msgid "_Transparent" +#: plug-ins/file-dds/dds.c:253 msgid "Set _transparent color" -msgstr "_Prosojne" +msgstr "Določi _prosojno barvo" -#: plug-ins/file-dds/dds.c:268 -#, fuzzy -#| msgid "Make background transparent" +#: plug-ins/file-dds/dds.c:254 msgid "Make an indexed color transparent" -msgstr "Naj bo ozadje prosojno" +msgstr "Naredi indeksirano barvo prosojno" -#: plug-ins/file-dds/dds.c:273 +#: plug-ins/file-dds/dds.c:259 msgid "Transparent inde_x" msgstr "Inde_ks prosojnosti" -#: plug-ins/file-dds/dds.c:274 +#: plug-ins/file-dds/dds.c:260 msgid "Index of transparent color or -1 to disable (for indexed images only)." msgstr "" "Indeks prosojne barve ali -1 za onemogočanje (samo za indeksirane slike)." -#: plug-ins/file-dds/dds.c:288 +#: plug-ins/file-dds/dds.c:266 +#, fuzzy +#| msgid "Load _mipmaps" +msgid "_Mipmaps" +msgstr "Naloži _mipmapse" + +#: plug-ins/file-dds/dds.c:267 +#, fuzzy +#| msgid "Load _mipmaps" +msgid "How to handle mipmaps" +msgstr "Naloži _mipmapse" + +#: plug-ins/file-dds/dds.c:268 +msgid "No mipmaps" +msgstr "Brez mipmapsov" + +#: plug-ins/file-dds/dds.c:269 +msgid "Generate mipmaps" +msgstr "Tvori mipmapse" + +#: plug-ins/file-dds/dds.c:270 +msgid "Use existing mipmaps" +msgstr "Uporabi obstoječe mipmapse" + +#: plug-ins/file-dds/dds.c:276 msgid "F_ilter" msgstr "F_ilter" -#: plug-ins/file-dds/dds.c:289 +#: plug-ins/file-dds/dds.c:277 #, fuzzy msgid "Filtering to use when generating mipmaps" msgstr "Filtriranje, ki se uporablja pri ustvarjanju mipmap" -#: plug-ins/file-dds/dds.c:291 +#: plug-ins/file-dds/dds.c:279 msgid "Nearest" msgstr "Najbližje" -#: plug-ins/file-dds/dds.c:292 plug-ins/map-object/map-object-main.c:139 +#: plug-ins/file-dds/dds.c:280 plug-ins/map-object/map-object-main.c:139 msgid "Box" msgstr "kocko" -#: plug-ins/file-dds/dds.c:293 +#: plug-ins/file-dds/dds.c:281 msgid "Triangle" msgstr "Trikotnik" -#: plug-ins/file-dds/dds.c:294 +#: plug-ins/file-dds/dds.c:282 msgid "Quadratic" msgstr "Kvadratno" -#: plug-ins/file-dds/dds.c:295 +#: plug-ins/file-dds/dds.c:283 msgid "B-Spline" msgstr "B-zlepek" -#: plug-ins/file-dds/dds.c:296 +#: plug-ins/file-dds/dds.c:284 msgid "Mitchell" msgstr "Mitchell" -#: plug-ins/file-dds/dds.c:297 +#: plug-ins/file-dds/dds.c:285 +msgid "Catmull-Rom" +msgstr "Catmull-Rom" + +#: plug-ins/file-dds/dds.c:286 msgid "Lanczos" msgstr "Lanczos" -#: plug-ins/file-dds/dds.c:298 +#: plug-ins/file-dds/dds.c:287 msgid "Kaiser" msgstr "Kaiser" -#: plug-ins/file-dds/dds.c:304 +#: plug-ins/file-dds/dds.c:293 msgid "_Wrap mode" msgstr "Način ob_livanja" -#: plug-ins/file-dds/dds.c:305 +#: plug-ins/file-dds/dds.c:294 #, fuzzy msgid "Wrap mode to use when generating mipmaps" msgstr "Način ovijanja za uporabo pri ustvarjanju mipmap" -#: plug-ins/file-dds/dds.c:307 +#: plug-ins/file-dds/dds.c:296 msgid "Mirror" msgstr "Zrcali" -#: plug-ins/file-dds/dds.c:308 +#: plug-ins/file-dds/dds.c:297 msgid "Repeat" msgstr "Ponovi" -#: plug-ins/file-dds/dds.c:309 +#: plug-ins/file-dds/dds.c:298 msgid "Clamp" msgstr "Spni" -#: plug-ins/file-dds/dds.c:315 +#: plug-ins/file-dds/dds.c:304 msgid "Appl_y gamma correction" msgstr "Uporabi poprave_k game" -#: plug-ins/file-dds/dds.c:316 +#: plug-ins/file-dds/dds.c:305 #, fuzzy msgid "Use gamma correct mipmap filtering" msgstr "Uporaba filtriranja pravilne game mipmap" -#: plug-ins/file-dds/dds.c:321 +#: plug-ins/file-dds/dds.c:310 msgid "Use sRG_B colorspace" msgstr "Uporabi barvni prostor sRG_B" -#: plug-ins/file-dds/dds.c:322 +#: plug-ins/file-dds/dds.c:311 msgid "Use sRGB colorspace for gamma correction" msgstr "Uporabi barvni prostor sRGB za korekcijo game" -#: plug-ins/file-dds/dds.c:327 plug-ins/flame/flame.c:205 +#: plug-ins/file-dds/dds.c:316 plug-ins/flame/flame.c:205 msgid "_Gamma" msgstr "_Gama" -#: plug-ins/file-dds/dds.c:328 +#: plug-ins/file-dds/dds.c:317 msgid "Gamma value to use for gamma correction (e.g. 2.2)" msgstr "Vrednost gama za korekcijo game (npr. 2,2)" -#: plug-ins/file-dds/dds.c:333 +#: plug-ins/file-dds/dds.c:322 msgid "Preserve al_pha test coverage" msgstr "Ohrani pokritje preizkusa al_fe" -#: plug-ins/file-dds/dds.c:334 -#, fuzzy -#| msgid "Preserve alpha test converage for alpha channel maps" +#: plug-ins/file-dds/dds.c:323 msgid "Preserve alpha test coverage for alpha channel maps" msgstr "" -"Ohrani pokritje preizkusa alfe za preslikave oz. zemljevide alfa kanala" +"Ohrani pokritje preizkusa alfe za preslikave oz. zemljevide kanala alfa" -#: plug-ins/file-dds/dds.c:340 +#: plug-ins/file-dds/dds.c:329 msgid "Alp_ha test threshold" msgstr "Prag preizkusa _alfe" -#: plug-ins/file-dds/dds.c:341 -#, fuzzy +#: plug-ins/file-dds/dds.c:330 msgid "" "Alpha test threshold value for which alpha test coverage should be preserved" msgstr "" "Vrednost praga preizkusa alfe, za katero je treba ohraniti povprečje " "preizkusa alfe" -#: plug-ins/file-dds/dds.c:357 -msgid "Decode YCoCg" -msgstr "Dekodiraj YCoCg" +#: plug-ins/file-dds/ddsread.c:170 +#, c-format +msgid "Loading: %s" +msgstr "Nalaganje: %s" -#: plug-ins/file-dds/dds.c:361 plug-ins/file-dds/dds.c:362 -msgid "Converts YCoCg encoded pixels to RGB" -msgstr "Pretvori kodirane slikovne točke YCoCg v RGB" +#: plug-ins/file-dds/ddsread.c:263 +#, c-format +msgid "Unsupported uncompressed FourCC type %u" +msgstr "Nepodprti način nestisnjenega FourCC %u" -#: plug-ins/file-dds/dds.c:379 -msgid "Decode YCoCg (scaled)" -msgstr "Dekodiraj YCoCg (prilagojeno)" - -#: plug-ins/file-dds/dds.c:383 plug-ins/file-dds/dds.c:385 -msgid "Converts YCoCg (scaled) encoded pixels to RGB" -msgstr "Pretvori kodirane slikovne točke YCoCg (v merilu) v RGB." - -#: plug-ins/file-dds/dds.c:403 -msgid "Decode Alpha exponent" -msgstr "Dekodiraj eksponent alfa" - -#: plug-ins/file-dds/dds.c:409 plug-ins/file-dds/dds.c:407 -msgid "Converts alpha exponent encoded pixels to RGB" -msgstr "Pretvori kodirane slikovne točke z eksponentom alfe v RGB." - -#: plug-ins/file-dds/ddsread.c:372 +#: plug-ins/file-dds/ddsread.c:578 msgid "Invalid or corrupted DDS header" msgstr "Neveljavna ali okvarjena glava DDS" -#: plug-ins/file-dds/ddsread.c:381 +#: plug-ins/file-dds/ddsread.c:588 msgid "Could not allocate a new image." msgstr "Nove slike ni mogoče alocirati." -#: plug-ins/file-dds/ddsread.c:392 +#: plug-ins/file-dds/ddsread.c:600 msgid "Error reading palette." msgstr "Napaka pri branju palete." -#: plug-ins/file-dds/ddsread.c:675 +#: plug-ins/file-dds/ddsread.c:887 msgid "Invalid DDS format magic number." msgstr "Neveljavno magično število zapisa DDS." -#: plug-ins/file-dds/ddsread.c:754 +#: plug-ins/file-dds/ddsread.c:978 #, c-format msgid "Invalid bpp value for RGB data: %d" msgstr "Neveljavna vrednost bpp za podatke RGB: %d" -#: plug-ins/file-dds/ddsread.c:765 +#: plug-ins/file-dds/ddsread.c:989 #, c-format msgid "Invalid bpp value for luminance data: %d" msgstr "Neveljavna vrednost bpp za podatke svetlosti: %d" -#: plug-ins/file-dds/ddsread.c:816 +#: plug-ins/file-dds/ddsread.c:1041 msgid "Invalid pixel format." msgstr "Neveljavna oblika slikovnih točk." -#: plug-ins/file-dds/ddsread.c:985 +#: plug-ins/file-dds/ddsread.c:1274 #, c-format msgid "Unsupported DXGI format (%d)" msgstr "Nepodprta zapis DXGI (%d)" -#: plug-ins/file-dds/ddsread.c:1156 plug-ins/file-dds/ddsread.c:1203 +#: plug-ins/file-dds/ddsread.c:1430 +#, c-format +msgid "Unsupported value for bytes per pixel: %d" +msgstr "Nepodprta vrednost za bajte na slikovno točko: %d" + +#: plug-ins/file-dds/ddsread.c:1525 plug-ins/file-dds/ddsread.c:1583 +#: plug-ins/file-dds/ddsread.c:1604 msgid "Requested data exceeds size of file.\n" msgstr "Zahtevani podatki presegajo velikost datoteke.\n" -#: plug-ins/file-dds/ddsread.c:1164 plug-ins/file-dds/ddsread.c:1211 +#: plug-ins/file-dds/ddsread.c:1533 plug-ins/file-dds/ddsread.c:1610 msgid "Unexpected EOF.\n" msgstr "Nepričakovan konec datoteke (EOF).\n" -#: plug-ins/file-dds/ddsread.c:1551 +#: plug-ins/file-dds/ddsread.c:2125 msgid "Open DDS" msgstr "Odpri DDS" -#: plug-ins/file-dds/ddswrite.c:2022 +#: plug-ins/file-dds/ddswrite.c:566 +#, c-format +msgid "Saving: %s" +msgstr "Shranjevanje: %s" + +#: plug-ins/file-dds/ddswrite.c:1942 msgid "Mipmap Options" msgstr "Možnosti mipmapov" -#: plug-ins/file-dds/ddswrite.c:2037 -msgid "Selected layer" -msgstr "Izbrana plast" - -#: plug-ins/file-dds/ddswrite.c:2038 -msgid "All visible layers" -msgstr "Vse vidne plasti" - -#: plug-ins/file-dds/ddswrite.c:2039 -msgid "As cube map" -msgstr "Kot preslikavo kocke" - -#: plug-ins/file-dds/ddswrite.c:2040 -msgid "As volume map" -msgstr "Kot preslikavo prostornine" - -#: plug-ins/file-dds/ddswrite.c:2041 -msgid "As texture array" -msgstr "Kot polje tekstur" - -#: plug-ins/file-dds/ddswrite.c:2053 -msgid "No mipmaps" -msgstr "Brez mipmapsov" - -#: plug-ins/file-dds/ddswrite.c:2054 -msgid "Generate mipmaps" -msgstr "Tvori mipmapse" - -#: plug-ins/file-dds/ddswrite.c:2055 -msgid "Use existing mipmaps" -msgstr "Uporabi obstoječe mipmapse" - #: plug-ins/file-exr/file-exr.c:112 msgid "Loads files in the OpenEXR file format" msgstr "Naloži datoteke v zapisu OpenEXR" @@ -10290,7 +10284,7 @@ msgid "Import from TIFF" msgstr "Uvozi iz TIFF" #: plug-ins/file-tiff/file-tiff-load.c:2550 -#: plug-ins/metadata/metadata-editor.c:5533 +#: plug-ins/metadata/metadata-editor.c:5525 msgid "_Import" msgstr "_Uvozi" @@ -11648,7 +11642,7 @@ msgstr "Gama:" msgid "Changes the gamma (brightness) of the selected brush" msgstr "Spremeni gamo (svetlost) izbranega čopiča" -#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1371 +#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1363 msgid "Select:" msgstr "Izberite:" @@ -13082,92 +13076,92 @@ msgstr "Prekliči izbor" msgid "Unselect All" msgstr "Prekliči izbor vseh" -#: plug-ins/imagemap/imap_edit_area_info.c:219 +#: plug-ins/imagemap/imap_edit_area_info.c:252 msgid "Link Type" msgstr "Vrsta povezave" -#: plug-ins/imagemap/imap_edit_area_info.c:228 +#: plug-ins/imagemap/imap_edit_area_info.c:261 msgid "_Web Site" msgstr "_Spletna stran" -#: plug-ins/imagemap/imap_edit_area_info.c:234 +#: plug-ins/imagemap/imap_edit_area_info.c:267 msgid "_FTP Site" msgstr "_FTP-strežnik" -#: plug-ins/imagemap/imap_edit_area_info.c:240 +#: plug-ins/imagemap/imap_edit_area_info.c:273 msgid "_Gopher" msgstr "_Gopher" -#: plug-ins/imagemap/imap_edit_area_info.c:246 +#: plug-ins/imagemap/imap_edit_area_info.c:279 msgid "Ot_her" msgstr "_Drugo" -#: plug-ins/imagemap/imap_edit_area_info.c:252 +#: plug-ins/imagemap/imap_edit_area_info.c:285 msgid "F_ile" msgstr "_Datoteka" -#: plug-ins/imagemap/imap_edit_area_info.c:258 +#: plug-ins/imagemap/imap_edit_area_info.c:291 msgid "WAI_S" msgstr "WAI_S" -#: plug-ins/imagemap/imap_edit_area_info.c:264 +#: plug-ins/imagemap/imap_edit_area_info.c:297 msgid "Tel_net" msgstr "Tel_net" -#: plug-ins/imagemap/imap_edit_area_info.c:270 +#: plug-ins/imagemap/imap_edit_area_info.c:303 msgid "e-_mail" msgstr "e-_pošta" -#: plug-ins/imagemap/imap_edit_area_info.c:276 +#: plug-ins/imagemap/imap_edit_area_info.c:309 msgid "_URL to activate when this area is clicked: (required)" msgstr "_URL preusmeritve ob kliku na to področje: (obvezno)" -#: plug-ins/imagemap/imap_edit_area_info.c:278 +#: plug-ins/imagemap/imap_edit_area_info.c:311 msgid "Select HTML file" msgstr "Izberite datoteko HTML" -#: plug-ins/imagemap/imap_edit_area_info.c:287 +#: plug-ins/imagemap/imap_edit_area_info.c:320 msgid "Relati_ve link" msgstr "Relati_vna povezava" -#: plug-ins/imagemap/imap_edit_area_info.c:293 +#: plug-ins/imagemap/imap_edit_area_info.c:326 msgid "_Target frame name/ID: (optional - used for FRAMES only)" msgstr "" "_Ime/ID ciljnega okvira: (dodatno - uporablja se le za okvirje - FRAMES)" -#: plug-ins/imagemap/imap_edit_area_info.c:296 +#: plug-ins/imagemap/imap_edit_area_info.c:329 msgid "ALT te_xt: (optional)" msgstr "_Besedilo ALT: (neobvezno)" -#: plug-ins/imagemap/imap_edit_area_info.c:299 +#: plug-ins/imagemap/imap_edit_area_info.c:332 msgid "Access _Key: (optional)" msgstr "_Tipka za dostop: (neobvezno)" -#: plug-ins/imagemap/imap_edit_area_info.c:302 +#: plug-ins/imagemap/imap_edit_area_info.c:335 msgid "Ta_b Index: (optional)" msgstr "_Zaporedje ta_bulatork: (neobvezno)" -#: plug-ins/imagemap/imap_edit_area_info.c:305 +#: plug-ins/imagemap/imap_edit_area_info.c:338 msgid "_Link" msgstr "_Povezava" -#: plug-ins/imagemap/imap_edit_area_info.c:339 +#: plug-ins/imagemap/imap_edit_area_info.c:372 msgid "Dimensions" msgstr "Mere" -#: plug-ins/imagemap/imap_edit_area_info.c:343 +#: plug-ins/imagemap/imap_edit_area_info.c:376 msgid "Pre_view" msgstr "Pre_dogled" -#: plug-ins/imagemap/imap_edit_area_info.c:385 +#: plug-ins/imagemap/imap_edit_area_info.c:418 msgid "_JavaScript" msgstr "_JavaScript" -#: plug-ins/imagemap/imap_edit_area_info.c:490 +#: plug-ins/imagemap/imap_edit_area_info.c:523 msgid "Area Settings" msgstr "Nastavitve področja" -#: plug-ins/imagemap/imap_edit_area_info.c:536 +#: plug-ins/imagemap/imap_edit_area_info.c:569 #, c-format msgid "Area #%d Settings" msgstr "Nastavitve področja #%d" @@ -13627,7 +13621,6 @@ msgid "B_ump map image" msgstr "Slika _odtisa za poslikavo" #: plug-ins/lighting/lighting-main.c:137 -#, fuzzy msgid "Bumpmap drawable (set to NULL if disabled)" msgstr "" "Risani predmet poslikave odtisa (nastavljeno na NULL, če je onemogočen)" @@ -13637,7 +13630,6 @@ msgid "Enviro_nment map image" msgstr "Slika odtisa _okolja" #: plug-ins/lighting/lighting-main.c:143 -#, fuzzy msgid "Environmentmap drawable (set to NULL if disabled)" msgstr "" "Risani predmet zemljevida okolja (nastavljeno na NULL, če je onemogočen)" @@ -13852,7 +13844,7 @@ msgstr "Intenzivnost razpršenosti" #: plug-ins/lighting/lighting-main.c:265 #, fuzzy msgid "Material diffuse intensity (Bright)" -msgstr "Razpršena intenzivnost materiala (svetlo)" +msgstr "Intenzivnost razpršene svetlobe materiala (svetlo)" #: plug-ins/lighting/lighting-main.c:290 msgid "Metallic" @@ -14125,7 +14117,6 @@ msgid "Di_ffuse" msgstr "Ra_zpršena" #: plug-ins/map-object/map-object-main.c:288 -#, fuzzy msgid "Material diffuse reflectivity" msgstr "Razpršena odbojnost materiala" @@ -14134,7 +14125,6 @@ msgid "Spec_ular" msgstr "Zrca_lna" #: plug-ins/map-object/map-object-main.c:294 -#, fuzzy msgid "Material specular reflectivity" msgstr "Zrcalna odbojnost materiala" @@ -14362,460 +14352,460 @@ msgstr "Poslikaj s slikami na površini škatle" msgid "Images for the Cap Faces" msgstr "Slike za površino valja" -#: plug-ins/metadata/metadata-editor.c:484 +#: plug-ins/metadata/metadata-editor.c:488 msgid "Document Title" msgstr "Naslov dokumenta" -#: plug-ins/metadata/metadata-editor.c:485 +#: plug-ins/metadata/metadata-editor.c:489 msgid "Author" msgstr "Avtor" -#: plug-ins/metadata/metadata-editor.c:486 +#: plug-ins/metadata/metadata-editor.c:490 msgid "Author Title" msgstr "Naziv avtorja" #. Description tab -#: plug-ins/metadata/metadata-editor.c:487 -#: plug-ins/metadata/metadata-editor.c:1216 +#: plug-ins/metadata/metadata-editor.c:491 +#: plug-ins/metadata/metadata-editor.c:1208 msgid "Description" msgstr "Opis" -#: plug-ins/metadata/metadata-editor.c:488 +#: plug-ins/metadata/metadata-editor.c:492 msgid "Description Writer" msgstr "Pisec opisa" -#: plug-ins/metadata/metadata-editor.c:489 +#: plug-ins/metadata/metadata-editor.c:493 msgid "Rating" msgstr "Ocena" -#: plug-ins/metadata/metadata-editor.c:490 +#: plug-ins/metadata/metadata-editor.c:494 msgid "Keywords" msgstr "Ključne besede" -#: plug-ins/metadata/metadata-editor.c:492 +#: plug-ins/metadata/metadata-editor.c:496 msgid "Copyright Status" msgstr "Stanje avtorske pravice" -#: plug-ins/metadata/metadata-editor.c:493 -#: plug-ins/metadata/metadata-editor.c:622 +#: plug-ins/metadata/metadata-editor.c:497 +#: plug-ins/metadata/metadata-editor.c:626 msgid "Copyright Notice" msgstr "Opozorilo avtorske pravice" -#: plug-ins/metadata/metadata-editor.c:494 +#: plug-ins/metadata/metadata-editor.c:498 msgid "Copyright URL" msgstr "URL avtorske pravice" -#: plug-ins/metadata/metadata-editor.c:500 +#: plug-ins/metadata/metadata-editor.c:504 msgid "Address" msgstr "Naslov" -#: plug-ins/metadata/metadata-editor.c:501 -#: plug-ins/metadata/metadata-editor.c:516 -#: plug-ins/metadata/metadata-editor.c:537 -#: plug-ins/metadata/metadata-editor.c:595 +#: plug-ins/metadata/metadata-editor.c:505 +#: plug-ins/metadata/metadata-editor.c:520 +#: plug-ins/metadata/metadata-editor.c:541 +#: plug-ins/metadata/metadata-editor.c:599 msgid "City" msgstr "Mesto" -#: plug-ins/metadata/metadata-editor.c:502 -#: plug-ins/metadata/metadata-editor.c:517 -#: plug-ins/metadata/metadata-editor.c:538 +#: plug-ins/metadata/metadata-editor.c:506 +#: plug-ins/metadata/metadata-editor.c:521 +#: plug-ins/metadata/metadata-editor.c:542 msgid "State / Province" msgstr "Država / regija" -#: plug-ins/metadata/metadata-editor.c:503 +#: plug-ins/metadata/metadata-editor.c:507 msgid "Postal Code" msgstr "Poštna številka" -#: plug-ins/metadata/metadata-editor.c:504 -#: plug-ins/metadata/metadata-editor.c:518 -#: plug-ins/metadata/metadata-editor.c:539 -#: plug-ins/metadata/metadata-editor.c:597 +#: plug-ins/metadata/metadata-editor.c:508 +#: plug-ins/metadata/metadata-editor.c:522 +#: plug-ins/metadata/metadata-editor.c:543 +#: plug-ins/metadata/metadata-editor.c:601 msgid "Country" msgstr "Država" -#: plug-ins/metadata/metadata-editor.c:506 +#: plug-ins/metadata/metadata-editor.c:510 msgid "Phone(s)" msgstr "Telefon" -#: plug-ins/metadata/metadata-editor.c:507 +#: plug-ins/metadata/metadata-editor.c:511 msgid "E-mail(s)" msgstr "E-naslov(i)" -#: plug-ins/metadata/metadata-editor.c:508 +#: plug-ins/metadata/metadata-editor.c:512 msgid "Website(s)" msgstr "Spletišče" -#: plug-ins/metadata/metadata-editor.c:510 +#: plug-ins/metadata/metadata-editor.c:514 msgid "Creation Date" msgstr "Dan kreiranja" -#: plug-ins/metadata/metadata-editor.c:512 +#: plug-ins/metadata/metadata-editor.c:516 msgid "Intellectual Genre" msgstr "Intelektualni žanr" -#: plug-ins/metadata/metadata-editor.c:513 +#: plug-ins/metadata/metadata-editor.c:517 msgid "IPTC Scene Code" msgstr "Koda prizora IPTC" -#: plug-ins/metadata/metadata-editor.c:515 -#: plug-ins/metadata/metadata-editor.c:536 -#: plug-ins/metadata/metadata-editor.c:594 +#: plug-ins/metadata/metadata-editor.c:519 +#: plug-ins/metadata/metadata-editor.c:540 +#: plug-ins/metadata/metadata-editor.c:598 msgid "Sublocation" msgstr "Podpoložaj" -#: plug-ins/metadata/metadata-editor.c:519 -#: plug-ins/metadata/metadata-editor.c:540 +#: plug-ins/metadata/metadata-editor.c:523 +#: plug-ins/metadata/metadata-editor.c:544 msgid "Country ISO-Code" msgstr "ISO-koda države" -#: plug-ins/metadata/metadata-editor.c:521 +#: plug-ins/metadata/metadata-editor.c:525 msgid "Urgency" msgstr "Nujnost" -#: plug-ins/metadata/metadata-editor.c:522 +#: plug-ins/metadata/metadata-editor.c:526 msgid "Headline" msgstr "Napis" -#: plug-ins/metadata/metadata-editor.c:523 +#: plug-ins/metadata/metadata-editor.c:527 msgid "IPTC Subject Code" msgstr "Koda zadeve IPTC" -#: plug-ins/metadata/metadata-editor.c:525 +#: plug-ins/metadata/metadata-editor.c:529 msgid "Job Identifier" msgstr "Identifikator posla" -#: plug-ins/metadata/metadata-editor.c:526 +#: plug-ins/metadata/metadata-editor.c:530 msgid "Instructions" msgstr "Navodila" -#: plug-ins/metadata/metadata-editor.c:527 +#: plug-ins/metadata/metadata-editor.c:531 msgid "Credit Line" msgstr "Vrstica z zaslugami" -#: plug-ins/metadata/metadata-editor.c:528 -#: plug-ins/metadata/metadata-editor.c:620 +#: plug-ins/metadata/metadata-editor.c:532 +#: plug-ins/metadata/metadata-editor.c:624 msgid "Source" msgstr "Vir" -#: plug-ins/metadata/metadata-editor.c:529 +#: plug-ins/metadata/metadata-editor.c:533 msgid "Usage Terms" msgstr "Pogoji uporabe" -#: plug-ins/metadata/metadata-editor.c:535 +#: plug-ins/metadata/metadata-editor.c:539 msgid "Person Shown" msgstr "Oseba na sliki" -#: plug-ins/metadata/metadata-editor.c:541 -#: plug-ins/metadata/metadata-editor.c:599 +#: plug-ins/metadata/metadata-editor.c:545 +#: plug-ins/metadata/metadata-editor.c:603 msgid "World Region" msgstr "Svetovna regija" -#: plug-ins/metadata/metadata-editor.c:542 +#: plug-ins/metadata/metadata-editor.c:546 msgid "Location Shown" msgstr "Lokacija na sliki" -#: plug-ins/metadata/metadata-editor.c:544 +#: plug-ins/metadata/metadata-editor.c:548 msgid "Featured Organization" msgstr "Izpostavljena organizacija" -#: plug-ins/metadata/metadata-editor.c:546 +#: plug-ins/metadata/metadata-editor.c:550 msgid "Organization Code" msgstr "Identifikator organizacije" -#: plug-ins/metadata/metadata-editor.c:548 +#: plug-ins/metadata/metadata-editor.c:552 msgid "Event" msgstr "Dogodek" -#: plug-ins/metadata/metadata-editor.c:549 +#: plug-ins/metadata/metadata-editor.c:553 msgid "Artwork or Object" msgstr "Likovno delo ali predmet" -#: plug-ins/metadata/metadata-editor.c:552 +#: plug-ins/metadata/metadata-editor.c:556 msgid "Additional Model Info" msgstr "Dodatne informacije modela" -#: plug-ins/metadata/metadata-editor.c:553 +#: plug-ins/metadata/metadata-editor.c:557 msgid "Model Age" msgstr "Starost osebe/modela" -#: plug-ins/metadata/metadata-editor.c:554 +#: plug-ins/metadata/metadata-editor.c:558 msgid "Minor Model Age Disclosure" msgstr "Razkritje starosti mladoletnega modela" -#: plug-ins/metadata/metadata-editor.c:555 +#: plug-ins/metadata/metadata-editor.c:559 msgid "Model Release Status" msgstr "Stanje izdaje modela" -#: plug-ins/metadata/metadata-editor.c:556 -#: plug-ins/metadata/metadata-editor.c:628 +#: plug-ins/metadata/metadata-editor.c:560 +#: plug-ins/metadata/metadata-editor.c:632 msgid "Model Release Identifier" msgstr "Identifikator izdaje modela" -#: plug-ins/metadata/metadata-editor.c:559 +#: plug-ins/metadata/metadata-editor.c:563 msgid "Image Supplier Name" msgstr "Ime dobavitelja slike" -#: plug-ins/metadata/metadata-editor.c:560 +#: plug-ins/metadata/metadata-editor.c:564 msgid "Image Supplier ID" msgstr "ID dobavitelja slike" -#: plug-ins/metadata/metadata-editor.c:561 +#: plug-ins/metadata/metadata-editor.c:565 msgid "Supplier's Image ID" msgstr "ID fotografije dobavitelja" -#: plug-ins/metadata/metadata-editor.c:562 +#: plug-ins/metadata/metadata-editor.c:566 msgid "Registry Entry" msgstr "Vnos registra" -#: plug-ins/metadata/metadata-editor.c:564 +#: plug-ins/metadata/metadata-editor.c:568 msgid "Max. Available Width" msgstr "Največja dovoljena širina" -#: plug-ins/metadata/metadata-editor.c:565 +#: plug-ins/metadata/metadata-editor.c:569 msgid "Max. Available Height" msgstr "Največja dovoljena višina" -#: plug-ins/metadata/metadata-editor.c:566 +#: plug-ins/metadata/metadata-editor.c:570 msgid "Digital Source Type" msgstr "Vrsta digitalnega vira" -#: plug-ins/metadata/metadata-editor.c:568 +#: plug-ins/metadata/metadata-editor.c:572 msgid "Image Creator" msgstr "Ustvarjalec slike" -#: plug-ins/metadata/metadata-editor.c:570 +#: plug-ins/metadata/metadata-editor.c:574 msgid "Copyright Owner" msgstr "Imetnik avtorskih pravic" -#: plug-ins/metadata/metadata-editor.c:572 +#: plug-ins/metadata/metadata-editor.c:576 msgid "Licensor" msgstr "Podeljevalec licence" -#: plug-ins/metadata/metadata-editor.c:574 +#: plug-ins/metadata/metadata-editor.c:578 msgid "Property Release Status" msgstr "Stanje izdaje lastnosti" -#: plug-ins/metadata/metadata-editor.c:575 +#: plug-ins/metadata/metadata-editor.c:579 msgid "Property Release Identifier" msgstr "Identifikator izdaje lastnosti" -#: plug-ins/metadata/metadata-editor.c:596 +#: plug-ins/metadata/metadata-editor.c:600 msgid "Province / State" msgstr "Pokrajina/zv. država" -#: plug-ins/metadata/metadata-editor.c:598 +#: plug-ins/metadata/metadata-editor.c:602 msgid "Country ISO Code" msgstr "Koda ISO države" -#: plug-ins/metadata/metadata-editor.c:611 +#: plug-ins/metadata/metadata-editor.c:615 msgid "Code" msgstr "Koda" -#: plug-ins/metadata/metadata-editor.c:617 +#: plug-ins/metadata/metadata-editor.c:621 msgid "Title" msgstr "Naslov" -#: plug-ins/metadata/metadata-editor.c:618 +#: plug-ins/metadata/metadata-editor.c:622 msgid "Date Created" msgstr "Datum nastanka" -#: plug-ins/metadata/metadata-editor.c:619 +#: plug-ins/metadata/metadata-editor.c:623 msgid "Creator" msgstr "Avtor" -#: plug-ins/metadata/metadata-editor.c:621 +#: plug-ins/metadata/metadata-editor.c:625 msgid "Source Inventory ID" msgstr "Inventarna koda vira" -#: plug-ins/metadata/metadata-editor.c:634 +#: plug-ins/metadata/metadata-editor.c:638 msgid "Organization Identifier" msgstr "Identifikator organizacije" -#: plug-ins/metadata/metadata-editor.c:635 +#: plug-ins/metadata/metadata-editor.c:639 msgid "Item Identifier" msgstr "Identifikator artikla" -#: plug-ins/metadata/metadata-editor.c:642 -#: plug-ins/metadata/metadata-editor.c:649 -#: plug-ins/metadata/metadata-editor.c:656 -#: plug-ins/metadata/metadata-editor.c:668 +#: plug-ins/metadata/metadata-editor.c:646 +#: plug-ins/metadata/metadata-editor.c:653 +#: plug-ins/metadata/metadata-editor.c:660 +#: plug-ins/metadata/metadata-editor.c:672 msgid "Identifier" msgstr "Identifikator" -#: plug-ins/metadata/metadata-editor.c:657 +#: plug-ins/metadata/metadata-editor.c:661 msgid "Phone Number 1" msgstr "Telefonska številka 1" -#: plug-ins/metadata/metadata-editor.c:658 +#: plug-ins/metadata/metadata-editor.c:662 msgid "Phone Type 1" msgstr "Vrsta tel. številke 1" -#: plug-ins/metadata/metadata-editor.c:659 +#: plug-ins/metadata/metadata-editor.c:663 msgid "Phone Number 2" msgstr "Telefonska številka 2" -#: plug-ins/metadata/metadata-editor.c:660 +#: plug-ins/metadata/metadata-editor.c:664 msgid "Phone Type 2" msgstr "Vrsta tel. številke 2" -#: plug-ins/metadata/metadata-editor.c:661 +#: plug-ins/metadata/metadata-editor.c:665 msgid "Email Address" msgstr "E-poštni naslov" -#: plug-ins/metadata/metadata-editor.c:662 +#: plug-ins/metadata/metadata-editor.c:666 msgid "Web Address" msgstr "Spletni naslov" -#: plug-ins/metadata/metadata-editor.c:675 +#: plug-ins/metadata/metadata-editor.c:679 msgid "Category" msgstr "Kategorija" -#: plug-ins/metadata/metadata-editor.c:676 +#: plug-ins/metadata/metadata-editor.c:680 msgid "Supplemental Category" msgstr "" "Dopolnilna\n" "kategorija" -#: plug-ins/metadata/metadata-editor.c:682 +#: plug-ins/metadata/metadata-editor.c:686 msgid "Longitude" msgstr "Zemljepisna dolžina" -#: plug-ins/metadata/metadata-editor.c:683 +#: plug-ins/metadata/metadata-editor.c:687 msgid "Longitude Reference" msgstr "Referenčna zemljepisna dolžina" -#: plug-ins/metadata/metadata-editor.c:684 +#: plug-ins/metadata/metadata-editor.c:688 msgid "Latitude" msgstr "Zemljepisna širina" -#: plug-ins/metadata/metadata-editor.c:685 +#: plug-ins/metadata/metadata-editor.c:689 msgid "Latitude Reference" msgstr "Referenca zemljepisne širine" -#: plug-ins/metadata/metadata-editor.c:686 +#: plug-ins/metadata/metadata-editor.c:690 msgid "Altitude" msgstr "Višina" -#: plug-ins/metadata/metadata-editor.c:688 +#: plug-ins/metadata/metadata-editor.c:692 msgid "Altitude Reference" msgstr "Referenca zemljepisne višine" -#: plug-ins/metadata/metadata-editor.c:694 +#: plug-ins/metadata/metadata-editor.c:698 msgid "Patient" msgstr "Pacient" -#: plug-ins/metadata/metadata-editor.c:695 +#: plug-ins/metadata/metadata-editor.c:699 msgid "Patient ID" msgstr "ID pacienta" -#: plug-ins/metadata/metadata-editor.c:696 +#: plug-ins/metadata/metadata-editor.c:700 msgid "Date of Birth" msgstr "Datum rojstva" -#: plug-ins/metadata/metadata-editor.c:698 +#: plug-ins/metadata/metadata-editor.c:702 msgid "Patient Sex" msgstr "Spol pacient" -#: plug-ins/metadata/metadata-editor.c:700 +#: plug-ins/metadata/metadata-editor.c:704 msgid "Study ID" msgstr "ID študije" -#: plug-ins/metadata/metadata-editor.c:701 +#: plug-ins/metadata/metadata-editor.c:705 msgid "Referring Physician" msgstr "Napotni zdravnik" -#: plug-ins/metadata/metadata-editor.c:702 +#: plug-ins/metadata/metadata-editor.c:706 msgid "Study Date" msgstr "Datum študije" -#: plug-ins/metadata/metadata-editor.c:704 +#: plug-ins/metadata/metadata-editor.c:708 msgid "Study Description" msgstr "Opis študije" -#: plug-ins/metadata/metadata-editor.c:705 +#: plug-ins/metadata/metadata-editor.c:709 msgid "Series Number" msgstr "Serijska številka" -#: plug-ins/metadata/metadata-editor.c:706 +#: plug-ins/metadata/metadata-editor.c:710 msgid "Modality" msgstr "Modaliteta" -#: plug-ins/metadata/metadata-editor.c:707 +#: plug-ins/metadata/metadata-editor.c:711 msgid "Series Date" msgstr "Datum serije" -#: plug-ins/metadata/metadata-editor.c:709 +#: plug-ins/metadata/metadata-editor.c:713 msgid "Series Description" msgstr "Opis serije" -#: plug-ins/metadata/metadata-editor.c:711 +#: plug-ins/metadata/metadata-editor.c:715 msgid "Equipment Institution" msgstr "Oprema ustanove" -#: plug-ins/metadata/metadata-editor.c:712 +#: plug-ins/metadata/metadata-editor.c:716 msgid "Equipment Manufacturer" msgstr "Izdelovalec opreme" -#: plug-ins/metadata/metadata-editor.c:752 +#: plug-ins/metadata/metadata-editor.c:756 msgid "_Edit Metadata" msgstr "Ur_edi metapodatke" -#: plug-ins/metadata/metadata-editor.c:756 +#: plug-ins/metadata/metadata-editor.c:760 msgid "Edit metadata (IPTC, EXIF, XMP)" msgstr "Urejajte metapodatke (IPTC, EXIF, XMP)" -#: plug-ins/metadata/metadata-editor.c:1178 +#: plug-ins/metadata/metadata-editor.c:1170 #, c-format msgid "Metadata Editor: %s" msgstr "Urejevalnik metapodatkov: %s" -#: plug-ins/metadata/metadata-editor.c:1186 +#: plug-ins/metadata/metadata-editor.c:1178 msgid "_Write Metadata" msgstr "Zapi_ši metapodatke" #. IPTC tab -#: plug-ins/metadata/metadata-editor.c:1222 -#: plug-ins/metadata/metadata-viewer.c:401 +#: plug-ins/metadata/metadata-editor.c:1214 +#: plug-ins/metadata/metadata-viewer.c:393 msgid "IPTC" msgstr "IPTC" #. IPTC Extension tab -#: plug-ins/metadata/metadata-editor.c:1228 +#: plug-ins/metadata/metadata-editor.c:1220 msgid "IPTC Extension" msgstr "Razširjeni IPTC" #. Categories tab -#: plug-ins/metadata/metadata-editor.c:1334 +#: plug-ins/metadata/metadata-editor.c:1326 msgid "Categories" msgstr "Kategorije" #. GPS tab -#: plug-ins/metadata/metadata-editor.c:1340 +#: plug-ins/metadata/metadata-editor.c:1332 msgid "GPS" msgstr "GPS" #. DICOM tab -#: plug-ins/metadata/metadata-editor.c:1351 +#: plug-ins/metadata/metadata-editor.c:1343 msgid "DICOM" msgstr "DICOM" -#: plug-ins/metadata/metadata-editor.c:1373 +#: plug-ins/metadata/metadata-editor.c:1365 msgid "Import metadata" msgstr "Uvozi metapodatke" -#: plug-ins/metadata/metadata-editor.c:1375 +#: plug-ins/metadata/metadata-editor.c:1367 msgid "Export metadata" msgstr "Izvozi metapodatke" -#: plug-ins/metadata/metadata-editor.c:1678 +#: plug-ins/metadata/metadata-editor.c:1670 msgid "Choose Date" msgstr "Izberite datum" -#: plug-ins/metadata/metadata-editor.c:1682 +#: plug-ins/metadata/metadata-editor.c:1674 msgid "Set Date" msgstr "Določi datum" -#: plug-ins/metadata/metadata-editor.c:2416 +#: plug-ins/metadata/metadata-editor.c:2408 msgid "" "Enter or edit GPS value here.\n" "Valid values consist of 1, 2 or 3 numbers (degrees, minutes, seconds), see " @@ -14831,7 +14821,7 @@ msgstr "" "ali 10.45\n" "Izbrišite celotno besedilo, da odstranite trenutno vrednost." -#: plug-ins/metadata/metadata-editor.c:2422 +#: plug-ins/metadata/metadata-editor.c:2414 msgid "" "Enter or edit GPS altitude value here.\n" "A valid value consists of one number:\n" @@ -14847,24 +14837,24 @@ msgstr "" "(ft).\n" "Izbrišite celotno besedilo, da odstranite trenutno vrednost." -#: plug-ins/metadata/metadata-editor.c:2556 +#: plug-ins/metadata/metadata-editor.c:2548 msgid "Unrated" msgstr "Neocenjeno" -#: plug-ins/metadata/metadata-editor.c:4666 +#: plug-ins/metadata/metadata-editor.c:4658 #, c-format msgid "Failed to set metadata tag %s: %s" msgstr "Značke metapodatkov %s ni mogoče določiti: %s" -#: plug-ins/metadata/metadata-editor.c:5529 +#: plug-ins/metadata/metadata-editor.c:5521 msgid "Import Metadata File" msgstr "Uvoz datoteko metapodatkov" -#: plug-ins/metadata/metadata-editor.c:5564 +#: plug-ins/metadata/metadata-editor.c:5556 msgid "Export Metadata File" msgstr "Izvozi datoteko metapodatkov" -#: plug-ins/metadata/metadata-editor.c:5568 +#: plug-ins/metadata/metadata-editor.c:5560 msgid "_Export" msgstr "I_zvozi" @@ -15092,53 +15082,53 @@ msgstr "Vzhod" msgid "West" msgstr "Zahod" -#: plug-ins/metadata/metadata-viewer.c:177 +#: plug-ins/metadata/metadata-viewer.c:181 msgid "_View Metadata" msgstr "Po_kaži metapodatke" -#: plug-ins/metadata/metadata-viewer.c:181 +#: plug-ins/metadata/metadata-viewer.c:185 msgid "View metadata (Exif, IPTC, XMP)" msgstr "Preglejte metapodatke (Exif, IPTC, XMP)" -#: plug-ins/metadata/metadata-viewer.c:265 +#: plug-ins/metadata/metadata-viewer.c:257 #, c-format msgid "Metadata Viewer: %s" msgstr "Pregledovalnik metapodatkov: %s" -#: plug-ins/metadata/metadata-viewer.c:308 +#: plug-ins/metadata/metadata-viewer.c:300 msgid "Exif Tag" msgstr "Značka Exif" -#: plug-ins/metadata/metadata-viewer.c:325 +#: plug-ins/metadata/metadata-viewer.c:317 msgid "Exif" msgstr "Exif" -#: plug-ins/metadata/metadata-viewer.c:346 +#: plug-ins/metadata/metadata-viewer.c:338 msgid "XMP Tag" msgstr "Značka XMP" -#: plug-ins/metadata/metadata-viewer.c:363 +#: plug-ins/metadata/metadata-viewer.c:355 msgid "XMP" msgstr "XMP" -#: plug-ins/metadata/metadata-viewer.c:384 +#: plug-ins/metadata/metadata-viewer.c:376 msgid "IPTC Tag" msgstr "Značka IPTC" -#: plug-ins/metadata/metadata-viewer.c:481 +#: plug-ins/metadata/metadata-viewer.c:473 #, c-format msgid "(%lu more character(s))" msgstr "(%lu več znakov)" -#: plug-ins/metadata/metadata-viewer.c:728 +#: plug-ins/metadata/metadata-viewer.c:720 msgid " meter" msgstr "m" -#: plug-ins/metadata/metadata-viewer.c:729 +#: plug-ins/metadata/metadata-viewer.c:721 msgid " feet" msgstr "čevlji" -#: plug-ins/metadata/metadata-viewer.c:897 +#: plug-ins/metadata/metadata-viewer.c:889 #, c-format msgid "(%llu more byte(s))" msgstr "(%llu več bajtov)" diff --git a/po-plug-ins/uk.po b/po-plug-ins/uk.po index 5fdbcc3..22f6e92 100644 --- a/po-plug-ins/uk.po +++ b/po-plug-ins/uk.po @@ -9,8 +9,8 @@ msgid "" msgstr "" "Project-Id-Version: pika-plug-ins\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-10-27 01:18+0000\n" -"PO-Revision-Date: 2023-10-27 21:16+0300\n" +"POT-Creation-Date: 2023-12-01 20:47+0000\n" +"PO-Revision-Date: 2023-12-02 17:31+0200\n" "Last-Translator: Yuri Chornoivan \n" "Language-Team: Ukrainian \n" "Language: uk\n" @@ -43,9 +43,8 @@ msgstr "Потренувати козу у мові Сі" #: plug-ins/common/sphere-designer.c:3185 plug-ins/common/tile.c:218 #: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:243 #: plug-ins/common/warp.c:344 plug-ins/common/wavelet-decompose.c:181 -#: plug-ins/file-dds/dds.c:542 plug-ins/flame/flame.c:299 -#: plug-ins/fractal-explorer/fractal-explorer.c:427 plug-ins/gfig/gfig.c:215 -#: plug-ins/pikaressionist/pika.c:184 +#: plug-ins/flame/flame.c:299 plug-ins/fractal-explorer/fractal-explorer.c:427 +#: plug-ins/gfig/gfig.c:215 plug-ins/pikaressionist/pika.c:184 #: plug-ins/gradient-flare/gradient-flare.c:925 #: plug-ins/ifs-compose/ifs-compose.c:492 plug-ins/imagemap/imap_main.c:264 #: plug-ins/lighting/lighting-main.c:756 @@ -66,9 +65,9 @@ msgstr "Потренувати козу (Сі)" #: plug-ins/common/busy-dialog.c:279 plug-ins/common/cml-explorer.c:1379 #: plug-ins/common/cml-explorer.c:2146 plug-ins/common/cml-explorer.c:2356 #: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1809 -#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1159 -#: plug-ins/common/file-heif.c:2345 plug-ins/common/file-pdf-load.c:686 -#: plug-ins/common/file-pdf-save.c:1046 plug-ins/common/grid.c:786 +#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1188 +#: plug-ins/common/file-heif.c:2378 plug-ins/common/file-pdf-load.c:686 +#: plug-ins/common/file-pdf-save.c:1053 plug-ins/common/grid.c:786 #: plug-ins/common/qbist.c:836 plug-ins/common/qbist.c:878 #: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2292 #: plug-ins/common/sphere-designer.c:2637 plug-ins/common/unit-editor.c:435 @@ -89,10 +88,10 @@ msgstr "Потренувати козу (Сі)" #: plug-ins/ifs-compose/ifs-compose.c:2597 plug-ins/imagemap/imap_browse.c:80 #: plug-ins/imagemap/imap_default_dialog.c:106 plug-ins/imagemap/imap_file.c:73 #: plug-ins/imagemap/imap_file.c:128 plug-ins/lighting/lighting-ui.c:738 -#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1185 -#: plug-ins/metadata/metadata-editor.c:1681 -#: plug-ins/metadata/metadata-editor.c:5532 -#: plug-ins/metadata/metadata-editor.c:5567 +#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1177 +#: plug-ins/metadata/metadata-editor.c:1673 +#: plug-ins/metadata/metadata-editor.c:5524 +#: plug-ins/metadata/metadata-editor.c:5559 msgid "_Cancel" msgstr "_Скасувати" @@ -146,7 +145,7 @@ msgstr "Потренувати козу (Javascript)" #: extensions/goat-exercises/goat-exercise-lua.lua:73 #: extensions/goat-exercises/goat-exercise-py3.py:79 #: plug-ins/common/cml-explorer.c:1380 plug-ins/common/colormap-remap.c:695 -#: plug-ins/common/file-heif.c:2346 plug-ins/common/file-pdf-load.c:687 +#: plug-ins/common/file-heif.c:2379 plug-ins/common/file-pdf-load.c:687 #: plug-ins/common/grid.c:787 plug-ins/common/qbist.c:933 #: plug-ins/common/sphere-designer.c:2638 plug-ins/common/unit-editor.c:266 #: plug-ins/common/warp.c:473 plug-ins/file-exr/file-exr.c:422 @@ -329,7 +328,7 @@ msgstr "Вирівнювання видимих шарів" #. file save type #: plug-ins/common/align-layers.c:740 plug-ins/common/align-layers.c:758 #: plug-ins/common/file-ps.c:3729 plug-ins/common/file-ps.c:3737 -#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:209 +#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:191 #: plug-ins/file-tiff/file-tiff.c:240 #: plug-ins/fractal-explorer/fractal-explorer.c:344 #: plug-ins/fractal-explorer/fractal-explorer.c:354 @@ -539,11 +538,11 @@ msgstr "Швидкість відтворення" #. 2 styles of default frame disposals: cumulative layers and one #. * frame per layer. #. -#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1269 +#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1298 msgid "Cumulative layers (combine)" msgstr "Накладання шарів (об'єднання)" -#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1271 +#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1300 msgid "One frame per layer (replace)" msgstr "Один кадр на шар (заміна)" @@ -627,16 +626,16 @@ msgstr "Вертикально" #: plug-ins/common/decompose.c:645 plug-ins/common/file-cel.c:495 #: plug-ins/common/file-cel.c:500 plug-ins/common/file-dicom.c:751 #: plug-ins/common/file-farbfeld.c:321 plug-ins/common/file-gegl.c:471 -#: plug-ins/common/file-gif-load.c:1117 plug-ins/common/file-iff.c:335 +#: plug-ins/common/file-gif-load.c:1147 plug-ins/common/file-iff.c:345 #: plug-ins/common/file-jp2-load.c:1303 plug-ins/common/file-pcx.c:728 #: plug-ins/common/file-pcx.c:736 plug-ins/common/file-pcx.c:744 -#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:935 +#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:947 #: plug-ins/common/file-pnm.c:868 plug-ins/common/file-qoi.c:320 #: plug-ins/common/file-raw-data.c:1828 plug-ins/common/file-sunras.c:1082 #: plug-ins/common/file-tga.c:1116 plug-ins/common/file-wbmp.c:274 #: plug-ins/common/file-xbm.c:911 plug-ins/common/film.c:844 #: plug-ins/common/smooth-palette.c:302 plug-ins/common/tile.c:399 -#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:281 +#: plug-ins/file-bmp/bmp-load.c:738 plug-ins/file-exr/file-exr.c:281 #: plug-ins/file-faxg3/faxg3.c:578 plug-ins/file-fits/fits.c:700 #: plug-ins/file-jpeg/jpeg-load.c:231 #: plug-ins/file-psd/psd-image-res-load.c:1082 @@ -951,9 +950,9 @@ msgstr "Насиченість" #: plug-ins/common/cml-explorer.c:301 plug-ins/common/cml-explorer.c:309 #: plug-ins/common/decompose.c:204 plug-ins/pikaressionist/orientation.c:148 -#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:317 -#: plug-ins/metadata/metadata-viewer.c:355 -#: plug-ins/metadata/metadata-viewer.c:393 +#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:309 +#: plug-ins/metadata/metadata-viewer.c:347 +#: plug-ins/metadata/metadata-viewer.c:385 msgid "Value" msgstr "Яскравість" @@ -1032,7 +1031,7 @@ msgstr "_Відкрити" #. The Save button #: plug-ins/common/cml-explorer.c:1464 plug-ins/common/cml-explorer.c:2147 #: plug-ins/common/curve-bend.c:1279 plug-ins/common/curve-bend.c:1845 -#: plug-ins/common/file-pdf-save.c:1045 plug-ins/common/qbist.c:879 +#: plug-ins/common/file-pdf-save.c:1052 plug-ins/common/qbist.c:879 #: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2295 #: plug-ins/common/sphere-designer.c:2694 plug-ins/flame/flame.c:624 #: plug-ins/flame/flame.c:1241 @@ -1205,7 +1204,7 @@ msgstr "Графік поточних параметрів" #: plug-ins/common/procedure-browser.c:169 plug-ins/gfig/gfig-dialog.c:355 #: plug-ins/gfig/gfig-dialog.c:1218 plug-ins/gfig/gfig-dialog.c:1363 #: plug-ins/ifs-compose/ifs-compose.c:1214 -#: plug-ins/metadata/metadata-viewer.c:272 +#: plug-ins/metadata/metadata-viewer.c:264 msgid "_Close" msgstr "З_акрити" @@ -1221,7 +1220,7 @@ msgstr "Збереження параметрів CML Explorer" #: plug-ins/common/file-dicom.c:1564 plug-ins/common/file-farbfeld.c:380 #: plug-ins/common/file-mng.c:871 plug-ins/common/file-mng.c:1218 #: plug-ins/common/file-pcx.c:1216 plug-ins/common/file-pdf-save.c:659 -#: plug-ins/common/file-png.c:1488 plug-ins/common/file-raw-data.c:1337 +#: plug-ins/common/file-png.c:1518 plug-ins/common/file-raw-data.c:1337 #: plug-ins/common/file-raw-data.c:1366 plug-ins/common/file-sunras.c:637 #: plug-ins/common/file-tga.c:1237 plug-ins/common/file-xmc.c:1381 #: plug-ins/common/sphere-designer.c:2206 plug-ins/file-bmp/bmp-save.c:341 @@ -1484,7 +1483,7 @@ msgstr "_Redness cr709:" #: plug-ins/common/compose.c:244 plug-ins/common/compose.c:438 #: plug-ins/common/compose.c:501 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2511 +#: plug-ins/common/file-heif.c:2544 msgid "RGB" msgstr "RGB" @@ -1979,10 +1978,10 @@ msgstr "Неможливо виконувати дії з порожнім ви #: plug-ins/common/curve-bend.c:834 plug-ins/common/file-cel.c:350 #: plug-ins/common/file-cel.c:402 plug-ins/common/file-dicom.c:383 -#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:414 +#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:416 #: plug-ins/common/file-iff.c:219 plug-ins/common/file-mng.c:1402 #: plug-ins/common/file-pcx.c:509 plug-ins/common/file-pcx.c:552 -#: plug-ins/common/file-png.c:658 plug-ins/common/file-ps.c:1109 +#: plug-ins/common/file-png.c:665 plug-ins/common/file-ps.c:1109 #: plug-ins/common/file-ps.c:3619 plug-ins/common/file-psp.c:2631 #: plug-ins/common/file-psp.c:2681 plug-ins/common/file-qoi.c:299 #: plug-ins/common/file-raw-data.c:515 plug-ins/common/file-raw-data.c:1665 @@ -1991,7 +1990,7 @@ msgstr "Неможливо виконувати дії з порожнім ви #: plug-ins/common/file-wbmp.c:188 plug-ins/common/file-xbm.c:749 #: plug-ins/common/file-xmc.c:656 plug-ins/common/file-xmc.c:895 #: plug-ins/common/file-xwd.c:492 plug-ins/common/sphere-designer.c:2095 -#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:156 +#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:160 #: plug-ins/file-faxg3/faxg3.c:260 plug-ins/file-fits/fits.c:395 #: plug-ins/file-fli/fli-pika.c:450 plug-ins/file-fli/fli-pika.c:501 #: plug-ins/file-icns/file-icns-load.c:516 @@ -2481,7 +2480,7 @@ msgstr "" "Цей додаток використовує aalib для збереження зображення у відтінках сірого " "у формі ascii-арту у спектрі текстових форматів" -#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:231 +#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:213 msgid "_Format" msgstr "_Формат" @@ -2544,11 +2543,11 @@ msgstr "Кінець файлу або помилка при читанні за #. * Open the file for reading... #. #: plug-ins/common/file-cel.c:393 plug-ins/common/file-dicom.c:375 -#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:406 -#: plug-ins/common/file-heif.c:871 plug-ins/common/file-jp2-load.c:1077 +#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:408 +#: plug-ins/common/file-heif.c:910 plug-ins/common/file-jp2-load.c:1077 #: plug-ins/common/file-pcx.c:501 plug-ins/common/file-pcx.c:544 #: plug-ins/common/file-pdf-load.c:856 plug-ins/common/file-pix.c:393 -#: plug-ins/common/file-png.c:650 plug-ins/common/file-pnm.c:713 +#: plug-ins/common/file-png.c:657 plug-ins/common/file-pnm.c:713 #: plug-ins/common/file-ps.c:1099 plug-ins/common/file-raw-data.c:1657 #: plug-ins/common/file-sunras.c:449 plug-ins/common/file-tga.c:439 #: plug-ins/common/file-wbmp.c:180 plug-ins/common/file-wmf.c:784 @@ -2623,9 +2622,9 @@ msgstr "«%s»: Кінець файлу або помилка при читан #. * Open the file for writing... #. #: plug-ins/common/file-cel.c:845 plug-ins/common/file-farbfeld.c:372 -#: plug-ins/common/file-gif-save.c:912 plug-ins/common/file-html-table.c:359 -#: plug-ins/common/file-jpegxl.c:1376 plug-ins/common/file-pcx.c:1100 -#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1480 +#: plug-ins/common/file-gif-save.c:941 plug-ins/common/file-html-table.c:359 +#: plug-ins/common/file-jpegxl.c:1382 plug-ins/common/file-pcx.c:1100 +#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1510 #: plug-ins/common/file-pnm.c:1634 plug-ins/common/file-ps.c:1321 #: plug-ins/common/file-qoi.c:374 plug-ins/common/file-sunras.c:628 #: plug-ins/common/file-tga.c:1229 plug-ins/common/file-xbm.c:1050 @@ -2883,133 +2882,133 @@ msgstr "Не вдалось відкрити «%s»" msgid "GIF image" msgstr "Зображення GIF" -#: plug-ins/common/file-gif-load.c:421 +#: plug-ins/common/file-gif-load.c:423 msgid "GIF magic code" msgstr "Контрольний код GIF" -#: plug-ins/common/file-gif-load.c:429 +#: plug-ins/common/file-gif-load.c:431 msgid "This is not a GIF file: incorrect magic code" msgstr "Не є файлом GIF: помилковий контрольний код" -#: plug-ins/common/file-gif-load.c:437 +#: plug-ins/common/file-gif-load.c:439 msgid "Incorrect GIF version: not '87a' or '89a'" msgstr "Помилкова версія GIF: не є версією «87a» або «89a»" -#: plug-ins/common/file-gif-load.c:444 +#: plug-ins/common/file-gif-load.c:446 msgid "screen descriptor" msgstr "дескриптор екрана" -#: plug-ins/common/file-gif-load.c:462 +#: plug-ins/common/file-gif-load.c:464 msgid "global colormap" msgstr "загальна мапа кольорів" -#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 +#: plug-ins/common/file-gif-load.c:476 plug-ins/common/file-gif-load.c:1110 msgid "image data" msgstr "дані зображення" -#: plug-ins/common/file-gif-load.c:491 +#: plug-ins/common/file-gif-load.c:493 msgid "extension data" msgstr "дані розширення" -#: plug-ins/common/file-gif-load.c:511 +#: plug-ins/common/file-gif-load.c:513 msgid "frame info" msgstr "відомості щодо кадру" -#: plug-ins/common/file-gif-load.c:524 +#: plug-ins/common/file-gif-load.c:526 msgid "local colormap" msgstr "локальна мапа кольорів" -#: plug-ins/common/file-gif-load.c:569 +#: plug-ins/common/file-gif-load.c:571 plug-ins/common/file-iff.c:361 msgid "" "Non-square pixels. Image might look squashed if Dot for Dot mode is enabled." msgstr "" "Неквадратні точки. Зображення, ймовірно, пошкоджене, якщо увімкнено режим " "«крапка до крапки»." -#: plug-ins/common/file-gif-load.c:606 plug-ins/common/file-gif-load.c:611 +#: plug-ins/common/file-gif-load.c:627 plug-ins/common/file-gif-load.c:632 #, c-format msgid "Error reading %s. %s" msgstr "Помилка під час читання %s. %s" -#: plug-ins/common/file-gif-load.c:607 plug-ins/common/file-gif-load.c:612 -#: plug-ins/common/file-gif-load.c:763 plug-ins/common/file-gif-load.c:771 -#: plug-ins/common/file-gif-load.c:802 plug-ins/common/file-gif-load.c:856 -#: plug-ins/common/file-gif-load.c:946 plug-ins/common/file-gif-load.c:965 -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 -#: plug-ins/common/file-gif-load.c:1215 +#: plug-ins/common/file-gif-load.c:628 plug-ins/common/file-gif-load.c:633 +#: plug-ins/common/file-gif-load.c:793 plug-ins/common/file-gif-load.c:801 +#: plug-ins/common/file-gif-load.c:832 plug-ins/common/file-gif-load.c:886 +#: plug-ins/common/file-gif-load.c:976 plug-ins/common/file-gif-load.c:995 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 +#: plug-ins/common/file-gif-load.c:1245 msgid "Image may be corrupt!" msgstr "Зображення може бути пошкоджено!" -#: plug-ins/common/file-gif-load.c:763 +#: plug-ins/common/file-gif-load.c:793 msgid "Error reading data size" msgstr "Помилка при читанні розміру даних" -#: plug-ins/common/file-gif-load.c:771 +#: plug-ins/common/file-gif-load.c:801 msgid "Error reading data" msgstr "Помилка під час спроби читання даних" -#: plug-ins/common/file-gif-load.c:802 +#: plug-ins/common/file-gif-load.c:832 msgid "Not enough compressed data" msgstr "Недостатньо стиснених даних" -#: plug-ins/common/file-gif-load.c:856 +#: plug-ins/common/file-gif-load.c:886 msgid "Value out of range for code size" msgstr "Значення поза діапазоном розміру коду" -#: plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:975 msgid "Invalid code, expecting end of data marker" msgstr "Некоректний код, мала бути позначка кінця даних" -#: plug-ins/common/file-gif-load.c:965 +#: plug-ins/common/file-gif-load.c:995 msgid "Unexpected extra data" msgstr "Неочікувані зайві дані" -#: plug-ins/common/file-gif-load.c:984 +#: plug-ins/common/file-gif-load.c:1014 msgid "Invalid table entry" msgstr "Некоректний запис таблиці" -#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1014 plug-ins/common/file-gif-load.c:1020 msgid "Image is corrupt!" msgstr "Зображення пошкоджено!" -#: plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1020 msgid "Circular table entry" msgstr "Циклічний запис таблиці" -#: plug-ins/common/file-gif-load.c:1065 +#: plug-ins/common/file-gif-load.c:1095 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 msgid "Invalid frame dimensions" msgstr "Некоректні розмірності кадру" -#: plug-ins/common/file-gif-load.c:1086 +#: plug-ins/common/file-gif-load.c:1116 msgid "compressed image data" msgstr "стиснені дані зображення" -#: plug-ins/common/file-gif-load.c:1119 +#: plug-ins/common/file-gif-load.c:1149 #, c-format msgid "Background (%d%s)" msgstr "Тло (%d%s)" -#: plug-ins/common/file-gif-load.c:1146 +#: plug-ins/common/file-gif-load.c:1176 #, c-format msgid "Opening '%s' (frame %d)" msgstr "Відкривається «%s» (кадр %d)" -#: plug-ins/common/file-gif-load.c:1175 +#: plug-ins/common/file-gif-load.c:1205 #, c-format msgid "Frame %d" msgstr "Кадр %d" -#: plug-ins/common/file-gif-load.c:1177 +#: plug-ins/common/file-gif-load.c:1207 #, c-format msgid "Frame %d (%d%s)" msgstr "Кадр %d (%d%s)" -#: plug-ins/common/file-gif-load.c:1208 +#: plug-ins/common/file-gif-load.c:1238 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " @@ -3018,12 +3017,12 @@ msgstr "" "GIF: Недокументований тип композиції %d. Можливо, анімація не буде " "відтворюватись чи не збережеться коректно." -#: plug-ins/common/file-gif-load.c:1214 +#: plug-ins/common/file-gif-load.c:1244 #, c-format msgid "Unknown composite type %d. %s" msgstr "Невідомий тип композиції %d. %s" -#: plug-ins/common/file-gif-load.c:1257 +#: plug-ins/common/file-gif-load.c:1287 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" @@ -3032,7 +3031,7 @@ msgstr "" "Будь ласка, повідомте про цю ваду за допомогою сторінки https://gitlab.gnome." "org/GNOME/pika/issues" -#: plug-ins/common/file-gif-load.c:1380 +#: plug-ins/common/file-gif-load.c:1410 msgid "Too much compressed data, ignoring extra..." msgstr "Забагато стиснених даних, ігноруємо зайві..." @@ -3143,15 +3142,15 @@ msgstr "_Коментар" msgid "Image comment" msgstr "Коментар до зображення" -#: plug-ins/common/file-gif-save.c:348 +#: plug-ins/common/file-gif-save.c:377 msgid "GIF format does not support multiple layers." msgstr "Для формату GIF не передбачено підтримку декількох шарів." -#: plug-ins/common/file-gif-save.c:553 +#: plug-ins/common/file-gif-save.c:582 msgid "Couldn't simply reduce colors further. Exporting as opaque." msgstr "Неможливе подальше зменшення кольорів. Експортується як непрозоре." -#: plug-ins/common/file-gif-save.c:672 +#: plug-ins/common/file-gif-save.c:701 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are " @@ -3160,7 +3159,7 @@ msgstr "" "Не вдається експортувати «%s». Файл формату GIF не підтримує зображень " "шириною чи висотою більше ніж %d точок." -#: plug-ins/common/file-gif-save.c:798 +#: plug-ins/common/file-gif-save.c:827 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." @@ -3168,20 +3167,20 @@ msgstr "" "Формат GIF підтримує коментарі лише у 7-розрядному ASCII. Коментар не " "збережений." -#: plug-ins/common/file-gif-save.c:885 +#: plug-ins/common/file-gif-save.c:914 msgid "" "Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "" "Не вдається експортувати зображення у формат RGB. Спершу перетворіть його на " "індексоване чи у градації сірого." -#: plug-ins/common/file-gif-save.c:1105 +#: plug-ins/common/file-gif-save.c:1134 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "" "Затримка передбачена для запобігання перевантаження процесора складною " "анімацією." -#: plug-ins/common/file-gif-save.c:1154 +#: plug-ins/common/file-gif-save.c:1183 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." @@ -3189,11 +3188,11 @@ msgstr "" "Зображення, яке ви намагаєтесь експортувати як GIF містить шари, що виходять " "за дійсні межі зображення." -#: plug-ins/common/file-gif-save.c:1160 +#: plug-ins/common/file-gif-save.c:1189 msgid "Cr_op" msgstr "_Обрізати" -#: plug-ins/common/file-gif-save.c:1171 +#: plug-ins/common/file-gif-save.c:1200 msgid "" "The GIF file format does not allow this. You may choose whether to crop all " "of the layers to the image borders, or cancel this export." @@ -3201,19 +3200,19 @@ msgstr "" "Це неприпустимо у форматі GIF. Можна або обрізати всі шари по межі " "зображення, або скасувати це експортування." -#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 +#: plug-ins/common/file-gif-save.c:1290 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "мілісекунд" -#: plug-ins/common/file-gif-save.c:1267 +#: plug-ins/common/file-gif-save.c:1296 msgid "I don't care" msgstr "Неважливо" -#: plug-ins/common/file-gif-save.c:1303 +#: plug-ins/common/file-gif-save.c:1332 msgid "Animated GIF" msgstr "Анімаційний GIF" -#: plug-ins/common/file-gif-save.c:1310 +#: plug-ins/common/file-gif-save.c:1339 msgid "" "You can only export as animation when the image has more than one layer.\n" "The image you are trying to export only has one layer." @@ -3311,15 +3310,15 @@ msgstr "Заголовок програми на С" msgid "Header plug-in does not support multiple layers." msgstr "У додатку заголовків не передбачено підтримки декількох шарів." -#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 +#: plug-ins/common/file-heif.c:204 plug-ins/common/file-heif.c:244 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:197 +#: plug-ins/common/file-heif.c:207 msgid "Loads HEIF images" msgstr "Завантаження зображень HEIF" -#: plug-ins/common/file-heif.c:198 +#: plug-ins/common/file-heif.c:208 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -3327,182 +3326,194 @@ msgstr "" "Завантажити зображення, збережене у форматі HEIF (High Efficiency Image File " "Format). Типові розширення файлів формату HEIF - .heif, .heic." -#: plug-ins/common/file-heif.c:239 +#: plug-ins/common/file-heif.c:249 msgid "Exports HEIF images" msgstr "Експортує зображення HEIF" -#: plug-ins/common/file-heif.c:240 +#: plug-ins/common/file-heif.c:250 msgid "Save image in HEIF format (High Efficiency Image File Format)." msgstr "" "Зберегти зображення у форматі HEIF (High Efficiency Image File Format)." -#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/common/file-heif.c:266 plug-ins/common/file-heif.c:376 #: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "Я_кість" -#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 +#: plug-ins/common/file-heif.c:267 plug-ins/common/file-heif.c:377 msgid "Quality factor (0 = worst, 100 = best)" msgstr "Коефіцієнт якості (0 = найгірша, 100 = найкраща)" -#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: plug-ins/common/file-heif.c:272 plug-ins/common/file-heif.c:382 #: plug-ins/common/file-jpegxl.c:188 plug-ins/file-webp/file-webp.c:178 msgid "L_ossless" msgstr "_Без втрат" -#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-heif.c:273 plug-ins/common/file-heif.c:383 #: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "Стискання без втрати якості" -#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 +#: plug-ins/common/file-heif.c:278 plug-ins/common/file-heif.c:388 msgid "Save color prof_ile" msgstr "Зберегти _профіль кольорів" -#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 +#: plug-ins/common/file-heif.c:279 plug-ins/common/file-heif.c:389 msgid "Save the image's color profile" msgstr "Зберегти колірний профіль зображення" -#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 #: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "_Бітова глибина" -#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: plug-ins/common/file-heif.c:285 plug-ins/common/file-heif.c:395 #: plug-ins/common/file-jpegxl.c:201 msgid "Bit depth of exported image" msgstr "Бітова глибина кольорів експортованого зображення" -#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 -#: plug-ins/common/file-png.c:286 +#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 +#: plug-ins/common/file-png.c:290 msgid "_Pixel format" msgstr "_Формат пікселів" -#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 +#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 msgid "Format of color sub-sampling" msgstr "Формат субдискретизації кольорів" -#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 +#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 msgid "Enco_der speed" msgstr "Швидкість к_одувальника" -#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 +#: plug-ins/common/file-heif.c:298 plug-ins/common/file-heif.c:408 msgid "Tradeoff between speed and compression" msgstr "Компроміс між швидкістю і рівнем стискання" -#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-heif.c:304 plug-ins/common/file-heif.c:414 #: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "Зберегти дані Exi_f" -#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: plug-ins/common/file-heif.c:305 plug-ins/common/file-heif.c:415 #: plug-ins/common/file-jpegxl.c:226 msgid "Toggle saving Exif data" msgstr "Увімкнути або вимкнути збереження даних Exif" -#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-heif.c:310 plug-ins/common/file-heif.c:420 #: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "Зберегти дані _XMP" -#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: plug-ins/common/file-heif.c:311 plug-ins/common/file-heif.c:421 #: plug-ins/common/file-jpegxl.c:232 msgid "Toggle saving XMP data" msgstr "Увімкнути або вимкнути збереження даних XMP" -#: plug-ins/common/file-heif.c:315 +#: plug-ins/common/file-heif.c:325 msgid "Loads AVIF images" msgstr "Завантаження зображень AVIF" -#: plug-ins/common/file-heif.c:316 +#: plug-ins/common/file-heif.c:326 msgid "Load image stored in AV1 Image File Format (AVIF)" msgstr "" "Завантаження зображення, яке збережено у форматі файлів зображень AV1 (AVIF)" -#: plug-ins/common/file-heif.c:348 +#: plug-ins/common/file-heif.c:358 msgid "Exports AVIF images" msgstr "Експортує зображення AVIF" -#: plug-ins/common/file-heif.c:349 +#: plug-ins/common/file-heif.c:359 msgid "Save image in AV1 Image File Format (AVIF)" msgstr "Зберегти зображення у форматі файлів зображень AV1 (AVIF)." -#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 +#: plug-ins/common/file-heif.c:432 +msgid "JPEG 2000 encapsulated in HEIF" +msgstr "JPEG 2000 вбудований до HEIF" + +#: plug-ins/common/file-heif.c:435 +msgid "Loads HEJ2 images" +msgstr "Завантажує зображення HEJ2" + +#: plug-ins/common/file-heif.c:436 +msgid "Load JPEG 2000 image encapsulated in HEIF (HEJ2)" +msgstr "Завантаження зображення JPEG 2000, яке вбудовано до HEIF (HEJ2)" + +#: plug-ins/common/file-heif.c:541 plug-ins/common/file-heif.c:631 msgid "HEIF format does not support multiple layers." msgstr "Для формату HEIF не передбачено підтримку декількох шарів." -#: plug-ins/common/file-heif.c:911 plug-ins/common/file-heif.c:944 -#: plug-ins/common/file-heif.c:985 plug-ins/common/file-heif.c:1051 +#: plug-ins/common/file-heif.c:950 plug-ins/common/file-heif.c:983 +#: plug-ins/common/file-heif.c:1024 plug-ins/common/file-heif.c:1090 #, c-format msgid "Loading HEIF image failed: %s" msgstr "Не вдалось завантажити зображення HEIF: %s" -#: plug-ins/common/file-heif.c:933 +#: plug-ins/common/file-heif.c:972 msgid "Loading HEIF image failed: Input file contains no readable images" msgstr "" "Не вдалось завантажити зображення HEIF: вхідний файл не містить придатних " "для читання зображень" -#: plug-ins/common/file-heif.c:1177 +#: plug-ins/common/file-heif.c:1216 msgid "image content" msgstr "вміст зображення" -#: plug-ins/common/file-heif.c:1529 +#: plug-ins/common/file-heif.c:1562 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "Експортуємо «%s» за допомогою кодувальника %s" -#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 +#: plug-ins/common/file-heif.c:1612 plug-ins/common/file-heif.c:2019 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "Не вдалось закодувати зображення HEIF: %s" -#: plug-ins/common/file-heif.c:2107 +#: plug-ins/common/file-heif.c:2140 #, c-format msgid "Writing HEIF image failed: %s" msgstr "Не вдалось записати зображення HEIF: %s" -#: plug-ins/common/file-heif.c:2196 +#: plug-ins/common/file-heif.c:2229 msgid "primary" msgstr "основне" -#: plug-ins/common/file-heif.c:2341 +#: plug-ins/common/file-heif.c:2374 msgid "Load HEIF Image" msgstr "Завантажити зображення HEIF" -#: plug-ins/common/file-heif.c:2355 +#: plug-ins/common/file-heif.c:2388 msgid "Select Image" msgstr "Виберіть зображення" -#: plug-ins/common/file-heif.c:2512 +#: plug-ins/common/file-heif.c:2545 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2513 +#: plug-ins/common/file-heif.c:2546 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 +#: plug-ins/common/file-heif.c:2554 plug-ins/common/file-jpegxl.c:2028 msgid "8 bit/channel" msgstr "8 біт/канал" -#: plug-ins/common/file-heif.c:2522 +#: plug-ins/common/file-heif.c:2555 msgid "10 bit/channel" msgstr "10 біт/канал" -#: plug-ins/common/file-heif.c:2523 +#: plug-ins/common/file-heif.c:2556 msgid "12 bit/channel" msgstr "12 біт/канал" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2562 msgid "Slow" msgstr "Повільно" -#: plug-ins/common/file-heif.c:2530 +#: plug-ins/common/file-heif.c:2563 msgid "Balanced" msgstr "Збалансовано" -#: plug-ins/common/file-heif.c:2531 +#: plug-ins/common/file-heif.c:2564 msgid "Fast" msgstr "Швидко" @@ -3661,11 +3672,11 @@ msgstr "Amiga IFF" msgid "Load file in the IFF file format" msgstr "Завантажити файл у форматі IFF" -#: plug-ins/common/file-iff.c:252 +#: plug-ins/common/file-iff.c:254 msgid "Invalid or missing ILBM image" msgstr "Некоректне або пропущене зображення ILBM" -#: plug-ins/common/file-iff.c:257 +#: plug-ins/common/file-iff.c:268 msgid "ILBM contains no image data - likely a palette file" msgstr "В ILBM не міститься даних зображення — ймовірно, це файл палітри" @@ -3838,56 +3849,56 @@ msgstr "" "Створити зображення JPEG XL CMYK з використанням профілю кольорів із " "пробником" -#: plug-ins/common/file-jpegxl.c:2008 +#: plug-ins/common/file-jpegxl.c:2014 msgid "lightning (fastest)" msgstr "блискавиця (найшвидше)" -#: plug-ins/common/file-jpegxl.c:2009 +#: plug-ins/common/file-jpegxl.c:2015 msgid "thunder" msgstr "грім" -#: plug-ins/common/file-jpegxl.c:2010 +#: plug-ins/common/file-jpegxl.c:2016 msgid "falcon (faster)" msgstr "сокіл (швидко)" -#: plug-ins/common/file-jpegxl.c:2011 +#: plug-ins/common/file-jpegxl.c:2017 msgid "cheetah" msgstr "гепард" -#: plug-ins/common/file-jpegxl.c:2012 +#: plug-ins/common/file-jpegxl.c:2018 msgid "hare" msgstr "заєць" -#: plug-ins/common/file-jpegxl.c:2013 +#: plug-ins/common/file-jpegxl.c:2019 msgid "wombat" msgstr "вомбат" -#: plug-ins/common/file-jpegxl.c:2014 +#: plug-ins/common/file-jpegxl.c:2020 msgid "squirrel" msgstr "білка" -#: plug-ins/common/file-jpegxl.c:2015 +#: plug-ins/common/file-jpegxl.c:2021 msgid "kitten" msgstr "кошеня" -#: plug-ins/common/file-jpegxl.c:2016 +#: plug-ins/common/file-jpegxl.c:2022 msgid "tortoise (slower)" msgstr "черепаха (повільно)" -#: plug-ins/common/file-jpegxl.c:2023 +#: plug-ins/common/file-jpegxl.c:2029 msgid "16 bit/channel" msgstr "16 біт/канал" -#: plug-ins/common/file-jpegxl.c:2031 +#: plug-ins/common/file-jpegxl.c:2037 msgid "CMYK profile required for export" msgstr "Для експортування потрібен профіль CMYK" -#: plug-ins/common/file-jpegxl.c:2039 plug-ins/file-jpeg/jpeg-save.c:900 +#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:900 #: plug-ins/file-psd/psd-save.c:2459 plug-ins/file-tiff/file-tiff-save.c:1315 msgid "Name of the color profile used for CMYK export." msgstr "Назва профілю кольорів, який використано для експортування CMYK." -#: plug-ins/common/file-jpegxl.c:2058 plug-ins/file-jpeg/jpeg-save.c:911 +#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:911 #: plug-ins/file-psd/psd-save.c:2470 plug-ins/file-tiff/file-tiff-save.c:1327 #, c-format msgid "Profile: %s" @@ -3982,7 +3993,7 @@ msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" msgstr "" "(АНІМОВАНИЙ MNG) Стандартний тип відкидання (0 = поєднання; 1 = заміна)" -#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:252 msgid "Save _background color" msgstr "Зберегти колір _тла" @@ -4006,7 +4017,7 @@ msgstr "З_берегти роздільну здатність" msgid "Write pHYs (image resolution) chunk" msgstr "Записати фрагмент pHYs (роздільна здатність зображення)" -#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:270 msgid "Save creation _time" msgstr "Зберегти час _створення" @@ -4017,7 +4028,7 @@ msgstr "Записати фрагмент tIME (час створення)" #. Inform the user that we couldn't losslessly save the #. * transparency & just use the full palette #. -#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2315 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "" "Не вдається зберегти прозорість, натомість зберігатиметься непрозорість." @@ -4026,7 +4037,7 @@ msgstr "" msgid "MNG Options" msgstr "Параметри MNG" -#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:233 msgid "PNG" msgstr "PNG" @@ -4164,13 +4175,13 @@ msgid "'%s' is not a PCX file" msgstr "«%s»: не є файлом PCX" #: plug-ins/common/file-pcx.c:693 plug-ins/common/file-wbmp.c:263 -#: plug-ins/file-bmp/bmp-load.c:726 plug-ins/file-psd/psd-load.c:548 +#: plug-ins/file-bmp/bmp-load.c:727 plug-ins/file-psd/psd-load.c:548 #, c-format msgid "Unsupported or invalid image width: %d" msgstr "Непідтримувана ширина зображення: %d" #: plug-ins/common/file-pcx.c:699 plug-ins/common/file-wbmp.c:269 -#: plug-ins/file-bmp/bmp-load.c:732 plug-ins/file-psd/psd-load.c:540 +#: plug-ins/file-bmp/bmp-load.c:733 plug-ins/file-psd/psd-load.c:540 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "Непідтримувана висота зображення: %d" @@ -4358,7 +4369,7 @@ msgid "PDF" msgstr "PDF" #: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 -#: plug-ins/common/file-pdf-save.c:1098 +#: plug-ins/common/file-pdf-save.c:1105 msgid "_Fill transparent areas with background color" msgstr "Запов_нити прозорі області кольором тла" @@ -4384,7 +4395,7 @@ msgstr "" "Переконайтесь, що ввели правильну назву файла й вибрана адреса не лише для " "читання! " -#: plug-ins/common/file-pdf-save.c:939 +#: plug-ins/common/file-pdf-save.c:946 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -4396,55 +4407,55 @@ msgstr "" "шрифти, яких не вистачає, до експортування зображення. Якщо ви цього не " "зробите, досягти прийнятних результатів не вдасться." -#: plug-ins/common/file-pdf-save.c:1037 +#: plug-ins/common/file-pdf-save.c:1044 msgid "Save to:" msgstr "Зберегти у:" -#: plug-ins/common/file-pdf-save.c:1041 +#: plug-ins/common/file-pdf-save.c:1048 msgid "Browse..." msgstr "Огляд…" -#: plug-ins/common/file-pdf-save.c:1042 +#: plug-ins/common/file-pdf-save.c:1049 msgid "Multipage PDF export" msgstr "Експортування в PDF з кількома сторінками" -#: plug-ins/common/file-pdf-save.c:1078 +#: plug-ins/common/file-pdf-save.c:1085 msgid "Remove the selected pages" msgstr "Вилучити вибрані сторінки" -#: plug-ins/common/file-pdf-save.c:1088 +#: plug-ins/common/file-pdf-save.c:1095 msgid "Add this image" msgstr "Додати це зображення" -#: plug-ins/common/file-pdf-save.c:1093 +#: plug-ins/common/file-pdf-save.c:1100 msgid "_Omit hidden layers and layers with zero opacity" msgstr "_Пропустити приховані шари і шари без прозорості" -#: plug-ins/common/file-pdf-save.c:1103 +#: plug-ins/common/file-pdf-save.c:1110 msgid "Convert _bitmaps to vector graphics where possible" msgstr "Перетворити _растрові малюнки у векторну графіку, де це можливо " -#: plug-ins/common/file-pdf-save.c:1108 +#: plug-ins/common/file-pdf-save.c:1115 msgid "_Apply layer masks before saving" msgstr "З_астосувати маски шарів перед збереженням" -#: plug-ins/common/file-pdf-save.c:1112 +#: plug-ins/common/file-pdf-save.c:1119 msgid "Keeping the masks will not change the output" msgstr "Утримання маски не вплине на результат" -#: plug-ins/common/file-pdf-save.c:1201 plug-ins/common/file-pdf-save.c:1274 -#: plug-ins/common/file-pdf-save.c:1372 plug-ins/common/file-ps.c:2098 +#: plug-ins/common/file-pdf-save.c:1208 plug-ins/common/file-pdf-save.c:1281 +#: plug-ins/common/file-pdf-save.c:1379 plug-ins/common/file-ps.c:2098 #: plug-ins/file-tiff/file-tiff-load.c:1530 #, c-format msgid "Page %d" msgstr "Сторінка %d" -#: plug-ins/common/file-pdf-save.c:1241 +#: plug-ins/common/file-pdf-save.c:1248 msgid "Error! In order to save the file, at least one image should be added!" msgstr "" "Помилка! Щоб зберегти файл, потрібно додати щонайменше одне зображення!" -#: plug-ins/common/file-pdf-save.c:1419 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1426 plug-ins/print/print-draw-page.c:125 msgid "Cannot handle the size (either width or height) of the image." msgstr "Неможливо опрацювати розмір (ширину чи висоту) зображення." @@ -4469,63 +4480,63 @@ msgstr "" msgid "Invalid Esm Software PIX file" msgstr "Некоректний файл PIX Esm Software" -#: plug-ins/common/file-png.c:183 plug-ins/common/file-png.c:213 +#: plug-ins/common/file-png.c:187 plug-ins/common/file-png.c:217 msgid "PNG image" msgstr "Зображення PNG" -#: plug-ins/common/file-png.c:236 +#: plug-ins/common/file-png.c:240 msgid "_Interlacing (Adam7)" msgstr "_Черезрядковість (Adam7)" -#: plug-ins/common/file-png.c:237 +#: plug-ins/common/file-png.c:241 msgid "Use Adam7 interlacing" msgstr "Застосувати згладжування Adam7" -#: plug-ins/common/file-png.c:242 +#: plug-ins/common/file-png.c:246 msgid "Co_mpression level" msgstr "Рівень _стиснення" -#: plug-ins/common/file-png.c:243 +#: plug-ins/common/file-png.c:247 msgid "Deflate Compression factor (0..9)" msgstr "Параметр стискання deflate (0..9)" -#: plug-ins/common/file-png.c:249 +#: plug-ins/common/file-png.c:253 msgid "Write bKGD chunk (PNG metadata)" msgstr "Записати фрагмент bKGD (метадані PNG)" -#: plug-ins/common/file-png.c:254 +#: plug-ins/common/file-png.c:258 msgid "Save layer o_ffset" msgstr "Зберегти зсув шарів:" -#: plug-ins/common/file-png.c:255 +#: plug-ins/common/file-png.c:259 msgid "Write oFFs chunk (PNG metadata)" msgstr "Записати фрагмент oFFs (метадані PNG)" -#: plug-ins/common/file-png.c:260 +#: plug-ins/common/file-png.c:264 msgid "Save resol_ution" msgstr "Зберегти _роздільну здатність" -#: plug-ins/common/file-png.c:261 +#: plug-ins/common/file-png.c:265 msgid "Write pHYs chunk (PNG metadata)" msgstr "Записати фрагмент pHYs (метадані PNG)" -#: plug-ins/common/file-png.c:267 +#: plug-ins/common/file-png.c:271 msgid "Write tIME chunk (PNG metadata)" msgstr "Записати фрагмент tIME (метадані PNG)" -#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:251 +#: plug-ins/common/file-png.c:276 plug-ins/file-tiff/file-tiff.c:251 msgid "Save color _values from transparent pixels" msgstr "Зберігати значення _кольору прозорих точок" -#: plug-ins/common/file-png.c:273 +#: plug-ins/common/file-png.c:277 msgid "Preserve color of completely transparent pixels" msgstr "Зберігати колір повністю прозорих пікселів" -#: plug-ins/common/file-png.c:278 +#: plug-ins/common/file-png.c:282 msgid "_Optimize for smallest possible palette size" msgstr "_Оптимізувати для найменшого можливого розміру палітри" -#: plug-ins/common/file-png.c:279 +#: plug-ins/common/file-png.c:283 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" @@ -4533,84 +4544,84 @@ msgstr "" "Якщо позначено, зберегти як 1-, 2-, 4- або 8-бітове, залежно від кількості " "використаних кольорів. Якщо не позначено, зберегти як 8-бітове" -#: plug-ins/common/file-png.c:287 +#: plug-ins/common/file-png.c:291 msgid "PNG export format" msgstr "Формат експортування PNG" -#: plug-ins/common/file-png.c:288 plug-ins/common/file-ps.c:3723 +#: plug-ins/common/file-png.c:292 plug-ins/common/file-ps.c:3723 #: plug-ins/file-fits/fits.c:1035 msgid "Automatic" msgstr "Автоматично" -#: plug-ins/common/file-png.c:289 +#: plug-ins/common/file-png.c:293 msgid "8 bpc RGB" msgstr "8 біт/кан RGB" -#: plug-ins/common/file-png.c:290 +#: plug-ins/common/file-png.c:294 msgid "8 bpc GRAY" msgstr "8 біт/кан GRAY" -#: plug-ins/common/file-png.c:291 +#: plug-ins/common/file-png.c:295 msgid "8 bpc RGBA" msgstr "8 біт/кан RGBA" -#: plug-ins/common/file-png.c:292 +#: plug-ins/common/file-png.c:296 msgid "8 bpc GRAYA" msgstr "8 біт/кан GRAYA" -#: plug-ins/common/file-png.c:293 +#: plug-ins/common/file-png.c:297 msgid "16 bpc RGB" msgstr "16 біт/кан RGB" -#: plug-ins/common/file-png.c:294 +#: plug-ins/common/file-png.c:298 msgid "16 bpc GRAY" msgstr "16 біт/кан GRAY" -#: plug-ins/common/file-png.c:295 +#: plug-ins/common/file-png.c:299 msgid "16 bpc RGBA" msgstr "16 біт/кан RGBA" -#: plug-ins/common/file-png.c:296 +#: plug-ins/common/file-png.c:300 msgid "16 bpc GRAYA" msgstr "16 біт/кан GRAYA" -#: plug-ins/common/file-png.c:411 +#: plug-ins/common/file-png.c:415 msgid "PNG format does not support multiple layers." msgstr "Для формату PNG не передбачено підтримку декількох шарів." -#: plug-ins/common/file-png.c:484 +#: plug-ins/common/file-png.c:488 #, c-format msgid "Error loading PNG file: %s\n" msgstr "Помилка при завантаженні файла PNG: «%s»\n" -#: plug-ins/common/file-png.c:615 +#: plug-ins/common/file-png.c:622 #, c-format msgid "Error creating PNG read struct while loading '%s'." msgstr "Помилка створення PNG (читання struct) протягом завантаження «%s»." -#: plug-ins/common/file-png.c:624 +#: plug-ins/common/file-png.c:631 #, c-format msgid "Error while reading '%s'. Could not create PNG header info structure." msgstr "" "Помилка при читанні «%s». Не вдається створити інформаційну структуру " "заголовка PNG." -#: plug-ins/common/file-png.c:632 +#: plug-ins/common/file-png.c:639 #, c-format msgid "Error while reading '%s'. File corrupted?" msgstr "Помилка при читанні «%s». Файл пошкоджений?" -#: plug-ins/common/file-png.c:887 +#: plug-ins/common/file-png.c:899 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "Невідома модель кольорів у PNG файлі «%s»." -#: plug-ins/common/file-png.c:900 plug-ins/file-exr/file-exr.c:260 +#: plug-ins/common/file-png.c:912 plug-ins/file-exr/file-exr.c:260 #, c-format msgid "Could not create new image for '%s': %s" msgstr "Неможливо створити нове зображення для «%s»: %s" -#: plug-ins/common/file-png.c:968 +#: plug-ins/common/file-png.c:980 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." @@ -4618,19 +4629,19 @@ msgstr "" "У файлі формату PNG вказано зсув, який призводить до розташування шару за " "межами зображення." -#: plug-ins/common/file-png.c:1202 +#: plug-ins/common/file-png.c:1231 msgid "Apply PNG Offset" msgstr "Застосувати зміщення PNG" -#: plug-ins/common/file-png.c:1206 +#: plug-ins/common/file-png.c:1235 msgid "Ignore PNG offset" msgstr "Знехтувати зміщення PNG" -#: plug-ins/common/file-png.c:1207 +#: plug-ins/common/file-png.c:1236 msgid "Apply PNG offset to layer" msgstr "Застосувати до шару зміщення PNG" -#: plug-ins/common/file-png.c:1232 +#: plug-ins/common/file-png.c:1261 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " @@ -4639,13 +4650,13 @@ msgstr "" "Зображення формату PNG, яке ви імпортуєте, має зміщення %d, %d. Застосувати " "це зміщення до шару?" -#: plug-ins/common/file-png.c:1445 +#: plug-ins/common/file-png.c:1475 #, c-format msgid "Error creating PNG write struct while exporting '%s'." msgstr "" "Помилка створення PNG (записування struct) під час експортування «%s»." -#: plug-ins/common/file-png.c:1454 +#: plug-ins/common/file-png.c:1484 #, c-format msgid "" "Error while exporting '%s'. Could not create PNG header info structure." @@ -4653,7 +4664,7 @@ msgstr "" "Помилка при експортуванні «%s». Не вдається створити інформаційну структуру " "заголовка PNG." -#: plug-ins/common/file-png.c:1462 +#: plug-ins/common/file-png.c:1492 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "Помилка при експортуванні «%s». Не вдається експортувати зображення." @@ -4827,7 +4838,7 @@ msgid "Unsupported maximum value." msgstr "Не підтримується максимальне значення." #: plug-ins/common/file-pnm.c:943 -msgid "PAM: Unsupported inofficial PNM variant." +msgid "PAM: Unsupported unofficial PNM variant." msgstr "PAM: непідтримуваний неофіційний варіант PNM." #: plug-ins/common/file-pnm.c:947 @@ -7041,10 +7052,10 @@ msgstr "Немає відповідностей" msgid "Plug-in Browser" msgstr "Огляд доповнень" -#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:605 -#: plug-ins/metadata/metadata-editor.c:641 -#: plug-ins/metadata/metadata-editor.c:648 -#: plug-ins/metadata/metadata-editor.c:655 +#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:609 +#: plug-ins/metadata/metadata-editor.c:645 +#: plug-ins/metadata/metadata-editor.c:652 +#: plug-ins/metadata/metadata-editor.c:659 msgid "Name" msgstr "Назва" @@ -7926,7 +7937,6 @@ msgid "Special effects that nobody understands" msgstr "Спеціальні ефекти, сенс яких нікому не відомий" #: plug-ins/common/van-gogh-lic.c:158 -#| msgid "Effect Channel" msgid "E_ffect Channel" msgstr "Канал е_фекту" @@ -7935,12 +7945,10 @@ msgid "Effect Channel" msgstr "Канал ефекту" #: plug-ins/common/van-gogh-lic.c:162 -#| msgid "_Brightness" msgid "Brightness" msgstr "Яскравість" #: plug-ins/common/van-gogh-lic.c:168 -#| msgid "Effect Operator" msgid "Effect O_perator" msgstr "_Оператор ефекту" @@ -7949,17 +7957,14 @@ msgid "Effect Operator" msgstr "Оператор ефекту" #: plug-ins/common/van-gogh-lic.c:170 -#| msgid "_Derivative" msgid "Derivative" msgstr "Похідна" #: plug-ins/common/van-gogh-lic.c:171 -#| msgid "_Gradient" msgid "Gradient" msgstr "Градієнт" #: plug-ins/common/van-gogh-lic.c:177 -#| msgid "Convolve" msgid "Con_volve" msgstr "З_гортання" @@ -7968,72 +7973,58 @@ msgid "Convolve" msgstr "Згортання" #: plug-ins/common/van-gogh-lic.c:179 -#| msgid "_With white noise" msgid "With white noise" msgstr "З білим шумом" #: plug-ins/common/van-gogh-lic.c:180 -#| msgid "W_ith source image" msgid "With source image" msgstr "З початковим зображенням" #: plug-ins/common/van-gogh-lic.c:186 -#| msgid "_Effect image:" msgid "Effect i_mage" msgstr "Зобра_ження _ефекту" #: plug-ins/common/van-gogh-lic.c:187 -#| msgid "_Effect image:" msgid "Effect image" msgstr "Зображення ефекту" #: plug-ins/common/van-gogh-lic.c:192 -#| msgid "_Filter length:" msgid "Fil_ter length" msgstr "Довжина _фільтра" #: plug-ins/common/van-gogh-lic.c:193 -#| msgid "_Filter length:" msgid "Filter length" msgstr "Довжина фільтра" #: plug-ins/common/van-gogh-lic.c:198 -#| msgid "_Noise magnitude:" msgid "_Noise Magnitude" msgstr "Величина _шуму" #: plug-ins/common/van-gogh-lic.c:199 -#| msgid "_Noise magnitude:" msgid "Noise Magnitude" msgstr "Величина шуму" #: plug-ins/common/van-gogh-lic.c:204 -#| msgid "In_tegration steps:" msgid "Inte_gration steps" msgstr "Кроки ін_тегрування" #: plug-ins/common/van-gogh-lic.c:205 -#| msgid "In_tegration steps:" msgid "Integration steps" msgstr "Кроки інтегрування" #: plug-ins/common/van-gogh-lic.c:210 -#| msgid "_Minimum value:" msgid "Minimum v_alue" msgstr "М_інімальне значення" #: plug-ins/common/van-gogh-lic.c:211 -#| msgid "_Minimum value:" msgid "Minimum value" msgstr "Мінімальне значення" #: plug-ins/common/van-gogh-lic.c:216 -#| msgid "M_aximum value:" msgid "Ma_ximum value" msgstr "Ма_ксимальне значення" #: plug-ins/common/van-gogh-lic.c:217 -#| msgid "M_aximum value:" msgid "Maximum value" msgstr "Максимальне значення" @@ -8344,17 +8335,17 @@ msgstr "Неправильна мапа кольорів" #: plug-ins/file-bmp/bmp-load.c:242 plug-ins/file-bmp/bmp-load.c:252 #: plug-ins/file-bmp/bmp-load.c:260 plug-ins/file-bmp/bmp-load.c:269 -#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:491 -#: plug-ins/file-bmp/bmp-load.c:516 plug-ins/file-bmp/bmp-load.c:527 -#: plug-ins/file-bmp/bmp-load.c:535 plug-ins/file-bmp/bmp-load.c:544 -#: plug-ins/file-bmp/bmp-load.c:556 +#: plug-ins/file-bmp/bmp-load.c:284 plug-ins/file-bmp/bmp-load.c:492 +#: plug-ins/file-bmp/bmp-load.c:517 plug-ins/file-bmp/bmp-load.c:528 +#: plug-ins/file-bmp/bmp-load.c:536 plug-ins/file-bmp/bmp-load.c:545 +#: plug-ins/file-bmp/bmp-load.c:557 #, c-format msgid "'%s' is not a valid BMP file" msgstr "«%s» не є правильним файлом BMP" #: plug-ins/file-bmp/bmp-load.c:298 plug-ins/file-bmp/bmp-load.c:325 -#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:398 -#: plug-ins/file-bmp/bmp-load.c:429 plug-ins/file-bmp/bmp-load.c:471 +#: plug-ins/file-bmp/bmp-load.c:357 plug-ins/file-bmp/bmp-load.c:399 +#: plug-ins/file-bmp/bmp-load.c:430 plug-ins/file-bmp/bmp-load.c:472 #, c-format msgid "Error reading BMP file header from '%s'" msgstr "Помилка зчитування заголовку BMP-файлу з «%s»" @@ -8364,16 +8355,16 @@ msgstr "Помилка зчитування заголовку BMP-файлу з msgid "Unsupported compression (%u) in BMP file from '%s'" msgstr "Непідтримуваний метод стиснення (%u) у файл BMP з «%s»" -#: plug-ins/file-bmp/bmp-load.c:673 +#: plug-ins/file-bmp/bmp-load.c:674 msgid "Unrecognized or invalid BMP compression format." msgstr "Нерозпізнаний чи хибний формат BMP." -#: plug-ins/file-bmp/bmp-load.c:720 +#: plug-ins/file-bmp/bmp-load.c:721 msgid "Unsupported or invalid bitdepth." msgstr "Непідтримувана чи некоректна розрядність кольорового представлення." -#: plug-ins/file-bmp/bmp-load.c:885 plug-ins/file-bmp/bmp-load.c:928 -#: plug-ins/file-bmp/bmp-load.c:982 +#: plug-ins/file-bmp/bmp-load.c:886 plug-ins/file-bmp/bmp-load.c:929 +#: plug-ins/file-bmp/bmp-load.c:983 msgid "The bitmap ends unexpectedly." msgstr "Дані зображення несподівано закінчились." @@ -8477,397 +8468,419 @@ msgstr "" msgid "BMP format does not support multiple layers." msgstr "Для формату BMP не передбачено підтримку декількох шарів." -#: plug-ins/file-dds/dds.c:149 plug-ins/file-dds/dds.c:187 +#: plug-ins/file-dds/dds.c:131 plug-ins/file-dds/dds.c:169 msgid "DDS image" msgstr "Зображення DDS" -#: plug-ins/file-dds/dds.c:152 plug-ins/file-dds/dds.c:153 +#: plug-ins/file-dds/dds.c:134 plug-ins/file-dds/dds.c:135 msgid "Loads files in DDS image format" msgstr "Завантажує файли у форматі зображень DDS" -#: plug-ins/file-dds/dds.c:168 +#: plug-ins/file-dds/dds.c:150 msgid "Load _mipmaps" msgstr "З_авантажити MIP-текстури" -#: plug-ins/file-dds/dds.c:169 +#: plug-ins/file-dds/dds.c:151 msgid "Load mipmaps if present" msgstr "Завантажити MIP-текстури, якщо такі є" -#: plug-ins/file-dds/dds.c:174 -msgid "Automatically decode YCoCg/AE_xp images when detected" -msgstr "Автоматично декодувати виявлені зображення YCoCg/AE_xp" +#: plug-ins/file-dds/dds.c:156 +msgid "Flip image _vertically" +msgstr "Віддзеркалити зображення _вертикально" -#: plug-ins/file-dds/dds.c:175 -msgid "Decode YCoCg/AExp images when detected" -msgstr "Декодувати виявлені зображення YCoCg/AExp" +#: plug-ins/file-dds/dds.c:157 +msgid "Flip the image vertically on import" +msgstr "Віддзеркалити зображення вертикально при імпортуванні" -#: plug-ins/file-dds/dds.c:189 +#: plug-ins/file-dds/dds.c:171 msgid "DDS" msgstr "DDS" -#: plug-ins/file-dds/dds.c:193 plug-ins/file-dds/dds.c:194 +#: plug-ins/file-dds/dds.c:175 plug-ins/file-dds/dds.c:176 msgid "Saves files in DDS image format" msgstr "Зберігає файли у форматі зображень DDS" -#: plug-ins/file-dds/dds.c:207 +#: plug-ins/file-dds/dds.c:189 msgid "Compressio_n" msgstr "С_тиснення" -#: plug-ins/file-dds/dds.c:208 +#: plug-ins/file-dds/dds.c:190 msgid "Compression format" msgstr "Формат стиснення" -#: plug-ins/file-dds/dds.c:210 +#: plug-ins/file-dds/dds.c:192 msgid "BC1 / DXT1" msgstr "BC1 / DXT1" -#: plug-ins/file-dds/dds.c:211 +#: plug-ins/file-dds/dds.c:193 msgid "BC2 / DXT3" msgstr "BC2 / DXT3" -#: plug-ins/file-dds/dds.c:212 +#: plug-ins/file-dds/dds.c:194 msgid "BC3 / DXT5" msgstr "BC3 / DXT5" -#: plug-ins/file-dds/dds.c:213 +#: plug-ins/file-dds/dds.c:195 msgid "BC3nm / DXT5nm" msgstr "BC3nm / DXT5nm" -#: plug-ins/file-dds/dds.c:214 +#: plug-ins/file-dds/dds.c:196 msgid "BC4 / ATI1 (3Dc+)" msgstr "BC4 / ATI1 (3Dc+)" -#: plug-ins/file-dds/dds.c:215 +#: plug-ins/file-dds/dds.c:197 msgid "BC5 / ATI2 (3Dc)" msgstr "BC5 / ATI2 (3Dc)" -#: plug-ins/file-dds/dds.c:216 +#: plug-ins/file-dds/dds.c:198 msgid "RXGB (DXT5)" msgstr "RXGB (DXT5)" -#: plug-ins/file-dds/dds.c:217 +#: plug-ins/file-dds/dds.c:199 msgid "Alpha Exponent (DXT5)" msgstr "Альфа-експоненційний (DXT5)" -#: plug-ins/file-dds/dds.c:218 +#: plug-ins/file-dds/dds.c:200 msgid "YCoCg (DXT5)" msgstr "YCoCg (DXT5)" -#: plug-ins/file-dds/dds.c:219 +#: plug-ins/file-dds/dds.c:201 msgid "YCoCg scaled (DXT5)" msgstr "Масштабований YCoCg (DXT5)" -#: plug-ins/file-dds/dds.c:225 +#: plug-ins/file-dds/dds.c:207 msgid "Use percept_ual error metric" msgstr "_Використати нелінійну метрику помилок" -#: plug-ins/file-dds/dds.c:226 +#: plug-ins/file-dds/dds.c:208 msgid "Use a perceptual error metric during compression" msgstr "Використати нелінійну метрику помилок під час стискання" -#: plug-ins/file-dds/dds.c:232 +#: plug-ins/file-dds/dds.c:214 msgid "Pixel format" msgstr "Формат у пікселях" #. Create the combobox containing the presets -#: plug-ins/file-dds/dds.c:233 plug-ins/file-dds/dds.c:290 -#: plug-ins/file-dds/dds.c:306 plug-ins/file-webp/file-webp-dialog.c:80 +#: plug-ins/file-dds/dds.c:215 plug-ins/file-dds/dds.c:278 +#: plug-ins/file-dds/dds.c:295 plug-ins/file-webp/file-webp-dialog.c:80 #: plug-ins/gradient-flare/gradient-flare.c:2599 msgid "Default" msgstr "Типовий" -#: plug-ins/file-dds/dds.c:234 +#: plug-ins/file-dds/dds.c:216 msgid "RGB8" msgstr "RGB8" -#: plug-ins/file-dds/dds.c:235 +#: plug-ins/file-dds/dds.c:217 msgid "RGBA8" msgstr "RGBA8" -#: plug-ins/file-dds/dds.c:236 +#: plug-ins/file-dds/dds.c:218 msgid "BGR8" msgstr "BGR8" -#: plug-ins/file-dds/dds.c:237 +#: plug-ins/file-dds/dds.c:219 msgid "ABGR8" msgstr "ABGR8" -#: plug-ins/file-dds/dds.c:238 +#: plug-ins/file-dds/dds.c:220 msgid "R5G6B5" msgstr "R5G6B5" -#: plug-ins/file-dds/dds.c:239 +#: plug-ins/file-dds/dds.c:221 msgid "RGBA4" msgstr "RGBA4" -#: plug-ins/file-dds/dds.c:240 +#: plug-ins/file-dds/dds.c:222 msgid "RGB5A1" msgstr "RGB5A1" -#: plug-ins/file-dds/dds.c:241 +#: plug-ins/file-dds/dds.c:223 msgid "RGB10A2" msgstr "RGB10A2" -#: plug-ins/file-dds/dds.c:242 +#: plug-ins/file-dds/dds.c:224 msgid "R3G3B2" msgstr "R3G3B2" -#: plug-ins/file-dds/dds.c:243 +#: plug-ins/file-dds/dds.c:225 msgid "A8" msgstr "A8" -#: plug-ins/file-dds/dds.c:244 +#: plug-ins/file-dds/dds.c:226 msgid "L8" msgstr "L8" -#: plug-ins/file-dds/dds.c:245 +#: plug-ins/file-dds/dds.c:227 msgid "L8A8" msgstr "L8A8" -#: plug-ins/file-dds/dds.c:246 +#: plug-ins/file-dds/dds.c:228 msgid "AEXP" msgstr "AEXP" -#: plug-ins/file-dds/dds.c:247 +#: plug-ins/file-dds/dds.c:229 msgid "YCOCG" msgstr "YCOCG" -#: plug-ins/file-dds/dds.c:261 +#: plug-ins/file-dds/dds.c:235 +#| msgid "Source _type" +msgid "Sav_e type" +msgstr "_Тип збереження" + +#: plug-ins/file-dds/dds.c:236 +#| msgid "Reload the image" +msgid "How to save the image" +msgstr "Спосіб збереження зображення" + +#: plug-ins/file-dds/dds.c:237 +msgid "Selected layer" +msgstr "Позначений шар" + +#: plug-ins/file-dds/dds.c:238 +msgid "All visible layers" +msgstr "Всі видимі шари" + +#: plug-ins/file-dds/dds.c:239 +msgid "As cube map" +msgstr "Як кубічні текстури" + +#: plug-ins/file-dds/dds.c:240 +msgid "As volume map" +msgstr "Як об'ємні текстури" + +#: plug-ins/file-dds/dds.c:241 +msgid "As texture array" +msgstr "Як масив текстур" + +#: plug-ins/file-dds/dds.c:247 msgid "Flip image _vertically on export" msgstr "Віддзеркалити зображення _вертикально при експортуванні" -#: plug-ins/file-dds/dds.c:262 +#: plug-ins/file-dds/dds.c:248 msgid "Flip the image vertically on export" msgstr "Віддзеркалити зображення вертикально при експортуванні" -#: plug-ins/file-dds/dds.c:267 +#: plug-ins/file-dds/dds.c:253 msgid "Set _transparent color" msgstr "Встановити колір п_розорого" -#: plug-ins/file-dds/dds.c:268 +#: plug-ins/file-dds/dds.c:254 msgid "Make an indexed color transparent" msgstr "Зробити індексований колір прозорим" -#: plug-ins/file-dds/dds.c:273 +#: plug-ins/file-dds/dds.c:259 msgid "Transparent inde_x" msgstr "І_ндекс прозорого" -#: plug-ins/file-dds/dds.c:274 +#: plug-ins/file-dds/dds.c:260 msgid "Index of transparent color or -1 to disable (for indexed images only)." msgstr "" "Індекс прозорого кольору або -1 для вимикання (лише для індексованих " "зображень)." -#: plug-ins/file-dds/dds.c:288 +#: plug-ins/file-dds/dds.c:266 +#| msgid "_Mipmaps:" +msgid "_Mipmaps" +msgstr "MIP-_текстури" + +#: plug-ins/file-dds/dds.c:267 +#| msgid "Load _mipmaps" +msgid "How to handle mipmaps" +msgstr "Спосіб обробки MIP-текстур" + +#: plug-ins/file-dds/dds.c:268 +msgid "No mipmaps" +msgstr "Без MIP-текстур" + +#: plug-ins/file-dds/dds.c:269 +msgid "Generate mipmaps" +msgstr "Створити MIP-текстури" + +#: plug-ins/file-dds/dds.c:270 +msgid "Use existing mipmaps" +msgstr "Використати наявні MIP-текстури" + +#: plug-ins/file-dds/dds.c:276 msgid "F_ilter" msgstr "_Фільтрувати" -#: plug-ins/file-dds/dds.c:289 +#: plug-ins/file-dds/dds.c:277 msgid "Filtering to use when generating mipmaps" msgstr "Фільтрування при створенні множинних зображень" -#: plug-ins/file-dds/dds.c:291 +#: plug-ins/file-dds/dds.c:279 msgid "Nearest" msgstr "Найближче" -#: plug-ins/file-dds/dds.c:292 plug-ins/map-object/map-object-main.c:139 +#: plug-ins/file-dds/dds.c:280 plug-ins/map-object/map-object-main.c:139 msgid "Box" msgstr "Паралелепіпед" -#: plug-ins/file-dds/dds.c:293 +#: plug-ins/file-dds/dds.c:281 msgid "Triangle" msgstr "Трикутник" -#: plug-ins/file-dds/dds.c:294 +#: plug-ins/file-dds/dds.c:282 msgid "Quadratic" msgstr "Квадратичний" -#: plug-ins/file-dds/dds.c:295 +#: plug-ins/file-dds/dds.c:283 msgid "B-Spline" msgstr "B-сплайн" -#: plug-ins/file-dds/dds.c:296 +#: plug-ins/file-dds/dds.c:284 msgid "Mitchell" msgstr "Мітчелл" -#: plug-ins/file-dds/dds.c:297 +#: plug-ins/file-dds/dds.c:285 +msgid "Catmull-Rom" +msgstr "Кетмула-Рома" + +#: plug-ins/file-dds/dds.c:286 msgid "Lanczos" msgstr "Ланцоша" -#: plug-ins/file-dds/dds.c:298 +#: plug-ins/file-dds/dds.c:287 msgid "Kaiser" msgstr "Кайзер" -#: plug-ins/file-dds/dds.c:304 +#: plug-ins/file-dds/dds.c:293 msgid "_Wrap mode" msgstr "Режим за_гортання" -#: plug-ins/file-dds/dds.c:305 +#: plug-ins/file-dds/dds.c:294 msgid "Wrap mode to use when generating mipmaps" msgstr "Режим загортання при створенні множинних зображень" -#: plug-ins/file-dds/dds.c:307 +#: plug-ins/file-dds/dds.c:296 msgid "Mirror" msgstr "Віддзеркалення" -#: plug-ins/file-dds/dds.c:308 +#: plug-ins/file-dds/dds.c:297 msgid "Repeat" msgstr "Повторення" -#: plug-ins/file-dds/dds.c:309 +#: plug-ins/file-dds/dds.c:298 msgid "Clamp" msgstr "Затискання" -#: plug-ins/file-dds/dds.c:315 +#: plug-ins/file-dds/dds.c:304 msgid "Appl_y gamma correction" msgstr "Зас_тосувати корекцію гами" -#: plug-ins/file-dds/dds.c:316 +#: plug-ins/file-dds/dds.c:305 msgid "Use gamma correct mipmap filtering" msgstr "Гамма-корекція при фільтрування множинного зображення" -#: plug-ins/file-dds/dds.c:321 +#: plug-ins/file-dds/dds.c:310 msgid "Use sRG_B colorspace" msgstr "В_икористати колірний простір sRGB" -#: plug-ins/file-dds/dds.c:322 +#: plug-ins/file-dds/dds.c:311 msgid "Use sRGB colorspace for gamma correction" msgstr "Використати колірний простір sRGB для гамма-корекції" -#: plug-ins/file-dds/dds.c:327 plug-ins/flame/flame.c:205 +#: plug-ins/file-dds/dds.c:316 plug-ins/flame/flame.c:205 msgid "_Gamma" msgstr "Г_ама" -#: plug-ins/file-dds/dds.c:328 -#| msgid "Gamma value to use for gamma correction (i.e. 2.2)" +#: plug-ins/file-dds/dds.c:317 msgid "Gamma value to use for gamma correction (e.g. 2.2)" msgstr "Значення гамми при гамма-корекції (наприклад 2.2)" -#: plug-ins/file-dds/dds.c:333 +#: plug-ins/file-dds/dds.c:322 msgid "Preserve al_pha test coverage" msgstr "Зберег_ти покриття альфа-тесту" -#: plug-ins/file-dds/dds.c:334 -#| msgid "Preserve alpha test converage for alpha channel maps" +#: plug-ins/file-dds/dds.c:323 msgid "Preserve alpha test coverage for alpha channel maps" msgstr "Зберегти покриття альфа-тесту для відображень альфа-каналів" -#: plug-ins/file-dds/dds.c:340 +#: plug-ins/file-dds/dds.c:329 msgid "Alp_ha test threshold" msgstr "Поріг _альфа-тесту" -#: plug-ins/file-dds/dds.c:341 -#| msgid "" -#| "Alpha test threshold value for which alpha test converage should be " -#| "preserved" +#: plug-ins/file-dds/dds.c:330 msgid "" "Alpha test threshold value for which alpha test coverage should be preserved" msgstr "" "Порогове значення альфа-тесту, для якого слід зберігати покриття альфа-тестом" -#: plug-ins/file-dds/dds.c:357 -msgid "Decode YCoCg" -msgstr "Декодувати YCoCg" +#: plug-ins/file-dds/ddsread.c:170 +#, c-format +msgid "Loading: %s" +msgstr "Завантаження: %s" -#: plug-ins/file-dds/dds.c:361 plug-ins/file-dds/dds.c:362 -msgid "Converts YCoCg encoded pixels to RGB" -msgstr "Перетворює кодовані у YCoCg пікселі до RGB" +#: plug-ins/file-dds/ddsread.c:263 +#, c-format +#| msgid "Unsupported uncompressed FOURCC type %u" +msgid "Unsupported uncompressed FourCC type %u" +msgstr "Непідтримуваний розпакований тип FourCC %u" -#: plug-ins/file-dds/dds.c:379 -msgid "Decode YCoCg (scaled)" -msgstr "Декодувати YCoCg (масштабоване)" - -#: plug-ins/file-dds/dds.c:383 plug-ins/file-dds/dds.c:385 -msgid "Converts YCoCg (scaled) encoded pixels to RGB" -msgstr "Перетворює кодовані у YCoCg (масштабованому) пікселі до RGB" - -#: plug-ins/file-dds/dds.c:403 -msgid "Decode Alpha exponent" -msgstr "Декодувати Alpha exponent" - -#: plug-ins/file-dds/dds.c:409 plug-ins/file-dds/dds.c:407 -msgid "Converts alpha exponent encoded pixels to RGB" -msgstr "Перетворює кодовані у альфа-степеневі пікселі до RGB" - -#: plug-ins/file-dds/ddsread.c:373 +#: plug-ins/file-dds/ddsread.c:578 msgid "Invalid or corrupted DDS header" msgstr "Некоректний або пошкоджений заголовок DDS" -#: plug-ins/file-dds/ddsread.c:382 +#: plug-ins/file-dds/ddsread.c:588 msgid "Could not allocate a new image." msgstr "Не вдалося розмістити нове зображення." -#: plug-ins/file-dds/ddsread.c:393 +#: plug-ins/file-dds/ddsread.c:600 msgid "Error reading palette." msgstr "Помилка під час спроби читання палітри." -#: plug-ins/file-dds/ddsread.c:676 +#: plug-ins/file-dds/ddsread.c:887 msgid "Invalid DDS format magic number." msgstr "Некоректна контрольна сума у форматі DOS." -#: plug-ins/file-dds/ddsread.c:755 +#: plug-ins/file-dds/ddsread.c:978 #, c-format msgid "Invalid bpp value for RGB data: %d" msgstr "Некоректне значення бітів на піксель для даних RGB: %d" -#: plug-ins/file-dds/ddsread.c:766 +#: plug-ins/file-dds/ddsread.c:989 #, c-format msgid "Invalid bpp value for luminance data: %d" msgstr "Некоректне значення бітів на піксель для даних освітленості: %d" -#: plug-ins/file-dds/ddsread.c:817 +#: plug-ins/file-dds/ddsread.c:1041 msgid "Invalid pixel format." msgstr "Некоректний піксельний формат." -#: plug-ins/file-dds/ddsread.c:986 +#: plug-ins/file-dds/ddsread.c:1274 #, c-format msgid "Unsupported DXGI format (%d)" msgstr "Непідтримуваний формат DXGI (%d)" -#: plug-ins/file-dds/ddsread.c:1151 plug-ins/file-dds/ddsread.c:1190 +#: plug-ins/file-dds/ddsread.c:1430 +#, c-format +msgid "Unsupported value for bytes per pixel: %d" +msgstr "Непідтримуване значення байтів на піксель: %d" + +#: plug-ins/file-dds/ddsread.c:1525 plug-ins/file-dds/ddsread.c:1583 +#: plug-ins/file-dds/ddsread.c:1604 +msgid "Requested data exceeds size of file.\n" +msgstr "Розмір даних, на які надійшов запит, перевищує розмір файла.\n" + +#: plug-ins/file-dds/ddsread.c:1533 plug-ins/file-dds/ddsread.c:1610 msgid "Unexpected EOF.\n" msgstr "Неочікуваний кінець файла.\n" -#: plug-ins/file-dds/ddsread.c:1530 +#: plug-ins/file-dds/ddsread.c:2125 msgid "Open DDS" msgstr "Відкрити DDS" -#: plug-ins/file-dds/ddswrite.c:2022 +#: plug-ins/file-dds/ddswrite.c:566 +#, c-format +#| msgid "Saving '%s'" +msgid "Saving: %s" +msgstr "Збереження: %s" + +#: plug-ins/file-dds/ddswrite.c:1942 msgid "Mipmap Options" msgstr "Параметри MIP-текстур" -#: plug-ins/file-dds/ddswrite.c:2037 -msgid "Selected layer" -msgstr "Позначений шар" - -#: plug-ins/file-dds/ddswrite.c:2038 -msgid "All visible layers" -msgstr "Всі видимі шари" - -#: plug-ins/file-dds/ddswrite.c:2039 -msgid "As cube map" -msgstr "Як кубічні текстури" - -#: plug-ins/file-dds/ddswrite.c:2040 -msgid "As volume map" -msgstr "Як об'ємні текстури" - -#: plug-ins/file-dds/ddswrite.c:2041 -msgid "As texture array" -msgstr "Як масив текстур" - -#: plug-ins/file-dds/ddswrite.c:2053 -msgid "No mipmaps" -msgstr "Без MIP-текстур" - -#: plug-ins/file-dds/ddswrite.c:2054 -msgid "Generate mipmaps" -msgstr "Створити MIP-текстури" - -#: plug-ins/file-dds/ddswrite.c:2055 -msgid "Use existing mipmaps" -msgstr "Використати наявні MIP-текстури" - #: plug-ins/file-exr/file-exr.c:112 msgid "Loads files in the OpenEXR file format" msgstr "Завантажує файли у форматі OpenEXR" @@ -10348,7 +10361,7 @@ msgid "Import from TIFF" msgstr "Імпорт TIFF" #: plug-ins/file-tiff/file-tiff-load.c:2550 -#: plug-ins/metadata/metadata-editor.c:5533 +#: plug-ins/metadata/metadata-editor.c:5525 msgid "_Import" msgstr "_Імпортувати" @@ -11708,7 +11721,7 @@ msgstr "Гама:" msgid "Changes the gamma (brightness) of the selected brush" msgstr "Змінити гаму (яскравість) вибраного пензля" -#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1371 +#: plug-ins/pikaressionist/brush.c:585 plug-ins/metadata/metadata-editor.c:1363 msgid "Select:" msgstr "Вибір:" @@ -13141,91 +13154,91 @@ msgstr "Зняти вибір" msgid "Unselect All" msgstr "Зняти вибір з усього" -#: plug-ins/imagemap/imap_edit_area_info.c:219 +#: plug-ins/imagemap/imap_edit_area_info.c:252 msgid "Link Type" msgstr "Тип посилання" -#: plug-ins/imagemap/imap_edit_area_info.c:228 +#: plug-ins/imagemap/imap_edit_area_info.c:261 msgid "_Web Site" msgstr "_Веб-сторінка" -#: plug-ins/imagemap/imap_edit_area_info.c:234 +#: plug-ins/imagemap/imap_edit_area_info.c:267 msgid "_FTP Site" msgstr "_FTP-сайт" -#: plug-ins/imagemap/imap_edit_area_info.c:240 +#: plug-ins/imagemap/imap_edit_area_info.c:273 msgid "_Gopher" msgstr "_Gopher" -#: plug-ins/imagemap/imap_edit_area_info.c:246 +#: plug-ins/imagemap/imap_edit_area_info.c:279 msgid "Ot_her" msgstr "_Інше" -#: plug-ins/imagemap/imap_edit_area_info.c:252 +#: plug-ins/imagemap/imap_edit_area_info.c:285 msgid "F_ile" msgstr "_Файл" -#: plug-ins/imagemap/imap_edit_area_info.c:258 +#: plug-ins/imagemap/imap_edit_area_info.c:291 msgid "WAI_S" msgstr "WAI_S" -#: plug-ins/imagemap/imap_edit_area_info.c:264 +#: plug-ins/imagemap/imap_edit_area_info.c:297 msgid "Tel_net" msgstr "Tel_net" -#: plug-ins/imagemap/imap_edit_area_info.c:270 +#: plug-ins/imagemap/imap_edit_area_info.c:303 msgid "e-_mail" msgstr "_ел.адреса" -#: plug-ins/imagemap/imap_edit_area_info.c:276 +#: plug-ins/imagemap/imap_edit_area_info.c:309 msgid "_URL to activate when this area is clicked: (required)" msgstr "_URL, що активізується при клацанні на цій ділянці: (обов'язково)" -#: plug-ins/imagemap/imap_edit_area_info.c:278 +#: plug-ins/imagemap/imap_edit_area_info.c:311 msgid "Select HTML file" msgstr "Виберіть HTML-файл" -#: plug-ins/imagemap/imap_edit_area_info.c:287 +#: plug-ins/imagemap/imap_edit_area_info.c:320 msgid "Relati_ve link" msgstr "Від_носне посилання" -#: plug-ins/imagemap/imap_edit_area_info.c:293 +#: plug-ins/imagemap/imap_edit_area_info.c:326 msgid "_Target frame name/ID: (optional - used for FRAMES only)" msgstr "Назва/Ід _цільового кадру: (необов'язково - лише для кадрів)" -#: plug-ins/imagemap/imap_edit_area_info.c:296 +#: plug-ins/imagemap/imap_edit_area_info.c:329 msgid "ALT te_xt: (optional)" msgstr "_Текст ALT: (необов'язково)" -#: plug-ins/imagemap/imap_edit_area_info.c:299 +#: plug-ins/imagemap/imap_edit_area_info.c:332 msgid "Access _Key: (optional)" msgstr "К_люч доступу: (необов'язковий)" -#: plug-ins/imagemap/imap_edit_area_info.c:302 +#: plug-ins/imagemap/imap_edit_area_info.c:335 msgid "Ta_b Index: (optional)" msgstr "_Індекс вкладки: (необов'язковий)" -#: plug-ins/imagemap/imap_edit_area_info.c:305 +#: plug-ins/imagemap/imap_edit_area_info.c:338 msgid "_Link" msgstr "По_силання" -#: plug-ins/imagemap/imap_edit_area_info.c:339 +#: plug-ins/imagemap/imap_edit_area_info.c:372 msgid "Dimensions" msgstr "Розміри" -#: plug-ins/imagemap/imap_edit_area_info.c:343 +#: plug-ins/imagemap/imap_edit_area_info.c:376 msgid "Pre_view" msgstr "_Перегляд" -#: plug-ins/imagemap/imap_edit_area_info.c:385 +#: plug-ins/imagemap/imap_edit_area_info.c:418 msgid "_JavaScript" msgstr "_JavaScript" -#: plug-ins/imagemap/imap_edit_area_info.c:490 +#: plug-ins/imagemap/imap_edit_area_info.c:523 msgid "Area Settings" msgstr "Параметри області" -#: plug-ins/imagemap/imap_edit_area_info.c:536 +#: plug-ins/imagemap/imap_edit_area_info.c:569 #, c-format msgid "Area #%d Settings" msgstr "Параметри області #%d" @@ -14406,458 +14419,458 @@ msgstr "Спроектувати на площину паралелепіпед msgid "Images for the Cap Faces" msgstr "Зображення для основного циліндра" -#: plug-ins/metadata/metadata-editor.c:484 +#: plug-ins/metadata/metadata-editor.c:488 msgid "Document Title" msgstr "Назва документа" -#: plug-ins/metadata/metadata-editor.c:485 +#: plug-ins/metadata/metadata-editor.c:489 msgid "Author" msgstr "Автор" -#: plug-ins/metadata/metadata-editor.c:486 +#: plug-ins/metadata/metadata-editor.c:490 msgid "Author Title" msgstr "Авторська назва" #. Description tab -#: plug-ins/metadata/metadata-editor.c:487 -#: plug-ins/metadata/metadata-editor.c:1216 +#: plug-ins/metadata/metadata-editor.c:491 +#: plug-ins/metadata/metadata-editor.c:1208 msgid "Description" msgstr "Опис" -#: plug-ins/metadata/metadata-editor.c:488 +#: plug-ins/metadata/metadata-editor.c:492 msgid "Description Writer" msgstr "Автор опису" -#: plug-ins/metadata/metadata-editor.c:489 +#: plug-ins/metadata/metadata-editor.c:493 msgid "Rating" msgstr "Рейтинг" -#: plug-ins/metadata/metadata-editor.c:490 +#: plug-ins/metadata/metadata-editor.c:494 msgid "Keywords" msgstr "Ключові слова" -#: plug-ins/metadata/metadata-editor.c:492 +#: plug-ins/metadata/metadata-editor.c:496 msgid "Copyright Status" msgstr "Авторські права" -#: plug-ins/metadata/metadata-editor.c:493 -#: plug-ins/metadata/metadata-editor.c:622 +#: plug-ins/metadata/metadata-editor.c:497 +#: plug-ins/metadata/metadata-editor.c:626 msgid "Copyright Notice" msgstr "Зауваження щодо авторських прав" -#: plug-ins/metadata/metadata-editor.c:494 +#: plug-ins/metadata/metadata-editor.c:498 msgid "Copyright URL" msgstr "URL авторських прав" -#: plug-ins/metadata/metadata-editor.c:500 +#: plug-ins/metadata/metadata-editor.c:504 msgid "Address" msgstr "Адреса" -#: plug-ins/metadata/metadata-editor.c:501 -#: plug-ins/metadata/metadata-editor.c:516 -#: plug-ins/metadata/metadata-editor.c:537 -#: plug-ins/metadata/metadata-editor.c:595 +#: plug-ins/metadata/metadata-editor.c:505 +#: plug-ins/metadata/metadata-editor.c:520 +#: plug-ins/metadata/metadata-editor.c:541 +#: plug-ins/metadata/metadata-editor.c:599 msgid "City" msgstr "Місто" -#: plug-ins/metadata/metadata-editor.c:502 -#: plug-ins/metadata/metadata-editor.c:517 -#: plug-ins/metadata/metadata-editor.c:538 +#: plug-ins/metadata/metadata-editor.c:506 +#: plug-ins/metadata/metadata-editor.c:521 +#: plug-ins/metadata/metadata-editor.c:542 msgid "State / Province" msgstr "Штат / провінція" -#: plug-ins/metadata/metadata-editor.c:503 +#: plug-ins/metadata/metadata-editor.c:507 msgid "Postal Code" msgstr "Поштовий індекс" -#: plug-ins/metadata/metadata-editor.c:504 -#: plug-ins/metadata/metadata-editor.c:518 -#: plug-ins/metadata/metadata-editor.c:539 -#: plug-ins/metadata/metadata-editor.c:597 +#: plug-ins/metadata/metadata-editor.c:508 +#: plug-ins/metadata/metadata-editor.c:522 +#: plug-ins/metadata/metadata-editor.c:543 +#: plug-ins/metadata/metadata-editor.c:601 msgid "Country" msgstr "Країна" -#: plug-ins/metadata/metadata-editor.c:506 +#: plug-ins/metadata/metadata-editor.c:510 msgid "Phone(s)" msgstr "Телефон(и)" -#: plug-ins/metadata/metadata-editor.c:507 +#: plug-ins/metadata/metadata-editor.c:511 msgid "E-mail(s)" msgstr "Ел. адреса(и)" -#: plug-ins/metadata/metadata-editor.c:508 +#: plug-ins/metadata/metadata-editor.c:512 msgid "Website(s)" msgstr "Сайт(и)" -#: plug-ins/metadata/metadata-editor.c:510 +#: plug-ins/metadata/metadata-editor.c:514 msgid "Creation Date" msgstr "Дата створення" -#: plug-ins/metadata/metadata-editor.c:512 +#: plug-ins/metadata/metadata-editor.c:516 msgid "Intellectual Genre" msgstr "Інтелектуальний жанр" -#: plug-ins/metadata/metadata-editor.c:513 +#: plug-ins/metadata/metadata-editor.c:517 msgid "IPTC Scene Code" msgstr "Код сцени IPTC" -#: plug-ins/metadata/metadata-editor.c:515 -#: plug-ins/metadata/metadata-editor.c:536 -#: plug-ins/metadata/metadata-editor.c:594 +#: plug-ins/metadata/metadata-editor.c:519 +#: plug-ins/metadata/metadata-editor.c:540 +#: plug-ins/metadata/metadata-editor.c:598 msgid "Sublocation" msgstr "Підрозділ" -#: plug-ins/metadata/metadata-editor.c:519 -#: plug-ins/metadata/metadata-editor.c:540 +#: plug-ins/metadata/metadata-editor.c:523 +#: plug-ins/metadata/metadata-editor.c:544 msgid "Country ISO-Code" msgstr "ISO-код країни" -#: plug-ins/metadata/metadata-editor.c:521 +#: plug-ins/metadata/metadata-editor.c:525 msgid "Urgency" msgstr "Терміновість" -#: plug-ins/metadata/metadata-editor.c:522 +#: plug-ins/metadata/metadata-editor.c:526 msgid "Headline" msgstr "Заголовок" -#: plug-ins/metadata/metadata-editor.c:523 +#: plug-ins/metadata/metadata-editor.c:527 msgid "IPTC Subject Code" msgstr "IPTC-код теми" -#: plug-ins/metadata/metadata-editor.c:525 +#: plug-ins/metadata/metadata-editor.c:529 msgid "Job Identifier" msgstr "Ідентифікатор роботи" -#: plug-ins/metadata/metadata-editor.c:526 +#: plug-ins/metadata/metadata-editor.c:530 msgid "Instructions" msgstr "Інструкції" -#: plug-ins/metadata/metadata-editor.c:527 +#: plug-ins/metadata/metadata-editor.c:531 msgid "Credit Line" msgstr "Рядок подяк" -#: plug-ins/metadata/metadata-editor.c:528 -#: plug-ins/metadata/metadata-editor.c:620 +#: plug-ins/metadata/metadata-editor.c:532 +#: plug-ins/metadata/metadata-editor.c:624 msgid "Source" msgstr "Джерело" -#: plug-ins/metadata/metadata-editor.c:529 +#: plug-ins/metadata/metadata-editor.c:533 msgid "Usage Terms" msgstr "Умови використання" -#: plug-ins/metadata/metadata-editor.c:535 +#: plug-ins/metadata/metadata-editor.c:539 msgid "Person Shown" msgstr "Хто зображений" -#: plug-ins/metadata/metadata-editor.c:541 -#: plug-ins/metadata/metadata-editor.c:599 +#: plug-ins/metadata/metadata-editor.c:545 +#: plug-ins/metadata/metadata-editor.c:603 msgid "World Region" msgstr "Частина світу" -#: plug-ins/metadata/metadata-editor.c:542 +#: plug-ins/metadata/metadata-editor.c:546 msgid "Location Shown" msgstr "Зображене місце" -#: plug-ins/metadata/metadata-editor.c:544 +#: plug-ins/metadata/metadata-editor.c:548 msgid "Featured Organization" msgstr "Рекомендована організація" -#: plug-ins/metadata/metadata-editor.c:546 +#: plug-ins/metadata/metadata-editor.c:550 msgid "Organization Code" msgstr "Код організації" -#: plug-ins/metadata/metadata-editor.c:548 +#: plug-ins/metadata/metadata-editor.c:552 msgid "Event" msgstr "Подія" -#: plug-ins/metadata/metadata-editor.c:549 +#: plug-ins/metadata/metadata-editor.c:553 msgid "Artwork or Object" msgstr "Твір мистецтва або об'єкт" -#: plug-ins/metadata/metadata-editor.c:552 +#: plug-ins/metadata/metadata-editor.c:556 msgid "Additional Model Info" msgstr "Додаткові дані про модель" -#: plug-ins/metadata/metadata-editor.c:553 +#: plug-ins/metadata/metadata-editor.c:557 msgid "Model Age" msgstr "Вік моделі" -#: plug-ins/metadata/metadata-editor.c:554 +#: plug-ins/metadata/metadata-editor.c:558 msgid "Minor Model Age Disclosure" msgstr "Найменший вік моделі" -#: plug-ins/metadata/metadata-editor.c:555 +#: plug-ins/metadata/metadata-editor.c:559 msgid "Model Release Status" msgstr "Статус релізу моделі" -#: plug-ins/metadata/metadata-editor.c:556 -#: plug-ins/metadata/metadata-editor.c:628 +#: plug-ins/metadata/metadata-editor.c:560 +#: plug-ins/metadata/metadata-editor.c:632 msgid "Model Release Identifier" msgstr "Ідентифікатор релізу моделі" -#: plug-ins/metadata/metadata-editor.c:559 +#: plug-ins/metadata/metadata-editor.c:563 msgid "Image Supplier Name" msgstr "Ім'я постачальника зображення" -#: plug-ins/metadata/metadata-editor.c:560 +#: plug-ins/metadata/metadata-editor.c:564 msgid "Image Supplier ID" msgstr "Ідентифікатор постачальника зображення" -#: plug-ins/metadata/metadata-editor.c:561 +#: plug-ins/metadata/metadata-editor.c:565 msgid "Supplier's Image ID" msgstr "Ідентифікатор зображення від постачальника" -#: plug-ins/metadata/metadata-editor.c:562 +#: plug-ins/metadata/metadata-editor.c:566 msgid "Registry Entry" msgstr "Запис в реєстрі" -#: plug-ins/metadata/metadata-editor.c:564 +#: plug-ins/metadata/metadata-editor.c:568 msgid "Max. Available Width" msgstr "Найбільша доступна ширина" -#: plug-ins/metadata/metadata-editor.c:565 +#: plug-ins/metadata/metadata-editor.c:569 msgid "Max. Available Height" msgstr "Найбільша доступна висота" -#: plug-ins/metadata/metadata-editor.c:566 +#: plug-ins/metadata/metadata-editor.c:570 msgid "Digital Source Type" msgstr "Тип цифрового джерела" -#: plug-ins/metadata/metadata-editor.c:568 +#: plug-ins/metadata/metadata-editor.c:572 msgid "Image Creator" msgstr "Розробник зображення" -#: plug-ins/metadata/metadata-editor.c:570 +#: plug-ins/metadata/metadata-editor.c:574 msgid "Copyright Owner" msgstr "Правовласник" -#: plug-ins/metadata/metadata-editor.c:572 +#: plug-ins/metadata/metadata-editor.c:576 msgid "Licensor" msgstr "Ліцензіар" -#: plug-ins/metadata/metadata-editor.c:574 +#: plug-ins/metadata/metadata-editor.c:578 msgid "Property Release Status" msgstr "Статус релізу власника" -#: plug-ins/metadata/metadata-editor.c:575 +#: plug-ins/metadata/metadata-editor.c:579 msgid "Property Release Identifier" msgstr "Ідентифікатор релізу власника" -#: plug-ins/metadata/metadata-editor.c:596 +#: plug-ins/metadata/metadata-editor.c:600 msgid "Province / State" msgstr "Провінція / штат" -#: plug-ins/metadata/metadata-editor.c:598 +#: plug-ins/metadata/metadata-editor.c:602 msgid "Country ISO Code" msgstr "ISO-код країни" -#: plug-ins/metadata/metadata-editor.c:611 +#: plug-ins/metadata/metadata-editor.c:615 msgid "Code" msgstr "Код" -#: plug-ins/metadata/metadata-editor.c:617 +#: plug-ins/metadata/metadata-editor.c:621 msgid "Title" msgstr "Назва" -#: plug-ins/metadata/metadata-editor.c:618 +#: plug-ins/metadata/metadata-editor.c:622 msgid "Date Created" msgstr "Дата створення" -#: plug-ins/metadata/metadata-editor.c:619 +#: plug-ins/metadata/metadata-editor.c:623 msgid "Creator" msgstr "Розробник" -#: plug-ins/metadata/metadata-editor.c:621 +#: plug-ins/metadata/metadata-editor.c:625 msgid "Source Inventory ID" msgstr "Ідентифікатор опису джерела" -#: plug-ins/metadata/metadata-editor.c:634 +#: plug-ins/metadata/metadata-editor.c:638 msgid "Organization Identifier" msgstr "Ідентифікатор організації" -#: plug-ins/metadata/metadata-editor.c:635 +#: plug-ins/metadata/metadata-editor.c:639 msgid "Item Identifier" msgstr "Ідентифікатор елемента" -#: plug-ins/metadata/metadata-editor.c:642 -#: plug-ins/metadata/metadata-editor.c:649 -#: plug-ins/metadata/metadata-editor.c:656 -#: plug-ins/metadata/metadata-editor.c:668 +#: plug-ins/metadata/metadata-editor.c:646 +#: plug-ins/metadata/metadata-editor.c:653 +#: plug-ins/metadata/metadata-editor.c:660 +#: plug-ins/metadata/metadata-editor.c:672 msgid "Identifier" msgstr "Ідентифікатор" -#: plug-ins/metadata/metadata-editor.c:657 +#: plug-ins/metadata/metadata-editor.c:661 msgid "Phone Number 1" msgstr "Номер телефону 1" -#: plug-ins/metadata/metadata-editor.c:658 +#: plug-ins/metadata/metadata-editor.c:662 msgid "Phone Type 1" msgstr "Тип телефону 1" -#: plug-ins/metadata/metadata-editor.c:659 +#: plug-ins/metadata/metadata-editor.c:663 msgid "Phone Number 2" msgstr "Номер телефону 2" -#: plug-ins/metadata/metadata-editor.c:660 +#: plug-ins/metadata/metadata-editor.c:664 msgid "Phone Type 2" msgstr "Тип телефону 2" -#: plug-ins/metadata/metadata-editor.c:661 +#: plug-ins/metadata/metadata-editor.c:665 msgid "Email Address" msgstr "Електронна адреса" -#: plug-ins/metadata/metadata-editor.c:662 +#: plug-ins/metadata/metadata-editor.c:666 msgid "Web Address" msgstr "Адреса сайту" -#: plug-ins/metadata/metadata-editor.c:675 +#: plug-ins/metadata/metadata-editor.c:679 msgid "Category" msgstr "Категорія" -#: plug-ins/metadata/metadata-editor.c:676 +#: plug-ins/metadata/metadata-editor.c:680 msgid "Supplemental Category" msgstr "Додаткова категорія" -#: plug-ins/metadata/metadata-editor.c:682 +#: plug-ins/metadata/metadata-editor.c:686 msgid "Longitude" msgstr "Довгота" -#: plug-ins/metadata/metadata-editor.c:683 +#: plug-ins/metadata/metadata-editor.c:687 msgid "Longitude Reference" msgstr "Відлік довготи" -#: plug-ins/metadata/metadata-editor.c:684 +#: plug-ins/metadata/metadata-editor.c:688 msgid "Latitude" msgstr "Широта" -#: plug-ins/metadata/metadata-editor.c:685 +#: plug-ins/metadata/metadata-editor.c:689 msgid "Latitude Reference" msgstr "Відлік широти" -#: plug-ins/metadata/metadata-editor.c:686 +#: plug-ins/metadata/metadata-editor.c:690 msgid "Altitude" msgstr "Висота" -#: plug-ins/metadata/metadata-editor.c:688 +#: plug-ins/metadata/metadata-editor.c:692 msgid "Altitude Reference" msgstr "Відлік висоти" -#: plug-ins/metadata/metadata-editor.c:694 +#: plug-ins/metadata/metadata-editor.c:698 msgid "Patient" msgstr "Пацієнт" -#: plug-ins/metadata/metadata-editor.c:695 +#: plug-ins/metadata/metadata-editor.c:699 msgid "Patient ID" msgstr "Ідентифікатор пацієнта" -#: plug-ins/metadata/metadata-editor.c:696 +#: plug-ins/metadata/metadata-editor.c:700 msgid "Date of Birth" msgstr "Дата народження" -#: plug-ins/metadata/metadata-editor.c:698 +#: plug-ins/metadata/metadata-editor.c:702 msgid "Patient Sex" msgstr "Стать пацієнта" -#: plug-ins/metadata/metadata-editor.c:700 +#: plug-ins/metadata/metadata-editor.c:704 msgid "Study ID" msgstr "Ідентифікатор дослідження" -#: plug-ins/metadata/metadata-editor.c:701 +#: plug-ins/metadata/metadata-editor.c:705 msgid "Referring Physician" msgstr "Звернення до лікаря" -#: plug-ins/metadata/metadata-editor.c:702 +#: plug-ins/metadata/metadata-editor.c:706 msgid "Study Date" msgstr "Дата дослідження" -#: plug-ins/metadata/metadata-editor.c:704 +#: plug-ins/metadata/metadata-editor.c:708 msgid "Study Description" msgstr "Опис дослідження" -#: plug-ins/metadata/metadata-editor.c:705 +#: plug-ins/metadata/metadata-editor.c:709 msgid "Series Number" msgstr "Число в серії" -#: plug-ins/metadata/metadata-editor.c:706 +#: plug-ins/metadata/metadata-editor.c:710 msgid "Modality" msgstr "Модальність" -#: plug-ins/metadata/metadata-editor.c:707 +#: plug-ins/metadata/metadata-editor.c:711 msgid "Series Date" msgstr "Дата серії" -#: plug-ins/metadata/metadata-editor.c:709 +#: plug-ins/metadata/metadata-editor.c:713 msgid "Series Description" msgstr "Опис серії" -#: plug-ins/metadata/metadata-editor.c:711 +#: plug-ins/metadata/metadata-editor.c:715 msgid "Equipment Institution" msgstr "Розташування обладнання" -#: plug-ins/metadata/metadata-editor.c:712 +#: plug-ins/metadata/metadata-editor.c:716 msgid "Equipment Manufacturer" msgstr "Виробник обладнання" -#: plug-ins/metadata/metadata-editor.c:752 +#: plug-ins/metadata/metadata-editor.c:756 msgid "_Edit Metadata" msgstr "З_мінити метадані" -#: plug-ins/metadata/metadata-editor.c:756 +#: plug-ins/metadata/metadata-editor.c:760 msgid "Edit metadata (IPTC, EXIF, XMP)" msgstr "Редагування метаданих (IPTC, EXIF, XMP)" -#: plug-ins/metadata/metadata-editor.c:1178 +#: plug-ins/metadata/metadata-editor.c:1170 #, c-format msgid "Metadata Editor: %s" msgstr "Редактор метаданих: %s" -#: plug-ins/metadata/metadata-editor.c:1186 +#: plug-ins/metadata/metadata-editor.c:1178 msgid "_Write Metadata" msgstr "За_писати метадані" #. IPTC tab -#: plug-ins/metadata/metadata-editor.c:1222 -#: plug-ins/metadata/metadata-viewer.c:401 +#: plug-ins/metadata/metadata-editor.c:1214 +#: plug-ins/metadata/metadata-viewer.c:393 msgid "IPTC" msgstr "IPTC" #. IPTC Extension tab -#: plug-ins/metadata/metadata-editor.c:1228 +#: plug-ins/metadata/metadata-editor.c:1220 msgid "IPTC Extension" msgstr "Розширення IPTC" #. Categories tab -#: plug-ins/metadata/metadata-editor.c:1334 +#: plug-ins/metadata/metadata-editor.c:1326 msgid "Categories" msgstr "Категорії" #. GPS tab -#: plug-ins/metadata/metadata-editor.c:1340 +#: plug-ins/metadata/metadata-editor.c:1332 msgid "GPS" msgstr "GPS" #. DICOM tab -#: plug-ins/metadata/metadata-editor.c:1351 +#: plug-ins/metadata/metadata-editor.c:1343 msgid "DICOM" msgstr "DICOM" -#: plug-ins/metadata/metadata-editor.c:1373 +#: plug-ins/metadata/metadata-editor.c:1365 msgid "Import metadata" msgstr "Імпорт метаданих" -#: plug-ins/metadata/metadata-editor.c:1375 +#: plug-ins/metadata/metadata-editor.c:1367 msgid "Export metadata" msgstr "Експортувати метадані" -#: plug-ins/metadata/metadata-editor.c:1678 +#: plug-ins/metadata/metadata-editor.c:1670 msgid "Choose Date" msgstr "Виберіть дату" -#: plug-ins/metadata/metadata-editor.c:1682 +#: plug-ins/metadata/metadata-editor.c:1674 msgid "Set Date" msgstr "Задайте дату" -#: plug-ins/metadata/metadata-editor.c:2416 +#: plug-ins/metadata/metadata-editor.c:2408 msgid "" "Enter or edit GPS value here.\n" "Valid values consist of 1, 2 or 3 numbers (degrees, minutes, seconds), see " @@ -14873,7 +14886,7 @@ msgstr "" "15.30, або 10.45\n" "Вилучіть увесь текст, щоб вилучити поточне значення." -#: plug-ins/metadata/metadata-editor.c:2422 +#: plug-ins/metadata/metadata-editor.c:2414 msgid "" "Enter or edit GPS altitude value here.\n" "A valid value consists of one number:\n" @@ -14889,24 +14902,24 @@ msgstr "" "або футах (фут)\n" "Щоб вилучити поточне значення, витріть увесь текст." -#: plug-ins/metadata/metadata-editor.c:2556 +#: plug-ins/metadata/metadata-editor.c:2548 msgid "Unrated" msgstr "Без рейтингу" -#: plug-ins/metadata/metadata-editor.c:4666 +#: plug-ins/metadata/metadata-editor.c:4658 #, c-format msgid "Failed to set metadata tag %s: %s" msgstr "Не вдалося встановити мітку метаданих %s: %s" -#: plug-ins/metadata/metadata-editor.c:5529 +#: plug-ins/metadata/metadata-editor.c:5521 msgid "Import Metadata File" msgstr "Імпорт файлу метаданих" -#: plug-ins/metadata/metadata-editor.c:5564 +#: plug-ins/metadata/metadata-editor.c:5556 msgid "Export Metadata File" msgstr "Експорт файлу метаданих" -#: plug-ins/metadata/metadata-editor.c:5568 +#: plug-ins/metadata/metadata-editor.c:5560 msgid "_Export" msgstr "_Експорт" @@ -15134,53 +15147,53 @@ msgstr "Схід" msgid "West" msgstr "Захід" -#: plug-ins/metadata/metadata-viewer.c:177 +#: plug-ins/metadata/metadata-viewer.c:181 msgid "_View Metadata" msgstr "По_казати метадані" -#: plug-ins/metadata/metadata-viewer.c:181 +#: plug-ins/metadata/metadata-viewer.c:185 msgid "View metadata (Exif, IPTC, XMP)" msgstr "Показати метадані (Exif, IPTC, XMP)" -#: plug-ins/metadata/metadata-viewer.c:265 +#: plug-ins/metadata/metadata-viewer.c:257 #, c-format msgid "Metadata Viewer: %s" msgstr "Оглядач метаданих: %s" -#: plug-ins/metadata/metadata-viewer.c:308 +#: plug-ins/metadata/metadata-viewer.c:300 msgid "Exif Tag" msgstr "Мітка Exif" -#: plug-ins/metadata/metadata-viewer.c:325 +#: plug-ins/metadata/metadata-viewer.c:317 msgid "Exif" msgstr "Exif" -#: plug-ins/metadata/metadata-viewer.c:346 +#: plug-ins/metadata/metadata-viewer.c:338 msgid "XMP Tag" msgstr "Мітка XMP" -#: plug-ins/metadata/metadata-viewer.c:363 +#: plug-ins/metadata/metadata-viewer.c:355 msgid "XMP" msgstr "XMP" -#: plug-ins/metadata/metadata-viewer.c:384 +#: plug-ins/metadata/metadata-viewer.c:376 msgid "IPTC Tag" msgstr "Мітка IPTC" -#: plug-ins/metadata/metadata-viewer.c:481 +#: plug-ins/metadata/metadata-viewer.c:473 #, c-format msgid "(%lu more character(s))" msgstr "(%lu більше символів)" -#: plug-ins/metadata/metadata-viewer.c:728 +#: plug-ins/metadata/metadata-viewer.c:720 msgid " meter" msgstr " метр" -#: plug-ins/metadata/metadata-viewer.c:729 +#: plug-ins/metadata/metadata-viewer.c:721 msgid " feet" msgstr " футів" -#: plug-ins/metadata/metadata-viewer.c:897 +#: plug-ins/metadata/metadata-viewer.c:889 #, c-format msgid "(%llu more byte(s))" msgstr "(%llu більше байт)" @@ -15688,6 +15701,41 @@ msgstr "_Сканер/Камера..." msgid "Transferring data from scanner/camera" msgstr "Отримання даних зі сканера/камери" +#~ msgid "Always use _transparency for BC1/DXT1" +#~ msgstr "Завжди використовувати _прозорість для BC1/DXT1" + +#~ msgid "" +#~ "Interprets transparency for BC1/DXT1 images even when DDPF_ALPHAPIXELS is " +#~ "not set; if disabled, sets it to opaque black" +#~ msgstr "" +#~ "Обробляє прозорість для зображень BC1/DXT1, навіть якщо не встановлено " +#~ "DDPF_ALPHAPIXELS; якщо вимкнено, встановлює для відповідних пікселів " +#~ "непрозорий чорний колір" + +#~ msgid "Automatically decode YCoCg/AE_xp images when detected" +#~ msgstr "Автоматично декодувати виявлені зображення YCoCg/AE_xp" + +#~ msgid "Decode YCoCg/AExp images when detected" +#~ msgstr "Декодувати виявлені зображення YCoCg/AExp" + +#~ msgid "Decode YCoCg" +#~ msgstr "Декодувати YCoCg" + +#~ msgid "Converts YCoCg encoded pixels to RGB" +#~ msgstr "Перетворює кодовані у YCoCg пікселі до RGB" + +#~ msgid "Decode YCoCg (scaled)" +#~ msgstr "Декодувати YCoCg (масштабоване)" + +#~ msgid "Converts YCoCg (scaled) encoded pixels to RGB" +#~ msgstr "Перетворює кодовані у YCoCg (масштабованому) пікселі до RGB" + +#~ msgid "Decode Alpha exponent" +#~ msgstr "Декодувати Alpha exponent" + +#~ msgid "Converts alpha exponent encoded pixels to RGB" +#~ msgstr "Перетворює кодовані у альфа-степеневі пікселі до RGB" + #~ msgid "_Saturation" #~ msgstr "_Насиченість" @@ -15703,9 +15751,6 @@ msgstr "Отримання даних зі сканера/камери" #~ msgid "_Save:" #~ msgstr "_Зберегти:" -#~ msgid "_Mipmaps:" -#~ msgstr "MIP-_текстури:" - #~ msgid "_Gamma:" #~ msgstr "Г_ама:" diff --git a/po-plug-ins/zh_CN.po b/po-plug-ins/zh_CN.po index 7cf61a7..89c0a7e 100644 --- a/po-plug-ins/zh_CN.po +++ b/po-plug-ins/zh_CN.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: pika-plug-ins HEAD\n" "Report-Msgid-Bugs-To: https://gitlab.gnome.org/GNOME/pika/issues\n" -"POT-Creation-Date: 2023-10-24 20:29+0000\n" -"PO-Revision-Date: 2023-10-25 07:55+0800\n" +"POT-Creation-Date: 2023-12-01 20:47+0000\n" +"PO-Revision-Date: 2023-12-02 13:40+0800\n" "Last-Translator: lumingzh \n" "Language-Team: Chinese - China \n" "Language: zh_CN\n" @@ -20,7 +20,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0\n" -"X-Generator: Gtranslator 45.2\n" +"X-Generator: Gtranslator 45.3\n" #: extensions/goat-exercises/goat-exercise-c.c:114 msgid "Exercise in _C minor" @@ -34,21 +34,20 @@ msgstr "在 C 语言中锻炼一只山羊" #: plug-ins/common/border-average.c:185 plug-ins/common/checkerboard.c:176 #: plug-ins/common/cml-explorer.c:565 plug-ins/common/compose.c:584 #: plug-ins/common/contrast-retinex.c:246 plug-ins/common/crop-zealous.c:151 -#: plug-ins/common/curve-bend.c:653 plug-ins/common/decompose.c:375 +#: plug-ins/common/curve-bend.c:642 plug-ins/common/decompose.c:375 #: plug-ins/common/depth-merge.c:293 plug-ins/common/despeckle.c:231 #: plug-ins/common/destripe.c:175 plug-ins/common/gradient-map.c:216 #: plug-ins/common/grid.c:272 plug-ins/common/hot.c:310 #: plug-ins/common/jigsaw.c:466 plug-ins/common/nl-filter.c:217 #: plug-ins/common/qbist.c:252 plug-ins/common/sample-colorize.c:427 #: plug-ins/common/smooth-palette.c:195 plug-ins/common/sparkle.c:300 -#: plug-ins/common/sphere-designer.c:3179 plug-ins/common/tile.c:218 -#: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:913 +#: plug-ins/common/sphere-designer.c:3185 plug-ins/common/tile.c:218 +#: plug-ins/common/tile-small.c:314 plug-ins/common/van-gogh-lic.c:243 #: plug-ins/common/warp.c:344 plug-ins/common/wavelet-decompose.c:181 -#: plug-ins/file-dds/dds.c:511 plug-ins/flame/flame.c:299 -#: plug-ins/fractal-explorer/fractal-explorer.c:427 plug-ins/gfig/gfig.c:215 -#: plug-ins/pikaressionist/pika.c:184 +#: plug-ins/flame/flame.c:299 plug-ins/fractal-explorer/fractal-explorer.c:427 +#: plug-ins/gfig/gfig.c:215 plug-ins/pikaressionist/pika.c:184 #: plug-ins/gradient-flare/gradient-flare.c:925 -#: plug-ins/ifs-compose/ifs-compose.c:487 plug-ins/imagemap/imap_main.c:264 +#: plug-ins/ifs-compose/ifs-compose.c:492 plug-ins/imagemap/imap_main.c:264 #: plug-ins/lighting/lighting-main.c:756 #: plug-ins/map-object/map-object-main.c:532 plug-ins/pagecurl/pagecurl.c:299 #, c-format @@ -66,16 +65,15 @@ msgstr "锻炼一只山羊(C)" #: extensions/goat-exercises/goat-exercise-vala.vala:73 #: plug-ins/common/busy-dialog.c:279 plug-ins/common/cml-explorer.c:1379 #: plug-ins/common/cml-explorer.c:2146 plug-ins/common/cml-explorer.c:2356 -#: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1855 -#: plug-ins/common/curve-bend.c:1890 plug-ins/common/file-gif-save.c:1159 -#: plug-ins/common/file-heif.c:2345 plug-ins/common/file-pdf-load.c:686 -#: plug-ins/common/file-pdf-save.c:1046 plug-ins/common/grid.c:786 +#: plug-ins/common/colormap-remap.c:694 plug-ins/common/curve-bend.c:1809 +#: plug-ins/common/curve-bend.c:1844 plug-ins/common/file-gif-save.c:1188 +#: plug-ins/common/file-heif.c:2378 plug-ins/common/file-pdf-load.c:686 +#: plug-ins/common/file-pdf-save.c:1053 plug-ins/common/grid.c:786 #: plug-ins/common/qbist.c:836 plug-ins/common/qbist.c:878 -#: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2287 -#: plug-ins/common/sphere-designer.c:2632 plug-ins/common/unit-editor.c:435 -#: plug-ins/common/van-gogh-lic.c:709 plug-ins/common/warp.c:472 -#: plug-ins/file-tiff/file-tiff-load.c:2555 plug-ins/flame/flame.c:622 -#: plug-ins/flame/flame.c:827 +#: plug-ins/common/qbist.c:932 plug-ins/common/sphere-designer.c:2292 +#: plug-ins/common/sphere-designer.c:2637 plug-ins/common/unit-editor.c:435 +#: plug-ins/common/warp.c:472 plug-ins/file-tiff/file-tiff-load.c:2549 +#: plug-ins/flame/flame.c:622 plug-ins/flame/flame.c:827 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1540 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1578 #: plug-ins/fractal-explorer/fractal-explorer.c:887 @@ -86,15 +84,15 @@ msgstr "锻炼一只山羊(C)" #: plug-ins/pikaressionist/presets.c:642 plug-ins/pikaressionist/sizemap.c:401 #: plug-ins/gradient-flare/gradient-flare.c:3331 #: plug-ins/gradient-flare/gradient-flare.c:3445 -#: plug-ins/ifs-compose/ifs-compose.c:908 -#: plug-ins/ifs-compose/ifs-compose.c:2554 -#: plug-ins/ifs-compose/ifs-compose.c:2591 plug-ins/imagemap/imap_browse.c:80 +#: plug-ins/ifs-compose/ifs-compose.c:914 +#: plug-ins/ifs-compose/ifs-compose.c:2560 +#: plug-ins/ifs-compose/ifs-compose.c:2597 plug-ins/imagemap/imap_browse.c:80 #: plug-ins/imagemap/imap_default_dialog.c:106 plug-ins/imagemap/imap_file.c:73 #: plug-ins/imagemap/imap_file.c:128 plug-ins/lighting/lighting-ui.c:738 -#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1185 -#: plug-ins/metadata/metadata-editor.c:1681 -#: plug-ins/metadata/metadata-editor.c:5532 -#: plug-ins/metadata/metadata-editor.c:5567 +#: plug-ins/lighting/lighting-ui.c:882 plug-ins/metadata/metadata-editor.c:1177 +#: plug-ins/metadata/metadata-editor.c:1673 +#: plug-ins/metadata/metadata-editor.c:5524 +#: plug-ins/metadata/metadata-editor.c:5559 msgid "_Cancel" msgstr "取消(_C)" @@ -147,16 +145,16 @@ msgstr "锻炼一只山羊(JavaScript)" #: extensions/goat-exercises/goat-exercise-lua.lua:73 #: extensions/goat-exercises/goat-exercise-py3.py:79 #: plug-ins/common/cml-explorer.c:1380 plug-ins/common/colormap-remap.c:695 -#: plug-ins/common/file-heif.c:2346 plug-ins/common/file-pdf-load.c:687 +#: plug-ins/common/file-heif.c:2379 plug-ins/common/file-pdf-load.c:687 #: plug-ins/common/grid.c:787 plug-ins/common/qbist.c:933 -#: plug-ins/common/sphere-designer.c:2633 plug-ins/common/unit-editor.c:266 -#: plug-ins/common/van-gogh-lic.c:710 plug-ins/common/warp.c:473 -#: plug-ins/file-exr/file-exr.c:422 plug-ins/file-psd/psd-load.c:3533 -#: plug-ins/flame/flame.c:828 plug-ins/fractal-explorer/fractal-explorer.c:1391 +#: plug-ins/common/sphere-designer.c:2638 plug-ins/common/unit-editor.c:266 +#: plug-ins/common/warp.c:473 plug-ins/file-exr/file-exr.c:422 +#: plug-ins/file-psd/psd-load.c:3549 plug-ins/flame/flame.c:828 +#: plug-ins/fractal-explorer/fractal-explorer.c:1391 #: plug-ins/pikaressionist/orientmap.c:529 #: plug-ins/pikaressionist/presets.c:643 plug-ins/pikaressionist/sizemap.c:402 #: plug-ins/gradient-flare/gradient-flare.c:3446 -#: plug-ins/ifs-compose/ifs-compose.c:909 +#: plug-ins/ifs-compose/ifs-compose.c:915 #: plug-ins/imagemap/imap_default_dialog.c:109 msgid "_OK" msgstr "确认(_O)" @@ -327,7 +325,8 @@ msgstr "对齐可见图层" #. file save type #: plug-ins/common/align-layers.c:740 plug-ins/common/align-layers.c:758 #: plug-ins/common/file-ps.c:3729 plug-ins/common/file-ps.c:3737 -#: plug-ins/common/file-psp.c:839 plug-ins/file-tiff/file-tiff.c:223 +#: plug-ins/common/file-psp.c:839 plug-ins/file-dds/dds.c:191 +#: plug-ins/file-tiff/file-tiff.c:240 #: plug-ins/fractal-explorer/fractal-explorer.c:344 #: plug-ins/fractal-explorer/fractal-explorer.c:354 #: plug-ins/fractal-explorer/fractal-explorer.c:364 @@ -440,117 +439,122 @@ msgstr "回放(_P)..." msgid "Preview a PIKA layer-based animation" msgstr "预览一个基于 PIKA 图层的动画" -#: plug-ins/common/animation-play.c:370 plug-ins/common/animation-play.c:736 -#: plug-ins/common/animation-play.c:1352 +#: plug-ins/common/animation-play.c:371 +#, c-format +msgid "Procedure '%s' only works in interactive mode." +msgstr "程序“%s”仅在交互式模式中有效。" + +#: plug-ins/common/animation-play.c:389 plug-ins/common/animation-play.c:765 +#: plug-ins/common/animation-play.c:1381 msgid "Start playback" msgstr "开始回放" -#: plug-ins/common/animation-play.c:371 plug-ins/common/animation-play.c:738 +#: plug-ins/common/animation-play.c:390 plug-ins/common/animation-play.c:767 msgid "Step back to previous frame" msgstr "后退到上一帧" -#: plug-ins/common/animation-play.c:372 plug-ins/common/animation-play.c:740 +#: plug-ins/common/animation-play.c:391 plug-ins/common/animation-play.c:769 msgid "Step to next frame" msgstr "跳到下一帧" -#: plug-ins/common/animation-play.c:373 plug-ins/common/animation-play.c:742 +#: plug-ins/common/animation-play.c:392 plug-ins/common/animation-play.c:771 msgid "Rewind the animation" msgstr "快退动画" -#: plug-ins/common/animation-play.c:378 +#: plug-ins/common/animation-play.c:397 msgid "Increase the speed of the animation" msgstr "提高动画的速度" -#: plug-ins/common/animation-play.c:379 +#: plug-ins/common/animation-play.c:398 msgid "Decrease the speed of the animation" msgstr "降低动画的速度" -#: plug-ins/common/animation-play.c:380 +#: plug-ins/common/animation-play.c:399 msgid "Reset the speed of the animation" msgstr "重置动画速度" -#: plug-ins/common/animation-play.c:385 plug-ins/common/animation-play.c:745 +#: plug-ins/common/animation-play.c:404 plug-ins/common/animation-play.c:774 msgid "Detach the animation from the dialog window" msgstr "从对话窗口中分离动画" -#: plug-ins/common/animation-play.c:386 plug-ins/common/animation-play.c:747 +#: plug-ins/common/animation-play.c:405 plug-ins/common/animation-play.c:776 msgid "Reload the image" msgstr "重新载入图像" -#: plug-ins/common/animation-play.c:387 plug-ins/imagemap/imap-menu.ui:26 +#: plug-ins/common/animation-play.c:406 plug-ins/imagemap/imap-menu.ui:26 msgid "Quit" msgstr "退出" #. list is given in "fps" - frames per second -#: plug-ins/common/animation-play.c:467 plug-ins/common/animation-play.c:525 -#: plug-ins/common/animation-play.c:803 +#: plug-ins/common/animation-play.c:496 plug-ins/common/animation-play.c:554 +#: plug-ins/common/animation-play.c:832 #, c-format msgid "%.1f %%" msgstr "%.1f %%" #. Image Name -#: plug-ins/common/animation-play.c:658 +#: plug-ins/common/animation-play.c:687 msgid "Animation Playback:" msgstr "动画回放:" -#: plug-ins/common/animation-play.c:738 +#: plug-ins/common/animation-play.c:767 msgid "Step _back" msgstr "后退(_B)" -#: plug-ins/common/animation-play.c:740 +#: plug-ins/common/animation-play.c:769 msgid "_Step" msgstr "单步(_S)" -#: plug-ins/common/animation-play.c:745 +#: plug-ins/common/animation-play.c:774 msgid "Detach" msgstr "分离" #. Zoom Options -#: plug-ins/common/animation-play.c:818 +#: plug-ins/common/animation-play.c:847 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:702 #: plug-ins/imagemap/imap-menu.ui:276 msgid "Zoom" msgstr "缩放" #. list is given in "fps" - frames per second -#: plug-ins/common/animation-play.c:828 +#: plug-ins/common/animation-play.c:857 #, c-format msgid "%d fps" msgstr "%d fps" -#: plug-ins/common/animation-play.c:839 +#: plug-ins/common/animation-play.c:868 msgid "Default framerate" msgstr "默认帧率" -#: plug-ins/common/animation-play.c:859 +#: plug-ins/common/animation-play.c:888 msgid "Playback speed" msgstr "回放速度" #. 2 styles of default frame disposals: cumulative layers and one #. * frame per layer. #. -#: plug-ins/common/animation-play.c:870 plug-ins/common/file-gif-save.c:1269 +#: plug-ins/common/animation-play.c:899 plug-ins/common/file-gif-save.c:1298 msgid "Cumulative layers (combine)" msgstr "累积图层(组合)" -#: plug-ins/common/animation-play.c:875 plug-ins/common/file-gif-save.c:1271 +#: plug-ins/common/animation-play.c:904 plug-ins/common/file-gif-save.c:1300 msgid "One frame per layer (replace)" msgstr "每图层一帧(替换)" -#: plug-ins/common/animation-play.c:971 +#: plug-ins/common/animation-play.c:1000 msgid "Memory could not be allocated to the frame container." msgstr "无法将内存分配到该帧容器。" -#: plug-ins/common/animation-play.c:1038 +#: plug-ins/common/animation-play.c:1067 msgid "Invalid image. Did you close it?" msgstr "无效图像。您关闭了它吗?" -#: plug-ins/common/animation-play.c:1150 +#: plug-ins/common/animation-play.c:1179 #, c-format msgid "Frame %d of %d" msgstr "帧 %d/%d" -#: plug-ins/common/animation-play.c:1352 +#: plug-ins/common/animation-play.c:1381 msgid "Stop playback" msgstr "停止回放" @@ -617,21 +621,21 @@ msgstr "竖直" #: plug-ins/common/decompose.c:645 plug-ins/common/file-cel.c:495 #: plug-ins/common/file-cel.c:500 plug-ins/common/file-dicom.c:751 #: plug-ins/common/file-farbfeld.c:321 plug-ins/common/file-gegl.c:471 -#: plug-ins/common/file-gif-load.c:1117 plug-ins/common/file-iff.c:335 +#: plug-ins/common/file-gif-load.c:1147 plug-ins/common/file-iff.c:345 #: plug-ins/common/file-jp2-load.c:1303 plug-ins/common/file-pcx.c:728 #: plug-ins/common/file-pcx.c:736 plug-ins/common/file-pcx.c:744 -#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:935 +#: plug-ins/common/file-pix.c:456 plug-ins/common/file-png.c:947 #: plug-ins/common/file-pnm.c:868 plug-ins/common/file-qoi.c:320 #: plug-ins/common/file-raw-data.c:1828 plug-ins/common/file-sunras.c:1082 #: plug-ins/common/file-tga.c:1116 plug-ins/common/file-wbmp.c:274 #: plug-ins/common/file-xbm.c:911 plug-ins/common/film.c:844 #: plug-ins/common/smooth-palette.c:302 plug-ins/common/tile.c:399 -#: plug-ins/file-bmp/bmp-load.c:737 plug-ins/file-exr/file-exr.c:281 +#: plug-ins/file-bmp/bmp-load.c:738 plug-ins/file-exr/file-exr.c:281 #: plug-ins/file-faxg3/faxg3.c:578 plug-ins/file-fits/fits.c:700 #: plug-ins/file-jpeg/jpeg-load.c:231 #: plug-ins/file-psd/psd-image-res-load.c:1082 -#: plug-ins/file-psd/psd-load.c:2733 plug-ins/file-sgi/sgi.c:474 -#: plug-ins/file-tiff/file-tiff-load.c:1534 +#: plug-ins/file-psd/psd-load.c:2749 plug-ins/file-sgi/sgi.c:474 +#: plug-ins/file-tiff/file-tiff-load.c:1528 #: plug-ins/file-webp/file-webp-load.c:159 plug-ins/gfig/gfig-dialog.c:1290 #: plug-ins/pikaressionist/general.c:139 #: plug-ins/map-object/map-object-apply.c:245 @@ -927,21 +931,21 @@ msgid "Randoms from seed (shared)" msgstr "来自种子的随机数(共享)" #: plug-ins/common/cml-explorer.c:299 plug-ins/common/cml-explorer.c:307 -#: plug-ins/common/decompose.c:202 plug-ins/pikaressionist/orientation.c:172 -#: plug-ins/pikaressionist/size.c:179 +#: plug-ins/common/decompose.c:202 plug-ins/common/van-gogh-lic.c:160 +#: plug-ins/pikaressionist/orientation.c:172 plug-ins/pikaressionist/size.c:179 msgid "Hue" msgstr "色相" #: plug-ins/common/cml-explorer.c:300 plug-ins/common/cml-explorer.c:308 -#: plug-ins/common/decompose.c:203 +#: plug-ins/common/decompose.c:203 plug-ins/common/van-gogh-lic.c:161 msgid "Saturation" msgstr "饱和度" #: plug-ins/common/cml-explorer.c:301 plug-ins/common/cml-explorer.c:309 #: plug-ins/common/decompose.c:204 plug-ins/pikaressionist/orientation.c:148 -#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:317 -#: plug-ins/metadata/metadata-viewer.c:355 -#: plug-ins/metadata/metadata-viewer.c:393 +#: plug-ins/pikaressionist/size.c:155 plug-ins/metadata/metadata-viewer.c:309 +#: plug-ins/metadata/metadata-viewer.c:347 +#: plug-ins/metadata/metadata-viewer.c:385 msgid "Value" msgstr "明度" @@ -1000,15 +1004,15 @@ msgstr "随机种子" #. The Load button #: plug-ins/common/cml-explorer.c:1456 plug-ins/common/cml-explorer.c:2357 -#: plug-ins/common/curve-bend.c:1313 plug-ins/common/curve-bend.c:1856 +#: plug-ins/common/curve-bend.c:1267 plug-ins/common/curve-bend.c:1810 #: plug-ins/common/file-cel.c:1009 plug-ins/common/qbist.c:837 -#: plug-ins/common/qbist.c:1020 plug-ins/common/sphere-designer.c:2290 -#: plug-ins/common/sphere-designer.c:2681 plug-ins/flame/flame.c:624 +#: plug-ins/common/qbist.c:1020 plug-ins/common/sphere-designer.c:2295 +#: plug-ins/common/sphere-designer.c:2686 plug-ins/flame/flame.c:624 #: plug-ins/flame/flame.c:1233 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:817 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1541 -#: plug-ins/gfig/gfig-dialog.c:782 plug-ins/ifs-compose/ifs-compose.c:905 -#: plug-ins/ifs-compose/ifs-compose.c:2592 plug-ins/imagemap/imap_browse.c:81 +#: plug-ins/gfig/gfig-dialog.c:782 plug-ins/ifs-compose/ifs-compose.c:911 +#: plug-ins/ifs-compose/ifs-compose.c:2598 plug-ins/imagemap/imap_browse.c:81 #: plug-ins/imagemap/imap_file.c:74 plug-ins/lighting/lighting-ui.c:492 #: plug-ins/lighting/lighting-ui.c:883 msgid "_Open" @@ -1016,21 +1020,21 @@ msgstr "打开(_O)" #. The Save button #: plug-ins/common/cml-explorer.c:1464 plug-ins/common/cml-explorer.c:2147 -#: plug-ins/common/curve-bend.c:1325 plug-ins/common/curve-bend.c:1891 -#: plug-ins/common/file-pdf-save.c:1045 plug-ins/common/qbist.c:879 -#: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2290 -#: plug-ins/common/sphere-designer.c:2689 plug-ins/flame/flame.c:624 +#: plug-ins/common/curve-bend.c:1279 plug-ins/common/curve-bend.c:1845 +#: plug-ins/common/file-pdf-save.c:1052 plug-ins/common/qbist.c:879 +#: plug-ins/common/qbist.c:1028 plug-ins/common/sphere-designer.c:2295 +#: plug-ins/common/sphere-designer.c:2694 plug-ins/flame/flame.c:624 #: plug-ins/flame/flame.c:1241 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:825 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1579 #: plug-ins/gfig/gfig-dialog.c:832 plug-ins/pikaressionist/brush.c:271 -#: plug-ins/ifs-compose/ifs-compose.c:906 -#: plug-ins/ifs-compose/ifs-compose.c:2555 plug-ins/imagemap/imap_file.c:129 +#: plug-ins/ifs-compose/ifs-compose.c:912 +#: plug-ins/ifs-compose/ifs-compose.c:2561 plug-ins/imagemap/imap_file.c:129 #: plug-ins/lighting/lighting-ui.c:486 plug-ins/lighting/lighting-ui.c:739 msgid "_Save" msgstr "保存(_S)" -#: plug-ins/common/cml-explorer.c:1483 plug-ins/common/van-gogh-lic.c:736 +#: plug-ins/common/cml-explorer.c:1483 msgid "_Hue" msgstr "色相(_H)" @@ -1188,8 +1192,8 @@ msgstr "当前设置的曲线图" #: plug-ins/common/cml-explorer.c:2014 plug-ins/common/plugin-browser.c:562 #: plug-ins/common/procedure-browser.c:169 plug-ins/gfig/gfig-dialog.c:355 #: plug-ins/gfig/gfig-dialog.c:1218 plug-ins/gfig/gfig-dialog.c:1363 -#: plug-ins/ifs-compose/ifs-compose.c:1208 -#: plug-ins/metadata/metadata-viewer.c:272 +#: plug-ins/ifs-compose/ifs-compose.c:1214 +#: plug-ins/metadata/metadata-viewer.c:264 msgid "_Close" msgstr "关闭(_C)" @@ -1201,21 +1205,21 @@ msgstr "警告:源和目标是同一个通道。" msgid "Save CML Explorer Parameters" msgstr "保存 CML 探索器参数" -#: plug-ins/common/cml-explorer.c:2212 plug-ins/common/curve-bend.c:792 +#: plug-ins/common/cml-explorer.c:2212 plug-ins/common/curve-bend.c:781 #: plug-ins/common/file-dicom.c:1564 plug-ins/common/file-farbfeld.c:380 #: plug-ins/common/file-mng.c:871 plug-ins/common/file-mng.c:1218 #: plug-ins/common/file-pcx.c:1216 plug-ins/common/file-pdf-save.c:659 -#: plug-ins/common/file-png.c:1488 plug-ins/common/file-raw-data.c:1337 +#: plug-ins/common/file-png.c:1518 plug-ins/common/file-raw-data.c:1337 #: plug-ins/common/file-raw-data.c:1366 plug-ins/common/file-sunras.c:637 #: plug-ins/common/file-tga.c:1237 plug-ins/common/file-xmc.c:1381 -#: plug-ins/common/sphere-designer.c:2201 plug-ins/file-bmp/bmp-save.c:341 +#: plug-ins/common/sphere-designer.c:2206 plug-ins/file-bmp/bmp-save.c:341 #: plug-ins/file-fli/fli-pika.c:808 plug-ins/file-icns/file-icns-save.c:427 #: plug-ins/file-ico/ico-save.c:1342 plug-ins/file-ico/ico-save.c:1559 #: plug-ins/file-jpeg/jpeg-save.c:317 plug-ins/file-psd/psd-save.c:2214 #: plug-ins/file-tiff/file-tiff-save.c:1084 #: plug-ins/file-tiff/file-tiff-save.c:1173 plug-ins/flame/flame.c:590 #: plug-ins/fractal-explorer/fractal-explorer-dialogs.c:1441 -#: plug-ins/gfig/gfig.c:897 plug-ins/ifs-compose/ifs-compose.c:2414 +#: plug-ins/gfig/gfig.c:897 plug-ins/ifs-compose/ifs-compose.c:2420 #: plug-ins/lighting/lighting-ui.c:808 #, c-format msgid "Could not open '%s' for writing: %s" @@ -1344,9 +1348,9 @@ msgid "Rearrange Colormap" msgstr "重新整理颜色表" #. The Reset button -#: plug-ins/common/colormap-remap.c:693 plug-ins/common/curve-bend.c:1296 -#: plug-ins/common/sphere-designer.c:2631 plug-ins/common/tile-small.c:525 -#: plug-ins/pikaressionist/preview.c:182 plug-ins/ifs-compose/ifs-compose.c:907 +#: plug-ins/common/colormap-remap.c:693 plug-ins/common/curve-bend.c:1250 +#: plug-ins/common/sphere-designer.c:2636 plug-ins/common/tile-small.c:525 +#: plug-ins/pikaressionist/preview.c:182 plug-ins/ifs-compose/ifs-compose.c:913 msgid "_Reset" msgstr "重置(_R)" @@ -1462,7 +1466,7 @@ msgstr "红色差 cr709(_R):" #: plug-ins/common/compose.c:244 plug-ins/common/compose.c:438 #: plug-ins/common/compose.c:501 plug-ins/common/decompose.c:193 -#: plug-ins/common/file-heif.c:2511 +#: plug-ins/common/file-heif.c:2544 msgid "RGB" msgstr "RGB" @@ -1782,15 +1786,15 @@ msgstr "积极剪裁" msgid "Nothing to crop." msgstr "没有东西可以剪裁。" -#: plug-ins/common/curve-bend.c:412 +#: plug-ins/common/curve-bend.c:396 msgid "_Curve Bend..." msgstr "曲线扭曲(_C)..." -#: plug-ins/common/curve-bend.c:417 +#: plug-ins/common/curve-bend.c:401 msgid "Bend the image using two control curves" msgstr "用两条控制曲线扭曲图像" -#: plug-ins/common/curve-bend.c:418 +#: plug-ins/common/curve-bend.c:402 msgid "" "This plug-in bends the active layer. If there is a current selection it is " "copied to floating selection and the curve_bend distortion is done on the " @@ -1811,133 +1815,133 @@ msgstr "" "操作前旋转并在操作后旋转回来。这会允许以竖直以外的方向进行扭曲。扭曲通常会改" "变所处理图层的大小。该插件会设定所处理图层的位移来保持其中心在相同位置。" -#: plug-ins/common/curve-bend.c:442 +#: plug-ins/common/curve-bend.c:426 msgid "Rotat_e" msgstr "旋转(_E)" -#: plug-ins/common/curve-bend.c:443 +#: plug-ins/common/curve-bend.c:427 msgid "Direction {angle 0 to 360 degree } of the bend effect" msgstr "弯曲效果的方向 {角度为 0 至 360 度}" -#: plug-ins/common/curve-bend.c:449 +#: plug-ins/common/curve-bend.c:433 msgid "Smoo_thing" msgstr "平滑(_T)" -#: plug-ins/common/curve-bend.c:450 +#: plug-ins/common/curve-bend.c:434 msgid "Smoothing" msgstr "平滑" -#: plug-ins/common/curve-bend.c:455 plug-ins/common/qbist.c:997 +#: plug-ins/common/curve-bend.c:439 plug-ins/common/qbist.c:997 #: plug-ins/lighting/lighting-main.c:296 msgid "_Antialiasing" msgstr "抗锯齿(_A)" -#: plug-ins/common/curve-bend.c:456 +#: plug-ins/common/curve-bend.c:440 msgid "Antialias" msgstr "抗锯齿" -#: plug-ins/common/curve-bend.c:461 +#: plug-ins/common/curve-bend.c:445 msgid "Work on cop_y" msgstr "在副本中操作(_Y)" -#: plug-ins/common/curve-bend.c:462 +#: plug-ins/common/curve-bend.c:446 msgid "Copy the drawable and bend the copy" msgstr "复制可绘区并弯曲该副本" -#: plug-ins/common/curve-bend.c:467 +#: plug-ins/common/curve-bend.c:451 msgid "Curve Type" msgstr "曲线类型" -#: plug-ins/common/curve-bend.c:468 +#: plug-ins/common/curve-bend.c:452 msgid "{ 0 == smooth (use 17 points), 1 == freehand (use 256 val_y) }" msgstr "{ 0 == 平滑(使用 17 点),1 == 手绘(使用 256 _Y 值)}" -#: plug-ins/common/curve-bend.c:474 +#: plug-ins/common/curve-bend.c:458 msgid "Curve for Border" msgstr "曲线对应的边界" -#: plug-ins/common/curve-bend.c:475 +#: plug-ins/common/curve-bend.c:459 msgid "Choose the active border line to edit" msgstr "选择活动边界线来编辑" -#: plug-ins/common/curve-bend.c:480 plug-ins/common/curve-bend.c:481 +#: plug-ins/common/curve-bend.c:464 plug-ins/common/curve-bend.c:465 msgid "Argc upper point X" msgstr "参数上边 X 点位" -#: plug-ins/common/curve-bend.c:486 +#: plug-ins/common/curve-bend.c:470 msgid "Upper point X" msgstr "上边 X 点位" -#: plug-ins/common/curve-bend.c:487 plug-ins/common/curve-bend.c:511 +#: plug-ins/common/curve-bend.c:471 plug-ins/common/curve-bend.c:495 msgid "Array of 17 x point coords { 0.0 <= x <= 1.0 or -1 for unused point }" msgstr "17 个 X 点位坐标的排列 { 0.0 <= x <= 1.0 或 -1 为未使用的点位}" -#: plug-ins/common/curve-bend.c:492 plug-ins/common/curve-bend.c:493 +#: plug-ins/common/curve-bend.c:476 plug-ins/common/curve-bend.c:477 msgid "Argc upper point Y" msgstr "参数上边 Y 点位" -#: plug-ins/common/curve-bend.c:498 +#: plug-ins/common/curve-bend.c:482 msgid "Upper point Y" msgstr "上边 Y 点位" -#: plug-ins/common/curve-bend.c:499 plug-ins/common/curve-bend.c:523 +#: plug-ins/common/curve-bend.c:483 plug-ins/common/curve-bend.c:507 msgid "Array of 17 y point coords { 0.0 <= y <= 1.0 or -1 for unused point }" msgstr "17 个 Y 点位坐标的排列 { 0.0 <= y <= 1.0 或 -1 为未使用的点位}" -#: plug-ins/common/curve-bend.c:504 plug-ins/common/curve-bend.c:505 +#: plug-ins/common/curve-bend.c:488 plug-ins/common/curve-bend.c:489 msgid "Argc lower point X" msgstr "参数下边 X 点位" -#: plug-ins/common/curve-bend.c:510 +#: plug-ins/common/curve-bend.c:494 msgid "Lower point X" msgstr "下边 X 点位" -#: plug-ins/common/curve-bend.c:516 plug-ins/common/curve-bend.c:517 +#: plug-ins/common/curve-bend.c:500 plug-ins/common/curve-bend.c:501 msgid "Argc lower point Y" msgstr "参数下边 Y 点位" -#: plug-ins/common/curve-bend.c:522 +#: plug-ins/common/curve-bend.c:506 msgid "Lower point Y" msgstr "下边 Y 点位" -#: plug-ins/common/curve-bend.c:528 +#: plug-ins/common/curve-bend.c:512 msgid "Upper val Y" msgstr "上边 Y 值" -#: plug-ins/common/curve-bend.c:529 plug-ins/common/curve-bend.c:535 +#: plug-ins/common/curve-bend.c:513 plug-ins/common/curve-bend.c:519 msgid "Array of 256 y freehand coords { 0 <= y <= 255 }" msgstr "256 个 Y 手绘坐标的排列 { 0 <= y <= 255 }" -#: plug-ins/common/curve-bend.c:534 +#: plug-ins/common/curve-bend.c:518 msgid "Lower val Y" msgstr "下边 Y 值" -#: plug-ins/common/curve-bend.c:540 +#: plug-ins/common/curve-bend.c:524 msgid "Bent layer" msgstr "扭曲图层" -#: plug-ins/common/curve-bend.c:541 +#: plug-ins/common/curve-bend.c:525 msgid "The transformed layer" msgstr "已变换的图层" -#: plug-ins/common/curve-bend.c:672 +#: plug-ins/common/curve-bend.c:661 msgid "Can operate on layers only (but was called on channel or mask)." msgstr "只能对图层进行操作(但在通道或蒙板中被调用)。" -#: plug-ins/common/curve-bend.c:686 +#: plug-ins/common/curve-bend.c:675 msgid "Cannot operate on layers with masks." msgstr "无法对带蒙板的图层进行操作。" -#: plug-ins/common/curve-bend.c:701 +#: plug-ins/common/curve-bend.c:690 msgid "Cannot operate on empty selections." msgstr "无法对空选区进行操作。" -#: plug-ins/common/curve-bend.c:845 plug-ins/common/file-cel.c:350 +#: plug-ins/common/curve-bend.c:834 plug-ins/common/file-cel.c:350 #: plug-ins/common/file-cel.c:402 plug-ins/common/file-dicom.c:383 -#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:414 +#: plug-ins/common/file-farbfeld.c:298 plug-ins/common/file-gif-load.c:416 #: plug-ins/common/file-iff.c:219 plug-ins/common/file-mng.c:1402 #: plug-ins/common/file-pcx.c:509 plug-ins/common/file-pcx.c:552 -#: plug-ins/common/file-png.c:658 plug-ins/common/file-ps.c:1109 +#: plug-ins/common/file-png.c:665 plug-ins/common/file-ps.c:1109 #: plug-ins/common/file-ps.c:3619 plug-ins/common/file-psp.c:2631 #: plug-ins/common/file-psp.c:2681 plug-ins/common/file-qoi.c:299 #: plug-ins/common/file-raw-data.c:515 plug-ins/common/file-raw-data.c:1665 @@ -1945,8 +1949,8 @@ msgstr "无法对空选区进行操作。" #: plug-ins/common/file-svg.c:809 plug-ins/common/file-tga.c:447 #: plug-ins/common/file-wbmp.c:188 plug-ins/common/file-xbm.c:749 #: plug-ins/common/file-xmc.c:656 plug-ins/common/file-xmc.c:895 -#: plug-ins/common/file-xwd.c:492 plug-ins/common/sphere-designer.c:2090 -#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:156 +#: plug-ins/common/file-xwd.c:492 plug-ins/common/sphere-designer.c:2095 +#: plug-ins/file-bmp/bmp-load.c:226 plug-ins/file-dds/ddsread.c:160 #: plug-ins/file-faxg3/faxg3.c:260 plug-ins/file-fits/fits.c:395 #: plug-ins/file-fli/fli-pika.c:450 plug-ins/file-fli/fli-pika.c:501 #: plug-ins/file-icns/file-icns-load.c:516 @@ -1964,105 +1968,105 @@ msgstr "无法对空选区进行操作。" msgid "Could not open '%s' for reading: %s" msgstr "无法打开“%s”并读取:%s" -#: plug-ins/common/curve-bend.c:855 +#: plug-ins/common/curve-bend.c:844 #, c-format msgid "Error while reading '%s': %s" msgstr "读取“%s”时出错:%s" -#: plug-ins/common/curve-bend.c:1113 plug-ins/common/curve-bend.c:2819 +#: plug-ins/common/curve-bend.c:1067 plug-ins/common/curve-bend.c:2702 msgid "Curve Bend" msgstr "曲线扭曲" -#: plug-ins/common/curve-bend.c:1129 plug-ins/gfig/gfig-dialog.c:1215 +#: plug-ins/common/curve-bend.c:1083 plug-ins/gfig/gfig-dialog.c:1215 msgid "Options" msgstr "选项" #. GUI-only widgets #. Preview area, top of column #. preview -#: plug-ins/common/curve-bend.c:1152 plug-ins/pikaressionist/orientmap.c:589 +#: plug-ins/common/curve-bend.c:1106 plug-ins/pikaressionist/orientmap.c:589 #: plug-ins/pikaressionist/sizemap.c:458 plug-ins/print/print-page-layout.c:180 msgid "Preview" msgstr "预览" #. The preview button -#: plug-ins/common/curve-bend.c:1180 +#: plug-ins/common/curve-bend.c:1134 msgid "_Preview Once" msgstr "预览一次(_P)" #. The preview toggle -#: plug-ins/common/curve-bend.c:1189 +#: plug-ins/common/curve-bend.c:1143 msgid "Automatic pre_view" msgstr "自动预览(_V)" #. The curves graph #. Config-connected widgets first -#: plug-ins/common/curve-bend.c:1200 +#: plug-ins/common/curve-bend.c:1154 msgid "Smooth" msgstr "平滑" -#: plug-ins/common/curve-bend.c:1201 +#: plug-ins/common/curve-bend.c:1155 msgid "Free" msgstr "自由" -#: plug-ins/common/curve-bend.c:1208 +#: plug-ins/common/curve-bend.c:1162 msgid "Upper" msgstr "上边" -#: plug-ins/common/curve-bend.c:1209 +#: plug-ins/common/curve-bend.c:1163 msgctxt "adjective" msgid "Lower" msgstr "下边" -#: plug-ins/common/curve-bend.c:1227 +#: plug-ins/common/curve-bend.c:1181 msgid "Modify Curves" msgstr "修改曲线" #. The Copy button -#: plug-ins/common/curve-bend.c:1259 +#: plug-ins/common/curve-bend.c:1213 #: plug-ins/gradient-flare/gradient-flare.c:3047 msgid "_Copy" msgstr "复制(_C)" -#: plug-ins/common/curve-bend.c:1264 +#: plug-ins/common/curve-bend.c:1218 msgid "Copy the active curve to the other border" msgstr "将活动曲线复制至对边" #. The CopyInv button -#: plug-ins/common/curve-bend.c:1271 +#: plug-ins/common/curve-bend.c:1225 msgid "_Mirror" msgstr "镜像(_M)" -#: plug-ins/common/curve-bend.c:1276 +#: plug-ins/common/curve-bend.c:1230 msgid "Mirror the active curve to the other border" msgstr "将活动曲线镜像至对边" #. The Swap button -#: plug-ins/common/curve-bend.c:1284 +#: plug-ins/common/curve-bend.c:1238 msgid "S_wap" msgstr "交换(_W)" -#: plug-ins/common/curve-bend.c:1289 +#: plug-ins/common/curve-bend.c:1243 msgid "Swap the two curves" msgstr "交换两条曲线" -#: plug-ins/common/curve-bend.c:1301 +#: plug-ins/common/curve-bend.c:1255 msgid "Reset the active curve" msgstr "重置活动曲线" -#: plug-ins/common/curve-bend.c:1318 +#: plug-ins/common/curve-bend.c:1272 msgid "Load the curves from a file" msgstr "从文件中加载曲线" -#: plug-ins/common/curve-bend.c:1330 +#: plug-ins/common/curve-bend.c:1284 msgid "Save the curves to a file" msgstr "将曲线保存到文件" -#: plug-ins/common/curve-bend.c:1851 +#: plug-ins/common/curve-bend.c:1805 msgid "Load Curve Points from File" msgstr "从文件中加载曲线的点" -#: plug-ins/common/curve-bend.c:1886 +#: plug-ins/common/curve-bend.c:1840 msgid "Save Curve Points to File" msgstr "将曲线的点保存到文件" @@ -2429,7 +2433,7 @@ msgid "" "of text formats" msgstr "该插件使用 aalib 将灰阶图像作为 ascii 艺术保存为多种文本格式" -#: plug-ins/common/file-aa.c:156 +#: plug-ins/common/file-aa.c:156 plug-ins/file-dds/dds.c:213 msgid "_Format" msgstr "格式(_F)" @@ -2491,11 +2495,11 @@ msgstr "读取图像头部信息时遇到文件尾或错误" #. * Open the file for reading... #. #: plug-ins/common/file-cel.c:393 plug-ins/common/file-dicom.c:375 -#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:406 -#: plug-ins/common/file-heif.c:871 plug-ins/common/file-jp2-load.c:1077 +#: plug-ins/common/file-gegl.c:358 plug-ins/common/file-gif-load.c:408 +#: plug-ins/common/file-heif.c:910 plug-ins/common/file-jp2-load.c:1077 #: plug-ins/common/file-pcx.c:501 plug-ins/common/file-pcx.c:544 #: plug-ins/common/file-pdf-load.c:856 plug-ins/common/file-pix.c:393 -#: plug-ins/common/file-png.c:650 plug-ins/common/file-pnm.c:713 +#: plug-ins/common/file-png.c:657 plug-ins/common/file-pnm.c:713 #: plug-ins/common/file-ps.c:1099 plug-ins/common/file-raw-data.c:1657 #: plug-ins/common/file-sunras.c:449 plug-ins/common/file-tga.c:439 #: plug-ins/common/file-wbmp.c:180 plug-ins/common/file-wmf.c:784 @@ -2507,7 +2511,7 @@ msgstr "读取图像头部信息时遇到文件尾或错误" #: plug-ins/file-ico/ico-load.c:811 plug-ins/file-jpeg/jpeg-load.c:90 #: plug-ins/file-psd/psd-load.c:182 plug-ins/file-raw/file-darktable.c:417 #: plug-ins/file-raw/file-rawtherapee.c:345 plug-ins/file-sgi/sgi.c:333 -#: plug-ins/file-tiff/file-tiff-load.c:290 +#: plug-ins/file-tiff/file-tiff-load.c:291 #, c-format msgid "Opening '%s'" msgstr "正在打开“%s”" @@ -2568,9 +2572,9 @@ msgstr "“%s”:读取色板数据时遇到文件尾或错误" #. * Open the file for writing... #. #: plug-ins/common/file-cel.c:845 plug-ins/common/file-farbfeld.c:372 -#: plug-ins/common/file-gif-save.c:912 plug-ins/common/file-html-table.c:359 -#: plug-ins/common/file-jpegxl.c:1376 plug-ins/common/file-pcx.c:1100 -#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1480 +#: plug-ins/common/file-gif-save.c:941 plug-ins/common/file-html-table.c:359 +#: plug-ins/common/file-jpegxl.c:1382 plug-ins/common/file-pcx.c:1100 +#: plug-ins/common/file-pix.c:661 plug-ins/common/file-png.c:1510 #: plug-ins/common/file-pnm.c:1634 plug-ins/common/file-ps.c:1321 #: plug-ins/common/file-qoi.c:374 plug-ins/common/file-sunras.c:628 #: plug-ins/common/file-tga.c:1229 plug-ins/common/file-xbm.c:1050 @@ -2824,131 +2828,131 @@ msgstr "无法打开“%s”" msgid "GIF image" msgstr "GIF 图像" -#: plug-ins/common/file-gif-load.c:421 +#: plug-ins/common/file-gif-load.c:423 msgid "GIF magic code" msgstr "GIF 魔法代码" -#: plug-ins/common/file-gif-load.c:429 +#: plug-ins/common/file-gif-load.c:431 msgid "This is not a GIF file: incorrect magic code" msgstr "这不是 GIF 文件:不正确的魔法代码" -#: plug-ins/common/file-gif-load.c:437 +#: plug-ins/common/file-gif-load.c:439 msgid "Incorrect GIF version: not '87a' or '89a'" msgstr "不正确的 GIF 版本:不是“87a”或“89a”" -#: plug-ins/common/file-gif-load.c:444 +#: plug-ins/common/file-gif-load.c:446 msgid "screen descriptor" msgstr "屏幕描述符" -#: plug-ins/common/file-gif-load.c:462 +#: plug-ins/common/file-gif-load.c:464 msgid "global colormap" msgstr "全局颜色表" -#: plug-ins/common/file-gif-load.c:474 plug-ins/common/file-gif-load.c:1080 +#: plug-ins/common/file-gif-load.c:476 plug-ins/common/file-gif-load.c:1110 msgid "image data" msgstr "图像数据" -#: plug-ins/common/file-gif-load.c:491 +#: plug-ins/common/file-gif-load.c:493 msgid "extension data" msgstr "扩展数据" -#: plug-ins/common/file-gif-load.c:511 +#: plug-ins/common/file-gif-load.c:513 msgid "frame info" msgstr "帧信息" -#: plug-ins/common/file-gif-load.c:524 +#: plug-ins/common/file-gif-load.c:526 msgid "local colormap" msgstr "局部颜色表" -#: plug-ins/common/file-gif-load.c:569 +#: plug-ins/common/file-gif-load.c:571 plug-ins/common/file-iff.c:361 msgid "" "Non-square pixels. Image might look squashed if Dot for Dot mode is enabled." msgstr "非正方形像素。如果启用点对点模式则图像可能会看起来扁了。" -#: plug-ins/common/file-gif-load.c:606 plug-ins/common/file-gif-load.c:611 +#: plug-ins/common/file-gif-load.c:627 plug-ins/common/file-gif-load.c:632 #, c-format msgid "Error reading %s. %s" msgstr "读取“%s”时出错。%s" -#: plug-ins/common/file-gif-load.c:607 plug-ins/common/file-gif-load.c:612 -#: plug-ins/common/file-gif-load.c:763 plug-ins/common/file-gif-load.c:771 -#: plug-ins/common/file-gif-load.c:802 plug-ins/common/file-gif-load.c:856 -#: plug-ins/common/file-gif-load.c:946 plug-ins/common/file-gif-load.c:965 -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 -#: plug-ins/common/file-gif-load.c:1215 +#: plug-ins/common/file-gif-load.c:628 plug-ins/common/file-gif-load.c:633 +#: plug-ins/common/file-gif-load.c:793 plug-ins/common/file-gif-load.c:801 +#: plug-ins/common/file-gif-load.c:832 plug-ins/common/file-gif-load.c:886 +#: plug-ins/common/file-gif-load.c:976 plug-ins/common/file-gif-load.c:995 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 +#: plug-ins/common/file-gif-load.c:1245 msgid "Image may be corrupt!" msgstr "图像可能已损坏!" -#: plug-ins/common/file-gif-load.c:763 +#: plug-ins/common/file-gif-load.c:793 msgid "Error reading data size" msgstr "读取数据大小时出错" -#: plug-ins/common/file-gif-load.c:771 +#: plug-ins/common/file-gif-load.c:801 msgid "Error reading data" msgstr "读取数据时出错" -#: plug-ins/common/file-gif-load.c:802 +#: plug-ins/common/file-gif-load.c:832 msgid "Not enough compressed data" msgstr "压缩的数据不够" -#: plug-ins/common/file-gif-load.c:856 +#: plug-ins/common/file-gif-load.c:886 msgid "Value out of range for code size" msgstr "数值超出代码大小的范围" -#: plug-ins/common/file-gif-load.c:945 +#: plug-ins/common/file-gif-load.c:975 msgid "Invalid code, expecting end of data marker" msgstr "无效代码,预期为数据标记末尾" -#: plug-ins/common/file-gif-load.c:965 +#: plug-ins/common/file-gif-load.c:995 msgid "Unexpected extra data" msgstr "非预期的额外数据" -#: plug-ins/common/file-gif-load.c:984 +#: plug-ins/common/file-gif-load.c:1014 msgid "Invalid table entry" msgstr "无效的表项目" -#: plug-ins/common/file-gif-load.c:984 plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1014 plug-ins/common/file-gif-load.c:1020 msgid "Image is corrupt!" msgstr "图像已损坏!" -#: plug-ins/common/file-gif-load.c:990 +#: plug-ins/common/file-gif-load.c:1020 msgid "Circular table entry" msgstr "循环表项目" -#: plug-ins/common/file-gif-load.c:1065 +#: plug-ins/common/file-gif-load.c:1095 #, c-format msgid "%s. %s" msgstr "%s. %s" -#: plug-ins/common/file-gif-load.c:1066 plug-ins/common/file-gif-load.c:1070 +#: plug-ins/common/file-gif-load.c:1096 plug-ins/common/file-gif-load.c:1100 msgid "Invalid frame dimensions" msgstr "无效的帧尺寸" -#: plug-ins/common/file-gif-load.c:1086 +#: plug-ins/common/file-gif-load.c:1116 msgid "compressed image data" msgstr "压缩的图像数据" -#: plug-ins/common/file-gif-load.c:1119 +#: plug-ins/common/file-gif-load.c:1149 #, c-format msgid "Background (%d%s)" msgstr "背景(%d%s)" -#: plug-ins/common/file-gif-load.c:1146 +#: plug-ins/common/file-gif-load.c:1176 #, c-format msgid "Opening '%s' (frame %d)" msgstr "打开“%s”(第%d帧)" -#: plug-ins/common/file-gif-load.c:1175 +#: plug-ins/common/file-gif-load.c:1205 #, c-format msgid "Frame %d" msgstr "帧 %d" -#: plug-ins/common/file-gif-load.c:1177 +#: plug-ins/common/file-gif-load.c:1207 #, c-format msgid "Frame %d (%d%s)" msgstr "帧 %d(%d%s)" -#: plug-ins/common/file-gif-load.c:1208 +#: plug-ins/common/file-gif-load.c:1238 #, c-format msgid "" "GIF: Undocumented GIF composite type %d is not handled. Animation might not " @@ -2956,12 +2960,12 @@ msgid "" msgstr "" "GIF:无法处理无书面文件的 GIF 合成类型 %d。动画可能无法准确地播放或重储存。" -#: plug-ins/common/file-gif-load.c:1214 +#: plug-ins/common/file-gif-load.c:1244 #, c-format msgid "Unknown composite type %d. %s" msgstr "未知的合成类型“%d”。%s" -#: plug-ins/common/file-gif-load.c:1257 +#: plug-ins/common/file-gif-load.c:1287 msgid "" "Can't handle non-alpha RGB frames.\n" "Please file a bug report at https://gitlab.gnome.org/GNOME/pika/issues" @@ -2969,7 +2973,7 @@ msgstr "" "无法处理非透明 RGB 帧。\n" "请在 https://gitlab.gnome.org/GNOME/pika/issues 提交缺陷报告" -#: plug-ins/common/file-gif-load.c:1380 +#: plug-ins/common/file-gif-load.c:1410 msgid "Too much compressed data, ignoring extra..." msgstr "太多压缩的数据,正在忽略额外数据…" @@ -3075,47 +3079,47 @@ msgstr "注释(_T)" msgid "Image comment" msgstr "图像注释" -#: plug-ins/common/file-gif-save.c:348 +#: plug-ins/common/file-gif-save.c:377 msgid "GIF format does not support multiple layers." msgstr "GIF 格式不支持多图层。" -#: plug-ins/common/file-gif-save.c:553 +#: plug-ins/common/file-gif-save.c:582 msgid "Couldn't simply reduce colors further. Exporting as opaque." msgstr "无法简单地进一步减少颜色。正在作为不透明导出。" -#: plug-ins/common/file-gif-save.c:672 +#: plug-ins/common/file-gif-save.c:701 #, c-format msgid "" "Unable to export '%s'. The GIF file format does not support images that are " "more than %d pixels wide or tall." msgstr "无法导出“%s”。GIF 文件格式不支持宽度或高度大于 %d 像素的图像。" -#: plug-ins/common/file-gif-save.c:798 +#: plug-ins/common/file-gif-save.c:827 msgid "" "The GIF format only supports comments in 7bit ASCII encoding. No comment is " "saved." msgstr "GIF 格式只支持 7 位 ASCII 编码的注释。注释没有被保存。" -#: plug-ins/common/file-gif-save.c:885 +#: plug-ins/common/file-gif-save.c:914 msgid "" "Cannot export RGB color images. Convert to indexed color or grayscale first." msgstr "无法导出 RGB 颜色图像。请先转换成索引颜色或灰阶。" -#: plug-ins/common/file-gif-save.c:1105 +#: plug-ins/common/file-gif-save.c:1134 msgid "Delay inserted to prevent evil CPU-sucking animation." msgstr "插入了延时以防止生成严重阻塞 CPU 的动画。" -#: plug-ins/common/file-gif-save.c:1154 +#: plug-ins/common/file-gif-save.c:1183 msgid "" "The image you are trying to export as a GIF contains layers which extend " "beyond the actual borders of the image." msgstr "您试图导出为 GIF 的图像含有超出图像实际边界的图层。" -#: plug-ins/common/file-gif-save.c:1160 +#: plug-ins/common/file-gif-save.c:1189 msgid "Cr_op" msgstr "剪裁(_O)" -#: plug-ins/common/file-gif-save.c:1171 +#: plug-ins/common/file-gif-save.c:1200 msgid "" "The GIF file format does not allow this. You may choose whether to crop all " "of the layers to the image borders, or cancel this export." @@ -3123,19 +3127,19 @@ msgstr "" "GIF 文件格式不允许这种情况。您可以选择裁掉所有图层中超出图像边界的部分,或者" "取消导出。" -#: plug-ins/common/file-gif-save.c:1261 plug-ins/common/file-mng.c:1638 +#: plug-ins/common/file-gif-save.c:1290 plug-ins/common/file-mng.c:1638 msgid "milliseconds" msgstr "毫秒" -#: plug-ins/common/file-gif-save.c:1267 +#: plug-ins/common/file-gif-save.c:1296 msgid "I don't care" msgstr "我不关心" -#: plug-ins/common/file-gif-save.c:1303 +#: plug-ins/common/file-gif-save.c:1332 msgid "Animated GIF" msgstr "GIF 动画" -#: plug-ins/common/file-gif-save.c:1310 +#: plug-ins/common/file-gif-save.c:1339 msgid "" "You can only export as animation when the image has more than one layer.\n" "The image you are trying to export only has one layer." @@ -3232,15 +3236,15 @@ msgstr "C 源代码头文件" msgid "Header plug-in does not support multiple layers." msgstr "头文件插件不支持多图层。" -#: plug-ins/common/file-heif.c:194 plug-ins/common/file-heif.c:234 +#: plug-ins/common/file-heif.c:204 plug-ins/common/file-heif.c:244 msgid "HEIF/HEIC" msgstr "HEIF/HEIC" -#: plug-ins/common/file-heif.c:197 +#: plug-ins/common/file-heif.c:207 msgid "Loads HEIF images" msgstr "载入 HEIF 图像" -#: plug-ins/common/file-heif.c:198 +#: plug-ins/common/file-heif.c:208 msgid "" "Load image stored in HEIF format (High Efficiency Image File Format). " "Typical suffices for HEIF files are .heif, .heic." @@ -3248,178 +3252,190 @@ msgstr "" "载入以 HEIF(高效率图像文件格式)格式存储的图像。HEIF 文件典型的后缀名为 ." "heif、.heic。" -#: plug-ins/common/file-heif.c:239 +#: plug-ins/common/file-heif.c:249 msgid "Exports HEIF images" msgstr "导出 HEIF 图像" -#: plug-ins/common/file-heif.c:240 +#: plug-ins/common/file-heif.c:250 msgid "Save image in HEIF format (High Efficiency Image File Format)." msgstr "以 HEIF(高效率图像文件格式)格式保存图像。" -#: plug-ins/common/file-heif.c:256 plug-ins/common/file-heif.c:366 +#: plug-ins/common/file-heif.c:266 plug-ins/common/file-heif.c:376 #: plug-ins/file-jpeg/jpeg.c:206 msgid "_Quality" msgstr "质量(_Q)" -#: plug-ins/common/file-heif.c:257 plug-ins/common/file-heif.c:367 +#: plug-ins/common/file-heif.c:267 plug-ins/common/file-heif.c:377 msgid "Quality factor (0 = worst, 100 = best)" msgstr "质量系数(0 = 最差,100 = 最好)" -#: plug-ins/common/file-heif.c:262 plug-ins/common/file-heif.c:372 +#: plug-ins/common/file-heif.c:272 plug-ins/common/file-heif.c:382 #: plug-ins/common/file-jpegxl.c:188 plug-ins/file-webp/file-webp.c:178 msgid "L_ossless" msgstr "无损(_O)" -#: plug-ins/common/file-heif.c:263 plug-ins/common/file-heif.c:373 +#: plug-ins/common/file-heif.c:273 plug-ins/common/file-heif.c:383 #: plug-ins/common/file-jpegxl.c:189 msgid "Use lossless compression" msgstr "使用无损压缩" -#: plug-ins/common/file-heif.c:268 plug-ins/common/file-heif.c:378 +#: plug-ins/common/file-heif.c:278 plug-ins/common/file-heif.c:388 msgid "Save color prof_ile" msgstr "保存色彩配置文件(_I)" -#: plug-ins/common/file-heif.c:269 plug-ins/common/file-heif.c:379 +#: plug-ins/common/file-heif.c:279 plug-ins/common/file-heif.c:389 msgid "Save the image's color profile" msgstr "保存图像的色彩配置文件" -#: plug-ins/common/file-heif.c:274 plug-ins/common/file-heif.c:384 +#: plug-ins/common/file-heif.c:284 plug-ins/common/file-heif.c:394 #: plug-ins/common/file-jpegxl.c:200 msgid "_Bit depth" msgstr "位深(_B)" -#: plug-ins/common/file-heif.c:275 plug-ins/common/file-heif.c:385 +#: plug-ins/common/file-heif.c:285 plug-ins/common/file-heif.c:395 #: plug-ins/common/file-jpegxl.c:201 msgid "Bit depth of exported image" msgstr "导出图像的位深" -#: plug-ins/common/file-heif.c:280 plug-ins/common/file-heif.c:390 -#: plug-ins/common/file-png.c:286 +#: plug-ins/common/file-heif.c:290 plug-ins/common/file-heif.c:400 +#: plug-ins/common/file-png.c:290 msgid "_Pixel format" msgstr "像素格式(_P)" -#: plug-ins/common/file-heif.c:281 plug-ins/common/file-heif.c:391 +#: plug-ins/common/file-heif.c:291 plug-ins/common/file-heif.c:401 msgid "Format of color sub-sampling" msgstr "颜色次采样的格式" -#: plug-ins/common/file-heif.c:287 plug-ins/common/file-heif.c:397 +#: plug-ins/common/file-heif.c:297 plug-ins/common/file-heif.c:407 msgid "Enco_der speed" msgstr "编码速度(_D)" -#: plug-ins/common/file-heif.c:288 plug-ins/common/file-heif.c:398 +#: plug-ins/common/file-heif.c:298 plug-ins/common/file-heif.c:408 msgid "Tradeoff between speed and compression" msgstr "在速度和压缩之间权衡" -#: plug-ins/common/file-heif.c:294 plug-ins/common/file-heif.c:404 +#: plug-ins/common/file-heif.c:304 plug-ins/common/file-heif.c:414 #: plug-ins/common/file-jpegxl.c:225 msgid "Save Exi_f" msgstr "保存 Exif(_F)" -#: plug-ins/common/file-heif.c:295 plug-ins/common/file-heif.c:405 +#: plug-ins/common/file-heif.c:305 plug-ins/common/file-heif.c:415 #: plug-ins/common/file-jpegxl.c:226 msgid "Toggle saving Exif data" msgstr "切换保存 Exif 数据" -#: plug-ins/common/file-heif.c:300 plug-ins/common/file-heif.c:410 +#: plug-ins/common/file-heif.c:310 plug-ins/common/file-heif.c:420 #: plug-ins/common/file-jpegxl.c:231 msgid "Save _XMP" msgstr "保存 _XMP" -#: plug-ins/common/file-heif.c:301 plug-ins/common/file-heif.c:411 +#: plug-ins/common/file-heif.c:311 plug-ins/common/file-heif.c:421 #: plug-ins/common/file-jpegxl.c:232 msgid "Toggle saving XMP data" msgstr "切换保存 XMP 数据" -#: plug-ins/common/file-heif.c:315 +#: plug-ins/common/file-heif.c:325 msgid "Loads AVIF images" msgstr "载入 AVIF 图像" -#: plug-ins/common/file-heif.c:316 +#: plug-ins/common/file-heif.c:326 msgid "Load image stored in AV1 Image File Format (AVIF)" msgstr "载入以 AV1 图像文件格式(AVIF)存储的图像" -#: plug-ins/common/file-heif.c:348 +#: plug-ins/common/file-heif.c:358 msgid "Exports AVIF images" msgstr "导出 AVIF 图像" -#: plug-ins/common/file-heif.c:349 +#: plug-ins/common/file-heif.c:359 msgid "Save image in AV1 Image File Format (AVIF)" msgstr "以 AV1 图像文件格式(AVIF)保存图像" -#: plug-ins/common/file-heif.c:504 plug-ins/common/file-heif.c:594 +#: plug-ins/common/file-heif.c:432 +msgid "JPEG 2000 encapsulated in HEIF" +msgstr "在 HEIF 中封装的 JPEG 2000" + +#: plug-ins/common/file-heif.c:435 +msgid "Loads HEJ2 images" +msgstr "载入 HEJ2 图像" + +#: plug-ins/common/file-heif.c:436 +msgid "Load JPEG 2000 image encapsulated in HEIF (HEJ2)" +msgstr "加载在 HEIF(HEJ2)中封装的 JPEG 2000 图像" + +#: plug-ins/common/file-heif.c:541 plug-ins/common/file-heif.c:631 msgid "HEIF format does not support multiple layers." msgstr "HEIF 格式不支持多图层。" -#: plug-ins/common/file-heif.c:911 plug-ins/common/file-heif.c:944 -#: plug-ins/common/file-heif.c:985 plug-ins/common/file-heif.c:1051 +#: plug-ins/common/file-heif.c:950 plug-ins/common/file-heif.c:983 +#: plug-ins/common/file-heif.c:1024 plug-ins/common/file-heif.c:1090 #, c-format msgid "Loading HEIF image failed: %s" msgstr "加载 HEIF 图像失败:%s" -#: plug-ins/common/file-heif.c:933 +#: plug-ins/common/file-heif.c:972 msgid "Loading HEIF image failed: Input file contains no readable images" msgstr "加载 HEIF 图像失败:输入的文件未包含可读取图像" -#: plug-ins/common/file-heif.c:1177 +#: plug-ins/common/file-heif.c:1216 msgid "image content" msgstr "图像内容" -#: plug-ins/common/file-heif.c:1529 +#: plug-ins/common/file-heif.c:1562 #, c-format msgid "Exporting '%s' using %s encoder" msgstr "正在使用 %2$s 编码器导出“%1$s”" -#: plug-ins/common/file-heif.c:1579 plug-ins/common/file-heif.c:1986 +#: plug-ins/common/file-heif.c:1612 plug-ins/common/file-heif.c:2019 #, c-format msgid "Encoding HEIF image failed: %s" msgstr "编码 HEIF 图像失败:%s" -#: plug-ins/common/file-heif.c:2107 +#: plug-ins/common/file-heif.c:2140 #, c-format msgid "Writing HEIF image failed: %s" msgstr "写入 HEIF 图像失败:%s" -#: plug-ins/common/file-heif.c:2196 +#: plug-ins/common/file-heif.c:2229 msgid "primary" msgstr "主要" -#: plug-ins/common/file-heif.c:2341 +#: plug-ins/common/file-heif.c:2374 msgid "Load HEIF Image" msgstr "载入 HEIF 图像" -#: plug-ins/common/file-heif.c:2355 +#: plug-ins/common/file-heif.c:2388 msgid "Select Image" msgstr "选择图像" -#: plug-ins/common/file-heif.c:2512 +#: plug-ins/common/file-heif.c:2545 msgid "YUV444" msgstr "YUV444" -#: plug-ins/common/file-heif.c:2513 +#: plug-ins/common/file-heif.c:2546 msgid "YUV420" msgstr "YUV420" -#: plug-ins/common/file-heif.c:2521 plug-ins/common/file-jpegxl.c:2022 +#: plug-ins/common/file-heif.c:2554 plug-ins/common/file-jpegxl.c:2028 msgid "8 bit/channel" msgstr "8 位/通道" -#: plug-ins/common/file-heif.c:2522 +#: plug-ins/common/file-heif.c:2555 msgid "10 bit/channel" msgstr "10 位/通道" -#: plug-ins/common/file-heif.c:2523 +#: plug-ins/common/file-heif.c:2556 msgid "12 bit/channel" msgstr "12 位/通道" -#: plug-ins/common/file-heif.c:2529 +#: plug-ins/common/file-heif.c:2562 msgid "Slow" msgstr "慢" -#: plug-ins/common/file-heif.c:2530 +#: plug-ins/common/file-heif.c:2563 msgid "Balanced" msgstr "平衡" -#: plug-ins/common/file-heif.c:2531 +#: plug-ins/common/file-heif.c:2564 msgid "Fast" msgstr "快" @@ -3573,11 +3589,11 @@ msgstr "Amiga IFF" msgid "Load file in the IFF file format" msgstr "加载 IFF 格式的文件" -#: plug-ins/common/file-iff.c:252 +#: plug-ins/common/file-iff.c:254 msgid "Invalid or missing ILBM image" msgstr "无效或缺失的 ILBM 图像" -#: plug-ins/common/file-iff.c:257 +#: plug-ins/common/file-iff.c:268 msgid "ILBM contains no image data - likely a palette file" msgstr "ILBM 未包含图像数据——可能为色板文件" @@ -3736,7 +3752,7 @@ msgstr "保存原始配置文件(_G)" msgid "Store ICC profile to exported JXL file" msgstr "存储 ICC 配置文件至导出的 JXL 文件" -#: plug-ins/common/file-jpegxl.c:219 plug-ins/file-tiff/file-tiff.c:241 +#: plug-ins/common/file-jpegxl.c:219 plug-ins/file-tiff/file-tiff.c:258 msgid "Export as CMY_K" msgstr "导出为 CMYK(_K)" @@ -3744,56 +3760,56 @@ msgstr "导出为 CMYK(_K)" msgid "Create a CMYK JPEG XL image using the soft-proofing color profile" msgstr "使用软打样色彩配置文件创建 CMYK JPEG XL 图像" -#: plug-ins/common/file-jpegxl.c:2008 +#: plug-ins/common/file-jpegxl.c:2014 msgid "lightning (fastest)" msgstr "闪电(最快)" -#: plug-ins/common/file-jpegxl.c:2009 +#: plug-ins/common/file-jpegxl.c:2015 msgid "thunder" msgstr "雷声" -#: plug-ins/common/file-jpegxl.c:2010 +#: plug-ins/common/file-jpegxl.c:2016 msgid "falcon (faster)" msgstr "鹰隼(较快)" -#: plug-ins/common/file-jpegxl.c:2011 +#: plug-ins/common/file-jpegxl.c:2017 msgid "cheetah" msgstr "猎豹" -#: plug-ins/common/file-jpegxl.c:2012 +#: plug-ins/common/file-jpegxl.c:2018 msgid "hare" msgstr "野兔" -#: plug-ins/common/file-jpegxl.c:2013 +#: plug-ins/common/file-jpegxl.c:2019 msgid "wombat" msgstr "毛鼻袋熊" -#: plug-ins/common/file-jpegxl.c:2014 +#: plug-ins/common/file-jpegxl.c:2020 msgid "squirrel" msgstr "松鼠" -#: plug-ins/common/file-jpegxl.c:2015 +#: plug-ins/common/file-jpegxl.c:2021 msgid "kitten" msgstr "小猫" -#: plug-ins/common/file-jpegxl.c:2016 +#: plug-ins/common/file-jpegxl.c:2022 msgid "tortoise (slower)" msgstr "乌龟(较慢)" -#: plug-ins/common/file-jpegxl.c:2023 +#: plug-ins/common/file-jpegxl.c:2029 msgid "16 bit/channel" msgstr "16 位/通道" -#: plug-ins/common/file-jpegxl.c:2031 +#: plug-ins/common/file-jpegxl.c:2037 msgid "CMYK profile required for export" msgstr "需要 CMYK 色彩配置用于导出" -#: plug-ins/common/file-jpegxl.c:2039 plug-ins/file-jpeg/jpeg-save.c:900 +#: plug-ins/common/file-jpegxl.c:2045 plug-ins/file-jpeg/jpeg-save.c:900 #: plug-ins/file-psd/psd-save.c:2459 plug-ins/file-tiff/file-tiff-save.c:1315 msgid "Name of the color profile used for CMYK export." msgstr "用于 CMYK 导出的色彩配置文件的名称。" -#: plug-ins/common/file-jpegxl.c:2058 plug-ins/file-jpeg/jpeg-save.c:911 +#: plug-ins/common/file-jpegxl.c:2064 plug-ins/file-jpeg/jpeg-save.c:911 #: plug-ins/file-psd/psd-save.c:2470 plug-ins/file-tiff/file-tiff-save.c:1327 #, c-format msgid "Profile: %s" @@ -3882,7 +3898,7 @@ msgstr "默认帧处理(_F)" msgid "(ANIMATED MNG) Default dispose type (0 = combine; 1 = replace)" msgstr "(MNG 动画)默认处理类型(0 = 组合;1 = 替换)" -#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:248 +#: plug-ins/common/file-mng.c:331 plug-ins/common/file-png.c:252 msgid "Save _background color" msgstr "保存背景色(_B)" @@ -3906,7 +3922,7 @@ msgstr "保存分辨率(_V)" msgid "Write pHYs (image resolution) chunk" msgstr "写入 pHYs(图像分辨率)数据块" -#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:266 +#: plug-ins/common/file-mng.c:349 plug-ins/common/file-png.c:270 msgid "Save creation _time" msgstr "保存创建时间(_T)" @@ -3917,7 +3933,7 @@ msgstr "写入 tIME(创建时间)数据块" #. Inform the user that we couldn't losslessly save the #. * transparency & just use the full palette #. -#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2240 +#: plug-ins/common/file-mng.c:724 plug-ins/common/file-png.c:2315 msgid "Couldn't losslessly save transparency, saving opacity instead." msgstr "无法无损地保存透明度,以不透明保存。" @@ -3925,7 +3941,7 @@ msgstr "无法无损地保存透明度,以不透明保存。" msgid "MNG Options" msgstr "MNG 选项" -#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:229 +#: plug-ins/common/file-mng.c:1600 plug-ins/common/file-png.c:233 msgid "PNG" msgstr "PNG" @@ -4059,13 +4075,13 @@ msgid "'%s' is not a PCX file" msgstr "“%s”不是 PCX 文件" #: plug-ins/common/file-pcx.c:693 plug-ins/common/file-wbmp.c:263 -#: plug-ins/file-bmp/bmp-load.c:726 plug-ins/file-psd/psd-load.c:548 +#: plug-ins/file-bmp/bmp-load.c:727 plug-ins/file-psd/psd-load.c:548 #, c-format msgid "Unsupported or invalid image width: %d" msgstr "不支持或无效的图像宽度:%d" #: plug-ins/common/file-pcx.c:699 plug-ins/common/file-wbmp.c:269 -#: plug-ins/file-bmp/bmp-load.c:732 plug-ins/file-psd/psd-load.c:540 +#: plug-ins/file-bmp/bmp-load.c:733 plug-ins/file-psd/psd-load.c:540 #, c-format msgid "Unsupported or invalid image height: %d" msgstr "不支持或无效的图像高度:%d" @@ -4248,7 +4264,7 @@ msgid "PDF" msgstr "PDF" #: plug-ins/common/file-pdf-save.c:381 plug-ins/common/file-pdf-save.c:453 -#: plug-ins/common/file-pdf-save.c:1098 +#: plug-ins/common/file-pdf-save.c:1105 msgid "_Fill transparent areas with background color" msgstr "用背景色填充透明区域(_F)" @@ -4273,7 +4289,7 @@ msgstr "" "%s\n" "请确保您输入了有效文件名且选中的位置不是只读!" -#: plug-ins/common/file-pdf-save.c:939 +#: plug-ins/common/file-pdf-save.c:946 #, c-format msgid "" "The following fonts cannot be found: %s.\n" @@ -4284,54 +4300,54 @@ msgstr "" "建议在导出前将您的文字图层转换为图像或安装缺少的字体,否则您的设计可能不会正" "确显示。" -#: plug-ins/common/file-pdf-save.c:1037 +#: plug-ins/common/file-pdf-save.c:1044 msgid "Save to:" msgstr "保存到:" -#: plug-ins/common/file-pdf-save.c:1041 +#: plug-ins/common/file-pdf-save.c:1048 msgid "Browse..." msgstr "浏览…" -#: plug-ins/common/file-pdf-save.c:1042 +#: plug-ins/common/file-pdf-save.c:1049 msgid "Multipage PDF export" msgstr "多页面 PDF 导出" -#: plug-ins/common/file-pdf-save.c:1078 +#: plug-ins/common/file-pdf-save.c:1085 msgid "Remove the selected pages" msgstr "删除选中页面" -#: plug-ins/common/file-pdf-save.c:1088 +#: plug-ins/common/file-pdf-save.c:1095 msgid "Add this image" msgstr "添加该图像" -#: plug-ins/common/file-pdf-save.c:1093 +#: plug-ins/common/file-pdf-save.c:1100 msgid "_Omit hidden layers and layers with zero opacity" msgstr "忽略隐藏图层和完全透明图层(_O)" -#: plug-ins/common/file-pdf-save.c:1103 +#: plug-ins/common/file-pdf-save.c:1110 msgid "Convert _bitmaps to vector graphics where possible" msgstr "可能的话将位图转换为矢量图形(_B)" -#: plug-ins/common/file-pdf-save.c:1108 +#: plug-ins/common/file-pdf-save.c:1115 msgid "_Apply layer masks before saving" msgstr "保存之前应用图层蒙板(_A)" -#: plug-ins/common/file-pdf-save.c:1112 +#: plug-ins/common/file-pdf-save.c:1119 msgid "Keeping the masks will not change the output" msgstr "保留蒙板将不会改变输出" -#: plug-ins/common/file-pdf-save.c:1201 plug-ins/common/file-pdf-save.c:1274 -#: plug-ins/common/file-pdf-save.c:1372 plug-ins/common/file-ps.c:2098 -#: plug-ins/file-tiff/file-tiff-load.c:1536 +#: plug-ins/common/file-pdf-save.c:1208 plug-ins/common/file-pdf-save.c:1281 +#: plug-ins/common/file-pdf-save.c:1379 plug-ins/common/file-ps.c:2098 +#: plug-ins/file-tiff/file-tiff-load.c:1530 #, c-format msgid "Page %d" msgstr "第 %d 页" -#: plug-ins/common/file-pdf-save.c:1241 +#: plug-ins/common/file-pdf-save.c:1248 msgid "Error! In order to save the file, at least one image should be added!" msgstr "错误!为了保存该文件,应该添加至少一副图像!" -#: plug-ins/common/file-pdf-save.c:1419 plug-ins/print/print-draw-page.c:125 +#: plug-ins/common/file-pdf-save.c:1426 plug-ins/print/print-draw-page.c:125 msgid "Cannot handle the size (either width or height) of the image." msgstr "无法处理该图像的尺寸(无论宽度或高度)。" @@ -4354,180 +4370,180 @@ msgstr "试图打开临时 JPEG 文件“%s”用于加载 Esm 软件的 pix 文 msgid "Invalid Esm Software PIX file" msgstr "无效的 Esm 软件 PIX 文件" -#: plug-ins/common/file-png.c:183 plug-ins/common/file-png.c:213 +#: plug-ins/common/file-png.c:187 plug-ins/common/file-png.c:217 msgid "PNG image" msgstr "PNG 图像" -#: plug-ins/common/file-png.c:236 +#: plug-ins/common/file-png.c:240 msgid "_Interlacing (Adam7)" msgstr "交错储存(Adam7)(_I)" -#: plug-ins/common/file-png.c:237 +#: plug-ins/common/file-png.c:241 msgid "Use Adam7 interlacing" msgstr "使用 Adam7 隔行扫描" -#: plug-ins/common/file-png.c:242 +#: plug-ins/common/file-png.c:246 msgid "Co_mpression level" msgstr "压缩等级(_M)" -#: plug-ins/common/file-png.c:243 +#: plug-ins/common/file-png.c:247 msgid "Deflate Compression factor (0..9)" msgstr "Deflate 压缩系数(0..9)" -#: plug-ins/common/file-png.c:249 +#: plug-ins/common/file-png.c:253 msgid "Write bKGD chunk (PNG metadata)" msgstr "写入 bKGD 数据块(PNG 元数据)" -#: plug-ins/common/file-png.c:254 +#: plug-ins/common/file-png.c:258 msgid "Save layer o_ffset" msgstr "保存图层位移(_F)" -#: plug-ins/common/file-png.c:255 +#: plug-ins/common/file-png.c:259 msgid "Write oFFs chunk (PNG metadata)" msgstr "写入 oFFs 数据块(PNG 元数据)" -#: plug-ins/common/file-png.c:260 +#: plug-ins/common/file-png.c:264 msgid "Save resol_ution" msgstr "保存分辨率(_U)" -#: plug-ins/common/file-png.c:261 +#: plug-ins/common/file-png.c:265 msgid "Write pHYs chunk (PNG metadata)" msgstr "写入 pHYs 数据块(PNG 元数据)" -#: plug-ins/common/file-png.c:267 +#: plug-ins/common/file-png.c:271 msgid "Write tIME chunk (PNG metadata)" msgstr "写入 tIME 数据块(PNG 元数据)" -#: plug-ins/common/file-png.c:272 plug-ins/file-tiff/file-tiff.c:234 +#: plug-ins/common/file-png.c:276 plug-ins/file-tiff/file-tiff.c:251 msgid "Save color _values from transparent pixels" msgstr "保存透明像素的颜色值(_V)" -#: plug-ins/common/file-png.c:273 +#: plug-ins/common/file-png.c:277 msgid "Preserve color of completely transparent pixels" msgstr "保存完全透明像素的颜色" -#: plug-ins/common/file-png.c:278 +#: plug-ins/common/file-png.c:282 msgid "_Optimize for smallest possible palette size" msgstr "为最小色板大小优化(_O)" -#: plug-ins/common/file-png.c:279 +#: plug-ins/common/file-png.c:283 msgid "" "When checked, save as 1, 2, 4, or 8-bit depending on number of colors used. " "When unchecked, always save as 8-bit" msgstr "" "勾选时,基于使用的颜色数量保存为 1、2、4 或 8 位。未勾选时,总是保存为 8 位" -#: plug-ins/common/file-png.c:287 +#: plug-ins/common/file-png.c:291 msgid "PNG export format" msgstr "PNG 导出格式" -#: plug-ins/common/file-png.c:288 plug-ins/common/file-ps.c:3723 +#: plug-ins/common/file-png.c:292 plug-ins/common/file-ps.c:3723 #: plug-ins/file-fits/fits.c:1035 msgid "Automatic" msgstr "自动" -#: plug-ins/common/file-png.c:289 +#: plug-ins/common/file-png.c:293 msgid "8 bpc RGB" msgstr "8 位 RGB" -#: plug-ins/common/file-png.c:290 +#: plug-ins/common/file-png.c:294 msgid "8 bpc GRAY" msgstr "8 位 灰阶" -#: plug-ins/common/file-png.c:291 +#: plug-ins/common/file-png.c:295 msgid "8 bpc RGBA" msgstr "8 位 RGBA" -#: plug-ins/common/file-png.c:292 +#: plug-ins/common/file-png.c:296 msgid "8 bpc GRAYA" msgstr "8 位灰阶透明" -#: plug-ins/common/file-png.c:293 +#: plug-ins/common/file-png.c:297 msgid "16 bpc RGB" msgstr "16 位 RGB" -#: plug-ins/common/file-png.c:294 +#: plug-ins/common/file-png.c:298 msgid "16 bpc GRAY" msgstr "16 位灰阶" -#: plug-ins/common/file-png.c:295 +#: plug-ins/common/file-png.c:299 msgid "16 bpc RGBA" msgstr "16 位 RGBA" -#: plug-ins/common/file-png.c:296 +#: plug-ins/common/file-png.c:300 msgid "16 bpc GRAYA" msgstr "16 位灰阶透明" -#: plug-ins/common/file-png.c:411 +#: plug-ins/common/file-png.c:415 msgid "PNG format does not support multiple layers." msgstr "PNG 格式不支持多图层。" -#: plug-ins/common/file-png.c:484 +#: plug-ins/common/file-png.c:488 #, c-format msgid "Error loading PNG file: %s\n" msgstr "载入 PNG 文件出错:%s\n" -#: plug-ins/common/file-png.c:615 +#: plug-ins/common/file-png.c:622 #, c-format msgid "Error creating PNG read struct while loading '%s'." msgstr "加载“%s”时创建 PNG 读取结构出错。" -#: plug-ins/common/file-png.c:624 +#: plug-ins/common/file-png.c:631 #, c-format msgid "Error while reading '%s'. Could not create PNG header info structure." msgstr "读取“%s”出错。无法创建 PNG 文件头信息结构。" -#: plug-ins/common/file-png.c:632 +#: plug-ins/common/file-png.c:639 #, c-format msgid "Error while reading '%s'. File corrupted?" msgstr "读取“%s”出错。文件已损坏?" -#: plug-ins/common/file-png.c:887 +#: plug-ins/common/file-png.c:899 #, c-format msgid "Unknown color model in PNG file '%s'." msgstr "PNG 文件“%s”存在未知色彩模型。" -#: plug-ins/common/file-png.c:900 plug-ins/file-exr/file-exr.c:260 +#: plug-ins/common/file-png.c:912 plug-ins/file-exr/file-exr.c:260 #, c-format msgid "Could not create new image for '%s': %s" msgstr "无法为“%s”创建新图像:%s" -#: plug-ins/common/file-png.c:968 +#: plug-ins/common/file-png.c:980 msgid "" "The PNG file specifies an offset that caused the layer to be positioned " "outside the image." msgstr "PNG 文件中指定的位移导致图层定位在图像以外。" -#: plug-ins/common/file-png.c:1202 +#: plug-ins/common/file-png.c:1231 msgid "Apply PNG Offset" msgstr "应用 PNG 位移" -#: plug-ins/common/file-png.c:1206 +#: plug-ins/common/file-png.c:1235 msgid "Ignore PNG offset" msgstr "忽略 PNG 位移" -#: plug-ins/common/file-png.c:1207 +#: plug-ins/common/file-png.c:1236 msgid "Apply PNG offset to layer" msgstr "对图层应用 PNG 位移" -#: plug-ins/common/file-png.c:1232 +#: plug-ins/common/file-png.c:1261 #, c-format msgid "" "The PNG image you are importing specifies an offset of %d, %d. Do you want " "to apply this offset to the layer?" msgstr "您导入的 PNG 图像指定了“%d,%d”位移。您想要对图层应用该位移吗?" -#: plug-ins/common/file-png.c:1445 +#: plug-ins/common/file-png.c:1475 #, c-format msgid "Error creating PNG write struct while exporting '%s'." msgstr "导出“%s”时创建 PNG 写入结构出错。" -#: plug-ins/common/file-png.c:1454 +#: plug-ins/common/file-png.c:1484 #, c-format msgid "Error while exporting '%s'. Could not create PNG header info structure." msgstr "导出“%s”出错。无法创建 PNG 文件头信息结构。" -#: plug-ins/common/file-png.c:1462 +#: plug-ins/common/file-png.c:1492 #, c-format msgid "Error while exporting '%s'. Could not export image." msgstr "导出“%s”出错。无法导出图像。" @@ -4692,7 +4708,7 @@ msgid "Unsupported maximum value." msgstr "不支持的最大值。" #: plug-ins/common/file-pnm.c:943 -msgid "PAM: Unsupported inofficial PNM variant." +msgid "PAM: Unsupported unofficial PNM variant." msgstr "PAM:不支持的非官方 PNM 变种。" #: plug-ins/common/file-pnm.c:947 @@ -6845,10 +6861,10 @@ msgstr "无匹配" msgid "Plug-in Browser" msgstr "插件浏览器" -#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:605 -#: plug-ins/metadata/metadata-editor.c:641 -#: plug-ins/metadata/metadata-editor.c:648 -#: plug-ins/metadata/metadata-editor.c:655 +#: plug-ins/common/plugin-browser.c:603 plug-ins/metadata/metadata-editor.c:609 +#: plug-ins/metadata/metadata-editor.c:645 +#: plug-ins/metadata/metadata-editor.c:652 +#: plug-ins/metadata/metadata-editor.c:659 msgid "Name" msgstr "名称" @@ -7328,51 +7344,51 @@ msgstr "球面设计器(_D)…" msgid "Create an image of a textured sphere" msgstr "创建一幅带纹理的球体图像" -#: plug-ins/common/sphere-designer.c:1830 -#: plug-ins/common/sphere-designer.c:2775 +#: plug-ins/common/sphere-designer.c:1835 +#: plug-ins/common/sphere-designer.c:2780 msgid "Texture" msgstr "纹理" -#: plug-ins/common/sphere-designer.c:1832 +#: plug-ins/common/sphere-designer.c:1837 msgid "Bumpmap" msgstr "凹凸映射" -#: plug-ins/common/sphere-designer.c:1834 -#: plug-ins/common/sphere-designer.c:2777 +#: plug-ins/common/sphere-designer.c:1839 +#: plug-ins/common/sphere-designer.c:2782 msgid "Light" msgstr "光线" -#: plug-ins/common/sphere-designer.c:2097 +#: plug-ins/common/sphere-designer.c:2102 #, c-format msgid "File '%s' is not a valid save file." msgstr "文件“%s”不是有效的保存文件。" -#: plug-ins/common/sphere-designer.c:2277 +#: plug-ins/common/sphere-designer.c:2282 msgid "Open File" msgstr "打开文件" -#: plug-ins/common/sphere-designer.c:2277 +#: plug-ins/common/sphere-designer.c:2282 msgid "Save File" msgstr "保存文件" -#: plug-ins/common/sphere-designer.c:2627 +#: plug-ins/common/sphere-designer.c:2632 msgid "Sphere Designer" msgstr "球面设计器" -#: plug-ins/common/sphere-designer.c:2728 +#: plug-ins/common/sphere-designer.c:2733 msgid "Layers" msgstr "图层" -#: plug-ins/common/sphere-designer.c:2739 +#: plug-ins/common/sphere-designer.c:2744 #: plug-ins/gradient-flare/gradient-flare.c:3045 msgid "_New" msgstr "新建(_N)" -#: plug-ins/common/sphere-designer.c:2745 +#: plug-ins/common/sphere-designer.c:2750 msgid "D_uplicate" msgstr "再制(_U)" -#: plug-ins/common/sphere-designer.c:2751 +#: plug-ins/common/sphere-designer.c:2756 #: plug-ins/fractal-explorer/fractal-explorer.c:887 #: plug-ins/fractal-explorer/fractal-explorer.c:1357 #: plug-ins/pikaressionist/presets.c:1067 @@ -7381,94 +7397,94 @@ msgstr "再制(_U)" msgid "_Delete" msgstr "删除(_D)" -#: plug-ins/common/sphere-designer.c:2761 +#: plug-ins/common/sphere-designer.c:2766 msgid "Properties" msgstr "属性" -#: plug-ins/common/sphere-designer.c:2776 +#: plug-ins/common/sphere-designer.c:2781 msgid "Bump" msgstr "凹凸" -#: plug-ins/common/sphere-designer.c:2784 +#: plug-ins/common/sphere-designer.c:2789 msgid "Type:" msgstr "类型:" -#: plug-ins/common/sphere-designer.c:2803 +#: plug-ins/common/sphere-designer.c:2808 msgid "Texture:" msgstr "纹理:" -#: plug-ins/common/sphere-designer.c:2808 +#: plug-ins/common/sphere-designer.c:2813 msgid "Colors:" msgstr "颜色:" -#: plug-ins/common/sphere-designer.c:2811 -#: plug-ins/common/sphere-designer.c:2822 +#: plug-ins/common/sphere-designer.c:2816 +#: plug-ins/common/sphere-designer.c:2827 msgid "Color Selection Dialog" msgstr "颜色选择对话框" #. Scale -#: plug-ins/common/sphere-designer.c:2833 plug-ins/pikaressionist/paper.c:191 -#: plug-ins/ifs-compose/ifs-compose.c:663 +#: plug-ins/common/sphere-designer.c:2838 plug-ins/pikaressionist/paper.c:191 +#: plug-ins/ifs-compose/ifs-compose.c:669 msgid "Scale:" msgstr "缩放:" -#: plug-ins/common/sphere-designer.c:2841 +#: plug-ins/common/sphere-designer.c:2846 msgid "Turbulence:" msgstr "湍流:" -#: plug-ins/common/sphere-designer.c:2849 +#: plug-ins/common/sphere-designer.c:2854 msgid "Amount:" msgstr "量值:" -#: plug-ins/common/sphere-designer.c:2856 +#: plug-ins/common/sphere-designer.c:2861 msgid "Exp.:" msgstr "指数:" -#: plug-ins/common/sphere-designer.c:2863 +#: plug-ins/common/sphere-designer.c:2868 msgid "Transformations" msgstr "变换" -#: plug-ins/common/sphere-designer.c:2877 +#: plug-ins/common/sphere-designer.c:2882 msgid "Scale X:" msgstr "缩放 X:" -#: plug-ins/common/sphere-designer.c:2885 +#: plug-ins/common/sphere-designer.c:2890 msgid "Scale Y:" msgstr "缩放 Y:" -#: plug-ins/common/sphere-designer.c:2893 +#: plug-ins/common/sphere-designer.c:2898 msgid "Scale Z:" msgstr "缩放 Z:" -#: plug-ins/common/sphere-designer.c:2904 +#: plug-ins/common/sphere-designer.c:2909 msgid "Rotate X:" msgstr "旋转 X:" -#: plug-ins/common/sphere-designer.c:2911 +#: plug-ins/common/sphere-designer.c:2916 msgid "Rotate Y:" msgstr "旋转 Y:" -#: plug-ins/common/sphere-designer.c:2918 +#: plug-ins/common/sphere-designer.c:2923 msgid "Rotate Z:" msgstr "旋转 Z:" -#: plug-ins/common/sphere-designer.c:2928 +#: plug-ins/common/sphere-designer.c:2933 msgid "Position X:" msgstr "位置 X:" -#: plug-ins/common/sphere-designer.c:2936 +#: plug-ins/common/sphere-designer.c:2941 msgid "Position Y:" msgstr "位置 Y:" -#: plug-ins/common/sphere-designer.c:2944 +#: plug-ins/common/sphere-designer.c:2949 msgid "Position Z:" msgstr "位置 Z:" -#: plug-ins/common/sphere-designer.c:3074 +#: plug-ins/common/sphere-designer.c:3079 msgid "Rendering sphere" msgstr "绘制球面" -#: plug-ins/common/sphere-designer.c:3193 +#: plug-ins/common/sphere-designer.c:3199 msgid "Region selected for plug-in is empty" msgstr "为插件选中的范围是空的" @@ -7518,7 +7534,7 @@ msgstr "小块平铺" #. Area for buttons etc #. Flip -#: plug-ins/common/tile-small.c:492 plug-ins/ifs-compose/ifs-compose.c:719 +#: plug-ins/common/tile-small.c:492 plug-ins/ifs-compose/ifs-compose.c:725 msgid "Flip" msgstr "翻转" @@ -7707,79 +7723,110 @@ msgstr "输入不完整" msgid "Please fill in all text fields." msgstr "请填写所有的文字区域。" -#: plug-ins/common/van-gogh-lic.c:632 plug-ins/common/van-gogh-lic.c:705 -msgid "Van Gogh (LIC)" -msgstr "梵高(LIC)" - -#: plug-ins/common/van-gogh-lic.c:731 -msgid "Effect Channel" -msgstr "效果通道" - -#: plug-ins/common/van-gogh-lic.c:737 -msgid "_Saturation" -msgstr "饱和度(_S)" - -#: plug-ins/common/van-gogh-lic.c:738 plug-ins/flame/flame.c:195 -#: plug-ins/flame/flame.c:210 plug-ins/flame/flame.c:220 -msgid "_Brightness" -msgstr "亮度(_B)" - -#: plug-ins/common/van-gogh-lic.c:744 -msgid "Effect Operator" -msgstr "效果操作" - -#: plug-ins/common/van-gogh-lic.c:749 -msgid "_Derivative" -msgstr "衍生(_D)" - -#: plug-ins/common/van-gogh-lic.c:750 -msgid "_Gradient" -msgstr "渐变(_G)" - -#: plug-ins/common/van-gogh-lic.c:756 -msgid "Convolve" -msgstr "卷积" - -#: plug-ins/common/van-gogh-lic.c:761 -msgid "_With white noise" -msgstr "与白噪点(_W)" - -#: plug-ins/common/van-gogh-lic.c:762 -msgid "W_ith source image" -msgstr "与源图像(_I)" - -#: plug-ins/common/van-gogh-lic.c:781 -msgid "_Effect image:" -msgstr "效果图像(_E):" - -#: plug-ins/common/van-gogh-lic.c:791 -msgid "_Filter length:" -msgstr "滤镜长度(_F):" - -#: plug-ins/common/van-gogh-lic.c:799 -msgid "_Noise magnitude:" -msgstr "噪点量级(_N):" - -#: plug-ins/common/van-gogh-lic.c:807 -msgid "In_tegration steps:" -msgstr "迭代次数(_T):" - -#: plug-ins/common/van-gogh-lic.c:814 -msgid "_Minimum value:" -msgstr "最小值(_M):" - -#: plug-ins/common/van-gogh-lic.c:821 -msgid "M_aximum value:" -msgstr "最大值(_A):" - -#: plug-ins/common/van-gogh-lic.c:878 +#: plug-ins/common/van-gogh-lic.c:144 msgid "_Van Gogh (LIC)..." msgstr "梵高(LIC)(_V)…" -#: plug-ins/common/van-gogh-lic.c:882 +#: plug-ins/common/van-gogh-lic.c:148 msgid "Special effects that nobody understands" msgstr "无人理解的特殊效果" +#: plug-ins/common/van-gogh-lic.c:158 +msgid "E_ffect Channel" +msgstr "效果通道(_F)" + +#: plug-ins/common/van-gogh-lic.c:159 +msgid "Effect Channel" +msgstr "效果通道" + +#: plug-ins/common/van-gogh-lic.c:162 +msgid "Brightness" +msgstr "亮度" + +#: plug-ins/common/van-gogh-lic.c:168 +msgid "Effect O_perator" +msgstr "效果操作(_P)" + +#: plug-ins/common/van-gogh-lic.c:169 +msgid "Effect Operator" +msgstr "效果操作" + +#: plug-ins/common/van-gogh-lic.c:170 +msgid "Derivative" +msgstr "衍生" + +#: plug-ins/common/van-gogh-lic.c:171 +msgid "Gradient" +msgstr "渐变" + +#: plug-ins/common/van-gogh-lic.c:177 +msgid "Con_volve" +msgstr "卷积(_V)" + +#: plug-ins/common/van-gogh-lic.c:178 +msgid "Convolve" +msgstr "卷积" + +#: plug-ins/common/van-gogh-lic.c:179 +msgid "With white noise" +msgstr "与白噪点" + +#: plug-ins/common/van-gogh-lic.c:180 +msgid "With source image" +msgstr "与源图像" + +#: plug-ins/common/van-gogh-lic.c:186 +msgid "Effect i_mage" +msgstr "效果图像(_M)" + +#: plug-ins/common/van-gogh-lic.c:187 +msgid "Effect image" +msgstr "效果图像" + +#: plug-ins/common/van-gogh-lic.c:192 +msgid "Fil_ter length" +msgstr "滤镜长度(_T)" + +#: plug-ins/common/van-gogh-lic.c:193 +msgid "Filter length" +msgstr "滤镜长度" + +#: plug-ins/common/van-gogh-lic.c:1